1.命令簡介
ldd 命令用于打印程序或者共享庫文件所依賴的共享庫列表。注意,ldd 本身不是一個二進(jìn)制程序,而是一個 Shell 腳本,使用文本編輯器 vim 可以查看其內(nèi)容,具體目錄可以使用 which 命令查看:
whichldd
/usr/bin/ldd
我們知道,Linux 的動態(tài)庫裝載器 ld-linux.so 模塊會先于 executable 模塊工作,并獲得控制權(quán),ld-linux.so 會通過系統(tǒng)環(huán)境變量的設(shè)置,選擇只顯示可執(zhí)行模塊的dependency,而不運(yùn)行可執(zhí)行模塊。相關(guān)環(huán)境變量有:
ldd 默認(rèn)開啟的環(huán)境變量是:LD_TRACE_LOADED_OBJECTS=1。也就是說,LD_TRACE_LOADED_OBJECTS為必要環(huán)境變量,其他環(huán)境變量的設(shè)置是可選的。其他的變量的設(shè)置與ldd命令選項(xiàng)的對應(yīng)關(guān)系如下:
-d,--data-relocs->LD_WARN=yes
-r,--function-relocs->LD_WARN和LD_BIND_NOW=yes
-u,--unused->LD_DEBUG="unused"
-v,--verbose->LD_VERBOSE=yes
比如設(shè)置LD_TRACE_LOADED_OBJECTS環(huán)境變量不為空時,任何可執(zhí)行程序在運(yùn)行時,都會只顯示依賴的動態(tài)庫,程序并不真正地執(zhí)行。測試如下:
exportLD_TRACE_LOADED_OBJECTS=1
ls
linux-vdso.so.1=>(0x00007ffd1d3cf000)
/$LIB/libonion.so=>/lib64/libonion.so(0x00007fbbe7162000)
libselinux.so.1=>/lib64/libselinux.so.1(0x00007fbbe6e2e000)
libcap.so.2=>/lib64/libcap.so.2(0x00007fbbe6c29000)
libacl.so.1=>/lib64/libacl.so.1(0x00007fbbe6a20000)
libc.so.6=>/lib64/libc.so.6(0x00007fbbe665e000)
libdl.so.2=>/lib64/libdl.so.2(0x00007fbbe645a000)
libpthread.so.0=>/lib64/libpthread.so.0(0x00007fbbe623e000)
libpcre.so.1=>/lib64/libpcre.so.1(0x00007fbbe5fdd000)
liblzma.so.5=>/lib64/liblzma.so.5(0x00007fbbe5db8000)
/lib64/ld-linux-x86-64.so.2(0x00007fbbe7053000)
libattr.so.1=>/lib64/libattr.so.1(0x00007fbbe5bb3000)
撤銷該環(huán)境變量,ls 即可恢復(fù)正常使用:
unsetLD_TRACE_LOADED_OBJECTS
ls
ChangelogChangelog.lndablelvtxt.txt
由此可見,ldd 命令其實(shí)是通過設(shè)置 ld-linux.so 依賴的環(huán)境變量來影響 ld-linux.so的工作方式,使得可執(zhí)行模塊加載時顯示其依賴的動態(tài)庫。實(shí)際上可以直接執(zhí)行 ld-linux.so 模塊,如/lib/ld-linux.so.2 --list program
,來達(dá)到命令ldd program
的效果。
2.命令格式
ldd[OPTIONS]
其中[OPTIONS]
為可選的命令選項(xiàng),
為必填的程序或者共享庫文件列表。
3.選項(xiàng)說明
--version:打印ldd版本號
-v, --verbose:詳細(xì)信息模式,打印所有相關(guān)信息
-u, --unused:打印未使用的直接依賴
-d, --data-relocs:執(zhí)行重定位和報告任何丟失的對象
-r,--function-relocs:執(zhí)行數(shù)據(jù)對象和函數(shù)的重定位,并且報告任何丟失的對象和函數(shù)。(只對ELF格式文件有效)
--help:顯示幫助信息
4.示例說明
(1)顯示可執(zhí)行文件依賴的動態(tài)鏈接庫。
ldd/usr/bin/ls
linux-vdso.so.1=>(0x00007ffd90514000)
/$LIB/libonion.so=>/lib64/libonion.so(0x00007f294ade8000)
libselinux.so.1=>/lib64/libselinux.so.1(0x00007f294aab4000)
libcap.so.2=>/lib64/libcap.so.2(0x00007f294a8af000)
libacl.so.1=>/lib64/libacl.so.1(0x00007f294a6a6000)
libc.so.6=>/lib64/libc.so.6(0x00007f294a2e4000)
libdl.so.2=>/lib64/libdl.so.2(0x00007f294a0e0000)
libpthread.so.0=>/lib64/libpthread.so.0(0x00007f2949ec4000)
libpcre.so.1=>/lib64/libpcre.so.1(0x00007f2949c63000)
liblzma.so.5=>/lib64/liblzma.so.5(0x00007f2949a3e000)
/lib64/ld-linux-x86-64.so.2(0x00007f294acd9000)
libattr.so.1=>/lib64/libattr.so.1(0x00007f2949839000)
參考文獻(xiàn)
[1] ldd manual
[2] Linux命令大全.ldd命令
[3] 博客園.ldd命令
責(zé)任編輯:xj
原文標(biāo)題:每天一個 Linux 命令(103):ldd 命令
文章出處:【微信公眾號:Linux愛好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
-
Linux
+關(guān)注
關(guān)注
87文章
11412瀏覽量
212247 -
命令
+關(guān)注
關(guān)注
5文章
719瀏覽量
22621 -
Shell腳本
+關(guān)注
關(guān)注
0文章
36瀏覽量
8134
原文標(biāo)題:每天一個 Linux 命令(103):ldd 命令
文章出處:【微信號:LinuxHub,微信公眾號:Linux愛好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
一文掌握RK3568開發(fā)板Android13掛載Windows共享目錄
hyper-v共享,Hyper-V 共享:Hyper-V的資源共享設(shè)置

hyper-v共享,hyper-v共享:實(shí)現(xiàn)主機(jī)與虛擬機(jī)之間高效文件共享的最佳實(shí)踐

騰訊ima升級知識庫功能,上線小程序實(shí)現(xiàn)共享與便捷問答
如何使用cmp進(jìn)行數(shù)據(jù)庫管理的技巧
數(shù)據(jù)庫數(shù)據(jù)恢復(fù)—通過拼接數(shù)據(jù)庫碎片恢復(fù)SQLserver數(shù)據(jù)庫

在bootloader和應(yīng)用程序之間共享FEE塊

數(shù)據(jù)庫數(shù)據(jù)恢復(fù)—SQL Server數(shù)據(jù)庫出現(xiàn)823錯誤的數(shù)據(jù)恢復(fù)案例

用于具有AES硬件加密功能的TM4C129器件的共享密鑰引導(dǎo)加載程序

Linux系統(tǒng)中共享文件找不到怎么辦

評論