Chmod

**chmod** er et dataprogram til å endre filers rettigheter i et Unix-filsystem (av engelsk *change mode*). Det er et av standardprogrammene i Unix-liknende operativsystemer. Merk at "fil" i Unix-sammenheng betyr en vilkårlig node i mappehierarkiet, for eksempel en mappe eller en *vanlig fil*. Mange programmeringsspråk har funksjoner som gjør det samme som chmod-programmet, og som typisk også heter chmod.

## Filrettigheter i Unix-filsystemer
Filsystemer til bruk i Unix-liknende operativsystemer lagrer et sett av metadata for hver fil, *attributter*, hvorav rettighetene er de 12 minst signifikante bitene av tallet *mode*. Bare disse 12 bitene, vist i tabellen nedenfor, kan endres av chmod:

### Betydning
* Hvis en bruker både eier fila og er med i dens gruppe, bestemmes lese- skrive- og kjøretilgangen av en *eller*-funksjon av det som gjelder for "bruker" og "gruppe".
* Hvis en bruker hverken eier fila eller er med i dens gruppe, gjelder lese- skrive- og kjøretilgangen som gjelder for "andre".
* Kjøretilgangen til en vanlig fil bestemmer om den er et program, eventuelt skript.
* Kjøretilgangen til en mappe bestemmer om den kan søkes gjennom for å finne innholdet.
* Når et program eller skript startes, arver prosessen normalt brukeren og gruppa til personen som startet det, men hvis "fast bruker" eller "fast gruppe" er satt, arves i stedet henholdsvis filas bruker eller gruppe. NB: Linux ignorerer "fast bruker" og "fast gruppe" for skript.
* Når en fil opprettes, arver den normalt brukeren og gruppa til prosessen som opprettet den, men hvis mappa over har "fast bruker" eller "fast gruppe", arves dens bruker og/eller gruppe i stedet. NB: På BSD arves gruppe alltid fra mappa over. På Linux arves bruker aldri fra mappa over.
* Symbolske lenker har alltid alle rettigheter satt, tilgangen til målet bestemmes av målet.

## Bruksanvisning
 chmod [valg] rettigheter fil1 ...
Bytt ut "rettigheter" med et av følgende 3 alternativer:

# En oktal sum av de oktale verdiene fra tabellen ovenfor. (Sifrene blir de samme selv om man tenker utelukkende i titallsystemet og kanskje ikke har hørt om oktale tall.)
# En komma-separert liste av strenger på formen [ugoa][-+=][rwxXst], for eksempel "u+x,go-r+x". Dette er den eneste måten å endre noen få rettigheter uten å endre alle. Her betyr "a" det samme som "ugo".
# --reference=FIL - Bruk de samme rettighetene som FIL har.

Tips: Kommandoen "ls -l" viser egenskaper til filer, der første kolonne gir en tekstlig representasjon av *mode*-tallet. Av disse 10 bokstavene består rettighetene av de 9 siste. Nedenfor er et eksempel som viser hvor de 10 bokstavene kommer fra:
 type:       bruker:     gruppe:     andre:
   d           rwx         rw-         r--
 0+4+0+0=4   4+2+1=7     4+2+0=6     4+0+0=4

## Eksempler
Sett *fast gruppe* på "mappe1" og "mappe2" og gjør den skrivbar for bruker og gruppe og lesbar for alle:
 chmod 2775 mappe1 mappe2

Gjør "fil1" og "fil2" lesbare og skrivbare (men ikke kjørbare) for alle:
 chmod 666 fil1 fil2

Gjør "øvremappe" og alle dens filer (og mapper) i alle undermapper lesbare, og skrivbare for eier:
 chmod -R a+r,u+w øvremappe

Fjern alle rettigheter for gruppe og andre til "fil1" og "mappe1" (slik at bare rettigheter for bruker gjenstår):
 chmod go-rwx fil1 mappe1

Gjør kun mapper kjørbare, også i alle undermapper:
 find øvremappe -type d -exec chmod a+x {} \;

## Filrettigheter utenfor chmods kontroll
* Noen filsystemer har ikke Unix-filattributter, for eksempel FAT og NTFS. Unix-drivere for slike filsystemer må emulere disse attributtene. Det er vanlig at attributtene settes via argumenter til mount-kommandoen når filsystemet monteres, uten at de senere kan endres av chmod (hverken varig eller midlertidig).
* Linux støtter *utvidede attributter*. Disse er strenger av formen navnerom.navn:verdi, og brukes blant annet til å lagre sikkerhetskontekst for SELinux og *access control lists*.

## Se også
* chown – endre eier
* chgrp – endre gruppe
* chattr – endre utvidede attributter
* chdir – endre gjeldende mappe
* chroot – endre gjeldende rotmappe
## Eksterne lenker
*