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

11. 基本的なオペレーション

この章は,基本的なファイル操作に対するコマンドを記述します.コピー,移 動(名前の変更),そして削除(リムーブ)です.


11.1 cp: ファイルとディレクトリのコピー

cpは,ファイル(または,オプションでディレクトリ)をコピーしま す.コピーはオリジナルから完全に独立しています.一つのファイルをもう一 つにコピーする,または,任意の多くのファイルをコピー先のディレクトリに コピーすることのいずれかが可能です.概要です.

 
cp [option]… source dest
cp [option]… sourcedirectory

最後の引数が既存のディレクトリを指す場合,cpはそれぞれの sourceファイルをそのディレクトリに(同じ名前のままで)コピーします. それ以外で,二つのファイルが与えられた場合,最初のものを二番目のものに コピーします.最後の引数がディレクトリでなく,二つ以上のオプションでな い引数が与えられた場合エラーとなります.

一般的に,ファイルは読み込まれたとおりに書き込まれます.例外は,以下の `--sparse'オプションを参照してください.

デフォルトで,cpはディレクトリをコピーしません.しかし, `-R',`-a',そして`-r'オプションでは, cpは元のディレクトリを下り,対応するコピー先のディレクトリに ファイルをコピーすることで,再帰的にコピーします.

デフォルトで,cpは再帰的にコピーしないときのみ,シンボリック リンクをたどります.このデフォルトは,`--no-dereference' (`-d'),`--dereference' (`-L'),そして`-H' オプションで優先することが可能です.これらのオプションの一つ以上が指定 されている場合,最後のものが他のものに対して,そのまま優先します.

デフォルトで,cpは,再帰的なコピーではないときだけ特殊ファイ ルの内容をコピーします.このデフォルトは,`--copy-contents'オプ ションで優先させることが可能です.

cpは一般的に,以下の例外はありますが,ファイルの自分自身への コピーを拒絶します.`--force --backup'が同一のsourcedestで指定され,通常のファイルを参照している場合,cpは, 通常の方法(see section バックアップオプション)で指定されたように,通常または番号付 きのバックアップファイルを作成します.これは,変更前に既存のファイルの バックアップを単に作成したいとき役に立ちます.

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

` -a'
` --archive'

