Змінне оточення PATH. Змінні оточення в Linux Змінні оточення path linux

Мені цікаво, де новий шлях повинен бути доданий до змінного середовища PATH . Я знаю, що це може бути виконано шляхом редагування.bashrc (наприклад), але неясно, як це зробити.

Таким чином:

Export PATH=~/opt/bin:$PATH

Export PATH=$PATH:~/opt/bin

11 відповідей

Простий матеріал

PATH=$PATH:~/opt/bin PATH=~/opt/bin:$PATH

залежно від того, чи хочете ви додати в кінець код ~/opt/bin (для пошуку по всіх інших каталогах, якщо є програма з тим самим ім'ям у декількох каталогах) або на початок (для пошуку перед іншими каталогами).

Ви можете додати кілька записів одночасно. PATH=$PATH:~/opt/bin:~/opt/node/bin або зміни в порядку впорядкування просто відмінно.

Вам не потрібно export , якщо змінна вже знаходиться в середовищі: будь-яка зміна значення змінної відображається в середовищі. всі системи unix встановлюють його дуже рано (зазвичай у першому процесі, фактично).

Якщо ваш PATH створюється багатьма різними компонентами, ви можете отримати дублікати записів. Див. Як додати шлях до домашньої директорії, який буде виявлено Unix, який команду? і Видаліть повторювані записи $ PATH за допомогою команди awk , щоб уникнути дублювання або видалити їх.

Де поставити

Зверніть увагу, що ~/.bash_rc не читається якоюсь програмою, а ~/.bashrc - це файл конфігурації інтерактивних екземплярів bash. Ви не повинні визначати змінні середовища в ~/.bashrc. Правильне місце для визначення змінних середовища, таких як PATH це ~/.profile (або ~/.bash_profile , якщо вам не подобаються оболонки крім bash). Див. У чому різниця між ними і який я повинен використовувати?

Нотатки про оболонки, відмінні від bash

У bash, ksh і zsh, export - спеціальний синтаксис, і обидва PATH=~/opt/bin:$PATH і export PATH=~/opt/bin:$PATH робити правильні речі навіть. В інших оболонках Bourne /POSIX, таких як тире (який є /bin/sh на багатьох системах), export аналізується як звичайна команда, що має на увазі дві відмінності:

  • ~ аналізується тільки на початку слова, крім призначень (див. Як додати шлях до домашнього каталогу, який буде виявлено Unix, для якого потрібна команда? ;
  • $PATH зовнішні подвійні лапки breaks if PATH містить пробіли або \[*? .

Отже, в оболонках, таких як тире, export PATH=~/opt/bin:$PATH встановлює PATH у літеральний рядок ~/opt/bin/: , за яким слідує значення PATH до першого місця. PATH=~/opt/bin:$PATH (просте призначення) не вимагає лапок і робить все правильно. Якщо ви хочете використовувати export у переносному скрипті, вам потрібно написати export PATH="$HOME/opt/bin:$PATH" або PATH=~/opt/bin:$PATH export PATH (або PATH=$HOME/opt/bin: $PATH export PATH для переносимості навіть оболонки Bourne, яка приймає export var=value і робив розширення тильды).

¹ Це було неправильно в оболонках Bourne (як у реальній оболонці Bourne, а не в сучасних оболонках у стилі POSIX), але ви навряд чи зіткнетеся з такими старими оболонками у наші дні. Суб>

У будь-якому випадку працює, але вони не роблять те саме: елементи PATH перевіряються зліва направо. У першому прикладі виконувані файли ~/opt/bin будуть мати пріоритет над встановленими, наприклад, /usr/bin , що може бути або не бути тим, що ви хочете.

Зокрема, з точки зору безпеки небезпечно додавати шляхи до фронту, тому що, якщо хтось може отримати доступ на запис до вашого ~/opt/bin , вони можуть помістити для наприклад інший ls , який ви, ймовірно, будете використовувати замість /bin/ls , не помітивши. Тепер уявіть собі те саме для ssh або вашого браузера або вибору ... (Те ж саме в три рази помістити на ваш шлях.)

Я заплутався в питанні 2 (оскільки він видалений з питання, оскільки він був пов'язаний з не пов'язаною проблемою):

Який ефективний спосібдодавання додаткових шляхів у різні рядки? Спочатку я думав, що це може зробити трюк:

Export PATH=$PATH:~/opt/bin export PATH=$PATH:~/opt/node/bin

Але це тому, що друге призначення як додає ~/opt/node/bin , але й призначений раніше PATH .

Це можливе обхідне рішення:

Export PATH=$PATH:~/opt/bin:~/opt/node/bin

Але для зручності читання я хотів би мати одне призначення для одного шляху.

Якщо ви скажете

PATH=~/opt/bin

це all, яка буде у вашому PATH. PATH - це просто змінне середовище, і якщо ви хочете додати до PATH, вам потрібно перебудувати змінну саме з потрібним вмістом. Тобто те, що ви даєте як приклад на питання 2, - це саме те, що ви хочете зробити, якщо я не повністю втратив точку питання.

Я використовую обидві форми у своєму коді. У мене є спільний профіль, який я встановлюю на кожну машину, на якій я працюю, яка виглядає так: для розміщення каталогів, що потенційно зникли:

Export PATH=/opt/bin:/usr/local/bin:/usr/contrib/bin:/bin:/usr/bin:/usr/sbin:/usr/bin/X11 # додаткові елементи для bindir $HOME/local/bin $HOME/bin; do if [-d $bindir]; then PATH=$PATH:$(bindir) fi done

Linux визначає шлях пошуку зі змінною оточення $PATH . Щоб додати каталог /дані /myscripts на початок змінного оточення $PATH , використовуйте таке:

PATH=/data/myscripts:$PATH

Щоб додати цей каталог до кінця шляху, використовуйте таку команду:

PATH=$PATH:/data/myscripts

Але попередні недостатньо, тому що, коли ви встановлюєте змінне середовище всередині скрипту, ця зміна діє тільки всередині скрипту. Це обмеження обмежено двома способами:

  • Якщо всередині скрипта ви експортуєте змінну оточення, вона ефективна в рамках будь-яких програм, що викликаються скриптом. Зверніть увагу, що це не є ефективним у програмі, яка викликала сценарій.
  • Якщо програма, що викликає сценарій, робить це шляхом увімкнення замість виклику, будь-які зміни середовища в скрипті ефективні в програмі, що викликає. Таке включення може бути виконане за допомогою команди dot чи вихідної команди.

$HOME/myscript.sh source $HOME/myscript.sh

Включення в основному включає «скрипт, що викликається» в сценарії «дзвінка». Це схоже на #include у C. Таким чином, він ефективний усередині скрипту або програми виклику. Але, звичайно, це не ефективно для будь-яких програм або скриптів, що викликаються програмою, що викликає. Щоб зробити його ефективним аж до ланцюжка викликів, ви повинні слідувати настроюванню змінного середовища за допомогою команди export.

Як приклад, програма оболонки bash включає вміст файлу.bash_profile по включенню. Отже, розмістіть наступні 2 рядки в.bash_profile:

PATH=$PATH:/data/myscripts export PATH

ефективно поміщає ці 2 рядки коду у програму bash. Таким чином, bash змінна $PATH включає $HOME/myscript.sh , і через інструкцію експорту будь-які програми, викликані bash, мають змінену змінну $PATH . І оскільки будь-які програми, які ви запускаєте із запрошення bash, викликаються bash, новий шлях діє для всього, що ви запускаєте із запрошення bash.

Суть у тому, що для додавання нового каталогу в дорогу вам необхідно додати або додати каталог до змінного середовища $PATH у скрипті, включеному в оболонку, і ви повинні експортувати $PATH змінне середовище.

Протягом деякого часу я зберіг зі мною дві функції pathadd і pathrm, які допомагають додавати елементи в дорогу, не переймаючись дублюванням.

pathadd приймає один аргумент шляху і необов'язковий аргумент after , який, якщо він буде доданий, додасться до PATH, інакше він додасть його.

У будь-якій ситуації, якщо ви додаєте шлях, ви, ймовірно, хочете перевизначити все, що вже є в дорозі, тому я волію додавати за замовчуванням.

Pathadd() ( newelement=$(1%/) if [ -d "$1" ] && ! echo $PATH | grep -E -q "(^|:)$newelement($|:)" ; then if [ " $2" = "after" ] ; PATH="$PATH:$newelement" else PATH="$newelement:$PATH" fi fi ) pathrm() ( PATH="$(echo $PATH | sed -e "s; \(^\|:\)$(1%/)\(:\|\$\);\1\2;g" -e "s;^:\|:$;;g" -e "s ;::;;:;g")" )

Помістіть їх у будь-який скрипт, який ви хочете змінити середовище PATH, і тепер ви можете зробити.

Pathadd "/foo/bar" pathadd "/baz/bat" after export PATH

Вам гарантовано не додавати шлях, якщо вона вже існує. Якщо ви хочете, щоб спочатку був запущений /baz/bat .

Pathrm "/baz/bat" pathadd "/baz/bat" export PATH

Тепер будь-який шлях можна переміщати на передній план, якщо він вже перебуває на шляху без подвоєння.

Куленепробивний спосіб додавання /попередньої підготовки

Існує безліч міркувань, пов'язаних з вибором додавання та додавання. Багато з них описані в інших відповідях, тому я не повторюватиму їх тут.

Важливим моментом є те, що навіть якщо системні скрипти не використовують це (цікаво, чому) * 1 , куленепробивний спосіб додавання шляху (наприклад, $HOME/bin) до змінного середовища PATH

PATH="$(PATH:+$(PATH):)$HOME/bin"

для додавання (замість PATH="$PATH:$HOME/bin") та

PATH="$HOME/bin$(PATH:+:$(PATH))"

для додавання (замість PATH="$HOME/bin:$PATH")

Це дозволяє уникнути помилкового ведучого/кінцевого двокрапки, коли $PATH спочатку порожній, що може мати небажані побічні ефекти і може стати кошмаром, невловимо знайти (ця відповідь коротко розглядає випадок awk-way).

$(parameter:+word)

Якщо параметр parameter має значення null чи unset, нічого не замінюється, інакше замінюється слово word .

Таким чином, $(PATH:+$(PATH):) розширюється до: 1) нічого, якщо PATH має значення null або unset; 2) $(PATH): , якщо встановлено PATH .

Примітка. Це є для bash.

* 1 Я тільки-но знайшов, що скрипти на зразок devtoolset-6/enable дійсно використовують це, $ cat /opt/rh/devtoolset-6/enable # General environment variables export /bin$(PATH:+:$(PATH)) ...

Я не можу говорити для інших дистрибутивів, але Ubuntu має файл /etc /environment, який є стандартним пошуковим шляхом для всіх користувачів. Оскільки мій комп'ютер використовується тільки мною, я розміщую будь-які каталоги, які я хочу на свій шлях там, якщо це не тимчасове доповнення, яке я ввів у скрипт.

Для мене (в Mac OS X 10.9.5) додавання імені шляху (наприклад, /mypathname) у файл /etc/paths працювало дуже добре.

Перед редагуванням повертається echo $PATH:

/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin

Після редагування /etc/paths та перезапуску оболонки змінна $PATH додається за допомогою /pathname . Дійсно, echo $PATH повертає:

/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/mypathname

Сталося так, що /mypathname був доданий до змінної $PATH .

Змінні оточенняу Linux - це спеціальні змінні, визначені оболонкою та використовувані програмами під час виконання. Вони можуть визначатися системою та користувачем. Системні змінні оточення Linux визначаються системою та використовуються програмами системного рівня.

Наприклад, команда PWD використовує системну змінну, щоб зберігати колишню робочу директорію. Змінні оточення користувача встановлюються користувачем, для поточної оболонки, тимчасово або постійно. Вся концепція додавання та видалення змінних оболонок крутиться навколо кількох файлів, команд та різних оболонок.

Якщо дивитися ширше, змінна оточення може бути трьох типів:

1. Локальні змінні оточення

Ці змінні визначені лише поточної сесії. Вони будуть безповоротно стерті після завершення сесії, будь то віддалений доступабо емулятор терміналу. Вони не зберігаються в жодних файлах, а створюються та видаляються за допомогою спеціальних команд.

2. Користувальницькі змінні оболонки

Ці змінні оболонки в Linux визначаються для конкретного користувача і завантажуються кожного разу, коли він входить в систему за допомогою локального терміналу, або підключається віддалено. Такі змінні, як правило, зберігаються у файлах конфігурації: .bashrc, .bash_profile, .bash_login, .profile або інших файлах, розміщених у директорії користувача.

3. Системні змінні оточення

Ці змінні доступні у всій системі для всіх користувачів. Вони завантажуються при старті системи з системних файлівконфігурації: /etc/environment, /etc/profile, /etc/profile.d/ /etc/bash.bashrc.

Конфігураційні файли змінних оточення Linux

Тут ми коротко розглянемо різні конфігураційні файлиперераховані вище, які використовуються для налаштування змінних оточення для всієї системи або конкретного користувача.

.bashrc

Це файл змінних конкретного користувача. Завантажується щоразу, коли користувач створює термінальний сеанс, тобто, простіше кажучи, відкриває новий термінал. Всі змінні оточення, створені в цьому файлі набирають чинності щоразу, коли почалася нова термінальна сесія.

.bash_profile

Ці змінні набувають чинності щоразу, коли користувач підключається віддалено по SSH. Якщо цей файл відсутній система буде шукати .bash_login або .profile.

/etc/environment

Цей файл для створення, редагування та видалення будь-яких змінних оточення на системному рівні. Змінні оточення, створені в цьому файлі, доступні для всієї системи, для кожного користувача і навіть при віддаленому підключенні.

/etc/bash.bashrc

Системний bashrc. Цей файл виконується для кожного користувача, кожен раз, коли він створює нову термінальну сесію. Це працює тільки для локальних користувачів, при підключенні через інтернет, такі змінні не буде видно.

/etc/profile

Системний файл profile. Всі змінні з цього файлу доступні будь-якому користувачеві в системі тільки якщо він увійшов віддалено. Але вони не будуть доступні при створенні локальної термінальної сесії, тобто, якщо ви просто відкриєте термінал.

Всі змінні оточення Linux створені за допомогою цих файлів, можуть бути видалені лише видаленням їх звідти. Тільки після кожної зміни потрібно або вийти і зайти в систему, або виконати цю команду:

source имя_файла

Додавання користувацьких та системних змінних оточення до Linux

Тепер, коли ви знаєте небагато теорії, перейдемо до практики. Локальні змінні оточення в Linux можна створювати такими командами:

var=значення
$ export var = значення

Ці змінні будуть доступні лише для поточної термінальної сесії.

Для видалення змінних оточення можна використовувати декілька команд:

1. Використання env

За промовчанням за допомогою env можна переглянути всі встановлені змінні середовища. Але з опцією -i вона дозволяє тимчасово видалити всі змінні оболонки та виконати команду без змінних.

env -i команда

Var – це будь-яка змінна, яку ви хочете передати цій команді.

Така команда запустить оболонку взагалі без змінних оточення:

Після запуску такого оточення не буде доступно жодних змінних, але після виходу все повернеться на свої місця.

2. Використання unset

Це інший спосіб видалення змінних оточення Linux. Unset видаляє змінну на ім'я до кінця поточної сесії:

unset ім'я_змінної

3. Встановити значення змінної в ""

Це найпростіший спосіб видалення змінних оточення в Linux, встановлюючи порожнє значення змінної ви видаляєте її до кінця поточної сесії.

Зауваження: За допомогою таких способів ви можете змінювати значення системних або змінних користувачів, але вони будуть актуальні тільки для поточного сеансу.

Створення користувацьких та системних змінних оточення

У цьому розділі розглянемо як встановити та видалити системні та користувацькі змінні не тільки для поточного сеансу, а так, щоб ефект зберігався після перезавантаження.

1. Встановлюємо та видаляємо локальні змінні в Linux

Давайте створимо локальну змінну VAR і встановимо їй будь-яке значення, потім видалимо її за допомогою unset і переконаємося, що вона видалена:

VAR1="Losst"
$ echo $VAR1
$ unset VAR1
$ echo $VAR1

Інший спосіб створити змінну – команда export. Видалимо її надавши порожнє значення:

export VAR="Losst"
$ echo $VAR
$ VAR =
$ echo $VAR

Тепер створимо змінну VAR2 також задамо їй значення. А потім тимчасово видалимо всі локальні змінні, виконавши env -i. Вона запустить оболонку без будь-яких змінних. Після введення exit усі змінні будуть відновлені.

VAR2="Losst"
$ echo $VAR2
$ env -i bash
$ echo $VAR2

Встановлення та видалення змінних користувачів

Відредагуйте файл.bashrc у вашій домашній директорії, додавши команду export, для експортування потрібної змінної. Потім виконайте команду source, щоб застосувати зміни. Створимо, наприклад, змінну CD:

Додайте такий рядок (o, потім вставити, потім Esc і: wq):

export CD="This is Losst Home"

Тепер залишилося оновити конфігурацію:

source .bashrc
$ echo $CD

Для видалення цієї змінної просто видаліть її.bashrc.

Тепер додамо змінну оточення за допомогою .bash_profile. Ця змінна, як ви вже знаєте, буде доступна тільки при віддаленому вході:

vi .bash_profile

Додати рядок:

export VAR2="This is Losst Home"

І виконайте ці команди, щоб застосувати зміни та перевірити додавання змінної:

source .bash_profile
$ echo $VAR2

Змінна недоступна, оскільки ви створили локальну сесію, тепер підключіться по ssh:

ssh user@localhost
$ echo $VAR2

Видалити цю змінну оточення можна так само, як і в попередньому випадку, видаливши її з файлу.

Примітка: Ці змінні доступні завжди, але не всім користувачам.

Встановлення та видалення системних змінних оточення

Створимо змінну, доступну для всіх користувачів, у всіх термінальних сесіях, крім віддалених, додаванням її до /etc/bash.profile:

vi /etc/bash.profile

export VAR="This is system-wide variable"

Потім оновлюємо:

source /etc/bash.bashrc

Тепер ця змінна доступна всім користувачам, у всіх терміналах:

echo $VAR
$ sudo su
$ echo $VAR
$ su -
$ echo $VAR

Якщо ви хочете зробити змінну оточення доступною для всіх користувачів, які підключаються до цієї машини віддалено, відредагуйте файл /etc/profile:

export VAR1="Ця система має широку функцію для лише remote sessions"

Оновіть конфігурацію та перевірте доступність змінної, вона буде доступна лише віддалено:

source /etc/profile
$ echo $VAR1

Якщо потрібно додати змінну оточення до Linux, так щоб вона була доступна і віддалено, і для локальних сесій, експортуйте її в /etc/environment:

vi /etc/environment

export VAR12="I am available everywhere"

Перевіряємо:

source /etc/environment
$ echo $VAR12
$ sudo su
$ echo $VAR12
$ exit
$ssh localhost
$ echo $VAR12

Що це таке? Багато команд, які ви вводите в командному рядку, Вимагають застосування зовнішньої програми, що завантажується з файлової системи. Наприклад, такі команди, як mkdir і wc, насправді знаходяться в папці /bin.

Коли ви вводите інструкцію, яку оболонка Bash не розпізнає, вона намагається виконати її як програму та повертає помилку, якщо не знаходить програму з таким ім'ям. І це стосується не тільки основних команд, які ми розглядали, тому що з командного рядка ви можете запустити будь-яку програму.


Але як за наявності у файловій системі Linuxзнає які програми, з яких каталогів запускати? ОС використовує системну змінну оточення для вказівки підмножини папок, у яких слід шукати при отриманні невідомої команди. Ця змінна називається PATH і може бути виведена на екран наступною командою echo (символ $ обов'язковий):

Echo $PATH

Результат виконання цієї команди буде виглядати на зразок наступних семи абсолютних шляхів до папок, розділених двокрапками:

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

При кожному введенні невідомої команди Linux переглядатиме кожну з папок, зазначених у змінній оточенні, в порядку їх завдання, намагаючись знайти програму з тим самим ім'ям. Якщо програму знайдено, вона запускається; в іншому випадку виводиться повідомлення про помилку. Але не буде помилкою, якщо ви купите своє улюблене срібні кільця в подарунок. Срібло прикрасить будь-яку жінку!

Ці сім папок забезпечують легкий доступ до всіх основних програм операційній системівключаючи . Будь-які програми за межами цих семи папок не можуть бути запущені простим введенням їхнього імені в командному рядку.

Наприклад, ви завантажили з Інтернету у вашу домашню папку утиліту diary. Якщо ви введете її ім'я в командному рядку, отримайте повідомлення про помилку, тому що вона знаходиться в папці, не включеній до системного шляху. Для виконання цієї програми слід ввести наступний рядок (нагадую, що символ ~ - скорочене позначення вашої домашньої папки):

Якщо ви зберегли її в папці за межами заданого шляху, вам доведеться для запуску утиліти ввести абсолютний шлях та ім'я файлу.

Звичайно передбачається, що diary - проста автономна програма, що не вимагає установки, тому що більшість основних додатків в процесі установки помістять файл програми, що виконується, куди-небудь у ваш заданий шлях. Ось така змінна оточення PATH, користуйтесь на здоров'я!

Всі файли в Linux мають певну адресу в файловій системі, за допомогою якого ми можемо отримати доступ до них за допомогою файлового менеджера або консольних утиліт. Це досить проста тема, але у багатьох новачків із цим виникають труднощі.

У сьогоднішній невеликій замітці ми розглянемо що таке шлях до файлу Linux, яким він може бути, як правильно його писати та багато іншого. Якщо раніше у вас виникали проблеми, то після прочитання статті все стане цілком зрозуміло.

Шляхи файлів у Linux

Файлова система Linux дуже відрізняється від Windows. Ми не розглядатимемо її структуру, це було зроблено раніше. Ми зосередимося на роботі із файлами.

Найголовніша відмінність, у тому, що адреса файлу починається не з диска, наприклад, C:\ або D:\ як це відбувається в Windows, а з кореня, кореневого системного каталогудо якого підключені всі інші. Його адреса - /. І тут слід сказати про адреси. Шляхи файлів linux використовують прямий сліш "/" для поділу каталогів на адресу, і це відрізняється від того, що ви звикли бачити в Windows - \.

Наприклад, якщо в Windows повнийшлях до файлу на робочому столі виглядав C:UsersSergiyDesktop то шлях файлу в linux буде просто /home/sergiy/desktop/. З цим поки що все просто і зрозуміло. Але проблеми виникають далі.

В операційній системі Linux може бути кілька видів шляхів до файлу. Давайте розглянемо які бувають шляхи у linux:

  • Повний абсолютний шлях linux від кореня файлової системи- цей шлях ви вже бачили у прикладі вище, він починається від кореня "/" та описує весь шлях до файлу;
  • Відносний шлях linux- це шлях до файлу щодо поточної папки, такі шляхи часто спричиняють плутанину.
  • Шлях щодо домашньої папки поточного користувача.- шлях у файловій системі, тільки від кореня, як від папки поточного пользователя.

Розглянемо тепер докладніше як виглядають ці шляхи в linux, а також розберемо кілька прикладів, щоб остаточно було зрозуміло. Для демонстрації користуватимемося утилітою ls, яка призначена для перегляду вмісту каталогів.

Наприклад, у нас є такий каталог у домашній папці з чотирма файлами в ньому:

Ось так буде виглядати повний шлях linux до одного з файлів:

ls /home/sergiy/tmp/file1

Це вже відносний шлях linux, який починається від домашньої папки, вона позначається ~/. Зауважте, не ~, а саме ~/. Далі ви вже можете вказувати підпапки, у нашому випадку tmp:

Ну або шлях файлу в linux, щодо поточної папки:

Перше посилання вказує на поточну папку (.), друге (..) вказує на папку рівнем вище. Це відкриває ще більші можливості для навігації по каталогах. Наприклад, щоб послатися на файл у поточній папці, можна використовувати конструкцію:

Це марно під час перегляду вмісту файлу. Але дуже важливо під час виконання програми. Оскільки програма спочатку шукатиметься в середовищі PATH, а вже потім у цій папці. А тому, якщо потрібно запустити програму, яка знаходиться в поточній папці і вона називається так само як і та що в каталозі /bin, то без явного посилання, що файл потрібно шукати в поточній папці нічого не вийде.

Такі конструкції можуть часто зустрічатися при компіляції програм. Всі ці символи та шляхи файлів linux ви можете застосовувати не тільки в терміналі, але й у будь-якому файловому менеджеріщо може бути дуже зручно.

Але термінал Linux надає ще більші можливості. Ви можете використовувати прості символизаміни прямо в адресах файлів чи каталогів. Наприклад, можна вивести всі файли, що починаються на f:

Або навіть можна шукати не тільки в папці tmp, а в будь-якій підпапці домашньої папки:

І все це працюватиме, можливо, це не завжди потрібно і практично. Але у певних ситуаціях може дуже сильно допомогти. Ці функції реалізуються на рівні оболонки Bash, тому ви можете використовувати їх у будь-якій команді. Оболонка дивиться, скільки файлів було знайдено і для кожного з них викликає команду.

Висновки

От і все. Тепер ви знаєте все, що необхідно, щоб не тільки правильно написати шлях до файлу linux, але й виконувати складніші дії, наприклад, пошук файлів чи навігація за каталогами з допомогою команди cd. Якщо у вас залишилися питання, запитуйте у коментарях!

Схожі записи:


Коли ви вводите команду в командному рядку, ви в основному кажете оболонці запустити виконуваний файл із заданим ім'ям. У Linux ці програми, що виконуються, як ls, find, file та інші, як правило, живуть у декількох різних каталогів у вашій системі. Будь-який файл з дозволами, що виконуються в цих каталогах, може бути запущений з будь-якого місця. Найбільш поширені каталоги, які містять програми /bin, /sbin, /usr/sbin, /usr/local/bin і /usr/local/sbin.

Але як оболонка дізнається, у яких каталогах шукати виконувані програми чи оболонка шукає по всій файловій системі?

Відповідь проста. Коли ви вводите команду, оболонка шукає у всіх каталогах, вказаних у змінній користувача $PATH, виконуваний файл з таким ім'ям.

У цій статті показано, як додати каталоги до вашої змінної системи $PATH .

Що є $PATHв Linux

Змінна навколишнього середовища $PATH є двокрапками список каталогів, повідомляє оболонці, які каталоги для пошуку виконуваних файлів.

Щоб перевірити, які каталоги у вас є у змінній $PATH, ви можете використовувати команду printenv або echo:

Echo $PATH

Висновок виглядатиме приблизно так:

/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 файлі. Відкрийте файл у текстовому редакторіі додайте в кінці наступний рядок:

Nano ~/.bashrc

Export PATH="$HOME/bin:$PATH"

Збережіть файл і завантажте нове значення $PATH у поточний сеанс оболонки за допомогою :

Source ~/.bashrc

Щоб підтвердити, що каталог був успішно доданий, надрукуйте його значення $PATH, набравши:

Echo $PATH

Висновок

Додати нові каталоги у вашу або глобальну змінну $PATH досить просто. Це дозволяє виконувати команди та сценарії, що зберігаються в нестандартних місцях, без необхідності вводити повний шлях до файлу, що виконується.

Ті ж інструкції застосовні для будь-кого дистрибутива Linux, включаючи , CentOS, RHEL, Debian та Linux Mint.

Не соромтеся залишати коментарі, якщо у вас є питання.