当前位置:   article > 正文

Linux 基础命令一览_linux基础命令表

linux基础命令表

零、备注与说明

  • 本文仅涉及基础命令(本博文包括33条),不涉及网络、性能监控及优化等命令。
  • 本文仅为博主个人阅读资料后的总结、归纳。
  • 博文目的仅为个人翻阅,也欢迎小伙伴们一起学习,共同讨论。

一、文件目录操作命令

1. ls 命令

ls 命令就是 list 的缩写。 ls 用来打印出当前目录的清单。

如果 ls 指定其他目录,那么就会显示指定目录里的文件及文件夹清单。

通过 ls 命令不仅可以查看 linux 文件夹包含的文件,而且还可以查看目录和文件权限等等信息。

命令格式

ls [选项][参数]

常用参数

参数描述
-a–all 列出目录下的所有文件,包括以 . 开头的隐含文件
-l除了文件名之外,还将文件的权限、所有者、文件大小等信息详细列出来
-h除了文件名之外,还将文件的权限、所有者、文件大小等信息详细列出来
-t以文件修改时间排序

2. cd 命令

cd 命令可以说是 Linux 中最基本的命令语句,其他的命令语句要进行操作,都是建立在使用 cd 命令上的。

cd 命令是 change directory 的缩写,切换当前目录至指定的目录。

命令格式

cd [目录名]

3. pwd 命令

Linux 中用 pwd 命令来查看“当前工作目录”的完整路径。

简单的说,每当你在终端进行操作时,你都会有一个当前工作目录。在不太确定当前位置时,就可以使用 pwd 来判定当前目录在文件系统内的确切位置。

pwd 命令是 Print Working Directory 的缩写。

命令格式

pwd [选项]

常用参数

参数描述
-P显示实际物理路径,而非使用连接(link)路径
-L当目录为连接路径时,显示连接路径

4. mkdir 命令

mkdir 命令用来创建指定名称的目录,要求创建目录的用户在当前目录中具有写权限,并且指定的目录名不能是当前目录中已有的目录。

mkdir 命令是 make directory 的缩写。

命令格式

mkdir [选项] 目录

常用参数

参数描述
-m --mode=模式设定权限<模式>
-p --parents可以是一个路径名称。若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不存在的目录,即一次可以建立多个目录
-v --verbose每次创建新目录都显示信息

命令举例

  1. 递归创建多个目录

    mkdir -p alun/test

  2. 创建权限为 777 的目录

    mkdir -m 777 test

  3. 创建目录显示信息

    mkdir -vp alun/test

5. rm 命令

rm 命令的功能为删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所有文件及子目录均删除。对于链接文件,只会删除链接,原文件均保持不变。

rm 是一个危险的命令,使用的时候要特别当心,尤其对于新手,否则整个系统就会毁在这个命令(比如在 /(根目录)下执行 rm * -rf)。所以,我们在执行 rm 之前最好先确认一下在哪个目录,到底要删除什么东西,操作时保持高度清醒的头脑。

rm 命令是 remove 的缩写。

命令格式

rm [选项] 文件或目录

常用参数

参数描述
-f --force忽略不存在的文件,从不给出提示
-i --interactive进行交互式删除
-r --recursive指示 rm 将参数中列出的全部目录和子目录均递归地删除
-v --verbose详细显示进行的步骤

命令举例

  1. 删除文件,系统会询问是否删除

    rm test.txt

  2. 强行删除文件,系统不再提示

    rm -f test.txt

  3. 删除所有后缀名为 .txt 的文件,删除前会逐一询问 (两条命令均可)

    rm *.txt

    rm -i *.log

6. mv 命令

mv 命令功能是用来移动文件或更改文件名,经常用来备份文件或者目录。

mv 命令根据第二个参数类型(目标是一个文件还是目录),决定执行将文件重命名或将其移至一个新的目录中。当第二个参数类型是文件时,mv 命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,mv 命令将各参数指定的源文件均移至目标目录中。

mv 命令是 move 的缩写。

命令格式

mv [选项] 源文件或目录 目标文件或目录

常用参数

参数描述
-b --back若需覆盖文件,则覆盖前先行备份
-f --force如果目标文件已经存在,不会询问而直接覆盖
-i --interactive若目标文件已经存在时,就会询问是否覆盖
-u --update若目标文件已经存在,且源文件比较新,才会更新
-t --target该选项适用于移动多个源文件到一个目录的情况,此时目标目录在前,源文件在后

命令举例

  1. 将文件 alun.txt 重命名为 test.txt

    mv alun.txt test.txt

  2. 将文件 alun.txt 移动到 test 目录下(test 目录必须已经存在,否则执行重命名)

    mv alun.txt test

  3. 将文件 alun.txt 移动到 test 目录下,如果文件存在,覆盖前会询问是否覆盖

    mv -i alun.txt test

7. cp 命令

cp 命令用来复制文件或者目录,是 Linux 系统中最常用的命令之一。

