Ist es möglich, beim Auflisten eines Verzeichnisses numerische Unix-Berechtigungen wie 644 anstelle der symbolischen Ausgabe -rw-rw-r-- anzuzeigen?
Vielen Dank.
Ist es möglich, beim Auflisten eines Verzeichnisses numerische Unix-Berechtigungen wie 644 anstelle der symbolischen Ausgabe -rw-rw-r-- anzuzeigen?
Vielen Dank.
Antworten:
es kann fast ..
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
Ihr Befehl Berechtigungen als767
Am nächsten kann ich mir vorstellen (es einfach genug zu halten) stat
, vorausgesetzt, Sie wissen, nach welchen Dateien Sie suchen. Wenn Sie dies nicht tun, *
können Sie die meisten von ihnen finden:
/usr/bin$ stat -c '%a %n' *
755 [
755 a2p
755 a2ps
755 aclocal
...
Es handhabt klebrig, suid und Gesellschaft aus der Box:
$ stat -c '%a %n' /tmp /usr/bin/sudo
1777 /tmp
4755 /usr/bin/sudo
stat -f '%A %N' *
macht das gleiche auf einem Mac (FreeBSD)
stat
ist nicht ls
deshalb ist dies nicht die richtige Antwort. Ich glaube jedoch, dass dies die richtige Antwort im Zusammenhang mit der gewünschten Ausgabe ist. Wenn awk
es in einer Pipe find
erlaubt stat
ist , sollte es erlaubt sein, wo es gerufen wird -exec
; dann können Sie stat
direkt ohne*
stat -c '%a %n' * **/*
.
Sie können den folgenden Befehl verwenden
stat -c "%a %n" *
Sie können auch ein beliebiges filename
oder directoryname
anstelle von verwenden *
, um ein bestimmtes Ergebnis zu erhalten.
Auf dem Mac können Sie verwenden
stat -f '%A %N' *
stat: illegal option -- c
usage: stat [-FlLnqrsx] [-f format] [-t timefmt] [file ...]
man stat
macOS 10.14.4 enthaltenen Informationen verwenden, sollte der Befehl lauten stat -f "%Lp %N" *
. %Lp
scheint das gleiche zu drucken wie %A
.
@ The MYYN
wow, schön awk! Aber was ist mit suid, sgid und sticky bit?
Sie müssen Ihren Filter mit s und t erweitern, sonst zählen sie nicht und Sie erhalten das falsche Ergebnis. Um die Oktalzahl für diese speziellen Flags zu berechnen, ist die Vorgehensweise dieselbe, aber der Index liegt bei 4, 7 und 10. Die möglichen Flags für Dateien mit gesetztem Ausführungsbit sind ---s--s--t
amd für Dateien ohne gesetztes Ausführungsbit---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
}'
Zum Test:
touch blah
chmod 7444 blah
wird darin enden, dass:
7444 -r-Sr-Sr-T 1 cheko cheko 0 2009-12-05 01:03 blah
und
touch blah
chmod 7555 blah
wird geben:
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;}'"
Verwenden Sie diese Option, um die numerischen Unix-Berechtigungswerte (Oktalwerte) und den Dateinamen anzuzeigen.
stat -c '%a %n' *
Verwenden Sie diese Option, um die numerischen Unix-Berechtigungswerte (Oktalwerte) und das sgid- und Sticky-Bit des Ordners, den Benutzernamen des Eigentümers, den Gruppennamen, die Gesamtgröße in Byte und den Dateinamen anzuzeigen.
stat -c '%a %A %U %G %s %n' *
Fügen %y
Sie hinzu, wenn Sie die Zeit der letzten Änderung in einem für Menschen lesbaren Format benötigen. Weitere Optionen finden Sie unter stat .
Bessere Version mit einem Alias
Die Verwendung eines Alias ist eine effizientere Methode, um das zu erreichen, was Sie benötigen, und es enthält auch Farbe. Im Folgenden werden Ihre Ergebnisse zuerst nach Gruppenverzeichnissen geordnet, in Farbe und Druckgrößen in lesbarem Format (z. B. 1K 234M 2G) angezeigt. Bearbeiten Sie Ihre ~/.bashrc
und fügen Sie einen Alias für Ihr Konto oder global durch Bearbeiten hinzu/etc/profile.d/custom.sh
Durch Eingabe cls
werden Ihre neuen LS-Befehlsergebnisse angezeigt.
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;}'"
Ordnerbaum
Fügen Sie während der Bearbeitung von bashrc oder custom.sh den folgenden Alias hinzu, um eine grafische Darstellung lstree
anzuzeigen, in der durch Eingabe Ihre aktuelle Ordnerbaumstruktur angezeigt wird
alias lstree="ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/ /' -e 's/-/|/'"
Es würde anzeigen:
|-scripts
|--mod_cache_disk
|--mod_cache_d
|---logs
|-run_win
|-scripts.tar.gz
Sie verwenden ls nicht, um die Berechtigungsinformationen einer Datei abzurufen. Sie verwenden den Befehl stat. Sie erhalten die gewünschten Zahlenwerte. Der "Unix-Weg" besagt, dass Sie Ihr eigenes Skript mit ls (oder 'echo *') und stat erfinden sollten und was auch immer Sie möchten, um die Informationen in dem gewünschten Format anzugeben.
Aufbauend auf der gewählten Antwort und dem Vorschlag, einen Alias zu verwenden , habe ich ihn in eine Funktion konvertiert, sodass die Übergabe eines Verzeichnisses an die Liste möglich ist.
# 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}'"