chmod(2): Skillnad mellan sidversioner
Admin (diskussion | bidrag) (Skapade sidan med '= chmod(2) - Ändrar filrättigheter = == Namn == '''chmod, fchmod, fchmodat''' - Ändrar rättigheterna för en fil == Bibliotek == Standard-C-biblioteket (libc, -lc) == Synopsis == <pre> #include <sys/stat.h> int chmod(const char *pathname, mode_t mode); int fchmod(int fd, mode_t mode); #include <fcntl.h> →Definition av AT_*-konstanter: #include <sys/stat.h> int fchmodat(int dirfd, const char *pathname, mode_t mode, int flags); </pre> === Funktions...') |
Admin (diskussion | bidrag) |
||
(2 mellanliggande sidversioner av samma användare visas inte) | |||
Rad 2: | Rad 2: | ||
== Namn == | == Namn == | ||
chmod, fchmod, fchmodat - Ändrar rättigheterna för en fil | |||
== Bibliotek == | == Bibliotek == | ||
Rad 23: | Rad 23: | ||
För att använda dessa funktioner krävs följande makron beroende på version av glibc: | För att använda dessa funktioner krävs följande makron beroende på version av glibc: | ||
* fchmod(): | |||
* Sedan glibc 2.24: | * Sedan glibc 2.24: | ||
<pre>_POSIX_C_SOURCE >= 199309L</pre> | <pre>_POSIX_C_SOURCE >= 199309L</pre> | ||
Rad 35: | Rad 35: | ||
<pre>_BSD_SOURCE || _XOPEN_SOURCE >= 500</pre> | <pre>_BSD_SOURCE || _XOPEN_SOURCE >= 500</pre> | ||
* fchmodat(): | |||
* Sedan glibc 2.10: | * Sedan glibc 2.10: | ||
<pre>_POSIX_C_SOURCE >= 200809L</pre> | <pre>_POSIX_C_SOURCE >= 200809L</pre> | ||
Rad 42: | Rad 42: | ||
== Beskrivning == | == Beskrivning == | ||
chmod, fchmod och fchmodat används för att ändra rättighetsbitarna för en fil. Dessa består av behörighetsbitar samt bitarna för set-user-ID, set-group-ID och sticky. | |||
=== Funktioner === | === Funktioner === | ||
* chmod | |||
Ändrar rättigheterna för filen specificerad av ''pathname''. Symboliska länkar följs automatiskt. | Ändrar rättigheterna för filen specificerad av ''pathname''. Symboliska länkar följs automatiskt. | ||
* fchmod | |||
Ändrar rättigheterna för filen som refereras av filbeskrivaren ''fd''. | Ändrar rättigheterna för filen som refereras av filbeskrivaren ''fd''. | ||
* fchmodat | |||
Fungerar som | Fungerar som chmod, men möjliggör relativa sökvägar baserade på ''dirfd''. Om ''pathname'' är relativ tolkas den relativt till katalogen som refereras av ''dirfd''. Flaggor kan inkluderas: | ||
* | * AT_SYMLINK_NOFOLLOW - Påverkar den symboliska länken själv, inte filen den pekar på. | ||
=== Rättighetsbitar === | === Rättighetsbitar === | ||
Rättigheterna specificeras i ''mode'', som är en bitmask skapad genom att kombinera följande: | Rättigheterna specificeras i ''mode'', som är en bitmask skapad genom att kombinera följande: | ||
* Specialbitar: | |||
* | * S_ISUID (04000) - Set-user-ID. | ||
* | * S_ISGID (02000) - Set-group-ID. | ||
* | * S_ISVTX (01000) - Sticky bit. | ||
* Behörigheter för ägaren: | |||
* | * S_IRUSR (00400) - Läs. | ||
* | * S_IWUSR (00200) - Skriv. | ||
* | * S_IXUSR (00100) - Kör/sök. | ||
* Behörigheter för gruppen: | |||
* | * S_IRGRP (00040) - Läs. | ||
* | * S_IWGRP (00020) - Skriv. | ||
* | * S_IXGRP (00010) - Kör/sök. | ||
* Behörigheter för andra: | |||
* | * S_IROTH (00004) - Läs. | ||
* | * S_IWOTH (00002) - Skriv. | ||
* | * S_IXOTH (00001) - Kör/sök. | ||
== Returneringsvärde == | == Returneringsvärde == | ||
Rad 82: | Rad 82: | ||
== Fel == | == Fel == | ||
chmod, fchmod och fchmodat kan misslyckas med följande fel: | |||
* | * EACCES - Behörighet saknas för en komponent i sökvägen. | ||
* | * EPERM - Processen har inte tillräckliga rättigheter. | ||
* | * EROFS - Filen ligger på ett skrivskyddat filsystem. | ||
* | * ENOENT - Filen eller katalogen finns inte. | ||
* | * ELOOP - För många symboliska länkar i sökvägen. | ||
* | * EINVAL - Ogiltig flagga angavs till fchmodat. | ||
* | * EBADF - Filbeskrivaren är ogiltig. | ||
* | * ENOMEM - Otillräckligt minne. | ||
* | * ENOTSUP - Flaggan AT_SYMLINK_NOFOLLOW stöds inte. | ||
== Versioner == | == Versioner == | ||
* chmod och fchmod introducerades i 4.4BSD och SVr4, och stöds av POSIX.1-2001. | |||
* fchmodat introducerades i POSIX.1-2008, Linux 2.6.16 och glibc 2.4. | |||
== Standarder == | == Standarder == | ||
Rad 102: | Rad 102: | ||
== Se också == | == Se också == | ||
* [[chmod(1)]] | * [[chmod|chmod(1)]] | ||
* [[chown(2)]] | * [[chown(2)]] | ||
* [[execve(2)]] | * [[execve(2)]] | ||
Rad 110: | Rad 110: | ||
* [[path_resolution(7)]] | * [[path_resolution(7)]] | ||
* [[symlink(7)]] | * [[symlink(7)]] | ||
= Exempel = | |||
== Exempel 1: Ändra rättigheter för en fil med chmod() == | |||
Det här exemplet ändrar rättigheterna för en fil så att endast ägaren kan läsa och skriva den. | |||
<pre> | |||
#include <stdio.h> | |||
#include <stdlib.h> | |||
#include <sys/stat.h> | |||
int main() { | |||
const char *filename = "example.txt"; | |||
// Ändra rättigheterna till läs- och skrivbehörighet för ägaren (0600) | |||
if (chmod(filename, S_IRUSR | S_IWUSR) == -1) { | |||
perror("chmod"); | |||
exit(EXIT_FAILURE); | |||
} | |||
printf("Rättigheterna för filen '%s' har ändrats till 0600.\n", filename); | |||
return 0; | |||
} | |||
</pre> | |||
== Exempel 2: Ändra rättigheter för en öppen fil med fchmod() == | |||
Det här exemplet öppnar en fil, ändrar rättigheterna och stänger filen. | |||
<pre> | |||
#include <stdio.h> | |||
#include <stdlib.h> | |||
#include <fcntl.h> | |||
#include <sys/stat.h> | |||
#include <unistd.h> | |||
int main() { | |||
const char *filename = "example.txt"; | |||
// Öppna filen | |||
int fd = open(filename, O_WRONLY); | |||
if (fd == -1) { | |||
perror("open"); | |||
exit(EXIT_FAILURE); | |||
} | |||
// Ändra rättigheterna till 0644 (ägaren kan läsa/skriva, andra kan läsa) | |||
if (fchmod(fd, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH) == -1) { | |||
perror("fchmod"); | |||
close(fd); | |||
exit(EXIT_FAILURE); | |||
} | |||
printf("Rättigheterna för filen '%s' har ändrats till 0644.\n", filename); | |||
// Stäng filen | |||
close(fd); | |||
return 0; | |||
} | |||
</pre> | |||
== Exempel 3: Ändra rättigheter för en fil relativt till en katalog med fchmodat() == | |||
Det här exemplet använder fchmodat() för att ändra rättigheterna för en fil relativt till en given katalog. | |||
<pre> | |||
#include <stdio.h> | |||
#include <stdlib.h> | |||
#include <fcntl.h> | |||
#include <sys/stat.h> | |||
int main() { | |||
const char *dirpath = "/tmp"; | |||
const char *filename = "example.txt"; | |||
// Öppna katalogen | |||
int dirfd = open(dirpath, O_RDONLY | O_DIRECTORY); | |||
if (dirfd == -1) { | |||
perror("open"); | |||
exit(EXIT_FAILURE); | |||
} | |||
// Ändra rättigheterna till 0755 (ägaren kan läsa/skriva/köra, andra kan läsa/köra) | |||
if (fchmodat(dirfd, filename, S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH, 0) == -1) { | |||
perror("fchmodat"); | |||
close(dirfd); | |||
exit(EXIT_FAILURE); | |||
} | |||
printf("Rättigheterna för filen '%s/%s' har ändrats till 0755.\n", dirpath, filename); | |||
// Stäng katalogbeskrivaren | |||
close(dirfd); | |||
return 0; | |||
} | |||
</pre> | |||
= Sidslut = | = Sidslut = |
Nuvarande version från 23 november 2024 kl. 08.04
chmod(2) - Ändrar filrättigheter
Namn
chmod, fchmod, fchmodat - Ändrar rättigheterna för en fil
Bibliotek
Standard-C-biblioteket (libc, -lc)
Synopsis
#include <sys/stat.h> int chmod(const char *pathname, mode_t mode); int fchmod(int fd, mode_t mode); #include <fcntl.h> /* Definition av AT_*-konstanter */ #include <sys/stat.h> int fchmodat(int dirfd, const char *pathname, mode_t mode, int flags);
Funktionsmakrokrav för glibc
För att använda dessa funktioner krävs följande makron beroende på version av glibc:
- fchmod():
* Sedan glibc 2.24:
_POSIX_C_SOURCE >= 199309L
* glibc 2.19 till 2.23:
_POSIX_C_SOURCE
* glibc 2.16 till 2.19:
_BSD_SOURCE || _POSIX_C_SOURCE
* glibc 2.12 till 2.16:
_BSD_SOURCE || _XOPEN_SOURCE >= 500 || _POSIX_C_SOURCE >= 200809L
* glibc 2.11 och tidigare:
_BSD_SOURCE || _XOPEN_SOURCE >= 500
- fchmodat():
* Sedan glibc 2.10:
_POSIX_C_SOURCE >= 200809L
* Före glibc 2.10:
_ATFILE_SOURCE
Beskrivning
chmod, fchmod och fchmodat används för att ändra rättighetsbitarna för en fil. Dessa består av behörighetsbitar samt bitarna för set-user-ID, set-group-ID och sticky.
Funktioner
- chmod
Ändrar rättigheterna för filen specificerad av pathname. Symboliska länkar följs automatiskt.
- fchmod
Ändrar rättigheterna för filen som refereras av filbeskrivaren fd.
- fchmodat
Fungerar som chmod, men möjliggör relativa sökvägar baserade på dirfd. Om pathname är relativ tolkas den relativt till katalogen som refereras av dirfd. Flaggor kan inkluderas: * AT_SYMLINK_NOFOLLOW - Påverkar den symboliska länken själv, inte filen den pekar på.
Rättighetsbitar
Rättigheterna specificeras i mode, som är en bitmask skapad genom att kombinera följande:
- Specialbitar:
* S_ISUID (04000) - Set-user-ID. * S_ISGID (02000) - Set-group-ID. * S_ISVTX (01000) - Sticky bit.
- Behörigheter för ägaren:
* S_IRUSR (00400) - Läs. * S_IWUSR (00200) - Skriv. * S_IXUSR (00100) - Kör/sök.
- Behörigheter för gruppen:
* S_IRGRP (00040) - Läs. * S_IWGRP (00020) - Skriv. * S_IXGRP (00010) - Kör/sök.
- Behörigheter för andra:
* S_IROTH (00004) - Läs. * S_IWOTH (00002) - Skriv. * S_IXOTH (00001) - Kör/sök.
Returneringsvärde
Vid framgång returneras 0. Vid fel returneras -1 och errno sätts för att indikera typen av fel.
Fel
chmod, fchmod och fchmodat kan misslyckas med följande fel:
- EACCES - Behörighet saknas för en komponent i sökvägen.
- EPERM - Processen har inte tillräckliga rättigheter.
- EROFS - Filen ligger på ett skrivskyddat filsystem.
- ENOENT - Filen eller katalogen finns inte.
- ELOOP - För många symboliska länkar i sökvägen.
- EINVAL - Ogiltig flagga angavs till fchmodat.
- EBADF - Filbeskrivaren är ogiltig.
- ENOMEM - Otillräckligt minne.
- ENOTSUP - Flaggan AT_SYMLINK_NOFOLLOW stöds inte.
Versioner
- chmod och fchmod introducerades i 4.4BSD och SVr4, och stöds av POSIX.1-2001.
- fchmodat introducerades i POSIX.1-2008, Linux 2.6.16 och glibc 2.4.
Standarder
Alla funktioner följer POSIX.1-2008.
Se också
Exempel
Exempel 1: Ändra rättigheter för en fil med chmod()
Det här exemplet ändrar rättigheterna för en fil så att endast ägaren kan läsa och skriva den.
#include <stdio.h> #include <stdlib.h> #include <sys/stat.h> int main() { const char *filename = "example.txt"; // Ändra rättigheterna till läs- och skrivbehörighet för ägaren (0600) if (chmod(filename, S_IRUSR | S_IWUSR) == -1) { perror("chmod"); exit(EXIT_FAILURE); } printf("Rättigheterna för filen '%s' har ändrats till 0600.\n", filename); return 0; }
Exempel 2: Ändra rättigheter för en öppen fil med fchmod()
Det här exemplet öppnar en fil, ändrar rättigheterna och stänger filen.
#include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <sys/stat.h> #include <unistd.h> int main() { const char *filename = "example.txt"; // Öppna filen int fd = open(filename, O_WRONLY); if (fd == -1) { perror("open"); exit(EXIT_FAILURE); } // Ändra rättigheterna till 0644 (ägaren kan läsa/skriva, andra kan läsa) if (fchmod(fd, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH) == -1) { perror("fchmod"); close(fd); exit(EXIT_FAILURE); } printf("Rättigheterna för filen '%s' har ändrats till 0644.\n", filename); // Stäng filen close(fd); return 0; }
Exempel 3: Ändra rättigheter för en fil relativt till en katalog med fchmodat()
Det här exemplet använder fchmodat() för att ändra rättigheterna för en fil relativt till en given katalog.
#include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <sys/stat.h> int main() { const char *dirpath = "/tmp"; const char *filename = "example.txt"; // Öppna katalogen int dirfd = open(dirpath, O_RDONLY | O_DIRECTORY); if (dirfd == -1) { perror("open"); exit(EXIT_FAILURE); } // Ändra rättigheterna till 0755 (ägaren kan läsa/skriva/köra, andra kan läsa/köra) if (fchmodat(dirfd, filename, S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH, 0) == -1) { perror("fchmodat"); close(dirfd); exit(EXIT_FAILURE); } printf("Rättigheterna för filen '%s/%s' har ändrats till 0755.\n", dirpath, filename); // Stäng katalogbeskrivaren close(dirfd); return 0; }
Sidslut
Orginalhemsidan på Engelska :https://man7.org/linux/man-pages/man2/chmod.2.html
Det här är en maskinöversättning av Linux man sidor till svenska. Om du hittar fel är vi tacksamma om du rapporterar dem via formuläret som finns på
https://www.linux.se/kontaka-linux-se/
Tack till PC Service som har sponsrat Linux.se med webbhotell.