便利でいいかんじなシェル芸をご紹介します。
LinuxやUnixって奥が深いですね!
でコマンドをくくる
`` でコマンドをくくってやると、その中のコマンドを実行し、 そのコマンドが標準出力に出力した内容が結果となります。
タイムスタンプぺっちょりと貼り付けたい時とか使える。
# cp /usr/local/apache2/conf/httpd.conf /usr/local/apache2/conf/httpd.conf.`date +%F`
# ls -al /usr/local/apache2/conf/
total 116
drwxr-xr-x 6 root root 4096 Mar 21 15:50 .
drwx------ 16 apache apache 4096 Jan 14 06:49 ..
drwxr-xr-x 2 root root 4096 Jan 14 13:22 extra
-rw-r--r-- 1 root root 5809 Feb 24 10:06 httpd.conf
-rw-r--r-- 1 root root 5809 Mar 21 15:50 httpd.conf.2015-03-21
これは有名ですね。
第二引数に第一引数の値を入れる
第二引数を第一引数+任意の文字
としたい場合には以下のようにする。
command Line{,char}
バックアップ取りたい時とかよさ気。
# cp /usr/local/apache2/conf/original/httpd.conf{,.backup}
# ls -al /usr/local/apache2/conf/original/
total 60
drwxr-xr-x 3 root root 4096 Mar 21 16:02 .
drwxr-xr-x 6 root root 4096 Mar 21 15:50 ..
drwxr-xr-x 2 root root 4096 Sep 20 2012 extra
-rw-r--r-- 1 root root 15032 Jan 14 10:23 httpd.conf
-rw-r--r-- 1 root root 15032 Mar 21 15:58 httpd.conf.backup
``くくり技も一緒に使える
# cp /usr/local/apache2/conf/original/httpd.conf{,.`date +%F`}
# ls -al /usr/local/apache2/conf/original/
total 44
drwxr-xr-x 3 root root 4096 Mar 21 15:59 .
drwxr-xr-x 6 root root 4096 Mar 21 15:50 ..
drwxr-xr-x 2 root root 4096 Sep 20 2012 extra
-rw-r--r-- 1 root root 15032 Jan 14 10:23 httpd.conf
-rw-r--r-- 1 root root 15032 Mar 21 15:59 httpd.conf.2015-03-21
何かスマートでかっこ良くないですか?笑
コマンドの標準出力のdiffを取る
記法 <(...) を使うとサブシェルの出力が 名前付きパイプにつながるので一時ファイルを作らなくてもdiffがとれる。
ソートして比較とか、CSVの見出し行を比較したい時とか便利すぎてションベンちびるかと思った。
diff <(command_A) <(command_B)
全く実用的な例じゃないけど、こんなかんじになります。笑
# diff <(ls -l /www/bacchi.me/logs/2014/02/) <(ls -l /www/bacchi.me/logs/2015/02/)
1,25c1,29
< total 484
< -rw-r--r-- 1 root root 80 Feb 2 2014 access_log.02
< -rw-r--r-- 1 root root 30 Feb 3 2014 access_log.03
< -rw-r--r-- 1 root root 20 Feb 4 2014 access_log.04
< -rw-r--r-- 1 root root 60 Feb 5 2014 access_log.05
< -rw-r--r-- 1 root root 20 Feb 6 2014 access_log.06
< -rw-r--r-- 1 root root 1057 Feb 7 2014 access_log.07
< -rw-r--r-- 1 root root 946 Feb 8 2014 access_log.08
< -rw-r--r-- 1 root root 678 Feb 9 2014 access_log.09
< -rw-r--r-- 1 root root 45475 Feb 10 2014 access_log.10
< -rw-r--r-- 1 root root 1502 Feb 11 2014 access_log.11
< -rw-r--r-- 1 root root 9726 Feb 12 2014 access_log.12
< -rw-r--r-- 1 root root 4198 Feb 13 2014 access_log.13
< -rw-r--r-- 1 root root 17892 Feb 14 2014 access_log.14
< -rw-r--r-- 1 root root 73732 Feb 18 2014 access_log.18
< -rw-r--r-- 1 root root 76409 Feb 19 2014 access_log.19
< -rw-r--r-- 1 root root 160510 Feb 20 2014 access_log.20
< -rw-r--r-- 1 root root 3852 Feb 21 2014 access_log.21
< -rw-r--r-- 1 root root 274 Feb 22 2014 access_log.22
< -rw-r--r-- 1 root root 515 Feb 23 2014 access_log.23
< -rw-r--r-- 1 root root 5184 Feb 24 2014 access_log.24
< -rw-r--r-- 1 root root 4033 Feb 25 2014 access_log.25
< -rw-r--r-- 1 root root 2055 Feb 26 2014 access_log.26
< -rw-r--r-- 1 root root 1168 Feb 27 2014 access_log.27
total 28336
> -rw-r--r-- 1 root root 5737560 Feb 1 23:59 access_log.01
> -rw-r--r-- 1 root root 5246962 Feb 2 23:54 access_log.02
> -rw-r--r-- 1 root root 578086 Feb 3 23:58 access_log.03
> -rw-r--r-- 1 root root 719239 Feb 4 23:57 access_log.04
> -rw-r--r-- 1 root root 989370 Feb 5 23:59 access_log.05
> -rw-r--r-- 1 root root 843059 Feb 6 23:57 access_log.06
> -rw-r--r-- 1 root root 680409 Feb 7 23:59 access_log.07
> -rw-r--r-- 1 root root 430895 Feb 8 23:49 access_log.08
> -rw-r--r-- 1 root root 880153 Feb 9 23:58 access_log.09
> -rw-r--r-- 1 root root 877617 Feb 10 23:57 access_log.10
> -rw-r--r-- 1 root root 302701 Feb 11 23:37 access_log.11
> -rw-r--r-- 1 root root 683151 Feb 12 23:58 access_log.12
> -rw-r--r-- 1 root root 876300 Feb 13 23:57 access_log.13
> -rw-r--r-- 1 root root 272862 Feb 14 23:55 access_log.14
> -rw-r--r-- 1 root root 193741 Feb 15 23:56 access_log.15
> -rw-r--r-- 1 root root 741164 Feb 16 23:58 access_log.16
> -rw-r--r-- 1 root root 762839 Feb 17 23:59 access_log.17
> -rw-r--r-- 1 root root 891256 Feb 18 23:57 access_log.18
> -rw-r--r-- 1 root root 699542 Feb 19 23:55 access_log.19
> -rw-r--r-- 1 root root 725712 Feb 20 23:59 access_log.20
> -rw-r--r-- 1 root root 510341 Feb 21 23:59 access_log.21
> -rw-r--r-- 1 root root 552488 Feb 22 23:54 access_log.22
> -rw-r--r-- 1 root root 1177091 Feb 23 23:39 access_log.23
> -rw-r--r-- 1 root root 793636 Feb 24 23:45 access_log.24
> -rw-r--r-- 1 root root 1201977 Feb 25 23:47 access_log.25
> -rw-r--r-- 1 root root 623083 Feb 26 23:51 access_log.26
> -rw-r--r-- 1 root root 579741 Feb 27 23:57 access_log.27
> -rw-r--r-- 1 root root 280677 Feb 28 23:55 access_log.28