それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

exiftoolで画像の写真の向きやメタデータを修正する

exiftool を使えば、orientation を修正できる。

exiftool -Orientation=4 -n  IMG_2684.jpg

上記の例だと、Orieantationを4に設定することが出来る。

Orieantaionは表示に使われる。

画像データを反転させるのではなく、EXIFデータだけを反転させていることが重要。

フォトビューア系のアプリケーション( macOSX preview.app など )であれば、Orieantaionの指定に従って、「表示」するときに修正して表示してくれる。

以前は、rubyphpで修正したけど、exiftoolだけで出来たんですね。。。

WEBでやるなら、この数値を元にCSS transform に突っ込めばいいです。

orientaion 一覧

Orientation                     : Horizontal (normal)
Orientation                     : 1
Orientation                     : Mirror horizontal
Orientation                     : 2
Orientation                     : Rotate 180
Orientation                     : 3
Orientation                     : Mirror vertical
Orientation                     : 4
Orientation                     : Mirror horizontal and rotate 270 CW
Orientation                     : 5
Orientation                     : Rotate 90 CW
Orientation                     : 6
Orientation                     : Mirror horizontal and rotate 90 CW
Orientation                     : 7
Orientation                     : Rotate 270 CW
Orientation                     : 8

関連資料

http://takuya-1st.hatenablog.jp/entry/2013/03/20/215429

デジカメ写真の向きをCSSの回転に置き換える。exif orientation を transform へ - それマグで!

画像の写真の向きを修正する@PHP - それマグで!

identify 画像のexif情報を見る - それマグで!

m4a のタグ情報を表示する

mp4tags に含まれる、mp4info でファイル情報を表示する

takuya@Desktop$ mp4info ~/Music/iTunes/iTunes\ Media/Music/いきものがかり/いきものばかり\ ~メンバーズBESTセレクション~\ \[Disc\ 1\]/1-03\ 青春ライン.m4a
mp4info version 2.0.0
/Users/takuya/Music/iTunes/iTunes Media/Music/いきものがかり/いきものばかり ~メンバーズBESTセレクション~ [Disc 1]/1-03 青春ライン.m4a:
Track   Type    Info
1   audio   MPEG-4 AAC LC, 238.236 secs, 256 kbps, 44100 Hz
 Name: 青春ライン
 Artist: いきものがかり
 Composer: 水野良樹
 Encoded with: iTunes 10.7.0.21
 Release Date: 2010
 Album: いきものばかり ~メンバーズBESTセレクション~ [Disc 1]
 Track: 3 of 15
 Disk: 1 of 2
 Genre: Pop
 BPM: 0
 Part of Compilation: no
 Part of Gapless Album: no
 Lyrics:
つなぐ 想いを 夢の先まで春ラインを 僕らは今 走り出すよすよう戻らない

使い方

mp4info m4a_file

mp4info がない場合、ffmpeg で見れる。

ffmpeg もしくは ffprobe を使うことでファイルの情報を見れますね。

インストール方法

brew install mp4v2

関連資料

mp4tags で、動画のアーティスト情報を書換えて、iTunesのミュージックビデオの仕分けをちゃんとする - それマグで!

sslh でport443 を有効活用して、sshもhttpsも同時に待ち受けする。

443ポート以外が絶滅しそうです

あちこちでポートは閉じられています。ssh や sftp もプロキシ利用も、各種ポートでは、全く外部に出れず、接続できないネットワークが多いです。

TCP/IPなのにIPとポートを使った通信ができない、壊れたネットワークが当然になりました。

これらの接続制限にとても不便を感じることが多いです。

サーバー管理者の気分一つでポートが空いたり閉じたり、私が触ってたネットワークではポリシーが統一されず、クソネットワーク管理者に振り回されて、動くはずのものが動かず、不便なことが多かったのです。そこで仕方なく443を使っています。

私達が利用する端末では80/443 のポートの外部接続が閉じられることは少なく、443であれば通信できます。

そのため、443ポートに様々なアプリケーションを起動していると思います。

443 ポートとIPアドレスが枯渇する・・・

よほどのGWでない限り443は通してくれるので、443ですべての通信を行うことになります。

443 で接続したいアプリがあるたびにIPアドレスを増やす羽目になります。