一般情况下,shell 会设置一个别名,在命令行下复制文件时,如果目标文件已经存在,就会询问是否覆盖,不管你是否使用 -i 参数。但是如果是在 shell 脚本中执行 cp 时,没有 -i 参数时不会询问是否覆盖。这说明命令行和 shell 脚本的执行方式有些不同。

cp 命令是 copy 的缩写。

命令格式

cp [选项] 源文件 目录 cp [选项] -t 目录 源文件

常用参数

参数描述
-t --target-directory指定目标目录
-i --interactive覆盖前询问(使前面的 -n 选项失效)
-n --no-clobber不要覆盖已存在的文件(使前面的 -i 选项失效)
-s --symbolic-link对源文件建立符号链接,而非复制文件
-f --force强行复制文件或目录,不论目的文件或目录是否已经存在
-u --update使用这项参数之后,只会在源文件的修改时间较目的文件更新时,或是对应的目的文件并不存在,才复制文件

命令举例

  1. 对文件 test.txt 建立一个符号链接 t.txt

    cp -s test.txt t.txt

  2. 将 test1 目录下的所有文件复制到 test2 目录下,覆盖前询问

    cp -i test1/* test2

  3. 将 test1 目录下的最近更新的文件复制到 test2 目录下,覆盖前询问

    cp -iu test/* test2

8. cat 命令

cat 命令的功能是将文件或标准输入组合输出到标准输出。

这个命令常用来显示文件内容,或者将几个文件连接起来显示,或者从标准输入读取内容并显示,它常与重定向符号配合使用。

cat 命令是 concatenate 的缩写。

命令格式

cat [选项][文件]

常用参数

参数描述
-A --show-all等价于 -vET
-b --number-nonblank对非空输出行编号
-e等价于 -vE
-E --show-ends在每行结束处显示 $
-n --number对输出的所有行编号,由 1 开始对所有输出的行数编号
-s --squeeze-blank有连续两行以上的空白行,就代换为一行的空白行
-t与 -vT 等价
-T --show-tabs将跳格字符显示为 ^I
-u(被忽略)
-v --show-nonprinting使用 ^ 和 M- 引用,除了 LFD 和 TAB 之外

命令举例

  1. 把 test1.txt 的文件内容加上行号后输入 text2.txt 这个文件里

    cat -n test1.txt > test2.txt

  2. 把test1.txt的文件内容加上行号后输入test2.txt这个文件里,多行空行换成一行输出

    cat -ns test1.txt > test2.txt

  3. 将 test.txt 的文件内容反向显示

    tac test.txt

9. nl 命令

nl 命令在 linux 系统中用来计算文件中的行号。

nl 可以将输出的文件内容自动加上行号,其默认的结果与 cat -n 有点不太一样。 nl 可以将行号做较多的显示设计,包括位数与是否自动补齐 0 等等的功能。

nl 命令是 number of lines 的缩写。

命令格式

nl [选项][文件]

常用参数

参数描述
-b指定行号指定的方式,主要有两种,如下
-b a表示不论是否为空行,也同样列出行号(类似 cat -n)
-b t如果有空行,空的那一行不要列出行号(默认值)
-n列出行号表示的方法,主要有三种, 如下
-n ln行号在屏幕的最左方显示
-n rn行号在自己栏位的最右方显示,且不加 0
-n rz行号在自己栏位的最右方显示,且加 0
-w行号栏位的占用的位数

命令举例

  1. 把 test.txt 的文件内容加上行号后显示,空行不加行号

    nl -b t test.txt

  2. 把 test.txt 的文件内容加上行号后显示,,行号分别在屏幕最左方、最右方不加 0 和最右方加 0 显示

    nl -n ln test.txt
    nl -n rn test.txt
    nl -n rz test.txt

  3. 把 test.txt 的文件内容加上行号后显示,行号在屏幕最右方加 0 显示,行号栏目占位数为 3

    nl -n rz -w 3 test.txt

10. more 命令

more 命令,功能类似 cat ,cat 命令是将整个文件的内容从上到下显示在屏幕上。
more 命令会一页一页的显示,方便使用者逐页阅读,而最基本的指令就是按空格键(space)往下一页显示,按 B 键就会往回(back)一页显示,而且还有搜寻字串的功能。
more 命令从前向后读取文件,因此在启动时就加载整个文件。

命令格式

more [选项] 文件

常用参数

参数描述
+n从笫 n 行开始显示
-n定义屏幕大小为 n 行
+/pattern在每个档案显示前搜寻该字串(pattern),然后从该字串前两行之后开始显示
-c从顶部清屏,然后显示
-d提示“Press space to continue,’q’ to quiet”,禁用响铃功能
-p通过清除窗口而不是滚屏来对文件进行换页,与-c 选项相似
-s把连续的多个空行显示为一行
-u把文件内容中的下划线去掉

常用操作

符号描述
=输出当前行的行号
q退出 more
空格键向下滚动一屏
b返回上一屏

命令举例

  1. 从第五行开始显示text.txt文件中的内容

    more +5 text.txt

  2. 从 test.txt 文件中查找第一个出现“g”字符串的行,并从该处前两行开始显示输出

    more +/g test.txt

  3. 设定每屏行数为 5

    more -5 test.txt

  4. 使用 ll 和 more 命令显示/etc目录信息

    ll /etc | more -10

11. less命令

less 命令也是对文件或其它输出进行分页显示的工具,应该说是 linux 正统查看文件内容的工具,功能极其强大。

命令格式

less [选项] 文件

常用参数

参数描述
-e当文件显示结束后,自动离开
-f强迫打开特殊文件,例如外围设备代号、目录和二进制文件
-i忽略搜索时的大小写
-m显示类似 more 命令的百分比
-N显示每行的行号
-s显示连续空行为一行

常用操作

符号描述
/字符串向下搜索“字符串”的功能
?字符串向上搜索“字符串”的功能
n重复前一个搜索(与 / 或 ? 有关)
N反向重复前一个搜索(与 / 或 ? 有关)
b向前翻一页
d向后翻半页
q退出 less 命令
空格键向后翻一页
向上键向上翻动一行
向下键向下翻动一行

命令举例

  1. 显示 test.txt 文件中的内容,并显示行号

    less -N test,txt

  2. 显示 test.txt 文件中的内容,搜索字符串”alun”

    less test.txt
    /alun

  3. ps 查看进程信息并通过 less 分页显示

    ps -f | less

tips: less 与 cat 和 more 的区别

cat 命令功能:用于显示整个文件的内容,因为单独使用没有翻页功能,所以经常和 more 命令搭配使用,cat 命令还有一个可以将数个文件合并成一个文件的功能。

more 命令功能:让画面在显示满一页时暂停,此时可按空格健继续显示下一个画面,或按 q 键停止显示。

less 命令功能:less 命令的用法与 more 命令类似,也可以用来浏览超过一页的文件。所不同的是 less 命令除了可以按空格键向下显示文件外,还可以利用上下键来滚动文件。当要结束浏览时,只要在 less 命令的提示符“:”下按 q 键即可。

其实这三个命令除了 cat 命令有合并文件的功能外,其余功能都很相近,只是在浏览习惯和显示方式上有所不同。

12. head命令

head 命令就像它的名字一样浅显易懂,主要是用来显示档案的开头至标准输出中,默认 head 命令打印其相应文件的开头 10 行。

命令格式

head[选项] 文件

常用参数

参数描述
-q隐藏文件名
-v显示文件名
-c<字节>显示字节数
-n<行数>显示的行数

命令举例

  1. 显示 test.txt 文件中的前 5 行内容

    head -n 5 test.txt

  2. 显示 test1.txt 和 test2.txt 文件中的前 5 行内容

    head -n 5 test1.txt test2.txt

13. tail命令

tail 命令主要用于显示指定文件末尾内容。

常用查看日志文件。

命令格式

tail [选项] 文件

常用参数

参数描述
-f循环读取
-q不显示处理信息
-v显示详细的处理信息
-c<字节>显示的字节数
-n<行数>显示行数

命令举例

  1. 显示 test.txt 文件中的最后 5 行内容

    tail -n 5 test.txt

  2. 显示 test.log 文件中的最后 5 行内容,当 test.log 文件有新内容增加时自动更新显示

    tail -n 5 -f test.log

二、文件查找命令

14. which 命令

which 命令的作用是,在 PATH 变量指定的路径中搜索可执行文件的所在位置。

它一般用来确认系统中是否安装了指定的软件。

命令格式

which 可执行文件名称

命令举例

  1. 确认是否安装了gcc

    which gcc

  2. 查看cd命令的位置路径

    which cd

15. whereis 命令

whereis 命令主要用于定位可执行文件、源代码文件和帮助文件在文件系统中的位置。

whereis 命令还具有搜索源代码、指定备用搜索路径和搜索不寻常项的功能。

whereis 命令查找速度非常快,这是因为它根本不是在磁盘中漫无目的乱找,而是在一个数据库中(/var/lib/mlocate/mlocate.db)查询。这个数据库是 Linux 系统自动创建的,包含有本地所有文件的信息,并且每天通过自动执行 updatedb 命令更新一次。也正是因为这个数据库要每天才更新一次,就会使得 whereis 命令的搜索结果有时候会不准确,比如刚添加的文件可能搜不到。

命令格式

whereis [选项] 文件

常用参数

参数描述
-b定位可执行文件
-m定位帮助文件
-s定位源代码文件
-u搜索默认路径下除可执行文件、源代码文件和帮助文件以外的其它文件
-B指定搜索可执行文件的路径
-M指定搜索帮助文件的路径
-S指定搜索源代码文件的路径

命令举例

  1. 搜索gcc可执行文件的路径

    whereis -b gcc

  2. 搜索gcc帮助文件的路径

    whereis -m gcc

  3. 搜索 gcc 源代码的路径

    whereis -s gcc

16. locate 命令

locate 命令跟 whereis 命令类似,且它们使用的是相同的数据库。但 whereis 命令只能搜索可执行文件、联机帮助文件和源代码文件,如果要获得更全面的搜索结果,可以使用 locate 命令。

locate 命令使用了十分复杂的匹配语法,可以使用特殊字元(如’*’和’?’)来指定需要查找的样本。

命令格式

locate [选项][搜索字符串]

常用参数

参数描述
-q安静模式,不会显示任何错误讯息
-n至多显示 n 个输出
-r使用正则表达式做寻找的条件
-V显示版本信息

命令举例

  1. 搜索 etc 目录下所有以 sh 开头的文件

    locate /etc/sh

  2. 搜索搜索 etc 目录下文件名包含 test 的文件

    locate /etc/test

17. find 命令

find 命令主要作用是沿着文件层次结构向下遍历,匹配符合条件的文件,并执行相应的操作。

命令格式

find [选项][搜索路径] [表达式]

Tips: 默认路径是当前目录,默认表达式为 -print。
表达式可能由下列成份组成:操作符、选项、测试表达式以及动作。

常用参数

参数描述
-printfind 命令将匹配的文件输出到标准输出
-execfind 命令对匹配的文件执行该参数所给出的 shell 命令
-name按照文件名查找文件
-type查找某一类型的文件
-prune使用这一选项可以使 find 命令不在当前指定的目录中查找,如果同时使用 -depth 选项,那么 -prune 将被 find 命令忽略
-user按照文件属主来查找文件
-group按照文件所属的组来查找文件
-mtime -n +n按照文件的更改时间来查找文件,-n 表示文件更改时间距现在小于 n 天,+n 表示文件更改时间距现在大于 n 天,find 命令还有 -atime 和 -ctime 选项

命令举例

  1. 打印当前目录下的文件目录列表

    find . -print

  2. 打印当前目录下所有以.txt 结尾的文件名

    find . -name “*.txt” -print

  3. 打印当前目录下所有以.txt 或.doc 结尾的文件名

    find . ( -name “.txt" -or -name ".doc” )

  4. 打印当前目录下所有不以.txt 结尾的文件名

    find . ! -name “*.txt”

  5. 打印当前目录下所有以 .txt 结尾的符号链接

    find . -type l -name “*.txt” -print

    Tips: 根据文件类型来查找文件,使用 -type 选项,常见 find 文件类型见下表

文件类型描述
b块设备文件
c字符设备文件
d目录
f普通文件
l符号链接
  1. 打印当前目录下 root 用户拥有的所有文件

    find . -type f -user root

  2. 找到当前目录下所有 php 文件,并显示其详细信息

    find . -name “*.php” -exec ls -l {} ;

    Tips: -exec 是 find 命令对找到的文件执行的动作,这个动作就是对找到的文件执行命令,上面的命令就是ls -l {}。在这里说明一下{}和;,{}其实它就是一个占位符,在 find 命令的执行过程中会不断地替换成当前找到的文件,相当于”ls -l 找到的文件”。而;是 -exec 命令结束的标记,因为规定 -exec 后面的命令必须以;结束,但;在 shell 中有特殊含义,必须要转义,所以写成;。

  3. 默认下,-exec 后面只能使用单个命令,如果想要多个命令,可以将多个命令写入脚本文件中,然后在 -exec 中使用这个脚本

    find . -name “*.c” -exec ./command.sh {} ;

    #!/bin/bash
    ls -l $1 #$1表示第一个参数
    cat $1

    Tips: 直接运行上面的代码可能会提示你find ‘./command.sh’ : 权限不够,这是因为新建的command.sh没有执行权限,只需要使用chmod +x command.sh给予它可执行权限再执行就可以了。

三、文件具体操作命令

18. xargs 命令

我们可以用管道将一个命令的 stdout(标准输出)重定向到另一个命令的 stdin(标准输入)。但有些命令只能以命令行参数的形式接收数据,而无法通过 stdin 接收数据流。在这种情况下,无法通过管道将数据重定向给这些命令。

这时 xargs 就可以发挥它的作用了,xargs 命令可以从标准输入接收输入,并把输入转换为一个特定的参数列表。

命令格式

command | xargs [选项][command]

Tips: xargs 命令应该紧跟在管道操作符之后,因为它以标准输入作为主要的源数据流。

常用参数

参数描述
-n指定每行最大的参数数量
-d指定分隔符

命令举例

  1. 将多行输入转换为单行输出

    cat a.txt | xargs

  2. 将单行输入转换为多行输出

    echo “1 2 3 4 5 6 7” | xargs -n 3

  3. 将单行输入转换为多行输出,指定分隔符为 i

    cat b.txt | xargs -d i -n 3

  4. 查找当前目录下所有 c 代码文件,统计总行数

    find . -type f -name “*.c” | xargs wc -l

19. wc 命令

wc 命令是一个统计的工具,主要用来显示文件所包含的行、字和字节数。

wc 命令是 word count 的缩写。

命令格式

wc [选项][文件]

常用参数

参数描述
-c统计字节数
-l统计行数
-m统计字符数,这个标志不能与 -c 标志一起使用
-w统计字数,一个字被定义为由空白、跳格或换行字符分隔的字符串
-L打印最长行的长度

命令举例

  1. 统计文件的字节数、行数和字符数

    wc -c c.txt
    wc -l c.txt
    wc -m c.txt

    Tips: 每行结尾的换行符也算一个字符,空格也算一个字符。另外,由于系统采用 UTF-8 编码,所以一个汉字为 3 字节。

  2. 统计文件的字节数、行数和字符数,只打印数字,不打印文件名

    cat c.txt | wc -c
    cat c.txt | wc -l
    cat c.txt | wc -m

  3. 统计/bin目录下的命令个数

    ls /bin | wc -l

20. grep 命令

grep 是个很强大的命令,用来找到文件中的匹配文本,并且能够接受正则表达式和通配符,同时可以用多个 grep 命令选项来生成各种格式的输出。

grep 的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到标准输出,不影响原文件内容。

grep 可用于 shell 脚本,因为 grep 通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回 0,如果搜索不成功,则返回 1,如果搜索的文件不存在,则返回 2。我们利用这些返回值就可进行一些自动化的文本处理工作。

命令格式

grep [选项] pattern [file]

常用参数

参数描述
-c计算找到‘搜寻字符串’(即 pattern)的次数
-i忽略大小写的不同,所以大小写视为相同
-n输出行号
-v反向选择,打印不匹配的行
-r递归搜索
–color=auto将找到的关键词部分加上颜色显示

命令举例

  1. 将/etc/passwd文件中出现 root 的行取出来,关键词部分加上颜色显示

    grep “root” /etc/passwd --color=auto
    cat /etc/passwd | grep “root” --color=auto

  2. 将/etc/passwd文件中没有出现 root 和 nologin 的行取出来

    grep -v “root” /etc/passwd | grep -v “nologin”

  3. 在当前目录下递归搜索文件中包含 main() 的文件,经常用于查找某些函数位于哪些源代码文件中

    grep -r “main()”.

正则表达式与 grep 命令

正则表达式是一种符号表示法,被用来识别文本模式。在某种程度上,它们与匹配文件和路径名的 shell 通配符比较相似,但其规模更大。许多命令行工具和大多数的编程语言都支持正则表达式,以此来帮助解决文本操作问题。

正则表达式元字符由以下字符组成:

^ $ . [ ] { } - ? * + ( ) | \

正则表达式
命令举例

  1. 利用 Linux 系统自带的字典查找一个五个字母的单词,第三个字母为 j,最后一个字母为 r,/usr/share/dict目录下存放字典文件(若没有可手动建立)

    grep ‘^…j.r$’ words

  2. 验证固定电话,打印符合条件的电话,固定电话格式基本都是带有 0 的区号+连接符“-”+电话号码,另外还有可能有分机号,区号有 3 位、4 位,电话号码有 7 位和 8 位的

    grep -E “^0[0-9]{2,3}-[0-9]{7,8}(-[0-9]{3,4})?$” telphone.txt

21. cut 命令

cut 命令是一个将文本按列进行切分的小工具,它可以指定分隔每列的定界符。

如果一行数据包含多个字段(多列),现在想要提取其中的一列或多列,这时 cut 命令就可以大显身手了。

命令格式

cut [选项][文件名]

常用参数

参数描述
-b以字节为单位进行分割
-c以字符为单位进行分割
-d自定义分隔符,默认为制表符
-f自定义字段
–complement抽取整个文本行,除了那些由 -c 或 -f 选项指定的文本

命令举例

  1. 取出student.txt文件中的第一列和第三列

    cut -f 1,3 -d ’ ’ student.txt

  2. 取出student.txt文件中的第一列

    cut -f 1 -d ’ ’ student.txt

  3. 取出student.txt文件中的前三列

    cut -f 1-3 -d ’ ’ student.txt

  4. 取出student.txt文件中除第一列的其他列

    cut -f 1 -d ’ ’ student.txt --complement

  5. 给任意一字符串 str,取出其最后一个字符

    num=$(echo -n $str | wc -c)
    echo -n $str | cut -b $num
    #或者可以使用下面这段代码
    echo -n $str | cut -b `echo -n $str | wc -c`

22. paste命令

paste 命令的功能正好与 cut 相反。它会添加一个或多个文本列到文件中,而不是从文件中抽取文本列。它通过读取多个文件,然后把每个文件中的字段整合成单个文本流,输入到标准输出。

命令格式

paste [选项][文件名]

常用参数

参数描述
-s将每个文件合并成行而不是按行粘贴
-d自定义分隔符,默认为制表符

命令举例

  1. 将student.txt和telphone.txt文件中的内容按列拼接

    paste student.txt telphone.txt

  2. 将student.txt和telphone.txt文件中的内容按列拼接,指定分隔符为:

    paste student.txt telphone.txt -d ‘:’

  3. 将student.txt和telphone.txt文件中的内容各自拼接成一行

    paste -s student.txt telphone.txt

23. tr命令

tr 命令常被用来更改字符,我们可以把它看作是一种基于字符的查找和替换操作。换字是一种把字符从一个字母转换为另一个字母的过程,tr 可以从标准输入中替换、缩减和删除字符,并将结果写到标准输出。

tr 只能通过 stdin(标准输入),而无法通过命令行参数来接受输入。

tr 是 translate(转换)的缩写。

命令格式

tr [选项] SET1 SET2

Tips: 将来自 stdin 的输入字符从 SET1 映射到 SET2,并将其输出写入 stdout(标准输出)。SET1 和 SET2 是字符类或字符集。如果两个字符集的长度不相等,那么 SET2 会不断重复其最后一个字符,直到长度与 SET1 相同。如果 SET2 的长度大于 SET1,那么在 SET2 中超出 SET1 的那部分字符则全部被忽略。

常用参数

参数描述
-d删除匹配 SET1 的内容,并不作替换

命令举例

  1. 将输入的字符大写转换为小写

    echo ‘THIS IS SHIYANLOU!’ | tr ‘A-Z’ ‘a-z’

  2. 将输入的字符中的数字删除

    echo ‘THIS 123 IS S1HIY5ANLOU!’ | tr -d ‘0-9’

24. sort 命令

同文本文件打交道时,总避不开排序,那是因为对于文本处理任务而言,排序(sort)可以起到不小的作用。

sort 命令能够帮助我们对文本文件和 stdin 进行排序操作。通常,它会结合其他命令来生成所需要的输出。

命令格式

sort [选项][文件名]

常用参数

参数描述
-n基于字符串的长度来排序,使用此选项允许根据数字值排序,而不是字母值
-k指定排序关键字
-b默认情况下,对整行进行排序,从每行的第一个字符开始。这个选项导致 sort 程序忽略每行开头的空格,从第一个非空白字符开始排序
-m只合并多个输入文件
-r按相反顺序排序,结果按照降序排列,而不是升序
-t自定义分隔符,默认为制表符

命令举例

  1. 列出/usr/share/目录下使用空间最多的前 10 个目录文件

    du -s /usr/share/* | sort -nr | head -10

    Tips: du -s /usr/share/*命令显示/usr/share/目录下所有文件和目录的磁盘使用空间,目录包含目录下的子目录和文件

  2. ls 命令能显示目录下文件的详细信息,包含空间使用大小,但与 du 命令不同的是,ls 命令不计算目录下的子目录和文件的大小。现在想要对 ls 命令输出信息中的空间使用大小字段进行排序

    ls -l /usr/bin/ | sort -nr -k 5 | head -10

25. uniq 命令

uniq 命令经常和 sort 命令结合在一起使用。uniq 从标准输入或单个文件名参数接受数据有序列表,默认情况下,从数据列表中删除任何重复行。

uniq 只能用于排过序的数据输入,因此,uniq 要么使用管道,要么将排过序的文件作为输入,并总是以这种方式与 sort 命令结合起来使用。

uniq 命令是 unique 的缩写。

命令格式

uniq [选项][文件名]

常用参数

参数描述
-c在每行前加上表示相应行目出现次数的前缀编号
-d只输出重复的行
-u只显示唯一的行
-D显示所有重复的行
-f比较时跳过前 n 列
-i在比较的时候不区分大小写
-s比较时跳过前 n 个字符
-w对每行第 n 个字符以后的内容不作对照

命令举例

  1. 找出/bin目录和/usr/bin目录下所有相同的命令

    ls /bin /usr/bin | sort | uniq -d

26. join 命令

join 命令类似于 paste,它会往文件中添加列,但是它使用了独特的方法来完成。一个 join 操作通常与关系型数据库有关联,在关系型数据库中来自多个享有共同关键域的表格的数据结合起来,得到一个期望的结果。这个 join 命令执行相同的操作,它把来自于多个基于共享关键域的文件的数据结合起来。

通俗地说,就是将两个文件中指定栏位相同的行连接起来,即按照两个文件中共同拥有的某一列,将对应的行拼接成一行。

命令格式

join [选项] 文件 1 文件 2

常用参数

参数描述
-j FIELD等同于 -1 FIELD -2 FIELD,-j 指定一个域作为匹配字段
-1 FIELD以 file1 中 FIELD 字段进行匹配
-2 FIELD以 file2 中 FIELD 字段进行匹配
-t自定义分隔符,默认为制表符

命令举例

  1. 将两个文件中的第一个字段作为匹配字段,连接两个文件

    join a.txt b.txt

  2. 指定两个文件的第三个字段为匹配字段,连接两个文件

    join -1 3 -2 3 c.txt d.txt

    Tips: join 命令跟 uniq 命令一样,只能用于排过序的数据。

27. comm 命令

通常 comm 命令对比较文本文件的内容很有帮助。对于系统管理员和软件开发者来说,这个命令尤为重要。例如,一名系统管理员需要拿现有的配置文件与先前的版本做比较,来诊断一个系统错误。同样的,一名程序员经常需要查看程序的修改内容。

comm 命令将逐行比较已经排序的两个文件。显示结果包括 3 列:第 1 列为只在第一个文件中找到的行,第 2 列为只在第二个文件中找到的行,第 3 列为两个文件的共有行。

注意,comm 命令和 join、uniq 命令一样,只能用于已经排过序的数据

命令格式

comm [选项] 文件 1 文件 2

常用参数

参数描述
-1不输出文件 1 特有的行
-2不输出文件 2 特有的行
-3不输出两个文件共有的行

命令举例

  1. 比较file1.txt和file2.txt两个文件的内容

    comm file1.txt file2.txt

  2. 比较file1.txt和file2.txt两个文件的内容,只显示两个文件共有的内容

    comm -12 file1.txt file2.txt

28. diff 命令

类似 comm 命令,diff 命令被用来监测文件之间的差异。然而,diff 是一款更加复杂的工具,它支持许多输出格式,并且一次能处理许多文本文件。软件开发员经常使用 diff 程序来检查不同程序源码版本之间的更改,diff 能够递归地检查源码目录,通常称之为源码树。diff 程序的一个常见用例是创建 diff 文件或者补丁,它会被其它程序使用,例如 patch 程序,来把文件从一个版本转换为另一个版本。

diff 在命令行中打印每一行的改动,并且 diff 是 svn、cvs、git 等版本控制工具不可或缺的一部分。

diff 命令是 differential 的缩写。

命令格式

diff [选项] 文件

常用参数

参数描述
-c上下文模式,显示全部内文,并标出不同之处
-u统一模式,以合并的方式来显示文件内容的不同
-a只会逐行比较文本文件
-N在比较目录时,若文件 A 仅出现在某个目录中,预设会显示:Only in 目录。若使用 -N 参数,则 diff 会将文件 A 与一个空白的文件比较
-r递归比较目录下的文件

命令举例

  1. 显示file1.txt和file2.txt两个文件的差异

    diff file1.txt file2.txt

    Tips: diff 的 normal 显示格式有三种提示:

    • a - add
    • c - change
    • d - delete
  2. 上一个例子的尝试之后可以发现,file1.txt和file2.txt两个文件的差异不易直观看出,这时可以使用上下文模式显示

    diff -c file1.txt file2.txt

    Tips:这个输出结果以两个文件名和它们的时间戳开头。第一个文件用星号做标记,第二个文件用短横线做标记。纵观列表的其它部分,这些标记将象征它们各自代表的文件。

    三种特殊字符:
    + 添加行,这一行将会出现在第二个文件内,而不是第一个文件内 - 删除行,这一行将会出现在第一个文件中,而不是第二个文件内 ! 更改行,将会显示某个文本行的两个版本,每个版本会出现在更改组的各自部分
    这些特殊字符很容易混淆,实际上记住一点就行:所有操作目的是将第一个文件变成第二个文件。

  3. 查看file1.txt和file2.txt两个文件的差异,使用统一模式显示

    diff -u file1.txt file2.txt

    Tips: 上下文模式和统一模式之间最显著的差异就是重复上下文的消除,这就使得统一模式的输出结果要比上下文模式的输出结果简短。
    特殊字符:
    + 添加这一行到第一个文件中
    - 在第一个文件中删除这一行

29. patch 命令

patch 命令被用来把更改应用到文本文件中。它接受从 diff 程序的输出,并且通常被用来把较老的文件版本转变为较新的文件版本。让我们看看一个著名的例子:Linux 内核是由一个大型的,组织松散的贡献者团队开发而成,这些贡献者会提交固定的少量更改到源码包中。这个 Linux 内核由几百万行代码组成,虽然每个贡献者每次所做的修改相当少。对于一个贡献者来说,每做一个修改就给每个开发者发送整个的内核源码树,这是没有任何意义的。这时我们可以提交一个 diff 文件。一个 diff 文件包含先前的内核版本与带有贡献者修改的新版本之间的差异。然后一个接受者使用 patch 程序,把这些更改应用到他自己的源码树中。使用 diff/patch 组合提供了两个重大优点:

  1. 与整个源码树的大小相比较而言,一个 diff 文件非常小。
  2. 一个 diff 文件简洁地显示了所做的修改,从而允许程序补丁的审阅者能快速地评估它。
    当然,diff/patch 能工作于任何文本文件,不仅仅是源码文件。它同样适用于配置文件或任意其它文本。

准备一个 diff 文件供 patch 命令使用,GNU 文档建议这样使用 diff 命令:

diff -Naur old_file new_file > diff_file

old file 和 new file 部分不是单个文件就是包含文件的目录。这个 r 选项支持递归目录树。

命令格式

patch [选项] 补丁文件

常用参数

参数描述
-p num忽略几层文件夹
-E如果发现了空文件,那么就删除它
-R取消打过的补丁

命令举例

  1. 生成file1.txt和file2.txt的 diff 文件,然后应用 patch 命令更新file1.txt文件

    diff -Naur file1.txt file2.txt > patchdiff.txt
    patch < patchdiff.txt

  2. 假设取消上面举例一打过的补丁

    patch -R < patchdiff.txt

四、磁盘存储相关命令

30. df 命令

linux 中 df 命令的功能是用来检查 linux 服务器的文件系统的磁盘空间占用情况。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。

df 命令是 disk free 的缩写。

命令格式

df [选项] 文件

常用参数

参数描述
-a全部文件系统列表
-h方便阅读方式显示
-i显示 inode 信息
-T文件系统类型
-t<文件系统类型>只显示选定文件系统的磁盘信息
-x<文件系统类型>不显示选定文件系统的磁盘信息

命令举例

  1. 显示磁盘使用情况

    df

  2. 以 inode 模式来显示磁盘使用情况

    df -i

  3. 列出文件系统的类型

    df -T

  4. 显示指定类型磁盘

    df -t ext4

    Tips: EXT4是第四代扩展文件系统(英语:Fourth extended filesystem,缩写为 ext4)是Linux系统下的日志文件系统

31. du 命令

linux 中 du 命令也是查看使用空间的,但是与 df 命令不同的是 Linux du 命令是对文件和目录磁盘使用的空间的查看。

du 命令是 disk usage 的缩写。

命令格式

du [选项] 文件

常用参数

参数描述
-a显示目录中所有文件的大小。
-b显示目录或文件大小时,以 byte 为单位。
-c除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和。
-k以 KB(1024bytes)为单位输出。
-m以 MB 为单位输出。
-s仅显示总计,只列出最后加总的值。
-h以 K,M,G 为单位,提高信息的可读性。

命令举例

  1. 显示指定文件所占空间,以方便阅读的格式显示

    du -hh file1.txt

  2. 显示指定目录所占空间,以方便阅读的格式显示

    du -h Desktop

  3. 显示几个文件或目录各自占用磁盘空间的大小,并且统计总和

    du -ch file1.txt file2.txt

  4. 按照空间大小逆序排序显示

    du -h | sort -nr | head -10

五、其他

32. time 命令

time 命令常用于测量一个命令的运行时间,包括实际使用时间(real time)、用户态使用时间(the process spent in user mode)、内核态使用时间(the process spent in kernel mode)。

实际时间: 从 command 命令行开始执行到运行终止的时间。

用户态使用时间:命令执行完成花费的用户 CPU 时间,即命令在用户态中执行时间总和。 内核态使用时间:命令执行完成花费的系统 CPU 时间,即命令在核心态中执行时间总和。

命令格式

time 命令

33. date 命令

在linux环境中,不管是编程还是其他维护,时间是必不可少的,也经常会用到时间的运算,date 可以用来显示或设定系统的日期与时间。

命令格式

date [参数] [格式]

常用参数

  • 时间方面
参数描述
%印出 %
%n下一行
%t跳格
%H小时(00…23)
%I小时(01…12)
%k小时(0…23)
%l小时(1…12)
%M分钟(00…59)
%p显示本地 AM 或 PM
%r直接显示时间 (12 小时制,格式为 hh:mm:ss [AP]M)
%s从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止的秒数
%S秒(00…61)
%T直接显示时间 (24 小时制)
%X相当于 %H:%M:%S
%Z显示时区
  • 日期方面
参数描述
%a星期几 (Sun…Sat)
%A星期几 (Sunday…Saturday)
%b月份 (Jan…Dec)
%B月份 (January…December)
%c直接显示日期与时间
%d日 (01…31)
%D直接显示日期 (mm/dd/yy)
%h同 %b
%j一年中的第几天 (001…366)
%m月份 (01…12)
%U一年中的第几周 (00…53) (以 Sunday 为一周的第一天的情形)
%w一周中的第几天 (0…6)
%W一年中的第几周 (00…53) (以 Monday 为一周的第一天的情形)
%x直接显示日期 (mm/dd/yy)
%y年份的最后两位数字 (00.99)
%Y完整年份 (0000…9999)

Tips: 若是不以加号作为开头,则表示要设定时间,而时间格式为 MMDDhhmm[[CC]YY][.ss],其中 MM 为月份,DD 为日,hh 为小时,mm 为分钟,CC 为年份前两位数字,YY 为年份后两位数字,ss 为秒数。
使用权限:所有使用者。

当不希望出现无意义的 0 时(比如说 1999/03/07),则可以在标记中插入 - 符号,比如说 date ‘+%-H:%-M:%-S’ 会把时分秒中无意义的 0 给去掉,像是原本的 08:09:04 会变为 8:9:4。

另外,只有取得权限者(比如说 root)才能设定系统时间。当以 root 身分更改了系统时间之后,请记得以 clock -w 来将系统时间写入 CMOS 中,这样下次重新开机时系统时间才会持续保持最新的正确值。

命令举例

  1. 显示当前时间,默认格式

    date

  2. 仅显示当前日期

    date ‘+%D’

  3. 显示月份与日数

    date ‘+%B %d’

  4. 显示日期与设定时间(12:34:56)

    date --date ‘12:34:56’

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/912119
推荐阅读
相关标签
  

闽ICP备14008679号