- How to add more directiories in PATH [closed]
- 3 Answers 3
- Alternative to $PATH usage
- Dangers of adding to $PATH
- Linux Mint Forums
- Setting PATH environment variable
- Re: Setting PATH environment variable
- Re: Setting PATH environment variable
- Re: Setting PATH environment variable
- Re: Setting PATH environment variable
- Как добавить каталог в PATH в Linux
- Что такое $PATH в Linux
- Добавление каталога в ваш $PATH
- Выводы
- Как добавить путь к каталогу в переменную $PATH
- Просмотр текущих настроенных каталогов в $PATH
- Как временно добавить каталог в $PATH
- Как добавить каталог в $PATH на постоянной основе
How to add more directiories in PATH [closed]
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Okay, first thing first, I’m new to Linux and I’m using Linux Mint. I learned that when I want to add more directories to my PATH (specifically my home directory) I need a Bash command that looks like PATH=$PATH:~ , right? The question is why should I need to put $PATH there? It stands for system path, right? Will it work if I only type PATH=~ ? I mean I only want to add my home directory to the existing PATH directories.
The important word in your question is «add». How would one usually add to a variable? Saying i=3 would not add to the original value of i . The same is true for strings when «add» means «append to».
3 Answers 3
In Unix certain environment variables, such as $PATH are special in the sense that they’re a list of items, not just a single item. With these types of lists, a colon ( : ) separates the items in the list.
For $PATH you can see this if you merely print it:
$ printenv PATH /sbin:/bin:/usr/sbin:/usr/bin
If you want to add additional items to this, you have to include the previous list plus the new item. That’s effectively what you’re doing when you say PATH=$PATH: .
$ PATH=$PATH:/path/to/some/dir $ printenv PATH /sbin:/bin:/usr/sbin:/usr/bin:/path/to/some/dir
Keep in mind that these changes are local only to the shell where you ran them. If you want your changes to $PATH to persist between reboots, or show up in other instances of your shell, you need to add them to a configuration file so that they’ll get setup as part of your defaults.
Typically for user’s this is what you’d do to these files ~/.bashrc & ~/.bash_profile :
export PATH=$PATH:$HOME/bin:$HOME/somedir
Adding a line such as this will modify your $PATH .
Alternative to $PATH usage
If you’d simply like to be able to run scripts and executables that are not in your $PATH that can be easily solved by using this method instead of adding to $PATH .
Here’s a scenario, lets say we have an executable such as this:
$ ls -l helloexec.bash -rwxr-xr-x 1 user1 user1 31 Aug 12 07:45 helloexec.bash
But it’s not on the $PATH so we cannot run it:
$ helloexec.bash bash: helloexec.bash: command not found.
So you’re thinking, oh, I have to add it to my $PATH to be able to run it. But instead, you can run any executable that’s in the current directory like so:
In Unix type operating systems, it’s imperative that you internalize this method of interacting with your scripts and executables, rather than insist that they all be on the $PATH .
Dangers of adding to $PATH
In your examples you show that you’d like to add ~ to your $PATH . I’ve seen many users do this over the years, or want to, thinking that it’ll be a huge convenience & time saver to just put this directory, directly on their $PATH .
This is typically not a good approach to things. Rather, you should think long and hard about where you want to store executables in Linux/Unix, and only add directories that are critically necessary to have such a prominent place such as being on $PATH .
Most will typically add the system directories, and then add a $HOME/bin to the $PATH and leave it at that. Putting more things on the $PATH can lead to unintended consequences such as commands not working as expected or even worse, creating a situation that allows a system to be more easily compromised.
For example, say you downloaded some script from a website, and hadn’t realized that your web browser was changed to save files to $HOME . This downloaded file, is now in a position that it can be invoked by a would be attacker.
Alternatively if you have the order of your $PATH in such a state that ~ comes before other directories, such as something like this:
$ printenv PATH /home/vagrant:/sbin:/bin:/usr/sbin:/usr/bin
And we accidentally downloaded an executable such as this:
$ cat ps #!/bin/bash /bin/ps -eaf | grep -v "spyware"
Now when someone runs ps , they’re using this version and not the intended /bin/ps .
Linux Mint Forums
Forum rules
There are no such things as «stupid» questions. However if you think your question is a bit stupid, then this is the right place for you to post it. Please stick to easy to-the-point questions that you feel people can answer fast. For long and complicated questions prefer the other forums within the support section.
Before you post please read how to get help. Topics in this forum are automatically closed 6 months after creation.
Setting PATH environment variable
Post by capngp » Tue Oct 14, 2014 3:43 pm
I feel silly asking such a basic question, but I can’t seem to find where the PATH
variable gets set in Mint 17 when I fire up a terminal session. It should be in
.bash_profile, but I don’t seem to have that file in my HOME directory. User manual
says nothing, archive search turned up nothing.
Re: Setting PATH environment variable
Post by WharfRat » Tue Oct 14, 2014 4:53 pm
if [ -d "$HOME/script" ] ; then PATH="$HOME/script:$PATH" fi # if [ -e "$HOME/.functions" ] ; then . $HOME/.functions fi # if [ -e "$HOME/.aliases" ] ; then . $HOME/.aliases fi
Re: Setting PATH environment variable
Post by Mute Ant » Tue Oct 14, 2014 5:47 pm
- # *REQUIRED* The default PATH settings, for superuser and normal users.
# (they are minimal, add the rest in the shell startup files)
ENV_SUPATH PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
ENV_PATH PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
BONUS ANSWER
You find stuff like this by searching for files that contain juicy text. In this case, i guessed somewhere in /etc/ and «PATH codebox» translate=»no»>
find 2>/dev/zero /etc -type f | while read a ; do grep 2>/dev/zero -l "PATH=" "$a" ; done
Re: Setting PATH environment variable
Post by capngp » Tue Oct 14, 2014 11:12 pm
For those interested, the PATH variable is set in /etc/environment in Linux Mint 17.
It is R/O for anyone not root.
Re: Setting PATH environment variable
Post by jonas-e » Thu Jan 22, 2015 10:30 am
I googled this and found loads of different confusing ways to add values to e.g. PATH. The options on the command line using export and = only last within that terminal session. The last suggestion in this thread seems simplest to me — and it seems to work. Open /etc/environment as root with a text editor:
sudo gedit /etc/environment
Add the desired variable in the text file separated by colon, save, logout, login — and it is permanently and globally changed — if that’s what you want. In my case added the AndroidSDK path:
echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/etc/android-sdk/android-studio-ide-135.1641136-linux/bin/
Как добавить каталог в PATH в Linux
Когда вы вводите команду в командной строке, вы в основном говорите оболочке запустить исполняемый файл с заданным именем. В Linux эти исполняемые программы, такие как ls , find , file и другие, обычно find в нескольких разных каталогах вашей системы. Любой файл с исполняемыми разрешениями, хранящийся в этих каталогах, может быть запущен из любого места. Наиболее распространенные каталоги, содержащие исполняемые программы, — это /bin , /sbin , /usr/sbin , /usr/local/bin и /usr/local/sbin .
Но как оболочка узнает, в каких каталогах искать исполняемые программы? Оболочка выполняет поиск по всей файловой системе?
Ответ прост. Когда вы вводите команду, оболочка просматривает все каталоги, указанные в $PATH пользователя, в поисках исполняемого файла с таким именем.
В этой статье показано, как добавить каталоги в $PATH в системах Linux.
Что такое $PATH в Linux
Переменная среды $PATH представляет собой список каталогов, разделенных двоеточиями, который сообщает оболочке, в каких каталогах следует искать исполняемые файлы.
Чтобы проверить, какие каталоги находятся в вашем $PATH , вы можете использовать команду printenv или echo :
Результат будет выглядеть примерно так:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
Если у вас есть два исполняемых файла с одинаковым именем, расположенных в двух разных каталогах, оболочка запустит файл, который находится в каталоге, который идет первым в $PATH .
Добавление каталога в ваш $PATH
Бывают ситуации, когда вы можете захотеть добавить другие каталоги в $PATH . Например, некоторые программы могут быть установлены в разных местах или вы можете захотеть иметь специальный каталог для ваших личных сценариев, но иметь возможность запускать их, не указывая абсолютный путь к исполняемым файлам. Для этого вам просто нужно добавить каталог в ваш $PATH .
Допустим, у вас есть каталог bin расположенный в вашем домашнем каталоге, в котором вы храните сценарии оболочки. Чтобы добавить каталог в ваш $PATH введите:
Команда export экспортирует измененную переменную в среду дочернего процесса оболочки.
Теперь вы можете запускать свои сценарии, вводя имя исполняемого сценария без необходимости указывать полный путь к файлу.
Однако это изменение носит временный характер и действует только в текущем сеансе оболочки.
Чтобы сделать изменение постоянным, вам необходимо определить $PATH в файлах конфигурации оболочки. В большинстве дистрибутивов Linux при запуске нового сеанса переменные среды считываются из следующих файлов:
- Глобальные файлы конфигурации оболочки, такие как /etc/environment и /etc/profile . Используйте этот файл, если хотите, чтобы новый каталог был добавлен всем пользователям системы $PATH .
- Файлы конфигурации для конкретной оболочки пользователя. Например, если вы используете Bash, вы можете установить $PATH в файле ~/.bashrc . Если вы используете Zsh, имя файла ~/.zshrc .
В этом примере мы установим переменную в файле ~/.bashrc . Откройте файл в текстовом редакторе и добавьте в конец следующую строку:
Сохраните файл и загрузите новый $PATH в текущий сеанс оболочки с помощью source команды:
Чтобы убедиться, что каталог был успешно добавлен, распечатайте значение вашего $PATH , набрав:
Выводы
Добавить новые каталоги к вашему пользователю или глобальной $PATH довольно просто. Это позволяет выполнять команды и сценарии, хранящиеся в нестандартных местах, без необходимости вводить полный путь к исполняемому файлу.
Те же инструкции применимы для любого дистрибутива Linux, включая Ubuntu, CentOS, RHEL, Debian и Linux Mint.
Не стесняйтесь оставлять комментарии, если у вас есть вопросы.
Как добавить путь к каталогу в переменную $PATH
Когда вы вводите команду в терминал Linux программа выполняется.
Обычно для выполнения пользовательской программы или скрипта нам нужно использовать полный путь к ней, например /path/to/script.sh или просто ./script.sh, если мы уже находимся в его постоянном каталоге.
В качестве альтернативы мы можем выполнять множество команд без указания путей, таких как например up, дата и т.д.
Причина, по которой нам не нужно указывать пути для некоторых команд, заключается в переменной $PATH.
Это переменная, которую можно настроить таким образам, чтобы указать нашей системе Linux, где искать определенные программы.
Таким образом, при вводе date в терминал Linux проверяет переменную $PATH, чтобы увидеть список каталогов для поиска программы.
В этом руководстве мы расммотрим, как добавить каталог в переменную $PATH на Linux.
Это позволит нам вызывать программу или скрипт из любой точки системы без необходимости указывать путь к месту, где мы их сохранили.
Далее покажем, как просматривать каталоги в $PATH и добавлять каталог временно или навсегда в переменную.
Просмотр текущих настроенных каталогов в $PATH
Просмотр текущих настроенных каталогов в $PATH
Просмотреть все каталоги, которые в настоящее время настроены в переменной $PATH вашей системы, очень просто.
Просто используйте команду echo вот таким образом:
Как видите, в $PATH уже хранится несколько разных каталогов.
Это как раз то, что позволяет нам запускать так много команд по умолчанию, не указывая их полное расположение в терминале.
Чтобы узнать, к какому каталогу принадлежит команда, вы можете использовать команду which.
Как временно добавить каталог в $PATH
Чтобы добавить каталог в $PATH для текущего сеанса, используйте следующий синтаксис.
В этом примере мы добавим каталог /bin/myscripts.
$ export PATH="/bin/myscripts:$PATH"
Теперь файлы, которые мы сохранили в каталоге /bin/myscripts, можно запускать где угодно, без указания их полного пути.
Эта конфигурация изменится, когда мы завершим текущий сеанс (перезагрузим компьютер или закроем терминал).
Как добавить каталог в $PATH на постоянной основе
Чтобы добавить каталог в $PATH навсегда, нам нужно отредактировать файл .bashrc пользователя, у которого вы хотите это дело изменить.
Используйте nano или ваш любимый текстовый редактор, чтобы открыть файл, хранящийся в домашнем каталоге.
$ export PATH="/bin/myscripts:$PATH"
export PATH="/bin/myscripts:$PATH"