OSDN Git Service

Update README
[linuxjm/LDP_man-pages.git] / draft / man2 / chown.2
index 7ace1ea..ed60fca 100644 (file)
@@ -1,6 +1,6 @@
 .\" Copyright (c) 1992 Drew Eckhardt (drew@cs.colorado.edu), March 28, 1992
 .\" and Copyright (c) 1998 Andries Brouwer (aeb@cwi.nl)
-.\" and Copyright (c) 2007, 2008 Michael Kerrisk <mtk.manpages@gmail.com>
+.\" and Copyright (c) 2006, 2007, 2008, 2014 Michael Kerrisk <mtk.manpages@gmail.com>
 .\"
 .\" %%%LICENSE_START(VERBATIM)
 .\" Permission is granted to make and distribute verbatim copies of this
 .\" This file was generated with po4a. Translate the source file.
 .\"
 .\"*******************************************************************
-.TH CHOWN 2 2010\-11\-22 Linux "Linux Programmer's Manual"
+.\"
+.\" Japanese Version Copyright (c) 1996 Yosiaki Yanagihara
+.\"         all rights reserved.
+.\" Translated 1996-06-24, Yosiaki Yanagihara <yosiaki@bsd2.kbnes.nec.co.jp>
+.\" Modified 1998-05-11, HANATAKA Shinya <hanataka@abyss.rim.or.jp>
+.\" Modified 2004-02-29, Yuichi SATO <ysato444@yahoo.co.jp>
+.\" Updated & Modified Wed Dec 29 06:48:16 JST 2004 by Yuichi SATO
+.\" Updated 2007-09-04, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>, LDP v2.64
+.\" Updated 2008-08-09, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>, LDP v3.05
+.\" Updated 2012-04-30, Akihiro MOTOKI <amotoki@gmail.com>
+.\"
+.TH CHOWN 2 2014\-08\-19 Linux "Linux Programmer's Manual"
 .SH 名前
-chown, fchown, lchown \- ファイルの所有者を変更する
+chown, fchown, lchown, fchownat \- ファイルの所有者を変更する
 .SH 書式
+.nf
 \fB#include <unistd.h>\fP
 .sp
-\fBint chown(const char *\fP\fIpath\fP\fB, uid_t \fP\fIowner\fP\fB, gid_t \fP\fIgroup\fP\fB);\fP
+\fBint chown(const char *\fP\fIpathname\fP\fB, uid_t \fP\fIowner\fP\fB, gid_t \fP\fIgroup\fP\fB);\fP
 .br
 \fBint fchown(int \fP\fIfd\fP\fB, uid_t \fP\fIowner\fP\fB, gid_t \fP\fIgroup\fP\fB);\fP
 .br
-\fBint lchown(const char *\fP\fIpath\fP\fB, uid_t \fP\fIowner\fP\fB, gid_t \fP\fIgroup\fP\fB);\fP
+\fBint lchown(const char *\fP\fIpathname\fP\fB, uid_t \fP\fIowner\fP\fB, gid_t \fP\fIgroup\fP\fB);\fP
+.sp
+\fB#include <fcntl.h>           \fP/* AT_* 定数の定義 */
+\fB#include <unistd.h>\fP
+.sp
+\fBint fchownat(int \fP\fIdirfd\fP\fB, const char *\fP\fIpathname\fP\fB,\fP
+\fB             uid_t \fP\fIowner\fP\fB, gid_t \fP\fIgroup\fP\fB, int \fP\fIflags\fP\fB);\fP
+.fi
+.sp
 .sp
 .in -4n
 glibc 向けの機能検査マクロの要件 (\fBfeature_test_macros\fP(7)  参照):
@@ -64,17 +84,30 @@ _BSD_SOURCE || _XOPEN_SOURCE\ >=\ 500 || _XOPEN_SOURCE\ &&\ _XOPEN_SOURCE_EXTEND
 .br
 || /* glibc 2.12 以降: */ _POSIX_C_SOURCE\ >=\ 200809L
 .RE
+.sp
+\fBfchownat\fP():
+.PD 0
+.ad l
+.RS 4
+.TP  4
+glibc 2.10 以降:
+_XOPEN_SOURCE\ >=\ 700 || _POSIX_C_SOURCE\ >=\ 200809L
+.TP 
+glibc 2.10 より前:
+_ATFILE_SOURCE
+.RE
 .ad
 .PD
 .SH 説明
