Zmienne środowiskowe w systemie Linux. Zmienna środowiskowa PATH Jak dodać program do ścieżki linux

Co to jest? Wiele poleceń wprowadzanych w wierszu poleceń wymaga użycia zewnętrznego programu ładowanego z systemu plików. Na przykład polecenia takie jak mkdir i wc znajdują się w folderze /bin.

Po wprowadzeniu instrukcji, której powłoka Bash nie rozpoznaje, próbuje ona wykonać ją jako program i zwraca błąd, jeśli nie znajdzie programu o tej nazwie. I dotyczy to nie tylko podstawowych poleceń, które rozważaliśmy, bo od wiersz poleceń możesz uruchomić dowolny program.


Ale skąd Linux wie, które programy uruchomić z jakich katalogów, biorąc pod uwagę obecność w systemie plików? System operacyjny używa systemowej zmiennej środowiskowej do określenia podzbioru folderów, które mają być przeglądane po odebraniu nieznanego polecenia. Ta zmienna nosi nazwę PATH i można ją wyświetlić za pomocą następującego polecenia echo (wymagany jest symbol $):

echo $PATH

Dane wyjściowe tego polecenia będą wyglądać jak siedem następujących bezwzględnych ścieżek folderów, oddzielonych dwukropkami:

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

Za każdym razem, gdy wprowadzisz nieznane polecenie, Linux przejrzy każdy z folderów określonych w zmiennej środowiskowej, w kolejności, w jakiej zostały określone, szukając programu o tej samej nazwie. Jeśli program zostanie znaleziony, zostanie uruchomiony; w przeciwnym razie zostanie wyświetlony komunikat o błędzie. Ale nie będzie błędem, jeśli kupisz ukochane srebrne pierścionki w prezencie. Srebro ozdobi każdą kobietę!

Te siedem folderów zapewnia łatwy dostęp do wszystkich głównych programów w systemie operacyjnym, w tym . Programów poza tymi siedmioma folderami nie można uruchomić przez proste wpisanie ich nazwy w wierszu poleceń.

Na przykład pobrałeś narzędzie dziennika z Internetu do folderu domowego. Jeśli wpiszesz jego nazwę w wierszu poleceń, pojawi się błąd, ponieważ znajduje się on w folderze, którego nie ma w ścieżce systemowej. Aby uruchomić ten program, wprowadź następującą linię (pamiętaj, że symbol ~ jest skrótem dla twojego katalogu domowego):

Jeśli zapisałeś go w folderze poza określoną ścieżką, musisz wprowadzić bezwzględną ścieżkę i nazwę pliku, aby uruchomić narzędzie.

Oczywiście zakłada się, że dziennik jest prostym, samodzielnym programem, który nie wymaga instalacji, ponieważ większość głównych aplikacji umieszcza plik wykonywalny programu gdzieś w określonej ścieżce podczas procesu instalacji. Lubię to Zmienna środowiskowa PATH, ciesz się zdrowiem!

Zmienne środowiska ( Zmienna środowiskowa) służą do przechowywania wspólnych wartości zmiennych w skryptach i programach. Takie zmienne można ustawić na pewien okres czasu, np. na okres działania określonej powłoki terminala, czy na czas sesji użytkownika, albo można ustawić zmienną środowiskową na poziomie globalnym - dla całego systemu .

Zmienne środowiska

DOM
Zmienna zawiera ścieżkę do katalogu domowego bieżącego użytkownika. $UŻYTKOWNIK
Bieżąca nazwa użytkownika $PATH
Lista katalogów, w których powłoka ma wyszukiwać programy wykonywalne. $PWD
Ścieżka do bieżącego katalogu roboczego (lub pwd). Przykład: dir_path=$(pwd) . $POWŁOKA
Domyślny interpreter $RANDOM
Generuje losową liczbę 0..32767 przy każdym dostępie do zmiennej. $ SEKUND
Czas w sek. od początku skorupy. $? Wynik poprzedniego polecenia. $NAZWAHOSTA
Nazwa komputera $HISTFILE
Ścieżka do pliku historii interpretera $IFS
Lista znaków separatora dla poleceń, parametrów, elementów tablicy (domyślnie: spacja, tabulator, znak nowej linii) $PS1
Szablon ciągu podpowiedzi interpretera.

Tymczasowe ustawienie zmiennej środowiskowej

Ustawianie zmiennej środowiskowej dla okresu sesji:

