Apakah mungkin ketika mendaftar direktori untuk melihat izin unix numerik seperti 644 daripada output simbolik -rw-rw-r--
Terima kasih.
Apakah mungkin ketika mendaftar direktori untuk melihat izin unix numerik seperti 644 daripada output simbolik -rw-rw-r--
Terima kasih.
Jawaban:
hampir bisa ..
ls -l | awk '{k=0;for(i=0;i<=8;i++)k+=((substr($1,i+2,1)~/[rwx]/) \
*2^(8-i));if(k)printf("%0o ",k);print}'
chmod 777 dir
perintah Anda mencetak izin sebagai767
Paling dekat yang bisa saya pikirkan (menjaganya agar tetap sederhana) adalah stat
, dengan asumsi Anda tahu file mana yang Anda cari. Jika tidak, *
dapat menemukan sebagian besar dari mereka:
/usr/bin$ stat -c '%a %n' *
755 [
755 a2p
755 a2ps
755 aclocal
...
Ini menangani lengket, suid dan perusahaan di luar kotak:
$ stat -c '%a %n' /tmp /usr/bin/sudo
1777 /tmp
4755 /usr/bin/sudo
stat -f '%A %N' *
melakukan hal yang sama pada mac (FreeBSD)
stat
tidak ls
karena ini bukan jawaban yang benar. Namun, saya percaya ini adalah jawaban yang benar dalam konteks hasil yang diinginkan. Jika awk
diizinkan dalam pipa, maka find
harus diizinkan di mana stat
dipanggil -exec
; maka Anda dapat menggunakan stat
langsung tanpa*
stat -c '%a %n' * **/*
.
Anda dapat menggunakan perintah berikut
stat -c "%a %n" *
Anda juga dapat menggunakan filename
atau directoryname
bukannya *
untuk mendapatkan hasil tertentu.
Di Mac, Anda bisa menggunakan
stat -f '%A %N' *
stat: illegal option -- c
usage: stat [-FlLnqrsx] [-f format] [-t timefmt] [file ...]
man stat
pada macOS 10.14.4, maka perintahnya seharusnya stat -f "%Lp %N" *
. %Lp
muncul untuk mencetak hal yang sama dengan %A
.
@The MYYN
wow, awk bagus! Tapi bagaimana dengan suid, sgid dan sticky bit?
Anda harus memperluas filter Anda dengan s dan t, jika tidak mereka tidak akan menghitung dan Anda mendapatkan hasil yang salah. Untuk menghitung angka oktal untuk flag-flag khusus ini, prosedurnya sama tetapi indeksnya di 4 7 dan 10. flag-flag yang mungkin untuk file-file dengan bit set eksekusi adalah ---s--s--t
amd untuk file-file tanpa bit eksekusi---S--S--T
ls -l | awk '{
k = 0
s = 0
for( i = 0; i <= 8; i++ )
{
k += ( ( substr( $1, i+2, 1 ) ~ /[rwxst]/ ) * 2 ^( 8 - i ) )
}
j = 4
for( i = 4; i <= 10; i += 3 )
{
s += ( ( substr( $1, i, 1 ) ~ /[stST]/ ) * j )
j/=2
}
if ( k )
{
printf( "%0o%0o ", s, k )
}
print
}'
Untuk tes:
touch blah
chmod 7444 blah
akan menghasilkan:
7444 -r-Sr-Sr-T 1 cheko cheko 0 2009-12-05 01:03 blah
dan
touch blah
chmod 7555 blah
akan memberi:
7555 -r-sr-sr-t 1 cheko cheko 0 2009-12-05 01:03 blah
alias "lsmod=ls -al|awk '{k=0;s=0;for(i=0;i<=8;i++){;k+=((substr(\$1,i+2,1)~/[rwxst]/)*2^(8-i));};j=4;for(i=4;i<=10;i+=3){;s+=((substr(\$1,i,1)~/[stST]/)*j);j/=2;};if(k){;printf(\"%0o%0o \",s,k);};print;}'"
Gunakan ini untuk menampilkan nilai izin numerik Unix (nilai oktal) dan nama file.
stat -c '%a %n' *
Gunakan ini untuk menampilkan nilai izin numerik Unix (nilai oktal) dan bit sgid dan sticky folder, nama pengguna pemilik, nama grup, ukuran total dalam byte dan nama file.
stat -c '%a %A %U %G %s %n' *
Tambahkan %y
jika Anda memerlukan waktu modifikasi terakhir dalam format yang dapat dibaca manusia. Untuk opsi lebih lanjut lihat stat .
Versi yang lebih baik menggunakan Alias
Menggunakan alias adalah cara yang lebih efisien untuk mencapai apa yang Anda butuhkan dan itu juga termasuk warna. Berikut ini menampilkan hasil Anda yang diatur oleh direktori grup terlebih dahulu, ditampilkan dalam warna, ukuran cetak dalam format yang dapat dibaca manusia (misalnya, 1K 234M 2G) edit ~/.bashrc
dan tambahkan alias untuk akun Anda atau secara global dengan mengedit/etc/profile.d/custom.sh
Mengetik cls
menampilkan hasil perintah LS Anda yang baru.
alias cls="ls -lha --color=always -F --group-directories-first |awk '{k=0;s=0;for(i=0;i<=8;i++){;k+=((substr(\$1,i+2,1)~/[rwxst]/)*2^(8-i));};j=4;for(i=4;i<=10;i+=3){;s+=((substr(\$1,i,1)~/[stST]/)*j);j/=2;};if(k){;printf(\"%0o%0o \",s,k);};print;}'"
Pohon Folder
Saat Anda mengedit bashrc atau custom.sh, sertakan alias berikut untuk melihat representasi grafis tempat pengetikan lstree
akan menampilkan struktur hierarki folder Anda saat ini
alias lstree="ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/ /' -e 's/-/|/'"
Ini akan menampilkan:
|-scripts
|--mod_cache_disk
|--mod_cache_d
|---logs
|-run_win
|-scripts.tar.gz
Anda tidak menggunakan ls untuk mendapatkan informasi izin file. Anda menggunakan perintah stat. Ini akan memberi Anda nilai numerik yang Anda inginkan. "Unix Way" mengatakan bahwa Anda harus menciptakan skrip Anda sendiri menggunakan ls (atau 'echo *') dan stat dan apa pun yang Anda suka untuk memberikan informasi dalam format yang Anda inginkan.
Membangun dari jawaban yang dipilih dan saran untuk menggunakan alias , saya mengonversinya menjadi fungsi sehingga melewati direktori ke daftar dimungkinkan.
# ls, with chmod-like permissions and more.
# @param $1 The directory to ls
function lls {
LLS_PATH=$1
ls -AHl $LLS_PATH | awk "{k=0;for(i=0;i<=8;i++)k+=((substr(\$1,i+2,1)~/[rwx]/) \
*2^(8-i));if(k)printf(\"%0o \",k);print}"
}
alias cls="ls -l | awk '{k=0;for(i=0;i<=8;i++)k+=((substr(\$1,i+2,1)~/[rwx]/)*2^(8-i));if(k)printf(\"%0o \",k);print}'"