http://blog.glidenote.com
に移転しました

rmコマンドをptrashに置き換え、オペレーション・ミスを防ぐ


達人が語る,インフラエンジニアの心得:第7回 失敗を糧にしよう|gihyo.jp … 技術評論社
これを読んで触発されたのでrm代用コマンドについて書いてみようと思います。
ptrashとはrmの代用コマンドで、ファイルをホームディレクトリの.trashというゴミ箱ディレクトリを移動してくれる削除コマンドラインソフトです。
rmの場合、ファイルが有無を言わさず削除されてしまい、初歩的なミスが致命的なトラブルを巻き起こす可能性があるため、rmをptrashで代用します。

ptrashを利用するメリットして

  1. rmコマンドのようにファイルをいきなり削除しない
  2. 致命的なオペレーションミスを防げる(rm -rf / とか)
  3. ゴミ箱に移動したファイルを元の場所(パス)に戻せる


導入環境はCentOS 5.4です

yum -y install ptrash

利用方法は非常に簡単。

ファイルをゴミ箱に移動する場合、($HOME/.trashというディレクトリは自動で作成されます)

ptrash file_name

ファイルをゴミ箱から元の場所に戻す場合
($HOME/.trash/.trashdbというファイルが元の場所(パス)を管理しているようです)

ptrash -r file_name

ファイルをゴミ箱から完全に削除する場合

ptrash -d file_name

既ににゴミ箱に同名ディレクトリ、ファイルがある場合、自動で上書きされてしまうため
オプションに-iを付けて、上書き確認した方が良いかと思います。

その他のオプションは下記のような感じです。

OPTIONS
       ptrash supports the following options
 
       -d --delete
              Delete file(s) from trash
 
       -i     Enables  an  interactive moving of files to/from trash. ie. It asks
              for confirmation before over writing OR deleting any existing file.
 
       -r --restore
              Restore a file from trash to it’s original location
 
       -h --help
              Prints this short usage help
 
       -v --verbose
              Verbose operation mode
 
       -V --version
              Displays the version information

最後にptrashをrmコマンドの代用として利用するようroot及び一般ユーザの.bashrcや.zshrcなどのエイリアスに追記しましょう。

PTRASH_PATH=`which ptrash`
echo "alias rm='${PTRASH_PATH} -i'" >> $HOME/.bashrc
echo "alias rm='${PTRASH_PATH} -i'" >> $HOME/.zshrc

運用としてはスケルトンファイルにも記載しておいた方が良いと思います。

PTRASH_PATH=`which ptrash`
echo "alias rm='${PTRASH_PATH} -i'" >> /etc/skel/.bashrc
echo "alias rm='${PTRASH_PATH} -i'" >> /etc/skel/.zshrc

ゴミ箱に移動したファイルは残ったままなので、私は下記のようなスクリプトをcronに登録し30日以上触ってないディレクトリ、ファイルを削除するようにしています。

#!/bin/sh
 
find $HOME/.trash -daystart -ctime +30 | xargs -i /bin/rm -rf {}

追記:2010年5月31日
ゴミファイルの定期削除はtmpwatchの方が良さそうと出来るサーバエンジニアlamanotramaさんからご教授いただいたので、修正。確かにこっちの方がシンプルですね。条件は720時間(30日)経過したファイル、ディレクトリを削除

#!/bin/sh
tmpwatch -m 720 $HOME/.trash

ptrashのオプションに-f というものがないので、万が一rm -rf / をやらかしてもptrashのエラーが返ってくるだけになります。sudoでのrm実行の際、環境変数を引き継がないので絶対にsudoではrmをやらないか、visudoで制限をかけましょう。

hogeユーザがsudoでrm(/bin/rm)を実行できないよう制限するには、visudoで下記のような感じで記載します。

Cmnd_Alias REMOVE = /bin/rm
hoge   ALL=(ALL)   ALL, !REMOVE

/bin/rm を利用する機会を減らすことで誤操作を無くしていきたいもんです。

Comment Pages

There are 3 Comments to "rmコマンドをptrashに置き換え、オペレーション・ミスを防ぐ"

  • lamanotrama より:

    おお!素敵。
    定期削除は、tmpwatch 使った方がいいかなと思いました。

  • glidenote より:

    お、ありがとうござます!
    tmpwatchを利用する方法を追記しました!

  • [...] tmpwatchで古いバックアップを削除 Filed In: linux2011/08/29 バックアップの世代管理をして、スクリプトで古いファイルを削除してたんですが、以前lamanotramaさんに教えて貰ったtmpwatchを用いる方法で一定期間過ぎた古いバックアップを削除するようにしたのでメモ。 [...]

Write a Comment

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

About

@glidenote

このブログは個人的なものです。ここで述べられている内容は私の個人的な意見に基づくものであり、私の雇用者に一切の関係はありません