stat -c "%a %n" *
を使用することで、8進モード(755など)でファイル許可を取得しています。バイナリモード(111 101 101など)でファイル許可を確認する方法はありますか?
単一ファイルの場合:
stat -c "%a" filename.txt | xargs -I PERM echo "obase=2; ibase=8; PERM" | bc
そして、1つのファイルのそれ以上のためのより明確なスクリプトとして:
#!/bin/bash
for file in *
do
perm=$(stat -c "%a" "$file")
bin=$(echo "obase=2; ibase=8; $perm" | bc)
echo "$bin $file"
done
出力:
110110100 baz
110110100 foo
110110101 bar
for file in *
を使用してすべてのファイルとディレクトリをループします。stat -c "%a
を使用して、ファイル許可を8進数で収集してから、echo
を使用して、他の必要な詳細をpermission
に追加し、bc
に追加します。bc
が変換を行い、結果とファイル名を出力します。Perl stat モジュールを使用してこれを行うことができます。与えられた
$ stat -c '%a %n' *
600 other file
775 somedir
664 somefile
それから
$ Perl -MFile::stat -e 'printf "%b %s\n", (stat $_)->[2] & 07777, $_ for @ARGV' *
110000000 other file
111111101 somedir
110110100 somefile
$ python -c 'import sys,os;[ sys.stdout.write( " ".join([bin(os.stat( i ).st_mode)[-9:],i,"\n"]) ) for i in sys.argv[1:] ]' /etc/passwd
110100100 /etc/passwd
ジョブは、os.stat()
関数を介して実行されます。この関数は、10進数形式のisst_mode
ファイル属性のタプルを返します。次に、それをバイナリに変換し、最後の9桁を抽出します。
すべてがリスト内包内で実行され、コマンドラインで指定されたすべてのファイルを操作します(したがって、複数のファイルを提供したり、globstarを使用したりできます)。
スクリプトとして
#!/usr/bin/env python2
import sys, os
for filename in sys.argv[1:]:
perms = os.stat(filename).st_mode
print bin(perms)[-9:], filename
visualizeバイナリのファイル許可だけが必要な場合は、ls -l
の最初の列を使用できます。
$ ls -ld /bin
drwxr-xr-x 2 root root 4096 mai 18 05:38 /bin
ここで、rwxr-xr-x
が111101101
に対応していることがわかります。