コピー時に,元のファイルの構造と属性を可能な限り保持します(しかし,ディ レクトリ構造の保持は試みません.すなわち,`ls -U'はコピーされてい るディレクトリの項目を,異なる順序でリストアップする可能性があります). `-dpR'と同じです.

` -b'
` --backup[=method]'

See section バックアップオプション. 上書きされたり削除されたりするそれぞれのファイ ルのバックアップを作成します.特殊な場合として,強制とバックアップのオ プションが指定され,sourcedestが同じ名前で存在していると き,通常のファイルとして,cpsourceのバックアップを作 成します.このオプションの組合わせの役に立つ応用の一つは,以下の小さな Bourneシェルスクリプトです.

 
#!/bin/sh
# Usage: backup FILE...
# Create a GNU-style backup of each listed FILE.
for i; do
  cp --backup --force "$i" "$i"
done
` --copy-contents'

再帰的にコピーをしている場合,特殊ファイル(例えばFIFOとデバイスファイ ル)の内容を通常のファイルのようにコピーします.これは,それぞれのソー スファイルからデータを読み込み,それをコピー先に書き込むことを意味しま す.通常は,FIFOと`/dev'ディレクトリで見つかるような特殊ファイル では好ましくない効果があるので,このオプションの使い方はよく誤解されま す.ほとんどの状況で,FIFOと`/dev/console'のような特殊ファイルを 読み込もうとしてcp -R --copy-contentsは限りなく読み込み続け, `/dev/zero'をコピーで使用している場合,コピー先のディスクはいっぱ いになるでしょう.このオプションは,再帰的にコピーしていない限り効果が 無く,シンボリックリンクのコピーにも影響しません.

` -d'

シンボリックリンクを,それが示すファイルをコピーするのではなく,シンボ リックリンクとしてコピーし,コピーのソースファイル間のハードリンクを保 持します.`--no-dereference --preserve=links'と等価です.

` -f'
` --force'

このオプションを使用せずコピーし,コピー先のファイルが存在し,書き込み で開くことができないとき,コピーは失敗します.しかし,`--force' を用いた場合,コピー先のファイルが開けないとき,cpはそれをア ンリンクし,もう一度開こうとします.この動作は,`--link'と `--symbolic-link'でそれを可能にすることとは異なり,それによって コピー先ファイルは開かれることなく,無条件にアンリンクされます. `--remove-destination'の記述も参照してください.

` -H'

コマンドライン引数がシンボリックリンクを指定している場合,シンボリック リンクではなく,ファイルをその位置にコピーします.しかし,再帰的にたどっ ていて見つかったすべてのシンボリックリンクを(その元を保存して)コピーし ます.

` -i'
` --interactive'

既存の通常のコピー先のファイルを上書きするかどうか,プロンプトを表示し ます.

` -l'
` --link'

ディレクトリ以外はコピーの代わりにハードリンクを作成します.

` -L'
` --dereference'

常にシンボリックリンクをたどります.

` -P'
` --no-dereference'

シンボリックリンクを,それが示すファイルをコピーするのではなくシンボリッ クリンクとしてコピーします.

` -p'
` --preserve[=attribute_list]'

指定されている元のファイルの属性を保持します.指定する場合, attribute_listは以下の文字列の一つ以上を,カンマで分離されたリス トにする必要があります.

` mode'

許可の属性を保持します.

` ownership'

所有者とグループの属性を保持します.最近のシステムでは,スーパーユーザ のみファイルの所有者を変更することが可能で,通常のユーザは,要求される グループのメンバーの場合のみ,ファイルの所有者のグループを保持すること が可能です.

` timestamps'

最後のアクセスと最後の編集のタイムスタンプを保持します.

` links'

対応するソースファイル間のリンクをコピー先のファイルに保持します.

` all'

すべてのファイル属性を保持します.上記のすべてを指定したものと等価です.

attribute_listを用いずに`--preserve'を使用することは, `--preserve=mode,ownership,timestamps'と等価です.

このオプションがないとき,それぞれのコピー先のファイルは,元のファイル に対応するパーミッションで作成され,umaskで設定されているビットがなく なり,そして,set-user-idビットとset-group-idビットがなくなります. See section ファイルの許可.

` --no-preserve=attribute_list'

指定された属性を保持しません.attribute_listは `--preserve'の形式と同じです.

` --parents'

それぞれのコピー先のファイル名を,ターゲットディレクトリにスラッシュと 指定されたソースファイルの名前を追加したものとして作成します. cpに与える最後の引数は,既存のディレクトリ名にする必要があり ます.例えば,以下のようなコマンドを入力します.

 
cp --parents a/b/c existing_dir

これはファイル`a/b/c'を`existing_dir/a/b/c'にコピーし,存在 しないあらゆる中間ディレクトリを作成します.

` --reply[=how]'

`--reply=yes'を使用すると,コピー先のファイルに関するすべてのプ ロンプトに対する応答として`yes'が与えられたかのようにcp が動作します.それは,それまでに使用されていた`--interactive'や `-i'オプションを効果的に停止します.コピー先のファイルに関する すべてのプロンプトに対する応答として`no'が与えられたかのように cpに動作させるため,`--reply=no'を指定して下さい.そ れぞれ既存のコピー先のファイルに関して,cpがユーザにプロンプ トを表示するようにするため,`--reply=query'を指定して下さい.

` -R'
` -r'
` --recursive'

再帰的にディレクトリをコピーします.デフォルトではシンボリックリンクを たどりません.`--archive' (`-a'),`-d', `--dereference' (`-L'),`--no-dereference' (`-P'),そして`-H'オプションを参照して下さい.特殊ファイ ルは,元となるファイルと同じ形式でコピー先のファイルを作成することでコ ピーします.`--copy-contents'オプションを参照して下さい.シンボ リックリンクや特殊ファイルをコピーするために`-r'を使用すること には移植性がありません.GNU以外のシステムには,歴史的な理由から `-r'で`-L'と`--copy-contents'の等価物を暗黙に指定 するものもあります.また,シンボリックリンクをコピーするため `-R'を使用することは,`-P'も指定しない限り移植性が無く, それは,デフォルトでシンボリックリンクの間接参照を行なう実装が POSIXで許可されているためです.

` --remove-destination'

