chown
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
- .
- --
- .
Index
This document was created by man2html using the manual pages.
Time: 17:41:33 GMT, May 11, 2012
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:33 GMT, May 11, 2012



