Himanshu Arora 发布的文章

我们已经讨论过 Linux 下 gzip 命令的用法。对于初学者来说,gzip 工具主要用于压缩或者展开文件。解压时,在 gzip 命令后添加 -d 选项即可,使用示例如下:

gzip -d [compressed-file-name]

不过,在解压或扩展 gzip 创建的压缩文件时,有另一款完全不同的工具可供使用。谈及的这款工具就是 gunzip。在本文中,我们会使用一些简单、易于理解的例子来解释 gunzip 命令的用法。文中所有示例及指南都在 Ubuntu 16.04 环境下测试。

Linux gunzip 命令

我们现在知道压缩文件可以用 gzip -dgunzip 命令解压。基本的 gunzip 语法为:

gunzip [compressed-file-name]

以下的 Q&A 例子将更清晰地展示 gunzip 工具如何工作:

Q1. 如何使用 gunzip 解压压缩文件?

解压命令非常简单,仅仅需要将压缩文件名称作为参数传递到 gunzip 命令后。

gunzip [archive-name]

比如:

gunzip file1.gz

如何使用 gunzip 解压压缩文件?

Q2. 如何让 gunzip 不删除原始压缩文件?

正如你已注意到的那样,gunzip 命令解压后会删除原始压缩文件。如果你想保留原始压缩文件,可以使用 -c 选项。

gunzip -c [archive-name] > [outputfile-name]

比如:

gunzip -c file1.gz > file1

如何让 gunzip 不删除原始压缩文件?

使用这种方式,原压缩文件不会被删除。

Q3. 如何用 gunzip 解压文件到其他路径?

在 Q&A 中我们已经讨论过 -c 选项的用法。 使用 gunzip 解压文件到工作目录外的其他路径,仅需要在重定向操作符后添加目标目录的绝对路径即可。

gunzip -c [compressed-file] > [/complete/path/to/dest/dir/filename]

示例如下:

gunzip -c file1.gz > /home/himanshu/file1

更多信息

以下从 gzip/gunzip 的 man 页中摘录的细节,对于想了解更多的人会有所助益。

gunzip 在命令行接受一系列的文件,并且将每个文件内容以正确的魔法数开始,且后缀名为 .gz-gz.z-z_z (忽略大小写)的压缩文件,用未压缩的文件替换它,并删除其原扩展名。 gunzip 也可识别一些特殊扩展名的压缩文件,如 .tgz.taz 分别是 .tar.gz.tar.Z 的缩写。在压缩时,gzip 在必要情况下使用 .tgz 作为扩展名,而不是只截取掉 .tar 后缀。

gunzip 目前可以解压 gzipzipcompresscompress -Hpack)产生的文件。gunzip 自动检测输入文件格式。在使用前两种压缩格式时,gunzip 会检验 32 位循环冗余校验码(CRC)。对于 pack 包,gunzip 会检验压缩长度。标准压缩格式在设计上不允许相容性检测。不过 gunzip 有时可以检测出坏的 .Z 文件。如果你解压 .Z 文件时出错,不要因为标准解压没报错就认为 .Z 文件一定是正确的。这通常意味着标准解压过程不检测它的输入,而是直接产生一个错误的输出。SCO 的 compress -H 格式(lzh 压缩方法)不包括 CRC 校验码,但也允许一些相容性检查。

结语

到目前为止提到的 gunzip 基本用法,并不需要过多的学习曲线。我们已包含了一个初学者开始使用它所必须了解的几乎全部知识。想要了解更多的用法,去看 man 页面 吧。


via: https://www.howtoforge.com/linux-gunzip-command/

作者:Himanshu Arora 译者:erialin 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

正如你所知道的那样,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

该命令在我的系统中的输出如下:

How to use size command

前三部分的内容是文本段、数据段和 bss 段及其相应的大小。然后是十进制格式和十六进制格式的总大小。最后是文件名。

Q2、如何切换不同的输出格式?

