Linux でファイル権限を一覧表示する組み込みの方法はありますか?

Linux でファイル権限を一覧表示する組み込みの方法はありますか?

外部コマンドを使用せずにファイルの権限を一覧表示するオプションは何ですか?

testは組み込みですが、私の知る限り、ファイルの所有者に対してのみ機能します。私は全体を探しています。 で何かを見つけたと思っていましたinodesが、それらを(組み込みで!)読み取る方法も見つかりません。

bashのみでお願いします。バージョンや形式は問いません。

編集:

stat外部コマンド( 、など)を使用してこれを行う方法は無数にあることは承知していますが、これは単なる思考実験です。私が行っていることは、唯一の解決策をls「必要とする」ものではありません。builtin

編集2:

Glenn Jackman のロード可能なコマンドの回答は、組み込みコマンドを使用しているため、技術的には正しいです。ただし、これは私の質問が適切に定義されていないことを示しているだけだと思います。

純粋なbash(任意のバージョンの)builtinコマンドを使用する(リストされている)ここマニュアルに記載されている機能や、システムに組み込まれているその他の機能bash(リダイレクト、置換、キーワード、私が知らないその他の機能など) を使用してlinux、ファイルの完全な権限を一覧表示するにはどうすればよいでしょうか。出力は以下のいずれかと似ていますが、umask 値も使用できます。

user@hostname$ stat test -c %A
-rw-rw-r--

user@hostname$ stat test -c %a
664

答え1

普通のbashでは、次のようなものがベストだと思います。あなたのグループやその他の権限ではありません。

myperms() {
  local file=$1
  local perms=""
  if [[ -d $file ]]; then
    perms+='d'
  elif [[ -L $file ]]; then
    perms+='l'
  else
    perms+='-'
  fi
  [[ -r $file ]] && perms+='r' || perms+='-'
  [[ -w $file ]] && perms+='w' || perms+='-'
  [[ -x $file ]] && perms+='x' || perms+='-'
  echo "$perms $file"
}

それから:

$ myperms /bin/bash
-r-x /bin/bash
$ touch afile
$ myperms afile
-rw- afile
$ chmod u+x afile
$ myperms afile
-rwx afile
$ ln -s afile alink
$ myperms alink
lrwx alink
$ chmod u-wx afile
$ myperms alink
lr-- alink

$ ls -l afile alink
-r--r--r-- 1 glennjackman staff 0 Dec 16 14:28 afile
lrwxr-xr-x 1 glennjackman staff 5 Dec 16 14:29 alink -> afile

答え2

bash バージョン 5 には、「ロード可能なコマンド」があります。これは、組み込みの bash コマンドではありませんが、組み込みになるように有効にできるコマンドです。

  1. bash git リポジトリをクローンします:https://savannah.gnu.org/git/?group=bash
  2. ./configure --prefix=/path/where/you/want/it/installed
  3. 作成 && インストール
  4. statここに存在していても、「サポートされている」ロード可能ではないので、
    1. cd ./examples/loadables
    2. make others
    3. cp stat /path/where/you/want/it/installed/lib/bash

それから

  1. bash シェルを起動します。/path/where/you/want/it/installed/bin/bash
  2. シェル変数を設定します:BASH_LOADABLES=/path/where/you/want/it/installed/lib/bash
  3. stat コマンドを有効にします。enable -f stat stat
  4. そしてそれを使用します:stat -A statarray /some/file

stat連想配列を作成します。デモ(「STAT」という名前のデフォルトの配列を使用)

$ ~/bash/5.0/bin/bash

$ echo $BASH_LOADABLES_PATH
/Users/glennjackman/bash/5.0/lib/bash

$ enable -f stat stat

$ stat ~/.bashrc

$ declare -p STAT
declare -A STAT=([nlink]="1" [link]="/Users/glennjackman/.bashrc" [perms]="0644" [inode]="14482796" [blksize]="4096" [device]="16777220" [atime]="1574454147" [type]="-" [blocks]="8" [uid]="502" [size]="2767" [rdev]="0" [name]="/Users/glennjackman/.bashrc" [mtime]="1574454147" [ctime]="1574454147" [gid]="20" )

$ for key in "${!STAT[@]}"; do printf "%s\t%s\n" "$key" "${STAT[$key]}"; done
nlink   1
link    /Users/glennjackman/.bashrc
perms   0644
inode   14482796
blksize 4096
device  16777220
atime   1574454147
type    -
blocks  8
uid 502
size    2767
rdev    0
name    /Users/glennjackman/.bashrc
mtime   1574454147
ctime   1574454147
gid 20

BASH_LOADABLE_PATH 変数を自動的に設定するには、~/.bashrc に次の行を追加します。

# for loadable builtins
bash_root=${BASH%/bin/bash}
[[ -d "$bash_root/lib/bash" ]] && BASH_LOADABLES_PATH="$bash_root/lib/bash"
unset bash_root

関連情報