かといって、手軽にIPv4アドレスを増やすのは難しく、しかしNATでは対応ができず。

443接続の中身を元に、プロトコル毎に転送出来たらイイなと思っていました

HTTPSだけであれば、443 ポートで複数のドメインホスティングするのはSNIの技術で回避できるとしても、443 でssh を待ち受けると、https が足りなくなります。

sshhttps を同時に待ち受けしたい。

sshhttps を443 ポートで同時に待ち受けしできたら問題解決なんです。

そのような夢のソフトウェアはあるのでしょうか。

ありました。 socks プロキシだけだと思ってたら、同時に待ち受けできる内部フォーワーダがありました。

sslh の導入

sslh はマルチプレクサ、つまり、クライアントの通信プロトコル毎に対応するアプリケーション(IP/ポート)に転送してくれる夢のようなアプリケーションです。

sslh の効果

sslh を 443 ポートで待ち受けさせておき、 ssh の通信は22/TCP へ転送、HTTPS の通信は443/TCPへ転送ができます。

443 ポートで通信内容に基づく振り分けができるのです。高レベルなレイヤでのルーティングですね。

f:id:takuya_1st:20161014151145j:plain (通信プロトコルで判別し転送)

このように443ポートで、ssh/httpの同時利用が出来てしまうのです!!(驚)

感激です。

sslh のインストール

debian 系の場合は、とてもカンタンです。

sudo apt install sslh 

ほぼずっと使うので、スタンドアロンで起動するのが無難です。

sslh の起動

起動と終了は、systemd 経由でunit 化されているのでカンタンでした。

# systemctl start sslh

inetd 経由の場合はinetd で自動起動されるのであまり考えなくていいですね。

sslh の設定

設定ファイルは、/etc/default の中にあります。

# ls -l /etc/default/sslh
-rw-r--r-- 1 root root 715 2016-10-14 14:02 /etc/default/sslh

設定の考えかた。

外部向けの 443 ポートで待受して、内部向けの ポートに転送する。

https が転送されるときはこんな感じになります。

https client ====> 192.168.11.11:443 ( sslh ) ----(転送)---- > 127.0.0.1:443

ssh が転送されるときはこんな感じになります。

ssh client =====> 192.168.11.11:443 ( sslh ) ----(転送)----- > 127.0.0.1:22

443 ポートがゲートウェイ

転送先はTCP/IPで指定すればいいみたいなので、443 ゲートウェイとしても使えますね。

もし他に443 ポートを待ち受けているDaemonがあれば、それは解除の必要があります。

私の場合はApachehttpsで443を利用しており、apache の Listen から 外部:443 を除外して localhost:443 に絞りました。

apache の443を解除して localhost に絞る例

apache の 443 ポートは次のように書き換えました。

/etc/apache2/ports.conf 編集前

# 
Listen 80
<IfModule ssl_module>
    Listen 443
</IfModule>

編集後

# 
Listen 80
<IfModule ssl_module>
    Listen localhost:443
</IfModule>

sslh を転送するように設定。

外部IPからの443をlocalhost の 443/ 22 に転送するように設定しました。

設定ファイルのサンプル

/etc/default/sslh

DAEMON_OPTS="--user sslh --listen 192.168.11.11:443 --ssh 127.0.0.1:22 --ssl 127.0.0.1:443 --pidfile /var/run/sslh/sslh.pid"

これで再起動して確認します。

接続の確認

ssh の疎通確認

ssh 192.168.11.11 -p443

httpsの疎通確認

curl https://192.168.11.11 -k 

これで完成です。

貴重な443ポートの有効活用

コマンドのオプションを見れば分かるんですが。

ssh / http 以外にも幾つか対応しています。

takuya@:~$ sslh -h
sslh: option '--http' requires an argument
sslh 1.16-2
usage:
    sslh  [-v] [-i] [-V] [-f] [-n] [-F <file>]
    [-t <timeout>] [-P <pidfile>] -u <username> -p <add> [-p <addr> ...]
    [--ssh <addr>]
    [--openvpn <addr>]
    [--tinc <addr>]
    [--xmpp <addr>]
    [--http <addr>]
    [--ssl <addr>]
    [--tls <addr>]
    [--anyprot <addr>]


    [--on-timeout <addr>]
