我已将 LaTeX 添加到 PATH 变量,但当我将 shell 配置传输到多台计算机时,并非所有计算机上都安装了 LaTeX。除了无法访问软件的明显后果之外,当系统上不存在 PATH 变量所引用的软件时,配置 PATH 变量是否还会产生任何其他负面影响?
我的 .zshenv 文件:
# TeX Live
export PATH=$PATH:/usr/local/texlive/2023/bin/x86_64-linux
答案1
没有任何。您的 shell 将花费大约 0.00005 秒尝试打开此位置,失败并继续。
如果此位置位于无法访问的远程文件系统上,则可能会出现唯一真正可能的问题。这可能会导致您每次尝试自动完成命令时出现一分钟的长时间延迟。
答案2
这可能会产生一些潜在的负面影响,但实际上并不显着。
每当您尝试运行依赖于所添加目录中的软件但未安装的命令时,您可能会收到错误消息,指示找不到该命令或可执行文件。
如果添加的目录中的命令或可执行文件名称与系统上的现有命令冲突,则可能会导致意外行为。
当 shell 遇到命令时,它会在变量列出的目录中搜索该命令
PATH
。如果您引用的软件未安装,则 shell 必须在PATH
确定该命令不可用之前搜索所有目录。这个额外的搜索时间可能会导致命令执行略有延迟。
您可以添加一条if
语句来在执行导出之前检查软件是否存在。
如果要将 shell 配置传输到多台计算机,您可以考虑为每台计算机创建单独的配置文件,并PATH
根据每个系统上可用的软件相应地自定义变量。
或者在 shell 配置中包含额外的检查,以验证是否存在所需的软件或目录。
答案3
添加目录会$PATH
增加运行程序过程的开销。 shell 尝试优化这一点,但即使在 shell 之外,这种开销通常也是微不足道的,对于不存在的目录更是如此。
多次添加相同的目录(正如您的示例有可能做到的那样)很丑陋,但通常对性能来说仍然微不足道。
将不受信任的目录添加到路径中会产生安全隐患,但我认为这些在这种情况下不适用,因为它是一个不存在的目录而不是不受信任的目录,并且潜在的父目录应该由 root 拥有。
最糟糕的结果可能是目录所在的磁盘恰好位于出现故障的磁盘上(例如,NFS 安装点指向无响应的服务器),但这不是一般情况。 (结果会非常慢或者可能登录失败。)
答案4
根据您将其放置在路径中的位置,以及如果普通用户可以创建与该路径匹配的目录/文件,则可能会存在安全问题。
如果它靠近路径的开头,则具有足够权限的人有可能创建一个与该路径匹配的目录,并且该目录中的可执行文件可以放置以通常受信任的可执行文件命名的脚本,例如ls
先前调用的脚本到实际的ls
.
通常,这种攻击是为了在最终输入命令的其他用户之间收集信息。伪造者ls
可以获取用户信息,以该用户身份运行命令,甚至将此类信息发送出系统。通常,此类脚本也会运行真实脚本ls
并将回复通过管道传输回控制台,以延迟拦截的发现。