chmod
| Chmod | |
| Autor inițial | Laboratoarele Bell |
|---|---|
| Dezvoltator | Diverși dezvoltatori open-source și comercial |
| Versiune inițială | 3 noiembrie 1971 |
| Scris în | Plan 9: C |
| Sistem de operare | Unix, Unix-like, Plan 9, Inferno, IBM i |
| Platformă | Cross-platform |
| Tip | Command |
| Licență | coreutils: GPLv3 Plan 9: MIT License |
| Prezență online | |
| Modifică date / text | |
chmod este o comandă shell pentru modificarea permisiunilor de acces și a indicatorilor de mod special pentru fișiere, inclusiv fișiere speciale, cum ar fi directoarele. Numele este o prescurtare de la „change mod”, unde „mod” se referă la permisiuni și indicatori în sens colectiv.[1]
Comanda își are originea în AT&T Unix versiunea 1 și a fost folosită inițial doar pe sistemele de operare Unix și de tip Unix, până când a fost portată pe alte sisteme, precum Windows (prin UnxUtils)[2] și IBM i.[3]
În sistemele de operare Unix și de tip Unix, o comandă de sistem cu același nume oferă acces la datele de control al accesului. Comanda expune capacitățile apelului de sistem către utilizatorul shell.
Pe măsură ce a crescut nevoia de permisiuni mai avansate pentru sistemele de fișiere, listele de control al accesului[4] au fost adăugate la multe sisteme de fișiere pentru a extinde modurile controlate prin chmod.
Implementarea chmod inclusă în GNU coreutils a fost scrisă de David MacKenzie și Jim Meyering.[5]
Utilizare
[modificare | modificare sursă]Deși sintaxa comenzii variază oarecum în funcție de implementare, aceasta acceptă în general fie o singură valoare octală, care specifică toți biții de mod ai fiecărui fișier, fie o listă de specificatori simbolici separați prin virgulă, care descriu cum se modifică biții de mod existenți. Argumentele rămase sunt o listă de căi către fișierele care urmează să fie modificate.[6]
Modificarea permisiunilor este permisă doar superutilizatorului și proprietarului unui fișier.
Dacă este specificată o legătură simbolică, biții de mod ai țintei sunt ajustați. Permisiunile asociate direct cu intrarea din sistemul de fișiere reprezentată de legătura simbolică nu sunt, de obicei, utilizate.
Opțiuni
[modificare | modificare sursă]Opțiunile din linia de comandă pot include:
- -R: recursiv; include fișierele și subdirectoarele conținute în directoarele specificate
- -v: mod detaliat; afișează numele fișierelor modificate
Notație octală
[modificare | modificare sursă]Atunci când primește un argument numeric pentru permisiuni, comanda chmod îl tratează ca pe un număr octal[7] și înlocuiește toți biții de mod pentru fiecare fișier. Deși sunt specificate patru cifre, cifra 0 din față poate fi omisă.
Există doisprezece biți standard de mod: trei biți speciali (setuid, setgid și sticky) și trei grupuri de permisiuni pentru utilizator, grup și alții, fiecare cu câte 3 biți: citire, scriere și execuție. Fiecare bit acordă acces dacă este setat și îl refuză dacă este șters.
Deoarece o cifră octală reprezintă 3 biți, cei doisprezece biți de mod pot fi reprezentați prin patru cifre octale. chmod acceptă până la patru cifre și folosește 0 pentru cifrele din stânga nespecificate. În practică, de obicei se folosesc trei cifre, deoarece modurile speciale sunt rareori utilizate, iar clasa utilizatorului este de obicei specificată.
În contextul unei cifre octale, valorile sunt: citire = 4, scriere = 2, execuție = 1. Tabelul următor leagă valorile octale de permisiunile corespunzătoare.
| # | biți | rwx | operațiuni acordate |
|---|---|---|---|
| 7 | 4 + 2 + 1 | rwx | citire, scriere și execuție |
| 6 | 4 + 2 | rw- | citire și scriere |
| 5 | 4 + 1 | r-x | citire și execuție |
| 4 | 4 | r-- | doar citire |
| 3 | 2 + 1 | -wx | scriere și execuție |
| 2 | 2 | -w- | doar scriere |
| 1 | 1 | --x | doar execuție |
| 0 | --- | niciuna |
Comanda stat poate raporta permisiunile unui fișier în notație octală. De exemplu:
$ stat -c %a findPhoneNumbers.sh
754
Valoarea 754 indică următoarele permisiuni:
- clasa utilizator: citire, scriere și execuție; 7 = 4 + 2 + 1
- clasa grup: citire și execuție; 5 = 4 + 1
- alte clase: doar citire; 4
Un cod permite execuția dacă și numai dacă este impar (1, 3, 5 sau 7). Un cod permite citirea dacă și numai dacă este mai mare sau egal cu 4 (4, 5, 6 sau 7). Un cod permite scrierea dacă și numai dacă este 2, 3, 6 sau 7.
Notație simbolică
[modificare | modificare sursă]Comanda chmod acceptă notație simbolică pentru modificarea permisiunilor existente.[8] Comanda acceptă o listă de specificatori separați prin virgulă, de forma:
[clase]+|-|= operații
Clasele mapate către permisiuni sunt următoarele. Un specificator de modificare poate selecta o clasă prin simbolul acesteia, mai multe clase prin concatenarea simbolurilor fără delimitator sau toate clasele fără a specifica un simbol. Când se folosește ultima metodă, biții măștii umask rămân neschimbați.[9]
| simbol | descriere |
|---|---|
| u | utilizator: proprietarul fișierului |
| g | grup: membrii grupului fișierului |
| o | alții: utilizatori care nu sunt nici proprietarul fișierului, nici membri ai grupului fișierului |
| a | toate cele trei clase; echivalent cu ugo |
Întrucât proprietatea este esențială pentru controlul accesului și, fiindcă notația simbolică folosește abrevierea „o”, unii cred în mod eronat că aceasta înseamnă „owner”, când, de fapt, înseamnă „others”.
Operatorii de modificare sunt:
| simbol | descriere |
|---|---|
| + | adaugă operațiuni |
| - | elimină operațiuni |
| = | setează câmpul complet de operațiuni; acordă operațiunile specificate și le elimină pe celelalte |
Operațiunile pot fi specificate astfel:
| simbol | descriere |
|---|---|
| r | citește un fișier obișnuit sau afișează conținutul unui director |
| w | scrie într-un fișier |
| x | execută un fișier obișnuit sau parcurge un arbore de directoare |
| X | execuție specială: aplică execuția directoarelor și fișierelor care au deja cel puțin o permisiune de execuție acordată; util mai ales cu + și, de obicei, împreună cu -R |
| s | mod setuid sau setgid |
| t | sticky mode |
Majoritatea implementărilor chmod suportă specificarea modurilor speciale în octal, dar unele nu o fac, ceea ce necesită notația simbolică.
Comanda ls poate raporta permisiunile fișierelor într-o notație simbolică similară cu cea folosită de chmod. ls -l afișează permisiunile prin 10 caractere. Primul indică tipul intrării din sistemul de fișiere, cum ar fi cratimă pentru fișier obișnuit și „d” pentru director. Urmează trei grupuri de câte trei litere care indică permisiunile de citire, scriere și execuție pentru utilizator, grup și alții. Fiecare poziție este fie o cratimă, dacă permisiunea lipsește, fie litera corespunzătoare, dacă este acordată.
De exemplu:
$ ls -l findPhoneNumbers.sh
-rwxr-xr-- 1 dgerman staff 823 Dec 16 15:03 findPhoneNumbers.sh
Specificatorul -rwxr-xr-- începe cu o cratimă, ceea ce indică faptul că findPhoneNumbers.sh este un fișier obișnuit, nu un director. Următoarele trei litere rwx arată că fișierul poate fi citit, scris și executat de utilizatorul proprietar dgerman. Următoarele trei litere r-x arată că fișierul poate fi citit și executat de membrii grupului staff. Ultimele trei litere r-- arată că fișierul este doar pentru citire pentru ceilalți utilizatori.
Exemple
[modificare | modificare sursă]Adăugați permisiunea de scriere pentru clasa de grup a unui director, permițând utilizatorilor din același grup să adauge fișiere:
$ ls -ld dir # înainte
drwxr-xr-x 2 jsmitt northregion 96 Apr 8 12:53 shared_dir
$ chmod g+w dir
$ ls -ld dir # după
drwxrwxr-x 2 jsmitt northregion 96 Apr 8 12:53 shared_dir
Eliminați permisiunea de scriere pentru toate clasele, împiedicând pe oricine să scrie în fișier:
$ ls -l ourBestReferenceFile
-rw-rw-r-- 2 tmiller northregion 96 Apr 8 12:53 ourBestReferenceFile
$ chmod a-w ourBestReferenceFile
$ ls -l ourBestReferenceFile
-r--r--r-- 2 tmiller northregion 96 Apr 8 12:53 ourBestReferenceFile
Setați permisiunile pentru clasele utilizator și grup doar pentru citire și execuție, fără permisiune de scriere:
$ ls -ld referenceLib
drwxr----- 2 ebowman northregion 96 Apr 8 12:53 referenceLib
$ chmod ug=rx referenceLib
$ ls -ld referenceLib
dr-xr-x--- 2 ebowman northregion 96 Apr 8 12:53 referenceLib
Activați citirea și scrierea pentru clasa de utilizator, făcând-o în același timp doar pentru citire pentru grup și alții:
$ chmod u=rw,go=r sample
$ ls -ld sample
drw-r--r-- 2 oschultz warehousing 96 Dec 8 12:53 sample
Pentru a seta recursiv accesul pentru directorul docs/ și fișierele conținute în acesta:
chmod -R u+w docs/
Pentru a seta utilizatorul și grupul doar pentru citire și scriere, iar alte persoane doar pentru citire:
chmod 664 file
Pentru a seta utilizatorul doar pentru citire, scriere și execuție, iar grupul și alții doar pentru citire:
chmod 744 file
Pentru a seta sticky bit pe lângă permisiunile utilizatorului, grupului și altora:
chmod 1755 file
Pentru a seta UID-ul pe lângă permisiunile de utilizator, grup și alte permisiuni:
chmod 4755 file
Pentru a seta GID pe lângă permisiunile de utilizator, grup și alte permisiuni:
chmod 2755 file
Note
[modificare | modificare sursă]- ↑ „Tutorial for chmod”. catcode.com. Arhivat din original la . Accesat în .
- ↑ „Native Win32 ports of some GNU utilities”. unxutils.sourceforge.net. Arhivat din original la . Accesat în .
- ↑ IBM. „IBM System i Version 7.2 Programming Qshell” (PDF). IBM (în engleză). Arhivat din original (PDF) la . Accesat în .
- ↑ „AIX 5.3 System management”. IBM knowledge Center. IBM. Arhivat din original la . Accesat în .
- ↑ „chmod(1): change file mode bits - Linux man page”. linux.die.net. Arhivat din original la . Accesat în .
- ↑ „chmod Man Page with examples and calculator - Linux - SS64.com”. ss64.com. Arhivat din original la . Accesat în .
- ↑ notează că „space delimited” este o caracteristică a shell-ului, nu a comenzii chmod în sine.
- ↑ „AIX 5.5 Commands Reference”. IBM Knowledge Center. IBM. Arhivat din original la . Accesat în .
- ↑ „Permissions masking with umask, chmod, 777 octal permissions”. teaching.idallen.com. Arhivat din original la . Accesat în .
Vezi și
[modificare | modificare sursă]Legături externe
[modificare | modificare sursă]
Materiale media legate de chmod la Wikimedia Commons- chmod(1): change file modes – FreeBSD General Commands Manual
- chmod(1) – Plan 9 Programmer's Manual, Volume 1
- chmod(1) – Inferno General commands Manual
- chmod — manual page from GNU coreutils
- GNU "Setting Permissions" manual
- CHMOD-Win 3.0 — Freeware Windows' ACL ↔ CHMOD converter
- Beginners tutorial with on-line "live" example