Jaka jest różnica między „chmod + x” i „chmod 755”?

61

Gdy chodzi o podejmowanie plik wykonywalny Jaka jest różnica między chmod 755i chmod +xa kiedy użyłbym który? Do tej pory tylko użyłem chmod +xi po prostu coś przeczytałem i wykorzystałem chmod 755i nie mogłem powiedzieć, czy lepiej użyć, chmod 755czy nie chmod +x.

Darth4212
źródło
9
chmod +xustawia wszystkie flagi wykonywalne bez zmiany innych uprawnień. chmod 755ustawia rwxr-xr-x
paskudny
5
@ravery: Cześć! Znalazłeś sekcję komentarzy, która jest obszarem poświęconym krytykowaniu i proszeniu o wyjaśnienia. Aby podać odpowiedź / rozwiązanie, użyj poniższej sekcji „odpowiedz” (poszukaj dużego czerwonego przycisku „Opublikuj swoją odpowiedź”). Mam nadzieję, że to pomaga!
Wyścigi lekkości na orbicie

Odpowiedzi:

144

Krótka wersja:

Aby móc je porównać, powinniśmy spojrzeć na nie z tej samej perspektywy, więc:

  • chmod +xjest równa chmod ugo+x(na podstawie umaskwartości)
  • chmod 755 jest równe chmod u=rwx,go=rx

Wyjaśnienie:

Po pierwsze powinieneś wiedzieć, że:

  1. + oznacza dodanie tego uprawnienia do innych uprawnień, które już ma plik.
  2. = oznacza zignoruj ​​wszystkie uprawnienia, ustaw je dokładnie tak, jak podaję.

    • Tak więc wszystkie „odczyt, zapis, wykonanie, lepki bit, suid i guid” zostaną zignorowane i zostaną ustawione tylko te dostarczone.
  3. odczyt = 4, zapis = 2, wykonanie = 1

    • Oto logika binarna (jeśli jesteś zainteresowany):

      Symbolic:  r-- -w- --x  |  421
      Binary:    100 010 001  |  -------
      Decimal:    4   2   1   |  000 = 0
                              |  001 = 1
      Symbolic:  rwx r-x r-x  |  010 = 2
      Binary:    111 101 101  |  011 = 3
      Decimal:    7   5   5   |  100 = 4
                 /   /   /    |  101 = 5
      Owner  ---/   /   /     |  110 = 6
      Group  ------/   /      |  111 = 7
      Others ---------/       |  Binary to Octal chart
      

Za pomocą +xkomendy dodajesz ( +) bit wykonywalny ( x) do właściciela, grupy i innych osób.

  • jest równy ugo+xlubu+x,g+x,o+x
  • Jeśli nie określisz, który z właścicieli, grup lub innych jest twoim celem, w takim przypadku xweźmie pod uwagę wszystkie z nich. I jak zauważył @Rinzwind, opiera się na umaskwartości, dodaje bit do tych, na które umaskpozwala. pamiętać, jeśli określić cel jak o+rwtedy umasknie ma już żadnego wpływu.
  • Nie dotyka innych modów (uprawnień).
  • Możesz także użyć, u+xaby dodać tylko bit wykonywalny do właściciela.

Za pomocą 755określasz:

  • 7 -> u=rwx(4 + 2 + 1 dla właściciela)
  • 5 -> g=rx(4 + 1 dla grupy)
  • 5 -> o=rx(4 + 1 dla innych)

Tak chmod 755jest jak: chmod u=rwx,g=rx,o=rxlub chmod u=rwx,go=rx.

wprowadź opis zdjęcia tutaj

Ravexina
źródło
15
bardzo ważny dodatek: podczas używania chmod 755ustawiasz te bity ORAZ usuwasz wszystkie bity suid / sgid / sticky (które mogły tam być) (na przykład: NIGDY chmod 755 /tmp). 755 należy zawsze uważać za 0755, tzn. Pierwszy ósemkowy zestaw bitów jest również ustawiony na 0.
Olivier Dulac
1
prawie idealne, więc przedwczesne +1 (tak, dostałeś ode mnie odznakę
:)
@OlivierDulac Dzięki, nie chciałem wdawać się w zbyt wiele szczegółów, ale zaktualizuję odpowiedź ...
Ravexina
1
Myślę, że właśnie zrozumiałem, jak działają uprawnienia, dzięki!
Fabich,
37

chmod +x dodaje uprawnienia wykonywania dla wszystkich użytkowników do istniejących uprawnień.

chmod 755ustawia 755uprawnienia do pliku.

755 oznacza pełne uprawnienia właściciela oraz odczytywanie i wykonywanie uprawnień dla innych.

Pilot 6
źródło
7

Innym sposobem spojrzenia na to (co wydaje mi się łatwiejsze do zrozumienia) chmod +xjest ustawienie względnych uprawnień , a chmod 755ustawienie ich absolutnie .

Po chmod 755uruchomieniu na pliku jego uprawnienia będą wynosić 755 lub rwxr-xr-x.

chmod +xpo prostu weźmie istniejące uprawnienia i doda uprawnienia do wykonania pliku.