-v: verbose
-V: version
-f: foreground
-n: numeric output
-F: use configuration file
--on-timeout: connect to specified address upon timeout (default: ssh address)
-t: seconds to wait before connecting to --on-timeout address.
-p: address and port to listen on.
    Can be used several times to bind to several addresses.
--[ssh,ssl,...]: where to connect connections from corresponding protocol.
-F: specify a configuration file
-P: PID file.
-i: Run as a inetd service.

設定ファイルを読み込ませる場合

設定ファイル使うと、/etc/default より管理が楽になります。

/etc/default/sslh

##設定ファイルを-F で指定しておきます。
DAEMON_OPTS="--user sslh -F /etc/sslh --pidfile /var/run/sslh/sslh.pid"

/etc/sslh

listen: (
   {  
    host : "192.168.11.11";
    port :443 
    }
);

protocols: (
    {name: "ssh" ; host: "127.0.0.1";  port: "22" ;},
    {name: "http" ; host: "127.0.0.1";  port: "443"; },
)

443ポートは貴重

IPv4の ポート 443 は今はインターネットそのものになりつつあります。全ての通信が443ポートでおこなわれつつあるとおもっています。

443ポートでVPNを貼ったりssh したりSocksProxy作ったり通信内容を見られないというのはとても重要なファクタに成りつつあります。

感謝

私の長年の悪夢に素晴らしい解決方法を教えてくれた OpenSSH 実践入門にはほんとうに感謝です。

参考資料

http://www.rutschle.net/tech/sslh.shtml

https://github.com/yrutschle/sslh

追記

グーグルで、sslh で検索すると sshにキーワードを修正して検索結果が表示されました。 google さんはマジもう消えていいと思いました。

2016/10/20 追記

私は httpsssh を同時に使いたいので sslh を使うことにしました。

が、単純に443でssh を待ち受けるだけなら、不要です。

sshd_config だけで可能です。

こちらを参照→発見、sshd の待ち受けポートは二つ書けた!!! - それマグで!

あと、sslh は systemd で起動するので、sslh がダウンしてもsystemd 側が面倒見てくれるはず。

bash の展開機能をクールに使って、ファイルのバックアップのコピーを楽チンにする

bash には {} の展開機能があります。

これがものすごく便利ですよね。

1〜10までの連番を作る

たとえば連番を作る

$ echo {1..10}
1 2 3 4 5 6 7 8 9 10

ゼロ埋めで、連番を作る

$ echo {001..10}
001 002 003 004 005 006 007 008 009 010

展開をする。

その他に、複数の展開が可能なんですね。

$ echo hoge.{a,b,c}.txt
hoge.a.txt hoge.b.txt hoge.c.txt

展開を組み合わて、ファイル名をぱぱっとコピーする

そもそも、なんどもファイル名を入力するの面倒じゃないですか。

そこで、bashの展開を使ってファイルをコピーする

サンプルファイルを作る

$ touch sample.txt

これをコピーする

$ cp sample.{txt,back}

この記述は、以下のように、コマンド実行前にbashに依り展開されます。

$ cp sample.txt sample.back

ファイル名をぱぱっと記述するにはとってもクールだと思いませんか。

つまり、ファイルをコピーには、{} 展開 が便利です

$ cp sample.{txt,back}

元ファイル名は省略できる

拡張子を変えるだけに、元のファイル名を入力するのは不便すぎる。

そういうときは、省略してしまえばイイ。

$ echo sample.txt{,.back}
sample.txt sample.txt.back

拡張子の前に、名前をつける

元ファイル名を省略する方法と組み合わせて戦う。

この方法だと、拡張子の前に名前を挿入するのもカンタン。

echo sample{,.back}.txt
sample.txt sample.back.txt

さらに、コマンド呼び出しと組み合わせる

$ echo hoge{,$(date -I)}.txt
hoge.txt hoge2016-10-13.txt

ほら、日付を付けたバックアップファイル作成もスッキリ記述できる。

展開機能は知ってたけど、ナニに使っていいか未だによくわかってなかったので目からうろこでした。

ログインでサーバーにお祈りを送信するスピリチュアル・公開鍵作成し使う。