# Dla nowego procesu env nazwa_zmiennej=wartość [polecenie] # Dla bieżącej powłoki i wszystkich jej podprocesów export nazwa_zmiennej=wartość [polecenie]

Wartość zmiennej jest zachowywana do ponownego uruchomienia systemu.

Ustawienie stałej wartości

Zmienne środowiskowe na poziomie systemu są ustawiane za pomocą pliku /etc/environment:

ŚRODOWISKO="odch"

Ustawianie zmiennej środowiskowej specyficznej dla użytkownika za pomocą ~/.bashrc lub ~/.bash_profile:

PATH="$(ŚCIEŻKA):/home/user/bin:"

Uwaga!

Plik ~/.bash_profile zostanie wykonany, gdy interpreter zostanie uruchomiony z przełącznikiem -l. Gdy jesteś zalogowany lokalnie, tego pliku nie można odczytać!

Musisz również pamiętać, że zmiany zaczną obowiązywać dopiero po ponownym uruchomieniu sesji!

Wyświetlanie wartości zmiennej środowiskowej

Aby wyświetlić wartość zmiennej środowiskowej, użyj polecenia printenv:

Printenv<имя_переменной>

#shell, #bash, #środowisko

Zestaw SDK środowiska AIR zawiera kilka programów, które można uruchamiać z wiersza polecenia lub z okna terminala. Uruchamianie tych programów jest znacznie wygodniejsze, jeśli zdefiniujesz ścieżkę do katalogu bin zestawu SDK za pomocą zmiennej środowiskowej Path.

Ta sekcja zawiera ogólny opis procedury ustawiania ścieżki w systemach Windows, Mac i Linux. Jednak konfiguracje komputerów mogą się znacznie różnić, więc ta procedura może nie działać we wszystkich systemach. W takim przypadku potrzebne informacje można znaleźć w dokumentacji systemu operacyjnego lub w Internecie.

Ustawianie zmiennej środowiskowej PATH w systemach Linux i Mac OS przy użyciu powłoki Bash

Kiedy polecenie jest wprowadzane do okna terminala, powłoka (program, który odczytuje wprowadzane polecenia i próbuje odpowiednio na nie odpowiedzieć) musi najpierw znaleźć program polecenia w systemie plików. Powłoka szuka poleceń na liście katalogów, która jest przechowywana w zmiennej środowiskowej o nazwie $PATH. Aby wyświetlić bieżącą wartość zmiennej ścieżki, wpisz następującą komendę:

echo $PATH

Zostanie wyświetlona lista katalogów oddzielonych dwukropkami, mniej więcej taka:

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

Do tej listy należy dodać ścieżkę do katalogu bin pakietu AIR SDK, aby powłoka mogła znaleźć narzędzia ADT i ADT. Załóżmy, że zestaw SDK środowiska AIR znajduje się w katalogu /Users/fred/SDKs/AIR. W takim przypadku następujące polecenie służy do dodania wymaganych katalogów do zmiennej środowiskowej ścieżki:

Export PATH=$PATH:/Users/fred/SDKs/AIR/bin:/Users/fred/SDKs/android/tools

Notatka. Jeśli ścieżka zawiera białe znaki, muszą być poprzedzone znakiem ukośnika odwrotnego, jak pokazano poniżej:

/Users/fred\ jones/SDKs/AIR\ 2.5\ SDKs/bin

Aby sprawdzić wyniki dodawania, możesz ponownie uruchomić polecenie echo:

Echo $PATH /usr/bin:/bin:/usr/sbin:/usr/local/bin:/usr/x11/bin:/Users/fred/SDKs/AIR/bin:/Users/fred/SDKs/android/ narzędzia

Pomyślnie dodano katalogi. Teraz możesz wywołać następujące polecenia i uzyskać poprawną odpowiedź:

Wersja reklamy

Jeśli zmienna środowiskowa $PATH została zmieniona poprawnie, polecenie powinno wyświetlić wersję środowiska narzędzia ADT.

Jest jednak jeden problem: kiedy otworzysz nowe okno terminala, zauważysz, że zmienna ścieżki nie zawiera już nowych elementów, które zostały do ​​niej wcześniej dodane. Polecenie ustawiania ścieżki musi być uruchamiane za każdym razem, gdy uruchamiasz nowy terminal.