根据 man 页的说法,size 的默认输出格式类似于 Berkeley 的格式。然而,如果你想的话,你也可以使用 System V 规范。要做到这一点,你可以使用 --format 选项加上 SysV 值。

size apl --format=SysV

下面是它的输出:

How to switch between different output formats

Q3、如何切换使用其他的单位?

默认情况下,段的大小是以十进制的方式来展示。然而,如果你想的话,也可以使用八进制或十六进制来表示。对应的命令行参数分别为 o-x

How to switch between different size units

关于这些参数,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] ...

下面是该命令的执行的截屏:

How to make size command show totals of all object files

-t 选项让它多加了最后那一行。

Q5、如何让 size 输出每个文件中公共符号的总大小?

若你为 size 提供多个输入文件作为参数,而且想让它显示每个文件中公共符号(指 common segment 中的 symbol)的大小,则你可以带上 --common 选项。

size --common [file1] [file2] ...

另外需要指出的是,当使用 Berkeley 格式时,这些公共符号的大小被纳入了 bss 大小中。

Q6、还有什么其他的选项?

除了刚才提到的那些选项外,size 还有一些一般性的命令行选项,比如 v (显示版本信息)和 -h (可选参数和选项的汇总)。

What are the other available command line options

除此之外,你也可以使用 @file 选项来让 size 从文件中读取命令行选项。下面是详细的相关说明:

读出来的选项会插入并替代原来的 @file 选项。若文件不存在或着无法读取,则该选项不会被替换,而是会以字面意义来解释该选项。文件中的选项以空格分隔。当选项中要包含空格时需要用单引号或双引号将整个选项包起来。通过在字符前面添加一个反斜杠可以将任何字符(包括反斜杠本身)纳入到选项中。文件本身也能包含其他的 @file 选项;任何这样的选项都会被递归处理。

结论

很明显,size 命令并不适用于所有人。它的目标群体是那些需要处理 Linux 中目标文件/可执行文件结构的人。因此,如果你刚好是目标受众,那么多试试我们这里提到的那些选项,你应该做好每天都使用这个工具的准备。想了解关于 size 的更多信息,请阅读它的 man 页


via: https://www.howtoforge.com/linux-size-command/

作者:Himanshu Arora 译者:lujun9972 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

当我们在命令行上工作时,您可能需要在文件之间创建链接。这时,您可以可以借助一个专用命令,ln。本教程中,我们将通过一些简单易理解的例子来讨论此工具的基础知识。在此之前,值得一提的是,本教程所有例子都已在 Ubuntu 16.04 上测试通过。

Linux ln 命令

正如你现在所了解的,ln 命令能够让您在文件之间创建链接。下面就是 ln 工具的语法(或者使用其他一些可行的语法)。

ln [OPTION]... [-T] TARGET LINK_NAME (第一种形式)
ln [OPTION]... TARGET (第二种形式)
ln [OPTION]... TARGET... DIRECTORY (第三种形式)
ln [OPTION]... -t DIRECTORY TARGET... (第四种形式)

下面是 ln 工具 man 文档描述的内容:

在第一种形式下,为目标位置(TARGET)创建一个叫 LINK\_NAME 的链接。在第二种形式下,为目标位置(TARGET)在当前目录下创建一个链接(LCTT 译注:创建的为同名链接)。在第三和第四种形式中,在 DIRECTORY 目录下为每一个目标位置(TARGET)创建链接。默认创建硬链接,符号链接需要 --symbolic 选项。默认创建的每一个创建的链接(新链接的名字)都不能已经存在。当创建硬链接时,目标位置(TARGET)文件必须存在;符号链接可以保存任意文本,如果之后解析,相对链接的解析与其父目录有关。

通过下面问答风格的例子,可能会给你更好的理解。但是在此之前,建议您先了解 硬链接和软链接的区别.

Q1. 如何使用 ln 命令创建硬链接?

这很简单,你只需要像下面使用 ln 命令:

