[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

13. ファイル属性の変更

ファイルとは,その内容,名前,そしてファイル形式(see section 特殊ファイルの形式)だけの存在ではありません.ファイルには,所有者(ユーザID),グルー プ(グループID),許可(所有者がファイルに行えること,グループの人ができ ること,そして,その他誰でも可能であること),様々なタイムスタンプ,そ してその他の情報があります.まとめて,これらをファイルの属性 (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 section 標準への準拠)では,それをサポートすることを要求していませんが,後方互 換性のため,GNU chownは曖昧な結果にならない限り `.'をサポートします.互換性のため,そして, owner`.'groupで`.'を含む名前のユーザを識別してしまうと 好ましくない結果になるので,新しいスクリプトでは`.'の使用を避ける べきです.

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

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

` -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 section / の特別な扱い方.

` --no-preserve-root'

それ以前の`--preserve-root'オプションの効果を取り消します. See section / の特別な扱い方.

` --reference=ref_file'

それぞれのfileのユーザとグループを,ref_fileと同じになるよ うに変更します.ref_fileがシンボリックリンクの場合,シンボリック リンクのユーザとグループではなく,それが参照するファイルのものを使用し ます.

` -v'
` --verbose'

処理された全てのファイルに対し,診断結果を出力します.lchownシ ステムコールがないシステムで,再帰的な処理の間にシンボリックリンクが見 つかり,`--no-dereference'の影響がある場合,シンボリックリンク もその参照先も変更されないことを告げる診断結果を表示します.

` -R'
` --recursive'

ディレクトリとその内容の所有権を再帰的に変更します.

` -H'

`--recursive' (`-R')が指定されていて,コマンドライン引数 がディレクトリへのシンボリックリンクの場合,それをたどっていきます. See section シンボリックリンクをたどる.

` -L'

再帰的にたどる状況で,ディレクトリへのシンボリックリンクを,見つかった ものはすべてたどります. See section シンボリックリンクをたどる.

` -P'

シンボリックリンクをたどりません.これは`-H',`-L',また は`-P'のいずれも指定されていない場合のデフォルトです. See section シンボリックリンクをたどる.

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


13.2 chgrp: グループの所有権の変更

chgrpは,それぞれの与えられたfileのグループ所有権を group(グループ名またはグループIDのどちらかで与えられるはずです), または,既存の参照ファイルのグループに変更します.概要です.

 
chgrp [option]… {group | --reference=ref_file} file

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

` -c'
` --changes'

グループが実際に変更されているそれぞれのfileに対し,動作を冗長に 記述します.

` -f'
` --silent'
` --quiet'

グループを変更できなかったファイルに関するエラーメッセージを出力しませ ん.

` --dereference'

シンボリックリンク自身に作用するのではなく,それが指し示すものに作用し ます.

` -h'
` --no-dereference'

シンボリックリンクを,それが指し示すものの代わりにそれ自身に動作します. これはデフォルトです.このモードはlchownシステムコールに依存し ます.コマンドラインで指定されているファイルがシンボリックリンクの時, chgrpは失敗します.デフォルトで,再帰的な変換の間に見つかっ たシンボリックリンクに対し診断結果は表示されませんが,それについては `--verbose'を参照してください.

` --preserve-root'

`--recursive'オプションを使用しているとき,ファイルシステムのルー ト,`/'の移動する試みを失敗させます.`--recursive'を用いて いない場合,このオプションは効果がありません.See section / の特別な扱い方.

` --no-preserve-root'

それ以前の`--preserve-root'オプションの効果を取り消します. See section / の特別な扱い方.

` --reference=ref_file'

それぞれのfileのグループを,ref_fileと同じになるように変更 します.ref_fileがシンボリックリンクの場合,シンボリックリンクの グループではなく,それが参照するファイルのものを使用します.

` -v'
` --verbose'

処理した全てのファイルに対し,診断結果を出力します.lchownシス テムコールがないシステムで,再帰的な変換の間にシンボリックリンクが見つ かり,`--no-dereference'が有効でない場合,シンボリックリンクも 参照するものも変更されないことを告げる診断結果を表示します.

` -R'
` --recursive'

ディレクトリとその内容のグループ所有権を再帰的に変更します.

` -H'

`--recursive' (`-R')が指定されていて,コマンドライン引数 がディレクトリへのシンボリックリンクの場合,それをたどっていきます. See section シンボリックリンクをたどる.

` -L'

再帰的にたどる状況で,ディレクトリへのシンボリックリンクを,見つかった ものはすべてたどります. See section シンボリックリンクをたどる.

` -P'

シンボリックリンクをたどりません.これは`-H',`-L',また は`-P'のいずれも指定されていない場合のデフォルトです. See section シンボリックリンクをたどる.

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


13.3 chmod: アクセス許可の変更

chmodは指名されたファイルのアクセス許可を変更します.概要で す.

 
chmod [option]… {mode | --reference=ref_file} file