-これらのシステムコールは、いずれもファイルの所有者 (owner) とグループを変更する。システムコール間の違いは、ファイルの指定の仕方だけである。
+これらのシステムコールは、いずれもファイルの所有者 (owner) とグループを変更する。システムコール \fBchown\fP(),
+\fBfchown\fP(), \fBlchown\fP() 間の違いは、ファイルの指定の仕方だけである。
 .IP * 2
-\fBchown\fP()  は \fIpath\fP で指定されたファイルの所有権を変更する。 \fIpath\fP
\81\8cã\82·ã\83³ã\83\9cã\83ªã\83\83ã\82¯ã\83»ã\83ªã\83³ã\82¯ã\81®å ´å\90\88ã\81¯ã\80\81ã\83ªã\83³ã\82¯ã\81®å±\95é\96\8bã\81\8cè¡\8cã\82\8fã\82\8cã\82\8bã\80\82
+\fBchown\fP()  は \fIpathname\fP で指定されたファイルの所有権を変更する。 \fIpathname\fP
+がシンボリックリンクの場合は、リンクの展開が行われる。
 .IP *
-\fBfchown\fP()  はオープンされたファイルディスクリプタ \fIfd\fP により参照されるファイルの所有権を変更する。
+\fBfchown\fP()  はオープンされたファイルディスクリプタ \fIfd\fP により参照されるファイルの所有権を変更する。
 .IP *
-\fBlchown\fP()  ã\81¯ \fBchown\fP()  ã\81¨å\90\8cã\81\98ã\81 ã\81\8cã\80\81ã\82·ã\83³ã\83\9cã\83ªã\83\83ã\82¯ã\83»ã\83ªã\83³ã\82¯ã\82\92å±\95é\96\8bã\81\97ã\81ªã\81\84ç\82¹ã\81\8cç\95°ã\81ªã\82\8bã\80\82
+\fBlchown\fP()  は \fBchown\fP()  と同じだが、シンボリックリンクを展開しない点が異なる。
 .PP
 特権を持つプロセス (Linux では \fBCAP_CHOWN\fP ケーパビリティ (capability) を持つプロセス) だけが
 ファイルの所有者を変更できる。 ファイルの所有者は、その所有者が属しているグループのいずれかに ファイルのグループを変更することができる。 特権
@@ -90,28 +123,59 @@ POSIX はこの動作やルートが \fBchown\fP()  を行なった場合につ
 における動作はカーネルのバージョンに依存する。 非グループ実行ファイル (\fBS_IXGRP\fP ビットが設定されていないファイル) の場合には
 \fBS_ISGID\fP ビットは強制ロック (mandatory locking) を意味している。 そしてそれは \fBchown\fP()
 ではクリアできない。
+.SS fchownat()
+\fBfchownat\fP() システムコールは \fBchown\fP() と全く同様に動作するが、以下で説明する点が異なる。
+
+\fIpathname\fP で指定されたパス名が相対パスの場合、このパス名はファイルディスクリプター \fIdirfd\fP
+が参照するディレクトリに対する相対パスと解釈される (\fBchown\fP()
+に相対パス名を渡した場合のように、呼び出したプロセスのカレントワーキングディレクトリに対する相対パスではない)。
+
+\fIpathname\fP で指定されたパス名が相対パスで、 \fIdirfd\fP が特別な値 \fBAT_FDCWD\fP の場合、 (\fBchown\fP()
+と同様に) \fIpathname\fP は呼び出したプロセスのカレントワーキングディレクトリに対する相対パスと解釈される。
+
+\fIpathname\fP で指定されたパス名が絶対パスの場合、 \fIdirfd\fP は無視される。
+
+\fIflags\fP 引き数は、以下に示す値の 0 個以上の OR (論理和) をとって作成される ビットマスクである。
+.TP 
+\fBAT_EMPTY_PATH\fP (Linux 2.6.39 以降)
+.\" commit 65cfc6722361570bfe255698d9cd4dccaf47570d
+.\" Before glibc 2.16, defining _ATFILE_SOURCE sufficed
+\fIpathname\fP が空文字列の場合、 \fIdirfd\fP が参照するファイルに対して操作を行う (\fIdirfd\fP は \fBopen\fP(2)
+\fBO_PATH\fP フラグを使って取得することができる)。この場合、 \fIdirfd\fP
+は、ディレクトリだけでなく、任意のタイプのファイルを参照することができる。 \fIdirfd\fP が \fBAT_FDCWD\fP
+の場合、この呼び出しはカレントワーキングディレクトリに対して操作を行う。このフラグは Linux 固有であり、その定義を得るには
+\fB_GNU_SOURCE\fP を定義すること。
+
+.TP 
+\fBAT_SYMLINK_NOFOLLOW\fP
+\fIpathname\fP がシンボリックリンクの場合、リンクの展開を行わない。代わりに、\fBlchown\fP()
+同様、リンク自身に対して操作を行う。(デフォルトでは \fBfchownat\fP() は \fBchown\fP() と同様にシンボリックリンクの展開を行う。)
+.PP
+\fBfchownat\fP() の必要性についての説明については \fBopenat\fP(2) を参照。
 .SH 返り値
 成功した場合は 0 が返される。エラーの場合は \-1 が返され、 \fIerrno\fP が適切に設定される。
 .SH エラー
