rcmdnk's blog

Maybe (Donovan Creed Book 9) (English Edition)

GitHubで公開されてる どんなコマンドでもdry-runして そのコマンドがファイルを削除したり、生成したり、変更したり する結果を先に調べてくれるコマンドmaybeについて。

Sponsored Links

maybe

コマンドラインからの操作ではrm等は不可逆な操作で 不用意にコマンドを走らせて後悔したことの一回や二回 は必ずあるはずです。

:open_file_folder: :rabbit2: :tophat: See what a program does before deciding whether you really want it to happen.Read More

Latest commit to the master branch on 1-22-2017
Download as zip

Python製で、インストールはpipで

$ sudo pip install maybe

インストールするとmaybeコマンドが使える様になって、 使いたいコマンドをmaybeの引数に与えてあげると、

$ maybe mkdir testDir
maybe has prevented mkdir testDir from performing 1 file system operations:

  create directory /tmp/testDir

Do you want to rerun mkdir testDir and permit these operations? [y/N] y

こんな感じで変更点が挙げられた上で実際に 実行するか聞かれ、yを押せば実際に実行されます。

特に重要なファイルを変更するような物をスクリプトを 実行する際には一度挟んで確認するにはとても便利だと思います。

ただし、READMEにもありますが、maybeでは擬似的にコマンドを実行して、 ファイルなどへの変更を行うプロセスを回避する、みたいなことをしているので、 ここに攻撃を含ませる様な事は可能です。

なので怪しいスクリプトやコマンドを試すために使う、みたいな使い方はしないでください、とのこと。

あくまで自分で書いた信頼できるスクリプトなどでの確認の為に使う程度で。

ただし今のところMacだと使えないようです。

Support OS X · Issue #3 · p-e-w/maybe

Macだと

$ maybe mkdir testDir
Warning: Running without traceFork support. Syscalls from subprocesses can not be intercepted.
Traceback (most recent call last):
  File "/usr/local/bin/maybe", line 11, in <module>
    sys.exit(main())
  File "/usr/local/lib/python2.7/site-packages/maybe/maybe.py", line 154, in main
    prepareProcess(process)
  File "/usr/local/lib/python2.7/site-packages/maybe/maybe.py", line 53, in prepareProcess
    process.syscall()
  File "/usr/local/lib/python2.7/site-packages/ptrace/debugger/process.py", line 469, in syscall
    ptrace_syscall(self.pid, signum)
  File "/usr/local/lib/python2.7/site-packages/ptrace/binding/func.py", line 254, in ptrace_syscall
    ptrace(PTRACE_SYSCALL, pid, 1, signum)
  File "/usr/local/lib/python2.7/site-packages/ptrace/binding/func.py", line 148, in ptrace
    raise PtraceError(message, errno=errno, pid=pid)
ptrace.error.PtraceError: ptrace(cmd=22, pid=69183, 1, 0) error #22: Invalid argument

な感じでエラーが出ます。 Issueを見る限り、簡単に回避できる問題じゃ無さそうなので すぐに対応できるということは無さそうです。

Linuxでコマンドラインゴミ箱

ちなみにrmによる即時削除をなんとかしたい、と言う場合のために trashというコマンドを以前作りました。

Latest commit to the master branch on 8-10-2017
Download as zip

シェルスクリプトなのでコマンドラインならMacでもLinuxでも使えます。 割と便利です。

Sponsored Links
Sponsored Links

« git-blame-someone-else: Gitのコミット履歴にあるのauthorを変えてしまうサブコマンド sd_cl: コマンドラインでのディレクトリ移動を快適にする »