我如何知道linux命令的确切功能?

我如何知道linux命令的确切功能?,linux,command-line,Linux,Command Line,当我运行类似于python file.py的程序时,系统(我认为)正在执行某个文件,并将file.py作为参数。如何确切地找出它正在执行的文件或至少是目录 是否有Linux命令可以让您找到其他命令的目标 是否有Linux命令可以让您找到其他命令的目标 是的,它被称为,当我运行时,它在我的机器中被称为: $ which python $ /usr/bin/python 通常在linux中,除非通过以下方式指定当前目录: ./any_command export PATH=$PATH:/my_

当我运行类似于
python file.py
的程序时,系统(我认为)正在执行某个文件,并将
file.py
作为参数。如何确切地找出它正在执行的文件或至少是目录

是否有Linux命令可以让您找到其他命令的目标

是否有Linux命令可以让您找到其他命令的目标

是的,它被称为,当我运行时,它在我的机器中被称为

$ which python
$ /usr/bin/python 
通常在linux中,除非通过以下方式指定当前目录:

./any_command
export PATH=$PATH:/my_new_location
bash(或您正在使用的shell)将查找PATH环境变量中列出的目录,试图找到具有给定名称的命令

路径是由“:”字符分隔的目录列表。通常,它已经有一些默认位置,shell将在其中查找可执行文件,如/bin、/usr/bin、/usr/local/bin(根用户在其$PATH env变量中有不同的路径)

如果要将某个位置添加到路径中,可以通过运行以下命令来执行此操作:

./any_command
export PATH=$PATH:/my_new_location
通过这种方式,您可以从任意位置开始运行位于my_new_location目录中的程序,而无需指定它们的整个路径。顺序很重要,如果同一命令出现在两个不同的目录中,则使用列表中第一个目录中的命令。因此,如果希望优先考虑my_new_位置,则必须将其放在PATH变量的前面,如以下声明所示:

export PATH=/my_new_location:$PATH
“命令的作用”没有很好的定义,是一个模棱两可的句子。所有这些都有(至少,消耗CPU周期正在加热处理器)

我假设你的命令不是恶意的,也不是恶意的,你的是Linux

通常,命令包含一些文档。因此,对于命令
foo
请尝试
apropos
foo
man
foo
以及通常的
foo
--help
(GNU要求)或STFW。如果该命令打包在您的发行版中,它可能有一个单独的文档包(例如,在我的Debian/Sid上打包为
gcc-5
g++-5
gccgo-5
等,但在我的Debian/Sid上也有一个
gcc-5-doc
包等。我建议安装您正在使用的软件的大多数文档包…以及
manpages
&
manpages-dev
&
manpages-posix
&
m)anpages posix dev(Debian相关发行版上的

每个人都在做一些事情(这是做可观察到的副作用的最常见的方式,例如输入和输出)。中列出了可能的Linux系统调用。您可以找到命令的动态执行系统调用的顺序或使用处理(一些“系统调用”)like通常不是由内核完成的真正的系统调用,有关详细信息,请参阅)

请尝试一个简单的示例:

 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
另请参见,它跟踪对共享库内函数的调用

最后,大多数Linux命令都是,因此您可以下载并研究它们的,甚至对其进行改进

正如其他人回答的那样,您正在搜索您的(您可以使用
echo$PATH查询该路径
),您可以使用
which
foo
where is
foo
键入
foo
来查找有关
foo
的更多信息。当然,shell有一些内置命令,例如
cd
(这使shell本身执行系统调用,因此
cd
命令不能有任何可执行文件,它必须是内置的),并且大多数shell允许您定义shell和


注:即使对于理解恶意命令,
strace
也非常有用。

ltrace将跟踪库调用