コマンドラインツール¶
UNIX系のコマンドラインツールをまとめます。
ファイルを扱う¶
ファイル名の操作¶
rename(perl版)¶
OS: debian系Linux(ほぼ標準), macOS(Homebrewで利用可)
ファイル名を変更するコマンドで、Perl系の正規表現でrenameできます。
ファイル名の拡張子直前の数字をゼロパディングしたい¶
たとえば、alfa_bravo-20220809-1.dat
というファイル名をalfa_bravo-20220809-01.dat
のように、拡張子直前の数字が一桁のときは0をパディングして数字二桁にしたいとします。
% rename 's/(.*-)(\d+).dat/sprintf("%s%02d.dat", $1, $2)/e' alfa_bravo-20220809-1.dat
お試し(Dry run)時は、-nオプションを指定
バイナリファイルの表示¶
hexdump¶
ファイルをバイナリおよび文字で表示します。
1バイトごとに表示し、対応する文字を右端に表示させる、おなじみの形式は、オプション -C
を指定します。
MacBook hash % hexdump -C greeting.txt 00000000 48 65 6c 6c 6f 2c 20 77 6f 72 6c 64 0a |Hello, world.| 0000000d
xdd¶
ファイルをバイナリ表示します。
1バイトごとに表示するオプション -g 1
を指定します。
MacBook hash % xxd -g 1 greeting.txt 00000000: 48 65 6c 6c 6f 2c 20 77 6f 72 6c 64 0a Hello, world.
od¶
ファイルをバイナリ表示します。
1バイトごとに16進表示するオプション -tx1
と、アドレスを16進表示するオプション -Ax
を指定します。
MacBook hash % od -Ax -tx1 greeting.txt 0000000 48 65 6c 6c 6f 2c 20 77 6f 72 6c 64 0a 000000d
バイナリに対応する文字の表示は、GNU系とBSD系でオプションと表示形式が異なります。
BSD系の文字表示¶
バイナリに対応する文字は、右端に表示はできませんが、バイナリ表示の下に表示させるオプション -c
があります。
BSD系の振る舞いとなり、GNU系のodと異なります。
MacBook hash % od -Ax -tx1c greeting.txt 0000000 48 65 6c 6c 6f 2c 20 77 6f 72 6c 64 0a H e l l o , w o r l d \n 000000d
ファイルを名前順に処理¶
ファイルの末尾の数字(alfa_1.txt, alfa_2.txt, ...)順に処理¶
% for f in $(ls alfa* | sort -V); do echo $f; done
通常の`ls`コマンドでは、数字が、1,2,3,..10,11,12のように桁が異なる場合に期待する順番に並べることができません。(1, 10, 11,12, 2, 3...のように並ぶ)
テキストファイルの処理¶
awk¶
ファイルの検索と処理¶
find¶
- findで指定した検索場所(パス)がシンボリックリンクの時、デフォルトではシンボリックリンク先を辿らないので意図した検索が働きません。-Hオプションでパスがシンボリックリンクの時にリンク先を辿るよう指定します。なお、リンク先にさらにシンボリックリンクがある場合、その先を辿りたい場合は-Hオプションではなく-Lオプションを指定します。
- -Hオプションではなく、パスの末尾に
/
を付ける方法もあります。
- -Hオプションではなく、パスの末尾に
findで指定した検索場所(パス)から一定期間アクセスのないファイルを検出する際、検索場所を除外¶
まず、検索場所を指定し、それ以下のディレクトリで30日以上前に修正があったものを抽出しようとしたfindです。
$ find ./work -type d -mtime +30 work work/alfa work/bravo work/charly
起点となるディレクトリ(~/work)も対象に含まれます(もしファイルの更新が指定期間なかったら)。
その場合、意図しない動作が発生します。
次のように、-mindepth 1を指定することで、起点となるディレクトリを除外することができます。
$ find ./work -mindepth 1 -type d -mtime +30 work/alfa work/bravo work/charly
atime/ctime/mtime¶
- atimeは最終アクセスなのでリード操作でもタイムスタンプが更新される
- ctimeはファイルの更新のほか属性変更のあった最終時刻なので、ライト操作、パーミッション変更操作でタイムスタンプが更新される
- mtimeはファイルの更新があった最終時刻なので、ライト操作でタイムスタンプが更新される
ネットワークを扱う¶
ネットワークの調査¶
netstat¶
ネットワークの接続、待ち受けの状況を調べるコマンドです。
オプションの使い方
- デフォルトは、接続済み(ESTABLISHED)のみ表示、
-l
接続待ち(LISTEN)のみ表示、-a
全ての状態を表示 - ホスト名の名前解決をしない
-n
: 名前解決の時間だけコマンドの結果が遅くなる - デフォルトは全てのプロトコルを表示、
-t
でTCPのみ表示、-u
でUDPのみ表示 - ポートを使用しているプログラム名を表示
-p