Разница между ~ / folder и / home / username / folder при создании пути в / etc / environment

У меня был исполняемый скрипт в моей Ubuntu, расположенный в каталоге ~/project/, и я попытался добавить этот путь в /etc/environment. Итак, я редактирую путь к этому PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:~/project/". Затем я выхожу и снова вхожу в систему, открываю терминал как su и запускаю команду для выполнения моего скрипта в этой папке, но в результате получается command not found.

Затем я изменяю путь в /etc/environment на PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/r0xx4nne/project/" и вуаля, он работает. Теперь я могу без проблем запустить исполняемый скрипт внутри ~/project/ по команде su.

У меня вопрос, в чем разница между ~ / project и / home / r0xx4nne / project , когда речь идет о создании пути в / etc / environment ?

Почему так получилось? Я новичок, и я просто хочу знать больше. Спасибо за любой ответ.

3
задан 30 October 2013 в 08:04

3 ответа

Тильда обозначает домашний каталог текущего пользователя. Он может быть вашим или другим, в зависимости от того, когда он используется. Если вы еще не вошли в систему, это не сработает.

Связанная проблема заключается в том, что / etc не является вашим каталогом и не является местом для добавления ваших личных путей. Если бы был другой пользователь, зачем ему путь к вашему домашнему каталогу?

Правильное место для изменения пути зависит от того, кому нужен этот путь:

Только один пользователь (вы) - - $HOME/.profile, где $ HOME - это / home / username

Все пользователи, кроме root - /etc/profile

root - /root/.profile

Итак, подведем итог , ваш путь должен быть установлен в /home/r0xx4nne/.profile.

0
ответ дан 30 October 2013 в 08:04

В оболочке ~/project/ расширяется до /home/yourusername/project в большинстве случаев. Это называется разложение тильды .

Если вы положите

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:~/project/

(примечание, без кавычек) в ~/.profile. Ваш PATH будет установлен правильно, потому что ~/.profile интерпретируется оболочкой при входе в систему. /etc/environment (и это зависит от пользователя ~/.pam_environment) не интерпретируется оболочкой. Он читается модулем pam_env во время входа в систему, но он принимает только пары NAME=VALUE и никакие расширения (например, $var или ~/ или $(command) и т. Д.) Не будут выполняться на VALUE. ].

0
ответ дан 30 October 2013 в 08:04

Когда вы входите как su, ~ - это /root, а не /home/<yourusername>. В остальном оба одинаковы.

Примечание: тильда раскрывается оболочкой (а не ls) до фактического выполнения команды. Например, если вы запустите sudo ls ~, команда, которая будет выполнена, будет ls /home/<yourusername>, а не ls /root. Чтобы запретить оболочке расширять тильду как пользователь без полномочий root, вы можете:

  • сначала войти в систему как root , а затем выполнить команду в корневой оболочке или [ 119]
  • передать команду в качестве аргумента в оболочку и заставить оболочку работать от имени root:

    sudo bash -c "ls ~"
    
0
ответ дан 30 October 2013 в 08:04

Другие вопросы по тегам:

Похожие вопросы: