Linuxファイル操作の基本:cp / mv / rm を事故らず使うための実践ガイド
この記事でできること
- ファイル・ディレクトリのコピー / 移動 / 削除を安全に行える
- 「消したつもりが消えてない」「消しすぎた」事故を防げる
- Permission denied / パスミスなど、典型的な詰まりを自力で切り分けられる
想定読者:Ubuntuでサーバやローカル環境を触り始めた新人
前提:rm は危険操作を含むため、練習用ディレクトリ内のみで実行すること
先に結論(事故らない型)
1) pwd → 2) ls -la → 3) 対象確認 → 4) cp -i / mv -i → 5) rm -i
目次
まずは安全な練習環境を用意する
事故を防ぐため、この記事の操作はすべてこのディレクトリ内で行います。
$ mkdir -p ~/pgym/file-operations $ cd ~/pgym/file-operations $ pwd $ ls -la
/home/user/pgym/file-operations total 8 drwxr-xr-x 2 user user 4096 Dec 17 11:00 . drwxr-xr-x 3 user user 4096 Dec 17 11:00 ..
1) cp:コピー(上書き事故が一番多い)
基本
$ touch a.txt $ cp a.txt b.txt $ ls -la
-rw-r--r-- 1 user user 0 Dec 17 11:01 a.txt -rw-r--r-- 1 user user 0 Dec 17 11:01 b.txt
実務の型(上書き確認あり)
$ cp -i a.txt b.txt
cp: overwrite 'b.txt'?
ディレクトリコピー(-r)
$ mkdir dir1 $ touch dir1/file1.txt $ cp -r dir1 dir1-backup
よくある詰まり → 復旧
cp: cannot stat 'xxx': No such file or directory
→ 原因:パス/スペルミス
→ 復旧:pwd→ls -la- 上書き事故
→ 予防:常にcp -i
▶ cp -r と cp -a の違い(権限トラブル防止)
事故例
Webサーバのファイルを cp -r でバックアップした結果:
$ cp -r /var/www/html ~/backup/
→ コピー先の権限が 自分の所有 に変わり、Webサーバが読めなくなった。
-r と -a の違い
| オプション | 動作 | 用途 |
|---|---|---|
-r | 再帰コピー(権限は実行ユーザのデフォルト) | 自分の作業用 |
-a | アーカイブ(権限・タイムスタンプ・シンボリックリンク保持) | バックアップ・本番移行 |
使い分けの判断
- 自分だけが使うコピー →
cp -rでOK - バックアップ・本番環境への移行 →
cp -aを使う
$ sudo cp -a /var/www/html ~/backup/
2) mv:移動・リネーム(消えたと勘違いしがち)
リネーム
$ mv a.txt a-renamed.txt
移動
$ mkdir moved $ mv a-renamed.txt moved/ $ ls -la moved
実務の型
$ mv -i b.txt moved/
よくある詰まり → 復旧
- 見失った
→ 復旧:移動先をls - 上書き事故
→ 予防:mv -i
▶ mv で起きる意外な事故(ファイルシステムをまたぐ場合)
mv の内部動作
- 同一ファイルシステム内:名前の付け替えのみ(高速・安全)
- 別ファイルシステム間:実際は「コピー → 元を削除」
事故例
10GBの動画ファイルをUSBメモリに mv した:
$ mv large-video.mp4 /mnt/usb/
→ コピー中(5分)にUSBを抜いてしまった
→ 結果:元ファイルは削除済み、USBには不完全なファイル = データ消失
安全な方法
別ファイルシステムへの移動は、cp と rm を分離する:
$ cp large-video.mp4 /mnt/usb/ $ ls -la /mnt/usb/large-video.mp4 # コピー完了を確認 $ rm large-video.mp4 # 確認後に削除
なぜ安全か:コピー完了を目視確認してから削除するので、途中で失敗しても元ファイルが残る。
3) rm:削除(最重要・事故多発)
基本
$ rm b.txt
実務の型(強く推奨)
$ rm -i a-renamed.txt
rm: remove regular file 'a-renamed.txt'?
ディレクトリ削除(要注意)
$ rm -r dir1
重要な警告
rm -rfは初心者は使わない- 必ず事前に
ls -laで対象確認
よくある詰まり → 復旧
Is a directory→-rが必要Permission denied→ 権限不足(sudo乱用禁止)- ワイルドカード事故(
rm -rf *) → 最悪例として明示
▶ rm -rf の本当の危険性(実際の事故例)
事故例1:スペース1つで全消去
意図したコマンド:
$ rm -rf /tmp/test
実際に打ったコマンド(スペースミス):
$ rm -rf / tmp/test
→ /(ルートディレクトリ)と tmp/test を削除しようとした
→ システム全体が消え始める
事故例2:変数展開の罠
$ rm -rf $DIR/
$DIR が未定義または空の場合:
rm -rf /
→ ルートディレクトリ削除 = システム崩壊
安全な代替手段
| 方法 | 説明 |
|---|---|
rm -I | 3ファイル以上で確認を求める |
trash-cli | ゴミ箱に移動(復旧可能) |
--preserve-root | / の削除を拒否(デフォルト有効) |
スクリプトでの安全策
# 変数が空でないことを確認してから削除
if [ -n "$DIR" ]; then
rm -rf "$DIR"
fi
パス事故を防ぐ基本確認
$ pwd $ ls -la $ ls -la 対象パス
操作前に必ずこの3ステップを実行する習慣をつけましょう。
典型トラブル早見表
| 症状 | まず確認 |
|---|---|
| No such file | pwd / ls |
| Permission denied | ls -la |
| 消えた | 移動先 |
| 上書き怖い | -i |
詳細トラブルシューティング
ケース1:No such file or directory
$ cp important.txt backup/
cp: cannot stat 'important.txt': No such file or directory
診断
$ pwd $ ls -la
ありがちな原因
- カレントディレクトリの勘違い(思ってた場所にいない)
- ファイル名のタイプミス
- ファイルがすでに移動/削除されている
修正
ls でファイル名を確認し、正しいパスで再実行。
ケース2:Permission denied
$ cp /etc/shadow ~/backup/
cp: cannot open '/etc/shadow' for reading: Permission denied
診断
$ ls -la /etc/shadow
-rw-r----- 1 root shadow 1234 Dec 17 10:00 /etc/shadow
原因
システムファイルは 意図的に保護されている。/etc/shadow はパスワードハッシュを含むため、一般ユーザには読み取り不可。
注意
「sudo で解決」は 正解とは限らない。なぜそのファイルにアクセスする必要があるのか、本当に必要かを考える。
ケース3:Directory not empty
$ rmdir mydir
rmdir: failed to remove 'mydir': Directory not empty
診断
$ ls -la mydir
total 8 drwxr-xr-x 2 user user 4096 Dec 17 11:00 . drwxr-xr-x 3 user user 4096 Dec 17 11:00 .. -rw-r--r-- 1 user user 0 Dec 17 11:00 .hidden
原因
隠しファイル(. で始まるファイル) が残っている。ls だけでは見えない。
修正
$ rm mydir/.hidden # 中身を確認してから削除 $ rmdir mydir # または rm -r mydir
なぜこの方法が安全か:ls -la で中身を確認してから削除するので、意図しないファイルを消すリスクを減らせる。
実践課題(5分)
$ cd ~/pgym/file-operations $ mkdir work $ cd work $ touch memo.txt $ echo "hello" > memo.txt $ cp -i memo.txt memo.bak $ mv -i memo.txt memo.old $ ls -la
この課題で cp -i / mv -i の確認動作を体験してください。
次に読む
検証環境
本記事のコマンドは Ubuntu 24.04 LTS / bash 5.2 で動作確認済みです。
実践でファイル操作をマスターしよう
この記事で紹介した「事故らない型」を身につけたら、Penguin Gym Linuxの実践課題で手を動かして定着させましょう。