-ファイルシステムによっては他のエラーが返される事がある。 \fBchmod\fP で一般的なエラーを以下に挙げる。
+ファイルシステムによっては、下記の一覧にない他のエラーが返されることもある。
+
+\fBchown\fP()  でごく一般的なエラーを以下に挙げる:
 .TP 
 \fBEACCES\fP
 パス名の構成要素に検索許可がない (\fBpath_resolution\fP(7)  も見よ)。
 .TP 
 \fBEFAULT\fP
-\fIpath\fP がアクセスできるアドレス空間外を指している。
+\fIpathname\fP がアクセス可能なアドレス空間の外を指している。
 .TP 
 \fBELOOP\fP
-\fIpath\fP を解決する際に遭遇したシンボリック・リンクが多過ぎる
+\fIpathname\fP を解決するときに、解決すべきシンボリックリンクが多すぎた
 .TP 
 \fBENAMETOOLONG\fP
-\fIpath\fP が長過ぎる。
+\fIpathname\fP が長過ぎる。
 .TP 
 \fBENOENT\fP
 ファイルが存在しない。
 .TP 
 \fBENOMEM\fP
-カーネルに十分なメモリがない。
\82«ã\83¼ã\83\8dã\83«ã\81«å\8d\81å\88\86ã\81ªã\83¡ã\83¢ã\83ªã\83¼ã\81\8cã\81ªã\81\84ã\80\82
 .TP 
 \fBENOTDIR\fP
 パス名の構成要素がディレクトリではない。
@@ -120,7 +184,7 @@ POSIX はこの動作やルートが \fBchown\fP()  を行なった場合につ
 呼び出したプロセスに所有者またはグループ (もしくはその両方) を変更するために 要求される許可 (上記を参照) がない。
 .TP 
 \fBEROFS\fP
\83\95ã\82¡ã\82¤ã\83«ã\81\8c読ã\81¿è¾¼ã\81¿å°\82ç\94¨ (read only) ã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\83»ã\82·ã\82¹ã\83\86ã\83 ä¸\8aã\81«ã\81\82ã\82\8bã\80\82
+ファイルが読み込み専用 (read only) のファイルシステム上にある。
 .PP
 \fBfchown\fP()  で一般的なエラーを以下に挙げる:
 .TP 
@@ -138,8 +202,23 @@ i ノード (inode) を変更する際に低レベル I/O エラーが発生し
 .TP 
 \fBEROFS\fP
 上記を参照。
+.PP
+\fBchown\fP() で発生するのと同じエラーが \fBfchownat\fP() でも起こる。 \fBfchownat\fP() では以下のエラーも発生する。
+.TP 
+\fBEBADF\fP
+\fIdirfd\fP が適切なファイルディスクリプターでない。
+.TP 
+\fBEINVAL\fP
+\fIflags\fP に無効なフラグが指定された。
+.TP 
+\fBENOTDIR\fP
+\fIpathname\fP が相対パスで、 \fIdirfd\fP がディレクトリ以外のファイルを参照しているファイルディスクリプターである。
+.SH バージョン
+\fBfchownat\fP()  はカーネル 2.6.16 で Linux に追加された。 ライブラリによるサポートはバージョン 2.4 以降の glibc
+で利用できる。
 .SH 準拠
-4.4BSD, SVr4, POSIX.1\-2001.
+\fBchown\fP(), \fBfchown\fP(), \fBlchown\fP(): 4.4BSD, SVr4, POSIX.1\-2001,
+POSIX.1\-2008.
 
 .\" chown():
 .\" SVr4 documents EINVAL, EINTR, ENOLINK and EMULTIHOP returns, but no
