Jak dodać katalog do swojej $ PATH w systemie Linux

$ PATH to jeden z cichych manipulatorów w tle twojego komputera z Linuksem. Po cichu wpływa na wrażenia użytkownika, ale nie ma w tym nic podejrzanego. Wyjaśnimy, do czego służy i jak możesz to dostosować.

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

Po wpisaniu polecenia w oknie terminala i naciśnięciu klawisza Enter rozpoczynasz sporo czynności, zanim polecenie zostanie wykonane.

Grzmotnąć jest domyślną powłoką w większości dystrybucji Linuksa. Interpretuje wprowadzony wiersz tekstu i identyfikuje nazwy poleceń przeplatane parametrami, rurami, przekierowaniai cokolwiek tam jest. Następnie lokalizuje wykonywalne pliki binarne dla tych poleceń i uruchamia je z podanymi parametrami.

Pierwszym krokiem wykonywanym przez powłokę w celu zlokalizowania pliku wykonywalnego jest określenie, czy w grę wchodzi nawet plik binarny. Jeśli polecenie, którego używasz, znajduje się w samej powłoce (plik „Wbudowana powłoka”) nie jest wymagane dalsze wyszukiwanie.

Funkcje wbudowane powłoki są najłatwiejsze do znalezienia, ponieważ są integralną częścią powłoki. To tak, jakby mieć je w pasku narzędzi – zawsze są przy tobie.

Jeśli jednak potrzebujesz któregoś z pozostałych narzędzi, musisz poszperać w warsztacie, aby je znaleźć. Czy jest na stole warsztatowym czy na wieszaku ściennym? To właśnie robi zmienna środowiskowa $ PATH. Zawiera listę miejsc przeszukiwanych przez powłokę oraz kolejność, w jakiej będą przeszukiwane.

Jeśli chcesz sprawdzić, czy polecenie jest plikiem wbudowana powłoka, alias, funkcja lub samodzielny plik binarny mv / work / unfile, możesz użyć polecenia type, jak pokazano poniżej:

type clear
type cd

Plik

To mówi nam, że clear jest plikiem binarnym, a pierwszy znaleziony w ścieżce znajduje się w / usr / bin. Być może na komputerze jest zainstalowana więcej niż jedna wersja Clear, ale to jest ta, której powłoka będzie próbowała użyć.

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

Wystawianie Twojego $ PATH

Łatwo jest zobaczyć, co stoi na twojej drodze. Po prostu wpisz następujące polecenie, aby użyć polecenia echo i wydrukuj wartość przechowywana w zmiennej $ PATH:

echo $PATH

Plik

Dane wyjściowe to lista lokalizacji systemu plików rozdzielonych dwukropkami (:). Powłoka przeszukuje ścieżkę od lewej do prawej, sprawdzając lokalizację każdego systemu plików pod kątem pasującego pliku wykonywalnego do wykonania polecenia.

Możemy przejść przez listę, aby zobaczyć lokalizacje systemu plików, które będą przeszukiwane, oraz kolejność, w jakiej będą przeszukiwane:

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

Coś, co może nie być od razu oczywiste, to fakt, że wyszukiwanie nie rozpoczyna się w bieżącym katalogu roboczym. Raczej działa poprzez wymienione katalogi i tylko wymienione katalogi.

Jeśli bieżący katalog roboczy nie znajduje się w Twojej ścieżce, nie zostanie przeszukany. Ponadto, jeśli masz polecenia przechowywane w katalogach, których nie ma w ścieżce, powłoka ich nie znajdzie.

Aby to zademonstrować, stworzyliśmy mały program o nazwie rf. Po uruchomieniu rf wypisuje nazwę katalogu, z którego został uruchomiony, w oknie terminala. Znajduje się w / usr / local / bin. Mamy również nowszą wersję w katalogu / dave / work.

Wpisujemy następujące polecenie aby pokazać nam, która wersja naszego programu powłoka znajdzie i użyje:

which rf

Plik

Powłoka zgłasza, że ​​znaleziona wersja jest wersją w katalogu, który znajduje się w ścieżce.

Aby go uruchomić, wpisujemy:

rf

Plik

Wersja 1.0 rf działa i potwierdza, że ​​nasze oczekiwania były prawidłowe. Znaleziona i wykonana wersja znajduje się w / usr / local / bin.

Aby uruchomić dowolną inną wersję rf na tym komputerze, będziemy musieli użyć ścieżki do pliku wykonywalnego w wierszu poleceń, jak pokazano poniżej:

./work/rf

Plik

Teraz, gdy powiedzieliśmy powłoce, gdzie znaleźć wersję rf, którą chcemy uruchomić, używa wersji 1.1. Jeśli wolimy tę wersję, możemy skopiować ją do katalogu / usr / local / bin i nadpisać starą.

Powiedzmy, że tworzymy nową wersję rf. Będziemy musieli często go uruchamiać, gdy go opracowujemy i testujemy, ale nie chcemy kopiować niewydanej wersji deweloperskiej do środowiska na żywo.

A może pobraliśmy nową wersję rf i chcemy przeprowadzić na niej testy weryfikacyjne, zanim udostępnimy ją publicznie.

Jeśli dodamy nasz katalog roboczy do ścieżki, sprawimy, że powłoka znajdzie naszą wersję. A ta zmiana wpłynie tylko na nas – inni nadal będą używać wersji rf w / usr / local / bin.

