GNU/Linux >> Linux の 問題 >  >> Linux

すべての親ディレクトリの「ls -l」

この質問はすでに superuser.com で回答されています (あるサイトからの質問を別のサイトからの重複としてマークできるかどうかわかりません)。解決策は、書くのと同じくらい簡単です (ターゲットファイル名と同じディレクトリにいると仮定します):

$ namei -l $(pwd)/somefile   ## or `namei -l $(realpath -s somefile)`

-l のせいで 、各親ディレクトリの基本的なアクセス許可を長い形式でリストします。

pwd を使用する必要があります /realpath なぜなら namei 相対パスを解決しません。ターゲット ディレクトリにない場合は、フル パスを記述してください。


これを行うこの小さなスクリプトを作成しました。 cd "$1"; pwd を使用しています パスが正規化されないように現在のディレクトリを取得します(たとえば、 magic-ls . を試した場合 現在のディレクトリは /var/lib/postgres ですが、これは /mnt/postgres へのシンボリック リンクであり、/var を取得します。 、 /var/lib/var/lib/postgresrealpath を使用している間 /mnt を取得します と /mnt/postgres )

magic-ls() {
    local current=$(cd "$1"; pwd)

    while [[ $current != '/' ]]; do
        ls -ld "$current"
        current=$(dirname "$current")
    done
}

出力例は次のとおりです:

[[email protected] ~]$ magic-ls
drwx------ 1 leodag leodag 2722 jun 21 13:49 /home/leodag
drwxr-xr-x 1 root root 18 mai  2  2019 /home

ちなみにcd ""以降は引数なしでも動きます ディレクトリは変更されません。

編集:realpath を削除しました / へのリンクがあった場合、予期しない結果につながる可能性があるため、 while チェックから 不要でした。


パラメータ展開のみを使用:

#!/usr/bin/env bash
path="$1"
while test -n "$path"; do
    ls -lLd "$path"
    path="${path%/*}"
done

呼び出し方法:

bash test.sh /var/lib/program/subfolder/somefile

与える

-rw-r--r-- 1 root root 0 Jun 21 18:49 /var/lib/program/subfolder/somefile
drwxr-xr-x 1 root root 4096 Jun 21 18:49 /var/lib/program/subfolder
drwxr-xr-x 1 root root 4096 Jun 21 18:49 /var/lib/program
drwxr-xr-x 1 root root 4096 Jun 21 18:49 /var/lib
drwxr-xr-x 1 root root 4096 Jun 13 19:24 /var

私はあなたのためにbashスクリプトを書きました。名前にスペースがある場合、いくつかのバグがあります。気になる場合は、コメントで変更の推奨事項をお知らせください。

#!/bin/bash
if [ ! -z "$1" ] && [ -e "$1" ]
then
 path=`realpath -s "$1"` # read argument as absolute path
else
 path="$PWD" # No valid argument, so we take pwd
fi
paths=""
while [ "$path" != / ];do
 paths+=" $path" 
 path=`dirname "$path"`
done
paths+=" $path" # Adding / to pathlist too 
ls -ld $paths

realpath -s で 絶対パスをキャッチできますが、リンクをたどることはできません。引数が指定されていない場合、一覧表示するファイル/ディレクトリとして pwd を使用します。

各パスをリストに追加します。これにより、最終的にレイアウトが改善されるという利点が得られます。これにより、ls を実行するため、適切なテーブルが得られます。 一度だけ。

出力:

bobafit:~$ magic_ls_-l_command /usr/bin/python3
drwxr-xr-x 21 root root   4096 Jun 20 10:07 /
drwxr-xr-x 14 root root   4096 Sep  5  2019 /usr
drwxr-xr-x  2 root root 110592 Jun 20 10:07 /usr/bin
lrwxrwxrwx  1 root root      9 Apr  7 12:43 /usr/bin/python3 -> python3.8

Linux
  1. 1つのファイルを除くすべてのファイル/ディレクトリを削除しますか?

  2. Crontabの@rebootはルートに対してのみ機能しますか?

  3. Station –すべてのアプリに対応するスマートワークステーション

  1. MySQL 5.7 のデフォルトの root パスワードは何ですか?

  2. root の .bashrc はどこにありますか?

  3. ターミナルで su の root パスワードが機能しない

  1. CentOS で root ユーザーの単純なパスワードを有効にする

  2. root ユーザーの ulimit を決定する

  3. root を持つすべてのユーザーを一覧表示するにはどうすればよいですか?