Мой вопрос связан с другим открытым вопросом . Мой 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.
Ищу помощь, как решить эту проблему. И почему это происходит?
Вы можете легко решить эту проблему, добавив /sbin
к $PATH
. Более важный момент заключается в том, что у вас не должно быть /sbin
в пути по умолчанию .
См. На этой странице описание того, почему: /sbin
определение каталога
/sbin
содержит системные утилиты, которые должны запускаться пользователем root или с правами sudo. Поэтому, если вы хотите увидеть конфигурацию своей сети, просто введите:
sudo /sbin/ifconfig
Вам будет предложено ввести пароль, а затем ifconfig
запустится.
Ваш оригинальный $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
.
См. rubygems документы о том, как это сделать.
/ sbin обычно является частью пути. Другие дистрибутивы, такие как fedora, не имеют его в PATH для обычных пользователей, но я думаю, что Ubuntu всегда есть. Я предлагаю вам проверить файл / etc / environment и посмотреть, является ли он действительным и к пути добавлен / sbin. Когда я запускаю cat / etc / environment , я получаю следующий вывод:
adnan@adnan-laptop:~$ cat /etc/environment
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
Как вы можете видеть, / sbin уже является частью переменной окружения PATH. Если ваш файл имеет такое же содержимое, проверьте его разрешения, иначе добавьте / sbin в PATH в этом файле. Для меня разрешения:
adnan@adnan-laptop:~$ ls -l /etc/environment
-rw-r--r-- 1 root root 79 2009-10-29 01:55 /etc/environment
Что такое переменная 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?
Эта концепция может быть полезна для вас:
blockquote>
~/.profile
- это место для размещения материалов, относящихся ко всему сеансу, таких как программы, которые вы хотите запустить при входе в систему (но не графические программы, они переходят в другой файл), и
[ 1125] определения переменных среды.
~/.bashrc
- это место для размещения материалов, которые применяются только к самому bash, таких как определения псевдонимов и функций, параметры оболочки и настройки приглашений. (Вы также можете разместить здесь привязки клавиш, но для bash они обычно идут в ~ / .inputrc.)Вы не можете получить больше информации об этой теме здесь . [+1124]
Если у вас есть
/sbin
в вашемPATH
?Я не буду обсуждать здесь, если
/sbin
должно или не должно быть вPATH
по умолчанию потому что это может оказаться не очень продуктивным обсуждением здесь. У меня есть, вы можете иметь это, если хотите. Ваш звонок.
Попробуйте команду ниже
export PATH=$PATH:/usr/sbin
ИЛИ (если вы хотите установить все пути)
export PATH=$PATH:/usr/sbin:/usr/local/sbin:/usr/local/bin:/usr/bin:/sbin:/bin:/usr/games