Jak dodać katalog do swojej $ PATH w systemie Linux

Photo of author

By maciekx

$ PATH to jeden z niewidocznych elementów, które działają w tle twojego systemu Linux. Choć nie rzuca się w oczy, ma znaczący wpływ na doświadczenia użytkownika. W tym artykule przyjrzymy się jego funkcji oraz sposobom dostosowywania.

Czym jest $ PATH w systemie Linux i jak działa?

Gdy wpisujesz polecenie w terminalu i naciskasz Enter, zachodzi wiele procesów, zanim to polecenie zostanie zrealizowane.

Bash to domyślna powłoka w wielu dystrybucjach Linuxa. Odczytuje wprowadzone komendy oraz identyfikuje polecenia, argumenty, rury oraz wszelkie inne elementy. Następnie poszukuje wykonywalnych plików binarnych dla tych poleceń i uruchamia je z odpowiednimi argumentami.

Pierwszym krokiem, który podejmuje powłoka w celu odnalezienia pliku wykonywalnego, jest sprawdzenie, czy polecenie znajduje się w wbudowanej powłoce. Jeśli tak, dalsze poszukiwania nie są konieczne.

Wbudowane funkcje powłoki są łatwe do zlokalizowania, ponieważ są integralną częścią samej powłoki – można je porównać do narzędzi dostępnych w zasięgu ręki.

Jeżeli jednak potrzebujesz dostępu do innych narzędzi, musisz przeprowadzić poszukiwania. To właśnie w tym momencie przydaje się zmienna środowiskowa $ PATH, która zawiera listę katalogów, w których powłoka będzie szukać plików, a także kolejność, w jakiej będą one przeszukiwane.

Aby sprawdzić, czy polecenie jest wbudowane w powłokę, aliasem, funkcją czy też samodzielnym plikiem binarnym, można użyć polecenia type, jak pokazano poniżej:

type clear
type cd

Otrzymujemy informację, że clear jest plikiem binarnym, a jego pierwsza lokalizacja to /usr/bin. Być może na systemie zainstalowano więcej niż jedną wersję clear, ale to właśnie ta wersja zostanie użyta przez powłokę.

Nic dziwnego, że cd jest funkcją wbudowaną w powłokę.

Wyświetlanie twojego $ PATH

Łatwo jest sprawdzić, co znajduje się w twoim $ PATH. Wystarczy wpisać poniższe polecenie, aby użyć echo i wydrukować wartość przechowywaną w zmiennej $ PATH:

echo $PATH

Wynik to lista lokalizacji systemu plików oddzielonych dwukropkami (:). Powłoka przeszukuje te lokalizacje od lewej do prawej, szukając pliku wykonywalnego, który odpowiada poleceniu.

Oto przykładowa lista lokalizacji, które będą przeszukiwane i ich kolejność:

/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/bin
/usr/games
/usr/local/games
/snap/bin

Warto zauważyć, że przeszukiwanie nie zaczyna się od bieżącego katalogu roboczego, lecz odbywa się wyłącznie w wymienionych katalogach.

Jeśli bieżący katalog roboczy nie jest uwzględniony w ścieżce, nie zostanie przeszukany. Dodatkowo, jeśli masz polecenia w katalogach, które nie są w ścieżce, powłoka ich nie zlokalizuje.

W celu demonstracji stworzyliśmy prosty skrypt o nazwie rf. Po uruchomieniu rf wyświetla nazwę katalogu, z którego został uruchomiony, w terminalu. Znajduje się w /usr/local/bin. Mamy również nowszą wersję w katalogu /dave/work.

Wprowadzamy polecenie aby dowiedzieć się, która wersja naszego programu powłoka odnajdzie i uruchomi:

which rf

Powłoka informuje, że znaleziono wersję w katalogu, który znajduje się w ścieżce.

Aby uruchomić ten skrypt, wprowadzamy:

rf

Wersja 1.0 rf działa, potwierdzając, że nasze przypuszczenia były słuszne. Znalazła i wykonała wersję znajdującą się w /usr/local/bin.

Aby uruchomić inną wersję rf na tym komputerze, musimy podać pełną ścieżkę do pliku wykonywalnego w wierszu poleceń, jak poniżej:

./work/rf

Teraz, gdy wskazaliśmy powłoce, gdzie znajduje się wersja rf, którą chcemy uruchomić, używana jest wersja 1.1. Jeśli preferujemy tę wersję, możemy skopiować ją do /usr/local/bin, aby zastąpić starszą.

Załóżmy, że pracujemy nad nową wersją rf. Chcemy ją często uruchamiać w trakcie rozwoju i testowania, ale nie chcemy kopiować jej do środowiska produkcyjnego.

Możemy również pobrać nową wersję rf i przeprowadzić na niej testy, zanim udostępnimy ją publicznie.

Jeśli dodamy nasz katalog roboczy do PATH, sprawimy, że powłoka odnajdzie naszą wersję. Taka zmiana wpłynie tylko na nas – inni użytkownicy nadal będą korzystać z wersji rf w /usr/local/bin.

Jak dodać katalog do $ PATH

