- Переменная PATH в Linux
- Переменная PATH в Linux
- Выводы
- What is this $PATH in Linux and how to modify it
- 3 Answers 3
- UNIX / Linux: Set your PATH Variable Using set or export Command
- Finding out your current path
- How do I modify my path?
- Bash, Sh, Ksh shell syntax to modify $PATH
- Tcsh or csh shell syntax to modify $PATH
- Examples
Переменная PATH в Linux
Когда вы запускаете программу из терминала или скрипта, то обычно пишете только имя файла программы. Однако, ОС Linux спроектирована так, что исполняемые и связанные с ними файлы программ распределяются по различным специализированным каталогам. Например, библиотеки устанавливаются в /lib или /usr/lib, конфигурационные файлы в /etc, а исполняемые файлы в /sbin/, /usr/bin или /bin.
Таких местоположений несколько. Откуда операционная система знает где искать требуемую программу или её компонент? Всё просто — для этого используется переменная PATH. Эта переменная позволяет существенно сократить длину набираемых команд в терминале или в скрипте, освобождая от необходимости каждый раз указывать полные пути к требуемым файлам. В этой статье мы разберёмся зачем нужна переменная PATH Linux, а также как добавить к её значению имена своих пользовательских каталогов.
Переменная PATH в Linux
Для того, чтобы посмотреть содержимое переменной PATH в Linux, выполните в терминале команду:
На экране появится перечень папок, разделённых двоеточием. Алгоритм поиска пути к требуемой программе при её запуске довольно прост. Сначала ОС ищет исполняемый файл с заданным именем в текущей папке. Если находит, запускает на выполнение, если нет, проверяет каталоги, перечисленные в переменной PATH, в установленном там порядке. Таким образом, добавив свои папки к содержимому этой переменной, вы добавляете новые места размещения исполняемых и связанных с ними файлов.
Для того, чтобы добавить новый путь к переменной PATH, можно воспользоваться командой export. Например, давайте добавим к значению переменной PATH папку/opt/local/bin. Для того, чтобы не перезаписать имеющееся значение переменной PATH новым, нужно именно добавить (дописать) это новое значение к уже имеющемуся, не забыв о разделителе-двоеточии:
Теперь мы можем убедиться, что в переменной PATH содержится также и имя этой, добавленной нами, папки:
Вы уже знаете как в Linux добавить имя требуемой папки в переменную PATH, но есть одна проблема — после перезагрузки компьютера или открытия нового сеанса терминала все изменения пропадут, ваша переменная PATH будет иметь то же значение, что и раньше. Для того, чтобы этого не произошло, нужно закрепить новое текущее значение переменной PATH в конфигурационном системном файле.
В ОС Ubuntu значение переменной PATH содержится в файле /etc/environment, в некоторых других дистрибутивах её также можно найти и в файле /etc/profile. Вы можете открыть файл /etc/environment и вручную дописать туда нужное значение:
sudo vi /etc/environment
Можно поступить и иначе. Содержимое файла .bashrc выполняется при каждом запуске оболочки Bash. Если добавить в конец файла команду export, то для каждой загружаемой оболочки будет автоматически выполняться добавление имени требуемой папки в переменную PATH, но только для текущего пользователя:
Выводы
В этой статье мы рассмотрели вопрос о том, зачем нужна переменная окружения PATH в Linux и как добавлять к её значению новые пути поиска исполняемых и связанных с ними файлов. Как видите, всё делается достаточно просто. Таким образом вы можете добавить столько папок для поиска и хранения исполняемых файлов, сколько вам требуется.
Источник
What is this $PATH in Linux and how to modify it
I have a few questions on this $PATH in Linux.
I know it tells the shell which directories to search for executable files, so:
- What does it mean an environmental variable?
- How to change its path? and is it recommended to change it?
- IF i change it what are the consequences?
3 Answers 3
To get your path current $PATH variable type in:
It tells your shell where to look for binaries.
Yes, you can change it — for example add to the $PATH folder with your custom scripts.
So: if your scripts are in /usr/local/myscripts to execute them you will have to type in a full path to the script: /usr/local/myscripts/myscript.sh After changing your $PATH variable you can just type in myscript.sh to execute script.
Here is an example of $PATH from RHEL:
To change your $PATH you have to either edit
/.bash_profile ) for user or global $PATH setting in /etc/profile .
One of the consequences of having inaccurate $PATH variables is that shell will not be able to find and execute programs without a full $PATH .
Firstly, you are correct in your statement of what $PATH does. If you were to break it somehow (as per your third point), you will have to manually type in /usr/bin/xyz if you want to run a program in /usr/bin from the terminal. Depending on how individual programs work, this might break some programs that invoke other ones, as they will expect to just be able to run ls or something.
So if you were to play around with $PATH, I would suggest saving it somewhere first. Use the command line instruction
to save it in someRandomFile.txt
You can change $PATH using the export command. So
HOWEVER, this will completely replace $PATH with someNewPath. Since items in path are separated by a «:», you can add items to it (best not to remove, see above) by executing
The fact that it is an environmental variable means that programs can find out its value, ie it is something that is set about the environment that the program is running in. Other environmental variables include things like the current directory and the address of the current proxy.
Источник
UNIX / Linux: Set your PATH Variable Using set or export Command
H ow do I add a new path to $PATH variable under Linux and UNIX like operating system? What is my path, and how do I set or modify it using csh/tcsh or bash/ksh/sh shell?
The PATH is an environment variable. It is a colon delimited list of directories that your shell searches through when you enter a command. All executables are kept in different directories on the Linux and Unix like operating systems.
Tutorial details | |
---|---|
Difficulty level | Easy |
Root privileges | No |
Requirements | None |
Est. reading time | 5m |
Finding out your current path
To find out what your current path setting, type the following command at shell prompt. Open the Terminal and then enter:
How do I modify my path?
To modify your path edit $PATH variable as per your shell. The syntax for setting path under UNIX / Linux dependent upon your login shell.
Bash, Sh, Ksh shell syntax to modify $PATH
If you are using bash, sh, or ksh, at the shell prompt, type:
Please feel free to replace /path/to/dir1 with the directory you want the shell to search.
Tcsh or csh shell syntax to modify $PATH
If you are using tcsh or csh, shell enter:
Please feel free to replace /path/to/dir1 with the directory you want the shell to search.
Examples
In this example add /usr/local/bin to your path under BASH/ksh/sh shell, enter:
To make these changes permanent, add the commands described above to the end of your
/.profile file for sh and ksh shell, or
/.bash_profile file for bash shell:
KSH/sh shell user try:
In this final example add /usr/local/bin/ and /scripts/admin/ to your path under csh / tcsh shell, enter:
To make these changes permanent, add the commands described above to the end of your
- No ads and tracking
- In-depth guides for developers and sysadmins at Opensourceflare✨
- Join my Patreon to support independent content creators and start reading latest guides:
- How to set up Redis sentinel cluster on Ubuntu or Debian Linux
- How To Set Up SSH Keys With YubiKey as two-factor authentication (U2F/FIDO2)
- How to set up Mariadb Galera cluster on Ubuntu or Debian Linux
- A podman tutorial for beginners – part I (run Linux containers without Docker and in daemonless mode)
- How to protect Linux against rogue USB devices using USBGuard
Join Patreon ➔
To verify new path settings, enter:
$ echo $PATH
See also
🐧 Get the latest tutorials on Linux, Open Source & DevOps via
Category | List of Unix and Linux commands |
---|---|
Documentation | help • mandb • man • pinfo |
Disk space analyzers | df • duf • ncdu • pydf |
File Management | cat • cp • less • mkdir • more • tree |
Firewall | Alpine Awall • CentOS 8 • OpenSUSE • RHEL 8 • Ubuntu 16.04 • Ubuntu 18.04 • Ubuntu 20.04 |
Linux Desktop Apps | Skype • Spotify • VLC 3 |
Modern utilities | bat • exa |
Network Utilities | NetHogs • dig • host • ip • nmap |
OpenVPN | CentOS 7 • CentOS 8 • Debian 10 • Debian 8/9 • Ubuntu 18.04 • Ubuntu 20.04 |
Package Manager | apk • apt |
Processes Management | bg • chroot • cron • disown • fg • glances • gtop • jobs • killall • kill • pidof • pstree • pwdx • time • vtop |
Searching | ag • grep • whereis • which |
Shell builtins | compgen • echo • printf |
Text processing | cut • rev |
User Information | groups • id • lastcomm • last • lid/libuser-lid • logname • members • users • whoami • who • w |
WireGuard VPN | Alpine • CentOS 8 • Debian 10 • Firewall • Ubuntu 20.04 |
Comments on this entry are closed.
I am a newbie on Linux.
I would like to ask if I can include an environment variable (e.g. ARCHIVES) that points to a directory (e.g. EXPORT ARCHIVES=/some/path/directory) to the .bash_profile, so that I dont do exporting all the time, everytime I need to use the directory?
How to set the CLASSPATH??
Or add as follows to your .bashrc file:
“echo ‘export PATH=$PATH:/usr/local/bin’ >>
Isn’t echo ” ‘PATH=$PATH:/usr/local/bin’ >>
/.bashrc ” a better idea?
how can I remove a path variable??
Hi,
To remove a path, go to”File System”. Open
/etc folder and edit (that is, remove )the path from the ‘environment’ text file. You can edit using the sudo command. Following are the commands.
cd
cd etc
sudo gedit environment
After removing the path from the “environment” file, save and restart the machine
Hi,
There was one mistake. It is “cd /”, not “cd
”
To remove a path, go to”File System”. Open
/etc folder and edit (that is, remove )the path from the ‘environment’ text file. You can edit using the sudo command. Following are the commands.
cd /
cd etc
sudo gedit environment
After removing the path from the “environment” file, save and restart the machine
To add a PATH for any user with sh or bash shell permanantly use the following steps.
1. Create a new file .profile in root(/) directory.
2. Add the following lines into it
PATH= path to enter
export PATH
3.save the file
4.exit and login to server again
5.check using echo $PATH
IT will work. Please let me know if tou have any queries on this .
The above one is only for root user
When I run my program I get this result:
terminate called after throwing an instance of ‘std::logic_error’
what(): basic_string::_S_construct NULL not valid
Aborted
Is this a result of having the wrong environment variable on my path or what. The program compiles without any errors. This is happening on Ubuntu (Linux, OS 10.0)
Could any one explain me about the functionality of command in shell script
set -xv
. /opt/app/etl/bin/profile.ksh
. `dirname $0`/env.cfg
Print input commands and their arguments as they are executed –> when you use set -xv
Hi there, thanks fo the article!
FYI, I just tried the syntax above for a tcsh but it didn’t work.
This works:
(Include this line directly in your .cshrc file. This example adds a dir called
/bin and your current dir to the previously existing PATH)
(Or, if you don’t want to open and edit your
/.cshrc file, type this in a teminal:)
Thanks for the heads up. The faq has been updated with correct syntax. FYI, the syntax setenv PATH $
Appreciate your post.
it helps me lots thanks………….
Hi :
I am new to linux.
May I ask how to convert this bash to tcsh?
Best Regards,
McGrady
why would this code be on my computer in a install file with along with macports pubkey and several other files.
SET doesn’t seem to do anything.
PATH as a variable name is case sensitive by me, but in this tut, this gets ignored.
Very bad. Didn’t helped me at all.
by mistake i changed defaults PATH ,how can i get default PATH from command line
i can’t even vi that hiden files
I have a machine that is running on kernel 2.6.32-504.16.2.el6.x86_64, I want to build a custom kernel using the same kernel on the same machine, but when I run make menuconfig, I get the following error
*** Unable to find the ncurses libraries or the
*** required header files.
*** ‘make menuconfig’ requires the ncurses libraries.
***
*** Install ncurses (ncurses-devel) and try again.
***
make[1]: *** [scripts/kconfig/dochecklxdialog] Error 1
make: *** [menuconfig] Error 2
I have the ncurses installed already in /lib64 and modified my PATH to point to /lib64, but I still get the same error, it looks like that it can not be found. does anyone have an idea why this is not working?
Install “ncurses-devel” package and try again.
Источник