Linux中國

如何在執行一個命令或程序之前就了解它會做什麼

maybe 是如何工作的

根據開發者的介紹:

maybe 利用 python-ptrace 庫在 ptrace 控制下運行了一個進程。當它截取到一個即將更改文件系統的系統調用時,它會記錄該調用,然後修改 CPU 寄存器,將這個調用重定向到一個無效的系統調用 ID(效果上將其變成一個無效操作(no-op)),並將這個無效操作(no-op)的返回值設置為有效操作的返回值。結果,這個進程認為,它所做的一切都發生了,實際上什麼都沒有改變。

警告:在生產環境或者任何你所關心的系統裡面使用這個工具時都應該小心。它仍然可能造成嚴重的損失,因為它只能阻止少數系統調用。

安裝 maybe

確保你已經在你的 Linux 系統中已經安裝了 pip 。如果沒有,可以根據您使用的發行版,按照如下指示進行安裝。

在 Arch Linux 及其衍生產品(如 Antergos、Manjaro Linux)上,使用以下命令安裝 pip

sudo pacman -S python-pip

在 RHEL,CentOS 上:

sudo yum install epel-release
sudo yum install python-pip

在 Fedora 上:

sudo dnf install epel-release
sudo dnf install python-pip

在 Debian,Ubuntu,Linux Mint 上:

sudo apt-get install python-pip

在 SUSE、 openSUSE 上:

sudo zypper install python-pip

安裝 pip 後,運行以下命令安裝 maybe

sudo pip install maybe

了解一個命令或程序在執行前會做什麼

用法是非常簡單的!只要在要執行的命令前加上 maybe 即可。

讓我給你看一個例子:

$ maybe rm -r ostechnix/

如你所看到的,我從我的系統中刪除一個名為 ostechnix 的文件夾。下面是示例輸出:

maybe has prevented rm -r ostechnix/ from performing 5 file system operations:

 delete /home/sk/inboxer-0.4.0-x86_64.AppImage
 delete /home/sk/Docker.pdf
 delete /home/sk/Idhayathai Oru Nodi.mp3
 delete /home/sk/dThmLbB334_1398236878432.jpg
 delete /home/sk/ostechnix

Do you want to rerun rm -r ostechnix/ and permit these operations? [y/N] y

maybe 執行了 5 個文件系統操作,並向我顯示該命令(rm -r ostechnix/)究竟會做什麼。現在我可以決定是否應該執行這個操作。是不是很酷呢?確實很酷!

這是另一個例子。我要為 Gmail 安裝 Inboxer 桌面客戶端。這是我得到的輸出:

$ maybe ./inboxer-0.4.0-x86_64.AppImage 
fuse: bad mount point `/tmp/.mount_inboxemDzuGV': No such file or directory
squashfuse 0.1.100 (c) 2012 Dave Vasilevsky

Usage: /home/sk/Downloads/inboxer-0.4.0-x86_64.AppImage [options] ARCHIVE MOUNTPOINT

FUSE options:
 -d -o debug enable debug output (implies -f)
 -f foreground operation
 -s disable multi-threaded operation

open dir error: No such file or directory
maybe has prevented ./inboxer-0.4.0-x86_64.AppImage from performing 1 file system operations:

create directory /tmp/.mount_inboxemDzuGV

Do you want to rerun ./inboxer-0.4.0-x86_64.AppImage and permit these operations? [y/N]

如果它沒有檢測到任何文件系統操作,那麼它會只顯示如下所示的結果。

例如,我運行下面這條命令來更新我的 Arch Linux。

$ maybe sudo pacman -Syu
sudo: effective uid is not 0, is /usr/bin/sudo on a file system with the 'nosuid' option set or an NFS file system without root privileges?
maybe has not detected any file system operations from sudo pacman -Syu.

看到沒?它沒有檢測到任何文件系統操作,所以沒有任何警告。這非常棒,而且正是我所預料到的結果。從現在開始,我甚至可以在執行之前知道一個命令或一個程序將執行什麼操作。我希望這對你也會有幫助。

Cheers!

資源:

via: https://www.ostechnix.com/know-command-program-will-exactly-executing/

作者:SK 譯者:imquanquan 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國