我有毕业论文并按照本手册中的步骤进行:仅需 13 个步骤即可构建 Beowulf 集群。
我对第 11 步有疑问:
现在我们将为 SSH 定义 MPICH 的路径。运行以下命令:
sudo echo /home/mpiuser/mpich1/bin >> /etc/environment
但上述命令返回此输出:
bash: /etc/environment: Permission denied
如何解决这个问题呢?
答案1
您的命令不起作用,因为 sudo 未执行输出 ( >
/ >>
) 的重定向。有几种方法可以解决这个问题。例如:
您可以使用管道(
|
)并由sudo
tee
带选项的命令--append
:echo /home/mpiuser/mpich1/bin | sudo tee -a /etc/environment
另一种方法是运行整个命令
sudo
:sudo bash -c 'echo /home/mpiuser/mpich1/bin >> /etc/environment'
结果/etc/environment
遗嘱的内容看起来像这样:
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
/home/mpiuser/mpich1/bin
参考:
编辑1:
但是我认为这行新内容/etc/environment
本身不会产生任何作用。要使此“路径”有意义,必须将其附加到$PATH
envvar 的值中。
Ubuntu 文档说:
变量扩展在 中不起作用
/etc/environment
。
因此,要通过单个命令附加/home/mpiuser/mpich1/bin
到的值$PATH
,您可以使用以下命令:
cat /etc/environment | sed 's/\"$/:\/home\/mpiuser\/mpich1\/bin\"/' | sudo tee /etc/environment
在哪里:(1) cat /etc/environment
将打印文件的内容;(2) sed '...'
将用 ; 替换最后一个引号 ( "
) :/home/mpiuser/mpich1/bin"
; (3)sudo tee /etc/environment
将重写该文件。
结果/etc/environment
遗嘱的内容看起来像这样:
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/主页/mpiuser/mpich1/bin“
请滚动到末尾。
参考:
编辑2:
我做了一些研究,发现了一些建议,比如这:
但是,如果您需要为所有用户设置该环境变量,我仍然不建议您修改,
/etc/environment
而是创建一个文件名以.sh
in结尾的文件/etc/profile.d
。该/etc/profile
脚本和中的所有脚本/etc/profile.d
都是每个用户个人脚本的全局等效脚本~/.profile
,并在所有 shell 初始化期间作为常规 shell 脚本执行。
和这:
请避免修改系统文件。相反,您应该放置一个可执行脚本
/etc/profile.d
(此处的脚本会为每个用户执行)来更改$PATH
值。
根据这些建议,假设您要创建一个名为的文件mpich-path.sh
,并将其放置在目录中/etc/profile.d/
。这可以通过以下命令完成:
echo 'export PATH="$PATH:/home/mpiuser/mpich1/bin"' | sudo tee /etc/profile.d/mpich-path.sh
结果新文件的内容将如下所示:/etc/profile.d/mpich-path.sh
export PATH="$PATH:/home/mpiuser/mpich1/bin"
注销并重新登录系统并输入echo $PATH
以检查结果。
编辑3:
我不知道您所遵循的手册中的其他步骤,但除了步骤 11 之外,步骤 10 似乎也不太清楚。
这部分:
export PATH=/home/mpiuser/mpich1/bin:$PATH # assigns a new value and exports the variable
export PATH # exports the variable
必须是:
PATH=/home/mpiuser/mpich1/bin:$PATH # assigns a new value
export PATH # exports the variable
要不就:
export PATH=/home/mpiuser/mpich1/bin:$PATH # assigns a new value and exports the variable
并且会产生与步骤11相同的结果。所以这部分是不必要的。
这里的新内容是这部分:
LD_LIBRARY_PATH="/home/mpiuser/mpich1/lib:$LD_LIBRARY_PATH"
export LD_LIBRARY_PATH
但是,也许,它可以被包含到我们上面创建的文件中。/etc/profile.d/mpich-path.sh