@@ -147,17 +226,13 @@ i ノード (inode) を変更する際に低レベル I/O エラーが発生し
 .\" fchown():
 .\" SVr4 documents additional EINVAL, EIO, EINTR, and ENOLINK
 .\" error conditions.
-4.4BSD 版ではスーパー・ユーザーのみが使用できる (つまり、普通のユーザーはファイルを手放すことはできない)。
-.SH 注意
-元々の Linux の \fBchown\fP(), \fBfchown\fP(), \fBlchown\fP() システムコールは、
-16 ビットのユーザ ID とグループ ID だけに対応していた。
-その後、 32 ビットの ID に対応した \fBchown32\fP(), \fBfchown32\fP(), \fBlchown32\fP()
-が Linux 2.4 で追加された。
-\fBchown\fP(), \fBfchown\fP(), and \fBlchown\fP() の glibc のラッパー関数は、
-カーネルのバージョンによる違いを吸収している。
+4.4BSD 版ではスーパーユーザーのみが使用できる (つまり、普通のユーザーはファイルを手放すことはできない)。
 
+\fBfchownat\fP(): POSIX.1\-2008.
+.SH 注意
+.SS 新しいファイルの所有権
 (\fBopen\fP(2)  や \fBmkdir\fP(2)  などにより) 新しいファイルが作成されるとき、
\81\9dã\81®æ\89\80æ\9c\89è\80\85ã\81¯å\91¼ã\81³å\87ºã\81\97ã\81\9fã\83\97ã\83­ã\82»ã\82¹ã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\82·ã\82¹ã\83\86ã\83 ã\83»ã\83¦ã\83¼ã\82 ID と 同じに設定される。 そのファイルのグループはいくつかの要因により決定される。
\81\9dã\81®æ\89\80æ\9c\89è\80\85ã\81¯å\91¼ã\81³å\87ºã\81\97ã\81\9fã\83\97ã\83­ã\82»ã\82¹ã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\82·ã\82¹ã\83\86ã\83 ã\83¦ã\83¼ã\82¶ã\83¼ ID と 同じに設定される。 そのファイルのグループはいくつかの要因により決定される。
 その要因としては、 ファイルシステムの種類、そのファイルシステムのマウント時に 使用されたオプション、親ディレクトリで set\-group\-ID
 許可ビットが 有効になっているどうか、がある。 ファイルシステムが \fBmount\fP(8)  オプションの \fI\-o\ grpid\fP (\fI\-o\ bsdgroups\fP も同義語) と \fI\-o\ nogrpid\fP (\fI\-o sysvgroups\fP も同義語)
 に対応している場合、ルールは以下の通りとなる。
@@ -173,23 +248,34 @@ i ノード (inode) を変更する際に低レベル I/O エラーが発生し
 Linux 2.6.25 では、マウントオプション \fI\-o\ grpid\fP と \fI\-o\ nogrpid\fP に対応しているファイルシステムは
 ext2, ext3, ext4, XFS である。 これらのマウントオプションに対応していないファイルシステムでは、 \fI\-o\ nogrpid\fP
 に関するルールが適用される。
-.PP
-\fBchown\fP()  方式は UID マッピングを使用した NFS ファイル・システムを侵害する。
-さらにファイルの内容にアクセスする全てのシステム・コールを侵害する。 これは \fBchown\fP()  が既にオープンされたファイルに対する
+.SS "glibc での注意"
+\fBfchownat\fP() が利用できない古いカーネルでは、 glibc ラッパー関数は \fBchown\fP() を使用するモードにフォールバックする。
+\fIpathname\fP が相対パスの場合、 glibc は \fIdirfd\fP 引き数に対応する \fI/proc/self/fd\fP
+のシンボリックリンクに基づいてパス名を構成する。
+.SS NFS
+\fBchown\fP()  方式は UID マッピングを使用した NFS ファイルシステムを侵害する。
+さらにファイルの内容にアクセスする全てのシステムコールを侵害する。 これは \fBchown\fP()  が既にオープンされたファイルに対する
 アクセスをただちに取り消すことによる。 クライアント側のキャッシュにより所有権が変更されて
 ユーザーのアクセスが許した時点と、実際に他のクライアントでユーザーによって ファイルにアクセスできる時点との間に時間差があるかもしれない。
