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 | 每次创建新目录都显示信息 |
命令举例
-
递归创建多个目录
mkdir -p alun/test
-
创建权限为 777 的目录
mkdir -m 777 test
-
创建目录显示信息
mkdir -vp alun/test
5. rm 命令
rm 命令的功能为删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所有文件及子目录均删除。对于链接文件,只会删除链接,原文件均保持不变。
rm 是一个危险的命令,使用的时候要特别当心,尤其对于新手,否则整个系统就会毁在这个命令(比如在 /(根目录)下执行 rm * -rf)。所以,我们在执行 rm 之前最好先确认一下在哪个目录,到底要删除什么东西,操作时保持高度清醒的头脑。
rm 命令是 remove 的缩写。
命令格式
rm [选项] 文件或目录
常用参数
参数 | 描述 |
---|---|
-f --force | 忽略不存在的文件,从不给出提示 |
-i --interactive | 进行交互式删除 |
-r --recursive | 指示 rm 将参数中列出的全部目录和子目录均递归地删除 |
-v --verbose | 详细显示进行的步骤 |
命令举例
-
删除文件,系统会询问是否删除
rm test.txt
-
强行删除文件,系统不再提示
rm -f test.txt
-
删除所有后缀名为 .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 | 该选项适用于移动多个源文件到一个目录的情况,此时目标目录在前,源文件在后 |
命令举例
-
将文件 alun.txt 重命名为 test.txt
mv alun.txt test.txt
-
将文件 alun.txt 移动到 test 目录下(test 目录必须已经存在,否则执行重命名)
mv alun.txt test
-
将文件 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 | 使用这项参数之后,只会在源文件的修改时间较目的文件更新时,或是对应的目的文件并不存在,才复制文件 |
命令举例
-
对文件 test.txt 建立一个符号链接 t.txt
cp -s test.txt t.txt
-
将 test1 目录下的所有文件复制到 test2 目录下,覆盖前询问
cp -i test1/* test2
-
将 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 之外 |
命令举例
-
把 test1.txt 的文件内容加上行号后输入 text2.txt 这个文件里
cat -n test1.txt > test2.txt
-
把test1.txt的文件内容加上行号后输入test2.txt这个文件里,多行空行换成一行输出
cat -ns test1.txt > test2.txt
-
将 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 | 行号栏位的占用的位数 |
命令举例
-
把 test.txt 的文件内容加上行号后显示,空行不加行号
nl -b t test.txt
-
把 test.txt 的文件内容加上行号后显示,,行号分别在屏幕最左方、最右方不加 0 和最右方加 0 显示
nl -n ln test.txt
nl -n rn test.txt
nl -n rz test.txt -
把 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 | 返回上一屏 |
命令举例
-
从第五行开始显示text.txt文件中的内容
more +5 text.txt
-
从 test.txt 文件中查找第一个出现“g”字符串的行,并从该处前两行开始显示输出
more +/g test.txt
-
设定每屏行数为 5
more -5 test.txt
-
使用 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 命令 |
空格键 | 向后翻一页 |
向上键 | 向上翻动一行 |
向下键 | 向下翻动一行 |
命令举例
-
显示 test.txt 文件中的内容,并显示行号
less -N test,txt
-
显示 test.txt 文件中的内容,搜索字符串”alun”
less test.txt
/alun -
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<行数> | 显示的行数 |
命令举例
-
显示 test.txt 文件中的前 5 行内容
head -n 5 test.txt
-
显示 test1.txt 和 test2.txt 文件中的前 5 行内容
head -n 5 test1.txt test2.txt
13. tail命令
tail 命令主要用于显示指定文件末尾内容。
常用查看日志文件。
命令格式
tail [选项] 文件
常用参数
参数 | 描述 |
---|---|
-f | 循环读取 |
-q | 不显示处理信息 |
-v | 显示详细的处理信息 |
-c<字节> | 显示的字节数 |
-n<行数> | 显示行数 |
命令举例
-
显示 test.txt 文件中的最后 5 行内容
tail -n 5 test.txt
-
显示 test.log 文件中的最后 5 行内容,当 test.log 文件有新内容增加时自动更新显示
tail -n 5 -f test.log
二、文件查找命令
14. which 命令
which 命令的作用是,在 PATH 变量指定的路径中搜索可执行文件的所在位置。
它一般用来确认系统中是否安装了指定的软件。
命令格式
which 可执行文件名称
命令举例
-
确认是否安装了gcc
which gcc
-
查看cd命令的位置路径
which cd
15. whereis 命令
whereis 命令主要用于定位可执行文件、源代码文件和帮助文件在文件系统中的位置。
whereis 命令还具有搜索源代码、指定备用搜索路径和搜索不寻常项的功能。
whereis 命令查找速度非常快,这是因为它根本不是在磁盘中漫无目的乱找,而是在一个数据库中(/var/lib/mlocate/mlocate.db)查询。这个数据库是 Linux 系统自动创建的,包含有本地所有文件的信息,并且每天通过自动执行 updatedb 命令更新一次。也正是因为这个数据库要每天才更新一次,就会使得 whereis 命令的搜索结果有时候会不准确,比如刚添加的文件可能搜不到。
命令格式
whereis [选项] 文件
常用参数
参数 | 描述 |
---|---|
-b | 定位可执行文件 |
-m | 定位帮助文件 |
-s | 定位源代码文件 |
-u | 搜索默认路径下除可执行文件、源代码文件和帮助文件以外的其它文件 |
-B | 指定搜索可执行文件的路径 |
-M | 指定搜索帮助文件的路径 |
-S | 指定搜索源代码文件的路径 |
命令举例
-
搜索gcc可执行文件的路径
whereis -b gcc
-
搜索gcc帮助文件的路径
whereis -m gcc
-
搜索 gcc 源代码的路径
whereis -s gcc
16. locate 命令
locate 命令跟 whereis 命令类似,且它们使用的是相同的数据库。但 whereis 命令只能搜索可执行文件、联机帮助文件和源代码文件,如果要获得更全面的搜索结果,可以使用 locate 命令。
locate 命令使用了十分复杂的匹配语法,可以使用特殊字元(如’*’和’?’)来指定需要查找的样本。
命令格式
locate [选项][搜索字符串]
常用参数
参数 | 描述 |
---|---|
-q | 安静模式,不会显示任何错误讯息 |
-n | 至多显示 n 个输出 |
-r | 使用正则表达式做寻找的条件 |
-V | 显示版本信息 |
命令举例
-
搜索 etc 目录下所有以 sh 开头的文件
locate /etc/sh
-
搜索搜索 etc 目录下文件名包含 test 的文件
locate /etc/test
17. find 命令
find 命令主要作用是沿着文件层次结构向下遍历,匹配符合条件的文件,并执行相应的操作。
命令格式
find [选项][搜索路径] [表达式]
Tips: 默认路径是当前目录,默认表达式为 -print。
表达式可能由下列成份组成:操作符、选项、测试表达式以及动作。
常用参数
参数 | 描述 |
---|---|
find 命令将匹配的文件输出到标准输出 | |
-exec | find 命令对匹配的文件执行该参数所给出的 shell 命令 |
-name | 按照文件名查找文件 |
-type | 查找某一类型的文件 |
-prune | 使用这一选项可以使 find 命令不在当前指定的目录中查找,如果同时使用 -depth 选项,那么 -prune 将被 find 命令忽略 |
-user | 按照文件属主来查找文件 |
-group | 按照文件所属的组来查找文件 |
-mtime -n +n | 按照文件的更改时间来查找文件,-n 表示文件更改时间距现在小于 n 天,+n 表示文件更改时间距现在大于 n 天,find 命令还有 -atime 和 -ctime 选项 |
命令举例
-
打印当前目录下的文件目录列表
find . -print
-
打印当前目录下所有以.txt 结尾的文件名
find . -name “*.txt” -print
-
打印当前目录下所有以.txt 或.doc 结尾的文件名
find . ( -name “.txt" -or -name ".doc” )
-
打印当前目录下所有不以.txt 结尾的文件名
find . ! -name “*.txt”
-
打印当前目录下所有以 .txt 结尾的符号链接
find . -type l -name “*.txt” -print
Tips: 根据文件类型来查找文件,使用 -type 选项,常见 find 文件类型见下表
文件类型 | 描述 |
---|---|
b | 块设备文件 |
c | 字符设备文件 |
d | 目录 |
f | 普通文件 |
l | 符号链接 |
-
打印当前目录下 root 用户拥有的所有文件
find . -type f -user root
-
找到当前目录下所有 php 文件,并显示其详细信息
find . -name “*.php” -exec ls -l {} ;
Tips: -exec 是 find 命令对找到的文件执行的动作,这个动作就是对找到的文件执行命令,上面的命令就是ls -l {}。在这里说明一下{}和;,{}其实它就是一个占位符,在 find 命令的执行过程中会不断地替换成当前找到的文件,相当于”ls -l 找到的文件”。而;是 -exec 命令结束的标记,因为规定 -exec 后面的命令必须以;结束,但;在 shell 中有特殊含义,必须要转义,所以写成;。
-
默认下,-exec 后面只能使用单个命令,如果想要多个命令,可以将多个命令写入脚本文件中,然后在 -exec 中使用这个脚本
find . -name “*.c” -exec ./command.sh {} ;
#!/bin/bash
ls -l $1 #$1表示第一个参数
cat $1Tips: 直接运行上面的代码可能会提示你find ‘./command.sh’ : 权限不够,这是因为新建的command.sh没有执行权限,只需要使用chmod +x command.sh给予它可执行权限再执行就可以了。
三、文件具体操作命令
18. xargs 命令
我们可以用管道将一个命令的 stdout(标准输出)重定向到另一个命令的 stdin(标准输入)。但有些命令只能以命令行参数的形式接收数据,而无法通过 stdin 接收数据流。在这种情况下,无法通过管道将数据重定向给这些命令。
这时 xargs 就可以发挥它的作用了,xargs 命令可以从标准输入接收输入,并把输入转换为一个特定的参数列表。
命令格式
command | xargs [选项][command]
Tips: xargs 命令应该紧跟在管道操作符之后,因为它以标准输入作为主要的源数据流。
常用参数
参数 | 描述 |
---|---|
-n | 指定每行最大的参数数量 |
-d | 指定分隔符 |
命令举例
-
将多行输入转换为单行输出
cat a.txt | xargs
-
将单行输入转换为多行输出
echo “1 2 3 4 5 6 7” | xargs -n 3
-
将单行输入转换为多行输出,指定分隔符为 i
cat b.txt | xargs -d i -n 3
-
查找当前目录下所有 c 代码文件,统计总行数
find . -type f -name “*.c” | xargs wc -l
19. wc 命令
wc 命令是一个统计的工具,主要用来显示文件所包含的行、字和字节数。
wc 命令是 word count 的缩写。
命令格式
wc [选项][文件]
常用参数
参数 | 描述 |
---|---|
-c | 统计字节数 |
-l | 统计行数 |
-m | 统计字符数,这个标志不能与 -c 标志一起使用 |
-w | 统计字数,一个字被定义为由空白、跳格或换行字符分隔的字符串 |
-L | 打印最长行的长度 |
命令举例
-
统计文件的字节数、行数和字符数
wc -c c.txt
wc -l c.txt
wc -m c.txtTips: 每行结尾的换行符也算一个字符,空格也算一个字符。另外,由于系统采用 UTF-8 编码,所以一个汉字为 3 字节。
-
统计文件的字节数、行数和字符数,只打印数字,不打印文件名
cat c.txt | wc -c
cat c.txt | wc -l
cat c.txt | wc -m -
统计/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 | 将找到的关键词部分加上颜色显示 |
命令举例
-
将/etc/passwd文件中出现 root 的行取出来,关键词部分加上颜色显示
grep “root” /etc/passwd --color=auto
cat /etc/passwd | grep “root” --color=auto -
将/etc/passwd文件中没有出现 root 和 nologin 的行取出来
grep -v “root” /etc/passwd | grep -v “nologin”
-
在当前目录下递归搜索文件中包含 main() 的文件,经常用于查找某些函数位于哪些源代码文件中
grep -r “main()”.
正则表达式与 grep 命令
正则表达式是一种符号表示法,被用来识别文本模式。在某种程度上,它们与匹配文件和路径名的 shell 通配符比较相似,但其规模更大。许多命令行工具和大多数的编程语言都支持正则表达式,以此来帮助解决文本操作问题。
正则表达式元字符由以下字符组成:
^ $ . [ ] { } - ? * + ( ) | \
命令举例
-
利用 Linux 系统自带的字典查找一个五个字母的单词,第三个字母为 j,最后一个字母为 r,/usr/share/dict目录下存放字典文件(若没有可手动建立)
grep ‘^…j.r$’ words
-
验证固定电话,打印符合条件的电话,固定电话格式基本都是带有 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 选项指定的文本 |
命令举例
-
取出student.txt文件中的第一列和第三列
cut -f 1,3 -d ’ ’ student.txt
-
取出student.txt文件中的第一列
cut -f 1 -d ’ ’ student.txt
-
取出student.txt文件中的前三列
cut -f 1-3 -d ’ ’ student.txt
-
取出student.txt文件中除第一列的其他列
cut -f 1 -d ’ ’ student.txt --complement
-
给任意一字符串 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 | 自定义分隔符,默认为制表符 |
命令举例
-
将student.txt和telphone.txt文件中的内容按列拼接
paste student.txt telphone.txt
-
将student.txt和telphone.txt文件中的内容按列拼接,指定分隔符为:
paste student.txt telphone.txt -d ‘:’
-
将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 的内容,并不作替换 |
命令举例
-
将输入的字符大写转换为小写
echo ‘THIS IS SHIYANLOU!’ | tr ‘A-Z’ ‘a-z’
-
将输入的字符中的数字删除
echo ‘THIS 123 IS S1HIY5ANLOU!’ | tr -d ‘0-9’
24. sort 命令
同文本文件打交道时,总避不开排序,那是因为对于文本处理任务而言,排序(sort)可以起到不小的作用。
sort 命令能够帮助我们对文本文件和 stdin 进行排序操作。通常,它会结合其他命令来生成所需要的输出。
命令格式
sort [选项][文件名]
常用参数
参数 | 描述 |
---|---|
-n | 基于字符串的长度来排序,使用此选项允许根据数字值排序,而不是字母值 |
-k | 指定排序关键字 |
-b | 默认情况下,对整行进行排序,从每行的第一个字符开始。这个选项导致 sort 程序忽略每行开头的空格,从第一个非空白字符开始排序 |
-m | 只合并多个输入文件 |
-r | 按相反顺序排序,结果按照降序排列,而不是升序 |
-t | 自定义分隔符,默认为制表符 |
命令举例
-
列出/usr/share/目录下使用空间最多的前 10 个目录文件
du -s /usr/share/* | sort -nr | head -10
Tips: du -s /usr/share/*命令显示/usr/share/目录下所有文件和目录的磁盘使用空间,目录包含目录下的子目录和文件
-
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 个字符以后的内容不作对照 |
命令举例
- 找出/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 | 自定义分隔符,默认为制表符 |
命令举例
-
将两个文件中的第一个字段作为匹配字段,连接两个文件
join a.txt b.txt
-
指定两个文件的第三个字段为匹配字段,连接两个文件
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 | 不输出两个文件共有的行 |
命令举例
-
比较file1.txt和file2.txt两个文件的内容
comm file1.txt file2.txt
-
比较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 | 递归比较目录下的文件 |
命令举例
-
显示file1.txt和file2.txt两个文件的差异
diff file1.txt file2.txt
Tips: diff 的 normal 显示格式有三种提示:
- a - add
- c - change
- d - delete
-
上一个例子的尝试之后可以发现,file1.txt和file2.txt两个文件的差异不易直观看出,这时可以使用上下文模式显示
diff -c file1.txt file2.txt
Tips:这个输出结果以两个文件名和它们的时间戳开头。第一个文件用星号做标记,第二个文件用短横线做标记。纵观列表的其它部分,这些标记将象征它们各自代表的文件。
三种特殊字符:
+ 添加行,这一行将会出现在第二个文件内,而不是第一个文件内 - 删除行,这一行将会出现在第一个文件中,而不是第二个文件内 ! 更改行,将会显示某个文本行的两个版本,每个版本会出现在更改组的各自部分
这些特殊字符很容易混淆,实际上记住一点就行:所有操作目的是将第一个文件变成第二个文件。 -
查看file1.txt和file2.txt两个文件的差异,使用统一模式显示
diff -u file1.txt file2.txt
Tips: 上下文模式和统一模式之间最显著的差异就是重复上下文的消除,这就使得统一模式的输出结果要比上下文模式的输出结果简短。
特殊字符:
+ 添加这一行到第一个文件中
- 在第一个文件中删除这一行
29. patch 命令
patch 命令被用来把更改应用到文本文件中。它接受从 diff 程序的输出,并且通常被用来把较老的文件版本转变为较新的文件版本。让我们看看一个著名的例子:Linux 内核是由一个大型的,组织松散的贡献者团队开发而成,这些贡献者会提交固定的少量更改到源码包中。这个 Linux 内核由几百万行代码组成,虽然每个贡献者每次所做的修改相当少。对于一个贡献者来说,每做一个修改就给每个开发者发送整个的内核源码树,这是没有任何意义的。这时我们可以提交一个 diff 文件。一个 diff 文件包含先前的内核版本与带有贡献者修改的新版本之间的差异。然后一个接受者使用 patch 程序,把这些更改应用到他自己的源码树中。使用 diff/patch 组合提供了两个重大优点:
- 与整个源码树的大小相比较而言,一个 diff 文件非常小。
- 一个 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 | 取消打过的补丁 |
命令举例
-
生成file1.txt和file2.txt的 diff 文件,然后应用 patch 命令更新file1.txt文件
diff -Naur file1.txt file2.txt > patchdiff.txt
patch < patchdiff.txt -
假设取消上面举例一打过的补丁
patch -R < patchdiff.txt
四、磁盘存储相关命令
30. df 命令
linux 中 df 命令的功能是用来检查 linux 服务器的文件系统的磁盘空间占用情况。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。
df 命令是 disk free 的缩写。
命令格式
df [选项] 文件
常用参数
参数 | 描述 |
---|---|
-a | 全部文件系统列表 |
-h | 方便阅读方式显示 |
-i | 显示 inode 信息 |
-T | 文件系统类型 |
-t<文件系统类型> | 只显示选定文件系统的磁盘信息 |
-x<文件系统类型> | 不显示选定文件系统的磁盘信息 |
命令举例
-
显示磁盘使用情况
df
-
以 inode 模式来显示磁盘使用情况
df -i
-
列出文件系统的类型
df -T
-
显示指定类型磁盘
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 为单位,提高信息的可读性。 |
命令举例
-
显示指定文件所占空间,以方便阅读的格式显示
du -hh file1.txt
-
显示指定目录所占空间,以方便阅读的格式显示
du -h Desktop
-
显示几个文件或目录各自占用磁盘空间的大小,并且统计总和
du -ch file1.txt file2.txt
-
按照空间大小逆序排序显示
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 中,这样下次重新开机时系统时间才会持续保持最新的正确值。
命令举例
-
显示当前时间,默认格式
date
-
仅显示当前日期
date ‘+%D’
-
显示月份与日数
date ‘+%B %d’
-
显示日期与设定时间(12:34:56)
date --date ‘12:34:56’