当我运行类似python file.py
的东西时,系统(我认为)以file.py
作为参数执行一些文件。如何准确找出正在执行的文件或至少是目录?
是否有Linux命令让您找到其他命令的目标?
答案 0 :(得分:3)
"命令的作用"没有很好的定义,是一个模棱两可的句子。所有这些都有side-effects(至少,燃烧的CPU周期会加热你的处理器)。
我假设您的命令不是恶意或敌意,而您的operating system是某些Linux ......
很多时候,命令都有一些文档。因此,对于命令 foo
,请尝试apropos
foo
和man
foo
并经常 foo
--help
(GNU coding standard要求)或STFW。如果命令打包在您的发行版中,它可能有一个单独的文档包(例如GCC打包为gcc-5
,g++-5
,gccgo-5
等...在我的Debian上/ Sid,但还有一个gcc-5-doc
包等...我建议安装您正在使用的软件的大多数文档包...以及manpages
& manpages-dev
& {关于Debian相关发行版的{1}}& manpages-posix
。
每个process正在做一些system calls(这是进行可观察副作用的最常见方式,例如输入和输出)。可能的Linux系统调用列在syscalls(2)中。您可以找到动态执行的命令系统调用的序列,或使用strace(1) 处理(少数"系统调用& #34;与time(2)一样,内核通常不是真正的系统调用,详情请见vdso(7)。
尝试一个简单的例子:
manpages-posix-dev
你会发现它正在进行大约70次系统调用,特别是在我的Debian / PC上:
strace pwd
另请参阅ltrace(1),它跟踪对共享库中函数的调用。
最后,大多数Linux命令都是free software ,因此您可以下载并 学习他们的source code ,甚至改善它。
正如其他人回答的那样,您的shell正在搜索executable 中的$PATH
(您可以使用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
查询),而您可以使用echo $PATH
which
和foo
whereis
和foo
{{1} 以查找有关 type
的更多信息。当然,shell有一些内置命令,例如foo
(这使得shell 本身做一个chdir(2)系统调用,所以不能有任何foo
命令的ELF可执行文件,必须是内置文件),大多数shell允许您定义shell functions和aliases。
PS。即使是了解恶意命令,cd
也非常有用。
答案 1 :(得分:2)
是否有Linux命令可以让您找到其他命令的目标?
是的,当我跑步时,它在我的机器中被称为 :
$ which python
$ /usr/bin/python
通常在linux中,除非您通过以下方式指定当前目录:
./any_command
bash(或您正在使用的shell)将查看PATH环境变量中列出的目录,尝试查找具有给定名称的命令。
PATH是由"分隔的目录列表:"字符。通常它已经有一些默认位置,你的shell将查找可执行文件,如/ bin,/ usr / bin,/ usr / local / bin(root用户在其$ PATH env变量中有不同的路径)。
如果您想要添加到路径中的某个位置,可以通过运行以下命令来执行此操作:
export PATH=$PATH:/my_new_location
这样,您可以从任何地方开始运行位于my_new_location目录中的程序,而无需指定它们的完整路径。顺序很重要,如果相同的命令出现在两个不同的目录中,则使用列表中第一个目录的命令。因此,如果您希望优先考虑my_new_location,则必须将其放在PATH变量的前面,如下面的声明所示:
export PATH=/my_new_location:$PATH