在执行命令之前如何知道命令或者程序的确切作用

时间:2020-03-21 11:45:59  来源:igfitidea点击:

是否曾经想过在执行Unix命令之前会执行什么操作?
并非所有人都知道特定命令或者程序会做什么。
当然,我们可以使用Explainshell进行检查。

我们需要在Explainshell上复制/粘贴命令,它会让我们知道Linux命令的每个部分的作用。
但是,这不是必需的。
现在,我们可以从终端轻松地知道命令或者程序在执行之前将确切执行的操作。
向“也许”打个招呼,它是一个简单的工具,可让我们运行命令并查看其对文件的作用,而无需实际执行!查看列出的输出后,我们可以决定是否要运行它。

“maybe”如何运作?

“maybe”借助python-ptrace库在ptrace的控制下运行进程。

当它拦截即将对文件系统进行更改的系统调用时,它将记录该调用,然后修改CPU寄存器以将调用重定向到无效的syscall ID(有效地将其转换为无操作)并设置该无操作调用的返回值将返回原始调用成功的值。
结果,该过程认为它试图做的所有事情实际上都在发生,而实际上却什么也没有。

警告:在生产系统或者我们关心的任何系统中使用此实用程序时,都应该非常小心。
它仍然会造成严重的损害,因为它只会阻止少数系统调用。

安装“也许”

确保已在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 python-pip

在Debian,Ubuntu和Linux Mint上:

$sudo apt-get install python-pip

在SUSE上,openSUSE:

$sudo zypper install python-pip

pip安装完成后,运行以下命令以安装“也许”。

$sudo pip install maybe

在执行命令或者程序之前先知道它会做什么

使用绝对简单!只需在要执行的命令前添加“也许”即可。

请允许我给你看一个例子。

$maybe rm -r theitroad/

如我们所见,我将从系统中删除一个名为“ theitroad”的文件夹。
这是示例输出。

maybe has prevented rm -r theitroad/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/theitroad
Do you want to rerun rm -r theitroad/and permit these operations? [y/N] y

“maybe”工具执行5个文件系统操作,并向我显示该命令(即rm -r theitroad /)将执行的操作。
现在,我可以决定是否应该执行此操作。
很好,是吗?

这是另一个例子。
我将为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.

看到了吗?
它没有检测到任何文件系统操作,因此没有警告。
这绝对是绝妙的,正是我一直在寻找的东西。
从现在开始,即使执行命令或者程序,我也可以轻松知道它们将执行的操作