查看当前的终端设备:tty
显示当前使用的shell: echo ${SHELL}
显示当前系统使用的所有shell: cat /etc/shells
设置主机名(主机名不要使用下划线 、点)
显示命令提示符格式:echo $PS1
#改命令提示符显示格式为:[04:04:07 root@localhost\ [ ~]#
root@centos8 ~]# echo 'PS1="\[\e[1;32m\][\t \[\e[1;33m\]\u\[\e[35m\]@\h\ [\e[1;31m\] \W\[\e[1;32m\]]\[\e[0m\]\\$"' > /etc/profile.d/env.sh
区别指定的命令是内部或外部命令: type COMMAND
刷新磁盘 echo "- - -" > /sys/class/scsi_host/$HOST/scan ($HOST换实数)
管理内部命令: enable
查看外部命令路径:which -a |--skip-alias
Hash缓存表:
日期和时间
date 显示和设置(-s)系统时间
#date +%F 2021-05-19
#date +%T 17:25:22
clock,hwclock: 显示硬件时钟
显示日历:cal [–y]
[16:47:36 root@centos8 ~]#cal 9 1752
September 1752
Su Mo Tu We Th Fr Sa
1 2 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
管理时区:timedatactl
- timedatactl list-timezones 列出支持时区
- timedatactl set-timezones Asia/Shanghai 修改时区
用户登录信息
关机和重启
关机: halt 或 powerof
重启:reboot
关机或重启:shutdown [OPTION]... [TIME] [MESSAGE]
-r: reboot
-h: halt
-c:cancel
TIME:无指定,默认相当于+1(CentOS7) now: 立刻,相当于+0 +#: 相对时间表示法,几分钟之后;例如 +3 hh:mm: 绝对时间表示
实现会话管理:screen
命令行历史:history
history[-c][-d offset][n]
history-anrw[filename]
history-psarg[arg...]
调用命令行历史
显示命令的简短描述: whatis:
刚安装后不可立即使用,需要制作数据库(CentOS 7 版本以后 mandb ,CentOS 6 版本之前 makewhatis)
提供命令帮助: man
man [章节] keyword
查看cpu:lscpu
查看硬盘: lsblk
查看内存:free -m
查看发行版本: cat /etc/os-release 或 lsb_release -a
查看内核版本: uname -a
查看进程树: pstree -p
查看按16进制内容: hexdump -C 文件
登陆提示:
pwd命令: printing working directory
列出目录内容:ls ls [options] [files_or_dirs]
- -a(-A) 包含隐藏文件
- -l 显示额外的信息
- -R 目录递归
- -ld 目录和符号链接信息
- -1 文件分行显示
- -S 按从大到小排序
- -t 按mtime(内容修改时间)排序
- -u 配合-t选项,显示并按atime(访问时间)从新到旧排序
- -U 按目录存放顺序显示
- -X 按文件后缀排序
- -F 按类型加后缀显示
- -r 倒序
查看文件状态 stat
确定文件类型: file file [options] ...
将windows10上文本默认的编码转换成UTF-8:iconv -f gb2312 win.txt -o win2.txt
将windows的文本格式转换成Linux的文本格式:dos2unix windows.txt
创建空文件和刷新时间:touch touch [OPTION]... FILE...
复制文件和目录:cp
cp[OPTION]... [-T]SOURCEDEST
cp[OPTION]... SOURCE... DIRECTORY
cp[OPTION]... -tDIRECTORYSOURCE...
移动和重命名文件:mv
mv[OPTION]... [-T]SOURCEDEST
mv[OPTION]... SOURCE... DIRECTORY
mv[OPTION]... -tDIRECTORYSOURCE...
rename 批量修改文件名
rename [options] <expression><replacement><file>...
#为所有的conf文件加上.bak后缀:
rename 'conf' 'conf.bak' f*
#去掉所有的bak后缀:
rename '.bak' '' *.bak
显示目录树 tree
创建目录mkdir
删除空目录 rmdir
链接 ln filename [linkname ]
硬链接特点
软链接特点
标准输出和错误重新定向: >
1> 或 > 把STDOUT重定向到文件
>| 强制覆盖
2> 把STDERR重定向到文件
&> 把所有输出重定向到文件
>> 追加标准输出重定向至文件
2>> 追加标准错误重定向至文件
cat /dev/null > /data/file.logsh
转换和删除字符: tr tr [OPTION]... SET1 [SET2]
#该命令会把/etc/issue中的小写字符都转换成大写字符
tr ‘a-z’ ‘A-Z’< /etc/issue
#删除fstab文件中的所有abc中任意字符
tr –d abc < /etc/fstab
#转换windows文本到linux文本
tr -d '\r' < windows.txt > windows2.txt
-c –C --complement:取字符集的补集
-d --delete:删除所有属于第一字符集的字符
-s --squeeze-repeats:把连续重复的字符以单独一个字符表示,即去重
-t --truncate-set1:将第一个字符集对应字符转化为第二字符集对应的字符
标准输入重定向: <
[root@centos8 ~]#echo 2^3 > bc.log
[root@centos8 ~]#catbc.log
2^3
[root@centos8 ~]#bc < bc.log
8
多行重定向: <<
mail -s "Please Call" admin@magedu.com <<EOF
> Hi Wang
>
> Please give me a call when you get in. We may need
> to do some maintenance on server1.
>
> Details when you're on-site
> Zhang
管道: 命令1 | 命令2 | 命令3 | …
```shell
# 标准和错误输出都传递
[root@centos8 ~]#ls /data /xxx 2>&1 | tr 'a-z' 'A-Z'
LS: CANNOT ACCESS '/XXX': NO SUCH FILE OR DIRECTORY
/DATA:
ALL.LOG
F1.TXT
PASSWD.LOG
STERR.LOG
STOUT.LOG
TEST.LOG
TOUCH.LOG
# 从文件读取内容改密码(非交互式)
[root@centos8 ~]#cat p.txt | passwd --stdin wang
Changing password for user wang.
passwd: all authentication tokens updated successfully.
# 从字符串读取内容改密码
[root@centos8 ~]#echo magedu | passwd --stdin wang
Changing password for user wang.
passwd: all authentication tokens updated successfully.
#取消完成提示
[root@centos8 ~]#echo magedu | passwd --stdin wang &> /dev/null
```
重定向到多个目标:tee 命令1 | tee [-a ] 文件名 | 命令2
[root@centos8 ~]#cat <<EOF | tee /etc/motd
> welcome to magedu
> happy new year
> EOF
welcome to magedu
happy new year
生成序列:seq (-s指定分隔符)
#生成1-100并相加
[root@centos8 ~]#seq -s + 1 100 |bc
5050
用户管理命令
useradd [options] LOGINusermod [OPTION] LOGINuserdel [OPTION]... Login查看用户相关的ID信息 id id [OPTION]... [USER]
设置密码 passwd passwd [OPTIONS] UserName
修改用户密码策略 chage [OPTION]... LOGIN
-d LAST_DAY
-m --mindays MIN_DAYS
-M --maxdays MAX_DAYS
-W --warndays WARN_DAYS
-I --inactive INACTIVE 密码过期后的宽限期
-E --expiredate EXPIRE_DATE 用户的有效期
换个身份执行命令:su [-] UserName -c 'COMMAND'
[wang@centos8 ~]$su - root -c "getent shadow"
设置文件的所有者chown
```
chown [OPTION]... [OWNER][:[GROUP]] FILE...
chown [OPTION]... --reference=RFILE FILE...
```
- OWNER 只修改所有者
- OWNER:GROUP 同时修改所有者和属组
- :GROUP 只修改属组,冒号也可用 . 替换
- -R: 递归
- --reference=RFILE 参考指定的的属性,来修改
```
chgrp [OPTION]... GROUP FILE...
chgrp [OPTION]... --reference=RFILE FILE...
```
```
chmod [OPTION]... OCTAL-MODE FILE...
chmod [OPTION]... MODE[,MODE]... FILE...
#参考RFILE文件的权限,将FILE的修改为同RFILE
chmod [OPTION]... --reference=RFILE FILE...
```
> MODE:
>
> 修改一类用户的所有权限 u= g= o= ug= a= u=,g=
>
> 修改一类用户某位或某些位权限 u+ u- g+ g- o+ o- a+ a- +
新建文件和目录的默认权限 umask
新建文件的默认权限: 666-umask,如果所得结果某位存在执行(奇数)权限,则将其权限+1,偶 数不变
新建目录的默认权限: 777-umask
#查看umask
umask
#模式方式显示
umask –S
#输出可被调用
umask –p
特殊权限 Sticky 位
具有写权限的目录通常用户可以删除该目录中的任何文件,无论该文件的权限或拥有权 在目录设置Sticky 位,只有文件的所有者或root可以删除该文件 sticky 设置在文件上无意义
chmod o+t DIR...
chmod 1xxx DIR
chmod o-t DIR...
权限位映射
SUID: user,占据属主的执行权限位
s:属主拥有x权限
S:属主没有x权限
SGID: group,占据属组的执行权限位
s: group拥有x权限
S:group没有x权限
Sticky: other,占据other的执行权限位
t:other拥有x权限
T:other没有x权限
设定文件特殊属性 chattr
设置文件的特殊属性,可以访问root 用户误操作删除或修改文件
不能删除,改名,更改
chattr +i
只能追加内容
chattr +a
显示特定属性
lsattr
ACL相关命令
setfacl 设置ACL权限
getfacl 可查看设置的ACL权限
mask 权限,只影响除所有者和other的之外的人和组的最大权限,需要与用户的权限进行逻辑与运算后,才能变成有限的权限(Effective Permission)
[root@centos8 data]#setfacl -m u:wang:- f1.txt
[root@centos8 data]#ll
total 4
-rw-r--r--+ 1 root root 709 Dec 18 14:37 f1.txt
[root@centos8 data]#getfacl f1.txt
# file: f1.txt
# owner: root
# group: root
user::rw-
user:wang:---
group::r--
mask::r--
other::r--
查看非文本内容
#16进制方式查看设备
[root@ruipeng ~]# hexdump -C -n 512 /dev/vda1
00000000 58 46 53 42 00 00 10 00 00 00 00 00 00 ef fe fb |XFSB............|
.......
*
00000200
#od 即 dump files in octal and other formats
[root@ruipeng ~]# echo {a..z}|tr -d ' '|od -t x1z
0000000 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 >abcdefghijklmnop<
0000020 71 72 73 74 75 76 77 78 79 7a 0a >qrstuvwxyz.<
0000033
分页查看工具: more less
more [OPTIONS...] FILE...显示文本前或后行内容 head tail
head [OPTION]... [FILE]...
-c # 指定获取前#字节
-n # 指定获取前#行
tail [OPTION]... [FILE]...
-c # 指定获取后#字节
-n # 指定获取后#行
-# 同上
-f 跟踪显示文件fd新追加的内容,常用日志监控,相当于 --follow=descriptor,当文件删除再新建同名文 件,将无法继续跟踪文件
-F 跟踪文件名,相当于--follow=name --retry,当文件删除再新建同名文件,将可以继续跟踪文件
按列抽取文本: cut cut [OPTION]... [FILE]...
paste 合并多个文件同行号的列到一行 paste 合并多个文件同行号的列到一行
-d 分隔符:指定分隔符,默认用TAB
-s : 所有行合成一行显示
[root@centos8 ~]#paste-d":"alpha.logseq.log
a:1
b:2
c:3
d:4
e:5
f:
g:
h:
[root@centos8 ~]#paste-sseq.log
1 2 3 4 5
[root@centos8 ~]#paste-salpha.log
abcdefgh
[root@centos8 ~]#paste-salpha.logseq.log
abcdefgh
1 2 3 4 5
文本数据统计:wc
-l 只计数行数
-w 只计数单词总数
-c 只计数字节总数 -
m 只计数字符总数
-L 显示文件中最长行的长度
wc story.txt
39 237 1901 story.txt
行数 单词数 字节数
[root@centos8 ~]#wc -l title.txt
3 title.txt
[root@centos8 ~]#cat title.txt | wc -l
3
文本排序sort sort [options] file(s)
-r 执行反方向(由上至下)整理
-R 随机排序 -n 执行按数字大小整理
-f 选项忽略(fold)字符串中的字符大小写
-u 选项(独特,unique)删除输出中的重复行
-t c 选项使用c符号做为字段界定符
-k # 选项按照使用c字符分隔的 # 列来整理能够使用多次
#按用户id从大到小排序
[root@ruipeng data]# cut -d: -f1,3 passwd |sort -t: -k2 -nr
nobody:65534
admin:1000
systemd-coredump:999
polkitd:998
......
root:0
#统计访问量(ip要去重)
cut -d" " -f1 access_log|sort -u|wc -l
去重(连续)uniq uniq [OPTION]... [FILE]...
- -c: 显示每行重复出现的次数
- -d: 仅显示重复过的行
- -u: 仅显示不曾重复的行
```sh
#统计日志访问最高的前三IP
[root@centos8 data]#cut -d" " -f1 access_log |sort |uniq -c|sort -nr |head -3
4870 172.20.116.228
3429 172.20.116.208
2834 172.20.0.222
```
比较文件 diff
patch 复制在其它文件中进行的改变(要谨慎使用)
[root@centos8 ~]#diff -u f1.txt f2.txt
--- f1.txt 2019-12-13 21:31:30.892775671 +0800
+++ f2.txt 2019-12-13 22:00:14.373677728 +0800
@@ -1,4 +1,5 @@
-mage
-zhang
+magedu
+zhang sir
wang
xu
+shi
#通过diff结果找回文件 -b选项来自动备份改变了的文件.orig
[root@centos8 ~]#diff -u f1.txt f2.txt > f.patch
[root@centos8 ~]#rm -f f2.txt
[root@centos8 ~]#patch -b f1.txt f.patch
patching file f1.txt
查看二进制文件的不同 cpm
[root@centos8 ~]#cmp /bin/dir /bin/ls
/bin/dir /bin/ls differ: byte 737, line 2
[root@centos8 ~]#hexdump -s 730 -Cn 7 /bin/dir
000002da 00 00 47 4e 55 00 b0 |..GNU..|
000002e1
[root@centos8 ~]#hexdump -s 730 -Cn 7 /bin/ls
000002da 00 00 47 4e 55 00 93 |..GNU..|
000002e1
grep 对文本的(正则表达式)行基于模式进行过滤grep [OPTIONS] PATTERN [FILE...]
--color=auto 对匹配到的文本着色显示
-m # 匹配#次后停止
-v 显示不被pattern匹配到的行
-i 忽略字符大小写
-n 显示匹配的行号
-c 统计匹配的行数
-o 仅显示匹配到的字符串
-q 静默模式,不输出任何信息
-A # after, 后#行
-B # before, 前#行
-C # context, 前后各#行
-e 实现多个选项间的逻辑or关系,如:grep –e ‘cat ’ -e ‘dog’ file
-w 匹配整个单词
-E 使用ERE,相当于egrep
-F 相当于fgrep,不支持正则表达式
-f file 根据模式文件处理(从文件读取re)
-r 递归目录,但不处理软链接
-R 递归目录,但处理软链接
#分区最高利用率
[root@ruipeng ~]# df | grep '^/dev' |tr -s ' ' %|cut -d% -f5|sort -n
5
#查看当前连接次数最多的ip
[root@centos8 ~]#ss -nt | grep "^ESTAB" |tr -s ' ' : |cut -d: -f6|sort |uniq -c|sort -nr|head -n3
3 10.0.0.1
1 172.16.4.100
1 172.16.31.188
#去除注释和空行
grep -v "^#\|^$" /etc/profile
grep -Ev "^(#|$)" /etc/profile
egrep -v "^(#|$)" /etc/profile
#过滤ifconfig的IP地址
[root@ruipeng ~]# ifconfig | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}'
172.26.19.212
255.255.192.0
172.26.63.255
127.0.0.1
255.0.0.0
#显示查找该结果及前后三行
[root@ruipeng data]# grep -nC3 games passwd
8-halt:x:7:0:halt:/sbin:/sbin/halt
9-mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10-operator:x:11:0:operator:/root:/sbin/nologin
11:games:x:12:100:games:/usr/games:/sbin/nologin
12-ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
13-nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin
14-dbus:x:81:81:System message bus:/:/sbin/nologin
#按单词过滤
[root@ruipeng data]# grep -w bin passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
admin:x:1000:1000::/home/admin:/bin/bash
locate 非实时查找(数据库查找):locate [OPTION]... [PATTERN]...
locate 查询系统上预建的文件索引数据库 /var/lib/mlocate/mlocate.db 索引的构建是在系统较为空闲时自动进行(周期性任务),执行updatedb可以更新数据库 索引构建过程需要遍历整个根文件系统,很消耗资源
-i 不区分大小写的搜索
-n N 只列举前N个匹配项目
-r 使用基本正则表达式
#搜索名称或路径中包含“conf”的文件
locate conf
#使用Regex来搜索以“.conf”结尾的文件
locate -r '\.conf$'
find 实时查找工具,通过遍历指定路径完成文件查找 find [OPTION]... [查找路径] [查找条件] [处理动作]
[root@centos8 data]#find -regex ".*\.txt$"
./script40/b.txt
./f1.txt
#查找/etc/下,除/etc/sane.d目录的其它所有.conf后缀的文件
find /etc -path '/etc/sane.d' -a -prune -o -name "*.conf"
#查找/etc/下,除/etc/sane.d和/etc/fonts两个目录的所有.conf后缀的文件
find /etc \( -path "/etc/sane.d" -o -path "/etc/fonts" \) -a -prune -o -name "*.conf
参数替换 xargs
find | xargs COMMAND
[root@ruipeng data]# find -name "*.sh" | xargs ls -Sl
-rw-r--r-- 1 root root 876 Jun 1 22:58 ./test.sh
-rw-r--r-- 1 root root 0 Jun 7 22:50 ./10.sh
-rw-r--r-- 1 root root 0 Jun 7 22:50 ./110.sh
-rw-r--r-- 1 root root 0 Jun 7 22:50 ./11.sh
.....
#竖向显示
[root@ruipeng data]# echo {1..10} |xargs -n1
1
2
3
4
5
6
7
8
9
10
#并发执行多个进程
[root@ruipeng data]# seq 100 |xargs -i -P10 wget -P /data http://10.0.0.8/{}.html
--2021-06-07 22:54:17-- http://10.0.0.8/4.html
Connecting to 10.0.0.8:80... --2021-06-07 22:54:17-- http://10.0.0.8/2.html
Connecting to 10.0.0.8:80... --2021-06-07 22:54:17-- http://10.0.0.8/3.html
Connecting to 10.0.0.8:80... --2021-06-07 22:54:17-- http://10.0.0.8/5.html
Connecting to 10.0.0.8:80... --2021-06-07 22:54:17-- http://10.0.0.8/1.html
Connecting to 10.0.0.8:80... --2021-06-07 22:54:17-- http://10.0.0.8/6.html
Connecting to 10.0.0.8:80... --2021-06-07 22:54:17-- http://10.0.0.8/7.html
Connecting to 10.0.0.8:80... --2021-06-07 22:54:17-- http://10.0.0.8/8.html
Connecting to 10.0.0.8:80... --2021-06-07 22:54:17-- http://10.0.0.8/9.html
Connecting to 10.0.0.8:80... --2021-06-07 22:54:17-- http://10.0.0.8/10.html
压缩解压缩
注意:在指定排除目录的时候,目录的话结尾不能带/否则将会排除失败。比如--exclude=tomcat/logs如果写成--exclude=tomcat/logs/,则打包的时候还是会打进去。
-k keep, 保留原文件
-d 解压缩
-c 结果输出至标准输出,保留原文件不改变
-# 压缩比,取值1-9,默认为6
-d 解压缩,相当于gunzip
-c 结果输出至标准输出,保留原文件不改变
-# 指定压缩比,#取值为1-9,值越大压缩比越大
cat messages | gzip > m.gz :内容压缩
zcat file.gz 不显式解压缩的前提下查看文本文件内容
compress和uncompress compress Options [file ...]
gzip和gunzip gzip [OPTION]... FILE ...
bzip2和bunzip2(非系统自带) bzip2 [OPTION]... FILE ...
-k keep, 保留原文件
-d 解压缩
-c 结果输出至标准输出,保留原文件不改变
-# 1-9,压缩比,默认为9
bunzip2 file.bz2 解压缩
bzcat file.bz2 不显式解压缩的前提下查看文本文件内容
xz和unxz xz [OPTION]... FILE ...
unxz file.xz 解压缩
xzcat file.xz 不显式解压缩的前提下查看文本文件内容
zip和unzip
#打包并压缩
zip –r /backup/sysconfig.zip /etc/sysconfig/
#默认解压缩至当前目录
unzip /backup/sysconfig.zip
#解压缩至指定目录
unzip /backup/sysconfig.zip -d /tmp
cat /var/log/messages | zip messages -
unzip -p message.gz > message #-p 表示管道
打包和解包 tar 磁带归档(Tape ARchive),常用于备份 tar -cpvf /PATH/FILE.tar FILE...
(1) 创建归档,保留权限
tar -cpvf /PATH/FILE.tar FILE...
(2) 追加文件至归档: 注:不支持对压缩文件追加
tar -rf /PATH/FILE.tar FILE...
(3) 查看归档文件中的文件列表
tar -t -f /PATH/FILE.tar
(4) 展开归档
tar xf /PATH/FILE.tar tar xf /PATH/FILE.tar -C /PATH/
(5) 结合压缩工具实现:
[root@centos8 ~]#tar zcvf etc.tar.gz /etc/
[root@centos8 ~]#tar jcvf etc.tar.bz2 /etc/
[root@centos8 ~]#tar Jcvf etc.tar.xz /etc/
--exclude 排除文件
tar zcvf /root/a.tgz --exclude=/app/host1 --exclude=/app/host2 /app
sed 即 stream EDitor,行编辑器 sed [option]... 'script;script;...' inputfile...
地址:
1. 不给地址:对全文进行处理
2. 单地址:
#:指定的行,$:最后一行
/pattern/:被此处模式所能够匹配到的每一行
3. 地址范围:
#,#
#,+#
/pat1/,/pat2/
#,/pat/
4. 步进:~
1~2 奇数行
2~2 偶数行
命令:
p 打印当前模式空间内容,追加到默认输出之后
d 删除模式空间匹配的行,并立即启用下一轮循环
a [\\]text 在指定行后面追加文本,支持使用\n实现多行追加
i [\\]text 在行前面插入文本
c [\\]text 替换行为单行或多行文本
w /path/file 保存模式匹配的行至指定文件
r /path/file 读取指定文件的文本至模式空间中匹配到的行后
= 为模式空间中的行打印行号
! 模式空间中匹配行取反处理
s/pattern/string/修饰符 查找替换,支持使用其它分隔符,可以是其它形式:s@@@,s###
替换修饰符:
g 行内全局替换
p 显示替换成功的行
w /PATH/FILE 将替换成功的行保存至文件中
'地址命令'awk 格式化文本输出awk [options] 'program' var=value file…awk [options] -f programfile var=value file…
program通常是被放在单引号中,并可以由BEGIN语句块、模式匹配的通用语句块、END语句块组成
[root@centos8 ~]#awk '{print "hello,awk"}'
[root@centos8 ~]#awk -F: '{print "wang"}' /etc/passwd
[root@centos8 ~]#awk -F: '{print}' /etc/passwd
[root@centos8 ~]#awk -F: '{print 0}' /etc/passwd
[root@centos8 ~]#awk -F: '{print1,3}' /etc/passwd
[root@centos8 ~]#awk -F: '{print1"\t"3}' /etc/passwd
[root@centos8 ~]#grep "^UUID" /etc/fstab |awk {'print2,3'}
/ xfs
/boot ext4
/data xfs
swap swap
[root@centos8 ~]#awk '{print1}' access_log |sort |uniq -c|sort -nr|head
4870 172.20.116.228
3429 172.20.116.208
2834 172.20.0.222
2613 172.20.112.14
2267 172.20.0.227
2262 172.20.116.179
2259 172.20.65.65
1565 172.20.0.76
1482 172.20.0.200
1110 172.20.28.145
[root@centos8 ~]#df | awk -F"[[:space:]]+|%" '{print 5}'
Use
0
0
1
0
5
1
92
1
[root@centos8 ~]#df | grep "^/dev/sd" | awk -F"[[:space:]]+|%" '{print5}'
5
1
92
[root@centos8 ~]#df | awk -F"[[:space:]]+|%" '/^\/dev\/sd/{print $5}'
5
1
92
awk内置变量
FS:输入字段分隔符,默认为空白字符,功能相当于 -F
#user uid shell
[root@localhost ~]# awk -F: '{print $1,$3,$7}' /etc/passwd
#user:uid
[root@localhost ~]# awk -v FS=":" '{print $1FS$3}' /etc/passwd
OFS:输出字段分隔符,默认为空白字符
[root@localhost ~]# awk -v FS=':' -v OFS='#' '{print $1,$3,$7}' /etc/passwd
RS:输入记录分隔符,指定输入时的换行符
awk -v RS=' ' '{print }' /etc/passwd
ORS:输出记录分隔符,输出时用指定符号代替换行符
[root@localhost ~]# awk -v RS=' ' -v ORS='--' '{print $0}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP--User:/var/ftp:/sbin/nologin
nobody:x:65534:65534:Kernel--Overflow--User:/:/sbin/nologin
sshd:x:74:74:Privilege-separated--SSH:/var/empty/sshd:/sbin/nologin
unbound:x:999:993:Unbound--DNS--resolver:/etc/unbound:/sbin/nologin
polkitd:x:998:992:User--for--polkitd:/:/sbin/nologin
……
NF:字段数量
[root@localhost ~]# awk '{print NF}' /etc/fstab
0
1
2
10
1
9
12
1
11
6
1
6
6
6
NR:记录编号
[root@localhost ~]# awk -F: '{print NR}' /etc/passwd
1
2
3
4
5
6
7
8
9
10
11
……
FNR:多个文件分别计数,记录号
[root@localhost ~]# awk '{print FNR}' /etc/fstab /etc/inittab
1
2
3
……
14
1
2
3
4
……
12
[root@ruipeng ~]# awk '{print FNR,$0}' /etc/issue /etc/redhat-release
1 \S
2 Kernel \r on an \m
3
1 CentOS Linux release 8.2.2004 (Core)
FILENAME:当前文件名
[root@ruipeng ~]# awk '{print FNR,FILENAME,$0}' /etc/issue /etc/redhat-release
1 /etc/issue \S
2 /etc/issue Kernel \r on an \m
3 /etc/issue
1 /etc/redhat-release CentOS Linux release 8.2.2004 (Core)
自定义变量(区分字符大小写),在program中直接定义
[root@ruipeng ~]# awk -v test='hello gawk' '{print test}' /etc/fstab
hello gawk
hello gawk
hello gawk
……
split分割一个文件为多个文件
#分割大的 tar 文件为多份小文件
split -b Size –d tar-file-name prefix-name
split -b 1M mybackup.tgz mybackup-parts
#切换成的多个小分文件使用数字后缀
split -b 1M –d mybackup.tgz mybackup-parts
#合并
cat mybackup-parts* > mybackup.tar.gz
包管理器rpm rpm {-i|--install} [install-options] PACKAGE_FILE…