当我运行类似python file.py
时,系统(我认为)以file.py
作为参数执行某个文件。我如何找出它正在执行的文件或至少是目录?如何找出linux命令的确切功能?
是否有Linux命令让你找到其他命令的目标?
当我运行类似python file.py
时,系统(我认为)以file.py
作为参数执行某个文件。我如何找出它正在执行的文件或至少是目录?如何找出linux命令的确切功能?
是否有Linux命令让你找到其他命令的目标?
有没有一个Linux命令让你找到其他命令的目标?
是的,这就是所谓的这在我的机器,当我运行:
./any_command
的庆典:
$ which python
$ /usr/bin/python
通常在Linux中,除非你通过以下指定当前目录(或者你正在使用的shell)会查看你的PATH环境变量中列出的目录,试图找到一个给定名字的命令。
PATH是由“:”字符分隔的目录列表。通常它已经有一些默认的位置,你的shell会寻找像/ bin,/ usr/bin,/ usr/local/bin这样的可执行文件(根用户在他的$ PATH env变量中有不同的路径)。
如果你有一些你想通过运行添加到您的路径,你可以这样做以下位置:
export PATH=$PATH:/my_new_location
这样,您就可以开始运行坐落在my_new_location目录节目从任何地方,而无需指定通向他们的整条道路。顺序很重要,如果相同的命令出现在两个不同的目录中,则使用列表中第一个目录中的命令。因此,如果你想给优先您my_new_location,你必须把它放在PATH变量的前面,在以下声明:
export PATH=/my_new_location:$PATH
“的命令做什么?”没有明确定义,是一个暧昧的句子。他们都有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
& manpages-posix
& manpages-posix-dev
关于Debian相关发行版)。
每个process正在做一些system calls(这是最常见的方式来做可观察的副作用,如输入&输出)。可能的Linux系统调用列在syscalls(2)中。您可以查找命令或过程与strace(1)的动态执行系统调用的序列(有少数“系统调用”像time(2)往往不是由内核做真正的系统调用,见vdso(7)了解详细信息)。
尝试一个简单的例子:
strace pwd
,你会看到它正在进行大约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
又见ltrace(1),这跟踪调用共享库中的函数。
最后,大多数Linux命令free software,这样你就可以下载并研究他们source code,甚至改善。
正如其他人回答,你shell正在寻找在executable您$PATH
(你可以用echo $PATH
查询),并且可以使用which
foo
和whereis
foo
和type
foo
找到更多关于foo
。当然,壳具有一些内置命令,如cd
(这使得壳本身做chdir(2)系统调用,所以不可能有任何ELF可执行用于cd
命令,它必须是一个内置),最弹使您能够定义外壳functions和aliases。
PS。即使为了解恶意命令,strace
也可能非常有用。
ltrace将跟踪库调用 –