Typowym rozwiązaniem tego problemu byłoby dodanie polecenia do jednego ze skryptów startowych używanych przez powłokę. W systemie Mac OS możesz utworzyć plik .bash_profile w katalogu ~/username, który będzie uruchamiany za każdym razem, gdy otworzysz nowe okno terminala. W Ubuntu skrypt uruchamiany po otwarciu nowego okna terminala to .bashrc. W innych Dystrybucje Linuksa i muszli obowiązują podobne zasady.

Procedura dodawania polecenia do skryptu uruchamiania powłoki

    Zmień swój katalog domowy:

    Utwórz profil konfiguracji powłoki (jeśli to konieczne) i przekieruj tekst wejściowy na koniec pliku za pomocą polecenia cat >>. Użyj odpowiedniego pliku dla siebie system operacyjny i skorupy. Na przykład możesz użyć .bash_profile w systemie Mac OS i .bashrc w systemie Ubuntu.

    Kot >> .bash_profile

    Wpisz tekst, który chcesz dodać do pliku:

    Export PATH=$PATH:/Users/cward/SDKs/android/tools:/Users/cward/SDKs/AIR/bin

    Zakończ przekierowanie tekstu, naciskając klawisze CTRL-SHIFT-D na klawiaturze.

    Wyświetl plik, aby sprawdzić, czy operacja została wykonana poprawnie:

    Kot .bash_profile

    Otwórz nowe okno terminala, aby sprawdzić ścieżkę:

    echo $PATH

    Dodane elementy powinny zostać wyświetlone na ekranie.

Jeśli powstał później nowa wersja jeden z zestawów SDK ma zostać umieszczony w innym katalogu, należy odpowiednio zaktualizować polecenie ustawiania ścieżki w pliku konfiguracyjnym. W przeciwnym razie powłoka będzie nadal używać starej wersji.

Ustawianie zmiennej środowiskowej PATH w systemie Windows

Gdy okno poleceń jest otwierane w systemie Windows, dziedziczy ono globalne zmienne środowiskowe zdefiniowane we właściwościach systemu. Jedną z ważnych zmiennych jest zmienna path, która zawiera listę katalogów, w których należy szukać wprowadzonego programu. Aby wyświetlić aktualną listę katalogów w zmiennej path, możesz wpisać następujące polecenie w oknie poleceń:

ustaw ścieżkę

Spowoduje to wyświetlenie rozdzielonej dwukropkami listy katalogów, która wygląda mniej więcej tak:

Ścieżka=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem

Do tej listy należy dodać ścieżkę do katalogu bin pakietu AIR SDK, aby program poleceń mógł znaleźć narzędzie ADT i narzędzia ADT. Załóżmy, że zestaw SDK środowiska AIR znajduje się w katalogu C:\SDKs\AIR. W takim przypadku ścieżkę można dodać w następujący sposób:

    W sekcji Panel sterowania otwórz okno dialogowe Właściwości systemu lub kliknij prawym przyciskiem myszy ikonę Mój komputer i wybierz z menu opcję Właściwości.

    Na karcie Zaawansowane kliknij przycisk Zmienne środowiskowe.

    W sekcji Zmienne systemowe okna dialogowego Zmienne środowiskowe wybierz element Ścieżka.

    Kliknij przycisk Zmień.

    Przejdź na koniec wiersza w polu Wartość zmiennej.

    Na samym końcu bieżącej wartości wpisz następujący tekst:

    ;C:\SDK\AIR\bin

    Naciśnij przycisk „OK” w całości okna dialogowe aby zapisać ścieżkę.

Jeśli w tym momencie są otwarte okna poleceń, zmiany w nich nie zostaną zastosowane. Otwórz nowe okno poleceń i wpisz następujące polecenie, aby upewnić się, że zmienna środowiskowa jest ustawiona poprawnie:

Wersja reklamy

Jeśli lokalizacja zestawu AIR SDK zostanie później zmieniona lub zostanie dodana nowa wersja, konieczna będzie odpowiednia zmiana zmiennej środowiskowej ścieżki.

Zastanawiam się, gdzie należy dodać nową ścieżkę do zmiennej środowiskowej PATH. Wiem, że można to zrobić, edytując .bashrc (na przykład), ale nie jest jasne, jak to zrobić.

Zatem:

Eksportuj PATH=~/opt/bin:$PATH

Eksportuj PATH=$PATH:~/opt/bin

11 odpowiedzi

prosty materiał

ŚCIEŻKA=$ŚCIEŻKA:~/opt/bin ŚCIEŻKA=~/opt/bin:$ŚCIEŻKA

