Istnieje komenda chmod do ustawiania uprawnień do plików, ale czy mogę uzyskać uprawnienia do plików w trybie ósemkowym (np. 755) z wiersza poleceń?
command-line
permissions
Anwar
źródło
źródło
stat --format "%A" $FILE
daje czytelny dla człowiekadrwxr-x---
format. które mogą, ale nie muszą być przydatne.Odpowiedzi:
Możesz spróbować
Zamień
*
na odpowiedni katalog lub dokładną nazwę pliku, który chcesz sprawdzić.Ze strony podręcznika stat ,
Stosowanie:
Z plikami:
Z folderami:
(Odniesienie)
źródło
stat -f '%A %a %N' *
(kredyt: geeklog.adamwilson.info/article/58/… )ls
:for f in $(ls -a); do stat -c "%a %n" $f; done;
ls
jest złym pomysłem. Jeśli naprawdę chcesz użyć pętli, możesz to zrobićfor f in *; do stat "%a %n" "$f"; done
Uprawnienia do plików w systemie Linux można wyświetlić w formacie ósemkowym za pomocą polecenia Linux stat.
Wystarczy nacisnąć Ctrl+ Alt+ Tna klawiaturze, aby otworzyć Terminal. Po otwarciu przejdź do katalogu, w którym chcesz znaleźć uprawnienia do plików w trybie ósemkowym.
% A Prawa dostępu w formie czytelnej dla człowieka
% a Prawa dostępu ósemkowe
% n Nazwa pliku
Źródło: http://kmaiti.blogspot.com/2011/09/umask-concept.html
źródło
Jak wyszczególniono w „755” -Style uprawnień z „ls” przez Adama Courtemanche na AgileAdam.com , można utworzyć alias
lso
, który działa jakls -l
ale nieznacznie przetwarza wyjście 1 do uprawnień wyświetlacza również w ósemkowym. Dodaje to wiodącą kolumnę pokazującą trzycyfrowe uprawnienia 2- ósemkowe. Jak napisano, działa to w przypadku większości plików i katalogów, ale nie działa poprawnie, jeśli ustawione są bity lepkie lub setuid / setgid . 3)Ma to jednak poważną wadę , jak wskazuje techtonik . Państwo nie może przekazywać argumenty do tego
lso
aliasu tak jak do tejls
komendy , ponieważ są one traktowane jako dodatkowe argumentyawk
zamiast. W związku z tym nie można uruchamiaćlso
określonego pliku lub katalogu ani przekazywać żadnych opcji (takich jak-F
lub--color
) dolso
.Rozwiązaniem jest zdefiniowanie
lso
jako funkcji, a nie aliasu.Jeśli wypróbowujesz to interaktywnie w swojej powłoce, uruchom,
unalias lso
aby usunąć alias - możesz to zrobić przed lub po zdefiniowaniu funkcji. Jeśli umieszczasz go w pliku źródłowym, takim jak~/.bashrc
, po prostu wyjmijalias
linię i dodaj definicję funkcji.Dlaczego to działa? W przeciwieństwie do aliasów, funkcje powłoki bash mogą przyjmować parametry pozycyjne , tj . Argumenty wiersza poleceń .
"$@"
rozwija się do pełnej listy argumentów , powodując przekazanie argumentów dolso
funkcjils
. (W przeciwieństwie do definicji aliasu, treść funkcji nie jest cytowana; dlatego konieczne było usunięcie\
znaków przed$
i"
.)Ponieważ możesz przekazać opcje,
lso
gdy zdefiniujesz w ten sposób jako funkcję, możesz usunąć opcje-a
i-G
z definicji - możesz przekazać je ręcznie w przypadkach, w których chcesz. ( Opcja jest wymagana do informacji takich jak uprawnienia do plików mają być wyświetlane w ogóle , więc nie ma korzyści do usuwania go.)-l
Dzięki techtonik za wskazanie ograniczenia w definiowaniu
lso
jako alias, co zmotywowało mnie do rozszerzenia tego postu o materiał na temat uczynienia go zamiast tego funkcją.1 Można zauważyć, że wydaje się to lekceważyć ogólną zasadę nie analizowania wyników
ls
.ls
zapewnia wyjście bardzo czytelne dla człowieka; wprowadza to osobliwości i ograniczenia, przez co ogólnie nie nadaje się jako dane wejściowe dla innych poleceń. W tym przypadku analizujemy,ls
ponieważ chcemy zachować dokładne zachowaniels
oprócz naszej jednej dodanej zmiany.2 Jednym z ograniczeń tego aliasu, który ma również zastosowanie do pokazanej poniżej wersji funkcji i który można uznać za błąd, jest to, że wyświetla on tylko trzy cyfry ósemkowe, nawet gdy czwarta cyfra ósemkowa wynosi zero. Jak jfmercer został słusznie zauważył , cyfry ósemkowe wyświetlane tutaj nie odzwierciedlają sticky bit jeżeli jest obecny, ani suid lub sgid bitów.
3 poważniej niż tylko nie pokazuje czwartą cyfrę ósemkowy jest to, że metoda ta zakłada, że nie są one ustawione, a jeśli są - jeśli widzisz
t
,s
lubS
w ciągu uprawnień - to należy lekceważyć cyfry ósemkowe . Jest tak, ponieważ bity są wywnioskowane z ciągu uprawnień w sposób, który nie uwzględnia lepkich bitów setuid / setgid.źródło
awk: read error (Is a directory)
--color
parametr kolorów pokazulso() { ls -alG "$@" --color | 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}'; }
Po prostu rozszerzam \ upraszczając poprzednie odpowiedzi związane ze „stat”:
Możesz po prostu uruchomić:
Dane wyjściowe będą zawierały uprawnienia ósemkowe wraz z innymi informacjami.
Szczegóły (wersja statystyki i przykład):
Zauważ, że: ( 0644 / RW-R - R-),
źródło
Aby zapewnić przenośność, możesz użyć
perl
:Jeśli chcesz zauważyć, kiedy wystąpi błąd, spróbuj:
źródło
Możesz użyć
find
z-printf
akcją.ls
nie pokazuje uprawnień ósemkowych, ale możesz skorzystać z tegofind
obejścia:Na przykład, aby sprawdzić mój katalog wideo:
Specyfikator
%m
formatu nakazuje-printf
akcji wydrukowanie uprawnień ósemkowych, a specyfikator%f
formatu powoduje wydrukowanie nazwy pliku.Możesz przekazać wiele nazw plików do
find
. Możesz nawet używać globów (npfind * -printf "%m:%f\n"
.).Nie musisz używać testu takiego jak
-name
lub-iname
; wystarczy podać nazwy plików lub katalogów, którymi jesteś zainteresowany, jako punkty wyjściafind
. To znaczy, podaj ich nazwy jako argumenty bezpośrednio po słowiefind
, jak pokazano powyżej.find
daje doskonałą kontrolę nad sposobem wyświetlania wyników. W szczególności istnieją dwie modyfikacje, które mogą okazać się przydatne:Domyślnie
find
rekursuje podkatalogi, podobnie jakls -R
. Jeśli nie chceszfind
odwiedzać podkatalogów punktów początkowych, które mu przekazujesz, możesz dodać-maxdepth 0
(lub użyć-maxdepth
z innymi wartościami, aby wskazać, jak głęboko chcesz zejść).%f
pokazuje tylko nazwę pliku, więc jeślifind
trzeba powtórzyć, aby dostać się do pliku, możesz nie wiedzieć, gdzie się on znajduje. Aby wyświetlić ścieżkę, zaczynając od dowolnego punktu początkowego, w którym plik został znaleziony, użyj%p
zamiast tego.Zobacz
man find
więcej informacji na temat używaniafind
polecenia.Inna metoda (
ls
iawk
)Można to wykorzystać do wyświetlenia listy wszystkich plików katalogu z ich uprawnieniami:
Jest to w zasadzie to samo polecenie, co w aliasie Adama Courtemanche'a
lso
, który przywołano w tej odpowiedzi , wystarczy uruchomić jako jedno polecenie. Jeśli używasz tego tylko raz lub w rzadkich przypadkach, możesz nie chcieć zawracać sobie głowy pisaniem go jako aliasu lub funkcji powłoki.źródło