Dodawanie katalogu do $ PATH

Możesz użyć polecenia eksportu do dodać katalog do $ PATH. Katalog jest następnie uwzględniany na liście lokalizacji systemu plików przeszukiwanych przez powłokę. Kiedy powłoka znajdzie pasujący plik wykonywalny, przestaje szukać, więc chcesz się upewnić, że przeszuka najpierw twój katalog, przed / usr / local / bin.

To jest łatwe do zrobienia. W naszym przykładzie wpisujemy następujące polecenie, aby dodać nasz katalog na początku ścieżki, aby była to pierwsza wyszukiwana lokalizacja:

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

Plik

To polecenie ustawia $ PATH jako równe katalogowi, który dodajemy, / home / dave / work, a następnie całej bieżącej ścieżce.

Pierwsza PATH nie ma znaku dolara ($). Ustawiamy wartość PATH. Ostatnia $ PATH ma znak dolara, ponieważ odwołujemy się do zawartości przechowywanej w zmiennej PATH. Zwróć także uwagę na dwukropek (:) między nowym katalogiem a nazwą zmiennej $ PATH.

Zobaczmy, jak wygląda teraz ścieżka:

echo $PATH

Plik

Nasz katalog / home / dave / work jest dodawany na początku ścieżki. Resztę ścieżki oddziela dwukropek, który podaliśmy.

Wpisujemy następujące polecenie, aby sprawdzić, czy nasza wersja rf jest pierwszą znalezioną:

which rf

Plik

Dowód w budyniu działa rf, jak pokazano poniżej:

rf

Plik

Powłoka znajduje wersję 1.1 i wykonuje ją z / home / dave / work.

Aby dodać nasz katalog na koniec ścieżki, po prostu przenosimy go na koniec polecenia, na przykład:

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

Trwałe zmiany

Tak jak Beth Brooke-Marciniak powiedział: „Sukces jest w porządku, ale sukces jest ulotny”. W momencie, gdy zamkniesz okno terminala, wszelkie zmiany wprowadzone w $ PATH znikną. Aby uczynić je trwałymi, musisz umieścić polecenie eksportu w pliku konfiguracyjnym.

Kiedy umieścisz polecenie eksportu w pliku .bashrc, ustawia ścieżkę za każdym razem, gdy otwierasz okno terminala. w odróżnieniu Sesje SSH, dla których musisz się zalogować, są to sesje „interaktywne”.

W przeszłości należało umieścić polecenie eksportu w pliku .profile, aby ustawić ścieżkę do logowania w sesjach terminala.

Okazało się jednak, że jeśli umieścimy polecenie eksportu w plikach .bashrc lub .profile, poprawnie ustawi ono ścieżkę zarówno dla sesji interaktywnych, jak i sesji logowania. Twoje doświadczenie może być inne. Aby poradzić sobie ze wszystkimi ewentualnościami, pokażemy Ci, jak to zrobić w obu plikach.

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

gedit .bashrc

Plik

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

Edytor gedit z rozszerzeniem

Przewiń do końca pliku, a następnie dodaj następujące polecenie eksportu, którego użyliśmy wcześniej:

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

Zapisz plik. Następnie zamknij i ponownie otwórz okno terminala lub użyj polecenia kropka, aby odczytać plik .bashrc w następujący sposób:

. .bashrc

Następnie wpisz następujące polecenie echo, aby sprawdzić ścieżkę:

echo $PATH

Plik

Spowoduje to dodanie katalogu / home / dave / work na początku ścieżki.

Proces dodawania polecenia do pliku .profile jest taki sam. Wpisz następujące polecenie:

gedit .profile

Plik

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

Edytor gedit z rozszerzeniem

Dodaj polecenie eksportu na końcu pliku, a następnie zapisz je. Zamknięcie i otwarcie nowego okna terminala jest niewystarczające, aby wymusić ponowne odczytanie pliku .profile. Aby nowe ustawienia zaczęły obowiązywać, musisz się wylogować i zalogować ponownie lub użyć polecenia kropka, jak pokazano poniżej:

. .profile

Wyznaczanie ścieżki dla każdego

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 eksportu na końcu pliku.

Edytor gedit z rozszerzeniem

Zapisz i zamknij plik. Zmiany zaczną obowiązywać dla innych, gdy następnym razem się zalogują.

Uwaga dotycząca bezpieczeństwa

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

Plik

Jeśli to zrobisz, najpierw przeszuka bieżący katalog, co stwarza zagrożenie bezpieczeństwa. Powiedzmy, że pobrałeś plik archiwum i rozpakowałeś go do katalogu. Patrzysz na pliki i widzisz inny spakowany plik. Ponownie wywołujesz unzip, aby wyodrębnić to archiwum.

Jeśli pierwsze archiwum zawierało plik wykonywalny o nazwie unzip, który był złośliwym plikiem wykonywalnym, przypadkowo uruchomiłbyś ten plik zamiast prawdziwego pliku wykonywalnego unzip. Stałoby się tak, ponieważ powłoka najpierw szukałaby w bieżącym katalogu.

Dlatego zawsze zachowaj ostrożność podczas wpisywania poleceń eksportu. Użyj echo $ PATH, aby je przejrzeć i upewnić się, że są takie, jakie chcesz, aby były.