如何在执行一个命令或程序之前就了解它会做什么
创始人
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

热门资讯

“Linux 中国” 开源社区... 这是一个艰难的决定 —— 这不是调侃,而是当你真正做出改变了你十几年生活轨迹的决定时,你就会明白这个...
硬核观察 #1263 德国铁路... #1 德国铁路公司招聘 Windows for Workgroups 3.11 管理员该职位要求了解...
人工智能教程(七):Sciki... 在本系列的 上一篇文章 中,我们用 TensorFlow 构建了第一个神经网络,然后还通过 Kera...
关闭 WSL 中正在运行的 L... 以下是使用 WSL 关闭在 Windows 内运行的 Linux 系统的不同方法。你使用 WSL 在...
MX Linux 23.2 “... 最新的 MX Linux 23.2 小版本更新带来了基本的改进和新增功能。MX Linux 推出了 ...
硬核观察 #1262 网络上最... #1 网络上最古老的软件存档库之一即将关闭美国新墨西哥州立大学(NMSU)最近宣布,即将于 2024...
如何在 RHEL 上通过绑定配... 在 Linux 中,你可以根据自己的需要创建高级网络设置,如 网络绑定 Network Bondin...
Linux Matrix 消息... Matrix 用户可以升级 Fractal 6 了!Fractal 是目前 最好的 Matrix 客...
如何通过 VLC 使用字幕 使用 VLC 媒体播放器播放和管理字幕的新手指南。我是一个超级动漫迷,如果你想观看最新的剧集,那么你...
硬核观察 #1261 X 计划... #1 X 计划在奥斯汀建立内容审核总部据报道,该部门将招聘 100 名全职员工,将主要关注 CSE ...