新しいサーバへコンテンツの移行時など稀に
- パーミションの確認がやりたい
- 動作している環境のパーミション情報にそったパーミションに合わせたい。
- パーミション情報に絞ったdiffができるとうれしい。
っていうシチュエーションがあったりします。
定番のls -Rl
で実行するとlsなので当然下記のような情報の並び方になります。
これはこれで一覧性があるのですが、情報のサマリとして再利用するにはちょっと不便です。
ログなどファイルサイズもどんどん変わりますし、このあとsedとかawkとか大活躍しそうな感じです:)
1 2 3 4 5 6 7 8 9 |
[log]# ls -Rl sa sa: total 4452 -rw-r--r-- 1 root root 265992 Nov 13 23:50 sa13 -rw-r--r-- 1 root root 264244 Nov 14 23:50 sa14 -rw-r--r-- 1 root root 265992 Nov 15 23:50 sa15 -rw-r--r-- 1 root root 265992 Nov 16 23:50 sa16 |
stat(1)の利用
ファイルやファイルシステムの情報を表示するコマンドとしてstat(1)が存在します。
実行してみるとlsでの表示に比べると詳細な情報が表示されることがわかります。
1 2 3 4 5 6 7 8 9 10 |
# stat lua File: ‘lua’ Size: 13208 Blocks: 32 IO Block: 4096 regular file Device: ca01h/51713d Inode: 15252 Links: 1 Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2014-09-12 04:15:57.000000000 +0900 Modify: 2014-09-12 04:15:57.000000000 +0900 Change: 2014-09-30 16:04:31.060567440 +0900 |
man pageをみてるとこのコマンドには --formatとか--printfというオプションがあるのですね。
(私が昔使ってた環境にはこんなオプションありませんでした・・・)
このオプションを用いると出力結果を自由に整形することができます。
おなじみのfind(1)と合わせて用いると可能性がずいぶんと広がってきます。
オーナー情報のみの表示
1 2 3 4 5 6 |
[log]# find . -exec stat --printf '%U:%G %n\n' {} \; root:root . root:root ./sa root:root ./sa/sar14 root:root ./sa/sa20 root:root ./sa/sar13 |
パーミション情報のみの表示
1 2 3 4 5 6 7 |
[log]# find . -exec stat --printf '%a %n\n' {} \; 755 . 755 ./sa 644 ./sa/sar14 644 ./sa/sa20 |
他にもファイルのatime/ctime/mtimeだけを表示したり、区切り文字をtabにしてパースしやすくしてみたりという事もできます。
ちょっとした応用
たとえば冒頭でのシチュエーションに戻れば
フォーマットの指定に下記のような文字で書けば、あとで再利用したりもできますね。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# find . -exec stat --printf 'chown %U:%G %n\n' {} \; chown root:root . chown root:root ./elfdeps chown root:root ./pythondeps.sh chown root:root ./perldeps.pl chown root:root ./fileattrs chown root:root ./fileattrs/font.attr chown root:root ./fileattrs/perllib.attr chown root:root ./fileattrs/elf.attr chown root:root ./fileattrs/pkgconfig.attr chown root:root ./fileattrs/python.attr chown root:root ./fileattrs/ocaml.attr chown root:root ./fileattrs/appdata.attr chown root:root ./fileattrs/perl.attr chown root:root ./fileattrs/libsymlink.attr chown root:root ./fileattrs/mono.attr chown root:root ./fileattrs/desktop.attr chown root:root ./fileattrs/libtool.attr chown root:root ./fileattrs/script.attr chown root:root ./find-provides |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# find . -exec stat --printf 'chown %U:%G %n\n' {} \; chown root:root . chown root:root ./elfdeps chown root:root ./pythondeps.sh chown root:root ./perldeps.pl chown root:root ./fileattrs chown root:root ./fileattrs/font.attr chown root:root ./fileattrs/perllib.attr chown root:root ./fileattrs/elf.attr chown root:root ./fileattrs/pkgconfig.attr chown root:root ./fileattrs/python.attr chown root:root ./fileattrs/ocaml.attr chown root:root ./fileattrs/appdata.attr chown root:root ./fileattrs/perl.attr chown root:root ./fileattrs/libsymlink.attr chown root:root ./fileattrs/mono.attr chown root:root ./fileattrs/desktop.attr chown root:root ./fileattrs/libtool.attr chown root:root ./fileattrs/script.attr chown root:root ./find-provides |
そんなに多く出番があるとは私も思っていませんが、知っているとちょっとだけ幸せになれるかもしれません。
投稿者プロフィール
-
インフラ系のエンジニアです。
運用系のスクリプトを書いたり、オートメーションな世界に向かって日々精進しています。
最新の投稿
- Apache2016年6月24日ApacheWebServerで圧縮転送の設定
- AWS2016年5月17日SkyHopperのインストーラで作成するChef Serverについてのご注意
- AWS2016年3月29日SkyHopper v1.15.2の評価用AMI公開しました
- AWS2016年3月8日SkyHopperのプロダクトページを作成しました