带你入门Linux中size命令的6个例子
<p><span><strong>前言</strong></span></p>
<p>
正如你所知道的那样,linux 中的目标文件或着说可执行文件由多个段组成(比如文本段和数据段)。若你想知道每个段的大小,那么确实存在这么一个命令行工具 —— 那就是 size。在本教程中,我们将会用几个简单易懂的案例来讲解该工具的基本用法。</p>
<p>
在我们开始前,有必要先声明一下,本文的所有案例都在 ubuntu 16.04 lts 中测试过了。</p>
<p>
<span><strong>linux size 命令</strong></span></p>
<p>
size 命令基本上就是输出指定输入文件各段及其总和的大小。下面是该命令的语法:</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_586357">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
<div class="line number5 index4 alt2">
5</div>
<div class="line number6 index5 alt1">
6</div>
<div class="line number7 index6 alt2">
7</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain">size [-a|-b|--</code><code class="bash functions">format</code><code class="bash plain">=compatibility]</code>
</div>
<div class="line number2 index1 alt1">
<code class="bash spaces"> </code><code class="bash plain">[--help]</code>
</div>
<div class="line number3 index2 alt2">
<code class="bash spaces"> </code><code class="bash plain">[-d|-o|-x|--radix=number]</code>
</div>
<div class="line number4 index3 alt1">
<code class="bash spaces"> </code><code class="bash plain">[--common]</code>
</div>
<div class="line number5 index4 alt2">
<code class="bash spaces"> </code><code class="bash plain">[-t|--totals]</code>
</div>
<div class="line number6 index5 alt1">
<code class="bash spaces"> </code><code class="bash plain">[--target=bfdname] [-</code><code class="bash functions">v</code><code class="bash plain">|--version]</code>
</div>
<div class="line number7 index6 alt2">
<code class="bash spaces"> </code><code class="bash plain"></code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
<strong>man 页是这样描述它的:</strong></p>
<blockquote>
<p>
gnu 的 size 程序列出参数列表中各目标文件或存档库文件的段大小 — 以及总大小。默认情况下,对每个目标文件或存档库中的每个模块都会产生一行输出。</p>
<p>
objfile... 是待检查的目标文件。如果没有指定,则默认为文件 a.out。</p>
</blockquote>
<p>
下面是一些问答方式的案例,希望能让你对 size 命令有所了解。</p>
<p>
<span><strong>q1、如何使用 size 命令?</strong></span></p>
<p>
size 的基本用法很简单。你只需要将目标文件/可执行文件名称作为输入就行了。下面是一个例子:</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_670723">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain">size apl</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
该命令在我的系统中的输出如下:</p>
<p>
<img title="带你入门Linux中size命令的6个例子" alt="带你入门Linux中size命令的6个例子" src="https://zhuji.jb51.net/uploads/img/202305/f90e2bd32e06224b42c2dd9dc13237d6.jpg"></p>
<p>
how to use size command</p>
<p>
前三部分的内容是文本段、数据段和 bss 段及其相应的大小。然后是十进制格式和十六进制格式的总大小。最后是文件名。</p>
<p>
<span><strong>q2、如何切换不同的输出格式?</strong></span></p>
<p>
根据 man 页的说法,size 的默认输出格式类似于 berkeley 的格式。然而,如果你想的话,你也可以使用 system v 规范。要做到这一点,你可以使用 --format 选项加上 sysv 值。</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_644217">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain">size apl --</code><code class="bash functions">format</code><code class="bash plain">=sysv</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
下面是它的输出:</p>
<p>
<img title="带你入门Linux中size命令的6个例子" alt="带你入门Linux中size命令的6个例子" src="https://zhuji.jb51.net/uploads/img/202305/4879ce55e355924cd9282f896f01894b.jpg"><br>
how to switch between different output formats</p>
<p>
<span><strong>q3、如何切换使用其他的单位?</strong></span></p>
<p>
默认情况下,段的大小是以十进制的方式来展示。然而,如果你想的话,也可以使用八进制或十六进制来表示。对应的命令行参数分别为 o 和 -x。</p>
<p>
<img title="带你入门Linux中size命令的6个例子" alt="带你入门Linux中size命令的6个例子" src="https://zhuji.jb51.net/uploads/img/202305/2c595104a9ba8c118cd2d00d5ae35176.jpg"><br>
how to switch between different size units</p>
<p>
关于这些参数,man 页是这么说的:</p>
<blockquote>
<p>
-d</p>
<p>
-o</p>
<p>
-x</p>
<p>
--radix=number</p>
<p>
使用这几个选项,你可以让各个段的大小以十进制(-d 或 --radix 10)、八进制(-o 或 --radix 8);或十六进制(-x 或 --radix 16)数字的格式显示。--radix number 只支持三个数值参数(8、 10、 16)。总共大小以两种进制给出; -d 或 -x 的十进制和十六进制输出,或 -o 的八进制和十六进制输出。</p>
</blockquote>
<p>
<span><strong>q4、如何让 size 命令显示所有对象文件的总大小?</strong></span></p>
<p>
如果你用 size 一次性查找多个文件的段大小,则通过使用 -t 选项还可以让它显示各列值的总和。</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_724672">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain">size -t ...</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
下面是该命令的执行的截屏:</p>
<p>
<img title="带你入门Linux中size命令的6个例子" alt="带你入门Linux中size命令的6个例子" src="https://zhuji.jb51.net/uploads/img/202305/e9d233d44db73bc3131fd9cc895baa93.jpg"><br>
how to make size command show totals of all object files</p>
<p>
-t 选项让它多加了最后那一行。</p>
<p>
<span><strong>q5、如何让 size 输出每个文件中公共符号的总大小?</strong></span></p>
<p>
若你为 size 提供多个输入文件作为参数,而且想让它显示每个文件中公共符号(指 common segment 中的 symbol)的大小,则你可以带上 --common 选项。</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_429182">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain">size --common ...</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
另外需要指出的是,当使用 berkeley 格式时,这些公共符号的大小被纳入了 bss 大小中。</p>
<p>
<span><strong>q6、还有什么其他的选项?</strong></span></p>
<p>
除了刚才提到的那些选项外,size 还有一些一般性的命令行选项,比如 v (显示版本信息)和 -h (可选参数和选项的汇总)。</p>
<p>
<img title="带你入门Linux中size命令的6个例子" alt="带你入门Linux中size命令的6个例子" src="https://zhuji.jb51.net/uploads/img/202305/626858f6367931d4edd182bcd79ad191.jpg"><br>
what are the other available command line options</p>
<p>
除此之外,你也可以使用 @file 选项来让 size 从文件中读取命令行选项。下面是详细的相关说明:</p>
<blockquote>
<p>
读出来的选项会插入并替代原来的 @file 选项。若文件不存在或着无法读取,则该选项不会被替换,而是会以字面意义来解释该选项。文件中的选项以空格分隔。当选项中要包含空格时需要用单引号或双引号将整个选项包起来。通过在字符前面添加一个反斜杠可以将任何字符(包括反斜杠本身)纳入到选项中。文件本身也能包含其他的 @file 选项;任何这样的选项都会被递归处理。</p>
</blockquote>
<p>
<strong>结论</strong></p>
<p>
很明显,size 命令并不适用于所有人。它的目标群体是那些需要处理 linux 中目标文件/可执行文件结构的人。因此,如果你刚好是目标受众,那么多试试我们这里提到的那些选项,你应该做好每天都使用这个工具的准备。想了解关于 size 的更多信息,请阅读它的 man 页 。</p>
<p>
<span><strong>总结</strong></span></p>
<p>
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。</p>
<p>
原文链接:https://linux.cn/article-9504-1.html</p>
頁:
[1]