Як додати каталог до вашого $PATH в Linux

Змінна $PATH — це один з непомітних, але важливих елементів у системі Linux. Вона тихо впливає на те, як ви працюєте з комп’ютером, і розуміння її ролі є ключовим. Давайте розберемося, як вона функціонує і як її можна налаштувати.

Що таке $PATH в Linux і як вона працює?

Коли ви вводите команду в терміналі та натискаєте Enter, запускається цілий ряд процесів, перш ніж команда буде виконана.

Bash, як типова оболонка в більшості дистрибутивів Linux, аналізує введений вами текстовий рядок. Вона ідентифікує назви команд, їхні параметри, перенаправлення та інше. Потім вона шукає відповідні виконувані файли для цих команд і запускає їх з потрібними параметрами.

Першим кроком є перевірка, чи є команда вбудованою в саму оболонку. Якщо так (так звана “вбудована команда”), додатковий пошук не потрібен.

Вбудовані команди легко знайти, бо вони є невід’ємною частиною оболонки. Це як інструменти, які завжди під рукою.

Але якщо потрібен інший “інструмент”, його треба пошукати. Змінна середовища $PATH і є тим “місцем”, де оболонка шукає ці інструменти, зберігаючи список директорій та порядок їх обходу.

Щоб перевірити, чи є команда вбудованою, псевдонімом, функцією, або окремим файлом, використовуйте команду type, як показано нижче:

type clear
type cd

Результат показує, що clear — це виконуваний файл, який знаходиться у /usr/bin. Може існувати кілька версій цієї команди, але оболонка використовує першу знайдену.

З іншого боку, cd є вбудованою командою оболонки.

Перегляд вашого $PATH

Переглянути вміст вашого $PATH дуже просто. Скористайтеся командою echo, щоб вивести значення змінної:

echo $PATH

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

Ось приклад типового списку директорій:

/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/bin
/usr/ігри
/usr/local/games
/snap/bin

Важливо зазначити, що пошук не починається з поточного каталогу. Оболонка переглядає лише ті директорії, які є в списку $PATH.

Якщо поточного каталогу немає в $PATH, він не буде врахований при пошуку. Також, якщо у вас є програми в директоріях, яких немає в шляху, оболонка їх не знайде.

Для прикладу, уявімо, що у нас є невелика програма rf, яка виводить шлях до своєї директорії. Одна версія розташована в /usr/local/bin, а новіша — у /dave/work.

Команда which показує, яку версію програми знайде оболонка:

which rf

Оболонка повідомляє, що знайшла версію програми в директорії, яка є в шляху, а саме в /usr/local/bin.

Запускаємо програму командою:

rf

Працює версія 1.0, як і очікувалося.

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

./work/rf

Тепер запускається версія 1.1. Якщо ви хочете використовувати цю версію за замовчуванням, ви можете скопіювати її в /usr/local/bin, замінивши стару версію.

Уявіть, що ви розробляєте нову версію програми rf, і вам потрібно часто її запускати під час розробки та тестування. Ви не хочете копіювати невипущену збірку в робоче середовище.

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

Якщо додати робочий каталог до шляху, оболонка почне знаходити вашу версію. При цьому, ця зміна торкнеться лише вас, інші користувачі продовжать використовувати версію з /usr/local/bin.

Додавання каталогу до $PATH

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

Наприклад, для додавання каталогу /home/dave/work на початок $PATH:

export PATH=/home/dave/work:$PATH

Ця команда змінює значення змінної $PATH, додаючи на початок новий каталог, а потім зберігаючи поточне значення $PATH.

Перший PATH без знака $, оскільки ми встановлюємо для нього значення. Другий $PATH зі знаком долара, бо ми використовуємо його поточне значення. Зверніть увагу на двокрапку :, яка розділяє новий каталог і поточний вміст $PATH.

Поглянемо на оновлений шлях:

echo $PATH

Як видно, наш каталог /home/dave/work додано на початок $PATH.

Тепер перевіримо, чи знайдеться першою наша версія rf:

which rf

Тепер запускаємо програму, і бачимо, що використовується наша версія:

rf

Оболонка виконує версію 1.1 з /home/dave/work.

Щоб додати каталог в кінець $PATH, потрібно змінити порядок в команді:

export PATH=$PATH:/home/dave/work

Збереження змін

Зміни, внесені в $PATH, будуть втрачені при закритті вікна терміналу. Для збереження їх потрібно додати команду export до конфігураційного файлу.

Команда export, розміщена у файлі .bashrc, встановлює шлях при кожному відкритті вікна терміналу. Такі сесії називаються інтерактивними.

Раніше, для встановлення $PATH при вході в термінал, використовували файл .profile.

Проте, якщо додати команду export в файли .bashrc або .profile, шлях правильно встановлюється як для інтерактивних сесій, так і для входу в термінал. Ваш досвід може відрізнятися. Тому ми покажемо, як зробити це в обох файлах.

Для редагування файлу .bashrc в домашній директорії виконайте команду:

gedit .bashrc

Відкриється редактор gedit з завантаженим файлом .bashrc.

Прокрутіть файл вниз і додайте ту ж команду export, яку ми використовували раніше:

export PATH=/home/dave/work:$PATH

Збережіть файл. Потім або закрийте та відкрийте вікно терміналу, або виконайте команду . .bashrc:

. .bashrc

Перевірте шлях командою echo:

echo $PATH

Тепер каталог /home/dave/work буде доданий на початок шляху.

Аналогічно, для редагування файлу .profile, виконайте команду:

gedit .profile

Відкриється редактор gedit з завантаженим файлом .profile.

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

. .profile

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

Щоб встановити шлях для всіх користувачів системи, можна відредагувати файл /etc/profile.

Для цього потрібно скористатись sudo:

sudo gedit /etc/profile

Додайте команду export в кінець файлу.

Збережіть та закрийте файл. Зміни набудуть чинності для інших користувачів при наступному вході в систему.

Важливе зауваження з безпеки

Слід бути дуже обережним, щоб випадково не додати двокрапку “:” на початку або в кінці $PATH.

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

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

Тому, будьте уважні при введенні команд export. Команда echo $PATH дозволить перевірити правильність їх введення.