Hogyan adhatunk könyvtárat a $PATH-hoz Linux alatt

A $PATH az egyik csendes manipulátor a Linux számítógéped hátterében. Csendesen befolyásolja a felhasználói élményt, de nincs benne semmi zavaró. Elmagyarázzuk, mit csinál, és hogyan állíthatja be.

Mi az a $PATH Linuxon, és hogyan működik?

Ha beír egy parancsot egy terminálablakba, és megnyomja az Enter billentyűt, elég sok tevékenységet indít el, mielőtt a parancs végrehajtásra kerülne.

Bash ez az alapértelmezett shell a legtöbb Linux disztribúción. Értelmezi a beírt szövegsort, és azonosítja a parancsneveket a paraméterekkel, csövekkel, átirányításokat, és bármi más is van. Ezután megkeresi a parancsok végrehajtható binárisait, és elindítja azokat az Ön által megadott paraméterekkel.

Az első lépés, amelyet a shell megtesz a végrehajtható fájl megkereséséhez, annak megállapítása, hogy van-e benne bináris fájl. Ha a használt parancs magában a shellben található (a „shell beépített”) nincs szükség további keresésre.

A shell beépített moduljait a legkönnyebb megtalálni, mert a héj szerves részét képezik. Olyan, mintha egy szerszámos övben lennének – mindig veled vannak.

Ha azonban szüksége van valamelyik másik eszközére, akkor a műhelyben kell turkálnia, hogy megtalálja. A munkapadon vagy egy fali akasztón van? Ezt teszi a $PATH környezeti változó. Tartalmazza azon helyek listáját, ahol a shell keres, és a keresés sorrendjét.

Ha látni szeretné, hogy egy parancs a beépített shell, álnév, függvény vagy önálló bináris mv /work/unfile, használhatja a type parancsot az alábbiak szerint:

type clear
type cd

A

Ez azt jelzi, hogy a clear egy bináris fájl, és az elérési útban található első fájl a /usr/bin könyvtárban található. Előfordulhat, hogy a clear egynél több verziója van telepítve a számítógépére, de a shell ezt fogja használni.

Nem meglepő módon a cd egy shell beépített.

A $PATH listázása

Könnyű látni, mi van az utadban. Csak írja be a következőket az echo parancs használatához és nyomtassa ki az értéket a $PATH változóban van:

echo $PATH

A

A kimenet kettősponttal (:) elválasztott fájlrendszer-helyek listája. A shell balról jobbra keres az elérési útvonalon, és minden fájlrendszer-helyen ellenőrzi a megfelelő végrehajtható fájlt a parancs végrehajtásához.

  A Systemd megváltoztatja a Linux főkönyvtárának működését

A listában végigjárhatjuk a keresett fájlrendszer-helyeket és a keresés sorrendjét:

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

Valami, ami nem biztos, hogy azonnal nyilvánvaló, az az, hogy a keresés nem indul el az aktuális munkakönyvtárban. Inkább a felsorolt ​​könyvtárakon halad keresztül, és csak a felsorolt ​​könyvtárakon.

Ha az aktuális munkakönyvtár nincs az elérési útjában, a rendszer nem keresi. Továbbá, ha olyan könyvtárakban vannak olyan parancsok, amelyek nincsenek az elérési útban, a shell nem fogja megtalálni azokat.

Ennek demonstrálására készítettünk egy kis programot rf néven. Végrehajtáskor az rf kiírja annak a könyvtárnak a nevét a terminálablakban, ahonnan elindult. A /usr/local/bin könyvtárban található. A /dave/work könyvtárban van egy újabb verziónk is.

A következő parancsot írjuk be hogy megmutassa programunk melyik verzióját a shell megtalálja és használja:

which rf

A

A shell jelenti a talált verziót az elérési útban lévő könyvtárban.

A bekapcsoláshoz a következőket írjuk be:

rf

A

Az rf 1.0-s verziója fut, és megerősíti, hogy várakozásaink helyesek voltak. A megtalált és végrehajtott verzió a /usr/local/bin könyvtárban található.

Az rf bármely más verziójának futtatásához ezen a számítógépen a végrehajtható fájl elérési útját kell használnunk a parancssorban, az alábbiak szerint:

./work/rf

A

Most, hogy megmondtuk a shellnek, hogy hol találja meg a futtatni kívánt rf-verziót, az 1.1-es verziót használja. Ha ezt a verziót részesítjük előnyben, bemásolhatjuk a /usr/local/bin könyvtárba, és felülírhatjuk a régit.

Tegyük fel, hogy az rf új verzióját fejlesztjük. Fejlesztésünk és tesztelésünk során gyakran kell futtatnunk, de nem szeretnénk egy kiadatlan fejlesztési buildet átmásolni az élő környezetbe.

Vagy talán letöltöttük az rf új verzióját, és ellenőrizni szeretnénk, mielőtt nyilvánosan elérhetővé tesszük.

Ha hozzáadjuk a munkakönyvtárunkat az elérési úthoz, akkor a shell megtalálja a mi verziónkat. És ez a változás csak minket érint – mások továbbra is az rf verzióját fogják használni a /usr/local/bin könyvtárban.

Könyvtár hozzáadása a $PATH-hoz

Használhatja az export parancsot adjunk hozzá egy könyvtárat a $PATH-ra. A könyvtár ezután bekerül a shell által keresett fájlrendszer-helyek listájába. Amikor a shell talál egy megfelelő végrehajtható fájlt, leállítja a keresést, ezért győződjön meg arról, hogy először a könyvtárban keres, a /usr/local/bin előtt.

  Hogyan lehet javítani a Linux vágólapon a CopyQ segítségével

