rmコマンドのエイリアスを作成して安全にするためのベストプラクティス


21

しばらく前にrm -rf *、間違った端末で作業ディレクトリをホームフォルダーにしたため、誤ってホームフォルダーを削除しました!

rmコマンドのエイリアスがあればいいのですが、そうではありませんでした。

今、私はのエイリアスとしてスクリプトを作成する予定ですrm

提案すべきベストプラクティスはありますか?

ありがとう。


7
私は同情を持っていないわけではありませんがrm、安全のためにエイリアスを必要とする危険なコマンドだとは思いません。rfオプションを使用することで、これが危険であることをシェル伝えているので、それについて慎重に考えました。これらのオプションを使用しない場合、ホームフォルダー全体を削除することはできません。
user26512

この質問は、stackoverflow.com / questions / 373156 /…と同じ情報を網羅していますか?
デビッドハリス

1
@grossvogel犯罪なし:)!ただし、このコマンドのエイリアスは一般的な方法です。多くの人が-fオプションを使用して、各削除の確認を避けています。

23
エイリアスをrm使用すると、そのエイリアスに慣れることに注意してください。それからある日、あなたはエイリアスが存在しないシステムにいて、あなたがそれを最も期待していない時に間違ったことをするでしょう。そして、おそらくあなたのシステムではないでしょう。
ステファンLasiewski

2
@puller RHELのような、愚かにエイリアスrmするシステムでのみrm -i
ダニエルベック

回答:


30

カスタマイズしたい場合はrm、それ呼び出すことはありませんrmが、あなたの名前をmyrmdeleteまたは何でも。

rm='rm -i'それを使用している間後、あなたが期待するので、別名は恐怖であるrmファイルを削除する前に、デフォルトでプロンプトを表示します。もちろん、ある日、そのエイリアスが設定されていないアカウントでそれを実行し、何が起こっているかを理解する前に手遅れになります。

いずれにせよ、ファイルの損失または破損に備えるための良い方法は、バックアップを行うことです。

誤ってファイルを削除したり上書きしたりしないようにする高速な代替手段は、ZFSのような無制限のスナップショットをサポートするファイルシステムを使用することです。頻繁なスナップショットが自動的に行われる場合、インシデント前の最後のスナップショット中の状態でファイルを回復できます。  


3
私はそれを被った人の一人からその恐怖の話を個人的に聞いたことがあります。
ダンD.

同意しますが、ほとんどの人はまったく異なるファイルシステムに切り替えることはできません。
ペオン

実際、これが、ファイルシステムが禁止されていない機能であるバックアップを最初に提案する理由です。
jlliagre

12

エイリアスを保存したいが、他のシステムとは異なる方法でシステムで動作するコマンドに慣れるリスクを避けたい場合は、rmこのように無効にすることができます

alias rm='echo "rm is disabled, use remove or trash or /bin/rm instead."'

次に、たとえば、独自の安全なエイリアスを作成できます

alias remove='/bin/rm -irv'

またはtrash代わりに使用します。


2
(少なくとも一部のバージョンでは)エイリアスを他の順序で定義する必要があることに注意してください。あなたが提示する順序でそれを行うと定義removeecho "rm is disabled, use trash or /bin/rm instead." -irvます。そして、常識の問題として、あなたのメッセージrmがあなたの安全なremove命令を参照することを望みませんか?
スコット

そのとおりです。それに応じて答えを更新します。
ダリオセイドル

5

trash代わりに使用してみてください。たまに空にすることを忘れないでください...


3

全員のプロファイルを変更することなく、できることは、ディレクトリに-iというファイルを配置することです。

