Linuxのよく使うコマンド(cp / rm / mv / mkdir)

目次

コピー

ファイルをコピーする(cp)

cp コピー元 コピー先
$ cp test1.txt test2.txt
1.コピー先のファイル(test2.txt)がない場合 test1.txtファイルの内容でtest2.txtを新規作成する
2.コピー先のファイル(test2.txt)がある場合 test1.txtファイルの内容でtest2.txtを上書きする

 

ファイルをコピーする+上書きの確認(cp -i)

$ cp -i test1.txt test2.txt
cp: `test2.txt' を上書きしますか? y

コピー先のファイルが存在する場合、確認を行います。
上書きする場合はyを、上書きしない場合はnを入力します。

 

複数のファイルをコピーする(cpとアスタリスク(*))

$ pwd
/home/test/test1
$ ls -l
drwxrwxr-x 2 test test        6  1月 20 22:08 dir1
-rw-rw-r-- 1 test test        0  1月 20 22:00 test1.txt
-rw-rw-r-- 1 test test        0  1月 20 22:00 test2.txt
$ cp /home/test/test1/test*.txt dir1
ls -l /home/test/test1/dir1
-rw-rw-r-- 1 test test 0  1月 20 22:09 test1.txt
-rw-rw-r-- 1 test test 0  1月 20 22:09 test2.txt
$ cp /home/test/test1/test*.txt /home/test/test1/dir1

7行目と11行目は同じコピーの処理です。

 

ディレクトリごとコピーする(cp -r)

$ cp -r /home/test/test1/dir1 /home/test/test1/dir2
1.コピー先のディレクトリ(dir2)がない場合 dir1の内容を持つdir2が新規作成される
2.コピー先のディレクトリ(dir2)がある場合 dir2配下にdir1が作成される
/home/test/test1/dir2/dir1

 

タイムスタンプや所有者などの属性をなるべく保持してコピー(cp -p)

cp -p file1 file2

タイムスタンプ・パーミッション・所有者(※)・グループを保持します。

※rootで実行した場合は所有者も完全に保持される、一般ユーザーは自分が所有するファイルのみ

完全に近いコピーをしたい場合は、cp -aを使用します。

 

ディレクトリを属性ごとコピー(cp -a)

cp -a dir1 dir2

cp-aは-r(再帰コピー)を含むため、ディレクトリ全体をそのままコピーできます。タイムスタンプ・パーミッション・所有者・シンボリックリンクなどの属性も保持されます。

バックアップ用途でよく使います。

 

コピー先が存在する場合は上書きしない(cp -n)

cp -n file1 file2

削除

ファイルを削除する(rm)

$ rm test3.txt

 

ファイルを削除する+削除の確認(rm -i)

$ rm -i test1.txt
rm: 通常ファイル `test1.txt' を削除しますか? y

削除する前に確認を行います。
削除する場合はyを、削除しない場合はnを入力します。

 

ディレクトリごと削除する(rm -r)

$ rm dir1
rm: `dir1' を削除できません: ディレクトリです
$ rm -r dir1

rmのみの場合、2行目のメッセージが出て削除できません。

rm -ri dir1のように-iを付けると削除前に確認できます。

特にrm -rfは確認なしで削除するため、本番環境では慎重に使う必要があります。

-fは強制削除オプションです。

移動

ファイルを移動する(mv)

mv  移動元ファイル/ディレクトリ 移動先のパス
$ mv test1.txt /home/test/test1/dir2/
1.移動先の同名のファイルがない場合 現ディレクトリのtest1.txtを/home/test/test1/dir2/に移動する。
2.移動先の同名のファイルがある場合 上書きされます。
→mv -i にすると上書きの場合に確認のメッセージが表示されます。

 

複数のファイルとディレクトリを移動する(mv)

$ mv /home/test/test1/dir1/* /home/test/test1/dir2/

/home/test/test1/dir1/配下にあるすべてのファイルとディレクトリを/home/test/test1/dir2/配下に移動します。

【注意】*は通常、.envや.bashrcのようなドットで始まる隠しファイルを対象にしません。

 

→この場合、rsyncを使います。

 

$ rsync -av --remove-source-files dir1/ dir2/

1.dir1/の中身をdir2/にコピー
2.コピーが成功したファイルだけ、dir1/から削除

移動元のdir1のディレクトリ自体は残ります。

転送に成功したファイルは削除されます。
→途中で止まってもデータ消失しにくいです。

  • 隠しファイルも含む
  • 属性保持

 

存在しないディレクトリに移動させようとした時(mv)

$ mv /home/test/test1/dir1/* /home/test/test1/dir3/
mv: 宛先の `/home/test/test1/dir3/' はディレクトリではありません

移動先のディレクトリが存在しないときは移動できません。

 

ファイルを移動する+上書きの確認(mv -i)

$ mv -i test1.txt /home/test/test1
mv: `/home/test/test1/test1.txt' を上書きしますか? y

移動先のファイルが存在する場合、確認を行います。
上書きする場合はyを、上書きしない場合はnを入力します。

 

ファイルを強制的に上書きする(mv -f)

$ mv -f test1.txt /home/test/test1

移動先のファイルが存在する場合、強制的に上書きします。

 

ファイル名を変更する(mv)

mv  変更前ファイル名 変更後ファイル名
$ mv test1.txt test9.txt
1.同名のファイルがない場合 ファイル名を変更します。
2.同名のファイルがある場合 上書きされます。
→mv -i にすると上書きの場合に確認のメッセージが表示されます。

ディレクトリ

ディレクトリを作成する(mkdir)

mkdir ディレクトリ名
$ mkdir test

testというディレクトリを作成します。

 

階層のディレクトリを作成する(mkdir -p)

$ mkdir test1/test2
mkdir: ディレクトリ `test1/test2' を作成できません: そのようなファイルやディレクトリはありません
$ mkdir -p test1/test2

1行目のようにmkdirのみでは階層構造のディレクトリは作成できません。

3行目のようにオプションの-pをつけると作成できます。

home/testで上記コマンドを実行した場合、
/home/test/test1/test2が作成されます。

関連の記事

Linuxのよく使うコマンド(lsで一覧表示)
Linux ディスク容量・ファイルシステム確認コマンド

△上に戻る