Ce face os.Chmod
os.Chmod este echivalentul comenzii chmod. Drepturile se scriu în octal, trei cifre pentru proprietar, grup și ceilalți: 4 = citire, 2 = scriere, 1 = execuție. 0o600 = doar proprietarul citește și scrie; 0o755 = proprietarul face tot, ceilalți citesc și execută.
Spre deosebire de crearea fișierelor, Chmod nu ține cont de umask: drepturile date sunt cele care rămân. Pe Windows se poate schimba doar atributul „doar citire”.
Parametri
| Parametru | Descriere |
|---|---|
name |
Calea fișierului sau directorului. |
mode |
Drepturile noi, de exemplu 0o644, 0o600, 0o755. |
Ce returnează
nil la succes sau eroarea (fișier inexistent, nu ești proprietarul).
Exemple
Exemplul 1: Un fișier privat
Mode() afișează drepturile în formatul cunoscut din ls -l.
package main
import (
"fmt"
"os"
)
func main() {
os.WriteFile("parola.txt", []byte("secret"), 0o644)
os.Chmod("parola.txt", 0o644)
info, _ := os.Stat("parola.txt")
fmt.Println("înainte:", info.Mode())
os.Chmod("parola.txt", 0o600)
info, _ = os.Stat("parola.txt")
fmt.Println("după: ", info.Mode())
}
Rezultat
înainte: -rw-r--r--
după: -rw-------
Exemplul 2: Un script executabil
Verificăm bitul de execuție pentru proprietar (0o100).
package main
import (
"fmt"
"os"
)
func main() {
os.WriteFile("backup.sh", []byte("#!/bin/sh\necho gata\n"), 0o644)
info, _ := os.Stat("backup.sh")
fmt.Println("executabil?", info.Mode().Perm()&0o100 != 0)
os.Chmod("backup.sh", 0o755)
info, _ = os.Stat("backup.sh")
fmt.Println("executabil?", info.Mode().Perm()&0o100 != 0, info.Mode())
}
Rezultat
executabil? false
executabil? true -rwxr-xr-x
Exemplul 3: Fișier doar pentru citire
După 0o444, scrierea eșuează cu „permission denied” (dacă nu rulezi ca root).
package main
import (
"fmt"
"os"
)
func main() {
os.WriteFile("contract.txt", []byte("versiunea finală"), 0o644)
os.Chmod("contract.txt", 0o444)
err := os.WriteFile("contract.txt", []byte("modificat"), 0o644)
fmt.Println("scriere:", err)
}
Rezultat
scriere: open contract.txt: permission denied
Greșeli frecvente
- Scrii drepturile în zecimal:
os.Chmod(f, 755)înseamnă altceva decât0o755. - Dai
0o777ca să „meargă”. Oricine de pe sistem poate modifica fișierul; dă doar drepturile necesare.
Comenzi înrudite
os.Chown: Schimbă proprietarul și grupul unui fișier; Lchown face același lucru pentru o legătură simbolică.os.WriteFile: Scrie octeții dați într-un fișier: îl creează dacă lipsește și îi înlocuiește conținutul dacă există.os.File.Stat: Returnează informații despre fișierul deschis: nume, dimensiune, drepturi, data modificării, dacă e director.os.IsPermission: Spune dacă o eroare a apărut din lipsa drepturilor de acces (permission denied).