GNU/Linux >> Znalost Linux >  >> Linux

Jak vypsat sdílené knihovny používané spustitelnými soubory v Linuxu

V prostředí operačního systému Linux jsou binární spustitelné soubory spojené s aplikacemi/programy, které chcete spouštět, přímo propojeny se sdílenými knihovnami načtenými za běhu.

Jako zvědavý a vyvíjející se uživatel Linuxu budete v pokušení získat představu o těchto sdílených knihovnách zapojených/propojených s binárními spustitelnými soubory, které spouštíte během normálního spouštění programu.

Tento článek nás provede několika způsoby, jak zjistit všechny sdílené knihovny používané spustitelnými soubory v Linuxu.

Stručný přehled o linuxových knihovnách

Programátor nebo uživatel obeznámený se světem programování definuje knihovnu jako předem zkompilované části kódu/segmenty sestavené dohromady v organizovaném způsobu/formátu. Díky předkompilované povaze/atributu knihovny je flexibilně a snadno znovu použitelná mezi různými programy.

V rámci architektury operačního systému Linux můžeme knihovny kategorizovat jako statické (statické knihovny ) nebo sdíleno (sdílené knihovny ).

Statické knihovny jsou staticky vázány na konkrétní program a jsou přístupné pouze během doby kompilace programu. Sdílené knihovny se stanou aktivními po spuštění programu a budou umístěny v paměti po dobu běhu programu.

Jak najít sdílené knihovny programu v Linuxu

Před určením sdílených knihoven přidružených k cílovému programu musíte nejprve vědět, kde se nachází spustitelný soubor spojený s vaším programem. V Linuxu je umístění spustitelných souborů vašich programů obvykle uvnitř /usr/bin adresář.

$ ls -l /usr/bin

Sloupec zcela vpravo uvádí názvy spustitelných souborů vašich programů.

Najděte sdílené knihovny linuxového programu pomocí příkazu ldd

ldd existuje jako přímý skript shellu, který ukazuje na sdílené knihovny programu. Podle výše uvedeného snímku obrazovky se například pokusme o výstup sdílených knihoven spojených s aplikací anydesk.

Umístění spustitelného souboru Anydesku bychom mohli určit příkazem:

$ whereis anydesk

Chcete-li určit své sdílené knihovny pomocí ldd příkaz, provedeme:

$ ldd /usr/bin/anydesk 

Jak můžete vidět, máme seznam četných knihoven spojených s anydesk aplikace. Upozorňujeme, že ldd příkaz má tendenci spouštět dotazované programy a získávat informace o sdílených knihovnách. Proto přiřaďte příkaz pouze k důvěryhodným spustitelným souborům.

Najděte programově sdílené knihovny pomocí příkazů objdump a grep

objdump příkaz je součástí GNU Binutils balíček se zaměří na zobrazení informací o souborech objektů, zatímco grep příkaz zobrazí seznam přidružených sdílených knihoven programu.

Podívejme se, co tyto příkazy přinesou programu jako whois používá se pro informace o názvech domén.

$ whereis whois 

Dále zjistěte sdílené knihovny programu.

$ objdump -p /usr/bin/whois | grep 'NEEDED'

Jak vidíte, whois spustitelný program pro vyhledávání domén je spojen se dvěma sdílenými knihovnami.

Případně můžete také použít readelf příkaz k načtení sdílených informací pro spustitelný soubor programu zip.

$ whereis zip
$ readelf --dynamic /usr/bin/zip | grep NEEDED

Podle výstupu zip spustitelný program je spojen se dvěma sdílenými knihovnami.

Najděte sdílené knihovny pomocí příkazu Awk

Tato možnost je ideální pro program, který již běží. Nejprve potřebujeme získat jeho PID (ID procesu ). Řekněme například, že máme Flameshot běží nástroj pro snímání obrazovky.

Chcete-li získat jeho PID , spustíme:

$ pgrep flameshot 

45261

Naše /proc//maps soubor bude transformován na /proc/45261/maps . Nyní můžeme tento soubor zkombinovat s awk příkaz k načtení Flameshot spustitelné sdílené knihovny, jak je ukázáno níže.

$ awk '$NF!~/\.so/{next} {$0=$NF} !a[$0]++' /proc/45261/maps

Nyní jsme dobře obeznámeni se seznamem všech sdílených knihoven spojených se spustitelnými soubory v Linuxu.


Linux
  1. Jak spravovat a vypisovat služby v Linuxu

  2. Úvod do sdílených knihoven Linuxu (Jak vytvořit sdílené knihovny)

  3. Jak inicializovat sdílenou knihovnu v Linuxu

  1. Jak zobrazit všechny sdílené knihovny používané spustitelnými soubory v Linuxu?

  2. Odstraňování sdílených linuxových knihoven

  3. Jak vypsat seznam procesů připojených k segmentu sdílené paměti v linuxu?

  1. Jak používat příkaz Linux SS

  2. Jak vypsat běžící procesy v Linuxu

  3. Jak vypsat seznam uživatelů v Linuxu