この章は,基本的なファイル操作に対するコマンドを記述します.コピー,移動 (名前の変更),そして削除(リムーブ)です.
cp
: ファイルとディレクトリのコピー
cp
は,ファイル(または追加でディレクトリ)をコピーします.コピーは
オリジナルから完全に独立しています.一つのファイルをもう一つにコピーする,
または,任意の多くのファイルをコピー先のディレクトリにコピーすることのい
ずれかが可能です.構文は以下の通りです.
cp [option]... source dest cp [option]... source... directory
最後の引数が既存のディレクトリを指す場合,cp
はそれぞれの
sourceファイルをそのディレクトリに(同じ名前のままで)コピーします.
それ以外で,2つのファイルが与えられた場合,最初のものを2番目のものにコピー
します.最後の引数がディレクトリでなく,2つ以上のオプションでない引数が
与えられた場合エラーとなります.
一般的に,ファイルは読み込まれたとおりに書き込まれます.例外は,以下の `--sparse'オプションを参照してください.
デフォルトで,cp
はディレクトリをコピーしません.しかし,
@option{-R},@option{-a},そして@option{-r}オプションでは,@command{cp}
は元のディレクトリを下り,対応するコピー先のディレクトリにファイルをコピー
することで,再帰的にコピーします.
デフォルトで,@command{cp}は再帰的にコピーしないときのみ,シンボリックリ ンクをたどります.このデフォルトは,@option{--no-dereference} (@option{-d}),@option{--dereference} (@option{-L}),そして@option{-H}オ プションで優先することが可能です.これらのオプションの一つ以上が指定され ている場合,最後のものが他のものに対して,そのまま優先します.
cp
は一般的に,以下の例外はありますが,ファイルの自分自身へのコピー
を拒絶します.`--force --backup'が同一のsourceとdestで
指定して,通常のファイルを参照する場合,cp
は,通常の方法
(see section バックアップオプション)で指定されたように,通常または番号付きのバックアッ
プファイルを作成します.これは,変更前に既存のファイルのバックアップを単
に作成したいとき役に立ちます.
プログラムは以下のオプションも受け入れます.section 共通のオプション,も参照 してください.
cp
はsourceのバックアップを作成します.こ
のオプションの組合わせの役に立つ応用の一つは,以下の小さなBourneシェルス
クリプトです.
#!/bin/sh # Usage: backup FILE... # Create a GNU-style backup of each listed FILE. for i in "$@"; do cp --backup --force "$i" "$i" done
cp
はそれをアンリンクし,
もう一度開こうとします.この動作と`--link'と`--symbolic-link'
でそれを可能にすることと異なり,それによってコピー先ファイルは開かれるこ
となく,無条件にアンリンクされます.`--remove-destination'の記述も
参照してください.
cp
に与える最
後の引数は,既存のディレクトリ名にする必要があります.例えば,以下のよう
なコマンドを入力します.
cp --parents a/b/c existing_dirこれはファイル`a/b/c'を`existing_dir/a/b/c'にコピーし,存在し ないあらゆる中間ディレクトリを作成します. 警告:@option{-P}の意味はPOSIXに従うため,将来変更されるでしょう. 古い意味に対しては@option{--parents}を使用し,新しい意味に対しては @option{--no-dereference}を使用してください.
cp -r
を適用
すると通常失敗します.ほとんどの場合,cp -r
はFIFOと
`/dev/console' のような特殊ファイルからいつまでも読み込むことで待ち
続け,`/dev/zero'をコピーする場合,それはコピー先のディスクをいっぱ
いにします.特殊ファイルをコピーしたい場合,その内容をコピーするためそれ
らを読み込む代わりに,特殊な性質を妨げるため,`--recursive'
(`-R') を使用してください.
cp
は,情報の発見的手法を用い,入力ソースファイルで穴
を見付け,対応する出力ファイルに同様にまばらにします.
whenの値は以下の一つになります.
mkswap
コマンドを用いてファイルを
作成するとき,そのようなファイルには穴があってはならないので,これが役に
立ちます.
dd
: ファイルの変換とコピー
dd
は,変更可能なI/Oブロックサイズを用いて,(デフォルトで,標準入
力から標準出力に)ファイルをコピーし,オプションの動作でそれを変更します.
構文は以下のとおりです.
dd [option]...
プログラムは,以下のオプションも受け入れます.section 共通のオプション,も参 照してください.
以下(bytesとblocks)の数値的な値のオプションは,乗算を続ける ことができます.それは,`b'=512,`c'=1,`w'=2, `xm'=mや,`k'=1024のようなあらゆるブロックサイズ接 尾子です(see section ブロックサイズ).
スキップとI/Oに対し,異なるブロックサイズを使用するために,異なる @command{dd}の呼び出しを使用してください.例えば,以下のシェルコマンドは ディスクとテープの間で,512 kBブロックでデータをコピーしますが,ディスク の最初の4 kBのラベルは,保存されたり復元されたりしません.
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
dd
はfileをゼロバイト(または,`seek='で
指定されたサイズ)に切り詰めます.
dd
は他と異なり,偶
数バイトを読み込んだとき働きます---最後のバイトは,単にコピーされます.
(入れ替えるバイトがないからです).
install
: ファイルのコピーと属性の設定
install
は,許可モードと,可能な場合は所有者とグループ設定しながら
ファイルをコピーします.構文は以下のとおりです.
install [option]... source dest install [option]... source... directory install -d [option]... directory...
これらの最初のものは,sourceファイルはdestターゲットファイル にコピーされます.2番目では,それぞれのsourceファイルはコピー先の directoryにコピーされます.最後では,それぞれのdirectory(と 足りない親ディレクトリ)がコピーされます.
install
はcp
に似ていますが,コピー先のファイルの属性を制御
することが可能です.それは,プログラムをコピー先のディレクトリにコピーす
るとき,Makefileで一般的に使用されます.それ自身にファイルをコピーするこ
とは拒否されます.
プログラムは,以下のオプションも受け入れます.section 共通のオプション,も参 照してください.
install
の互換性のためです.
install
と異なり,そこではディレクトリはデフォルトの属性が与えられ
ます.)
chmod
の象徴的なモードが可能で,0が出発点となります
(see section ファイルのパーミッション).デフォルトモードは`u=rwx,go=rx'です---
所有者の読み書き実行,グループとそれ以外は読み込みと実行です.
install
が適切な特権(ルートとして実行)を持つ場合,インストールされ
るファイルやディレクトリの所有権はownerに設定されます.デフォルト
はroot
です.ownerは,ユーザ名または,数値のユーザIDが可能で
す.
mv
: ファイルの移動(名前の変更)
mv
は,ファイル(やディレクトリ)を移動したり名前を変更したりします.
構文は以下のとおりです.
mv [option]... source dest mv [option]... source... directory
最後の引数が,既存のディレクトリを示す場合,mv
は,それ以外の与え
られたそれぞれのファイルを,同じファイル名で,そのディレクトリに移動しま
す.それ以外では,2つのファイルが与えられた場合,1番目の名前を2番目に変
更します.最後の引数がディレクトリではなく,2つ以上のファイルが与えられ
た場合,エラーとなります.
mv
は,一つのファイルシステムから別のものへ,あらゆる形式のファイ
ル移動が可能です.fileutilsのバージョン4.0
以前では,mv
は通
常のファイルのみファイルシステム間で移動が可能でした.例えば,現在の
mv
は,一つのパーティションから別のものへ,特殊なデバイスファイル
を含むディレクトリ階層全体を移動可能です.それは最初に,要求されたディレ
クトリとファイルをコピーするcp -a
で使用されているものと同じコード
を使用し,それから(コピーが成功したと仮定して)それは元を削除します.コピー
が失敗した場合,コピー先のパーティションにコピーされた部分が削除されます.
一つのパーティションから3つのディレクトリを別のものにコピーし,最初のディ
レクトリが成功し,2番目が失敗した場合,最初のものはコピー先のパーティショ
ンにのこり,2番目と3番目は元のパーティションに残ります.
コピー先のファイルが存在し通常の書き込みが不可で,標準入力が端末で,
`-f'や`--force'オプションが与えられていない場合,mv
はファ
イルを置換するかどうか,ユーザにプロンプトを表示します.(自分が所有する
ファイル,または,そのディレクトリに書き込み許可がある必要があります.)
応答が`y'または`Y'で始まらない場合,ファイルはスキップされます.
警告:ディレクトリを示すシンボリックリンクを移動しようとし,スラッ
シュを後置したシンボリックリンクを指定した場合,mv
はシンボリック
リンクを移動しませんが,その代わりにシンボリックリンクが参照するディレク
トリを移動します.See section 末尾のスラッシュ.
プログラムは以下のオプションも受け入れます.section 共通のオプション,も参照 してください.
rm
: ファイルやディレクトリの削除
rm
は与えられたfileを削除します.デフォルトでそれはディレク
トリを削除しません.構文は以下のとおりです.
rm [option]... [file]...
ファイルに書き込みができない,標準入力が端末,そして`-f'または
`--force'オプションが与えられていない場合,または,`-i'または
`--interactive'オプションが与えられている場合,rm
はユー
ザにファイルを削除するかどうかを促すプロンプトを表示します.`y' や
`Y'で始まらない返答の場合,ファイルは省略されます.
プログラムは以下のオプションも受け入れます.section 共通のオプション,も参照 してください.
rmdir
の代わりにunlink
を用いてディレクトリの削除を試み,ア
ンリンクを試みる前にディレクトリが空である必要はありません.適切な特権を
持ち,オペレーティングシステムがディレクトリに対するunlink
をサポー
トしている場合のみ,これは動作します.ディレクトリのアンリンクはディレク
トリ内のあらゆるファイルを参照できなくするため,この後でファイルシステム
にfsck
した方が賢明です.
よくある問題の一つは,`-'で始まる名前を持つファイルの削除の方法です.
GNU rm
では,引数を解析するgetopt
関数を使用するすべて
のプログラムに似て,以下のすべての引数はオプションでないことを示す
`--'オプションを使用します.現在のディレクトリの`-f'というファ
イル名を削除するため,以下のどちらかを入力できます.
rm -- -f
または,
rm ./-f
この目的に対する,Unix rm
プログラムの単一の`-'の使用は,
getoptの標準構文の開発以前のものです.
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 [option]... file[...]
プログラムは以下のオプションも受け入れます.section 共通のオプション,も参照 してください.
shred
は25回の上書きを使用します.これで,少なくとも
1回の使用で使用される有用な上書きパターンの全てに対して十分になります.
時間の節約のため減らしたり,時間の無駄遣いをする場合に増やすことが可能で
す.
shred
します.デフォルトはファ
イル全体をshred
します.BYTESは乗数を指定するために,
`k',`M',または`G'のようなサイズ指定を続けることができま
す.See section ブロックサイズ.
shred
した後,(可能な場合は)それを切り詰め,そして削除し
ます.ファイルが複数のリンクを持つ場合,指名されたリンクのみ削除されます.
shred
は,ファイルの最後のブロックまで完全に消去するため,ファ
イルのサイズを,ファイルシステムのブロックサイズの次の乗数まで増加します.
このオプションは,その動作を抑制します.このため,デフォルトでは,512バ
イトのブロックを持つファイルシステム上の,10バイトのファイルを
shred
する場合,結果としてファイルは512バイトになります.このオプ
ションを用いると,shred
はファイルのサイズを増加させません.
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
Go to the first, previous, next, last section, table of contents.