強い信念で、ありがとうを送信する。

強い信念で、サーバーへありがとうを送信するための、専用の公開鍵を作成する。

スピリチュアルな秘密鍵と公開鍵のペアでログイン。

スピリチュアルな秘密鍵でログインすると、サーバーで お祈り できる専用の鍵ペアを作ろうと思います。

sshのauthorized_keys には コマンド実行の機能のがあるので。

authorized_keys のssh-rsa の前に command を書くと、実行ができるので。

公開鍵の先頭にスピリチュアルメッセージを記述する

command="echo 上手く動きますように " ssh-rsa  AABIwAAAQEA4pJgjWmRfoAZ6Ippi

これを、authorized_keys に登録する

ssh-copy-id spritual-id_rsa.pub server

この鍵を使って、サーバーにログインする。

ssh server -i spritual-id_rsa

すると、サーバーにありがとうを送ることが出来る。コレできっと貴方のプロジェクトもうまくいく。

お祈りして、お清めをしたシェルを起動する。

さすがに、ssh でシェルが使えないと不便。 サーバーにお祈りを送った後にbash を起動して、お祈りをした清い身体のまま、厳粛な気持ちでシェルを叩くようにしておく。

command="echo 上手く動きますように; bash" ssh-rsa  AABIwAAAQEA4pJgjWmRfoAZ6Ippi

参考資料

authorized_keys ファイルについて調べてみたら楽しかった. - それマグで!

ssh ログイン・メッセージをランダムに表示する motdのカスタマイズ - それマグで!

画像の縦横サイズを取得するコマンド

コマンド identify で画像のサイズを取得できる。

identify -format "%w x %h\n"  test.jpg

よく使うので alias にすると便利

alias  image_size='identify -format "%w x %h\n" '

縦横幅を直接取りたいので、高さと長さもalias にしておくと便利かもしれない。

alias  image_width='identify -format "%w\n" '
alias  image_height='identify -format "%h\n" '

identify コマンド便利ですね

identify コマンドでアレコレ取得できるので便利ですね。gps 情報もとれますよね。json にformat すれば、jq と併せて戦えそうです。

identify -format " \'{ 
 \"lat\" : \"%[Exif:GPSLatitude]\" ,
 \"lon\" : \"%[Exif:GPSLongitude]\" ,
 \"lat_ref\" : \"%[Exif:GPSLatitudeRef]\",
 \"lon_ref\" : \"%[Exif:GPSLongitudeRef]\",
 \"orientation\" : \"%[exif:Orientation]\" 
 }\' \n" 

identify は便利だけど使い方を忘れるので、alias にしておいたほうが良いんじゃないかと思います。

関連資料

http://takuya-1st.hatenablog.jp/entry/2014/12/17/185622

linux が SSDを使っているか確認する。

SSDかどうかを確認するには、 hdparm を見ればいいと思ってた。 もっと手早い方法を知ったのでメモしておきます。

SSD は HDD かを判別する方法

sda が HDD sdb がSSD です。

HDDの場合

takuya@:~$ cat /sys/block/sda/queue/rotational
1

SSDの場合

takuya@:~$ cat /sys/block/sdb/queue/rotational
0

HDD の場合は1が、SSDの場合は0が戻って来ます。/sys ファイルシステム便利ですね。

debian で ssd の trim をする設定

サーバーのストレージを ssd にしました。

SSDに変えると気になるのが trim の実行タイミングです。 ナニも考えたくないので、自動でtrim されるようにします。

trim 対応かどうか調べる

takuya@:~$ sudo hdparm -I /dev/sdb | grep -i trim
       *    Data Set Management TRIM supported (limit 8 blocks)
       *    Deterministic read ZEROs after TRIM

fstab で dscard する。

fstab のマウントオプションにdiscard を書くだけ。

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system>                            <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/sdb6 during installation
UUID=xxxxxxxxxxxxxxxxxxxxxxxxx /                  ext4    noatime,nodiratime,discard 0       1
UUID=yyyyyyyyyyyyyyyyyyyyyyyy /home           ext4    noatime,nodiratime,discard 0       2

これは1番簡単な方法。

マニュアルでtrimをするには

fstrim コマンドを使います。

