2024-06-12
[TOC]
一、基础正则表达式:元字符总结
^ : 匹配输入字符串的开始位置,除非再方括号表达式中使用,表示不包含该字符集合
. : 匹配除“\r\n”之处的任何单个字符
\ : 反斜杠,又叫转义字符,去除其后紧跟的元字符或通配符的特殊意义
***:** 匹配前面的子表达式零次或多次
[ ] : 字符集合,匹配所包含的任意一个字符
[^] : 赋值字符集合,匹配未包含的一个任意字符
[n1-n2] : 字符范围,匹配指定范围内的任意一个字符
{n} : n是一个非负整数,匹配确定的n次
{n,} : n是一个非负整数,至少匹配n次
{n,m} : m和n均为非负整数,其中n<=m,最少匹配n次最多匹配m次
二、grep用法
grep的使用规则:
1 | -n 表示显示行号 |
查找包含the的字符(准备一个查找文件)
1 | grep -n ‘the’ test.txt |
不区分大小写查找包含the的字符
1 | grep -in ‘the’ test.txt |
不查找包含the的字符
1 | grep -vn ‘the’ test.txt |
利用中括号[ ]来查找集合字符
1 | grep -n ‘sh[io]t’ test.txt |
查找包含重复单个字符oo时
1 | grep -n ‘oo’ test.txt |
若查找oo前面不是w的字符串
1 | grep -n ‘[^w]oo’ test.txt |
若不希望oo前面存在小写字母
1 | grep -n ‘[^a-z]oo’ test.txt |
查询以小写字母开头的行
1 | grep -n ‘^[a-z]’ test.txt |
查询不以字母开头的行
1 | grep -n ‘[^a-zA-Z]’ text.txt |
查询以.结尾的行
1 | grep -n ‘\.$’ test.txt |
若想要查询oo、ooo、oooo等字符串,则需要使用星号(*)元字符等,o*表示拥有零个或任意多个o字符,如果时“oo*”,则第一个o必须存在,后面的o*表示零个或任意多个o字符
1 | grep -n ‘ooo*’ test.txt |
查询以w开头d结尾,中间至少一个
1 | grep -n ‘woo*d’ test.tx |
查询以w开头d结尾,中间字符可有可无
1 | grep -n ‘w.*d’ test.txt |
查询两个o的字符
1 | grep -n ‘o\{2\}’ test.txt |
查询以w开头d结尾,中间包含两个及两个以上o
1 | grep -n ‘wo\{2,\}d’ test.txt |
三、sed命令常见用法
sed [选项] ‘操作’ 参数
sed [选项] -f scripfile 参数
选项的基本命令如下:
1 | -e script :指定sed编辑命令 |
操作的基本命令如下:
1 | a :增加,在当前行下面增加一行指定内容 |
1、输出符合条件的文本
输出第三行
1 | sed -n ‘3p’ test.txt |
输出第3-5行
1 | sed -n ‘3,5p’ test.txt |
输出所有奇数行
1 | sed -n ‘p:n’ test.txt |
输出所有偶数行
1 | sed -n ‘n:p’ test.txt |
输出第1-5行之间的奇数行
1 | sed -n ‘1,5{p:n}’ test.txt |
输出第10行之后的偶数行
1 | sed -n ’10,${n:p}’ test.txt |
输出包含the的行
1 | sed -n ‘/the/p’ test.txt |
输出从第4行的第一个包含the的行
1 | sed -n ‘4,/the/p’ test.txt |
输出以PI开头的行
1 | sed -n ‘/^PI/p’ test.txt |
输出以数字结尾的行
1 | sed -n ‘/[0-9]$/p’ test.txt |
输出包含wood的行
1 | sed -n ‘/\<wood>/p’ test.txt |
2、删除符合条件的文本
删除第3行
1 | sed ‘3d’ test.txt |
删除第3-5行
1 | sed ‘3,5d’ test.txt |
删除以小写字母开头的行
1 | sed ‘/^[a-z]/d’ test.txt |
3、替换符合条件的文本
将每行中的第一个the替换为THE
1 | sed ‘s/the/THE/’ test.txt |
将每行中的第2个l替换为L
1 | sed ‘s/l/L/2’ test.txt |
在包含the的每行行首插入#号
1 | sed ‘/the/s//#/’ test.txt |
在每行行尾插入字符串EOF
1 | sed ‘s/$/EOF/’ test.txt |
将第3-5行中的所有the替换为THE
1 | sed ‘3,5s/the/THE/g’ test.txt |
将包含the的所有行中的o替换为O
1 | sed ‘/the/s/o/O/g’ test.txt |
将文件中所有的o删除
1 | sed ‘s/o//g’ test.txt |
4、迁移符合条件的文本
1 | H :复制到剪切板 |
将包含the的行迁移至文件末尾
1 | sed ‘/the/{H;d};$G’ test.txt |
将第1-5行内容转移至第17行后
1 | sed ‘1,5{H’d};17G’ test.txt |
将包含the的行号另存为文件out.file
1 | sed ‘/the/w out.file’ test.txt |
将文件/etc/hostname的内容添加到包含the的每行以后
1 | sed ‘/the/r /etc/hostname’ test.txt |
在第3行后插入一个新行,内容为NEW
1 | sed ‘/the/3aNEW’ test.txt |
在包含the的每行后插入一个新行,内容为NEW
1 | sed ‘/the/aNEW’ test.txt |
在第3行后插入多行内容,中间的\n表示换行
1 | sed ‘3aNEW1\nNEW3’ test.txt |
四、awk工具
awk 选项 ‘模式或条件{编辑命令}’ 文件1 文件2…. //过滤并输出文件中符合条件的内容
awk -f 脚本文件 文件1 文件2… //从脚本中调用的编辑指令,过滤并输出内容
awk包含几个特殊的内建变量(可直接用)如下所示:
1 | FS:指定每行文本的字段分隔符,默认为空格或制表位; |
1、按行输出文本
输出所有内容,等同于cat test.txt
1 | awk ‘{print}’ test.txt |
输出第1~3行内容
1 | awk ‘NR==1,NR==3{print}’ test.txt |
输出第1~3行内容
1 | awk ‘(NR>=1)&&(NR<=3){print}’ test.txt |
输出第1行,第3行的内容
1 | awk ‘NR==1||NR==3{print}’ test.txt |
输出所有奇数行的内容
1 | awk ‘(NR%2)==1{print}’ test.txt |
输出所有偶数行的内容
1 | awk ‘(NR%2)==0{print}’ test.txt |
输出以root开头的行
1 | awk ‘/^root/{print}’ /etc/passwd |
输出以nologin结尾的行
1 | awk ‘/nologin$/{print}’ /etc/passwd |
统计以/bin/bash结尾的行数,等同于grep –c “/bin/bash$” /etc/passwd
1 | awk ‘BEGIN {x=0};/\/bin\/bash$/{x++};END {print x}’ /etc/passwd |
统计以空行分隔的文本段落数
1 | awk ‘BEGIN {RS=””} ;END{print NR}’ test.txt |
2、按字段输出文本
输出每行中(以空格或制表符分隔)的第三个字段
1 | awk ‘{print $3}’ test.txt |
输出每行中第1,3个字段
1 | awk ‘{print $1,$3}’ test.txt |
输出密码为空的用户的shadow记录
1 | awk -F ”:” ‘$2==””{print}’ /etc/shadow |
输出密码为空的用户的shadow记录
1 | awk ‘BEGIN {FS=”:”} ; $2==””{print}’ /etc/shadow |
输出以冒号分隔且第7个字段中包含/bash的行的第一个字段
1 | awk -F ”:” ‘$7~”/bash”{print $1}’ /etc/shadow |
输出包含8个字段且第一个字段中包含nfs的行的第1,2个字段
1 | awk ‘($1~”nfs”)&&(NF==8){print $1,$2}’ /etc/services |
输出第七个字段既不为/bin/bash也不为/sbin/nologin的所有行
1 | awk -F “:” ‘($7 != “/bin/bash”)&&($7 != “/sbin/nologin”){print}’ /etc/passwd |
打印文本文件的总行数
1 | awk 'END{print NR}' filename |
打印文本第二行第一列
1 | sed -n "2, 1p" filename | awk 'print $1' |
输出文件的倒数第二列以”,”隔开
1 | awk -F ',' 'END {print $2}' BIRoomTime20160229.txt |
shell里面的赋值方法有两种,格式为
- arg=
(命令)
- arg=$(命令)
因此,如果想要把某一文件的总行数赋值给变量nlines,可以表达为: - nlines=
(awk 'END{print NR}' filename)
或者 - nlines=$(awk ‘END{print NR}’ filename)
3、通过管道、双引号调用Shell命令
调用wc –l命令统计使用bash的用户的个数,等同于grep –c “bash$” /etc/passwd
1 | awk -F: ‘/bash$/{print | “wc -l”}’ /etc/passwd |
调用w命令,并用来统计在线用户数
1 | awk ‘BEGIN {while (“w” | getline) n++ ; {print n-2}}’ |
调用hostname,并输出当前主机名
1 | awk ‘BEGIN {“hostname” | getline ; print $0}’ |
五、sort工具
sort是一种以行为单位对文件内容进行排序的工具,也可以根据不同的数据类型来排序
用法:sort命令的语法为“sort [选项] 参数”,其中常用的选项包括一下几种
1 | -f:忽略大小写; |
六、uniq工具
uniq工具在Linux系统中通常与sort命令结合使用,用于报告或者忽略文件中的重复行
1 | -c:进行计数; |
七、tr工具
tr命令常用来对来自标准输入的字符进行替换、压缩和删除
tr具体的命令语法格式为:tr [选项] [参数]
1 | -c:取代所有不属于第一字符集的字符; |
八、Linux命令
锁定账户
第一种:
1、passwd -l tang 锁定tang用户
2、passwd -u tang 解锁tang用户
第二种:(权限优于第一种)
1、usermod -L tang 锁定tang用户
2、usermod -U tang 解锁tang用户
usermod命令锁定和解锁用户的的时候没有交互信息(就是不会有提示)
第三种:(锁定文件)
1、用chattr +i 命令锁定/etc/passwd 和 /etc/shadow文件
2、用chattr -i 命令解锁/etc/passwd 和 /etc/shadow文件
第四种:修改shell环境让账户无法登陆
1、vi /etc/passwd进入编译
2、把想锁定的账户后面改成/sbin/nologin
find:
1、用 find 查找三天之前以log结尾的文件并删除?
find /log -mtime +3 -type f -name “*.log”
添加用户是哪个命令?
useradd
改一个文件的属组和属主?
chown
如何让命令在后台执行?
命令& 这种会绑定终端,终端关闭进程就结束。
nohub 命令 & 这种关了终端可以运行
怎么判断某个变量是否为空?
! $A
你们系统用的哪个发行版?
centos ,ubuntu
如何检查linux上开放的端口
netstat -anptu //后面的t是tcp、u是udp
netstat -an //查看服务器开启哪些端口?
常用的linux命令有哪些
ls netstart cd chown chmod grep uptime ifconfig route……
查看硬盘使用情况的命令
fdsik -l #查看分区情况
df -h #查看挂载和使用情况
查看cpu的命令
cat /proc/cpuinfo | grep ‘model name’ 或者lscpu
查看内存的命令
free -m
如何查看当前Linux系统的状态,如CPU使用、内存使用、负载情况等?
top
查看cpu
cat /proc/cpuinfo
查看内核版本
uname -r
查看内存信息
cat /proc/meminfo
查看核心防护状态
getenforce
说明硬链接与软链接的差别,分别有什么好处?
ln,创建软连接
–软连接–> 原始文档–> i节点–> 文档数据
–ln-s 原始文件或目录软连接文件
若原始文件或目录被删除,连接文件将失效
软连接可存放在不同分区/文件系统
•ln,创建硬连接
–硬连接–> i节点–> 文档数据
–ln原始文件硬连接文件
若原始文件被删除,连接文件仍可用
硬连接与原始文件必须在同一分区/文件系统
Linux现连接一个新的存储(如/dev/sdf,容量2T)一个应用程序需要在/data目录使用此存储的500G的存储空间(做成LVM),需要哪些步骤,请描述。
1 | fdisk /dev/sdf 分区 |