w zależności od tego, czy chcesz dodać ~/opt/bin na końcu (aby przeszukać wszystkie inne katalogi, jeśli istnieje program o tej samej nazwie w wielu katalogach), czy na początku (aby przeszukać wszystkie inne katalogi).

Możesz dodać wiele wpisów jednocześnie. PATH=$PATH:~/opt/bin:~/opt/node/bin lub zmiany w sortowaniu w porządku.

Nie musisz eksportować, jeśli zmienna jest już w środowisku: każda zmiana wartości zmiennej jest odzwierciedlana w środowisku¹. PATH prawie zawsze znajduje się w środowisku; Wszystko systemy uniksowe zainstaluj go bardzo wcześnie (zwykle w pierwszym procesie).

Jeśli twoja PATH jest tworzona przez wiele różnych komponentów, możesz otrzymać zduplikowane wpisy. Zobacz Jak dodać ścieżkę do katalogu domowego, która zostanie wykryta przez system Unix, które polecenie? i Usuń zduplikowane wpisy $PATH za pomocą polecenia awk, aby uniknąć powielania lub je usuń.

Gdzie umieścić

Zauważ, że ~/.bash_rc nie jest odczytywany przez żaden program, a ~/.bashrc to plik konfiguracyjny dla interaktywnych instancji basha. Nie należy definiować zmiennych środowiskowych w ~/.bashrc . Właściwym miejscem do zdefiniowania zmiennych środowiskowych, takich jak PATH, jest ~/.profile (lub ~/.bash_profile, jeśli nie lubisz powłok innych niż bash). Zobacz Jaka jest różnica między nimi i którego powinienem użyć?

Uwagi dotyczące powłok innych niż bash

