Мой вопрос связан с другим открытымвопрос. Мой echo $PATH дает мне вывод, который выглядит так:
/home/sahil/.rvm/gems/ruby-1.9.3-p125/bin:/home/sahil/.rvm/gems/ruby-1.9.3-p125@global/bin:/home/sahil/.rvm/rubies/ruby-1.9.3-p125/bin:/home/sahil/.rvm/bin:/usr/local/bin:/usr/bin:/bin:/usr/games:/home/sahil/.rvm/bin{}:/home/android-sdks/{}:/home/android-sdks/platform-tools/{}:/home/android-sdks/tools/{}:/home/sahil/android-sdks/tools{}:/home/sahil/android-sdks/tools:/home/sahil/android-sdks/platform-tools/
Но бег
ifconfig
дает мне вывод вроде
Command 'ifconfig' is available in '/sbin/ifconfig'
The command could not be located because '/sbin' is not included in the PATH environment variable.
This is most likely caused by the lack of administrative privileges associated with your user account.
ifconfig: command not found
после выполнения команды, как указано в другом вопросе
export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
он работаетifconfigно блокирует другие команды ruby rails или rvm.
Ищу помощь, как решить эту проблему. Также почему это происходит?
решение1
Попробуйте команду ниже
export PATH=$PATH:/usr/sbin
ИЛИ (если вы хотите задать все пути)
export PATH=$PATH:/usr/sbin:/usr/local/sbin:/usr/local/bin:/usr/bin:/sbin:/bin:/usr/games
решение2
Ваш оригинал $PATH
(строка, которую вы разместили, не очень читаема):
/home/sahil/.rvm/gems/ruby-1.9.3-p125/bin:
/home/sahil/.rvm/gems/ruby-1.9.3-p125@global/bin:
/home/sahil/.rvm/rubies/ruby-1.9.3-p125/bin:/home/sahil/.rvm/bin:
/usr/local/bin:/usr/bin:/bin:/usr/games:
/home/sahil/.rvm/bin{}:
/home/android-sdks/{}:
/home/android-sdks/platform-tools/{}:
/home/android-sdks/tools/{}:
/home/sahil/android-sdks/tools{}:
/home/sahil/android-sdks/tools:
/home/sahil/android-sdks/platform-tools/
У вас есть /usr/local/bin
, /usr/bin
и /bin
. Как вы уже узнали ifconfig
находится внутри /sbin
.
Поэтому там, где указан этот путь, вам также необходимо включить /sbin
.
Видетьрубиджемсдокументы о том, как это сделать.
решение3
/sbin обычно является частью пути. Другие дистрибутивы, такие как fedora, не имеют его в PATH для обычных пользователей, но я думаю, что Ubuntu всегда имеет. Я предлагаю вам проверить ваш файл /etc/environment и посмотреть, является ли он допустимым и добавлен ли /sbin в путь. Когда я запускаюкот /etc/окружающая среда, я получаю следующий вывод:
adnan@adnan-laptop:~$ cat /etc/environment
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
Как вы видете/сбинуже является частью переменной окружения PATH. Если ваш файл имеет то же содержимое, проверьте его права, в противном случае добавьте /sbin в PATH в этом файле. Для меня права доступа следующие:
adnan@adnan-laptop:~$ ls -l /etc/environment
-rw-r--r-- 1 root root 79 2009-10-29 01:55 /etc/environment
решение4
Что такое PATH
переменная?
PATH
это список путей к каталогам. Когда пользователь вводит команду, не предоставляя полный путь, этот список проверяется на предмет наличия в нем пути, ведущего к команде. Порядок путей в этой переменной указывает порядок, в котором будет выполняться поиск команды: в случае, если в нескольких каталогах есть программа с одинаковым именем, будет выполнена та, которая находится в папке, ближайшей к началу списка (левая сторона).
Причина, по которой вы заблокировали другие команды (из ruby rails и rvm), заключается в том, что вы выполнили это:
export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
в результате PATH
чегоне содержитпапки таких программ, а именно:
/home/sahil/.rvm/gems/ruby-1.9.3-p125/bin:/home/sahil/.rvm/gems/ruby-1.9.3-p125@global/bin:/home/sahil/.rvm/rubies/ruby-1.9.3-p125/bin:/home/sahil/.rvm/bin
Вместо этого вам следует добавить /sbin
к своему собственному PATH
.
Как добавить /sbin
вPATH
Поскольку PATH
в основном всегда в среде, вам не нужно его экспортировать, вам просто нужно добавить /sbin
в него каталог. Для того, чтобы сделать это, вы можете выполнить в своем bash
PATH="$PATH:/sbin"
Теперь ваш путь должен выглядеть примерно так:
/home/sahil/.rvm/gems/ruby-1.9.3-p125/bin:/home/sahil/.rvm/gems/ruby-1.9.3-p125@global/bin:/home/sahil/.rvm/rubies/ruby-1.9.3-p125/bin:/home/sahil/.rvm/bin:/usr/local/bin:/usr/bin:/bin:/usr/games:/home/sahil/.rvm/bin{}:/home/android-sdks/{}:/home/android-sdks/platform-tools/{}:/home/android-sdks/tools/{}:/home/sahil/android-sdks/tools{}:/home/sahil/android-sdks/tools:/home/sahil/android-sdks/platform-tools/:/sbin
Это изменение не будет постоянным, как только вы закроете текущую сессию, она PATH
будет перезагружена с предыдущим значением. Чтобы сделать его постоянным, вам следует добавить это изменение в свой ~/.profile
файл. Один из способов сделать это следующий:
echo 'PATH="$PATH:/sbin"' >> ~/.profile
Теперь вам просто нужно выполнить содержимое «~/.profile» в текущей оболочке.
source ~/.profile
Теперь вы готовы к работе, и не только ваша текущая оболочка, но и все ваши будущие сеансы будут содержать PATH
этот каталог.
Почему я использовал ~/.profile вместо ~/.bashrc?
Эта концепция может быть вам полезна:
~/.profile
это место для размещения данных, которые относятся ко всему сеансу, например, программ, которые вы хотите запускать при входе в систему (но не графических программ, они помещаются в другой файл), а также
определений переменных среды.
~/.bashrc
это место для размещения вещей, которые относятся только к самому bash, таких как определения псевдонимов и функций, параметры оболочки и настройки приглашения. (Вы также можете разместить там привязки клавиш, но для bash они обычно находятся в ~/.inputrc.)
Более подробную информацию по этой теме вы здесь не найдете.
Должны ли вы иметь /sbin
в своем PATH
?
Я не собираюсь здесь обсуждать, /sbin
должно ли или не должно быть PATH
по умолчанию, потому что это может оказаться не очень продуктивным обсуждением. У меня это есть, вы можете иметь это, если хотите. Ваш выбор.