chmodシステムコールは,シンボリックリンクの許可を変更できな いため,chmodはそれらのの許可を決して変更しません.シンボリッ クリンクの許可は決して使用されないので,これは問題ではありません.しか し,コマンドラインでリストアップされたそれぞれのシンボリックリンクに対 し,chmodは指し示されたファイルの許可を変更します.その代わ り,再帰的にディレクトリを横断している間,chmodは,遭遇した シンボリックリンクを無視します.

modeが使用されている場合,それは新しい許可を指定します.詳細は ファイルの許可のセクションを参照してください.

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

` -c'
` --changes'

許可が実際に変更されているそれぞれのfileに対し,動作を冗長に記述 します.

` -f'
` --silent'
` --quiet'

許可を変更できなかったファイルに関するエラーメッセージを出力しません.

` --preserve-root'

再帰的にファイルシステムのルート,`/'を変更する試みを失敗させます. `--recursive'を用いていない場合,このオプションは効果がありませ ん.See section / の特別な扱い方.

` --no-preserve-root'

それ以前の`--preserve-root'オプションの効果を取り消します. See section / の特別な扱い方.

` -v'
` --verbose'

与えられたすべてのfileに対し,動作,非動作の冗長な記述を行います.

` --reference=ref_file'

それぞれのfileのモードを,ref_fileと同じになるように変更し ます.See section ファイルの許可. ref_fileがシンボリックリンクの場 合,シンボリックリンクのモードではなく,それが参照するファイルのものを 使用します.

` -R'
` --recursive'

ディレクトリとその内容の許可を再帰的に変更します.

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


13.4 touch: ファイルのタイプスタンプの変更

touchは,指定されたファイルのアクセスと/や編集された時間を変 更します.概要です.

 
touch [option]… file

古いシステムでは,touchは以下のような時代遅れの構文ををサポー トしています.最初のfileが`-t'オプションの有効な引数で, タイムスタンプが`-d',`-r',または`-t'オプション で全く与えられておらず,`--'引数が与えられていない場合,その引数 はファイル名としてではなく,その他のファイルに対する時間として解釈され ます.POSIX 1003.1-2001 (see section 標準への準拠)では, これを許可していません.代わりに`-t'を使用してください.

存在しないfileはすべて空として作成されます.

アクセスと編集の時間の両方を現在の時間に変更するとき,touch は実行しているユーザがファイルの所有者で無いが,書き込み許可があるもの のタイムスタンプを変更することができます.それ以外では,ユーザはそのファ イルの所有者である必要があります.

touchは,ファイルの二つの時間 - 最後のアクセスと編集 - を 変更するオプションを提供しますが,実際には三番目のinodeの変更時間も同 じです.これはファイルのctimeとしてよく参照されます.inodeの変 更時間は,ファイルのメタ情報が最後に変更された時間を表現します.一般的 な例の一つは,ファイルの許可を変更したときです.許可の変更は,ファイル にアクセスしないのでatimeを変更しませんし,ファイルの編集もしないので mtimeも変更しません.しかし,ファイル自身の何かは変っていまて,これは どこかに記録する必要があります.これはctimeフィールドの仕事です.例え ば,バックアッププログラムが新しい許可値まで含めてファイルの新しいコピー を作成することを可能にするために,これが必要になります.他に影響しない ようにファイルのctimeを編集するもう一つの処理は名前の変更です.通常の 処理では,ユーザがctimeフィールドをユーザが指定した値に変更することは, いかなる場合でも不可能です.

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

` -a'
` --time=atime'
` --time=access'
` --time=use'

アクセス時間だけ変更します.

` -c'
` --no-create'

存在していないファイルを作成しません.

` -d'
` --date=time'

現在の時間の代わりにtimeを指定します.それは,月名,タイムゾーン, `am'と`pm'等を含めることが可能です.See section 日付入力の書式.

` -f'

無視されます.BSD版のtouchの互換性のためです.

` -m'
` --time=mtime'
` --time=modify'

編集時間だけ変更します.

` -r file'
` --reference=file'

現在の時間の代わりに参照fileの時間を使用します.このオプションが `--date=time' (`-d time')オプションと組み合 わされている場合,参照するfileの時間は,与えられたものの timeから相対的なものになりますが,それ以外では無視されます.例え ば,`-r foo -d '-5 seconds''は,`foo'の対応するタイムスタン プの五秒前と同じタイムスタンプを指定します.

` -t [[CC]YY]MMDDhhmm[.ss]'

現在の時間の代わりに引数(オプションの四桁または二桁の年,月,日,時間, 分,オプションの秒)を使用します.年が二桁のみで指定された場合, CCは,0 … 68に対し20,69 … 99に対し19になります.年 の数字が指定されない場合,今年の日付として解釈されます.

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


[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

This document was generated by Akihiro Sagawa on June, 8 2005 using texi2html 1.70.