Czy podczas wyświetlania katalogu można wyświetlić numeryczne uprawnienia uniksowe, takie jak 644, zamiast symbolicznego wyjścia -rw-rw-r--
Dzięki.
Czy podczas wyświetlania katalogu można wyświetlić numeryczne uprawnienia uniksowe, takie jak 644, zamiast symbolicznego wyjścia -rw-rw-r--
Dzięki.
Odpowiedzi:
prawie może ..
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
twoim poleceniu wypisuje uprawnienia jako767
Najbliższe, o czym mogę myśleć (upraszczając to dość prosto) stat
, zakładając, że wiesz, których plików szukasz. Jeśli nie, *
możesz znaleźć większość z nich:
/usr/bin$ stat -c '%a %n' *
755 [
755 a2p
755 a2ps
755 aclocal
...
Po wyjęciu z pudełka radzi sobie z klejem, suidem i towarzystwem:
$ stat -c '%a %n' /tmp /usr/bin/sudo
1777 /tmp
4755 /usr/bin/sudo
stat -f '%A %N' *
robi to samo na komputerze Mac (FreeBSD)
stat
nie jest, ls
dlatego nie jest to poprawna odpowiedź. Uważam jednak, że jest to poprawna odpowiedź w kontekście pożądanych wyników. Jeśli awk
jest dozwolone w potoku, to find
powinno być dozwolone tam, gdzie stat
jest wywoływane -exec
; wtedy możesz używać stat
bezpośrednio bez*
stat -c '%a %n' * **/*
.
Możesz użyć następującego polecenia
stat -c "%a %n" *
Możesz także użyć dowolnego filename
lub directoryname
zamiast, *
aby uzyskać określony wynik.
Na komputerze Mac możesz użyć
stat -f '%A %N' *
stat: illegal option -- c
usage: stat [-FlLnqrsx] [-f format] [-t timefmt] [file ...]
man stat
systemie macOS 10.14.4, polecenie powinno być stat -f "%Lp %N" *
. %Lp
wydaje się drukować to samo co %A
.
@ MYYN
wow, niezły awk! Ale co z sidid, sgid i lepki kawałek?
Musisz rozszerzyć filtr za pomocą s i t, w przeciwnym razie nie będą się one liczyć i otrzymasz zły wynik. Aby obliczyć liczbę ósemkową dla tych specjalnych flag, procedura jest taka sama, ale indeks wynosi 4 7 i 10. Możliwe flagi dla plików z ustawionym ---s--s--t
zestawem bitów są następujące:---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
}'
Dla testu:
touch blah
chmod 7444 blah
spowoduje:
7444 -r-Sr-Sr-T 1 cheko cheko 0 2009-12-05 01:03 blah
i
touch blah
chmod 7555 blah
da:
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;}'"
Służy do wyświetlania numerycznych wartości uprawnień (wartości ósemkowe) i nazwy pliku.
stat -c '%a %n' *
Służy do wyświetlania numerycznych wartości uprawnień uniksowych (wartości ósemkowe) oraz sgid i lepki folder folderu, nazwę użytkownika właściciela, nazwę grupy, całkowity rozmiar w bajtach i nazwę pliku.
stat -c '%a %A %U %G %s %n' *
Dodaj, %y
jeśli potrzebujesz czasu ostatniej modyfikacji w formacie czytelnym dla człowieka. Aby uzyskać więcej opcji, zobacz stat .
Lepsza wersja przy użyciu aliasu
Korzystanie z aliasu jest bardziej wydajnym sposobem na osiągnięcie tego, czego potrzebujesz, i obejmuje również kolor. Poniżej przedstawiono wyniki uporządkowane najpierw według katalogów grup, wyświetlane w kolorze, rozmiary wydruków w formacie czytelnym dla człowieka (np. 1K 234M 2G), edytuj ~/.bashrc
i dodaj alias do swojego konta lub globalnie, edytując/etc/profile.d/custom.sh
Wpisanie cls
wyświetla wyniki nowego polecenia LS.
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;}'"
Drzewo folderów
Podczas edytowania pliku bashrc lub custom.sh dołącz następujący alias, aby wyświetlić graficzną reprezentację, w której wpisanie lstree
wyświetli bieżącą strukturę drzewa folderów
alias lstree="ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/ /' -e 's/-/|/'"
Wyświetli się:
|-scripts
|--mod_cache_disk
|--mod_cache_d
|---logs
|-run_win
|-scripts.tar.gz
Nie używasz ls do uzyskania informacji o uprawnieniach do pliku. Używasz polecenia stat. Otrzymasz pożądane wartości liczbowe. „Sposób uniksowy” mówi, że powinieneś wymyślić swój własny skrypt, używając ls (lub „echo *”) i stat oraz cokolwiek innego, co chcesz podać w żądanym formacie.
Opierając się na wybranej odpowiedzi i sugestii użycia aliasu , przekonwertowałem ją na funkcję, aby możliwe było przekazanie katalogu do listy.
# 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}'"