ln [file] [hard-link-to-file]

例如:

ln test.txt test_hard_link.txt

如何使用 ln 命令创建硬链接

如此,您便可以看见一个已经创建好的,名为 test_hard_link.txt 的硬链接。

Q2. 如何使用 ln 命令创建软/符号链接?

使用 -s 命令行选项:

ln -s [file] [soft-link-to-file]

例如:

ln -s test.txt test_soft_link.txt

如何使用 ln 命令创建软/符号链接

test_soft_link.txt 文件就是一个软/符号链接,以天蓝色文本 标识

Q3. 如何使用 ln 命令删除既存的同名目标文件?

默认情况下,ln 不允许您在目标目录下创建已存在的链接。

ln 命令示例

然而,如果一定要这么做,您可以使用 -f 命令行选项覆盖此行为。

如何使用 ln 命令创建软/符号链接

提示:如果您想在此删除过程中有所交互,您可以使用 -i 选项。

Q4. 如何使用 ln 命令创建现有文件的同名备份?

如果您不想 ln 删除同名的现有文件,您可以为这些文件创建备份。使用 -b 即可实现此效果,以这种方式创建的备份文件,会在其文件名结尾处包含一个波浪号(~)。

如何使用 ln 命令创建现有文件的同名备份

Q5. 如何在当前目录以外的其它目录创建链接?

使用 -t 选项指定一个文件目录(除了当前目录)。比如:

ls test* | xargs ln -s -t /home/himanshu/Desktop/

上述命令会为(当前目录下的)所有 test* 文件创建链接,并放到桌面目录下。

总结

当然,尤其对于新手来说,ln 并不是日常必备命令。但是,这是一个有用的命令,因为你永远不知道它什么时候能够节省你一天的时间。对于这个命令,我们已经讨论了一些实用的选项,如果你已经完成了这些,可以查询 man 文档 来了解更多详情。


via: https://www.howtoforge.com/linux-ln-command/

作者:Himanshu Arora 译者:CYLeft 校对:Locez

本文由 LCTT 原创编译,Linux中国 荣誉推出

有时候,你会想手动跟踪命令的输出内容,同时又想将输出的内容写入文件,确保之后可以用来参考。如果你想寻找这相关的工具,那么恭喜你,Linux 已经有了一个叫做 tee 的命令可以帮助你。

本教程中,我们将基于 tee 命令,用一些简单的例子开始讨论。但是在此之前,值得一提的是,本文我们所有的测试实例都基于 Ubuntu 16.04 LTS。

Linux tee 命令

tee 命令基于标准输入读取数据,标准输出或文件写入数据。感受下这个命令的语法:

tee [OPTION]... [FILE]...

这里是帮助文档的说明:

从标准输入中复制到每一个文件,并输出到标准输出。

让 Q&A(问&答)风格的实例给我们带来更多灵感,深入了解这个命令。

Q1、 如何在 Linux 上使用这个命令?

假设因为某些原因,你正在使用 ping 命令。

ping google.com

如何在 Linux 上使用 tee 命令

然后同时,你想要输出的信息也同时能写入文件。这个时候,tee 命令就有其用武之地了。

ping google.com | tee output.txt

下面的截图展示了这个输出内容不仅被写入 output.txt 文件,也被显示在标准输出中。

tee command 输出

如此应当明白了 tee 的基础用法。

Q2、 如何确保 tee 命令追加信息到文件中?

默认情况下,在同一个文件下再次使用 tee 命令会覆盖之前的信息。如果你想的话,可以通过 -a 命令选项改变默认设置。

[command] | tee -a [file]

基本上,-a 选项强制 tee 命令追加信息到文件。

Q3、 如何让 tee 写入多个文件?

这非常之简单。你仅仅只需要写明文件名即可。

[command] | tee [file1] [file2] [file3]

比如:

ping google.com | tee output1.txt output2.txt output3.txt

如何让 tee 写入多个文件

