Pertanyaan ini telah dijawab di superuser.com (Saya tidak tahu apakah saya dapat menandai pertanyaan dari satu situs sebagai duplikat dari yang lain). Solusinya sesederhana menulis (dengan asumsi saya berada di direktori yang sama dengan nama file target):
$ namei -l $(pwd)/somefile ## or `namei -l $(realpath -s somefile)`
Karena -l
, ini mencantumkan izin dasar dalam format panjang untuk setiap direktori induk.
Saya harus menggunakan pwd
/realpath
karena namei
tidak menyelesaikan jalur relatif. Jika saya tidak berada di direktori target, tulis saja jalur lengkapnya.
Saya membuat skrip kecil yang melakukan ini. Saya menggunakan cd "$1"; pwd
untuk mendapatkan direktori saat ini sehingga jalur tidak dikanonikalisasi (misalnya, jika Anda mencoba magic-ls .
dan direktori Anda saat ini adalah /var/lib/postgres, tetapi itu adalah symlink ke /mnt/postgres, Anda akan mendapatkan /var
, /var/lib
dan /var/lib/postgres
, saat menggunakan realpath
Anda akan mendapatkan /mnt
dan /mnt/postgres
)
magic-ls() {
local current=$(cd "$1"; pwd)
while [[ $current != '/' ]]; do
ls -ld "$current"
current=$(dirname "$current")
done
}
Berikut ini contoh keluaran:
[[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
Ngomong-ngomong, ini juga akan berfungsi tanpa argumen sejak cd ""
tidak mengubah direktori Anda.
Sunting:hapus realpath
dari pemeriksaan while, karena hal itu dapat menyebabkan hasil yang tidak diharapkan jika ada tautan ke /
di jalan, dan tidak dibutuhkan.
Hanya menggunakan perluasan parameter:
#!/usr/bin/env bash
path="$1"
while test -n "$path"; do
ls -lLd "$path"
path="${path%/*}"
done
metode pemanggilan :
bash test.sh /var/lib/program/subfolder/somefile
memberi
-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
Saya menulis skrip bash untuk Anda. Ini akan memiliki beberapa bug, jika Anda memiliki ruang di nama. Jika itu mengganggu Anda, saya senang untuk mengubah rekomendasi di komentar.
#!/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
Dengan realpath -s
Anda dapat menangkap jalur absolut, tetapi Anda tidak akan mengikuti tautannya. Jika tidak ada argumen yang diberikan, kami akan menggunakan pwd sebagai file/direktori ke daftar.
Kami menambahkan setiap jalur ke daftar. Ini memberi kita keuntungan tata letak yang lebih baik pada akhirnya, sehingga kita mendapatkan tabel yang bagus karena kita menjalankan ls
hanya sekali.
Keluaran:
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