Bir dizini listelerken, -rw-rw-r-- sembolik çıktısından ziyade 644 gibi sayısal unix izinlerini görüntülemek mümkün müdür?
Teşekkürler.
Bir dizini listelerken, -rw-rw-r-- sembolik çıktısından ziyade 644 gibi sayısal unix izinlerini görüntülemek mümkün müdür?
Teşekkürler.
Yanıtlar:
neredeyse olabilir ..
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
Komutunuz izinleri yazdırdıktan sonra767
Aklınıza gelebilecek en yakın şey (yeterince basit tutmak), stat
hangi dosyaları aradığınızı bildiğinizi varsayar. Bunu yapmazsanız, *
çoğunu bulabilirsiniz:
/usr/bin$ stat -c '%a %n' *
755 [
755 a2p
755 a2ps
755 aclocal
...
Yapışkan, suid ve şirketi kutudan çıkarır:
$ stat -c '%a %n' /tmp /usr/bin/sudo
1777 /tmp
4755 /usr/bin/sudo
stat -f '%A %N' *
, aynı şeyi bir mac (FreeBSD) üzerinde buldum
stat
değil ls
bu nedenle bu doğru çözüm değil. Ancak, bunun istenen çıktı bağlamında doğru cevap olduğuna inanıyorum. Eğer awk
bir boru içinde izin verilir, daha sonra find
burada izin verilmelidir stat
denir -exec
; o zaman stat
doğrudan kullanabilirsiniz*
stat -c '%a %n' * **/*
.
Aşağıdaki komutu kullanabilirsiniz
stat -c "%a %n" *
Ayrıca, belirli bir sonuç almak için herhangi birini filename
veya directoryname
bunun yerine kullanabilirsiniz *
.
Mac'te şunları kullanabilirsiniz:
stat -f '%A %N' *
stat: illegal option -- c
usage: stat [-FlLnqrsx] [-f format] [-t timefmt] [file ...]
man stat
macOS 10.14.4'te sunulan bilgileri kullanırsak , komutun olması gerekir stat -f "%Lp %N" *
. %Lp
ile aynı şeyi yazdırıyor gibi görünüyor %A
.
@YaseminYeni
vay canına, güzel awk! Peki ya suid, sgid ve sticky bit?
Filtrenizi s ve t ile uzatmanız gerekir, aksi takdirde sayılmazlar ve yanlış sonuç alırsınız. Bu özel Bayraklar için sekizli sayısını hesaplamak için, prosedür aynıdır ancak endeks olan bit kümesi yürütmek dosyalar için 4 7 ve 10. olası bayrakları olan ---s--s--t
hiçbir vardır bit kümesi yürütmek dosyalar için amd---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
}'
Test için:
touch blah
chmod 7444 blah
sonuçlanacak:
7444 -r-Sr-Sr-T 1 cheko cheko 0 2009-12-05 01:03 blah
ve
touch blah
chmod 7555 blah
verecek:
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;}'"
Unix sayısal izin değerlerini (sekizli değerler) ve dosya adını görüntülemek için bunu kullanın.
stat -c '%a %n' *
Unix sayısal izin değerlerini (sekizlik değerler) ve klasörün sgid ve yapışkan bitini, sahibin kullanıcı adını, grup adını, bayt cinsinden toplam boyutu ve dosya adını görüntülemek için bunu kullanın.
stat -c '%a %A %U %G %s %n' *
%y
İnsan tarafından okunabilir biçimde son değişiklik zamanına ihtiyacınız varsa ekleyin . Daha fazla seçenek için stat .
Takma Ad kullanarak daha iyi sürüm
Bir takma ad kullanmak, ihtiyacınız olanı başarmanın daha etkili bir yoludur ve ayrıca renk içerir. Aşağıda, önce grup dizinlerine göre düzenlenmiş, renkli, baskı boyutlarında okunabilir biçimde (örn. 1K 234M 2G) sonuçlarınız düzenlenir ~/.bashrc
ve hesabınız için veya genel olarak düzenleyerek bir takma ad eklenir/etc/profile.d/custom.sh
Yazarken cls
yeni LS komut sonuçlarınızı görüntüler.
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;}'"
Klasör Ağacı
Bashrc veya custom.sh dosyanızı düzenlerken, yazmanın lstree
geçerli klasör ağacı yapınızı görüntüleyeceği grafik bir gösterimi görmek için aşağıdaki diğer adı ekleyin
alias lstree="ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/ /' -e 's/-/|/'"
Şunları görüntüler:
|-scripts
|--mod_cache_disk
|--mod_cache_d
|---logs
|-run_win
|-scripts.tar.gz
Bir dosyanın izin bilgilerini almak için ls kullanmazsınız. Stat komutunu kullanırsınız. Size istediğiniz sayısal değerleri verecektir. "Unix Yolu" ls (veya 'echo *') ve stat kullanarak kendi betiğinizi icat etmeniz ve bilgileri istediğiniz formatta vermek istediğiniz her şeyi söylemeniz gerektiğini söylüyor.
Off Bina seçilen cevap ve bir takma ad kullanmak öneri , ben listeye bir dizin geçen mümkündür böylece bir işleve çevirdim.
# 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}'"