ファイルの権限を 8 進形式で取得するにはどうすればよいですか?

ファイルの権限を 8 進形式で取得するにはどうすればよいですか?

... どのように設定すればよいのでしょうか? これはディレクトリに対しても同様に機能しますか? スティッキー ビットや、より「エキゾチック」なものの場合はどうなりますか?

答え1

提案されたように@グスタフstatプログラム(これはGNU コアユーティリティそして、本質的には「Linux」プログラムなので、ポートまたはパッケージBSDシステムでは、コマンド

stat -c "%a %n"ファイル

8進モード(setuid、setgid、スティッキービットを含む)とファイル名のみを含むフォーマットされたリストを生成します。ドキュメントによると

  • %a「8進数でのアクセス権」
  • %n「ファイル名」

たとえば、次のスクリプトがあるとします。

#!/bin/sh
for name in $*
do       
    ls -ld "$name"
    stat -c '%a %n' "$name"
done

次のような出力が表示される場合がありますmyscript /usr/bin /usr/bin/X /usr/bin/bsd-write:

drwxr-xr-x 5 root root 118784 Jul 11 19:55 /usr/bin
755 /usr/bin
-rwsr-sr-x 1 root root 9232 Dec 16  2011 /usr/bin/X
6755 /usr/bin/X
-rwxr-sr-x 1 root tty 11000 Jun 17  2010 /usr/bin/bsd-write
2755 /usr/bin/bsd-write

3桁または4桁の8進数が返されます。アクセス権、setuidなどが設定されているかどうかによって異なります。先頭(4番目)の数字は、

  • 4 (setuid)
  • 2 (設定済み)
  • 1 (スティッキー)

アクセス権システムコールによって返される余分なビットを除いて返されるstat名前がディレクトリ(S_IFDIR)かファイル(S_IFREG)かを示すビットです。ちなみに、これらのビットはすべて、1970年代から1980年代初頭の古いUnix実装により16ビットの値に収まり、標準値。 なぜならアクセス権ファイルタイプを除外する場合は、その値をそのままコマンドで使用できますchmod(また、chmod関数)は8進数であり、chmodコマンドはそれを期待しています。setuidなどでも8進数で動作しますが、

chmod u+s /usr/bin/whatever

より読みやすくなります。

さらに読む

答え2

stat -c "%a %n" <file>

動作するようですが、それ以上はわかりません。

答え3

取得:ギュスターヴが答えた通り。

設定:

chmod 0755 myfile

ディレクトリも同様です。スティッキー ビットの最初の数字は 1 になります。スティッキー ビットについて:https://askubuntu.com/a/432703

関連情報