六個例子帶你入門 size 命令
正如你所知道的那樣,Linux 中的目標文件或著說可執行文件由多個段組成(比如文本段和數據段)。若你想知道每個段的大小,那麼確實存在這麼一個命令行工具 —— 那就是 size
。在本教程中,我們將會用幾個簡單易懂的案例來講解該工具的基本用法。
在我們開始前,有必要先聲明一下,本文的所有案例都在 Ubuntu 16.04 LTS 中測試過了。
Linux size 命令
size
命令基本上就是輸出指定輸入文件各段及其總和的大小。下面是該命令的語法:
size [-A|-B|--format=compatibility]
[--help]
[-d|-o|-x|--radix=number]
[--common]
[-t|--totals]
[--target=bfdname] [-V|--version]
[objfile...]
man 頁是這樣描述它的:
GNU 的
size
程序列出參數列表中各目標文件或存檔庫文件的段大小 — 以及總大小。默認情況下,對每個目標文件或存檔庫中的每個模塊都會產生一行輸出。
objfile...
是待檢查的目標文件。如果沒有指定,則默認為文件a.out
。
下面是一些問答方式的案例,希望能讓你對 size
命令有所了解。
Q1、如何使用 size 命令?
size
的基本用法很簡單。你只需要將目標文件/可執行文件名稱作為輸入就行了。下面是一個例子:
size apl
該命令在我的系統中的輸出如下:
前三部分的內容是文本段、數據段和 bss 段及其相應的大小。然後是十進位格式和十六進位格式的總大小。最後是文件名。
Q2、如何切換不同的輸出格式?
根據 man 頁的說法,size
的默認輸出格式類似於 Berkeley 的格式。然而,如果你想的話,你也可以使用 System V 規範。要做到這一點,你可以使用 --format
選項加上 SysV
值。
size apl --format=SysV
下面是它的輸出:
Q3、如何切換使用其他的單位?
默認情況下,段的大小是以十進位的方式來展示。然而,如果你想的話,也可以使用八進位或十六進位來表示。對應的命令行參數分別為 o
和 -x
。
關於這些參數,man 頁是這麼說的:
-d
-o
-x
--radix=number
使用這幾個選項,你可以讓各個段的大小以十進位(
-d
或--radix 10
)、八進位(-o
或--radix 8
);或十六進位(-x
或--radix 16
)數字的格式顯示。--radix number
只支持三個數值參數(8、 10、 16)。總共大小以兩種進位給出;-d
或-x
的十進位和十六進位輸出,或-o
的八進位和十六進位輸出。
Q4、如何讓 size 命令顯示所有對象文件的總大小?
如果你用 size
一次性查找多個文件的段大小,則通過使用 -t
選項還可以讓它顯示各列值的總和。
size -t [file1] [file2] ...
下面是該命令的執行的截屏:
-t
選項讓它多加了最後那一行。
Q5、如何讓 size 輸出每個文件中公共符號的總大小?
若你為 size
提供多個輸入文件作為參數,而且想讓它顯示每個文件中公共符號(指 common segment 中的 symbol)的大小,則你可以帶上 --common
選項。
size --common [file1] [file2] ...
另外需要指出的是,當使用 Berkeley 格式時,這些公共符號的大小被納入了 bss 大小中。
Q6、還有什麼其他的選項?
除了剛才提到的那些選項外,size
還有一些一般性的命令行選項,比如 v
(顯示版本信息)和 -h
(可選參數和選項的匯總)。
除此之外,你也可以使用 @file
選項來讓 size
從文件中讀取命令行選項。下面是詳細的相關說明:
讀出來的選項會插入並替代原來的
@file
選項。若文件不存在或著無法讀取,則該選項不會被替換,而是會以字面意義來解釋該選項。文件中的選項以空格分隔。當選項中要包含空格時需要用單引號或雙引號將整個選項包起來。通過在字元前面添加一個反斜杠可以將任何字元(包括反斜杠本身)納入到選項中。文件本身也能包含其他的@file
選項;任何這樣的選項都會被遞歸處理。
結論
很明顯,size
命令並不適用於所有人。它的目標群體是那些需要處理 Linux 中目標文件/可執行文件結構的人。因此,如果你剛好是目標受眾,那麼多試試我們這裡提到的那些選項,你應該做好每天都使用這個工具的準備。想了解關於 size
的更多信息,請閱讀它的 man 頁 。
via: https://www.howtoforge.com/linux-size-command/
作者:Himanshu Arora 譯者:lujun9972 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive