Linuxでのファイル削除は、グラフィカルインターフェースでもコマンドラインでも、かなり簡単なプロセスです。グラフィカルインターフェースを使うと、多くの場合、削除されたファイルはゴミ箱ディレクトリに移動され、削除されたファイルにアクセスしたり、必要に応じて復元したりすることができます。しかし、人気のrmコマンドではそうではありません。rmコマンドは実行されると、指定されたファイルを即座に消去し、ゴミ箱ディレクトリへの書き込みは行いません。
グラフィカル環境を使用してファイルを完全に削除したい場合は、Shift+Delキーの組み合わせを押す必要があります。選択したファイルまたはディレクトリが削除される前に、確認を求めるアラートが表示されます。これは、コマンドラインでrmコマンドを実行すると、確認プロンプトが表示されずに指定されたファイルが削除されるのとは全く対照的です。
このチュートリアルでは、これらの機能をターミナルに追加するために使用できる2 つのコマンドライン ユーティリティ、trash-cliとrm-protectionについて説明します。
お使いのLinuxデスクトップ環境にデスクトップ上にアイコンが表示されていない場合でも、Linuxディストリビューションには既にゴミ箱ディレクトリが用意されています。ファイルをゴミ箱ディレクトリに保存する利点は、削除したファイルをすべて表示できるだけでなく、ファイルの復元やゴミ箱の空化なども実行できることです。
Linuxデスクトップのゴミ箱ディレクトリにアクセスするには、 ~/.local/share/trashにアクセスします。このディレクトリは、files、expunged(場合によっては)、infoの3つのディレクトリで構成されています。infoディレクトリには、各ファイルのパーミッション、パス、削除日が記録されています。これは、削除されたファイルやディレクトリを復元する場合に重要です。削除されたファイルとフォルダはすべてfilesディレクトリにあります。expungedディレクトリは空になっていることが多いので、わざわざそこに入る必要はありません。
Trash-Cliでファイルを安全に削除する
trash-cliユーティリティは、コマンドラインからファイルをゴミ箱に移動する機能を追加します。このユーティリティは、多くの一般的なデスクトップディストリビューションのソフトウェアリポジトリに含まれています。インストールする場合は、次のコマンドを入力します。
Tom's Hardware の最高のニュースと詳細なレビューをあなたの受信箱に直接お届けします。
sudo apt-get install trash-cli -y
ディストリビューションで利用できない場合は、次の手順に従って Git からインストールできます。
$ git clone https://github.com/andreafrancia/trash-cli.git
$ cd trash-cli
$ sudo python setup.py install
最初のコマンドは、作業ディレクトリにtrash-cliというディレクトリを作成し、trash-cliリポジトリの内容をコピーします。これで、setup.pyスクリプトを実行してユーティリティをインストールできます。最後のコマンドで --user <username> コマンドオプションを使用すると、trash-cliユーティリティがシステム全体にインストールされず、指定したユーザーのみが使用できるようになります。
$ sudo python setup.py install --user linuxlala
インストールされると、trash-cli ユーティリティは、ファイルやディレクトリの削除、ゴミ箱の内容の表示、ファイルの復元などに使用できる 5 つの独自のコマンドを提供します。
- trash-put – 指定されたファイルまたはディレクトリを削除します。
- trash-list – ゴミ箱の内容を表示します。
- trash-rm – ゴミ箱から個々のファイルまたはディレクトリを削除します。
- trash-empty – ゴミ箱からすべてのファイルとディレクトリを削除します。
- restore-trash – 指定されたファイルまたはディレクトリを復元します。
ファイルを削除するには、trash-putコマンドを使用する必要があります。スペースで区切られたファイルのリストを指定したり、パターンマッチングを使用して削除対象のファイルを指定したりすることもできます。rmコマンドは -R コマンドオプションを使用しない限り、空でないディレクトリを削除しませんが、trash-putではそのような制限はありません。
trash-cliユーティリティはシステム上に既に存在する/trashディレクトリのみを使用するため、 trash-listコマンドをすぐに実行して/trashディレクトリの内容を表示できます。つまり、グラフィカル環境、またはコマンドラインからtrash-putコマンドを使用して削除されたファイルにも、trash-listコマンドでアクセスできます。
追加の引数を指定せずにrestore-trashコマンドを実行すると、ユーティリティは/trashディレクトリ内のすべてのファイルを表示し、復元するファイルを選択するように求めます。ファイルにはそれぞれ固有の番号が割り当てられているため、復元したいファイルに対応する番号を入力する必要があります。この方法の欠点は、複数のファイルを同時に復元できないことです。
restore-trashコマンドは、現在の作業ディレクトリも記録します。/home ディレクトリから実行すると、 / trashディレクトリ内のすべてのファイルが表示されます。ただし、別のディレクトリから実行すると、/trash ディレクトリ内のファイルのうち、元々そのディレクトリに保存されていたファイルのみが表示されます。
$ cd ~/Music/
$ restore-trash
No files trashed from current dir (‘/home/linuxlala/
Music’)
$ cd ~/Documents/for-gm
$ restore-trash
0 2020-02-13 14:02:31 /home/linuxlala/Documents/forgm/memo of appearance.odt
1 2020-02-13 14:02:34 /home/linuxlala/Documents/forgm/temp
What file to restore [0..1]:
したがって、2 回目にrestore-trashを実行すると、ユーティリティによって現在のディレクトリから削除されたファイルのリストが表示され、復元するファイルを指定するように求められます。
Trash-Cliでゴミを整理する
/trashからファイルまたはディレクトリを削除するには、trash-rm <パターン> コマンドまたはtrash-rm <ファイル名>コマンドを使用します。後者のコマンドはファイル名の完全修飾名を要求し、タブ補完は使用できません。
例えば、 /trashにある memoというファイルを削除したい場合は、ファイル名全体を入力する必要があります。ファイル名の一部だけをtrash-rmに入力した場合、対応するファイルは削除されず、エラーも報告されません。代わりに、trash-rm memo*コマンドを実行して、このファイルと、memo で始まる他のすべてのファイルを削除することもできます。
trash-emptyコマンドも同様に、ゴミ箱内のすべてのファイルとディレクトリを削除できます。<days>コマンドオプションを使用すると、指定した日数以上ゴミ箱内に保存されているファイルのみを削除できます。例えば、1か月以上前に削除されたすべてのファイルを削除したい場合は、trash-empty 30コマンドを実行します。同様に、 trash-empty 1コマンドを実行すると、 /trash内に1日以上保存されているファイルも削除されます。
重要なファイルを保護するにはRm保護を使用する
rm-protectionユーティリティを使用すると、重要なファイルを削除する前にユーザーにセキュリティの質問に答えてもらうことができます。rm-protectionをインストールするには、次のコマンドを実行します。
sudo pip3 install rm-protection
pip が既知のコマンドではないというエラー メッセージが表示される場合は、まず次のように入力して pip をインストールする必要があります。
sudo apt-get install python3-pip
rm-protection ユーティリティには、protectとrm-pという2つのコマンドがあります。前者は、誤って削除されないように保護したいファイルを指定するために使用し、後者は保護されたファイルを削除するために使用します。
保護されたファイルは、rmコマンドまたはtrash-putコマンドを使用して削除できることを覚えておいてください。
したがって、ファイルを保護するために protect を使用する場合は、 rmと入力したユーザーが実際にrm-p を取得できるように、alias rm=”rm-p”などのrm-p のエイリアスを作成することを検討する必要があります。
ファイルを保護すると、質問と回答が.filename.rm-protectionという名前のプレーンテキストファイルに保存されます。回答は大文字と小文字が区別されるため、「Terminator」の代わりに「terminator」と入力するとエラーが発生します。
削除したファイルを復元できる可能性に安心感を覚えるなら、rm-pコマンドは使わない方が良いかもしれません。rmと同様に、/trashディレクトリを経由しません。
Chattr でファイルの書き込み保護を設定する
Shift+Delキーを急いで押してしまい、大切なデータを失ってしまった場合、今後のトラブルを防ぐための簡単な解決策があります。chattrコマンドを使えば、ファイルの属性を変更できます。デフォルトの構文は、chattr [演算子] [スイッチ] [ファイル名]です。
利用可能なすべての属性とその目的については、chattrのmanページを参照してください。ここでは、ファイルがいかなるコマンド、さらにはrootユーザーによっても削除されないようにするために使用できるimmutable属性のみに焦点を当てます。
sudo chattr +i [ファイル名]コマンドを実行して、不変属性を設定します。ファイルの削除や編集はできなくなります。lsattrファイル名を実行すると、指定したファイルの属性が表示されます。sudo chattr -R +i <ディレクトリ名> を実行すると、指定したディレクトリ内のすべてのファイルの属性を再帰的に変更することもできます。
ファイルを編集可能にしたいが、削除だけは防止したい場合は、immutable 属性の代わりに append 属性を使用します。例:sudo chattr +a filename。ファイルから属性を削除するには、+ 演算子を - 演算子に置き換えます。例えば、sudo chattr -i filename コマンドを実行すると、ファイルの編集または削除が再び可能になります。