次: , 前: chmod invocation, 上: 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.

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