Jaka jest różnica między chmod u+x
i sprawiedliwy chmod +x
? Widziałem mnóstwo samouczków, które mówią, aby używać u+x
skryptów do wykonywania. Jednak pominięcie u
nie wydaje się mieć żadnego efektu.
Jaka jest różnica między chmod u+x
i sprawiedliwy chmod +x
? Widziałem mnóstwo samouczków, które mówią, aby używać u+x
skryptów do wykonywania. Jednak pominięcie u
nie wydaje się mieć żadnego efektu.
Odpowiedzi:
Strona chmod
podręcznika użytkownika obejmuje to.
Oznacza to, że chmod u+x somefile
przyzna tylko właścicielowi uprawnień do wykonywania tego pliku, ale chmod +x somefile
jest taki sam jak chmod a+x somefile
.
Strona podręcznika użytkownika chmod mówi:
Format trybu symbolicznego to
[ugoa...][[+-=][rwxXstugo...]...][,...]
. Można podać wiele operacji symbolicznych, oddzielonych przecinkami.Kombinacja liter „ugoa” kontroluje dostęp użytkowników do pliku zostanie zmieniony: użytkownik, który jest jego właścicielem (u), inni użytkownicy w grupie plików (g), inni użytkownicy spoza grupy plików (o), lub wszyscy użytkownicy (a). Jeśli nie podano żadnego z nich, efekt jest taki, jakby podano „a”, ale nie wpływa to na bity ustawione w umask.
chmod +x file
różni się od chmod a+x file
- szczegóły patrz odpowiedź Ravexiny.
Po prostu +x
zastosuje to do wszystkich flag: [u] ser, [g] roup, [o] thers.
Wpisz man chmod
więcej informacji.
Przede wszystkim proponuję przeczytać poniższe pytania i odpowiedzi, do których łącza znajdują się poniżej:
Pomaga zrozumieć wszystkie niezbędne części, które musisz znać.
chmod +x
jest równa chmod ugo+x
(na podstawie umask
wartości)chmod a+x
jest równa chmod ugo+x
(bez uwzględnienia umask
wartości)Wynikiem chmod a+x
jest ustawienie bitu wykonywalnego dla wszystkich (Właściciel, Grupa, Inni), łatwe, prawda?
Jednak chmod +x
jest to trochę trudne, mówi umask
wartość użytkowa i na podstawie tej wartości dodaj x
każdemu, kto jest dozwolony.
Jeśli więc umask
moim środowiskiem jest 0002
:
$ umask
0002
$ umask -S
u=rwx,g=rwx,o=rx
Zostanie dodany x
do użytkownika (właściciela), grupy i innych, w tej sytuacji (która jest sytuacją domyślną dla większości systemów) jest dokładnie taka chmod ugo+x
sama lub taka sama chmod a+x
, lub w bardziej szczegółowej formie:
chmod u+x,g+x,o+x
Czy potrafisz dostrzec związek pomiędzy chmod u+x,g+x,o+x
i wyjściem umask -S
?
Teraz zmieńmy umask
bieżącą powłokę na 0003
:
$ umask 0003
$ umask
0003
$ umask -S
u=rwx,g=rwx,o=r
Jak widać teraz tylko właściciel i grupa otrzymają bit wykonywalny, a nie pozostali. Oznacza chmod +x
to, że jest teraz równe chmod u+x,g+x
lub chmod ug+x
.
Co się stanie, jeśli uruchomię chmod +w
plik po ustawieniu umask
na 0003
?
Tak samo jak przedtem, to wpływa tylko user
i group
pliku bo 3 usuwa również uprawnienie write (2).
Ma taki sam efekt, gdy usuwasz trochę chmod -w
:
$ mkdir test
$ stat -c %A test
drwxrwxr-x
$ umask
0002
$ chmod +w test
$ stat -c %A test
drwxrwxr-x
$ chmod a+w test
$ stat -c %A test
drwxrwxrwx
$ chmod -w test
chmod: test/: new permissions are r-xr-xrwx, not r-xr-xr-x
$ stat -c %A test
dr-xr-xrwx
chmod u+x
sprawi, że plik będzie wykonywalny dla twojego użytkownika (doda go tylko dla twojego użytkownika, chociaż może być już wykonywalny przez właściciela grupy lub „inny”).
chmod +x
lub chmod a+x
(„bit wykonywalny plus”) powoduje, że plik jest wykonywalny przez wszystkich.
Jeśli zrobisz to w katalogu, katalog będzie można przeszukiwać. To znaczy, możesz wyświetlić zawartość katalogu, na którym masz uprawnienia + x.
chmod u+x file
oznacza dodanie bitu wykonywalnego do właściciela pliku, ignorując umask
(Twój mod zostanie ustawiony, bez wątpienia).
chmod +x file
oznacza dodanie bitu wykonywalnego do właściciela, grupy i innych osób, biorąc pod uwagę umask
(Najpierw sprawdź, a umask
następnie zastosuj mody, może to mieć różne efekty w zależności od wartości umask).
stwórzmy dwa pliki:
$ touch file1 file2
$ ls -l file1 file2
-rw-rw-rw- 1 ravexina ravexina 0 Aug 5 01:45 file1
-rw-rw-rw- 1 ravexina ravexina 0 Aug 5 01:45 file2
Teraz mogę ustawić umask
na „111”, aby usunąć bitów wykonywalnych: umask 111
.
$ chmod u+x file1
$ chmod +x file2
$ ls -l file1 file2
-rwxrw-rw- 1 ravexina ravexina 0 Aug 5 01:47 file1
-rw-rw-rw- 1 ravexina ravexina 0 Aug 5 01:47 file2
Jak widać, chmod
zignorowano umask
i plik1 otrzymał bit wykonywalny dla swojego właściciela, jednak drugi nie zrobił nic, ponieważ rozważa wartość umask.