ここまでで、ファイルシステムの構造について若干の知識を得、ファイルおよびディレクトリの作成についても学んでいます。
しかし、ファイルおよびディレクトリの作成方法がわかっても、行った変更を処理できることにはなりません。ファイルおよびディレクトリの名前変更や移動を行いたいときはどうすればよいでしょうか。
コピーコマンドから見ていきましょう。
多くの Linux 機能と同様、ファイルおよびディレクトリの操作にもさまざまなオプションがあります。コピーおよびディレクトリのコピー、移動、または削除ではワイルドカードも使用できます。
基本的には、コピーコマンドは以下のように入力するだけです。
cp<コピー元> <コピー先>
したがって、ファイル sneakers.txt をログインディレクトリ内の tigger ディレクトリにコピーするには、以下のように入力します。
cp sneakers.txt tigger
ファイルのコピーには相対パス名を使用していることにも注意してください。cp では相対パス名と絶対パス名の両方が使用できます。ログインディレクトリはディレクトリ tigger の親、すなわち tigger はログインディレクトリの 1 つ 下のディレクトリ、ということです。
cp で使用できるオプションの一覧については、cp man ページ (man cp) をお読みください。cp で使用できるオプションのうち、いくつかのものを挙げれば以下のようなものがあります。
-i -- interactiveコピーするファイルがコピー先のファイルを上書きする場合に確認メッセージが出されます。これはミスを防げるので便利なオプションです。
-r -- recursiveファイルおよびディレクトリをすべてコピーするだけでなく、ディレクトリツリー、サブディレクトリの全体を他の場所にコピーします。
-v -- verboseファイルコピーの進行状況を表示します。
cp だけを使用するのでは、コマンドが実行されてもあまりわかりません。-i などのオプションを使用すると、たとえば同名のファイルがある場所にファイルをコピーする場合に、そこにあるファイルを上書きしても本当によいか尋ねられるなど、もっと便利な処理にできます。
今、ファイル sneakers.txt が tigger ディレクトリにありますので、cp -i を使用してもう一度同じ場所にファイルをコピーしてみましょう。
[newuser@localhost newuser]$cp -i sneakers.txt tigger cp: overwrite 'tigger/sneakers.txt'?
コピー先にすでにあるファイルを上書きする場合は、[Y] を押してからさらに [Enter] を押します。ファイルを上書きしたくない場合は?その場合は、[N] と [Enter] を押します。
ファイルを移動するには、mv コマンド (man mv) を使用します。これは cp コマンドと似ていますが、cp ではファイルの複製が作成されるのに対し、mv ではファイルは物理的にある場所から別の場所に移動します。
mv でよく使用されるオプションには以下のようなものがあります。
-i -- interactive選択したファイルが移動先ディレクトリにある既存ファイルを上書きするかどうか尋ねるプロンプトが出されます。これは、cp の -i オプションと同様、既存のファイルを本当に置換してよいか確認する機会が与えられるため、便利なオプションです。
-f -- force対話モードを無視し、プロンプトを出さずに移動を強行します。操作をよく理解していない限り、このオプションはあまり好ましくありません。システムによく慣れるまでは、このオプションの使用は慎重に行ってください。
-v -- verbose移動されるファイルの一覧を表示します。
ファイルをホームディレクトリから別のディレクトリに移動するには、たとえば次のように入力します。
mv sneakers.txt tigger
または、絶対パス名を使用した場合は、mv sneakers.txt /home/newuser /home/newuser/tigger と入力します。
実は、名前変更については、すでに半分網羅したことになります。ファイルのコピーまたは移動でも名前変更はできるからです。
ログインディレクトリから tigger サブディレクトリに sneakers.txt をコピーする場合は、以下のように入力します。
cp sneakers.txt tigger
そのファイルをコピーして sneakers.txt から piglet.txt に名前変更するには、以下のように入力します。
cp sneakers.txt tigger/piglet.txt
ファイルを移動して名前変更する場合は、上記の例の cp を mv に代えるだけです。
cd で tigger にディレクトリを変えて ls を使用するとファイル名 piglet.txt が表示されます。
ファイルの名前変更だけを行って場所はそのままにしたい場合は、mv を現行ディレクトリに使用します。
mv sneakers.txt piglet.txt
「Chapter 15」では、touch コマンドとリダイレクトを使用してファイルを作成する操作を説明しました。また、mkdir を使用してディレクトリ tigger を作成しました。
しかし、ファイルとディレクトリを削除する方法についてはまだ説明していませんでした。
rm コマンド (man rm) でファイルおよびディレクトリを削除するのが、端的な処理方法です。
名前変更で作成した新規ファイル piglet.txt を使用して、これを rm コマンドで tigger ディレクトリから削除します。
rm piglet.txt
この時点で、このファイルを本当は削除したくなかったらどうすればよいのでしょうか。手遅れです!ここでも、-i (対話) オプションが便利です。ファイルを本当に捨ててよいかどうか再考できるからです。
[newuser@localhost newuser]$rm -i piglet.txt rm: remove 'piglet.txt'?
また、ワイルドカード * を使用してファイルを削除することもできますが、削除するつもりはなかったファイルまで簡単に削除されてしまいかねませんから十分注意してください。
ワイルドカードを使用してファイルを使用する場合、たとえば以下のように入力します。
rm pig*
また、以下のようにすれば複数のファイルを 1 つのコマンドで削除することもできます。
rm piglet.txt sneakers.txt
ファイルおよびディレクトリの削除オプションには、以下のようなものがあります。
-i -- interactive削除を確認するプロンプトが出されます。役に立つオプションです。
-f -- force対話モードを無視し、プロンプトを出さずにファイル削除を強行します。これは、操作をよく理解していない限りあまり奨められません。
-v -- verbose削除されるときにそのファイルの一覧が表示されます。
-r -- recursiveディレクトリを削除する場合、指定されたディレクトリ内のすべてのファイルおよびサブディレクトリを削除します。空のディレクトリも削除されます。
rm でディレクトリを削除する場合、-r オプションを指定しなければなりません。
たとえば、ディレクトリ tigger を再帰的に削除するには、以下のように入力します。
rm -r tigger
複数のオプションを連結するには、たとえば強制的、再帰的削除を行うには、以下のように入力します。
rm -rf tigger
| 注意! |
rm は強力なコマンドで、システム全体を削除することもできます!ユーザが root になっていて、rm -rf / という単純なコマンドを入力してしまったらもうおしまいです。ヘビが自分のしっぽを食べるように、このコマンドが再帰的にシステムのすべてを削除してしまいます。 |
ディレクトリを削除する方法として rm より安全な方法は、rmdir コマンドです。このコマンドでは、再帰的削除はできませんから、中にファイルのあるディレクトリは削除されません。
このコマンドについての詳細は、man rmdir と入力してrmdir man ページをお読みください。