新しいサーバへコンテンツの移行時など稀に
- パーミションの確認がやりたい
- 動作している環境のパーミション情報にそったパーミションに合わせたい。
- パーミション情報に絞ったdiffができるとうれしい。
っていうシチュエーションがあったりします。
定番のls -Rl
で実行するとlsなので当然下記のような情報の並び方になります。
これはこれで一覧性があるのですが、情報のサマリとして再利用するにはちょっと不便です。
ログなどファイルサイズもどんどん変わりますし、このあとsedとかawkとか大活躍しそうな感じです:)
[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での表示に比べると詳細な情報が表示されることがわかります。
# 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)と合わせて用いると可能性がずいぶんと広がってきます。
オーナー情報のみの表示
[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
パーミション情報のみの表示
[log]# find . -exec stat --printf '%a %n\n' {} \;
755 .
755 ./sa
644 ./sa/sar14
644 ./sa/sa20
他にもファイルのatime/ctime/mtimeだけを表示したり、区切り文字をtabにしてパースしやすくしてみたりという事もできます。
ちょっとした応用
たとえば冒頭でのシチュエーションに戻れば
フォーマットの指定に下記のような文字で書けば、あとで再利用したりもできますね。
# 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
# 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.06.24ApacheWebServerで圧縮転送の設定
AWS2016.05.17SkyHopperのインストーラで作成するChef Serverについてのご注意
AWS2016.03.29SkyHopper v1.15.2の評価用AMI公開しました
AWS2016.03.08SkyHopperのプロダクトページを作成しました