それぞれの既存のコピー先ファイルを,それを開く前に削除します(上記の `-f'とは異なります).

` --sparse=when'

まばらなファイル(sparse file)穴(holes) -- 物理的なディ スクブロックには発生しないゼロバイトの列 -- を含みます.`read'シ ステムコールはこれらをゼロとして読み込みます.バイナリファイルには連続 するゼロバイトを含むことが多いので,これでディスクスペースの節約と速度 の増加の両方を達成することが可能です.デフォルトでは,cpは発 見的手法を用いて入力された元ファイルの穴を見付け,対応する出力ファイル に同様にまばらにします.通常のファイルだけがまばらになります.

whenの値は以下の一つになります.

` auto'

デフォルトの動作です:入力ファイルがまばらの場合,出力ファイルもまばら にするように試みます.しかし,出力ファイルが存在し,通常のファイルでは ないものを参照している場合,まばらにする試みは行ないません.

` always'

入力ファイルの十分に長いゼロバイトの連続に対し,入力ファイルがまばらで ない場合でも,出力ファイルに対応する穴(連続したゼロバイト)の作成を試み ます.これは,入力ファイルがまばらなファイルをサポートしていないファイ ルシステム(例えば,SGI IRIX 5.3とそれ以前の`efs'ファイルシステム) に存在していて,出力ファイルがサポートしているファイルシステムのとき役 に立ちます.穴(連続したゼロバイト)は通常のファイルにだけ作成されるので, コピー先のファイルが通常のファイルではない場合,cpはまばらに しようとはしません.

` never'

出力ファイルをまばらにしません.mkswapコマンドを用いてファイ ルを作成するとき,そのようなファイルには穴があってはならないので,これ が役に立ちます.

` --strip-trailing-slashes'

それぞれのsource引数から,後置されるスラッシュを削除します. See section 末尾のスラッシュ.

` -s'
` --symbolic-link'

ディレクトリでないものをコピーする代わりにシンボリックリンクを作成しま す.すべての元ファイル名は,リンク先のファイルが現在のディレクトリにあ る場合以外,絶対的である(`/'で始まる)必要があります.シンボリック リンクをサポートしないシステムでは,このオプションは結果としてエラーメッ セージを返すだけです.

` -S suffix'
` --suffix=suffix'

`-b'で作成されるそれぞれのバックアップファイル名に, suffixを追加します.See section バックアップオプション.

` --target-directory=directory'

移動(コピー)先のdirectoryを指定します.See section ターゲットディレクトリ.

` -v'
` --verbose'

コピーする前にそれぞれのファイル名を出力します.

` -V method'
` --version-control=method'

`-b'で作成するバックアップの形式を変更します.method引数 は,`none' (または`off'),`numbered' (または`t'), `existing' (または`nil'),または`never' (または `simple')が利用可能です.See section バックアップオプション.

` -x'
` --one-file-system'

コピーを開始したファイルシステムと異なるサブディレクトリを省略します. しかし,マウントポイントのディレクトリはコピーされます

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


11.2 dd: ファイルの変換とコピー

ddは,変更可能なI/Oブロックサイズを用いて,(デフォルトで,標 準入力から標準出力に)ファイルをコピーし,オプションの動作でそれを変更 します.概要です.

 
dd [option]…

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

以下の(bytesblocks)数値的な値のオプションを続けて倍数に することが可能です.それは,`b'=512,`c'=1,`w'=2, `xm'=m,または`k'=1024のようなあらゆるブロックサ イズ接尾子です(see section ブロックサイズ).

スキップとI/Oに対し異なるブロックサイズを使用するためは,dd の呼び出しを別々に行なってください.例えば,以下のシェルコマンドでは, ディスクとテープの間で512kBブロックでデータをコピーしますが,ディスク の最初の4kBのラベルは,保存されたり復元されたりしません.

 
disk=/dev/rdsk/c0t1d0s2
tape=/dev/rmt/0

# Copy all but the label from disk to tape.
(dd bs=4k skip=1 count=0 && dd bs=512k) <$disk >$tape

# Copy from tape back to disk, but leave the disk label alone.
(dd bs=4k seek=1 count=0 && dd bs=512k) <$tape >$disk

`SIGUSR1'シグナルを実行中のddに送ることで,標準エラー出 力にレコード番号を出力し,そのまま続けて書き込み,コピーを再開します. 以下の例では,ddを10Mブロックをコピーする処理をバックグラン ドで実行しています.killコマンドで,直前のレコード数の最初の 組を出力し,ddが終了したとき最後の組を出力します.

 
$ dd if=/dev/zero of=/dev/null count=10M & pid=$!
$ kill -USR1 $pid; sleep 99
5403604+0 records in
5403604+0 records out
10485760+0 records in
10485760+0 records out
` if=file'

標準入力の代わりにfileから読み込みます.

` of=file'

標準出力の代わりにfileに書き出します.`conv=notrunc'が与え られていない場合,ddfileをゼロバイト(または, `seek='で指定されたサイズ)に切り詰めます.

` ibs=bytes'

一度にbytesバイト読み込みます.

` obs=bytes'

一度にbytesバイト書き出します.

` bs=bytes'

一度にbytesバイト読み書きします.これは`ibs'と`obs'に 優先します.

` cbs=bytes'

一度にbytesバイト変換します.

` skip=blocks'

コピーする前に入力ファイルで,blocks `ibs'バイトブロックを 読み飛ばします.

` seek=blocks'

コピーする前に出力ファイルで,blocks `ibs'バイトブロックを 読み飛ばします.

` count=blocks'

ファイルの終りまでのすべてではなく,入力ファイルからblocks `ibs'バイトブロックコピーします.

` conv=conversion[,conversion]…'

conversion引数で指定されたようにファイルを変換します.(カンマの 回りにスペースはありません.)

以下の変換です.

` ascii'

EBCDICをASCIIに変換します.

` ebcdic'

ASCIIをEBCDICに変換します.

` ibm'

ASCIIを別のEBCDICに変換します.

` block'

入力のそれぞれの行に対し,入力の改行をスペースに置換し,必要なスペース を埋め込みながら,`cbs'バイト出力します.

` unblock'

それぞれの`cbs'の大きさの入力ブロックで,末尾のスペースを改行に置 換します.

` lcase'

大文字を小文字に変換します.

` ucase'

小文字を大文字に変換します.

` swab'

入力バイトのすべての組を入れ替えます.GNU ddは他と異な り,偶数バイトを読み込んだとき動作します -- 最後のバイトは,単にコピー されます.(入れ替えるバイトがないからです).

` noerror'

読み込みエラー後も続けます.

` notrunc'

出力ファイルを切り詰めません.

` sync'

すべての入力ブロックを,後置するゼロバイトを埋め込み`ibs'サイズに します.`block'や`unblock'を使用するとき,ゼロバイトの代わり にスペースで埋め込みます.

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


11.3 install: ファイルのコピーと属性の設定

installは,許可モードと,可能な場合は所有者とグループ設定し ながらファイルをコピーします.概要です.

 
install [option]… source dest
install [option]… sourcedirectory
install -d [option]… directory

これらの最初のものは,sourceファイルはdestターゲットファイ ルにコピーされます.二番目では,それぞれのsourceファイルはコピー 先のdirectoryにコピーされます.最後では,それぞれの directory(と足りない親ディレクトリ)がコピーされます.

installcpに似ていますが,コピー先のファイルの属 性を制御することが可能になっています.それはMakefileで一般的に使用され, プログラムをコピー先のディレクトリにコピーします.自分自身にファイルを コピーすることは拒否されます.

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

` -b'
` --backup[=method]'

See section バックアップオプション. 上書きされたり削除されたりするそれぞれのファイルのバックアップを作成し ます.

` -c'

無視されます.古いUnixバージョンのinstallの互換性のためです.

` -d'
` --directory'

与えられたそれぞれのディレクトリと足りない親ディレクトリを,コマンドラ インで与えられたやデフォルトの所有者,グループとモードに設定しながら作 成します.親ディレクトリも与えられた属性で作成されます.(これはSunOS 4.x installと異なり,そこではディレクトリはデフォルトの属性 が与えられます.)

` -g group'
` --group=group'

インストールされるファイルやディレクトリのグループ所有権を, group に設定します.デフォルトは,プロセスの現在のグループです. groupは,グループ名や数値的なグループIDが可能です.

` -m mode'
` --mode=mode'

インストールされるファイルやディレクトリの許可をmodeに設定し,そ れは八進数やchmodの象徴的なモードが可能で,0が出発点となりま す(see section ファイルの許可).デフォルトモードは`u=rwx,go=rx'です -- 所有者の読み書き実行,グループとそれ以外は読み込みと実行です.

` -o owner'
` --owner=owner'

installが適切な特権(ルートとして実行)を持つ場合,インストー ルされるファイルやディレクトリの所有権はownerに設定されます.デ フォルトはrootです.ownerは,ユーザ名または,数値のユーザ IDが可能です.

` -p'
` --preserve-timestamps'

インストールされたそれぞれのファイルの,最後にアクセスした時間と最後に 編集した時間を,対応するそれぞれの元ファイルにマッチさせます.このオプ ション無しでファイルがインストールされたとき,最後にアクセスした時間と 最後に編集した時間は,どちらもインストールされた時間に設定されます.こ のオプションは,最後にインストールされた時ではなく,最後にビルドされた 時を追跡し続けるため,インストールされたファイルの最後に編集された時間 を使用する場合,役に立ちます.

` -s'
` --strip'

インストールされたバイナリ実行形式から,シンボルテーブルを取り除きます.

` -S suffix'
` --suffix=suffix'

`-b'で作成されるそれぞれのバックアップファイル名に, suffixを追加します.See section バックアップオプション.

` --target-directory=directory'

移動(コピー)先のdirectoryを指定します.See section ターゲットディレクトリ.

` -v'
` --verbose'

コピーする前に,それぞれのファイル名を出力します.

` -V method'
` --version-control=method'

`-b'で作成するバックアップの形式を変更します.method引数 は,`none' (または`off'),`numbered' (または`t'), `existing' (または`nil'),または`never' (または `simple')が利用可能です.See section バックアップオプション.

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


11.4 mv: ファイルの移動(名前の変更)

mvは,ファイル(やディレクトリ)を移動したり名前を変更したりし ます.概要です.

 
mv [option]… source dest
mv [option]… sourcedirectory

最後の引数が,既存のディレクトリを示す場合,mvは,それ以外の 与えられたそれぞれのファイルを,同じファイル名で,そのディレクトリに移 動します.それ以外では,二つのファイルが与えられた場合,一番目の名前を 二番目に変更します.最後の引数がディレクトリではなく,二つ以上のファイ ルが与えられた場合,エラーとなります.

mvは,一つのファイルシステムから別のものへ,あらゆる形式のファ イル移動が可能です.fileutilsのバージョン4.0以前では, mvは通常のファイルのみファイルシステム間での移動が可能でした. 例えば,現在のmvは,一つのパーティションから別のものへ,特殊 なデバイスファイルを含むディレクトリ階層全体を移動することが可能です. それは最初に,要求されたディレクトリとファイルをコピーするcp -a で使用されているものと同じコードを使用し,それから(コピーが成功したと 仮定して)元を削除します.コピーが失敗した場合,移動先のパーティション にコピーされた部分が削除されます.一つのパーティションから三つのディレ クトリを別のものにコピーしていて,最初のディレクトリが成功し,二番目が 失敗した場合,最初のものは移動先のパーティションに残り,二番目と三番目 は元のパーティションに残ります.

移動先のファイルが存在し通常の書き込みが不可で,標準入力が端末で, `-f'や`--force'オプションが与えられていない場合, mvはファイルを置換するかどうか,ユーザにプロンプトを表示しま す.(自分が所有するファイル,または,そのディレクトリに書き込み許可が ある必要があります.)応答が`y'または`Y'で始まらない場合,ファ イルはスキップされます.

警告:ディレクトリを示すシンボリックリンクを移動しようとし,ス ラッシュを後置したシンボリックリンクを指定した場合,mvはシン ボリックリンクを移動しませんが,その代わりにシンボリックリンクが参照す るディレクトリを移動します.See section 末尾のスラッシュ.

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

` -b'
` --backup[=method]'

See section バックアップオプション. 上書きされたり削除されたりするそれぞれのファイルのバックアップを作成し ます.

` -f'
` --force'

移動先のファイルを削除したり上書きしたりする前に,ユーザにプロンプトを 表示しません.

` -i'
` --interactive'

ファイルの許可に依存せず,それぞれの既存の移動先のファイルを上書きす るかどうかプロンプトを表示します.`y'や`Y'で始まらない返答の 場合,ファイルはスキップされます.

` --reply[=how]'

`--reply=yes'の指定は,`--force'の使用と等価です. mvが移動先のファイルに関するプロンプトに対し`no'が与え られているかのように動作させるため,`--reply=no'を指定して下さ い.移動先のファイルが存在するときmvがユーザにプロンプトを表 示するようにするため,`--reply=query'を指定して下さい.

` -u'
` --update'

同じまたは新しい編集時間を持つ既存の移動先にディレクトリ以外のものを移 動しません.

` -v'
` --verbose'

移動する前にそれぞれのファイル名を出力します.

` --strip-trailing-slashes'

それぞれのsource引数から,後置されるスラッシュを削除します. See section 末尾のスラッシュ.

` -S suffix'
` --suffix=suffix'

`-b'で作成されるそれぞれのバックアップファイル名に, suffixを追加します.See section バックアップオプション.

` --target-directory=directory'

移動(コピー)先のdirectoryを指定します.See section ターゲットディレクトリ.

` -V method'
` --version-control=method'

`-b'で作成するバックアップの形式を変更します.method引数 は,`none' (または`off'),`numbered' (または`t'), `existing' (または`nil'),または`never' (または `simple')が利用可能です.See section バックアップオプション.

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


11.5 rm: ファイルやディレクトリの削除

rmは与えられたfileを削除します.デフォルトではディレク トリを削除しません.概要です.

 
rm [option]… [file]…

ファイルに書き込みができない,標準入力が端末,そして,`-f'また は`--force'オプションが与えられていない場合,または, `-i'または`--interactive'オプションが与えられてい る場合,rmはユーザにファイルを削除するかどうかを促すプロン プトを表示します.`y' や`Y'で始まらない返答の場合,ファイル は省略されます.

警告:ファイルを削除するためにrmを使用する場合,通常 はファイルの内容を復活させることが可能です.より確実にファイルの内容を 本当に復活させないようにしたい場合,shredの使用を検討して下 さい.

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

` -d'
` --directory'

rmdirの代わりにunlinkを用いてディレクトリの削除を試み, そしてアンリンクを試みる前にディレクトリが空である必要はありません.適 切な特権を持ち,オペレーティングシステムがディレクトリに対する unlinkをサポートしている場合のみ,これは動作します.ディレクト リのアンリンクはディレクトリ内のすべてのファイルを参照できなくなるので, この後でファイルシステムにfsckした方が賢明です.

` -f'
` --force'

存在しないファイルを無視し,ユーザにプロンプトを表示しません.前にある `--interactive' (`-i')オプションを無視します.

` -i'
` --interactive'

それぞれのファイルを削除するかどうかプロンプトを表示します.`y'や `Y'で始まらない返答の場合,ファイルはスキップされます.前にある `--force' (`-f')オプションを無視します.

` --preserve-root'

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

` --no-preserve-root'

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

` -r'
` -R'
` --recursive'

ディレクトリの内容を再帰的に削除します.

` -v'
` --verbose'

削除する前にそれぞれのファイル名を出力します.

よくある問題の一つは,`-'で始まる名前を持つファイルの削除の方法で す.GNU rmでは,引数を解析するgetopt関数を使用す るすべてのプログラムに似ていて,以下のすべての引数がオプションでないこ とを示す`--'オプションを使用します.現在のディレクトリの`-f' というファイル名を削除するため,以下のどちらかの入力で可能になります.

 
rm -- -f

または以下のようにします.

 
rm ./-f

この目的に対する,Unix rmプログラムの単一の`-'の使用は, getoptの標準構文の開発以前のものです.

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


11.6 shred: より安全なファイルの削除

shredは,非常に高価なハードウェアを用いてもデータの復活を妨 げるように,デバイスやファイルを上書きします.

通常,ファイルを削除するとき(see section rm: ファイルやディレクトリの削除),データは実際には 破壊されません.ファイルが保存されている場所をリストアップしている索引 のみ破壊し,記憶装置は再利用可能になります.索引の再構築を試み,その部 分が再利用されていない場合,ファイルを元に戻すことが可能なアンデリート ユーティリティがあります.

ほとんど満タンのドライブを使用している忙しいシステムでは,スペースは数 秒で再利用可能になります.しかし,それが確実であることを知る方法はあり ません.機密データがあり,機密でないデータでファイルを実際に上書きする ことでリカバリが不可能だということを確かめたいかもしれません.

しかし,そうした後でも,研究所へディスクを持っていき,上書きされたデー タの下の元データのかすかな"残響"を探すために感度の高い(そして高価な) 多くの機器を使用することが可能です.データが一度上書きされただけでは, それはさほど難しくありません.

取り返しができないように何かを削除する最前の方法は,メディアに酸をかけ て破壊する,溶かしてしまう,またはそれに似たことをすることです.フロッ ピーディスクのような,安い着脱可能なメディアに対しては,これは好ましい 方法です.しかし,ハードドライブは高価で,溶かすのが難しいため, shredユーティリティでは破壊することなく類似の効果を達成しよ うとします.

これは,古いデータに対するダメージを最大にするように選ばれたデータパター ンで,上書き動作を何回も使用します.これがフロッピーディスクで動作して いても,パターンはハードドライブで最適な効果があるように設計されている ものになります.詳細は,ソースコードと,Sixth USENIX Security Symposium (San Jose, California, 22-25 July, 1996)の予稿から,Peter Gutmannの論文Secure Deletion of Data from Magnetic and Solid-State Memoryを参照してください.論文は http://www.cs.auckland.ac.nz/~pgut001/pubs/secure_del.htmlで,オ ンラインでも利用可能です.

shredは非常に重要な仮定に依存していることに注意して ください.それは,ファイルシステムがその場所のデータを上書きするとい うことです.これは伝統的な方法ですが,現代の多くのファイルシステムはこ の仮定を満足するように設計されていません.例外は以下を含みます.

ファイルシステムがどのように動作しているかよく分からない場合,その場所 に上書きされないと仮定すべきで,それは,そのファイルシステムの通常のファ イルで,shredが信頼できる動作を行うことができないことを意味 します.

一般的に言って,上記の手法で設計されたファイルシステムの問題をバイパス するため,ファイルではなくデバイスにshredするとより信頼でき ます.しかし,デバイスをshredしてさえ,常に完全に信頼するこ とはできません.例えば,ほとんどのディスクは,不良セクタがアプリケーショ ンに見えないようにをマッピングします.不良セクタが機密データを含む場合, shredではそれを破壊することは不可能です.

shredは,バックアップについて何もしないように,これらの問題 の検出も報告も試みません.しかし,ファイルではなくデバイスに shredする方がより信頼できるので,shredはデフォルト で出力ファイルを切り詰めたり削除したりしません.このデフォルトはデバイ スに対しより適していて,それは通常切り詰めもできませんし,削除もすべき ではありません.

最後に,バックアップとミラーの危険性を検討します.ファイルシステムのバッ クアップとリモートのミラーには,削除不可能なファイルのコピーが含まれ, それでshredしたファイルを後に復活させることが可能です.その ため,その後shredを使用して破壊したいデータを保持している場 合,バックアップやミラーが無いことを確かめて下さい.

 
shred [option]… file[…]

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

` -f'
` --force'

上書き可能が必要な場合,ファイルの許可に優先させます.

` -NUMBER'
` -n NUMBER'
` --iterations=NUMBER'

デフォルトで,shredは25回の上書きを使用します.これで,少な くとも一回の使用で使用される有用な上書きパターンの全てに対して十分にな ります.時間の節約のため減らしたり,時間の無駄遣いをする場合に増やすこ とが可能です.

` -s BYTES'
` --size=BYTES'

ファイルの最初のBYTESバイトをshredします.デフォルトは ファイル全体をshredします.BYTESは乗数を指定するために, `k',`M',または`G'のようなサイズ指定を続けることができ ます.See section ブロックサイズ.

` -u'
` --remove'

ファイルをshredした後,(可能な場合は)それを切り詰め,そして 削除します.ファイルが複数のリンクを持つ場合,指名されたリンクのみ削除 されます.

` -v'
` --verbose'

バイ菌の増殖のようにステータスの表示を更新します.

` -x'
` --exact'

デフォルトで,shredは,ファイルの最後のブロックまで完全に消 去するため,通常のファイルのサイズをファイルシステムのブロックサイズの 次の乗数まで切り上げます.その動作を抑制するため,`--exact'を使 用して下さい.このため,デフォルトでは,512バイトのブロックを持つファ イルシステム上の,10バイトの通常のファイルをshredする場合, 結果としてファイルは512バイトになります.このオプションを用いると, shredはファイルのサイズを増加させません.

` -z'
` --zero'

通常,shredの書き込みの最終動作は,ランダムデータの作成です. これが(例えば,暗号化されたデータのように見えるため)ハードディスク上で 目立つ場合や,より整然とさせたいと考える場合,`--zero'オプショ ンで全てをゼロビットを用いて上書きする動作を追加します.これは, `--iterations'オプションで指定した動作数に追加されます.

` -'

標準出力をshredします.

この引数はオプションと見なされます.一般的な`--'オプションはコマ ンドラインのオプションの終りを示すために使用されますが,`-'は普通 のファイルとして解釈されます.

この使用目的は,削除された一時ファイルをshredすることです. 例です.

 
i=`tempfile -m 0600`
exec 3<>"$i"
rm -- "$i"
echo "Hello, world" >&3
shred - >&3
exec 3>-

シェルコマンド`shred - >file'は,shredの呼び出しの前に, それがfileを切り詰めるため,fileの内容を`shred'しない ことに注意してください.コマンド`shred file',または(Bourne互換シェ ルを使用している場合は)コマンド`shred - 1<>file'を代わりに使用し てください.

最初のドライブのフロッピーディスクに作成されたファイルシステムの,全て の記録を消去するために,以下のコマンドを使用するかもしれません.そのコ マンドは,1.44MBフロッピーを消去するために約20分かかります.

 
shred --verbose /dev/fd0

同様に,ハードディスクの選択されたパーティションの全てのデータを消去す るために,以下のようなコマンドを与えることが可能です.

 
shred --verbose /dev/sda5

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


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

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