Linuxファイル操作の基本:cp / mv / rm を事故らず使うための実践ガイド

ファイル操作基礎 - ファイル管理の基本

この記事でできること

  • ファイル・ディレクトリのコピー / 移動 / 削除を安全に行える
  • 「消したつもりが消えてない」「消しすぎた」事故を防げる
  • Permission denied / パスミスなど、典型的な詰まりを自力で切り分けられる

想定読者:Ubuntuでサーバやローカル環境を触り始めた新人

前提rm は危険操作を含むため、練習用ディレクトリ内のみで実行すること

先に結論(事故らない型)

1) pwd → 2) ls -la → 3) 対象確認 → 4) cp -i / mv -i → 5) rm -i

目次

  1. まずは安全な練習環境を用意する
  2. cp:コピー(上書き事故が一番多い)
  3. mv:移動・リネーム(消えたと勘違いしがち)
  4. rm:削除(最重要・事故多発)
  5. パス事故を防ぐ基本確認
  6. 典型トラブル早見表
  7. 実践課題(5分)
  8. 次に読む

まずは安全な練習環境を用意する

事故を防ぐため、この記事の操作はすべてこのディレクトリ内で行います

$ 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
    → 原因:パス/スペルミス
    → 復旧:pwdls -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には不完全なファイル = データ消失

安全な方法

別ファイルシステムへの移動は、cprm を分離する:

$ 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 -I3ファイル以上で確認を求める
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の実践課題で手を動かして定着させましょう。