# touch -- -i
# ll
total 0
-rw-r--r-- 1 root users  0 Jan 26 19:24 files
drwxr-xr-x 2 root users 40 Jan 26 19:24 folder_of_power
-rw-r--r-- 1 root root   0 Jan 26 19:25 -i
-rw-r--r-- 1 root users  0 Jan 26 19:24 important
-rw-r--r-- 1 root users  0 Jan 26 19:24 very
# rm -rf *
rm: remove regular empty file `files'? 

ユーザーが*を使用することにした場合は機能しません。*単なる*ではなく。しかし、それでもきちんとしたトリックです。
ペオン

1
afaik rm -rf。また、現在ディレクトリにいるため、rm -rf ..は成功しません。
ペオン

@Peon:(私はもっと一般的だと思う)または(あなたが言った).* *ではなく、あなたが意味すると信じています。…………………………………………………………………………この手法を真にグローバルに有効にするには、書き込み権限があるすべてのディレクトリで実行する必要があります。 。しかし、私は同意します、それはきちんとしたトリックです。* .** . *
スコット

1

次のスクリプトを使用します。

#!/bin/sh

trash=$HOME/tmp
mv "$@" $trash
nohup find "$trash" -type f -atime +7 -exec /bin/rm '{}' \; 2>&1 &

誤ってファイルを削除した場合は、からファイルを回復してください$HOME/tmp

スクリプトは、削除されたファイルをtmpディレクトリに移動し、アクセス時間が7日後の場合に削除スクリプトが次に実行されるときにそれらを削除します($HOME/tmpディレクトリの半自動化されたクリーンアップ)。


-2

プロフィールで、

alias rm="rm -i"

3
私の意見では、エイリアスのrmは非常に貧弱なアドバイスであり、プーラーの場合にはとにかく助けにはなりません。
jlliagre

rm -I@jlliagreの両方の長所を提供します。
タマラWijsman

@Tom Wijsman、部分的に確かに。重要な標準Unixコマンドの動作を変更することは、ここでも潜在的なリスクです。インタラクティブにする場合は、エイリアスに別の名前を付けます。
-jlliagre

@jlliagre:うーん、スクリプトはこの変更をキャッチするということですか?
タマラWijsman

返信superuser.com/a/382498/19279を読んで、ポイントを獲得してください。
jlliagre

-2

スクリプトd内容で、mv $* /tmp

編集:これは悪い考えです。下記参照。私は現在alias d='mv -t /tmp'.profile代わりに持っています。


2
この提案は、(完全に間違ってファイルを削除する)危険であると)同じ名前またはbですでにゴミ箱のファイルを上書きすることができd "foo bar"、ファイルを削除しますfoobar)。おそらくもっと安全なものがあります#!/bin/bash TRASH="$( mktemp -d -t trashed.XXX )"; echo "Moving to trash $TRASH"; mv -v -- "$@" "$TRASH"(構文はシステムによって異なりますが、これはLinuxでも機能します)。mktempmv
ダニエルベック

2
説明してくれてありがとう。私は問題a)で問題ありませんが、問題b)は大きな問題です。私のdコマンドをに変更しalias d='mv -t /tmp'ました.profile。それが私が探していた簡単な解決策だと思います。
ビーフス

-2

このbashコードは、構成ファイルに関数rmを追加し~/.bash_profileます。これを実行した後、と書くとrm file、そのファイルを/tmp

cat << EOF >> ~/.bash_profile
rm () {
  mv $1 /tmp
}
EOF

1
このスクリプト/コードは何をしますか?あまり技術のないユーザーがあなたの答えを理解できるように説明してください。
-Vylix

2
これは質問に答える可能性がありますが、その理由を説明することができれば、より良い答えになります。
DavidPostill

1
これは質問への答えを提供しますが、それは非常に貧弱なものです。この回答の2つのより良いバージョンが既に投稿されています。
スコット

このbashコードは、構成ファイルに関数rmを追加し~/.bash_profileます。このファイルを実行した後、を記述するとrm file、そのファイルをに移動します/tmp
ビセンテゴンザレス

説明してくれてありがとう。回答を編集して、それを投稿自体に含めてください。
ベンN
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.