Q4. 如何让 tee 命令的输出内容直接作为另一个命令的输入内容?

使用 tee 命令,你不仅可以将输出内容写入文件,还可以把输出内容作为另一个命令的输入内容。比如说,下面的命令不仅会将文件名存入 output.txt 文件中,还会通过 wc 命令让你知道输入到 output.txt 中的文件数目。

ls file* | tee output.txt | wc -l

如何让 tee 命令的输出内容直接作为另一个命令的输入内容

Q5. 如何使用 tee 命令提升文件写入权限?

假如你使用 Vim 编辑器 打开文件,并且做了很多更改,然后当你尝试保存修改时,你得到一个报错,让你意识到那是一个 root 所拥有的文件,这意味着你需要使用 sudo 权限保存修改。

如何使用 tee 命令提升文件写入权限

如此情况下,你可以(在 Vim 内)使用 tee 命令来提高权限。

:w !sudo tee %

上述命令会向你索要 root 密码,然后就能让你保存修改了。

Q6. 如何让 tee 命令忽视中断?

-i 命令行选项使 tee 命令忽视通常由 ctrl+c 组合键发起的中断信号(SIGINT)。

[command] | tee -i [file]

当你想要使用 ctrl+c 中断该命令,同时让 tee 命令优雅的退出,这个选项尤为实用。

总结

现在你可能已经认同 tee 是一个非常实用的命令。基于 tee 命令的用法,我们已经介绍了其绝大多数的命令行选项。这个工具并没有什么陡峭的学习曲线,所以,只需跟随这几个例子练习,你就可以运用自如了。更多信息,请查看 帮助文档.


via: https://www.howtoforge.com/linux-tee-command/

作者:Himanshu Arora 译者:CYLeft 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

如果您的工作涉及到 Linux 中的可执行文件和共享库的知识,则需要了解几种命令行工具。其中之一是 ldd ,您可以使用它来访问共享对象依赖关系。在本教程中,我们将使用一些易于理解的示例来讨论此实用程序的基础知识。

请注意,这里提到的所有示例都已在 Ubuntu 16.04 LTS 上进行了测试。

Linux ldd 命令

正如开头已经提到的,ldd 命令打印共享对象依赖关系。以下是该命令的语法:

ldd [option]... file...

下面是该工具的手册页对它作出的解释:

ldd 会输出命令行指定的每个程序或共享对象所需的共享对象(共享库)。

以下使用问答的方式让您更好地了解ldd的工作原理。

问题一、 如何使用 ldd 命令?

ldd 的基本用法非常简单,只需运行 ldd 命令以及可执行文件或共享对象的文件名称作为输入。

ldd [object-name]

例如:

ldd test

How to use ldd

所以你可以看到所有的共享库依赖已经在输出中产生了。

Q2、 如何使 ldd 在输出中生成详细的信息?

如果您想要 ldd 生成详细信息,包括符号版本控制数据,则可以使用 -v 命令行选项。例如,该命令

ldd -v test

当使用 -v 命令行选项时,在输出中产生以下内容:

How to make ldd produce detailed information in output

Q3、 如何使 ldd 产生未使用的直接依赖关系?

对于这个信息,使用 -u 命令行选项。这是一个例子:

ldd -u test

How to make ldd produce unused direct dependencies

Q4、 如何让 ldd 执行重定位?

您可以在这里使用几个命令行选项:-d-r。 前者告诉 ldd 执行数据重定位,后者则使 ldd 为数据对象和函数执行重定位。在这两种情况下,该工具都会报告丢失的 ELF 对象(如果有的话)。

ldd -d
ldd -r

Q5、 如何获得关于ldd的帮助?

--help 命令行选项使 ldd 为该工具生成有用的用法相关信息。

ldd --help

How get help on ldd

总结

ldd 不像 cdrmmkdir 这样的工具类别。这是因为它是为特定目的而构建的。该实用程序提供了有限的命令行选项,我们在这里介绍了其中的大部分。要了解更多信息,请前往 ldd手册页


