> Linux Reviews > man >

chown


  1. chown.1.man
  2. chown.2.man


1. chown.1.man

Manpage of CHOWN

CHOWN

Section: User Commands (1)
Updated: 1998-11
Index Return to Main Contents
 

chown -  

chown [] [:] ...

POSIX: [-R] [--]

GNU ( ): [-cfhvR] [--dereference] [--reference=rfile] [--help] [--version] [--]  

chown / .

/ , . ( ), , . ( ), , .  

GNU

GNU ( BSD). [ POSIX, .] , , , . , , ; chown , chgrp.  

POSIX

-R
.
--
.
 

GNU

-c, --changes
, .
-f, --silent, --quiet
, .
-h, --no-dereference
, , . lchown.
-v, --verbose
( ) .
-R, --recursive
.
--dereference
, , . ( fileutils-4.0.)
--reference=rfile
( fileutils 4.0.) , rfile.
 

GNU

--help
.
--version
.
--
.
 

LANG, LC_ALL, LC_CTYPE LC_MESSAGES.  

POSIX 1003.2 .  

chown fileutils-4.0; . aeb@cwi.nl. fileutils-bugs@gnu.ai.mit.edu.  

ף <corochoone@perm.ru> 2003


 

Index

GNU
POSIX
GNU
GNU

This document was created by man2html using the manual pages.
Time: 17:41:11 GMT, October 23, 2013

2. chown.2.man

Manpage of CHOWN

CHOWN

Section: Руководство программиста Linux (2)
Updated: 2010-09-20
Index Return to Main Contents
 

ИМЯ

chown, fchown, lchown - изменить владельца файла  

ОБЗОР

#include <unistd.h>

int chown(const char *path, uid_t owner, gid_t group);
int fchown(int fd, uid_t owner, gid_t group);
int lchown(const char *path, uid_t owner, gid_t group);

Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):

fchown(), lchown():

Начиная с glibc 2.12:
_BSD_SOURCE || _XOPEN_SOURCE >= 500 || _XOPEN_SOURCE &&_XOPEN_SOURCE_EXTENDED || _POSIX_C_SOURCE >= 200809L
До glibc 2.12:
_BSD_SOURCE || _XOPEN_SOURCE >= 500 || _XOPEN_SOURCE &&_XOPEN_SOURCE_EXTENDED
 

ОПИСАНИЕ

Данные системные вызовы изменяют владельца и группу для файла. Разница только в том, каким образом задается файл:
*
chown() изменяет владельца для файла, задаваемого параметром path, который разыменовывается, если является символьной ссылкой.
*
fchown() изменяет владельца для файла, задаваемого открытым файловым дескриптором fd.
*
lchown() похож на chown() за исключением того, что он не разыменовывает символьные ссылки.

Только привилегированный процесс (Linux: имеющий мандат CAP_CHOWN) может сменить владельца файла. Владелец файла может сменить группу файла на любую группу, в которой он числится. Привилегированный процесс (Linux: с CAP_CHOWN) может задавать произвольную группу.

Если параметр owner или group равен -1, то соответствующий идентификатор не изменяется.

Когда владелец или группа исполняемого файла изменяется непривилегированным пользователем, то биты режима S_ISUID и S_ISGID сбрасываются. В POSIX не указано, должно ли это происходить если chown() выполняется суперпользователем; поведение в Linux зависит от версии ядра. В случае исполняемого файла вне группы (т.е., у которого не установлен бит S_IXGRP) бит S_ISGID указывает на обязательную блокировку, и не сбрасывается при выполнении chown().  

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

При успешном выполнении возвращается 0. В случае ошибки возвращается -1, а errno устанавливается в соответствующее значение.  

ОШИБКИ

В зависимости от файловой системы могут также возвращаться другие ошибки. Общий набор ошибок chown() перечислен ниже:
EACCES
Поиск запрещён из-за одного из частей префикса пути (См. также path_resolution(7).)
EFAULT
Аргумент path указывает за пределы доступного адресного пространства.
ELOOP
Во время определения path встретилось слишком много символьных ссылок.
ENAMETOOLONG
path слишком длинен.
ENOENT
Файл не существует.
ENOMEM
Недостаточное количество памяти ядра.
ENOTDIR
Компонент в префиксе пути не является каталогом.
EPERM
Вызывающий процесс не имеет требуемых прав (см. выше), чтобы изменять владельца и/или группу.
EROFS
Файл находится на файловой системе, смонтированной только для чтения.

