Qual è la differenza tra "chmod + x" e "chmod 755"?


62

Quando si tratta di rendere eseguibile un file qual è la differenza tra chmod 755e chmod +xe quando dovrei usare quale? Finora ho usato solo chmod +xe ho appena letto qualcosa e ha usato chmod 755e non riuscivo a dire se fosse meglio usare chmod 755o meno chmod +x.


9
chmod +ximposta tutti i flag eseguibili senza modificare altre autorizzazioni. chmod 755imposta rwxr-xr-x
ravery il


5
@ravery: ciao! Hai trovato la sezione commenti, che è un'area dedicata alla critica e alla richiesta di chiarimenti. Per fornire una risposta / soluzione, è necessario utilizzare la sezione "risposta" di seguito (cercare il grande pulsante rosso "Pubblica risposta"). Spero che aiuti!
Lightness Races con Monica il

Risposte:


145

Versione breve:

Per poterli confrontare, dovremmo guardarli dalla stessa prospettiva, quindi:

  • chmod +xè uguale a chmod ugo+x(Basato sul umaskvalore)
  • chmod 755 è uguale a chmod u=rwx,go=rx

Spiegazione:

Innanzitutto dovresti sapere che:

  1. + significa aggiungere questa autorizzazione alle altre autorizzazioni già presenti nel file.
  2. = significa ignorare tutte le autorizzazioni, impostarle esattamente come io fornisco.

    • Quindi tutti i "read, write, execute, sticky bit, suid and guid" verranno ignorati e verranno impostati solo quelli forniti.
  3. leggi = 4, scrivi = 2, esegui = 1

    • Ecco la logica binaria dietro di essa (se sei interessato):

      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
      

Usando +xstai dicendo di aggiungere ( +) il bit eseguibile ( x) al proprietario, al gruppo e ad altri.

  • è uguale a ugo+xou+x,g+x,o+x
  • Quando non specifichi quale proprietario, gruppo o altri sia il tuo obiettivo, nel caso in cui xli considererà tutti. E come ha sottolineato @Rinzwind, si basa sul umaskvalore, aggiunge il bit a quelli che umaskconsente. ricorda se specifichi il bersaglio come o+rallora umasknon ha più alcun effetto.
  • Non tocca le altre mod (permessi).
  • È inoltre possibile utilizzare u+xsolo per aggiungere bit eseguibile al proprietario.

Usando 755si specifica:

  • 7 -> u=rwx(4 + 2 + 1 per il proprietario)
  • 5 -> g=rx(4 + 1 per gruppo)
  • 5 -> o=rx(4 + 1 per gli altri)

Quindi chmod 755è come: chmod u=rwx,g=rx,o=rxo chmod u=rwx,go=rx.

inserisci qui la descrizione dell'immagine


15
un'aggiunta molto importante: quando si usano chmod 755si impostano quei bit E si cancellano anche tutti i bit suid / sgid / sticky (che potrebbero essere stati lì) (per esempio: MAI chmod 755 /tmp). 755 dovrebbe sempre essere considerato come 0755, ovvero anche la prima serie di bit ottali è impostata su 0.
Olivier Dulac,

1
quasi perfetto quindi un +1 prematuro (yay hai ottenuto quel distintivo da me
:)

@OlivierDulac Grazie, non volevo entrare in troppi dettagli ma aggiornerò la risposta ...
Ravexina,

1
Penso di aver appena capito come funzionano le autorizzazioni, grazie!
Fabich,


37

chmod +x aggiunge l'autorizzazione di esecuzione per tutti gli utenti alle autorizzazioni esistenti.

chmod 755imposta l' 755autorizzazione per un file.

755 indica le autorizzazioni complete per il proprietario e le autorizzazioni di lettura ed esecuzione per gli altri.


7

Un altro modo per esaminarlo (che trovo più facile da capire) è quello di chmod +ximpostare le autorizzazioni relativamente , mentre le chmod 755sta impostando assolutamente .

Dopo l' chmod 755esecuzione su un file, le autorizzazioni saranno 755 o rwxr-xr-x.

