Я имею тезис диплома и выполняю шаги из этого руководства: Создание Кластера Беовульфа всего на 13 шагах.
У меня есть проблема с шагом 11:
Теперь мы определим путь к MPICH для SSH. Выполните следующую команду:
sudo echo /home/mpiuser/mpich1/bin >> /etc/environment
Но выше команды возвращает этот вывод:
bash: /etc/environment: Permission denied
Как решить эту проблему?
Ваша команда не работает потому что перенаправление вывода (>
/>>
) не выполняется 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:/home/mpiuser/mpich1/bin"
Прокрутите в конец.
Ссылки:
РЕДАКТИРОВАНИЕ 2:
Я провел немного исследования и нашел немного советов как это:
Однако, если бы необходимо установить ту переменную среды для всех пользователей, я все еще не рекомендовал бы затронуть
/etc/environment
но создавая файл с именем файла, заканчивающимся в.sh
в/etc/profile.d
./etc/profile
сценарий и все сценарии в/etc/profile.d
глобальный эквивалент каждого персонального пользователя~/.profile
и выполняемый как обычные сценарии оболочки всеми оболочками во время их инициализации.
И это:
Избегайте modifing системных файлов. Вместо этого необходимо поместить исполняемый сценарий в
/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
- кого мы создали выше.