Ezt könnyű megtenni. Példánkban a következőket írjuk be, hogy a könyvtárunkat az elérési út elejéhez adjuk, így ez lesz az első keresett hely:

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

A

Ez a parancs beállítja, hogy a $PATH egyenlő legyen a hozzáadandó könyvtárral, a /home/dave/work könyvtárral, majd a teljes aktuális elérési úttal.

Az első PATH-nak nincs dollárjele ($). Beállítjuk a PATH értékét. A végső $PATH-nak dollárjele van, mert a PATH változóban tárolt tartalomra hivatkozunk. Figyelje meg a kettőspontot (:) is az új könyvtár és a $PATH változó neve között.

Nézzük, hogyan néz ki most az út:

echo $PATH

A

A /home/dave/work könyvtárunk hozzáadódik az elérési út elejéhez. Az általunk megadott kettőspont választja el az útvonal többi részétől.

A következőket írjuk be, hogy ellenőrizzük, hogy a mi rf-verziónk található-e először:

which rf

A

A pudingban lévő bizonyíték az rf-et futtatja, az alábbiak szerint:

rf

A

A shell megtalálja az 1.1-es verziót, és végrehajtja a /home/dave/work fájlból.

Ahhoz, hogy a könyvtárunkat az elérési út végére adjuk, csak helyezzük át a parancs végére, például:

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

A változtatások véglegessé tétele

Mint Beth Brooke-Marciniak azt mondta: „A siker rendben van, de a siker múlandó.” Abban a pillanatban, amikor bezárja a terminál ablakát, a $PATH-on végrehajtott módosítások eltűnnek. Az állandóvá tételükhöz el kell helyeznie az export parancsot egy konfigurációs fájlba.

Amikor beírja az export parancsot a .bashrc fájlba, az beállítja az elérési utat minden egyes terminálablak megnyitásakor. nem úgy mint SSH munkamenetek, amelyhez be kell jelentkezni, ezeket „interaktív” munkameneteknek nevezzük.

Korábban az export parancsot a .profile fájlba helyezte, hogy beállítsa a terminálmunkamenetek elérési útját.

Azt találtuk azonban, hogy ha az export parancsot akár a .bashrc, akár a .profile fájlba helyezzük, az megfelelően beállítja az interaktív és a bejelentkezési terminálmunkamenetek elérési útját. Lehet, hogy más a tapasztalatod. Az összes eshetőség kezeléséhez mindkét fájlban megmutatjuk, hogyan kell ezt megtenni.

  Corsair egér és billentyűzet problémák megoldása macOS és Linux rendszeren

Használja a következő parancsot a /home könyvtárában a .bashrc fájl szerkesztéséhez:

gedit .bashrc

A

A gedit szerkesztő megnyílik a .bashrc fájl betöltésével.

A gedit szerkesztő a

Görgessen le a fájl aljára, majd adja hozzá a következő, korábban használt export parancsot:

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

Mentse el a fájlt. Ezután zárja be, majd nyissa meg újra a terminálablakot, vagy használja a dot parancsot a .bashrc fájl olvasásához, az alábbiak szerint:

. .bashrc

Ezután írja be a következő echo parancsot az elérési út ellenőrzéséhez:

echo $PATH

A

Ez hozzáadja a /home/dave/work könyvtárat az elérési út elejéhez.

A parancsnak a .profile fájlhoz történő hozzáadásának folyamata ugyanaz. Írja be a következő parancsot:

gedit .profile

A

A gedit szerkesztő elindul a .profile fájl betöltésével.

A gedit szerkesztő a

Adja hozzá az export parancsot a fájl aljához, majd mentse el. Egy új terminálablak bezárása és megnyitása nem elegendő a .profile fájl újraolvasására. Az új beállítások életbe léptetéséhez ki kell jelentkeznie, majd újra be kell jelentkeznie, vagy használja a dot parancsot az alábbiak szerint:

. .profile

Útvonal kijelölése mindenki számára

Ha be szeretné állítani az elérési utat mindenki számára, aki használja a rendszert, szerkesztheti az /etc/profile fájlt.

A sudo-t kell használnia a következők szerint:

sudo gedit /etc/profile

Amikor a gedit szerkesztő elindul, adja hozzá az export parancsot a fájl aljához.

A gedit szerkesztő a

Mentse és zárja be a fájlt. A módosítások másokra a következő bejelentkezéskor lépnek életbe.

Megjegyzés a biztonságról

Ügyeljen arra, hogy véletlenül se adjon hozzá vezető kettőspontot „:” az elérési úthoz, ahogy az alább látható.

A

Ha igen, akkor először az aktuális könyvtárban fog keresni, ami biztonsági kockázatot jelent. Tegyük fel, hogy letöltött egy archív fájlt, és kicsomagolta egy könyvtárba. Megnézi a fájlokat, és egy másik tömörített fájlt lát. Az archívum kibontásához még egyszer meghívja a kicsomagolást.

Ha az első archívum egy unzip nevű végrehajtható fájlt tartalmazott, amely rosszindulatú futtatható fájl volt, akkor véletlenül ezt indítja el a valódi kicsomagoló futtatható fájl helyett. Ez azért történik, mert a shell először az aktuális könyvtárban keres.

Ezért mindig legyen óvatos, amikor beírja az exportálási parancsokat. Az echo $PATH segítségével tekintse át őket, és győződjön meg arról, hogy olyanok, amilyennek szeretnétek.