Linuxサーバや開発環境で作業していると、不要になったファイルやディレクトリを削除したい場面は必ず出てきます。
しかし、Linuxの削除コマンドはとても強力で、一歩間違うと重要なファイルを二度と戻せなくなるリスクがあります。
この記事では:
- Linuxでファイルやディレクトリを削除する基本コマンド
- 安全性を重視したオプションの使い方
- 誤削除を防ぐための具体的な対策
- 削除したファイルの復元方法と予防策
をわかりやすく解説します。これを読めば、もう「削除してはいけないファイルを消してしまった…」と慌てることもなくなりますよ!
Linuxのファイル削除コマンドの基本

rmコマンドの基本構文
Linuxでファイルを削除する最も基本的なコマンドはrm
(remove)です:
rm [オプション] ファイル名
単一ファイルの削除
基本的な削除
rm test.txt
この場合、test.txt
が即座に削除されます。WindowsやmacOSのゴミ箱のような機能はなく、完全に削除されることに注意が必要です。
複数ファイルの同時削除
rm file1.txt file2.txt file3.txt
または、ワイルドカードを使用:
rm *.txt # 拡張子が.txtのファイルをすべて削除
rm test_* # test_で始まるファイルをすべて削除
ディレクトリの削除
空のディレクトリの削除
rmdir ディレクトリ名
rmdir
は空のディレクトリのみ削除可能です。中身がある場合はエラーになります。
中身があるディレクトリの削除
rm -r ディレクトリ名
-r
(recursive)オプションで、ディレクトリとその中身を再帰的に削除します。
rmコマンドの重要なオプション

安全性重視のオプション
-i
(interactive): 削除確認
rm -i ファイル名
動作例
$ rm -i important.txt
rm: remove regular file 'important.txt'? y
各ファイルの削除前に確認を求めるため、誤削除を防げます。
-I
(大文字のI): まとめて確認
rm -I *.txt
3個以上のファイルを削除する場合、または再帰削除時に一度だけ確認。-i
より効率的です。
-v
(verbose): 削除過程を表示
rm -v *.log
出力例
removed 'error.log'
removed 'access.log'
removed 'debug.log'
何が削除されたかが分かるため、処理の確認に便利です。
効率性重視のオプション
-f
(force): 強制削除
rm -f ファイル名
特徴
- 存在しないファイルでもエラーを出さない
- 確認なしで削除を実行
- 読み取り専用ファイルも強制的に削除
注意点 非常に強力なオプションのため、使用時は十分な注意が必要です。
-r
または-R
(recursive): 再帰削除
rm -r ディレクトリ名
ディレクトリとその中身をすべて削除します。
よく使われるオプションの組み合わせ
-rf
: 最も強力で危険な組み合わせ
rm -rf ディレクトリ名
用途
- 不要なプロジェクトディレクトリの完全削除
- ビルド成果物の一括削除
- 一時ファイルのクリーンアップ
危険性 間違ったパスを指定すると、システム全体を破壊する可能性があります。
-riv
: 安全な再帰削除
rm -riv ディレクトリ名
再帰削除しながら、各ファイルの確認と削除過程の表示を行います。
高度な削除テクニック

条件付きファイル削除
特定の拡張子のファイルのみ削除
find . -name "*.tmp" -type f -delete
特定の日数より古いファイルを削除
find /var/log -name "*.log" -mtime +30 -delete
30日より古いログファイルを削除します。
特定のサイズ以上のファイルを削除
find . -size +100M -type f -delete
100MB以上のファイルを削除します。
パターンマッチングを使った削除
複雑なパターンでの削除
rm -v *.{tmp,bak,log} # 複数の拡張子を同時指定
rm -v test[0-9].txt # test0.txt〜test9.txtを削除
rm -v !(important.txt) # important.txt以外を削除(bashの拡張グロブ)
大量ファイルの削除
引数が多すぎる場合の対処
find . -name "*.tmp" -print0 | xargs -0 rm -v
ファイル数が非常に多い場合、rm
の引数制限を回避できます。
削除事故を防ぐための対策
基本的な予防策
1. 削除前の確認習慣
現在地の確認
pwd # 現在のディレクトリを確認
対象ファイルの確認
ls -la ファイルやディレクトリ名 # 削除対象の詳細確認
ディレクトリの中身確認
ls -la ディレクトリ名/ # 削除前に中身を確認
tree ディレクトリ名 # ツリー構造で表示
2. テスト実行のテクニック
削除をシミュレーション
find . -name "*.tmp" -type f # -deleteを付けずに対象ファイルを確認
lsで事前確認
ls *.log # ワイルドカードの展開結果を事前確認
システム設定による予防
エイリアスの設定
~/.bashrcまたは~/.bash_profileに追記
# 安全なrmコマンドのエイリアス
alias rm='rm -i'
alias rms='rm -v' # 削除過程を表示
alias rmf='rm -f' # 強制削除(注意深く使用)
# より安全な代替コマンド
alias del='mv --target-directory=/tmp' # 削除の代わりに/tmpに移動
エイリアスの反映
source ~/.bashrc
関数による高度な予防
~/.bashrcに安全削除関数を定義
safe_rm() {
echo "削除対象: $@"
echo "本当に削除しますか? (yes/no)"
read answer
if [ "$answer" = "yes" ]; then
rm "$@"
else
echo "削除をキャンセルしました"
fi
}
alias srm='safe_rm'
バックアップとゴミ箱機能
trashコマンドの導入
Ubuntu/Debianでのインストール
sudo apt install trash-cli
使用方法
trash ファイル名 # ゴミ箱に移動
trash-list # ゴミ箱の中身を表示
trash-restore # ファイルを復元
trash-empty # ゴミ箱を空にする
自作ゴミ箱スクリプト
シンプルなゴミ箱機能
#!/bin/bash
# ~/.local/bin/trash.sh
TRASH_DIR="$HOME/.trash"
mkdir -p "$TRASH_DIR"
for file in "$@"; do
if [ -e "$file" ]; then
mv "$file" "$TRASH_DIR/$(basename "$file").$(date +%Y%m%d_%H%M%S)"
echo "Moved $file to trash"
fi
done
削除したファイルの復元方法