takuya@:~$ sudo fstrim -v  /
/: 25.6 GiB (27524313088 バイト) を discard しました
takuya@:~$ sudo fstrim -v  /home
/home: 21.3 GiB (22891864064 バイト) を discard しました

discard してマウントしてますが、マニュアルでdiscardすると、結果は0バイトじゃないんですよね。

定期的に cron で fstrim したほうが良さそうです。

2016-10-20 追記

ArchLinux の記事を読むと

Warning: Unfortunately, there are wide quality gaps of SSD's bios' to perform continuous TRIM, which is also why using the discard mount flag is recommended against generally by filesystem developer Theodore Ts'o. If in doubt about your hardware, apply #Periodic TRIM instead.

SSD のチップに乗ってるBIOSによって discard によるTRIM命令実行にすごく差異があり、そのためとりあえず、mount discard をしておくのが無難だとファイルシステム作成者がブログで書いてたらしい。もしSSDのメーカー実装に疑念があるなら定期的なfstrim をした方がいいよ。

ってことらしい。また、古い世代のssdだとまた実装が異なるらしい。あとSATA3.1 以前のモデルはtrimがデバイスへsync される同期実行なので、trim中はプチフリするよ。って書いてあった。

なので、discard をしておいて、SSDのメーカ実装に任せたほうが無難ってことなのでしょうね。

ArchLinuxの記事に他には、定期的な実行はsystemdのjobにしてるとも書いてた。今時はcronじゃないんだね。

参考資料

https://def-4.com/debian_ssd_trim/

Linuxマシンのマザーボードの型番を調べる

dmidecode コマンドでBIOSなどハード情報がわかる。

takuya@debian:~$ sudo dmidecode -t baseboard
# dmidecode 2.12
SMBIOS 2.5 present.

Handle 0x0008, DMI type 2, 15 bytes
Base Board Information
        Manufacturer: Oracle Corporation
        Product Name: VirtualBox
        Version: 1.2
        Serial Number: 0
        Asset Tag: Not Specified
        Features:
                Board is a hosting board
        Location In Chassis: Not Specified
        Chassis Handle: 0x0003
        Type: Motherboard
        Contained Object Handles: 0

Virtualbox仮想マシンだと、わかること少ないですね。そりゃそうか

実マシンの場合は、もう少しアレコレわかる。

takuya@:~$ sudo dmidecode -t baseboard
# dmidecode 2.12
SMBIOS 2.8 present.

Handle 0x0002, DMI type 2, 15 bytes
Base Board Information
    Manufacturer: Gigabyte Technology Co., Ltd.
    Product Name: H170M-D3H DDR3-CF
    Version: x.x
    Serial Number: To be filled by O.E.M.
    Asset Tag: To be filled by O.E.M.
    Features:
        Board is a hosting board
        Board is replaceable
    Location In Chassis: To be filled by O.E.M.
    Chassis Handle: 0x0003
    Type: Motherboard
    Contained Object Handles: 0

Handle 0x0021, DMI type 10, 6 bytes
On Board Device Information
    Type: Video
    Status: Enabled
    Description:    To Be Filled By O.E.M.

Handle 0x003A, DMI type 41, 11 bytes
Onboard Device
    Reference Designation:  Onboard IGD
    Type: Video
    Status: Enabled
    Type Instance: 1
    Bus Address: 0000:00:02.0

Handle 0x003B, DMI type 41, 11 bytes
Onboard Device
    Reference Designation:  Onboard LAN
    Type: Ethernet
    Status: Enabled
    Type Instance: 1
    Bus Address: 0000:00:19.0

Handle 0x003C, DMI type 41, 11 bytes
Onboard Device
    Reference Designation:  Onboard 1394
    Type: Other
    Status: Enabled
    Type Instance: 1
    Bus Address: 0000:03:1c.2

メーカーと型番までわかるの便利ですね。

この情報はドコから取ってるんだろう。。。

Linuxの物理マシンに刺さってるメモリの本数やサイズを調べる方法

メモリに何本メモリがささってる?

この物理マシンってメモリ何枚ささってるのさ。リブートしてBIOSを見れば解決します。しかしリブートはそんなに手軽じゃない。

では、ハードの情報を調べる事はできないのか。WindowsならBIOS情報を見る方法があるんじゃないかと調べた。

