ハラミTech

技術系ブログです

安全な削除コマンド「srm」を作った

linuxでファイルやディレクトリを削除するときには、rmコマンドを使うと思います。
ディレクトリを再帰的に削除する場合は、こんなコマンドを実行します。

$ rm -rf hoge/

このコマンドが非常に危険なのは皆さんご存知でしょう。
パス指定をしくじると、問答無用で削除され、大体の場合元に戻せません。

そのためユーザは細心の注意を払いrmコマンドを使用するわけですが
毎回注意するのも難しいです。

なので削除しても復元できる「srm」コマンドを作りました!

srmコマンドとは

一言でいうならば、「安全なrmコマンド」です。Go言語製です。
削除対象のファイル/ディレクトリのバックアップを取ったうえで削除を行います。
srmコマンドを使う限り、必ずバックアップされます。

こちらのコマンドはGitHubで公開してます。
https://github.com/morix1500/srm

使い方

以下は例です。大体使い方はこれを見てもらえればわかるかと!

$ mkdir -p /tmp/test1/test2/test3
$ echo "foo" >> /tmp/test1/test2/foo.txt
$ echo "bar" >> /tmp/test1/test2/test3/bar.txt
$ tree /tmp/test1
 /tmp/test1/
└── test2
    ├── foo.txt
    └── test3
        └── bar.txt

2 directories, 2 files

# Delete "test2" directory
$ srm /tmp/test1/test2
$ tree /tmp/test1
/tmp/test1/

0 directories, 0 files

# Backups are stored in the following directories
$ ls ~/.srm
L3RtcC90ZXN0MS90ZXN0Mg==.tar.gz

# Restore "test2" directory
$ srm -r /tmp/test1/test2
$ tree /tmp/test1
/tmp/test1
└── test2
    ├── foo.txt
    └── test3
        └── bar.txt

2 directories, 2 files

srmコマンドは、使用ユーザのホームディレクトリ直下に
「.srmディレクトリを作成します。

上記ディレクトリに、指定されたファイル/ディレクトリのパスを
Base64エンコードした文字列をファイル名としたgzipファイルを配置します。

もしバックアップファイルが不要になった場合は、「.srmディレクトリを削除すればよいです。

オプション

提供しているオプションは以下の通りです。

  • --list(-l)
  • --restore(-r)

list

listオプションを指定すると、今までsrmコマンドで削除したファイル/ディレクトリの一覧が表示されます。
削除したものを復元したい際に利用します。

$ cd /tmp
$ touch foo.txt
$ touch bar.txt

$ srm foo.txt bar.txt
$ srm -l
/tmp/bar.txt
/tmp/foo.txt

restore

restoreオプションを指定すると、今までsrmコマンドで削除したファイル/ディレクトリを復元します。

$ cd /tmp
$ echo "foo" > foo.txt
$ srm foo.txt
$ ls -l foo.txt
ls: cannot access 'foo.txt': No such file or directory

$ srm -r foo.txt
$ cat foo.txt
foo

インストール

Go言語で作成しているので、バイナリを配置しておしまいです。

$ wget https://github.com/morix1500/srm/releases/download/v1.0.0/srm_linux_amd64 -O /usr/local/bin/srm
$ chmod a+x /usr/local/bin/srm

最後に

rmコマンドを実行すると、なんだかよくわからない心理的ストレスが発生するわけですが、
srmコマンドによってだいぶストレスが軽減されるのではないかと思うので、
自分自身でも積極的に使っていこうと思います。

では!