Общие ошибки fchown() таковы:

EBADF
Неверный файловый дескриптор.
EIO
Во время изменения индексного дескриптора (inode) возникла низкоуровневая ошибка ввода/вывода.
ENOENT
См. выше.
EPERM
См. выше.
EROFS
См. выше.
 

СООТВЕТСТВИЕ СТАНДАРТАМ

4.4BSD, SVr4, POSIX.1-2001.

Версия из 4.4BSD может использоваться только суперпользователем (то есть, обычные пользователи не могут менять владельцев).  

ЗАМЕЧАНИЯ

При создании нового файла (например с помощью open(2) или mkdir(2)), его владельцем будет установлен ID пользователя из файловой системы создающего процесса. Группа файла зависит от нескольких факторов, включая тип файловой системы, параметры монтирования и установлен ли бит set-group-ID на родительском каталоге. Если файловая система поддерживает параметры mount(8) -o grpid (тоже что и -o bsdgroups) и -onogrpid (тоже что и -o sysvgroups), то правила следующие:
*
Если файловая система смонтирована с параметром -o grpid, то группой нового файла будет группа родительского каталога.
*
Если файловая система смонтирована с параметром -o nogrpid и на родительском каталоге сброшен бит set-group-ID, то группой нового файла будет GID файловой системы того же процесса.
*
Если файловая система смонтирована с параметром -o nogrpid и на родительском каталоге установлен бит set-group-ID, то группой нового файла будет группа родительского каталога.

Начиная с Linux 2.6.25, параметры монтирования -o grpid и -o nogrpid поддерживаются для ext2, ext3, ext4 и XFS. Для файловых систем, не поддерживающих эти параметры монтирования, используются правила как для -o nogrpid.

Семантика chown() сознательно нарушается в файловых системах NFS, в которых включено отображение UID. Также, нарушается семантика всех системных вызовов, которые обеспечивают доступ к содержимому файлов, так как chown() может привести к немедленному отзыву доступа к уже открытым файлам. Кэширование на клиентской стороне может привести к задержке между сменой доступа пользователю и временем, когда файл действительно станет доступным.

В версиях Linux до 2.1.81 (кроме 2.1.46) chown() не следовал по символьным ссылкам. Начиная с версии Linux 2.1.81 chown() следует по символьным ссылкам, и существует новый системный вызов lchown(), который не следует по символьным ссылкам. Начиная с Linux 2.1.86 этот новый вызов (имеющий тот же смысл, что и старый chown()) имеет тот же самый номер системного вызова, а chown() получил новый номер.  

ПРИМЕР

Следующая программа изменять владельца файла, указанного вторым в командной строке, на значение, указанное в первом аргументе командной строки. Новый владелец может задаваться в виде числового пользовательского ID, или в виде имени пользователя (которое преобразуется в пользовательский ID с помощью getpwnam(3), выполняющего поиск в системном файле паролей).


#include <pwd.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int
main(int argc, char *argv[])
{
    uid_t uid;
    struct passwd *pwd;
    char *endptr;

    if (argc != 3 || argv[1][0] == aq\0aq) {
        fprintf(stderr, "%s <owner> <file>
", argv[0]); exit(EXIT_FAILURE); } uid = strtol(argv[1], &endptr, 10); /* Allow a numeric string */ if (*endptr != aq\0aq) { /* Was not pure numeric string */ pwd = getpwnam(argv[1]); /* Try getting UID for username */ if (pwd == NULL) { perror("getpwnam"); exit(EXIT_FAILURE); } uid = pwd->pw_uid; } if (chown(argv[2], uid, -1) == -1) { perror("chown"); exit(EXIT_FAILURE); } exit(EXIT_SUCCESS); }
 

СМОТРИТЕ ТАКЖЕ

chmod(2), fchownat(2), flock(2), path_resolution(7), symlink(7)


 

Index

ИМЯ
ОБЗОР
ОПИСАНИЕ
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
ОШИБКИ
СООТВЕТСТВИЕ СТАНДАРТАМ
ЗАМЕЧАНИЯ
ПРИМЕР
СМОТРИТЕ ТАКЖЕ

This document was created by man2html using the manual pages.
Time: 17:41:11 GMT, October 23, 2013

SVENSKA - cs - da - SVENSKA - SVENSKA - SVENSKA - ja - nl - pl - ro