XYZ*_*YZT 6 linux command-line
当我运行类似的东西时python file.py,系统(我认为)正在执行一些文件作为file.py参数。我如何准确地找出它正在执行哪个文件或至少是目录?
有没有一个 Linux 命令可以让你找到其他命令的目标?
“命令的作用”没有明确定义,是一个含糊不清的句子。所有这些都有副作用(至少,燃烧 CPU 周期会加热您的处理器)。
我假设你的命令不是恶意或敌对的,并且你的操作系统是 Linux...
很多时候,一个命令有一些文档。因此,对于命令foo尝试aproposfoo和manfoo经常(GNU编码标准要求),否则是STFW。如果该命令打包在您的发行版中,它可能有一个单独的文档包(例如,GCC 在我的 Debian/Sid 上打包为 、等... ,但还有一个包等...我建议安装大多数文档包您正在使用的软件的...以及Debian 相关发行版上的& & & )。foo--helpgcc-5g++-5gccgo-5gcc-5-docmanpagesmanpages-devmanpages-posixmanpages-posix-dev
每个进程都在执行一些系统调用(这是执行可观察副作用的最常见方法,例如输入和输出)。syscalls(2)中列出了可能的 Linux 系统调用。您可以使用 strace(1)找到命令或进程动态执行的系统调用的序列(一些像time(2)这样的“系统调用”通常不是内核完成的真正系统调用,有关详细信息,请参阅vdso(7)) 。
尝试举一个简单的例子:
strace pwd
Run Code Online (Sandbox Code Playgroud)
你会看到它正在执行大约 70 个系统调用,特别是在我的 Debian/PC 上:
getcwd("/home/basile", 4096) = 13
fstat(1, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0)
= 0x7f61aac5a000
write(1, "/home/basile\n", 13) = 13
Run Code Online (Sandbox Code Playgroud)
另请参见ltrace(1),它跟踪对共享库内函数的调用。
最后,大多数Linux命令都是免费软件,因此您可以下载和研究它们的源代码,甚至改进它。
正如其他人回答的那样,您的shell正在搜索您的可执行文件$PATH(您可以使用 进行查询echo $PATH),并且您可以使用whichfoo 和whereisfoo来typefoo 查找有关 的更多信息foo。当然,shell 有一些内置命令,例如cd(这使得 shell本身执行chdir(2)系统调用,因此该命令不能有任何ELF可执行cd文件,它必须是内置命令),并且大多数 shell 使您能够定义 shell函数和别名。
附言。即使对于理解恶意命令也strace非常有用。
| 归档时间: |
|
| 查看次数: |
6364 次 |
| 最近记录: |