BIOS情報が見れるdmidecode

dmidecode のコマンドでBIOS情報が見られる。

sudo dmidecode 

メモリの情報を見るには -t memory

takuya@:~$ sudo dmidecode -t memory

これでメモリの情報が見られる。

メモリの本数を見る

grep して wc すれば分かりそう

sudo dmidecode -t memory | grep 'Memory Device' | wc -l

メモリの容量を見る

takuya@:~$ sudo dmidecode -t memory | grep 'Size'
    Size: 4096 MB
    Size: 4096 MB
    Size: 4096 MB
    Size: 4096 MB

よく使いそうな各種情報を取出す。

takuya@:~$ sudo dmidecode -t memory | grep -E  'Bank Locator|Size| DDR| SPEED'
    Size: 4096 MB
    Bank Locator: BANK 0
    Type: DDR3
    Configured Clock Speed: 1333 MHz
    Size: 4096 MB
    Bank Locator: BANK 1
    Type: DDR3
    Configured Clock Speed: 1333 MHz
    Size: 4096 MB
    Bank Locator: BANK 2
    Type: DDR3
    Configured Clock Speed: 1333 MHz
    Size: 4096 MB
    Bank Locator: BANK 3
    Type: DDR3
    Configured Clock Speed: 1333 MHz

メモリ情報でわかること

DDR3 か DDR4 かどうか

メモリのサイズ

どのBANKにささってるか。

などなど

BIOS 情報を見ると便利

takuya@:~$ sudo dmidecode -t
dmidecode: option requires an argument -- 't'
Type number or keyword expected
Valid type keywords are:
  bios
  system
  baseboard
  chassis
  processor
  memory
  cache
  connector
  slot

ボードのバージョンも型番もわかるよ。

Raspi で 各種 tube 動画を見る

テレビに繋いだRaspiでyoutube を再生したい。

RaspiでもKODI (XBMC)を使えば手軽に動画を見られるんだけど、SSH経由やWEB経由で動画のURLを指定して、ぱぱっと再生したいですよね。

omxplayer は パイプを受け付けてくれないのでちょっとしたトリックが必要

youtube-dl コマンドと組み合わせて戦う。

omxplayer $( youtube-dl  -g $URL )

先に $() でWEBのURLから、 -g オプションをつけて、動画URLを取り出し、その結果を omxplayer に渡している。

今のところ、この方法が1番良さそう

追記 mp4にしないと見れなさそうなので mp4にすることにした

#!/usr/bin/env bash
URL=$1
list=$( youtube-dl -f mp4  -g $URL );


for i in $list ; do
  echo $i
  omxplayer "$i"
done

convert でサイズの余白を背景で埋める.

画像を正方形に揃えるときに余白が出るよね。

余白を背景色で埋めた画像を作りたい時があります。CSSで揃えてもイイでしょうが余白入れたほうが楽だよね。

SlackやTwitterプロフィール画像なども処理したいですよね。

convert で直ぐ終わりますね。

convert input.jpg\
 -thumbnail 400x400\
  -background blue\
  -gravity center\
 -extent 400x400\
out.jpg

または

convert input.png \
  -resize 400x400\
  -size 400x400\
  xc:orange\
  -gravity center\
  -composite \
out.jpg

幾つかやり方がありそうですが、何方が速度的画質的に有利かどうか、あとで調べないとダメね

2017-02-09 追記

この例は元サイズが大きい時を前提にしているので、単に余白を付けて画像を配置したいだけなら

convert input.jpg\
  -background blue\
  -gravity center\
 -extent 400x400\
out.jpg

で樹分だと思う

IPv6 での定番ネットワークコマンド(dig/nmap/curl/ip、そしてtcpdump)

更新履歴

  • 2016-10-13 追記 dig のときのついて追記
  • 2019-05-04 追記 dig DNS aaaa について追記
  • 2019-09-13 追記 curltcpdump

IPv6 では通常のコマンドと若干ちがう

curl / http

curl http://127.0.0.1/ #v4
curl http://[::1]          #v6
curl -6  http://example.com   #v6

IPv6でHTTPのアドレスを指定するときは、ブラケットで指定する。

WEBでホームページを閲覧するときもブラケットです。

