如何在执行一个命令或程序之前就了解它会做什么
创始人
2024-03-01 21:15:46
0

有没有想过在执行一个 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

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中国 荣誉推出

相关内容

FatFS的文件操作
1、文件操作 1.1、f_open 打开/创建文件 FRESUL...
2025-06-01 03:51:55
Bundledoesnot...
该问题通常是由于您忘记在AppKernel.php的registe...
2024-12-27 00:01:50
不理解RxJava May...
要解决“不理解RxJava MaybeObserver(聊天通知无...
2024-12-26 11:31:40
不理解Haskell中的“...
Maybe是Haskell中的一种“容器”类型,它可以用来表示某些...
2024-12-26 09:30:48
不进行枚举的文件操作
不进行枚举的文件操作是指在文件操作中,不使用循环遍历来枚举文件或目...
2024-12-25 22:01:43
部分初始化结构体时,在引用...
可能会导致不稳定的行为或未定义的行为。为了避免这种情况,应使用初始...
2024-12-24 02:01:46

热门资讯

Helix:高级 Linux ... 说到 基于终端的文本编辑器,通常 Vim、Emacs 和 Nano 受到了关注。这并不意味着没有其他...
使用 KRAWL 扫描 Kub... 用 KRAWL 脚本来识别 Kubernetes Pod 和容器中的错误。当你使用 Kubernet...
JStock:Linux 上不... 如果你在股票市场做投资,那么你可能非常清楚投资组合管理计划有多重要。管理投资组合的目标是依据你能承受...
Epic 游戏商店现在可在 S... 现在可以在 Steam Deck 上运行 Epic 游戏商店了,几乎无懈可击! 但是,它是非官方的。...
《Apex 英雄》正式可在 S... 《Apex 英雄》现已通过 Steam Deck 验证,这使其成为支持 Linux 的顶级多人游戏之...
从 Yum 更新中排除特定/某... 作为系统更新的一部分,你也许需要在基于 Red Hat 系统中由于应用依赖排除一些软件包。如果是,如...
通过 SaltStack 管理... 我在搜索Puppet的替代品时,偶然间碰到了Salt。我喜欢puppet,但是我又爱上Salt了:)...
如何在 Github 上创建一... 学习如何复刻一个仓库,进行更改,并要求维护人员审查并合并它。你知道如何使用 git 了,你有一个 G...
Opera 浏览器内置的 VP... 昨天我们报道过 Opera 浏览器内置了 VPN 服务,用户打开它可以防止他们的在线活动被窥视。不过...
如何检查你的 Linux 系统... 不知道在使用哪个初始化系统?以下是方法。每个主流 Linux 发行版(包括 Ubuntu、Fedor...