Możesz użyć polecenia export, aby dodać katalog do $ PATH. Katalog ten zostanie uwzględniony w liście lokalizacji systemu plików, które będą przeszukiwane przez powłokę. Kiedy powłoka znajdzie odpowiadający plik wykonywalny, przestaje szukać, dlatego warto upewnić się, że twój katalog będzie przeszukiwany w pierwszej kolejności, przed /usr/local/bin.

To zadanie jest bardzo proste. W naszym przykładzie dodamy nasz katalog na początku ścieżki, aby stał się pierwszą lokalizacją do przeszukania:

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

To polecenie ustawia $ PATH na nowy katalog, który dodajemy, /home/dave/work, a następnie dołącza całą dotychczasową ścieżkę.

Pierwsza część nie zawiera znaku dolara ($). Ustawiamy wartość PATH. Ostatnia $ PATH zawiera znak dolara, ponieważ odwołujemy się do wartości przechowywanej w zmiennej PATH. Zwróć również uwagę na dwukropek (:) oddzielający nowy katalog od zmiennej $ PATH.

Sprawdźmy, jak wygląda teraz ścieżka:

echo $PATH

Nasze /home/dave/work zostało dodane na początku ścieżki. Pozostałe lokalizacje są oddzielone dwukropkiem, który dodaliśmy.

Wprowadzamy polecenie, aby sprawdzić, czy nasza wersja rf jest pierwszą, która zostanie odnaleziona:

which rf

Potwierdzamy, że powłoka znajduje wersję 1.1 i uruchamia ją z /home/dave/work.

Aby dodać nasz katalog na koniec ścieżki, wystarczy przenieść go na koniec polecenia, na przykład:

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

Trwałe zmiany

Jak powiedziała Beth Brooke-Marciniak: „Sukces jest w porządku, ale sukces jest ulotny”. Po zamknięciu okna terminala wszelkie zmiany wprowadzone w $ PATH zostaną utracone. Aby uczynić je trwałymi, należy umieścić polecenie export w odpowiednim pliku konfiguracyjnym.

Dodanie polecenia export do pliku .bashrc sprawi, że ścieżka będzie ustawiana za każdym razem, gdy otwierasz nowe okno terminala. W przeciwieństwie do sesji SSH, które wymagają zalogowania, sesje terminalowe są „interaktywne”.

W przeszłości konieczne było umieszczenie polecenia export w pliku .profile, aby ustawić ścieżkę dla sesji logowania w terminalu.

Okazało się jednak, że umieszczenie polecenia export w plikach .bashrc lub .profile poprawnie ustawia ścieżkę zarówno dla sesji interaktywnych, jak i sesji logowania. Twój przypadek może się różnić, dlatego pokażemy, jak to zrobić w obu plikach.

Aby edytować plik .bashrc w katalogu /home, użyj następującego polecenia:

gedit .bashrc

Otworzy się edytor gedit z załadowanym plikiem .bashrc.

Przewiń do końca pliku i dodaj wcześniej używane polecenie export:

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

Zapisz plik. Zamknij i ponownie otwórz terminal lub użyj polecenia, aby wczytać plik .bashrc w ten sposób:

. .bashrc

Następnie wpisz poniższe polecenie, aby sprawdzić ścieżkę:

echo $PATH

To spowoduje dodanie katalogu /home/dave/work na początku ścieżki.

Proces dodawania polecenia do pliku .profile jest podobny. Wpisz poniższe polecenie:

gedit .profile

Edytor gedit uruchomi się z załadowanym plikiem .profile.

Dodaj polecenie export na końcu pliku, a następnie zapisz. Zamknięcie i otwarcie nowego terminala nie wystarczy, aby wymusić ponowne odczytanie pliku .profile. Aby nowe ustawienia weszły w życie, musisz się wylogować i zalogować ponownie lub użyć polecenia:

. .profile

Ustawienie ścieżki dla wszystkich użytkowników

Aby ustawić ścieżkę dla wszystkich użytkowników systemu, możesz edytować plik /etc/profile.

Będziesz musiał użyć sudo w następujący sposób:

sudo gedit /etc/profile

Po uruchomieniu edytora gedit dodaj polecenie export na końcu pliku.

Zapisz i zamknij plik. Zmiany wejdą w życie dla wszystkich użytkowników przy następnym logowaniu.

Uwaga dotycząca bezpieczeństwa

Upewnij się, że nie dodałeś przypadkowo początkowego dwukropka „:” do ścieżki, jak pokazano poniżej.

Jeśli to zrobisz, powłoka najpierw przeszuka bieżący katalog, co może stanowić zagrożenie bezpieczeństwa. Wyobraź sobie, że pobrałeś archiwum i rozpakowałeś je do katalogu. Patrzysz na pliki i widzisz inny spakowany plik. Ponownie wywołujesz unzip, aby wyodrębnić ten plik.

Jeżeli pierwsze archiwum zawiera plik wykonywalny o nazwie unzip, który jest złośliwym oprogramowaniem, przypadkowo uruchomisz ten plik zamiast prawdziwego unzip. Zdarzy się tak, ponieważ powłoka najpierw przeszuka bieżący katalog.

Dlatego zawsze zachowaj ostrożność przy wprowadzaniu poleceń export. Użyj echo $ PATH, aby sprawdzić ich poprawność i upewnić się, że są zgodne z twoimi oczekiwaniami.


newsblog.pl