如何在执行一个命令或程序之前就了解它会做什么

系统 Linux
maybe ,一个简单的工具,它允许你运行一条命令并可以查看此命令对你的文件做了什么,而实际上这条命令却并未执行!在查看 maybe 的输出列表后,你可以决定是否真的想要运行这条命令。

https://s2.51cto.com/oss/201712/12/f5f3661db331140bc5984de2780fd502.png

有没有想过在执行一个 Unix 命令前就知道它干些什么呢?并不是每个人都会知道一个特定的命令或者程序将会做什么。当然,你可以用 Explainshell 来查看它。你可以在 Explainshell 网站中粘贴你的命令,然后它可以让你了解命令的每个部分做了什么。但是,这是没有必要的。现在,我们从终端就可以轻易地在执行一个命令或者程序前就知道它会做什么。 maybe ,一个简单的工具,它允许你运行一条命令并可以查看此命令对你的文件做了什么,而实际上这条命令却并未执行!在查看 maybe 的输出列表后,你可以决定是否真的想要运行这条命令。

 

maybe 是如何工作的

根据开发者的介绍:

maybe 利用 python-ptrace 库在 ptrace 控制下运行了一个进程。当它截取到一个即将更改文件系统的系统调用时,它会记录该调用,然后修改 CPU 寄存器,将这个调用重定向到一个无效的系统调用 ID(效果上将其变成一个无效操作(no-op)),并将这个无效操作(no-op)的返回值设置为有效操作的返回值。结果,这个进程认为,它所做的一切都发生了,实际上什么都没有改变。

警告:在生产环境或者任何你所关心的系统里面使用这个工具时都应该小心。它仍然可能造成严重的损失,因为它只能阻止少数系统调用。

 

安装 maybe

确保你已经在你的 Linux 系统中已经安装了 pip 。如果没有,可以根据您使用的发行版,按照如下指示进行安装。

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

  1. sudo pacman -S python-pip

在 RHEL,CentOS 上:

  1. sudo yum install epel-release
  2. sudo yum install python-pip

在 Fedora 上:

  1. sudo dnf install epel-release
  2. sudo dnf install python-pip

在 Debian,Ubuntu,Linux Mint 上:

  1. sudo apt-get install python-pip

在 SUSE、 openSUSE 上:

  1. sudo zypper install python-pip

安装 pip 后,运行以下命令安装 maybe

  1. sudo pip install maybe

 

了解一个命令或程序在执行前会做什么

用法是非常简单的!只要在要执行的命令前加上 maybe 即可。

让我给你看一个例子:

  1. $ maybe rm -r ostechnix/

如你所看到的,我从我的系统中删除一个名为 ostechnix 的文件夹。下面是示例输出:

  1. maybe has prevented rm -r ostechnix/ from performing 5 file system operations:
  2.  
  3. delete /home/sk/inboxer-0.4.0-x86_64.AppImage
  4. delete /home/sk/Docker.pdf
  5. delete /home/sk/Idhayathai Oru Nodi.mp3
  6. delete /home/sk/dThmLbB334_1398236878432.jpg
  7. delete /home/sk/ostechnix
  8.  
  9. Do you want to rerun rm -r ostechnix/ and permit these operations? [y/N] y

maybe 执行了 5 个文件系统操作,并向我显示该命令(rm -r ostechnix/)究竟会做什么。现在我可以决定是否应该执行这个操作。是不是很酷呢?确实很酷!

这是另一个例子。我要为 Gmail 安装 Inboxer 桌面客户端。这是我得到的输出:

  1. $ maybe ./inboxer-0.4.0-x86_64.AppImage
  2. fuse: bad mount point `/tmp/.mount_inboxemDzuGV': No such file or directory
  3. squashfuse 0.1.100 (c) 2012 Dave Vasilevsky
  4.  
  5. Usage: /home/sk/Downloads/inboxer-0.4.0-x86_64.AppImage [options] ARCHIVE MOUNTPOINT
  6.  
  7. FUSE options:
  8. -d -o debug enable debug output (implies -f)
  9. -f foreground operation
  10. -s disable multi-threaded operation
  11.  
  12. open dir error: No such file or directory
  13. maybe has prevented ./inboxer-0.4.0-x86_64.AppImage from performing 1 file system operations:
  14.  
  15. create directory /tmp/.mount_inboxemDzuGV
  16.  
  17. Do you want to rerun ./inboxer-0.4.0-x86_64.AppImage and permit these operations? [y/N]

如果它没有检测到任何文件系统操作,那么它会只显示如下所示的结果。

例如,我运行下面这条命令来更新我的 Arch Linux。

  1. $ maybe sudo pacman -Syu
  2. 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?
  3. maybe has not detected any file system operations from sudo pacman -Syu.

看到没?它没有检测到任何文件系统操作,所以没有任何警告。这非常棒,而且正是我所预料到的结果。从现在开始,我甚至可以在执行之前知道一个命令或一个程序将执行什么操作。我希望这对你也会有帮助。

Cheers!

资源:

 

责任编辑:庞桂玉 来源: Linux中国
相关推荐

2020-06-04 17:00:37

Linux命令脚本

2021-09-14 12:34:33

LinuxLinux终端

2020-08-03 16:00:31

Linux命令进程

2018-11-22 09:15:45

Linux命令进程

2015-10-27 15:50:47

JS框架

2017-03-10 10:37:16

Linux命令脚本

2018-07-26 09:55:44

Linux命令升级软件

2022-06-09 09:27:16

前端行业生存

2010-09-09 21:34:06

2009-06-08 21:35:02

Java启动程序

2022-08-14 08:29:21

npmNode

2016-12-07 17:45:44

Linux文件

2024-04-11 08:30:05

JavaScript数组函数

2019-09-10 09:12:54

2022-09-07 10:20:05

Python装饰类

2022-06-17 07:57:53

拦截包装软链接

2012-08-24 10:46:12

程序员

2013-11-20 14:14:35

2018-10-29 10:13:29

Windows 10应用程序卸载

2019-11-26 14:53:11

Nginx反向代理负载均衡
点赞
收藏

51CTO技术栈公众号