„chmod u + x” versus „chmod + x”

112

Jaka jest różnica między chmod u+xi sprawiedliwy chmod +x? Widziałem mnóstwo samouczków, które mówią, aby używać u+xskryptów do wykonywania. Jednak pominięcie unie wydaje się mieć żadnego efektu.

Nathan Schwermann
źródło

Odpowiedzi:

148

Strona chmodpodręcznika użytkownika obejmuje to.

  • u oznacza dla użytkownika.
  • g oznacza grupę.
  • o oznacza innych.
  • stoi dla wszystkich.

Oznacza to, że chmod u+x somefileprzyzna tylko właścicielowi uprawnień do wykonywania tego pliku, ale chmod +x somefilejest 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.

Oktawian Damiean
źródło
Mam małe pytanie, jaka jest różnica między znakiem + i powiedzmy 111. To sprawia, że ​​oba są wykonywalne
TheBro21
Jest tak, ponieważ 1 to ósemkowa notacja oznaczająca pozwolenie na wykonanie. 111 oznacza plik wykonywalny dla użytkownika, grupy i innych.
Octavian Damiean
Świetna czysta odpowiedź
m4heshd
Efekt umask jest ważny, chmod +x fileróżni się od chmod a+x file- szczegóły patrz odpowiedź Ravexiny.
Cinnam,
19

Po prostu +xzastosuje to do wszystkich flag: [u] ser, [g] roup, [o] thers.

Wpisz man chmodwięcej informacji.

matpie
źródło
Obiecuję, że najpierw sprawdziłem instrukcję, ale jej nie widziałem, ponieważ pominąłem opis i zeskoczyłem do opcji. Widzę je teraz :-)
Nathan Schwermann
14

Wymagania

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ć.


Krótka wersja

  • chmod +xjest równa chmod ugo+x(na podstawie umaskwartości)
  • chmod a+xjest równa chmod ugo+x(bez uwzględnienia umaskwartości)

Wyjaśnienie

Wynikiem chmod a+xjest ustawienie bitu wykonywalnego dla wszystkich (Właściciel, Grupa, Inni), łatwe, prawda?

Jednak chmod +xjest to trochę trudne, mówi umaskwartość użytkowa i na podstawie tej wartości dodaj xkażdemu, kto jest dozwolony.

Jeśli więc umaskmoim środowiskiem jest 0002:

$ umask
0002
$ umask -S
u=rwx,g=rwx,o=rx

Zostanie dodany xdo 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+xsama 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+xi wyjściem umask -S?

Teraz zmieńmy umaskbieżą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 +xto, że jest teraz równe chmod u+x,g+xlub chmod ug+x.


Czas pytań!

Co się stanie, jeśli uruchomię chmod +wplik po ustawieniu umaskna 0003?

Tak samo jak przedtem, to wpływa tylko useri grouppliku bo 3 usuwa również uprawnienie write (2).


Premia

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
Ravexina
źródło
7

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 +xlub 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.

Belacqua
źródło
przepraszam, ale to też nie działało dla mnie. Wypróbowałem to z sudo i nie działa na moim komputerze. askubuntu.com/questions/178231/how-to-set-permission-in-ubuntu
Anirudha Gupta
@AnkitGupta Nie jestem pewien, co mówisz. Mój komentarz nie miał na celu rozwiązania problemu w innym pytaniu i odpowiedziach. Zamiast tego spróbuj poprosić o wyjaśnienie. Edytuj swoje pytanie, aby powiedzieć, co próbowałeś. Pokaż wynik.
belacqua,
1
  • chmod u+x fileoznacza dodanie bitu wykonywalnego do właściciela pliku, ignorując umask(Twój mod zostanie ustawiony, bez wątpienia).

  • chmod +x fileoznacza dodanie bitu wykonywalnego do właściciela, grupy i innych osób, biorąc pod uwagę umask(Najpierw sprawdź, a umasknastę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ć umaskna „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ć, chmodzignorowano umaski plik1 otrzymał bit wykonywalny dla swojego właściciela, jednak drugi nie zrobił nic, ponieważ rozważa wartość umask.

Ravexina
źródło