当前位置: 首页 > 科技观察

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

时间:2023-03-15 15:18:13 科技观察

有没有想过Unix命令在执行之前会做什么?不是每个人都知道特定的命令或程序会做什么。当然你可以使用Explainshell查看。您可以将您的命令粘贴到Explainshell网站,它会让您了解命令的每个部分的作用。然而,这不是必需的。现在,我们可以很容易地知道命令或程序在从终端执行之前会做什么。maybe,一个简单的工具,允许您运行一个命令并查看它对您的文件做了什么,即使该命令实际上并未执行!查看maybe的输出列表后,您可以决定是否真的要运行此命令。根据开发人员的说法,maybe是如何工作的:maybe使用python-ptrace库在ptrace控制下运行进程。当它截获一个即将更改文件系统的系统调用时,它会记录调用,然后修改CPU寄存器以将调用重定向到无效的系统调用ID(有效地将其转换为无效操作(no-op)),并设置此无效操作(无操作)的返回值到有效操作的返回值。结果,该过程认为它所做的一切都发生了,而实际上什么都没有改变。警告:在生产中或在您关心的任何系统上使用此工具时要小心。它仍然可以造成严重的损害,因为它只阻止了少数系统调用。安装maybe确保你的Linux系统上安装了pip。如果没有,您可以根据您使用的发行版按照以下说明进行安装。在ArchLinux及其衍生产品(例如Antergos、ManjaroLinux)上,使用以下命令安装pip:sudopacman-Spython-pip在RHEL、CentOS上:sudoyuminstallepel-releasesudoyuminstallpython-pip在Fedora上:sudodnfinstallepel-releasesudodnfinstallpython-pip在Debian、Ubuntu、LinuxMint上:sudoapt-getinstallpython-pip在SUSE、openSUSE上:sudozypperinstallpython-pip安装pip后,运行以下命令安装maybe:sudopipinstallmaybe在执行命令或程序之前知道它的作用非常好用!只需在要执行的命令之前添加maybe即可。让我给你举个例子:$mayberm-rostechnix/如你所见,我从我的系统中删除了一个名为ostechnix的文件夹。这是示例输出:可能已阻止rm-rostechnix/执行5个文件系统操作:delete/home/sk/inboxer-0.4.0-x86_64.AppImagedelete/home/sk/Docker.pdfdelete/home/sk/IdhayathaiOruNodi.mp3delete/home/sk/dThmLbB334_1398236878432.jpgdelete/home/sk/ostechnix你想重新运行rm-rostechnix/并允许这些操作吗?[y/N]你可能执行了5次文件系统操作并向我展示该命令(rm-rostechnix/)的确切功能。现在我可以决定是否应该执行此操作。是不是很酷?真的很酷!这是另一个例子。我想为Gmail安装Inboxer桌面客户端。这是我得到的输出:$maybe./inboxer-0.4.0-x86_64.AppImagefuse:badmountpoint`/tmp/.mount_inboxemDzuGV':Nosuchfileordirectorysquashfuse0.1.100(c)2012DaveVasilevskyUsage:/home/sk/Downloads/inboxer-0.4.0-x86_64.AppImage[options]ARCHIVEMOUNTPOINTFUSEoptions:-d-odebugenabledebugoutput(implies-f)-fforegroundoperation-sdisablemulti-threadedoperationopendirerror:没有这样文件或目录可能已阻止./inboxer-0.4.0-x86_64.AppImage执行1个文件系统操作:创建目录/tmp/.mount_inboxemDzuGV是否要重新运行./inboxer-0.4.0-x86_64.AppImage并允许这些操作?[y/N]如果它没有检测到任何文件系统操作,那么它只会显示如下所示的结果。例如,我运行以下命令来更新我的ArchLinux。$maybesudopacman-Syusudo:effectiveuidisnot0,/usr/bin/sudo是在设置了'nosuid'选项的文件系统上还是在没有root权限的NFS文件系统上?可能没有从sudopacman-Syu检测到任何文件系统操作。看?它不检测任何文件系统操作,因此没有警告。这很棒,而且正是我所期望的。从现在开始,我什至在执行命令或程序之前就知道它会做什么。我希望这也会对你有所帮助。干杯!资源:可能是GitHub主页