2015-09-27 33 views

回答

2

有没有一个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 
3

“的命令做什么?”没有明确定义,是一个暧昧的句子。他们都有side-effects(至少,燃烧的CPU周期正在加热你的处理器)。

我假设你的命令不是恶意或敌意,你的operating system是一些Linux ...

很多时候,一个命令有一些文档。因此,对于命令foo尝试aproposfoomanfoo和经常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查询),并且可以使用whichfoowhereisfootypefoo找到更多关于foo。当然,壳具有一些内置命令,如cd(这使得壳本身chdir(2)系统调用,所以不可能有任何ELF可执行用于cd命令,它必须是一个内置),最弹使您能够定义外壳functionsaliases

PS。即使为了解恶意命令,strace也可能非常有用。

+0

ltrace将跟踪库调用 –