curl http://[2404:6800:400a:807::2003]/ #google.co.jp
open -a Safari.app http://[2404:6800:400a:807::2003]/

curl の場合、 -6 をつけると、v6 でアドレス解決する。

curl -6  http://example.com #v6

nmap でのipv6

nmap では 引数をつける

nmap -6 ::1

pingipv6

ping6 ::1

最近のlinuxping は賢いので ping ::1 のようにIPv6 アドレスを引数に入れるだけで v6 でping を送ってくれる。

dig

dig example.jp aaaa

v6 のアドレスを引くためには AAAA を指定する。

v6 のDNSサーバーを指定すると@の後に指定すればイイはずなんだ。ただ動かない。

dig をipv6(aaaa)で調べるときの注意

dig でIPv6 が引けない場合。

DNSの問合先が IPv6非対応のプロキシDNSの場合。つまりルーターDNSプロキシ機能などが非対応の場合などが考えられる。またプロバイダやフレッツ光HGWが勝手にIPv6の問い合わせを削除して応答している場合などがある。

このような場合は、確実にIPv6を教えてくれる 8.8.8.8 を問い合わせ先に指定する。指定して使うことで確実な回答が得られる。

dig google.co.jp AAAA @8.8.8.8 

DNSの問い合わせるサーバーを指定しましょう。

DNS問い合わせをIPv6で問い合わせる

8.8.8.8 はv4指定なので、v4 経路でv6 アドレスを問い合わせているので、問い合わせもv6 でやる場合。

dig example.com @2001:4860:4860::8888

traceroute

traceroute6 2001:4860:4860::8888

これは6をつける。

ip コマンド

 ip      addr show br0   # v4/v6 両方
 ip -6 addr show br0   # v6 のみ
 ip -4 addr show br0   # v4 のみ

ip コマンドはv4/v6両方表示されるのでソレだけだと思ったら、調べたらv6のみを表示することが出来る。

ifconfig

ifconfig br0 | grep inet6

ifconfig はv6 ようのものがないのでgrep するしかない。

tcpdump

tcpdumpipv6 パケットだけを表示するためには

tcpdump -v ip6 

tcpdump で ICMP6 の近傍探索を知りたいときは

tcpdump icmp6

ssh のポート転送

ssh -L 8080:[123:xxxx:xxx]:80 

移行期だろうから統一性に欠ける

覚えておかないとぱぱっと使えないわ・・・

2019-10-30追加

ssh

zipruby でファイルを経由せずに変数内だけでzip ファイルを作る

zip ruby には buffer モードが有る。

zipruby をそのまま使うと、一時ファイルを作って出力先にzip を用意しなくちゃいけないので、tmpfile などと組み合わせる必要がるけど、変数だけでメモリ内部でぱぱっと作れないのか調べた。

ruby-zip-in-memory-sample.rb

#!/usr/bin/env ruby
#
require 'zipruby'

zip_bin = '' # ここにzipのバイナリが入ってくる

Zip::Archive.open_buffer(zip_bin){|ar|

  ar.add_buffer('sample.txt', "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n")
}

## 確認用にファイルに書き出す。
open('out.zip','w'){|f|  f.write zip_bin }

実際に使ってみる

実行すると無事に zip ファイルが生成される。

takuya@~/Desktop/$ ruby  ruby-zip-in-memory-sample.rb
takuya@~/Desktop/$ ll
-rw-r--r-- 1 takuya staff     123 2016-09-26 01:20 out.zip
-rw-r--r-- 1 takuya staff     206 2016-09-26 01:20 ruby-zip-in-memory-sample.rb

ちゃんとzip が出来ているか確認する。

takuya@~/Desktop/$ lsar out.zip
out.zip: Zip
sample.txt

展開して中身を確認

takuya@~/Desktop/$ unar out.zip
out.zip: Zip
  sample.txt  (30 B)... OK.
Successfully extracted to "./sample.txt".

takuya@~/Desktop/$ cat sample.txt
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

ファイルを使わずにzip アーカイブを作れることがわかった。

zip アーカイブを作ってresponseするのに毎回ファイルに書いているのもダルいしね。ウッかりとファイルが残ってしまうのも嫌だし。

参考資料