即座の対処法
ファイルシステムレベルでの復元
extundeleteの使用(ext3/ext4)
sudo apt install extundelete
sudo extundelete /dev/sda1 --restore-all
photorec/testdiskの使用
sudo apt install testdisk
sudo photorec # 対話式で復元作業
プロセスレベルでの復元
削除直後で、ファイルがまだプロセスで開かれている場合
lsof | grep deleted # 削除されたが開かれているファイルを表示
システムレベルでの予防策
定期バックアップの設定
rsyncによる定期バックアップ
#!/bin/bash
# 毎日の自動バックアップスクリプト
rsync -av --delete /home/user/ /backup/user_backup/
cronでの自動実行
# crontab -e で編集
0 2 * * * /home/user/scripts/backup.sh
危険なコマンドパターンと対策

絶対に避けるべきコマンド
最も危険なパターン
rm -rf / # システム全体を削除(現在は保護機能あり)
rm -rf /* # ルートディレクトリの全内容を削除
rm -rf $VAR/ # 変数が空の場合、ルートから削除される危険
変数を使用する際の安全な書き方
危険な例
rm -rf $HOME/tmp # $HOMEが設定されていない場合、/tmpが削除される
安全な例
if [ -n "$HOME" ] && [ -d "$HOME/tmp" ]; then
rm -rf "$HOME/tmp"
else
echo "Error: Invalid path"
exit 1
fi
よくある誤操作パターン
スペースの誤入力
# 危険: スペースが入ると意図しない削除
rm -rf /var /log # /varと/logを削除(/var/logではない)
# 安全: パスを確認
rm -rf /var/log # 正しいパス指定
ワイルドカードの展開ミス
# 危険: 意図しない展開
rm * .txt # すべてのファイルと.txtファイルを削除
# 安全: クォートで保護
rm "*.txt" # *.txtという名前のファイルのみ削除
トラブルシューティング
削除できない場合の対処法
権限エラー
# エラー例
rm: cannot remove 'file.txt': Permission denied
# 対処法
sudo rm file.txt # 管理者権限で削除
chmod +w file.txt && rm file.txt # 書き込み権限を追加してから削除
ファイルが使用中の場合
# 使用中のプロセスを確認
lsof ファイル名
fuser ファイル名
# プロセスを終了してから削除
sudo kill -9 プロセスID
rm ファイル名
特殊文字を含むファイル名
# ハイフンで始まるファイル名
rm ./-filename
# スペースを含むファイル名
rm "file name.txt"
rm file\ name.txt
# 制御文字を含む場合
ls -b # 制御文字を表示
rm $'file\tname.txt' # タブ文字を含む場合
まとめ
Linuxでのファイル削除は強力な機能ですが、適切な知識と対策なしに使用すると重大な事故につながる可能性があります。重要なポイントを整理すると:
基本原則
- 削除前の確認:
ls
、pwd
で対象と場所を必ず確認 - 段階的実行:いきなり
-rf
を使わず、まず-i
で確認 - バックアップ:重要なデータは事前にバックアップ
安全なコマンド使用法
- 単一ファイル:
rm -i ファイル名
- ディレクトリ:
rm -riv ディレクトリ名
- 大量削除:
find
コマンドとの組み合わせ
予防策の実装
- エイリアス設定:
alias rm='rm -i'
で誤操作防止 - ゴミ箱機能:
trash-cli
やカスタムスクリプトの活用 - 定期バックアップ:
rsync
やその他のバックアップツール
緊急時の対処
- 即座の復元試行:
extundelete
、photorec
等のツール - プロセス確認:
lsof
でまだ開かれているファイルをチェック - システム復旧:バックアップからの復元
実践的なワークフロー
- 現在地確認:
pwd
で作業ディレクトリを確認 - 対象確認:
ls
でファイル/ディレクトリの存在と内容を確認 - テスト実行:小さな範囲でテスト削除
- 本実行:確認が取れてから実際の削除実行
- 結果確認:
ls
で削除結果を確認
コメント