非内置命令和$PATH



一开始我不得不提到我是linux新手。我必须说明,当您使用非内置命令(如cat(时,linux正在$PATH中搜索可执行文件,在找到一个后,它将不再搜索。有没有什么方法可以做到这一点——不通过cp其他命令并更改其名称或制作同名的全新脚本?

您可以使用strace来检查进程进行的系统调用。

$ strace bash -c 'cat /dev/null' 2>&1 | grep cat
execve("/usr/bin/bash", ["bash", "-c", "cat /dev/null"], 0x7ffcc25e5ab0 /* 91 vars */) = 0
stat("/usr/local/bin/cat", 0x7fff874b7150) = -1 ENOENT (No such file or directory)
stat("/usr/bin/cat", {st_mode=S_IFREG|0755, st_size=39112, ...}) = 0
newfstatat(AT_FDCWD, "/usr/bin/cat", {st_mode=S_IFREG|0755, st_size=39112, ...}, 0) = 0
access("/usr/bin/cat", X_OK)            = 0
newfstatat(AT_FDCWD, "/usr/bin/cat", {st_mode=S_IFREG|0755, st_size=39112, ...}, 0) = 0
access("/usr/bin/cat", R_OK)            = 0
stat("/usr/bin/cat", {st_mode=S_IFREG|0755, st_size=39112, ...}) = 0
newfstatat(AT_FDCWD, "/usr/bin/cat", {st_mode=S_IFREG|0755, st_size=39112, ...}, 0) = 0
access("/usr/bin/cat", X_OK)            = 0
newfstatat(AT_FDCWD, "/usr/bin/cat", {st_mode=S_IFREG|0755, st_size=39112, ...}, 0) = 0
access("/usr/bin/cat", R_OK)            = 0
execve("/usr/bin/cat", ["cat", "/dev/null"], 0x561cafdde4f0 /* 91 vars */) = 0

在我的案例中,bash尝试先打开/usr/local/bin/cat,然后打开/usr/bin/cat

相关内容

最新更新