削除状況を表示する
rmコマンドのvオプションを指定すると削除しているファイルが表示されます。
rmコマンドを使い慣れていなくて、どのファイルが削除されているか分からない、不安だという人はvオプションを指定しておきましょう。そして、あっ!間違えた!と分かったら、すぐにctrlキーを押してからcキーを押してください。ファイルが削除されるのを停止する事ができます。
rm -v ~/Desktop/test/*.txt
PowerShellにはちょっと便利なオプションとしてWhatIfがあります。これを指定するともしコマンドを実行した場合に、どのファイル・ディレクトリが削除対象になるのかを表示してくれます。慣れないうちは最初にWhatIfオプションを指定し確認してからの方がよいでしょう。
Remove-Item -WhatIf ~/Desktop/test/*.txt
削除せずにゴミ箱にファイルを移動
間違ってファイルを削除するくらいならゴミ箱のディレクトリにファイルを移動させた方がよいのでは?と思う人もいるでしょう。確かにその通りです。実際、過去にそのように振る舞うエイリアスを作成する記事か何かがありました。
ゴミ箱のディレクトリのパスは以下のようになっています。mvコマンドでファイルの移動先をゴミ箱のディレクトリにすればOKです。パーミッション絡みでうまく機能しない場合はmvコマンドの前にsudoをつけてから実行してみてください。管理者権限でmvコマンドを実行できます。その際、パスワードの入力が求められますので、管理者のパスワードを入力してください。ただし、この方法なら完璧ということはありません。同名のファイル名がある場合はゴミ箱にあるファイルが上書きされます。なお、以下の◎◎◎はユーザー名です。◎◎◎の代わりに$HOMEと記述することもできます。$HOMEはホームディレクトリを示します。Windows 10の場合は各ドライブにゴミ箱のディレクトリ$Recycle.Binが作成されます。
●macOS
/Users/◎◎◎/.Trash/
●Windows 10
各ドライブのルートディレクトリの$Recycle.Bin
●ラズベリーパイ,UbuntuなどLinux
◎◎◎/.local/share/Trash/files/
その他のOS、ディストリビューションも似たようなものだと思います。使用する環境でゴミ箱のパスがどこなのかは確認しておきましょう。
もし、ゴミ箱ディレクトリがない場合はmyTrashとかわかりやすい名前のディレクトリを作成し、そこにmvコマンドで移動するようにします。
基本的にはユーザーディレクトリ内に以下のように作成しておけばよいでしょう。
mkdir ~/myTrash
●不要なファイルを削除する (macOS+bash,zsh)
OSが勝手に生成するファイルがあります。その中で削除したいファイルNo.1と言えば、macOS,MacOSXが勝手に生成する.DS_Storeでしょう(多分)。
他にもWindowsのThumbs.dbを削除したいという人もいるかもしれません。ここらへんは、rmコマンド単独では処理できないので、多くの場合findコマンドと組み合わせたりします。が、このfindコマンドが曲者なので、ここらへんで挫折はしなくても唸ってしまう人はいるかもしれません。が、やはり消したものは消したいので頑張ってやってみましょう。ここではmacOS,MacOSのbash,zshで実行してみます。
まず、削除対象となるファイルをfindコマンドで検索します。さすがにシステム全体の.DS_Storeを削除するのはよくないので、カレントディレクトリ以下の.DS_Storeファイルを削除します。なお、サブディレクトリも対象になります。
find . -name '.DS_Store' -type f -delete
カレントディレクトリではなくパスを指定する場合は以下のようになります。これはデスクトップ上にあるtestディレクトリ以下にあるすべての.DS_Storeファイルを削除します。
find ~/Desktop/test/ -name '.DS_Store' -type f -delete
ちなみに削除するのではなく.DS_Storeファイルがあるか確認したい場合は以下のようにします。これはlsコマンドを実行して表示しています。
find . -name '.DS_Store' -type f -ls
なお、macOSのバージョンにもよりますが、セキュリティの関係で実行時に確認のダイアログが表示されることがあります。
許可しない場合は以下のようなメッセージが出力されます。
find: ./Documents: Operation not permitted
画面ではなくファイルに保存する場合は以下のようになります。なお、保存されるのはアクセスが許可されたディレクトリのみです。許可されなかったディレクトリにあるファイルは保存されません。
find . -name '.DS_Store' -type f -ls > ~/Desktop/result.txt
ラズベリーパイでルートディレクトリ以下を削除できるか?
rmコマンドで怖いのはroot権限もしくは管理者権限で以下のような指定をしてしまった場合です。(sudoを指定して実行)
rm -fr /
本当はカレントディレクトリ以下のファイル、ディレクトリを削除したかったのに.が抜けていたためにおこる悲劇です。
rm -fr ./
大昔だとこれをroot権限で実行してしまった時には、何の警告も確認メッセージもなくルートディレクトリ以下にあるファイル、フォルダが削除されてしまいます。悲劇が始まるわけです。自分で入力しなくてもサーバーが乗っ取られて、悪意によりこのようなコマンドが入力されることもあります。最近は悪意を持った連中もこんな事はしません。もっとよいサーバーの使い方を知ってるからです。
さて、実際にsudo rm -fr /でルートディレクトリ以下が削除されるかやってみましょう。ラズベリーパイなので実行前にSDカードを複製しておけば気兼ねなく実験することができます。
コマンドを入力してみると、やはりエラーメッセージが表示され簡単には消せません。そこで、オプションの--no-preserve-rootをつけて実行してみます。やはり簡単には消せないようでエラーメッセージが表示されます。
しばらくすると無反応(VNC接続)になります。かなりのファイルが削除されたせいでしょう。ラズベリーパイのSDカードへのアクセスランプも点灯しなくなりましたので電源を入れ直してみます。
起動しなくなりました・・・
ということで今回はおしまいです。また次回。
著者 仲村次郎
いろいろな事に手を出してみたものの結局身につかず、とりあえず目的の事ができればいいんじゃないかみたいな感じで生きております。