Next: , Previous: chmod invocation, Up: Changing file attributes


13.1 chown: ファイルの所有者とグループの変更

chownは,与えられたそれぞれのfileのユーザと/またはグルー プの所有権を,new-ownerや,既存の参照ファイルのユーザとグループ に変更します.概要です.

     chown [option]... {new-owner | --reference=ref_file} file...

new-ownerが使用された場合,新しい所有者と/またはグループを以下の ように指定します(空白は含みません).

     [owner] [ [:] [group] ]

具体例です.

owner
owner (ユーザ名または数値的なユーザID)のみ与えられた場合,そのユー ザが与えられたそれぞれのファイルの所有者になり,ファイルのグループは変 更されません.
owner‘:’group
ownerにコロンとgroup (グループ名または数値的なグループID) が,それら間にスペースを置かずに続いている場合,ファイルのグループ所有 権を(groupに)同様に変更します.
owner‘:
コロンはあるが,グループ名がownerに続かない場合,ユーザがファイ ルの所有者になり,ファイルのグループはownerのログイングループに 変更されます.
:’group
コロンとそれに続くgroupが与えられているが所有者が省略されている 場合,ファイルのグループのみ変更されます.この場合,chownchgrp と同じ機能を果たします.

古いスクリプトでは,‘:’セパレータの場所に‘.’を使用している可 能性があります.POSIX 1003.1-2001 (see Standards conformance)では,それをサポートすることを要求していませんが,後方互 換性のため,GNU chownは曖昧な結果にならない限り ‘.’をサポートします.互換性のため,そして, owner‘.’groupで‘.’を含む名前のユーザを識別してしまうと 好ましくない結果になるので,新しいスクリプトでは‘.’の使用を避ける べきです.

警告:chownコマンドは,システムによってはセットユーザIDやセッ トグループIDビットがクリアされているかもしれません.chownコ マンドは,chownコマンドの制御下にないシステム依存のファイル のモード変更する,基礎的なシステムのポリシーと機能に依存します.システ ムによっては(例えばLinux),基礎的なシステムのchown関数がクリア しているので,chownコマンドのセットユーザIDやセットグループ IDビットはクリアされてます.それ以外のシステム(例えばHP-UXとSolaris)で は,スーパーユーザとして処理されるとき,chownコマンドはこれ らのビットに影響しません.chownの利用が特権ユーザ以外に許可 されているシステムでは,これらのビットは常にシステムによってクリアされ ています.そうでないとき,基礎的なシステムの動作を調査して下さい.

プログラムは以下のオプションも受け入れます.Common optionsも参照 してください.

-c
--changes
所有権が実際に変更されるそれぞれのfileに対する動作を,冗長に記述 します.
-f
--silent
--quiet
所有権を変更できないファイルについてのエラーメッセージを出力しません.
--from=old-owner
old-ownerで指定されている現在の属性がある場合,fileの所有 権を変更します.old-ownerは,上記のnew-ownerの記述と同じ形 式です.このオプションは,潜在的な悪習の窓をかなり狭めるという点で,セ キュリティの立場から主に役に立ちます.例えば,以下のように,このオプショ ンを使用しないで,ユーザのファイルに対してUIDの変更を反映させるために, rootが実行したとします.
          find / -owner OLDUSER -print0 | xargs -0 chown NEWUSER

しかし,findが既存のファイルの所有者をテストしたときと, chownが実際に実行したときの間が非常に長い可能性があるので, それは危険です.ギャップを小さくするひとつの方法は,それぞれのファイル に対し見つかったときにchownを呼び出すことです.

          find / -owner OLDUSER -exec chown NEWUSER {} \;

しかし,影響されるファイルが多い場合は,それは非常に遅くなります.この オプションを用いると,(ギャップを狭めたままで)完全ではありませんが,そ れは安全になります.

          chown -R --from=OLDUSER NEWUSER /

--dereference
シンボリックリンク自身に動作せず,それが示すものに動作します.
-h
--no-dereference
シンボリックリンクが示すものではなく,それ自身に動作します.これはデフォ ルトです.このモードはlchownシステムコールに依存します. lchownシステムコールが提供されていないシステムでは,コマンドラ インで指定されるファイルがシンボリックリンクの時,chownは失 敗します.デフォルトで,再帰的な処理の間に発見されるシンボリックリンク に対する診断結果は表示されませんが,それについては--verboseは 参照してください.
--preserve-root
--recursiveオプションを使用しているとき,ファイルシステムのルー ト,/の移動する試みを失敗させます.--recursiveを用いて いない場合,このオプションは効果がありません.See Treating / specially.
--no-preserve-root
それ以前の--preserve-rootオプションの効果を取り消します. See Treating / specially.
--reference=ref_file
それぞれのfileのユーザとグループを,ref_fileと同じになるよ うに変更します.ref_fileがシンボリックリンクの場合,シンボリック リンクのユーザとグループではなく,それが参照するファイルのものを使用し ます.
-v
--verbose
処理された全てのファイルに対し,診断結果を出力します.lchownシ ステムコールがないシステムで,再帰的な処理の間にシンボリックリンクが見 つかり,--no-dereferenceの影響がある場合,シンボリックリンク もその参照先も変更されないことを告げる診断結果を表示します.
-R
--recursive
ディレクトリとその内容の所有権を再帰的に変更します.
-H
--recursive (-R)が指定されていて,コマンドライン引数 がディレクトリへのシンボリックリンクの場合,それをたどっていきます. See Traversing symlinks.
-L
再帰的にたどる状況で,ディレクトリへのシンボリックリンクを,見つかった ものはすべてたどります. See Traversing symlinks.
-P
シンボリックリンクをたどりません.これは-H-L,また は-Pのいずれも指定されていない場合のデフォルトです. See Traversing symlinks.

終了ステータスのゼロは成功を示し,ゼロ以外の値は失敗を示します.