W bash, ksh i zsh export jest specjalną składnią, a zarówno PATH=~/opt/bin:$PATH, jak i export PATH=~/opt/bin:$PATH robią nawet właściwe rzeczy. W innych powłokach Bourne/POSIX, takich jak dash (który w wielu systemach jest /bin/sh), eksport jest analizowany jako normalne polecenie, co implikuje dwie różnice:

  • ~ jest analizowany tylko na początku słowa, z wyjątkiem przypisań (zobacz Jak dodać ścieżkę do katalogu domowego, który zostanie wykryty przez system Unix i wymaga polecenia? ;
  • Zewnętrzne podwójne cudzysłowy $PATH są przerywane, jeśli PATH zawiera spacje lub \[*? .

Tak więc w powłokach takich jak myślnik export PATH=~/opt/bin:$PATH ustawia PATH na dosłowny łańcuch ~/opt/bin/: po którym następuje wartość PATH aż do pierwszego miejsca. PATH=~/opt/bin:$PATH (proste przypisanie) nie wymaga cudzysłowów i działa właściwie. Jeśli chcesz użyć eksportu w przenośnym skrypcie, musisz napisać export PATH="$HOME/opt/bin:$PATH" lub PATH=~/opt/bin:$PATH export PATH (lub PATH=$HOME/opt /bin: $PATH export PATH dla przenośności nawet do powłoki Bourne'a, która nie akceptuje export var=value i nie wykonała interpretacji tyldy).

¹ Nie było to prawdą w powłokach Bourne'a (takich jak rzeczywista powłoka Bourne'a, a nie w nowoczesnych powłokach w stylu POSIX), ale jest mało prawdopodobne, aby w dzisiejszych czasach natknąć się na te stare powłoki. Pod>

Oba sposoby działają, ale nie robią tego samego: elementy PATH są sprawdzane od lewej do prawej. W pierwszym przykładzie pliki wykonywalne w ~/opt/bin będą miały pierwszeństwo przed tymi ustawionymi na przykład w /usr/bin, co może, ale nie musi być tym, czego chcesz.

W szczególności niebezpieczne jest z punktu widzenia bezpieczeństwa dodawanie ścieżek z przodu, ponieważ jeśli ktoś może uzyskać dostęp do zapisu do twojego ~/opt/bin , może na przykład umieścić inny ls, którego prawdopodobnie użyjesz zamiast /bin /ls bez zauważenia. Teraz wyobraź sobie, że robisz to samo dla ssh, przeglądarki lub wyboru ... (Trzy razy umieść to samo na swojej ścieżce.)

Jestem zdezorientowany co do pytania 2 (ponieważ zostało usunięte z pytania, ponieważ było związane z niepowiązanym problemem):

Co skuteczna metoda dodanie dodatkowych ścieżek do różnych linii? Początkowo myślałem, że to może załatwić sprawę:

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

Ale to nie dlatego, że drugie przypisanie nie tylko dodaje ~/opt/node/bin , ale także wcześniej przypisaną PATH .

Oto możliwe obejście problemu:

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

Ale dla czytelności wolałbym mieć jedno miejsce docelowe na ścieżkę.

Jeśli powiesz

ŚCIEŻKA=~/opt/bin

Ten Wszystko, który będzie w Twojej ŚCIEŻCE. PATH to tylko zmienna środowiskowa i jeśli chcesz dodać do PATH, musisz odbudować zmienną z dokładnie taką treścią, jakiej potrzebujesz. Oznacza to, że to, co podajesz jako przykład do pytania 2, jest dokładnie tym, co chcesz zrobić, jeśli nie całkowicie przegapiłem sens pytania.

Używam obu form w moim kodzie. Mam ogólny profil, który instaluję na każdym komputerze, na którym pracuję, który wygląda tak, aby hostować potencjalnie brakujące katalogi:

Export PATH=/opt/bin:/usr/local/bin:/usr/contrib/bin:/bin:/usr/bin:/usr/sbin:/usr/bin/X11 # dodaj opcjonalne elementy do ścieżki dla bindir w $HOME/local/bin $HOME/bin; zrób if [-d $bindir]; następnie PATH=$PATH:$(bindir) fi gotowe

Linux definiuje wykonywalną ścieżkę wyszukiwania za pomocą zmiennej środowiskowej $PATH. Aby dodać katalog /data/myscripts na początek zmiennej środowiskowej $PATH, użyj:

PATH=/data/myscripts:$PATH

Aby dodać ten katalog na końcu ścieżki, użyj następującego polecenia:

PATH=$PATH:/data/myscripts

Ale poprzednie nie wystarczą, ponieważ kiedy ustawisz zmienną środowiskową w skrypcie, ta zmiana zacznie obowiązywać tylko w skrypcie. To ograniczenie jest ograniczone na dwa sposoby:

  • Jeśli wyeksportujesz zmienną środowiskową w skrypcie, będzie ona obowiązywać w każdym programie wywoływanym przez skrypt. Należy zauważyć, że nie jest to skuteczne w programie, który wywołał skrypt.
  • Jeśli program wywołujący skrypt zrobi to poprzez włączenie zamiast wywołania, wszelkie zmiany środowiska w skrypcie będą obowiązywać w programie wywołującym. To włączenie można wykonać za pomocą polecenia kropka lub polecenia source.

$HOME/myscript.sh źródło $HOME/myscript.sh

Inkluzja zasadniczo obejmuje skrypt „wywołany” w skrypcie „wywołującym”. Jest to podobne do #include w C. Dlatego jest skuteczne wewnątrz skryptu lub programu wywołującego. Ale oczywiście nie jest to skuteczne w przypadku programów lub skryptów wywoływanych przez program wywołujący. Aby był skuteczny aż do łańcucha wywołań, musisz postępować zgodnie z ustawieniem zmiennej środowiskowej za pomocą polecenia eksportu.

Na przykład program powłoki bash zawiera zawartość pliku .bash_profile po włączeniu. Więc umieść następujące 2 wiersze w .bash_profile:

PATH=$PATH:/data/myscripts wyeksportuj PATH

skutecznie umieszcza te 2 wiersze kodu w programie bash. Tym samym w zmienna basha$PATH zawiera $HOME/myscript.sh , a ze względu na instrukcję export wszystkie programy wywoływane przez bash mają zmienioną zmienną $PATH. A ponieważ wszystkie programy uruchamiane z zachęty bash są wywoływane przez bash, nowa ścieżka dotyczy wszystkiego, co uruchamiasz z zachęty bash.

Najważniejsze jest to, że aby dodać nowy katalog do ścieżki, musisz dodać lub dołączyć katalog do zmiennej środowiskowej $ PATH w skrypcie dołączonym do powłoki i musisz wyeksportować zmienną środowiskową $ PATH.

Od jakiegoś czasu mam przy sobie dwie funkcje pathadd i pathrm , które pomagają dodawać elementy do ścieżki bez martwienia się o duplikaty.

pathadd pobiera jeden argument path i opcjonalny argument after, który, jeśli zostanie dodany, zostanie dodany do PATH , w przeciwnym razie go doda.

W każdej sytuacji, jeśli dodajesz ścieżkę, prawdopodobnie chcesz zastąpić wszystko, co już jest na ścieżce, dlatego wolę dodać domyślną.

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

Umieść je w dowolnym skrypcie, w którym chcesz zmienić środowisko PATH, a teraz możesz zaczynać.

pathadd "/foo/bar" pathadd "/baz/bat" po wyeksportowaniu PATH

Masz gwarancję, że nie dodasz ścieżki, jeśli już istnieje. Jeśli chcesz, aby /baz/bat był uruchamiany na początku.

Pathrm "/baz/bat" pathdodaj "/baz/bat" ŚCIEŻKA eksportu

Teraz dowolną ścieżkę można przesunąć na przód, jeśli już jest na ścieżce, bez jej dublowania.

Kuloodporny sposób dodawania/obróbki wstępnej

Istnieje wiele kwestii związanych z wyborem dodawania i dodawania. Wiele z nich jest omówionych w innych odpowiedziach, więc nie będę ich tutaj powtarzać.

Ważną kwestią jest to, że nawet jeśli skrypty systemowe tego nie używają (zastanawiam się dlaczego) * 1 , kuloodporny sposób na dodanie ścieżki (np. $HOME/bin) do zmiennej środowiskowej PATH

PATH="$(ŚCIEŻKA:+$(ŚCIEŻKA):)$HOME/bin"

dodać (zamiast PATH="$PATH:$HOME/bin") i

PATH="$HOME/bin$(ŚCIEŻKA:+:$(ŚCIEŻKA))"

dodać (zamiast PATH="$HOME/bin:$PATH")

Pozwala to uniknąć fałszywego wiodącego/końcowego dwukropka, gdy $PATH jest początkowo pusty, co może mieć niepożądane skutki uboczne i może być koszmarem do nieuchwytnego znalezienia (ta odpowiedź krótko dotyczy przypadku awk-way).

$(parametr:+słowo)

Jeśli parametr jest pusty lub nieustawiony, nic nie jest zastępowane, w przeciwnym razie słowo jest zastępowane.

Zatem $(PATH:+$(PATH):) rozwija się do: 1) nic, jeśli PATH jest puste lub nieustawione, 2) $(PATH): jeśli PATH jest ustawione.

