У меня есть много инструментов командной строки, которые я часто использую. Я использовал обычный метод, чтобы пройти полный путь этой команды через терминал, а затем выполнил ./ command-name , НО это трудоемкая и трудоемкая задача.
Изучая тему «Как выполнить команду из любого места через терминал», я нашел решение включить путь в переменную окружения (путем редактирования ./bashrc).
Это отлично работает.
Я даже обнаружил, что все команды, которые работают глобально (например, mkdir, ifconfig, cp и т. Д.), Находятся в каталоге "/ bin".
При включении «символических ссылок» моих команд в каталог «/ bin» все работает нормально, и я могу выполнять команды из любой точки терминала.
Мой вопрос
Безопасно ли размещать символические ссылки в каталоге / bin напрямую. Я спрашиваю об этом, потому что при размещении символических ссылок он запрашивал у меня пароль администратора.
Будет ли какая-либо разница, если я поместу символические ссылки команд в / bin по сравнению с каталогом / usr / bin?
Среда (если это имеет значение):
Ubuntu 13.10, 32-разрядная версия.
Не рекомендуется связываться с /bin
и с /usr/bin
, даже если это сработает, это несколько небезопасно. Кроме того, вам не нужно размещать там свои символические ссылки.
У меня была такая же проблема, как вы упомянули. Трудно переходить к своим сценариям и каждый раз называть их ./myscript
. Вот что я сделал.
Вы можете создать свой собственный каталог bin и поместить туда свои скрипты. Создайте его с помощью
mkdir ~/bin
Теперь вам нужно будет изменить переменную окружения PATH. Это чувствительная область. Если вы испортите переменную PATH, вы больше не сможете выполнять команды с относительными путями. Если это произойдет, ls
может больше не работать /bin/ls
все равно будет работать.
То, что я сейчас покажу, повлияет только на текущую сессию терминала. Поэтому, если что-то пойдет не так, вы просто выйдите из системы с помощью Ctrl kbd> + D kbd> и все будет так, как было раньше.
echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games
export PATH=$PATH:~/bin
echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games:/home/madmike/bin
Команда echo
показывает, что находится в $ PATH до и после. export
позволяет изменить переменную среды. Ваш дополнительный каталог bin добавляется в конец переменной. Это означает, что ваши команды имеют приоритет наименьший , если существует более одной команды с одинаковым именем. Это хорошо, так как вы не хотите переопределять основные системные команды.
Чтобы сделать изменения постоянными, отредактируйте файл ~ / .bashrc.
nano ~/.bashrc
добавить export PATH=$PATH:~/bin
в конец этого файла.
Теперь в каждом новом терминальном сеансе переменная $ PATH будет расширяться с помощью вашего каталога.
Прежде чем ответить на ваш вопрос, позвольте мне немного объяснить, «как это работает».
В вашей системе у вас есть Environment Variables
. Одна из них PATH
- переменная, в которой хранится набор каталогов, в которых находятся исполняемые программы и скрипты. В Linux по умолчанию PATH
хранят несколько каталогов. Один из них /bin
. Поэтому вы можете выполнить любую программу, которая находится в /bin
. Вы можете проверить переменную PATH
, выполнив это:
echo $PATH
В PATH
порядок переменных в каталогах важен . Имена путей с наивысшим приоритетом указываются первыми.
Теперь отвечаю на ваши вопросы:
Да, безопасно создать символическую ссылку в /bin
. Конечно, если вы не переписываете другие исполняемые файлы . Но вы должны предпочесть использовать /usr/local/bin
. Это также должно быть в вашем PATH
.
Да, это так. В зависимости от порядка в PATH
. Например, если вы поместите символические ссылки из разных файлов, но с одинаковыми именами в /bin
и /usr/bin
и /usr/bin
, включенные в PATH
ранее, чем /bin
, тогда он будет использовать символическую ссылку из /usr/bin
. [ тысяча сто двадцать девять] [одна тысяча сто двадцать два]
Вы можете прочитать об Иерархии Файловой Системы здесь
Об переменных среды Ubuntu здесь
Безопасно ли размещать символические ссылки непосредственно в каталоге / bin. Я спрашиваю об этом, потому что при размещении символических ссылок он спрашивал у меня пароль администратора.
Существует угроза безопасности. Я действительно не думаю, что было бы разумно помещать ваши собственные символические ссылки в каталог / bin, потому что не только ваши команды становятся глобальными, но и символические ссылки могут быть легко разорваны. Переменная окружения bash PATH является более надежным решением.
Будет ли это создавать какую-то разницу, если я помещу символические ссылки команд в / bin по сравнению с каталогом / usr / bin?
Нет. Хотя согласно Стандарту Иерархии Файловых Систем (FHS) есть разница между / bin и /usr/bin.
/bin
Основные двоичные файлы команд, которые должны быть доступны в однопользовательском режиме; для всех пользователей, например, cat, ls, ср.
/usr/bin
второстепенные двоичные файлы команд (не требуются в однопользовательском режиме); для всех пользователей.
Но разница не так важна сегодня. На самом деле в некоторых дистрибутивах (особенно в Fedora) существует тенденция исчезать из каталога / bin.
НЕТ !!! Не прикасайтесь к системным каталогам. Каждый сценарий или программу, которую вы написали, вы обычно должны помещать в каталоги /usr/local/bin
и /usr/local/sbin
. И добавление каталогов в PATH не очень хорошая идея, потому что это создает угрозу безопасности.
Кроме того, разница между теми каталогами, которые есть для суперпользовательских программ.