GNU/Linux >> Belajar Linux >  >> Linux

`ls -l` untuk semua direktori induk

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

Linux
  1. Ruang Cadangan Untuk Root Pada Sistem File – Mengapa?

  2. @reboot Crontab Hanya Berfungsi Untuk Root?

  3. Apa kata sandi root default untuk MySQL 5.7

  1. Bagaimana cara membuat daftar ukuran direktori dari semua direktori anak?

  2. Di mana .bashrc untuk root?

  3. Aktifkan kata sandi sederhana untuk pengguna root di CentOS

  1. Cara Membuat Direktori Bersama untuk Semua Pengguna di Linux

  2. Modul IPTables ip_tables tidak ditemukan untuk root

  3. tentukan ulimit untuk pengguna root