Notatka. To dla basha.

*1 Właśnie odkryłem, że skrypty takie jak devtoolset-6/enable faktycznie używają tego $ cat /opt/rh/devtoolset-6/enable # Ogólne zmienne środowiskowe export PATH=/opt/rh/devtoolset-6/root/usr /bin$ (ścieżka:+:$(ścieżka)) ...

Nie mogę mówić za inne dystrybucje, ale Ubuntu ma plik /etc/environment, który jest domyślną ścieżką wyszukiwania dla wszystkich użytkowników. Ponieważ mój komputer jest używany tylko przeze mnie, umieszczam tam dowolne katalogi na mojej ścieżce, chyba że jest to tymczasowy dodatek, który umieszczam w skrypcie.

Dla mnie (w systemie Mac OS X 10.9.5) dodanie nazwy ścieżki (np. /mypathname) do pliku /etc/paths działało dobrze.

Przed edycją zwracane jest echo $PATH:

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

Po edycji /etc/paths i ponownym uruchomieniu powłoki, zmienna $PATH jest dodawana z /pathname . Rzeczywiście, echo $PATH zwraca:

/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/mojanazwaścieżki

Zdarzyło się, że do zmiennej $PATH dodano /mypathname.

Zmienne środowiskowe w Linuksie to specjalne zmienne zdefiniowane przez powłokę i używane przez programy podczas wykonywania. Mogą być definiowane przez system i użytkownika. Zmienne środowiskowe systemu Linux są definiowane przez system i używane przez programy na poziomie systemu.

Na przykład polecenie PWD używa zmiennej systemowej do zachowania starego katalogu roboczego. Zmienne środowiskowe użytkownika są ustawiane przez użytkownika dla bieżącej powłoki, tymczasowo lub na stałe. Cała koncepcja dodawania i usuwania zmiennych powłoki obraca się wokół wielu plików, poleceń i różnych powłok.

Mówiąc szerzej, zmienna środowiskowa może być trzech typów:

1. Lokalne zmienne środowiskowe

