Jak používat který příkaz v Linuxu

Příkaz Linux, který identifikuje spustitelný binární soubor, který se spustí, když zadáte příkaz do shellu. Pokud máte v počítači různé verze stejného programu, můžete pomocí které zjistit, kterou z nich bude shell používat.

Binární soubory a cesty

Když se pokusíte spustit program nebo příkaz z okna terminálu, shell (obvykle Bash na moderních distribucích) musí tento příkaz najít a spustit. Některé příkazy, jako např CD, Dějiny, a pwd, jsou zabudovány do shellu, takže Bash nemusí příliš pracně je najít.

Jak ale Bash najde další příkazy, programy a externí samostatné binární soubory? Bash používá cestu, což je vlastně sbírka cest, z nichž každá ukazuje na adresář. Potom v každém z těchto adresářů vyhledá spustitelný soubor, který odpovídá příkazu nebo programu, který se pokoušíte spustit. Když nějakou najde, Bash ji spustí a zanechá hledání.

Pomocí echo můžete zkontrolovat proměnnou prostředí $PATH a zobrazit adresáře ve vaší cestě. Chcete-li tak učinit, zadejte následující a stiskněte Enter:

echo $PATH

The

Výstupní seznam odděluje každou cestu dvojtečkami (:). Na počítači, který používáme, Bash prohledá následující adresáře v tomto pořadí:

  Jak odeslat e-mail s jinou adresou „Od“ v aplikaci Outlook

/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/zásobník
/uživatel/hry
/usr/local/games
/snap/bin

V systému souborů je mnoho složek nazvaných /sbin a /bin, což může vést k určitému zmatku.

Podívejte se na ty cesty

Řekněme, že máme aktualizovanou verzi programu s názvem htg. Je v našem aktuálním adresáři a můžeme jej spustit zadáním následujícího příkazu:

./htg

The

Není to moc program – jen vytiskne číslo verze a pak se zavře. Nová verze je 1.2.138.

Chcete-li spustit program v aktuálním pracovním adresáři, musíte před název programu napsat „./“, aby Bash věděl, kde jej najít.

Protože chceme tento konkrétní program spouštět z libovolného adresáře, přesuneme spustitelný soubor do adresáře /usr/bin. Bash najde tento program v cestě a spustí ho za nás.

Nepotřebujeme spustitelný soubor v našem aktuálním adresáři, ani nemusíme psát „./“ před název programu, jak je uvedeno níže:

sudo mv htg /usr/bin

The

Nyní se pokusíme spustit program zadáním:

htg

The

Něco běží, ale není to náš nový, aktualizovaný program. Spíše je to starší verze, 1.2.105.

Příkaz který

Problém, který jsme demonstrovali výše, je, proč příkaz which byl navržen.

V tomto příkladu použijeme který a předáme název programu, který zkoumáme, jako parametr příkazového řádku:

which htg

The

který hlásí, že nalezl verzi htg v adresáři /usr/local/bin. Protože se toto umístění objevuje v cestě před adresářem, do kterého jsme přesunuli aktualizované htg, používá Bash dřívější verzi programu.

  Jak hrát Psychonauts na Linuxu

Pokud však použijeme volbu -a (all), jak je uvedeno níže, která pokračuje v hledání, i když najde shodu:

which -a htg

The

Poté vypíše všechny shody v libovolném z adresářů v cestě.

Takže to je ten problém – v adresáři, který je také v patchi, je starší verze programu. A tento adresář se prohledává před adresářem, do kterého jsme upustili novou verzi programu.

Pro ověření můžeme napsat následující a explicitně spustit každou verzi programu:

/usr/local/bin/htg
/usr/bin/htg

To vysvětluje problém a řešení je jednoduché.

Ve skutečnosti máme možnosti. Starou verzi můžeme buď smazat v adresáři /use/local/bin, nebo ji přesunout z /usr/bin do /usr/local/bin.

Podívejte se na ty výsledky

Dva výsledky nemusí nutně znamenat dva binární soubory.

Podívejme se na příklad, ve kterém použijeme příkaz which s volbou -a (all) a hledáme verze programu less:

which -a less

The

který hlásí dvě umístění, kde je umístěna verze méně programu, ale je to pravda? Bylo by zvláštní mít na počítači se systémem Linux dvě různé verze (nebo stejnou verzi na více místech) nebo méně. Takže nebudeme akceptovat výstup, ze kterého. Místo toho pojďme kopat trochu hlouběji.

Můžeme použít volby ls, -l (dlouhý výpis) a -h (čitelný pro člověka), abychom viděli, co se děje:

ls -lh /usr/bin/less

The

Velikost souboru je hlášena jako devět bajtů! To rozhodně není úplná kopie méně.

  5 nejlepších peněženek z uhlíkových vláken s technologií blokování RFID (vydání 2021)

První znak výpisu je „l“. Normální soubor by měl jako první znak spojovník (-). „l“ je symbol, který znamená symbolický odkaz. Pokud jste tento detail přehlédli, symbol –> také označuje, že se jedná o a symbolický odkaz, což si můžete představit jako určitou zkratku. Tento ukazuje na kopii less v /bin.

Zkusme to znovu s verzí less v /bin:

ls -lh /bin/less

The

Tento záznam je zjevně „skutečný“ binární spustitelný soubor. Prvním znakem výpisu je pomlčka (-), což znamená, že se jedná o běžný soubor a velikost souboru je 167 KB. Je tedy nainstalována pouze jedna kopie z méně, ale je na ni symbolický odkaz z jiného adresáře, který Bash také najde, když prohledává cestu.

Kontrola více příkazů najednou

Můžete jim předat více programů a příkazů a bude je kontrolovat v pořadí.

Pokud například zadáte:

which ping cat uptime date head

The

který pracuje se seznamem programů a příkazů, které jste mu dodali, a uvádí výsledky pro každý z nich.

Která která je která?

Pokud jste tak nakloněni, můžete také použít který na sebe zadáním následujícího:

which which

Nehledě na to, že ze zvědavosti šťoucháte v souborovém systému Linuxu, což je nejužitečnější, když od příkazu nebo programu očekáváte jednu sadu chování, ale dostanete jinou.

V těchto případech můžete použít k ověření toho, že příkaz Bash spouští, je ten, který chcete použít.