Linuxで扱うファイルの操作コマンドについて解説します。
Windowsでは主にマウスによる操作がほとんどですが、LinuxはCUI(Character-based User Interface)によるコマンド操作が基本になります。
初心者向けのコマンドを載せてありますので、Linuxの入門として、また初歩のおさらいとして参考にしてみてください。
1.ファイルのコピー cpコマンド
ファイルのコピーは、cpコマンドを使用します。
コピー先にファイル名を指定する場合は、コピー元と異なる名前になります。
コピー先にディレクトリ名を指定する場合は、コピー元と同じ名前でコピーされます。
コマンド | 概要 |
---|---|
cp [オプション] コピー元ファイル名 コピー先ファイル名 |
コピー元ファイル名をコピー先ファイル名でコピーする |
cp [オプション] コピー元ファイル名 コピー先ディレクトリ名 |
コピー元ファイル名をコピー先ディレクトリにコピーする |
cpのオプション | 概要 |
---|---|
-p | コピー元ファイルの属性(パーミッションやタイムスタンプ)を含めてコピー |
-i | コピー先に同じ名前のファイルがある場合に、上書き確認をする |
-R | ディレクトリを配下も含めてまるごとコピー |
-d | シンボリックリンクを、シンボリックリンクとしてコピーする |
【例】testfile1.txtをtestfile2.txtの名前でコピーする
まず最初にtouchコマンドにて、新しい空のファイルtestfile1.txtを作成しています。
cpコマンドでファイルtestfile1.txtをtestfile2.txtの名前でコピーします。
最後にlsコマンドによって、ファイルtestfile2.txtが作成されていることがわかります。
次に、コピー先にディレクトリを指定する場合の例を挙げています。
【例】ホームディレクトリ/tmp/testfile1.txtをホームディレクトリ/testdirにコピー
初めにlsコマンドでtestdir配下には何もない状態であることを確認しています。 cpコマンドを実行してファイルtestfile1.txtをディレクトリtestdir配下にコピーします。 最後にlsコマンドでtestdir配下を確認すると、同様の名前testfile1.txtでファイルが作成されていることがわかります。
1.1 属性ごとコピーする -pオプション
-pオプションは、ファイルの属性(パーミッション、タイムスタンプ)をコピー先ファイルにも反映できるオプションです。
注意点としては、cpコマンドは、ファイルをコピーするとそのファイルの所有者および所有グループが自分自身になります。
従って、他のユーザーや他のグループが所有しているファイルを、cpコマンドでコピーする場合、所有者および所有グループが自分自身に変わりますので注意が必要です。
【例】他のユーザーが所有者のファイルをcpコマンドの-pオプションでコピーする
上記の例では、他のユーザー(testuser1)が所有するファイルを-pオプションでコピーしていますが、所有者が自分自身(proengineer)に変更されています。
所有グループについても同様で、仮に他のグループ(testuser1)が所有するファイルをコピーした場合も、所有グループは自分自身(proengineer)に変更されます。
-pオプションを付けているので、パーミッションやタイムスタンプの属性はそのままでコピーされています。
ファイルのバックアップなどで、所有者および所有グループも含めたすべての属性をそのままでコピーをしたい場合は、-pオプションを使用する際、rootユーザーの権限が必要になります。
【例】他のユーザーが所有者のファイルをrootユーザでcp -pオプションでコピーする
上記の例では、他のユーザー(testuser1)が所有するファイルtestfile1.txtをそのままコピーするため、まずsuコマンドにてrootユーザーに切り替えを行っています。
-pオプションを付けてrootユーザーでcpコマンドを実行すると、パーミッションやタイムスタンプだけでなく、所有者についてもそのまま(testuser1)でコピーされたことが確認できます。
所有グループについても同様で、仮に他のグループ(testuser1)が所有するファイルをコピーした場合も、rootユーザーでcpコマンドを実施すれば、所有グループについてもそのまま(testuser1)でコピーされます。
1.2 上書き確認をする -iオプション
cpコマンドでは、特に指定がない限り、コピー先に同じ名前のファイルがあっても、そのまま上書きされてしまいます。
そのため、事前にコピー先に同じ名前のファイルがないかを確認する必要があります。
-iオプションをつけると、コピー先に同じ名前のファイルがある場合に、上書きをするかどうか、確認メッセージを表示させることができます。
-iオプションにより、重要なファイルを誤って上書きしてしまうことを避けることができます。
【例】cpコマンドの-iオプション 上書きの確認メッセージを表示する
初めに、cpコマンドをオプションなしで実行した場合、testfile2.txtのタイムスタンプを確認すると、14:53から15:23に変更されており、ファイルがコピーされたことがわかります。
特に上書き確認のメッセージも出力されていません。
次に、-iオプションをつけた場合、「‘testfile2.txt’を上書きしますか?」と確認メッセージが表示されます。
実行する場合は「y」(yes)を入力してEnterします。
testfile2.txtのタイムスタンプは15:23から15:25に更新されており、上書きの確認メッセージが表示されてから、コピーされていることがわかります。
1.3 ディレクトリごとコピーする -Rオプション
cpコマンドは、ディレクトリをコピーすることもできます。
ディレクトリは、複数のファイルやディレクトリが格納されていることがほとんどです。
ディレクトリだけではなく、その配下のファイルを全て含めたディレクトリごとコピーする場合は、-Rオプションを使用します。
【例】ディレクトリのdir1配下をまるごとdir2にコピーする
まず、lsコマンドにて、ディレクトリdir1とdir2、およびファイルtestifile1.txtがあることを確認しています。
さらにlsコマンドでdir1とdir2配下を見てみると、dir1配下にはファイルfile1.txtとfile2.txtがあり、dir2配下には何もないことがわかります。
この状態から、cpコマンドを使ってみます。
まず、cp dir1 dir2でディレクトリのコピーを試みますが、「~を省略しています」というエラーが表示され、ディレクトリがコピーできません。そこで、次に-Rオプションを付けてコピーをしてみます。
lsコマンドでdir2配下を確認すると、dir1が作成(コピー)されています。
さらにdir2/dir1配下を見てみると、ファイルfile1.txtとfile2.txtがコピーされています。-Rオプションをつけることによって、dir1配下をまるごとコピーできたことがわかります。
1.4 シンボリックリンクのままコピーする -dオプション
Windowsでのショートカットにあたる機能を、Linuxではシンボリックリンクといいます。
シンボリックリンクは、cpコマンドでコピーをすると、リンク先の実ファイルをコピーします。
シンボリックリンクを、実ファイルではなくシンボリックリンクのままコピーするには、-dオプションを使います。
【例】シンボリックリンクを-dオプションでコピーする
まずlsコマンドで、ファイルtestfile1.txtとそのシンボリックリンクtestfile1.symが存在していることを確認します。
catコマンドで中身を見てみると、どちらも同じ内容となっています。シンボリックリンクは水色で表示されています。
この状態から、-dオプションを使ってシンボリックリンクをコピーします。
-dオプションを使わずにcpコマンドを実行すると、実ファイルとして(黒色)でコピーされます。
-dオプションを使った場合は、水色となっており、シンボリックリンクのままコピーされていることがわかります。
2.ファイルの移動とファイル名の変更 mvコマンド
mvコマンドは、ファイルの移動を行います。
Windowsでいうと、ファイルの「切り取りと貼り付け」の意味になります。ファイルのコピーとは異なり、移動元にファイルは残りません。
同一名称のファイルが移動先に存在している場合は上書きされます。
移動先ファイルを事前にバックアップを取得しておくか、オプション-iを利用することで移動の事前に上書きするかどうかを確認することができます。
コマンド | 概要 |
---|---|
mv [オプション] 移動元ファイル名 移動先ファイル名 |
移動元ファイルを移動先ファイル名で移動する ※ファイル名の変更にも使用する |
mv [オプション] 移動元ファイル名 移動先ディレクトリ |
移動元ファイルを移動先ディレクトリに移動する |
mvのオプション | 概要 |
---|---|
-t ディレクトリ名 | オプションで指定したディレクトリ配下に移動元ファイルを全て移動する |
-i | 同一名称のファイルが移動先に存在している場合は上書き確認をする |
【例】testfile1.txtをディレクトリdir1に移動
・mv testfile1.txt dir1
まず、testfile1.txtをディレクトリのdir1の中に移動させています。
何も存在していなかったdir1配下に、mvコマンドによってtestfile1.txtが移動されていることがわかります。
・mv testfile2.txt testfile3.txt dir1
また、最後の引数に移動先ディレクトリを指定することで、移動元ファイルに複数のファイルを指定することも可能です。
testfile2.txtとtestfile3.txtの2つのファイルをdir1に一度に移動させています。
【例】ディレクトリdir1をディレクトリdir2に移動する
・mv dir1 dir2
上記の例では、ディレクトリの移動を行っています。
tesfile1.txtを格納したディレクトリdir1を、ディレクトリdir2の中に移動しています。
mvコマンドを実行すると、dir2の中にdir1配下が丸ごと移動されていることが確認できます。
ファイルのコピーを行うcpコマンドでは、ディレクトリ配下も含めたコピーを行うにはオプション-Rをつける必要がありました。
しかし、ファイルの移動を行うmvコマンドにおいては、オプションは必要ありません。移動元にディレクトリ名を指定すれば、そのディレクトリの配下を含めたすべてのファイルを移動することが可能です。
【例】mvコマンドを実行して、ファイル名を変更する
・mv testfile1.txt testfile2.txt
mvコマンドはファイルの移動の他、ファイル名やディレクトリ名を変更する際にも使います。
同一ディレクトリ内において、ファイルの移動先に新しいファイル名(testfile2.txt)を指定することで、ファイル名を変更することが可能です。
2.1 移動先ディレクトリを指定する -tオプション
mvコマンドでは、ファイルをディレクトリに移動させる際、移動先のディレクトリを引数の最後に指定するのほか、-tオプションを用いて移動先のディレクトリを初めに指定する方法があります。
【例】testfile1.txt~testfile3.txtをディレクトリdir1の中に移動する
・mv -t dir1 testfile1.txt
-tオプションによって、移動先のディレクトリ名dir1を初めに指定しています。
引数(testfile1.txt)が移動元のファイルとなるため、この一行によって、testfile1.txtをdir1に移動しています。移動元のファイルは、複数指定が可能です。
なお、前述のとおり、引数の最後にディレクトリを指定して実行することで、-tオプションを使用しなくてもファイルを移動させることも可能です。
3.ファイルとディレクトリの削除 rmコマンド
ファイルを削除する時は、rmコマンドを使います。
コマンド | 概要 |
---|---|
rm [オプション] ファイル名 rm [オプション] ディレクトリ名 |
指定したファイル、またはディレクトリを削除する |
rmのオプション | 概要 |
---|---|
-f | 削除するかどうかを事前に確認しない |
-i | 削除するかどうかを事前に確認する |
-r | ディレクトリを削除する際に付与する (中身のファイルも全て含めて削除する) |
【例】ファイルtestfile1.txtを削除する
・rm testfile1.txt
testfile1.txt~testfile3.txtのファイルがある状態から、testfile1.txtのファイルを削除しています。
引数として複数のファイルを指定し、一行で複数のファイルを削除することも可能です。
【例】-iオプションで確認メッセージを表示する
・rm -i testfile2.txt
Linuxでは、rmコマンドを実行すると、Windowsでいうゴミ箱のような概念がないため、そのまま削除されてしまいます。
ファイルを削除する時は、事前に削除するかどうかを確認するための、オプション-iを用いると安心です。削除する場合はy(yes)を入力します。
3.1 確認メッセージを表示しないで削除する rm -fオプション
rmコマンドにおいて、書き込み禁止になっているファイルや、実在しないファイルを削除しようとするとエラーが表示され、削除することができません。
お使いのディストリビューションによっては、デフォルトでrmコマンドには-iオプションをつけて、事前に確認メッセージが表示されるよう設定されている場合もあります。
ファイル数が多い場合には、その数だけ確認メッセージに対して削除するかしないかの判断をしなければなりません。
これらのメッセージを表示することなく、削除を実行するには-fオプションを使用します。
【例】-fオプションで確認メッセージを表示させない
・rm -f testfile3.txt testfile4.txt
testfile4.txtのファイルは存在しませんが、-fオプションを付けて実行しているのでエラーメッセージは表示されず、存在するtestfile3.txtだけが削除されています。
3.2 ディレクトリ配下も削除する rm -rオプション
ディレクトリの削除には、-rオプションを使います。また、ディレクトリとその配下にあるファイルも削除されます。オプションが無しの場合はエラーとなり、削除ができません。
【例】ディレクトリの削除
・rm -r dir1
-rオプションが無しの場合はエラーとなり、-rを付けることで削除ができます。
3.3 rmコマンドの-rオプションとrmdirコマンドの違い
ディレクトリの削除には、rmdirコマンドを使います。
rmdirコマンドは、削除するディレクトリ配下が空の状態である必要があります。
ディレクトリの中にファイルがある場合はエラーとなり、削除することができません。
rmdirコマンドで削除する場合は、事前にディレクトリの中身が空であるかを確認する必要があります。
一方、rmコマンドの-rオプションは、ディレクトリの中に他のファイルがある場合でも、それらを含めて全て削除します。
rmコマンドの-rオプションで削除する場合は、事前に重要なファイル等をバックアップしておく必要があります。