via: https://www.howtoforge.com/linux-ldd-command/

作者: Himanshu Arora 选题: lujun9972 译者: MonkeyDEcho 校对: wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

有时,在使用命令行的时候,我们需要快速找到某一个命令的二进制文件所在位置。这种情况下可以选择 find 命令,但使用它会耗费时间,可能也会出现意料之外的情况。有一个专门为这种情况设计的命令:whereis

在这篇文章里,我们会通过一些便于理解的例子来解释这一命令的基础内容。但在这之前,值得说明的一点是,下面出现的所有例子都在 Ubuntu 16.04 LTS 下测试过。

Linux whereis 命令

whereis 命令可以帮助用户寻找某一命令的二进制文件,源码以及帮助页面。下面是它的格式:

whereis [options] [-BMS directory... -f] name...

这是这一命令的 man 页面给出的解释:

whereis 可以查找指定命令的二进制文件、源文件和帮助文件。 被找到的文件在显示时,会去掉主路径名,然后再去掉文件的(单个)尾部扩展名 (如: .c),来源于源代码控制的 s. 前缀也会被去掉。接下来,whereis 会尝试在标准的 Linux 位置里寻找具体程序,也会在由 $PATH$MANPATH 指定的路径中寻找。

下面这些以 Q&A 形式出现的例子,可以给你一个关于如何使用 whereis 命令的直观感受。

Q1. 如何用 whereis 命令寻找二进制文件所在位置?

假设你想找,比如说,whereis 命令自己所在位置。下面是你具体的操作:

whereis whereis

How to find location of binary file using whereis

需要注意的是,输出的第一个路径才是你想要的结果。使用 whereis 命令,同时也会显示帮助页面和源码所在路径。(如果能找到的情况下会显示,但是在这一例中没有找到)所以你在输出中看见的第二个路径就是帮助页面文件所在位置。

Q2. 怎么在搜索时规定只搜索二进制文件、帮助页面,还是源代码呢?

如果你想只搜索,假设说,二进制文件,你可以使用 -b 这一命令行选项。例如:

whereis -b cp

How to specifically search for binaries, manuals, or source code

类似的, -m-s 这两个 选项分别对应 帮助页面和源码。

Q3.如何限制 whereis 命令搜索位置?

默认情况下,whereis 是从由匹配符所定义的硬编码路径来寻找文件的。但如果你想的话,你可以用命令行选项来限制搜索。例如,如果你只想在 /usr/bin 寻找二进制文件,你可以用 -B 这一选项来实现。

whereis -B /usr/bin/ -f cp

注意:使用这种方式时可以给出多个路径。使用 -f 这一选项来明确分隔目录列表和要搜索的文件名。

类似的,如果你想只搜索帮助文件或源码,你可以对应使用 -M-S 这两个选项。

Q4. 如何查看 whereis 的搜索路径?

与此相对应的也有一个选项。只要在 whereis 后加上 -l

whereis -l

这是例子的部分输出结果:

How to see paths that whereis uses for search

Q5. 如何找到一个有异常条目的命令?

对于 whereis 命令来说,如果一个命令对每个显式的请求类型都不止一项,则该命令被视为异常。例如,没有可用文档的命令,或者对应文档分散在各处的命令都可以算作异常命令。 当使用 -u 这一选项,whereis 就会显示那些有异常条目的命令。

例如,下面这一例子就显示,在当前目录中,没有对应文档或有多个文档的命令。

whereis -m -u *

总结

我觉得,whereis 不是那种你需要经常使用的命令行工具。但在遇到某些特殊情况时,它绝对会让你的生活变得轻松。我们已经涉及了这一工具提供的一些重要命令行选项,所以要注意练习。想了解更多信息,直接去看它的 man 页面吧。


via: https://www.howtoforge.com/linux-whereis-command/

作者:Himanshu Arora 译者:wenwensnow 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出