+.SS 歴史的な詳細
+元々の Linux の \fBchown\fP(), \fBfchown\fP(), \fBlchown\fP() システムコールは、
+16 ビットのユーザー ID とグループ ID だけに対応していた。
+その後、 32 ビットの ID に対応した \fBchown32\fP(), \fBfchown32\fP(), \fBlchown32\fP()
+が Linux 2.4 で追加された。
+\fBchown\fP(), \fBfchown\fP(), and \fBlchown\fP() の glibc のラッパー関数は、
+カーネルのバージョンによる違いを吸収している。
 
-Linux ã\81® 2.1.81 ã\82\88ã\82\8aå\89\8dã\81®ã\83\90ã\83¼ã\82¸ã\83§ã\83³ (ç\89¹ã\81« 2.1.46 ä»¥å\89\8d) ã\81§ã\81¯ã\80\81 \fBchown\fP()  ã\81¯ã\82·ã\83³ã\83\9cã\83ªã\83\83ã\82¯ã\83»ã\83ªã\83³ã\82¯ã\82\92追跡ã\81\97ã\81ªã\81\84ã\80\82
-Linux 2.1.81 ä»¥é\99\8dã\81§ã\81¯ \fBchown\fP()  ã\81¯ã\82·ã\83³ã\83\9cã\83ªã\83\83ã\82¯ã\83»ã\83ªã\83³ã\82¯ã\82\92追跡ã\81\97ã\80\81æ\96°ã\81\9fã\81ªã\82·ã\82¹ã\83\86ã\83 ã\83»コール \fBlchown\fP()
\81¯ã\82·ã\83³ã\83\9cã\83ªã\83\83ã\82¯ã\83»ã\83ªã\83³ã\82¯ã\82\92追跡ã\81\97ã\81ªã\81\84ã\80\82 Linux 2.1.86 ä»¥é\99\8dã\81§ã\81¯ã\81\93ã\81®æ\96°ã\81\97ã\81\84ã\82³ã\83¼ã\83« (å\8f¤ã\81\84 \fBchown\fP()  ã\81¨å\85¨ã\81\8få\90\8cã\81\98å\8b\95ä½\9cã\82\92è¡\8cã\81ªã\81\86)
+Linux の 2.1.81 より前のバージョン (特に 2.1.46 以前) では、 \fBchown\fP()  はシンボリックリンクを追跡しない。
+Linux 2.1.81 ä»¥é\99\8dã\81§ã\81¯ \fBchown\fP()  ã\81¯ã\82·ã\83³ã\83\9cã\83ªã\83\83ã\82¯ã\83ªã\83³ã\82¯ã\82\92追跡ã\81\97ã\80\81æ\96°ã\81\9fã\81ªã\82·ã\82¹ã\83\86ã\83 コール \fBlchown\fP()
+はシンボリックリンクを追跡しない。 Linux 2.1.86 以降ではこの新しいコール (古い \fBchown\fP()  と全く同じ動作を行なう)
 は同じシステムコール番号を持ち \fBchown\fP()  は新しく導入された番号を持つ。
 .SH 例
 .PP
 以下のプログラムは、 二つ目のコマンドライン引き数で指定された名前のファイルの所有者を、 一つ目のコマンドライン引き数で指定された値に変更する。
-新しい所有者は、数字のユーザ ID かユーザ名のいずれかで指定できる (ユーザ名で指定した場合には、 \fBgetpwnam\fP(3)
-を使ってシステムのパスワードファイルの検索が行われ、 ユーザ ID への変換が行われる)。
+新しい所有者は、数字のユーザー ID かユーザー名のいずれかで指定できる (ユーザー名で指定した場合には、 \fBgetpwnam\fP(3)
+を使ってシステムのパスワードファイルの検索が行われ、 ユーザー ID への変換が行われる)。
+.SS プログラムのソース
 .nf
-
 #include <pwd.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -228,9 +314,8 @@ main(int argc, char *argv[])
 }
 .fi
 .SH 関連項目
-\fBchmod\fP(2), \fBfchownat\fP(2), \fBflock\fP(2), \fBpath_resolution\fP(7),
-\fBsymlink\fP(7)
+\fBchmod\fP(2), \fBflock\fP(2), \fBpath_resolution\fP(7), \fBsymlink\fP(7)
 .SH この文書について
-この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.51 の一部
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.79 の一部
 である。プロジェクトの説明とバグ報告に関する情報は
 http://www.kernel.org/doc/man\-pages/ に書かれている。