八、日志查询
- 大文件避免用cat、vi、vim查看
- head/tail
- less/more
1. head 显示文件头几行,默认10行
head选项 | 作用 |
---|---|
-n num | 显示头num行,默认10行 |
head -n 5 /etc/passwd == head -5 /etc/passwd
2. tail 显示文件后几行,默认10行
tail选项 | 作用 |
---|---|
-n num | 显示最后num行,默认10行 |
-f | 显示文件末尾的实时更新 |
tail -n 5 /etc/passwd
3. less 按页显示文件内容
q 退出查看
空格/f 下一页
b 上一页
G 最后一行
g 第一行
99g 第99行
4. more 按页显示文件内容,到达最后一行就退出
九、wc (word count) 统计文件中单词情况,未来工作中统计行数
wc选项 | 作用 |
---|---|
-l | 统计行数 |
# 统计/etc/services文件有多少行
wc -l /etc/services
# 11176 /etc/services
温馨提示:wc使用案例
一般都是配置其他命令,可以取出xxx次数
# 统计系统用户登录错误的次数 grep 'Failed password' /var/log/secure # Failed password # Failed password grep 'Failed password' /var/log/secure | wc -l # 2
管道符号
把前一个命令的结果,传递给后面的命令使用
管道符号 |
十、查询命令位置
- 查找命令绝对路径
- which
- whereis
1. which
- 查询命令位置
which wc mkdir sed awk ping ip shutdown
#/usr/bin/wc
#/usr/bin/mkdir
#/usr/bin/sed
#/usr/bin/awk
#/usr/bin/ping
#/usr/sbin/ip
#/usr/sbin/shutdown
2. whereis
- 显示命令、源码、说明文档等的路径
- -b:查二进制文件
whereis awk
# awk: /usr/bin/awk /usr/libexec/awk /usr/share/awk /usr/share/man/man1/awk.1.gz
十一、文件比较命令
1. diff
- a 增加
- c 替换
- d 删除
diff oldboy.txt oldboy-gai.txt
#1a2
#>lidao.txt
2. vimdiff
vimdiff oldboy.txt oldboy-gai.txt
十二、排序去重组合
sort选项 | 作用 |
---|---|
-n | 把要排序的内容当做数字,按照数字大小进行排序 |
-k | 指定某一列,根据某一列进行排序 |
-r | 逆序排列 |
-t | 指定分割符,必须是单个字符,默认是" " |
# 1. 对文件中的数字进行排序
sort day005-sort.txt
#00
#1
#02
#23
#100
# 2. 对文件中某一列进行排序
sort -n -k 2 day005-sort.txt == sort -nk2 day005-sort.txt
wang 15
lidao 16
liw 23
# 3. 对文件中某一列进行逆序排序
sort -n -k -r 2 day005-sort.txt == sort -rnk2 day005-sort.txt
liw 23
lidao 16
wang 15
企业面试题1:ll /etc/取出大小最大的前五个
# 对ll /etc/第5列进行逆序排序,取前5个 # 方法一: ll /etc/ | sort -rnk5 |head 5 # 方法二: ll /etc/ | sort -nk5 |tail 5
企业面试题2:使用sort多列同时进行排序
sort -rn -k2 /oldboy/day005-sort.txt #oldboy 40 linux学院 20000 #oldgirl 22 linux学院 30000 #oldli 18 linux学院 21000 #old6 8 linux学院 15000 #old5 8 linux学院 25000 #old4 7 linux学院 3000 #old3 7 linux学院 4040 #old2 7 linux学院 30300 #old1 7 linux学院 50000 sort -rn -k2 -k4 /oldboy/day005-sort.txt #oldboy 40 linux学院 20000 #oldgirl 22 linux学院 30000 #oldli 18 linux学院 21000 #old5 8 linux学院 25000 #old6 8 linux学院 15000 #old1 7 linux学院 50000 #old2 7 linux学院 30300 #old3 7 linux学院 4040 #old4 7 linux学院 3000
cat >/oldboy/day005-sort.txt<<EOF
oldboy 40 linux学院 20000
oldli 18 linux学院 21000
oldgirl 22 linux学院 30000
old3 7 linux学院 4040
old2 7 linux学院 30300
old1 7 linux学院 50000
old4 7 linux学院 3000
old5 8 linux学院 25000
old6 8 linux学院 15000
EOF
企业面试题3:以.为分割符对第三列和第四列进行排序
# -n 按数字大小进行排列 # -k3,3 表示仅对第三列进行排序 # -k4,4 表示仅对第三列进行排序 sort -t"." -n -k3,3 -k4,4 /oldboy/sort-20k.txt #192.168.0.151 00:0F:AF:85:6C:F6 #192.168.0.152 00:0F:AF:83:1F:65 #192.168.0.153 00:0F:AF:85:70:03 #192.168.1.1 00:0F:AF:81:19:1F #192.168.1.10 00:30:15:A2:3B:B6 #192.168.1.11 00:30:15:A3:23:B7 #192.168.1.12 00:30:15:A2:3A:A1 #192.168.2.2 00:0F:AF:85:6C:25 #192.168.2.20 00:0F:AF:85:55:DE #192.168.2.21 00:0F:AF:85:6C:09 #192.168.2.22 00:0F:AF:85:5C:41 #192.168.3.1 00:0F:AF:81:19:1F #192.168.3.2 00:0F:AF:85:6C:25 #192.168.3.3 00:0F:AF:85:70:42
cat >/oldboy/sort-20k.txt<<EOF
192.168.3.1 00:0F:AF:81:19:1F
192.168.3.2 00:0F:AF:85:6C:25
192.168.3.3 00:0F:AF:85:70:42
192.168.2.20 00:0F:AF:85:55:DE
192.168.2.21 00:0F:AF:85:6C:09
192.168.2.22 00:0F:AF:85:5C:41
192.168.0.151 00:0F:AF:85:6C:F6
192.168.0.152 00:0F:AF:83:1F:65
192.168.0.153 00:0F:AF:85:70:03
192.168.1.10 00:30:15:A2:3B:B6
192.168.1.11 00:30:15:A3:23:B7
192.168.1.12 00:30:15:A2:3A:A1
192.168.1.1 00:0F:AF:81:19:1F
192.168.2.2 00:0F:AF:85:6C:25
EOF
2. uniq
- 去重
uniq选项 | 作用 |
---|---|
-c | 去重并显示次数 |
-k | 指定某一列,根据某一列进行排序 |
-r | 逆序排列 |
-t | 指定分割符,必须是单个字符,默认是" " |
温馨提示:uniq只能对相邻的行进行合并(去重),若不相邻,需要用sort命令调整为相邻的
先sort,再uniq
企业面试题1:统计secure-ip.txt文件中每个ip出现次数并取出前5
sort secure-ip.txt | uniq c|sort rn |head -5
cat >/oldboy/uniq.txt<<EOF
oldboy
oldboy
oldboy
oldboy
oldboy
oldboy
Lidao
lidao
lidao
lidao
lidao
smile
smile
smile
smile
blood
blood
blood
blood
EOF
十三、日期组合
年:year Y
月:month m
日:day d
周:weekend w
时:hour H
分:mintue M
秒:second S
1. date
date选项 | 作用 |
---|---|
+ | 以xxx格式显示日期与时间 |
+ | %F 年-月-日(等价 %Y-%m-%d) |
+ | %w 周几 |
+ | %T 时:分:秒(等价 %H:%M:%S) |
-d | 根据说明修改时间 |
-s | 修改时间 |
1)按指定格式显示时间与日期
#案例1. 按照指定格式显示日期 年-月-日 2022-11-11
date +%F
2022-07-19
#案例2. 按照指定格式显示日期 年月日 20221111
date +%Y%m%d
20220719
date +%Y*%m*%d
2022*03*19
#案例3. 按照指定格式显示时间 时:分:秒
date +%T
10:55:02
date +%H:%M:%S
#案例4. 按照指定格式显示日期 年-月-日_周
date +%F_%w
2024-03-19_2
2)按说明显示指定时间与日期
#案例1. 一天前
date -d '-1 day'
#案例2. 一天后
date -d '1 day'
#案例3. 一天前 按 年-月-日_周_小时 格式显示
date -d '1 day' +%F_%w_%H
2022-03-20_3_11
3)手动修改时间(测试)
date -s '20221111 11:11:11'
date -s '20221111'
2. ntdate同步时间的命令
yum install ntdate
ntdate ntpl.aliyun.com
3. 修改时区
timedatectl
timedatectl set-timezone Asia/Shanghai
十四、重定向与管道
- 重定向
- 管道
1. 重定向
- 重定向
- 输出重定向 > (命令 > 文件)
- 标准输出
- 清空写入 1> 等价 >
- 追加写入 1>>等价 >>
- 标准错误 2>
- 合并输出 &>
- 标准输出
- 输入重定向 0< 等价 < (命令 < 文件)
- 输出重定向 > (命令 > 文件)
1)文件描述符
文件描述符 | 用途 | POSIX名称 | stdio流 |
---|---|---|---|
0 | 标准输入 | STDIN_FILENO | stdin |
1 | 标准输出 | STDOUT_FILENO | stdout |
2 | 标准错误 | STDERR_FILENO | stderr |
2)输出重定向
#案例1. 标准输出重定向
date +F% > list.txt
#案例2. 标准错误重定向(无错误)
ls /etc/ 2> list.txt
# 没有错误,故无list.txt中无信息
#案例3. 标准错误重定向(错误)
ls /etcsss 2> list.txt
# 不存在/etcsss文件夹,报错
#案例4. 合并输出
ls /home /etcsss &> list.txt
ls /home /etcsss 1> yes.txt 2> no.txt
#案例5. 输出信息扔入垃圾桶
yum in stall httpd &> /dev/null
#案例6. 使用cat和>覆盖文件内容,写入多行
cat > test.txt < EOF
第一行
第二行
第三行
EOF
#案例7. 使用cat和>>追加写入内容,写入多行
cat > test.txt <<EOF
第一行
第二行
第三行
EOF
2. 管道
- 管道命令可以将多条命令组合起来,一次性完成复杂的处理任务
- command1 | command2 | command3 | …
#案例1. 管道查看ssh进程
ps aux | grep "sshd"
tee命令
功能:读取标准输入的数据,并将其内容输出成文件
使用情况:配合管道“|”使用
选项:-a 追加cat /etc/passwd | tee 88.txt # 将/etc/passwd中的内容写入到88.txt文件中
Xargs命令
功能:将管道或标准输入(stdin)数据转换成命令行参数
使用情况:配合管道“|”使用
选项:-a 追加
Xargs -n 数字(对输入文本进行分行)
Xargs -n 数字 -d ‘分隔符’(对输入文本进行分行,以规定分隔符)#案例1. 将查找到的文件打包 find . -type f -name "*.cfg" |xargs tar -zcvf cfg.tar.gz # ./anaconda-ks.cfg #案例2. 将files.txt中写的文件删除 vim files.txt #/home/file1 #/home/file2 #/home/file5 cat files.txt | xargs rm -rvf # removed 'home/file1' # removed 'home/file2' # removed 'home/file5'