找出 $PATH 的定义位置

找出 $PATH 的定义位置

我最近安装了一个 Arch-Linux 系统。如果我输入

echo $PATH

它(以及其他目录)指向我的目录,/home/user/dir我记得我把它设置在某处。我也以 root 用户身份拥有它,所以它不能在里面~/.bashrc,在里面也找不到/root/.bashrc。我也在里面找过/etc/profile/etc/bash.bashrc但也没找到。

有没有办法找到它的设置位置?

答案1

尝试在以下目录中搜索所有文件/etc

sudo grep -r "/home/user/dir" /etc

开关-r使grep搜索/home/user/dir内容/etc及其子目录中的所有文件。

grep(1) - Linux 手册页

-d行动,--目录=行动

如果输入文件是目录,则使用 ACTION 进行处理。默认情况下,ACTION 是,这意味着目录的读取方式与普通文件一样。如果 ACTION 为跳过,目录将被悄悄跳过。如果 ACTION 是递归,grep 递归读取每个目录下的所有文件;这相当于-r选项。

如果失败了,你可以简单地将搜索范围扩大到全部文件:

sudo grep -r "/home/user/dir" /

或者你可以搜索修改该PATH变量的所有文件:

sudo grep -r "PATH=" /

答案2

将用户目录以 root 身份放在全局路径中通常不是一个好主意;)您检查过该/etc/environment文件吗?

答案3

@Dennis 给了我一个好主意!我搜索了一下/etc,找到了它,但用的是另一个命令,因为他的命令只是搜索文件名(据我所知)。

我成功使用的是

find / -type f -exec grep -i /home/user/dir '{}' \; -print

答案4

如果你正在深入研究 PATH 中定义某些内容的位置,你可以尝试使用以下替代方法銀色尋找者进行快速搜索。

默认情况下,它会输出带有行号的匹配项,因此与 结合使用egrep可以仅输出文件名。如果您不希望出现重复项,它还会输出包含匹配项的行号,以便cut隔离文件名uniq。当然,如果您不想要完整的匹配项输出,则可以省略任何管道命令。

ag -s '/home/user/dir' | egrep '^\d+' | cut -d ':' -f 1 | uniq

相关内容