C'è qualche differenza tra i valori della modalità 0777 e 777


Risposte:


76

Se li stai passando a chmod(il programma da riga di comando), non c'è differenza. Ma in un programma C o simile, 0777è ottale (tre serie di tre 1 bit, che è quello che intendi), mentre 777è decimale, ed è un modello di bit piuttosto diverso. ( chmodinterpreterà qualsiasi argomento numerico come ottale, quindi non è necessario lo zero iniziale).

0777 (ottale) == binario 0b 111 111 111    == autorizzazioni rwxrwxrwx   (== decimale 511)

777 (decimale) == binario 0b 1 100 001 001== autorizzazioni sr----x--x(== ottale 1411)


14
Giusto per essere chiari: il valore che passi al chmodcomando viene sempre interpretato come ottale. L'utilizzo chmod 888darà un errore.
Mattdm,

ma ogni cifra è ottale, non l'intero numero stesso.
Drake Clarris,

1
Una stringa di cifre ottali è un numero ottale. chmodinterpreta un argomento numerico come ottale, indipendentemente dal prefisso. (Ma in realtà il numero stesso non ha alcuna funzione; solo le cifre, o piuttosto i bit.)
alexis

Quindi, in un programma C, se vuoi passare 1777, devi scrivere 01777?
Faheem Mitha,

1
@ Faheem, esatto. Octal 1777è scritto 01777in C. (O potresti scrivere 1023, che è lo stesso numero in decimale. Ma non :-)
alexis

4

Il primo bit viene utilizzato per il bit appiccicoso http://en.wikipedia.org/wiki/Sticky_bit

Se si imposta l'autorizzazione utilizzando 4 cifre, la prima imposterà o rimuoverà questo bit.


3
La parte adesiva non è la prima, ma la terza. Il primo è il bit di suid e il secondo quello di sgid. Se si impostano le autorizzazioni utilizzando tre cifre, anche la prima cifra mancante influirà (cioè rimuoverà) questi tre bit.
jlliagre,

Hai ragione. Ergo, la "risposta fornita da alexis sta
scrivendo

2
@jlliagre Dalla pagina man di chmod - "Si presume che le cifre omesse siano zeri iniziali.". Inoltre, la prima cifra di 4 è il bit appiccicoso. Di nuovo dalla pagina man: "La prima cifra seleziona l'ID utente impostato (4) e imposta l'ID gruppo (2) e la cancellazione limitata o gli attributi appiccicosi (1). La seconda cifra seleziona le autorizzazioni per l'utente che possiede il file: read ( 4), scrivi (2) ed esegui (1); il terzo seleziona le autorizzazioni per altri utenti nel gruppo del file, con gli stessi valori; e il quarto per gli altri utenti non nel gruppo del file, con gli stessi valori. ".
Faheem Mitha,

1
@FaheemMitha, cifre omesse si presume siano zeri quindi si rimuovere i bit suddetti. Inoltre, sembri confondere bit e cifre, stavo commentando il primo bit, non la prima cifra.
jlliagre,

1
@jlliagre Ok, abbastanza giusto.
Faheem Mitha,

1

La risposta interessante è:

  • non vi è alcuna differenza tra 0700e 700, come spiegato nelle altre risposte
  • ma v'è una differenza tra 00700e 0700(per le directory)

Almeno questo è il caso della versione chmod di GNU coreutils, che è l'impostazione predefinita su Linux.

Vedi questo esempio:

$ ls -ld mydir
drws--s--- 4 myuser mygroup 4096 Jul  8 09:27 mydir
$ chmod 0710 mydir ; ls -ld mydir                   # surprise ahead -- s-bits remain:
drws--s--- 4 myuser mygroup 4096 Jul  8 09:27 mydir
$ chmod 00710 mydir ; ls -ld mydir                  # _now_ they're gone:
drwx--x--- 4 myuser mygroup 4096 Jul  8 09:27 mydir

Questo per evitare la cancellazione accidentale di bit setuid / setgid per le directory. Per i dettagli, consultare la documentazione di chmod .


-1

Nel sistema Linux sono disponibili due tipi di autorizzazioni:

  1. Autorizzazione file
  2. Autorizzazione speciale

In Autorizzazione file impostiamo l'autorizzazione per file e cartelle:

Le autorizzazioni sono:

  • leggere (4)
  • write (2)
  • eseguire (1)

Con l'autorizzazione speciale tre tipi di autorizzazione sono:

  • SUID (4)
  • SGID (2)
  • Sticky Bit (1)

Nella tua domanda chiedi qual è la differenza, quindi non c'è alcuna differenza tra chmod 777 and 0777perché c'è no any octal valuequale mostra il valore di (0) zero.

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.