(1)格式:“wc [参数] 文件名称”
(2)wc: 行数 单词数 字节数
常用选项:
| 参数 | 作用 |
| -l | 只显示行数 |
| -w | 只显示单词数 |
| -c | 只显示字节数 |
(3)例1:查看系统中装了多少个软件
- [root@server ~]# rpm -qa | wc -l
- 1322
(1)格式:“sort [参数] 文件名称”
(2)常用选项:
| 参数 | 作用 |
| -f | 忽略大小写 |
| -b | 忽略缩进空格 |
| -n | 以数值型排序 |
| -r | 反向排序 |
| -u | 去除重复行 |
| -t | 指定文件间隔符 |
| -k | 设定字段范围,按哪一列排序 |
(3)示例:
例1:按英文字母排序
- [root@server ~]# cat s1.txt
- afasg
- fvsgeswg
- sgbsrgr
- sgsrgf
- xbf
- egtbf
- cdgza
- lkegpe
- [root@server ~]# sort s1.txt
- afasg
- cdgza
- egtbf
- fvsgeswg
- lkegpe
- sgbsrgr
- sgsrgf
- xbf
例2:按照年龄进行排序
- [root@server ~]# sort -t" " -k2 -n s1.txt
- afasg 12
- sgbsrgr 13
- sgsrgf 14
- fvsgeswg 24
- egtbf 64
- cdgza 67
- lkegpe 114
- xbf 345
例3:将年龄进行降序排序
- [root@server ~]# sort -t" " -k2 -nr s1.txt
- xbf 345
- lkegpe 114
- cdgza 67
- egtbf 64
- fvsgeswg 24
- sgsrgf 14
- sgbsrgr 13
- afasg 12
例4:去除文件中的重复行
- shanghai
- xian
- chengdu
- suzhou
- jiangsu
- xian
- chengdu
- suzhou
- [root@server ~]# sort -u s1.txt
- chengdu
- jiangsu
- shanghai
- suzhou
- xian
(1)格式:“cut [参数] 文件名称”。
(2)常用选项:
| 参数 | 选项 |
| -d | 分隔符 |
| -f | 输出字段 |
| -c | 输出字符个数 |
(3)示例:
例1:输出文件/etc/passwd前十行的用户名
- [root@server ~]# cut -d":" -f1 /etc/passwd | head
- root
- bin
- daemon
- adm
- lp
- sync
- shutdown
- halt
- mail
- operator
例2:输出文件/etc/passwd前十行里面的用户名,uid,gid
- [root@server ~]# cut -d":" -f1,3-4 /etc/passwd | head---不连续字段用逗号(,)隔开、连续字段用(-)连接
- root:0:0
- bin:1:1
- daemon:2:2
- adm:3:4
- lp:4:7
- sync:5:0
- shutdown:6:0
- halt:7:0
- mail:8:12
- operator:11:0
例3:输出文件/etc/passwd前十行的前八个字符
- [root@server ~]# cut -c 1-8 /etc/passwd | head
- root:x:0
- bin:x:1:
- daemon:x
- adm:x:3:
- lp:x:4:7
- sync:x:5
- shutdown
- halt:x:7
- mail:x:8
- operator
(1)格式:“uniq [参数] 文件名称”
-c 统计文件中相同的行
(2)示例:
面试题:统计/etc/passwd文件中的shell类型
- [root@server ~]# cut -d: -f7 /etc/passwd | sort ---让相同的东西连在一起
- [root@server ~]# cut -d":" -f7 /etc/passwd | sort | uniq -c | sort -nr
- 40 /sbin/nologin
- 7 /bin/bash
- 1 /sbin/shutdown
- 1 /sbin/halt
- 1 /bin/sync
(1)语法:
tr [-cdst][--help][--version][第一字符集][第二字符集]
tr [OPTION]…SET1[SET2]
(2)常用命令:
[:alnum:] all letters and digits ---数字和大小写字母
[:alpha:] all letters ---大小写字母
[:digit:] all digits ---数字[0-9]
[:lower:] all lower case letters ---小写字母[a-z]
[:space:] all horizontal or vertical whitespace
[:upper:] all upper case letters ---大写字母[A-Z]
例:小写转大写
- [root@server ~]# echo "Welcome to the Linux" | tr 'a-z' 'A-Z'---小写转大写
- [root@server ~]# echo "Welcome to the Linux" | tr [[:lower:]] [[:upper:]]
- WELCOME TO THE LINUX
(3)参数说明
(1)执行方式:利用向上或向下光标键来进行查询;第二种办法是执行“history [n]” 命令来查询。
(2)history(选项)(参数)
选项:
-N: 显示历史记录中最近的N个记录;
-c:清空当前历史命令;
-a:将历史命令缓冲区中命令写入历史命令文件中;
-r:将历史命令文件中的命令读入当前历史命令缓冲区;
-w:将当前历史命令缓冲区命令写入历史命令文件中;
-d:删除历史记录中第offset个命令
-n:读取指定文件
参数:
n:打印最近的n条历史命令。
(3)history的使用
1> 默认显示1000条命令。
[root@server ~]# vim /etc/profile—HISTSIZE=1000
2> 面试题:改变history默认输出(包含用户、ip、时间等)
法1:/etc/profile文件中加入以下内容
- HISTTIMEFORMAT=”%F %T `whoami` ”
- USER_IP=`who -u am I 2> /dev/null | awk ‘{print $NF}’ | sed -e ‘s/[()] //g`
- export HISTTIMEFORMAT=” [%F %T] [`whoami`][${USER_IP}] ”
-
- 或者不添加第一行,直接添加后两行:
- USER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`
- export HISTTIMEFORMAT="[%F %T][`whoami`][${USER_IP}] "
法2:执行:source /etc/passwd
效果:
- [root@server ~]# history
- 1 [2020-12-25 18:10:27][root][111.18.44.17]
- 2 [2020-12-20 10:35:16][root][111.18.44.17] cat /etc/redhat-release
- 3 [2020-12-20 14:02:20][root][111.18.44.17] exit
- 4 [2020-12-24 09:39:17][root][111.18.44.17] cat /etc/redhat-release
- 5 [2020-12-24 10:06:17][root][111.18.44.17] awk 'NR==5' /etc/passwd
- 6 [2020-12-24 10:08:31][root][111.18.44.17] whereis ifconfig
对于符号比较多的长命令,尽管系统在到达行尾时会自动将长命令行换到下一行,但也可以使用反斜杠“\”再加回车,将一个较长的命令分成多行表达。增强命令的可读性,换行后系统自动显示提示符“>”,表示正在输入一个长命令,此时可继续在新行上输入命令的后续部分。
例:
- [root@server ~]# ls /etc/sysconfig/network-scripts/ \
- > /tmp
若要在一行上输入和执行多条较短的命令,可使用分号来分隔命令。
例:
[root@server ~]# date; ls /tmp ;history
Ctrl+a 移动到当前行的开头
Ctrl+e 移动到当前行的结尾
Ctrl+l 清屏 Ctrl+u 剪切命令行中光标所在处之前的所有字符(不包括自身)
Ctrl+k 剪切命令行中光标所在处之后的所有字符(包括自身)
Ctrl+R 可以使用该快捷键来搜索历史命令
引用上一条命令的最后一个参数
方法1:!$
方法2:Alt+.(可能与快捷键冲突)
方法3:Esc,.
Alt+. 无法使用的解决方法:

1.含义:通配符是一种特殊语句,主要有星号(*)、问号(?)等表示,用来模糊搜索文件,当查找目录或文件时, 可以使用通配符来代替一个或多个真正字符。
2.作用范围:目录和文件名
3.常见通配符:常用通配符包括 "*"、"?" 、"[ ]"、 "[^ ]" 、"[! ]"和"{}"
4.常用选项
| 字符 | 含义 |
| * | 匹符配任意字 |
| ? | 匹配单个字符 |
| [] | 匹配方括号中的任意一个,不能用于创建目录和文件 |
| [^] | 匹配方括号中的任意一个字符或数字后进行取反,等同于[! ],表示范围可以 用".."或"—”,用于查找和删除目录和文件,不用于创建目录和文件 |
| [!] | 匹配方括号中的任意一个字符或数字后进行取反, 等同于[^ ],表示范围可以 用".."或"—", 用于查找和删除目录和文件,不用于创建目录和文件 |
| [?-?] | 匹配方括号范围内任意一个,用于查询、删除,但不能用于创建目录和文件 |
| {string,string} | 匹配括号中的任意一个字符串,表示一个范围时,字符串之间的个数用".." |
示例:
- [root@server ~]# touch f.txt f{1..6}.txt f{11..16}.txt f{111..116}.txt
- [root@server ~]# ls f*.txt
- f111.txt f114.txt f11.txt f14.txt f1.txt f4.txt f.txt
- f112.txt f115.txt f12.txt f15.txt f2.txt f5.txt
- f113.txt f116.txt f13.txt f16.txt f3.txt f6.txt
- [root@server ~]# ls f?.txt
- f1.txt f2.txt f3.txt f4.txt f5.txt f6.txt
- [root@server ~]# ls f??.txt
- f11.txt f12.txt f13.txt f14.txt f15.txt f16.txt
- [root@server ~]# ls f???.txt
- f111.txt f112.txt f113.txt f114.txt f115.txt f116.txt
- [root@server ~]# ls f[135].txt
- f1.txt f3.txt f5.txt
- [root@server ~]# ls f[^135].txt
- f2.txt f4.txt f6.txt
- [root@server ~]# ls f[!135].txt
- f2.txt f4.txt f6.txt
- [root@server ~]# ls f{1,3,5}.txt
- f1.txt f3.txt f5.txt
- [root@server ~]# ls f{1..6}.txt
- f1.txt f2.txt f3.txt f4.txt f5.txt f6.txt
[135] 匹配1或3或5
[1-3] 匹配1或2或3
[^1-3] 匹配非1-3之外的
[!1-3] 匹配非1-3之外的
{}
{1,3,5}匹配1或2或3
{1..3} 匹配1或2或3
1.分类:单引号:’’ 双引号:”” 反引号:`` 等价于$()
2.一般情况下,单引号和双引号引用的字符串
- [root@server ~]# echo 'hello world'
- hello world
- [root@server ~]# echo "hello world"
- hello world
3.单引号和双引号区别:
(1)单引号:所见所得
(2)双引号:引用变量值,可以包含命令结果
- [root@server ~]# echo "hello $USER"
- hello root
- [root@server ~]# echo 'hello $USER'
- hello $USER
(3)反引号:执行命令
- [root@server ~]# echo 'hello `whoami`'
- hello `whoami`
- [root@server ~]# echo "hello `whoami`"
- hello root
4.选项及作用
| 符号 | 作用 |
| ' | 单引号,输出时,将单引号内的所有内容都原样输出,称为强引用 |
| " | 双引号,输出双引号内的所有内容,如果内容中有变量,特殊转义符等;会首先把变量,转义符解析出结果,然后再输出最终内容,再变成强引用 |
| ` | 反引号,一般用于引用命令,执行的时候会被执行,与$()作用相同 |
| $() | 与 ` 作用相同 |