Baptiste Candellier
źródło
6

Polecam przejrzenie strony podręcznika użytkownika chmod w celu uzyskania szczegółowych informacji. Widzisz tylko dwa różne tryby działania dostępne za pomocą komendy chmod, aby wykonać to samo zadanie zmiany uprawnień.

Tryb ósemkowy używa liczb i ustawia całe uprawnienia do pliku. Tryb znaków korzysta z liter i zwykle służy do modyfikowania istniejących uprawnień.

chmod 755ustawia, rwxr-xr-xa jednocześnie chmod +xdostosowuje uprawnienia, aby właściciel, grupa i świat mieli dodane uprawnienia do plików wykonywalnych. Zakładając, że domyślne uprawnienia do pliku rwxr--r--dostosują go do tych samych uprawnień, co 755 z rwxr-xr-x.

Cylinder
źródło
5

Różnica polega na tym, jakie uprawnienia są ustawione i jakiego trybu używasz, aby je ustawić.

Po chmod +xustawieniu bitu wykonywalnego dla wszystkich - właściciela, grupy właścicieli i innych użytkowników. Jest to znane jako tryb symboliczny. Cytując man chmod:

Operator + powoduje, że wybrane bity trybu pliku są dodawane do istniejących bitów trybu pliku każdego pliku; - powoduje ich usunięcie; i = powoduje ich dodanie i usunięcie niewymienionych bitów, z wyjątkiem tego, że nie ma to wpływu na niewymienione bity identyfikatora użytkownika i grupy w katalogu.

Gdy chmod 755używasz liczb ósemkowych, których binarna reprezentacja służy do ustawiania określonych bitów uprawnień. Pierwsze (lewe) 3 bity odpowiadają uprawnieniom właściciela, środkowe 3 uprawnienia grupowe, a ostatnie (skrajne prawe) odpowiadają uprawnieniom wszystkich innych użytkowników. Kolejność bitów jest zawsze taka sama, read,write,executea rwxzatem właśnie dlatego, że kolejność jest taka sama, indywidualna liczba po przekształceniu w reprezentację binarną ustawi bity uprawnień, dla których odpowiadającym bitowi pozycyjnemu w liczbie jest 1, i odznacza wartość 0 . Konkretnie:

  • Liczba ósemkowa 7to 111 w formacie binarnym, więc ustawiasz wszystkie bity do odczytu, zapisu i wykonywania dla właściciela; rwxjest ustawiony.
  • Liczba ósemkowa 5to 101 w formacie binarnym, więc ustawiasz odczyt i wykonanie, ale wyłączasz zapisywanie bitów, a ponieważ jest to 5 dla grupy i innych użytkowników, te dwie kategorie będą miały te same uprawnienia. Tak r-xjest ustawione.

Oto małe demo:

    bash-4.3$ touch file1 file2
    bash-4.3$ chmod +x file1
    bash-4.3$ chmod 755 file2
    bash-4.3$ ls -l file1 file2
    -rwxrwxr-x 1 xieerqi xieerqi 0 7月   6 13:54 file1
    -rwxr-xr-x 1 xieerqi xieerqi 0 7月   6 13:54 file2
Sergiy Kolodyazhnyy
źródło
3

Jedną ważną różnicą jest to, że chmod + podlega ograniczeniom umask, a chmod <octal> nie.

Rozważ następujący przykład:

$ ls -l foo bar
---------- 1 gowenfawr users 0 Jul  7 16:40 bar
---------- 1 gowenfawr users 0 Jul  7 16:39 foo
$ umask
0022
$ chmod +w bar
$ umask 0002
$ chmod +w foo
$ ls -l foo bar
--w------- 1 gowenfawr users 0 Jul  7 16:40 bar
--w--w---- 1 gowenfawr users 0 Jul  7 16:39 foo
$

Jeśli więc chcesz zmienić różnicę w uprawnieniach w sposób odpowiedni dla twoich ustawień umask, użyj składni „+”. Ale jeśli chcesz ustawić to absolutnie bez względu na umask, użyj formatu <octal> i zdaj sobie sprawę, że musisz podać wszystkie bity, a nie tylko różnicę.

gowenfawr
źródło
1

Oprócz tych pięknych odpowiedzi chcę wspomnieć o małej, ale prawdopodobnie ważnej różnicy. Polecenie chmod 755 filejest równoważne z chmod 0755 file. Jeśli uruchomimy to polecenie na pliku, który ma ustawiony bit SETUID lub SETGID, usunie bit SETUID / SETGID. chmod +x filepozostawi bit SETUID / SETGID nietknięty. Widzimy to w następującym przykładzie:

~ $ test dotykowy
~ $ chmod u + s test
~ $ ll test
-rwSrw-r-- 1 mook mook 0 września 14 00:49 test
~ $ chmod + test x
~ $ ll test
-rwsrwxr-x 1 mook mook 0 września 14 00:49 test
~ $ test chmod 755
~ $ ll test
-rwxr-xr-x 1 mook mook 0 września 14 00:49 test
mook765
źródło