Te zmienne są zdefiniowane tylko dla bieżącej sesji. Zostaną one trwale usunięte po zakończeniu sesji, czy dostęp zdalny lub emulator terminala. Nie są one przechowywane w żadnych plikach, ale są tworzone i usuwane za pomocą specjalnych poleceń.

2. Zmienne powłoki użytkownika

Te zmienne powłoki Linuksa są definiowane dla konkretnego użytkownika i są ładowane za każdym razem, gdy użytkownik loguje się przy użyciu lokalnego terminala lub łączy się zdalnie. Zmienne takie są zwykle przechowywane w plikach konfiguracyjnych: .bashrc, .bash_profile, .bash_login, .profile lub innych plikach znajdujących się w katalogu użytkownika.

3. Systemowe zmienne środowiskowe

Zmienne te są dostępne w całym systemie, dla wszystkich użytkowników. Są ładowane podczas uruchamiania systemu z plików konfiguracyjnych systemu: /etc/environment, /etc/profile, /etc/profile.d/ /etc/bash.bashrc.

Pliki konfiguracyjne zmiennych środowiskowych systemu Linux

Tutaj przyjrzymy się szybko różnym plikom konfiguracyjnym wymienionym powyżej, które służą do ustawiania zmiennych środowiskowych dla całego systemu lub określonego użytkownika.

bashrc

Jest to plik zmiennych specyficznych dla użytkownika. Jest ładowany za każdym razem, gdy użytkownik tworzy sesję terminala, czyli innymi słowy otwiera nowy terminal. Wszystkie zmienne środowiskowe utworzone w tym pliku działają za każdym razem, gdy uruchamiana jest nowa sesja terminala.

.bash_profil

Te zmienne działają za każdym razem, gdy użytkownik łączy się zdalnie przez SSH. Jeśli brakuje tego pliku, system będzie szukał .bash_login lub .profile.

/etc/środowisko

Ten plik służy do tworzenia, edytowania i usuwania dowolnych zmiennych środowiskowych na poziomie systemu. Zmienne środowiskowe utworzone w tym pliku są dostępne dla całego systemu, dla każdego użytkownika, a nawet w przypadku połączenia zdalnego.

/etc/bash.bashrc

System bashrc. Ten plik jest wykonywany dla każdego użytkownika za każdym razem, gdy tworzy on nową sesję terminala. Działa to tylko dla użytkowników lokalnych, po połączeniu przez Internet takie zmienne nie będą widoczne.

/etc/profil

Profil plików systemowych. Wszystkie zmienne w tym pliku są dostępne dla każdego użytkownika w systemie tylko wtedy, gdy jest on zalogowany zdalnie. Nie będą one jednak dostępne podczas tworzenia lokalnej sesji terminala, tj. jeśli po prostu otworzysz terminal.

Wszystkie zmienne środowiskowe systemu Linux utworzone za pomocą tych plików można usunąć, po prostu usuwając je stamtąd. Dopiero po każdej zmianie musisz się wylogować i zalogować lub uruchomić to polecenie:

nazwa pliku źródłowego

Dodawanie zmiennych środowiskowych użytkownika i systemu w systemie Linux

Skoro znasz już trochę teorię, przejdźmy do praktyki. Lokalne zmienne środowiskowe w systemie Linux można tworzyć za pomocą następujących poleceń:

var=wartość
$ zmienna eksportu=wartość

Te zmienne będą dostępne tylko dla bieżącej sesji terminala.

Do usunięcia zmiennych środowiskowych można użyć kilku poleceń:

1. Korzystanie ze środowiska

Domyślnie env może służyć do przeglądania wszystkich ustawionych zmiennych środowiskowych. Ale z opcją -i pozwala tymczasowo usunąć wszystkie zmienne powłoki i uruchomić polecenie bez zmiennych.

polecenie env -i

Var to dowolna zmienna, którą chcesz przekazać do tego polecenia.

To polecenie w ogóle uruchomi powłokę bez zmiennych środowiskowych:

Po uruchomieniu takiego środowiska żadne zmienne nie będą dostępne, ale po wyjściu wszystko wróci na swoje miejsce.

2. Używanie rozbrojenia

To kolejny sposób na usunięcie zmiennych środowiskowych systemu Linux. Unset usuwa zmienną według nazwy do końca bieżącej sesji:

usuń ustawienie nazwa_zmiennej

3. Ustaw wartość zmiennej na „”

