Cos'è una X maiuscola in posix / chmod?


11

So cosa sta ugoa (proprietario, il gruppo, gli altri, tutti) o rwx (lettura / destra / esecuzione) o 4,2,1 o -, f, d, l, e ho provato a leggere in man chmodper capire che cosa è un capitale Xin chmodma non c'era una voce per questo. Ho quindi letto in questo articolo in posix / chmod ma sono rimasto bloccato in questo passaggio:

Impostare il bit eseguibile solo se la destinazione a) è una directory b) ha già impostato almeno un bit eseguibile per qualsiasi utente, gruppo, altro.

Ho anche letto in questo articolo che fornisce questo esempio di codice:

chmod -R u=rwX,g=rX,o=rX testdir/

Comprendo che esiste un permesso ricorsivo per testdir/quanto riguarda il proprietario (u), il gruppo (g) e altri (o), ma ammetto che mi manca ancora l'intenzione della X maiuscola.

Forse una frase didattica qui potrebbe far luce su questo (il motivo principale per cui pubblico questo è perché non ho trovato una sessione SE su questo).

Aggiornare

Mi dispiace tutto, mi è mancato quello nell'uomo. Non immaginavo che la X apparisse prima dell'elenco degli argomenti e pensavo che la ricerca restituisse x invece X, mio ​​male.

Risposte:


20

La manpage dice:

esegui / cerca solo se il file è una directory o ha già i permessi di esecuzione per alcuni utenti ( X)

POSIX dice:

Il simbolo perm X deve rappresentare la parte di esecuzione / ricerca dei bit della modalità file se il file è una directory o se i bit della modalità file corrente (non modificata) hanno almeno uno dei bit di esecuzione (S_IXUSR, S_IXGRP o S_IXOTH) impostati. Deve essere ignorato se il file non è una directory e nessuno dei bit di esecuzione è impostato nei bit della modalità file corrente.

Questo è un flag di autorizzazione condizionale: chmodguarda qualunque cosa stia attualmente elaborando, e se è una directory, o se ha un bit di esecuzione impostato nelle sue autorizzazioni correnti (proprietario, gruppo o altro), si comporta come se l'autorizzazione richiesta fosse x, altrimenti lo ignora. La condizione verificata al momento chmodapplica l' Xistruzione specifica , quindi è possibile cancellare i bit di esecuzione nella stessa corsa con a-x,a=rwXper impostare solo il bit eseguibile sulle directory.

Puoi vedere se un file ha un bit di esecuzione impostato guardando la parte "access" statdell'output o la prima colonna di ls -l. I bit di esecuzione sono rappresentati da x. -rwxr-xr-xè comune per gli eseguibili e indica che il bit eseguibile è impostato per il proprietario, il gruppo e altri utenti; -rw-r--r--è comune per altri file e indica che il bit eseguibile non è impostato (ma il bit di lettura è impostato per tutti e il bit di scrittura per il proprietario). Vedere Informazioni sulle autorizzazioni UNIX e sui relativi attributi, che contiene molti più dettagli.

Quindi, nel tuo esempio, u=rwXimposta le autorizzazioni del proprietario per leggere e scrivere in tutti i casi e, per directory e file eseguibili, esegui; allo stesso modo per group ( g=rX) e other ( o=rX), leggere ed eseguire per directory e file eseguibili.

L'intento di questo operatore è consentire all'utente di fornire chmoduna varietà di file e directory e ottenere le autorizzazioni di esecuzione corrette (supponendo che nessuno dei file avesse un set di bit di esecuzione non valido). Evita di dover distinguere tra file e directory (come nella tradizione find . -type f -exec chmod 644 {} +e nei find . -type d -exec chmod 755 {} +comandi) e cerca di gestire gli eseguibili in modo ragionevole.

(Si noti che MacOSchmod supporta apparentemente solo Xper +le operazioni.)


Così l'ho visto e ho una comprensione sbagliata del termine "bit set". è un inode con proprietario: root e gruppo: root e permessi ---, ---, ---un indoe senza un "bit set"?
Arcticooling,

Sì, ---------significa che non sono impostati bit. Potresti trovare utile questa domanda .
Stephen Kitt,

Stephen, penso che l'aggiunta di una definizione dei termini "esegui set di bit" (che descriverei come ...,...,...) nonché "set di bit di esecuzione non valido" (descriverei come ---,---,---), all'inizio della risposta, potrebbe aiutare a renderlo ancora più didattico e ridurre le probabilità che qualcuno lo abbia perso; Questo è dove inizialmente mi sono innamorato di questo.
Arcticooling

@Arcticooling, beh, i permessi sono codificati in bit, e ad esempio la pagina man GNU per chmoddice che "cambia i bit in modalità file di ogni dato file" ecc. Quindi nel contesto, "esegui bit" rimanda a le tre possibili +xautorizzazioni (ugo) . A mio avviso, "no bits set" suona strano però, dal momento che non menziona alcun contesto.
ilkkachu,

@Arcticooling Ho aggiunto un paragrafo, se non altro per chiarire la tua comprensione si spera - "esegui set di bit" in quanto ...,...,...non significa nulla, né "set di bit di esecuzione non valido" (cosa non è valido?).
Stephen Kitt,

5

Dal man chmod:

Le lettere rwxXst selezionano i bit della modalità file per gli utenti interessati: leggi (r), scrivi (w), esegui (o cerca directory) (x), esegue / cerca solo se il file è una directory o ha già i permessi di esecuzione per alcuni utente (X), impostare l'ID utente o gruppo sull'esecuzione (i), flag di cancellazione limitato o bit appiccicoso (t).

(enfasi la mia).

Tuttavia ciò non lo chiarisce molto. Questo articolo ha le due regole che chiariscono cosa fa:


Ad esempio, immettiamo il seguente comando chmod su una directory:

# chmod -R u=rwX,g=rX,o=rX testdir/`  

Usando la X maiuscola, il comando sopra imposta l'attributo eseguibile secondo le seguenti due regole:

  1. Se il file è una directory, imposta l'attributo eseguibile per il proprietario, il gruppo e il mondo, il che significa che possono accedere a questa directory.

  2. Se il file è un file normale, aggiungerà l'attributo eseguibile alle sue autorizzazioni, se il file ha già un bit di esecuzione impostato. Se il file non ha bit di esecuzione impostato, nessuno verrà aggiunto.

Usando la x minuscola sarebbe impossibile ottenere questo risultato con un solo comando.


La speranza che chiarire l' uso di X .


1

Per favore non dare il pollice su questa risposta. È proprio quello che ho capito dalla risposta di Stephen Kitt sopra, che ho accettato come corretto.


1) Una X maiuscola come in a=rwXdice: Tutte le directory trovate avranno x e tutti i file normali trovati che hanno almeno 1 bit eseguibile in uno dei tre gruppi di autorizzazioni, otterranno anche x in tutti e tre i gruppi.

2) La combinazione di a-x(che assicura che tutti i file perdano il bit di esecuzione), e un successivo a=rwXdice: Ottieni i bit di lettura e scrittura ovunque e un bit di esecuzione solo su directory.

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.