chmod +xprenderà solo le autorizzazioni esistenti e aggiungerà le autorizzazioni di esecuzione al file.


6

Consiglio di rivedere la pagina man di chmod per tutti i dettagli. Stai solo vedendo due diverse modalità operative disponibili con il comando chmod per eseguire la stessa attività di modifica delle autorizzazioni.

La modalità ottale utilizza i numeri e imposta tutte le autorizzazioni del file. La modalità personaggio utilizza le lettere e viene generalmente utilizzata per modificare solo le autorizzazioni esistenti.

chmod 755imposta rwxr-xr-xmentre chmod +xregola le autorizzazioni in modo che al proprietario, al gruppo e al mondo vengano aggiunte tutte le autorizzazioni eseguibili. Supponendo che un'autorizzazione di file predefinita rwxr--r--ne adegui le stesse autorizzazioni di 755 di rwxr-xr-x.


5

La differenza è quali autorizzazioni vengono impostate e quale modalità si utilizza per impostarle.

Con chmod +xte imposta il bit eseguibile per tutti: il proprietario, il gruppo proprietario e gli altri utenti. Questo è noto come modalità simbolica. Per citare il man chmod:

L'operatore + fa sì che i bit della modalità file selezionati vengano aggiunti ai bit della modalità file esistenti di ciascun file; - provoca la loro rimozione; e = fa sì che vengano aggiunti e causa la rimozione di bit non menzionati, tranne per il fatto che i bit ID utente e gruppo impostati non menzionati di una directory non sono interessati.

Con i chmod 755numeri ottali, la cui rappresentazione binaria viene utilizzata per impostare bit specifici di autorizzazioni. Il primo (a sinistra) 3 bit corrisponde alle autorizzazioni del proprietario, il terzo alle autorizzazioni del gruppo e l'ultimo (all'estrema destra) corrisponde alle autorizzazioni di tutti gli altri utenti. L'ordine dei bit è sempre lo stesso, read,write,executeo rwxCosì, esattamente perché l'ordine è lo stesso, il numero individuale quando convertito in rappresentazione binaria, imposterà i bit di autorizzazione per i quali il bit posizionale corrispondente nel numero è 1 e non imposta quello che è 0 In particolare:

  • Il numero ottale 7è 111 in binario, quindi stai impostando tutti i bit di lettura, scrittura ed esecuzione per il proprietario; rwxè impostato.
  • Il numero ottale 5è 101 in binario, quindi stai impostando la lettura e l'esecuzione ma disabilita i bit di scrittura e poiché è 5 per il gruppo e altri utenti, queste due categorie avranno le stesse autorizzazioni. Così r-xè impostato.

Ecco la piccola 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

3

Una differenza importante è che chmod + è soggetto a restrizioni umask e chmod <octal> non lo è.

Considera il seguente esempio:

$ 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
$

Quindi, se si desidera apportare una modifica delta alle autorizzazioni in un modo adeguato alle impostazioni di umask, utilizzare la sintassi '+'. Ma se vuoi impostarlo assolutamente senza riguardo a umask, usa il formato <octal>, e renditi conto che devi specificare tutti i bit e non solo un delta.


1

Oltre a queste belle risposte, voglio menzionare una piccola ma probabilmente importante differenza. Il comando chmod 755 fileè equivalente a chmod 0755 file. Se eseguiamo questo comando su un file che ha impostato SETUID-bit o SETGID-bit, rimuoverà SETUID / SETGID-bit. chmod +x filelascerà intatto il bit SETUID / SETGID. Possiamo vedere questo nel seguente esempio:

~ $ test del tocco
~ $ chmod u + s test
~ $ ll test
-rwSrw-r-- 1 mook mook 0 set 14 00:49 test
~ $ chmod + x test
~ $ ll test
-rwsrwxr-x 1 mook mook 0 set 14 00:49 test
~ $ chmod 755 test
~ $ ll test
-rwxr-xr-x 1 mook mook 0 set 14 00:49 test
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.