Jest to najłatwiejszy sposób usuwania zmiennych środowiskowych w systemie Linux, ustawiając zmienną na pustą, usuwasz ją do końca bieżącej sesji.

Uwaga: Korzystając z tych metod, możesz zmienić wartości zmiennych systemowych lub użytkownika, ale będą one istotne tylko dla bieżącej sesji.

Tworzenie zmiennych środowiskowych użytkownika i systemu

W tej sekcji przyjrzymy się, jak ustawiać i usuwać zmienne systemowe i użytkownika nie tylko dla bieżącej sesji, ale tak, aby efekt utrzymywał się po ponownym uruchomieniu.

1. Ustaw i usuń zmienne lokalne w systemie Linux

Stwórzmy zmienną lokalną VAR i ustawmy ją na dowolną wartość, a następnie usuńmy ją poleceniem unset i upewnijmy się, że została usunięta:

VAR1="Strata"
$ echo $VAR1
$ usuń VAR1
$ echo $VAR1

Innym sposobem na utworzenie zmiennej jest użycie polecenia export. Usuń go, przypisując pustą wartość:

wyeksportuj VAR="Strata"
$ echo $VAR
$zmienna=
$ echo $VAR

Teraz utwórzmy zmienną VAR2 i nadajmy jej wartość. A następnie tymczasowo usuń wszystkie zmienne lokalne, uruchamiając env -i. Uruchomi powłokę bez żadnych zmiennych. Po wpisaniu exit wszystkie zmienne zostaną przywrócone.

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

Ustawianie i usuwanie zmiennych użytkownika

Edytuj plik .bashrc w swoim katalogu domowym, dodając polecenie eksportu, aby wyeksportować żądaną zmienną. Następnie uruchom polecenie source, aby zastosować zmiany. Utwórzmy na przykład zmienną CD:

Dodaj tę linię (o, następnie wklej, następnie Esc i :wq):

export CD="To jest utracony dom"

Teraz pozostaje zaktualizować konfigurację:

źródło .bashrc
$ echo $CD

Aby usunąć tę zmienną, po prostu usuń ją z .bashrc.

Teraz dodajmy zmienną środowiskową z .bash_profile. Ta zmienna, jak już wiesz, będzie dostępna tylko wtedy, gdy zalogujesz się zdalnie:

vi .bash_profile

Dodaj linię:

export VAR2="To jest utracony dom"

I uruchom te polecenia, aby zastosować zmiany i przetestować dodanie zmiennej:

źródło .bash_profile
$ echo $VAR2

Zmienna jest niedostępna, ponieważ utworzyłeś lokalną sesję terminala, teraz połącz się przez ssh:

ssh [e-mail chroniony]
$ echo $VAR2

Możesz usunąć tę zmienną środowiskową w taki sam sposób, jak w poprzednim przypadku, usuwając ją z pliku.

Komentarz: Te zmienne są zawsze dostępne, ale nie dla wszystkich użytkowników.

Ustawianie i usuwanie systemowych zmiennych środowiskowych

Stwórzmy zmienną dostępną dla wszystkich użytkowników we wszystkich sesjach terminalowych z wyjątkiem sesji zdalnych, dodając ją do /etc/bash.profile:

vi /etc/bash.profile

export VAR="To jest zmienna systemowa"

Następnie aktualizujemy:

źródło /etc/bash.bashrc

Teraz ta zmienna jest dostępna dla wszystkich użytkowników we wszystkich terminalach:

powtórz $VAR
$ sudo su
$ echo $VAR
$su-
$ echo $VAR

Jeśli chcesz udostępnić zmienną środowiskową wszystkim użytkownikom łączącym się zdalnie z tym komputerem, edytuj plik /etc/profile:

export VAR1="To jest zmienna systemowa tylko dla sesji zdalnych"

Zaktualizuj konfigurację i sprawdź dostępność zmiennej, będzie ona dostępna tylko zdalnie:

źródło /etc/profil
$ echo $VAR1

Jeśli musisz dodać zmienną środowiskową w systemie Linux, aby była dostępna zarówno dla sesji zdalnych, jak i lokalnych, wyeksportuj ją do /etc/environment:

vi /etc/environment

export VAR12="Jestem dostępny wszędzie"

Sprawdzamy:

źródło /etc/środowisko
$ echo $VAR12
$ sudo su
$ echo $VAR12
$wyjście
$ ssh host lokalny
$ echo $VAR12

mob_info