http://www.rubydoc.info/gems/zipruby/0.3.6

文字列を逆順にするコマンド rev/ 行を逆さに並べる tac

文字列を逆順にするコマンド。

ls の結果が長くて逆順に出したいと起動するか。たぶん最初に習ってるはずなんだけどよく忘れるんだよね。

tac コマンド。

tac コマンドは、cat の逆だからtac 覚えやすい。覚えやすいのにめったに使わないから忘れるw

tac コマンドで入力行を逆順に出すことが出来る。

どういうときに便利なの?

ls -l などの結果でファイル名順に並ぶけど、日付順に並ばないとかのときに便利。

ファイルのタイムスタンプが全部おなじになっちゃって、ファイル名に含まれる日付で並べなくちゃいけないときなど。しかもリスト表示すると sort 使えないというようなとき

takuya@ log $ ls -l | tac | head 
-rw-r--r-- 1 takuya takuya   40627  4月 16  2015 zip2mobi.log.20141013
-rw-r--r-- 1 takuya takuya   61340  4月 16  2015 zip2mobi.log.20140912
-rw-r--r-- 1 takuya takuya   35899  4月 16  2015 zip2mobi.log.20140831
-rw-r--r-- 1 takuya takuya   23630  4月 16  2015 zip2mobi.log.20140810
-rw-r--r-- 1 takuya takuya   38588  4月 16  2015 zip2mobi.log.20140802

文字列を逆にする rev

rev コマンドで文字列を1行ずつ逆にすることが出来る。 いまのところ何に使うか全く見当がつかない。

takuya@ log $ ls -l | tac | head | rev
31014102.gol.ibom2piz 5102  61 月4  72604   ayukat ayukat 1 --r--r-wr-
21904102.gol.ibom2piz 5102  61 月4  04316   ayukat ayukat 1 --r--r-wr-
13804102.gol.ibom2piz 5102  61 月4  99853   ayukat ayukat 1 --r--r-wr-
01804102.gol.ibom2piz 5102  61 月4  03632   ayukat ayukat 1 --r--r-wr-
20804102.gol.ibom2piz 5102  61 月4  88583   ayukat ayukat 1 --r--r-wr-

tac / rev と banner コマンドを組み合わせて遊ぶ

rev 何に使えるか全く想像付かないので、少し調べたら banner コマンドと合わてあそぶと楽しそうな例が紹介されてた

私もヤってみた

banner コマンドのインストール

sudo apt install sysvbanner

banner コマンドとrev / cat で遊びます。

takuya@:~$ banner  osaka

  ####    ####     ##    #    #    ##
 #    #  #        #  #   #   #    #  #
 #    #   ####   #    #  ####    #    #
 #    #       #  ######  #  #    ######
 #    #  #    #  #    #  #   #   #    #
  ####    ####   #    #  #    #  #    #

takuya@:~$ banner  osaka| tac

  ####    ####   #    #  #    #  #    #
 #    #  #    #  #    #  #   #   #    #
 #    #       #  ######  #  #    ######
 #    #   ####   #    #  ####    #    #
 #    #  #        #  #   #   #    #  #
  ####    ####     ##    #    #    ##

takuya@:~$ banner  osaka| tac| rev

#    #  #    #  #    #   ####    ####
#    #   #   #  #    #  #    #  #    #
######    #  #  ######  #       #    #
#    #    ####  #    #   ####   #    #
#  #    #   #   #  #        #  #    #
##    #    #    ##     ####    ####

takuya@:~$ banner  osaka| rev

##    #    #    ##     ####    ####
#  #    #   #   #  #        #  #    #
#    #    ####  #    #   ####   #    #
######    #  #  ######  #       #    #
#    #   #   #  #    #  #    #  #    #
#    #  #    #  #    #   ####    ####

takuya@:~$ banner  osaka| rev| tac

#    #  #    #  #    #   ####    ####
#    #   #   #  #    #  #    #  #    #
######    #  #  ######  #       #    #
#    #    ####  #    #   ####   #    #
#  #    #   #   #  #        #  #    #
##    #    #    ##     ####    ####

これってbanner コマンドが便利なだけじゃ・・・

参考資料

しげふみメモ : Linuxのrevコマンドで文字を逆に並べる