root@laptop
-2mois3pq:
/home/li# ldd `which ls`
linux-vdso.so.1(
0x00007fffd7cf7000
) libselinux.so.
1=>
/lib/x86_64-linux-gnu/libselinux.so.1(
0x00007fbc41220000
) libc.so.
6=>
/lib/x86_64-linux-gnu/libc.so.6(
0x00007fbc40e20000
) libpcre.so.
3=>
/lib/x86_64-linux-gnu/libpcre.so.3(
0x00007fbc40ba0000
) libdl.so.
2=>
/lib/x86_64-linux-gnu/libdl.so.2(
0x00007fbc40990000
)/lib64/ld-linux-x86-
64.so.2(
0x00007fbc41800000
) libpthread.so.
0=>
/lib/x86_64-linux-gnu/libpthread.so.0(
0x00007fbc40770000
)
可以看到,第一行與倒數第二行的格式與其他行不一樣,沒有=>這個箭頭,同時,倒數第二行的so帶的是絕對路徑,其他行卻不是,下面來解釋一下:
第一行的linux-vdso.so.1,名字是虛擬動態共享庫,他其實是核心負責自動對映到使用者程序空間的,這個檔案存在核心空間中,檔案系統中並不能找到這個檔案(我在本地是沒有find到,核心從**載入的呢?未知,可能是直接作為核心模組進去的),這個動態庫主要的功能是減小系統呼叫的開銷,例如一些函式呼叫會使程序進入核心態,讀取一些資料等,進入核心態的開銷是很大的,所以一些常用的函式呼叫結果,可以從這個位址空間中直接讀取,避免了陷入核心態。
第二行的/lib64/ld-linux-x86-64.so.2寫的是全路徑,跟其他的庫寫法也不同,後面沒有=>,這裡先解釋一下=>是什麼意思,這代表動態庫在檔案系統中的位置,這是因為載入動態庫時,二進位制檔案中本身並沒有寫全路徑,所以需要鏈結器去在一些目錄中搜尋(ld_library_path,這個環境變數就可以提供,當然不止這乙個),這個庫就是鏈結器本身,他負責找其他庫,所以在二進位制檔案中他是硬編碼的,寫好了路徑,所以他不再需要到檔案系統中尋找。
LDD3 中 awk 語句的解釋
在 ldd3 的乙個建立節點的 shell 指令碼中,用到了 awk文字處理工具,在這裡做一下解釋。原句 major awk 2 module proc devices module 變數在指令碼中定義為 scull.proc devices 是awk 要處理的輸入檔案。2,1,分別代表輸入檔案中的...
vmstat輸出項解釋
輸出項的解釋如下 procs r列表示執行和等待cpu時間片段的程序數,這個值如果長期大約系統cpu個數,說明cpu不足 b列表示在等待資源的程序數,比如正在等待io或者記憶體交換等等 memory swap列表示切換到交換區的記憶體大小 kb為單位 如果swap的值不為0或者比較大,只要si和so...
vmstat輸出項解釋
輸出項的解釋例如以下 procs r列表示執行和等待cpu時間片段的程序數,這個值假設長期大約系統cpu個數。說明cpu不足 b列表示在等待資源的程序數。比方正在等待io或者記憶體交換等等 memory swap列表示切換到交換區的記憶體大小 kb為單位 假設swap的值不為0或者比較大,僅僅要si...