sed 文件编辑器(vim) 非交互

sed 选项 ‘定位指令’ 文件 【定位指令一定要结合用】

-i 直接修改原文件 -n sed默认输出 -r 支持扩展正则表达式

定位 1.行号 1 2,3 2~2 3~8 2.正则/正则/

a 追加append i 插入insert
d 删除 delete c 行修改 s 关键词修改

sed ‘s/x/y/’ 文件 sed 's/x/y/2' 文件 sed 's/x/y/g' 文件 sed 's# /root # /tmp #' 文件 ()保留【相当于复制】 (abc) \1 (ttt) \2

vim a.txt abc test abc world abc sed -r 's/(abc)/<\1>/' a{2,3} 优化 a{2,3}

(abc)保留:扩展正则 {abc}保留:基本正则

p 查看print


[root@sanpao1 ~]# head -1 /etc/passwd root:x【必须有密码才能登陆计算机,本身不是密码】:0【uid号】:0:root【无意义,描述信息】:/root【自己的家目录】:/bin/bash【登陆sheel】

[root@sanpao1 ~]# head -1 /etc/shadow root【用户名】:$6$4sHlnhht$5mmSrgKy04oDd/msB/GFrijuc63eSOI42sPbEdvtwa7/3ws3VZSGxy/WEo3mtjYenHG39i843zcIZhTYtgznX.:【密码】17171:0:99999【密码有效时间。大约237年 】:7:::

从passwd里面把能登陆的用户名提取 bash 只要用户名 大数据--》数据分析,数据挖掘

[root@sanpao1 ~]# grep "bash" /etc/passwd root:x:0:0:root:/root:/bin/bash usetr:x:1000:1000:usetr:/home/usetr:/bin/bash zhansan:x:1001:1001::/home/zhansan:/bin/bash zhangsan:x:1002:1002::/home/zhangsan:/bin/bash jerry:x:1003:1003::/home/jerry:/bin/bash [root@sanpao1 ~]# A=grep "bash" /etc/passwd [root@sanpao1 ~]# echo $A root:x:0:0:root:/root:/bin/bash usetr:x:1000:1000:usetr:/home/usetr:/bin/bash zhansan:x:1001:1001::/home/zhansan:/bin/bash zhangsan:x:1002:1002::/home/zhangsan:/bin/bash jerry:x:1003:1003::/home/jerry:/bin/bash [root@sanpao1 ~]#

 for i in $A   【for循环是以空格为分隔点】
 do
 done

[root@sanpao1 ~]# sed -n '/bash/s/:.//p' /etc/passwd root usetr zhansan zhangsan jerry [root@sanpao1 ~]# sed -n '/bash/s/:.//p' /etc/passwd | wc -l 5 [root@sanpao1 ~]#

[root@sanpao1 ~]# head -1 /etc/shadow //提取密码 root:$6$4sHlnhht$5mmSrgKy04oDd/msB/GFrijuc63eSOI42sPbEdvtwa7/3ws3VZSGxy/WEo3mtjYenHG39i843zcIZhTYtgznX.:17171:0:99999:7:::

[root@sanpao1 ~]# A=sed '/bash/s/.*//' /etc/passwd

for i in $A do grep “$A” /etc/shadow grep/sed
echo ${变量#:} 掐头 echo ${变量%%:} 去尾 done

echo ${变量#*:} 掐头
echo ${变量%%:*} 去尾

取一个用户名一个密码 #!/bin/bash

A=sed -n '/bash/s/:.*//p' /etc/passwd for i in $A do B=grep "$A" /etc/shadow C=${B#:} D=${C%%:} echo $i $D done ~
[root@sanpao1 ~]# sh bash.sh root $6$4sHlnhht$5mmSrgKy04oDd/msB/GFrijuc63eSOI42sPbEdvtwa7/3ws3VZSGxy/WEo3mtjYenHG39i843zcIZhTYtgznX. usetr $6$4sHlnhht$5mmSrgKy04oDd/msB/GFrijuc63eSOI42sPbEdvtwa7/3ws3VZSGxy/WEo3mtjYenHG39i843zcIZhTYtgznX. zhansan $6$4sHlnhht$5mmSrgKy04oDd/msB/GFrijuc63eSOI42sPbEdvtwa7/3ws3VZSGxy/WEo3mtjYenHG39i843zcIZhTYtgznX. zhangsan $6$4sHlnhht$5mmSrgKy04oDd/msB/GFrijuc63eSOI42sPbEdvtwa7/3ws3VZSGxy/WEo3mtjYenHG39i843zcIZhTYtgznX. jerry $6$4sHlnhht$5mmSrgKy04oDd/msB/GFrijuc63eSOI42sPbEdvtwa7/3ws3VZSGxy/WEo3mtjYenHG39i843zcIZhTYtgznX. 【如果用户名后面式!!说明没有设置密码】


awk数据过滤工具 功能类似于grep 流处理器【逐行处理工具】

awk 选项 ‘条件{指令}’ 文件

[root@sanpao1 ~]# awk '{print}' /etc/passwd //全文打印===cat【没有条件】

awk ‘/正则/’ /etc/passwd 【没有指令】 [root@sanpao1 ~]# awk '/root/' /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin

awk 有列的概念,内置变量 //不能用“”,‘’中的$1,$2,awk可以看懂 $0【打印所有】$1【第一列】$2【第二列】


[root@sanpao1 ~]# tailf /var/log/secure //安全登陆日志 Apr 16 20:03:56 sanpao1 polkitd[1059]: Finished loading, compiling and executing 6 rules Apr 16 20:03:56 sanpao1 polkitd[1059]: Acquired the name org.freedesktop.PolicyKit1 on the system bus Apr 16 20:04:28 sanpao1 sshd[1480]: Server listening on 0.0.0.0 port 22. Apr 16 20:04:28 sanpao1 sshd[1480]: Server listening on :: port 22. Apr 16 20:05:45 sanpao1 login: pam_unix(login:session): session opened for user root by LOGIN(uid=0) Apr 16 20:05:45 sanpao1 login: ROOT LOGIN ON tty1 Apr 16 20:06:01 sanpao1 sshd[2962]: Accepted publickey for root from 192.168.4.254 port 52415 ssh2: RSA 78:93:f8:74:7d:15:59:55:41:01:b5:06:45:91:0c:62 Apr 16 20:06:01 sanpao1 sshd[2962]: pam_unix(sshd:session): session opened for user root by (uid=0) Apr 16 21:41:39 sanpao1 sshd[7983]: Accepted publickey for root from 192.168.4.254 port 52436 ssh2: RSA 78:93:f8:74:7d:15:59:55:41:01:b5:06:45:91:0c:62 Apr 16 21:41:39 sanpao1 sshd[7983]: pam_unix(sshd:session): session opened for user root by (uid=0)

RAR RAR破解 字典【passwd password 123456 暴力破解00 01 02 03 0a 0b

[root@sanpao1 ~]# cat /usr/share/dict/linux.words //linux中的字典

awk '/Failed/{print $11}' /var/log/secure i=awk '/Failed/{print $11}' /var/log/secure x=192.168.4.5 192.168.4.58 192.168.4.3 for i in $x do firew<tab> done

NR 当前行 NF 当前行的列数

cat test.sh

hello the world ni hao sanpo

awk '{print NR}' test.sh

1 2 3

awk '/hello/{print NR}' test.sh

1

awk '{print NF}' test.sh

3 2 1

awk '/the/{print NF}' test.sh

3

awk '{print $NR}' test.sh //$NR所有行第一列

hello hao

awk '{print $NF}' test.sh //$NF最后一列

world hao sanpo

##注意事项:awk默认以空格或tab为分割,理解列

-F 选项可以制定分隔符

awk -F: '{print $1}' /etc/passwd

cat test.sh

hello the,world ni hao:BJ sanpo;ip

awk -F: '{print $2}' test.sh

BJ

awk -F, '{print $2}' test.sh

world

awk -F[, : ] '{print $2}' test.sh

awk: fatal: Unmatched [ or [^: /[,/

awk -F"[, : ]" '{print $2}' test.sh

the hao

awk -F"[, : ; ]" '{print $2}' test.sh

the hao ip


df -h /

文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/rhel-root 50G 2.9G 48G 6% /

df / | awk '{print $4}'

可用 49365884

df / | awk '/root/{print $4}'

49365884

cipan=df / | awk '/root/{print $4}' [ $cipan -le 5000 ] && mail 163

awk '{print "title"}' /etc/passwd //可以打常量

awk -F: '{print "账户:"$1,"uid:"$3}' /etc/passwd 【,让两个两之间有空格】

awk -F: '{print "账户:"$1,"\tuid:"$3}' /etc/passwd 【\t相当于tab键】

账户:root uid:0 账户:bin uid:1 账户:daemon uid:2 账户:adm uid:3

awk -F: '{print "账户:"$1,"\nUID:"$3}' /etc/passwd 【\n 相当于回车,另起一行】

账户:root UID:0 账户:bin UID:1 账户:daemon UID:2 账户:adm UID:3

awk -F: '{print "账户:"$1,"\ruid:"$3}' /etc/passwd

uid:0root uid:1bin uid:2daemon uid:3adm

awk '{print NR}' test.sh /etc/hosts //从自己角度

1 2 3 4 5

awk '{print FNR}' test.sh /etc/hosts //从原始文件角度

1 2 3 1 2

awk '' 文件

awk 'BEGIN{} 条件{} END{}' 文件

BEGIN后面的命令,在读取文件之前执行 条件{}后面的命令,在读取文件的过程中执行 END{}后面的命令,在读取文件后执行

#awk -F: 'BEGIN{print "账户:\tUID"}'

awk -F: 'BEGIN{print "账户\t\tUID"} {print $1"\t\t"$3}' /etc/passwd

awk -F: 'BEGIN{print "账户\t\tUID"} {print $1"\t\t"$3} END{print "总共有:"NR}' /etc/passwd

账户 UID root 0 bin 1 daemon 2 adm 3 总共有:47 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ FS 保存或设置字段分隔符,例如FS=“:” $n 指定分隔的第n个字段,如$1,$3分别表示第1、第3列 $0 当前读入的整行文本内容 NF 记录当前处理行的字段个数(列数) NR 记录当前已读入行的数量(行数) FNR 保存当前处理行在原文本内的序号( 行号) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

awk 'BEGIN{x=1;y=1;print x*y;print x+y;print x++}' //计算器

awk 'BEGIN{x=2.1;y=2;print x*y;print x+y;print x++}' //x++中的x表示当前值

4.2 4.1 2.1

awk 'BEGIN{x=2.1;y=2;print x*y;print x+y;print ++x}' //++x

4.2 4.1 3.1

统计一下,能登陆的用户有多少个

awk 'BEGIN{x=0} /bash/{x++} END{print "总共有:"x}' /etc/passwd

总共有:5

awk '/bash/{x++} END{print "总共有:"x}' /etc/passwd

总共有:5

##提示:awk允许不定义变量,直接引用 如果是运算--0,如果是字符--空

awk条件: 1.正则(模糊查找) /正则/ 全行匹配 ~/正则/ 某一列匹配 !~/正则/ 某一列不匹配 awk有列的概念所以 awk -F: '$1~/正则/{指令} 文件' awk -F: '/正则/{指令}' /root/ 包含root即可(模糊查找) 2.字符数字(精准查找) awk -F: '$1=="root"' /etc/passwd //=赋值,==判断 awk -F: '$1!="root"' /etc/passwd | awk 中判断用<、>、= 把所有uid大于500用户名提取出来

awk -F: '$3>500{print $1,$3}' /etc/passwd

systemd-bus-proxy 999 systemd-network 998 polkitd 997 unbound 996 colord 995

3.逻辑判断 把所有uid大于100,并且小于500用户名提取出来 && 并且 || 或者 #awk -F: '$3>100&&$3<500{print $1,$3}' /etc/passwd

300以内(包含300),被3能整除和包含3的值

seq 300 | awk '条件' || '条件'

seq 300 | awk '$1~/3/' ||awk '$1%3==0'


#!/bin/bash echo "Content-type:text/html" echo ""

IP=ifconfig eth0 | awk '$1=="inet"{print $2}'

183 yum -y install httpd 184 systemctl start httpd 185 systemctl status httpd

vim /var/www/cgi-bin/ /var/www/html/a.html 静态页面:里面的数据是不变的 test.py 动态页面:每访问一次,运行一下,每次结果不一样

#!/bin/bash echo "Contect-type:text/html" //不管是sheel还是python都固定不变的格式 echo "" //不管是sheel还是python都固定不变的格式

脚本 free 内核 ##chmod +x /var/www/cgi-bin/test.sh

firefox http://192.168.4.254/cgi-bin/test.sh

awk 内存 awk 根分区

#!/bin/bash echo "Content-type:text/html" echo ""

IP=ifconfig private1 | awk '$1=="inet"{print $2}' echo "本服务器的IP是$IP" echo "</br>" Mem=free |sed -n "2p" | awk '{print $4}' echo "本服务器内存是$Mem" echo "</br>"

user=who | wc -l echo -n "当前有$user用户登陆这台计算机" echo "</br>"

#!/bin/bash echo "Content-type:text/html" echo ""

IP=ifconfig private1 | awk '$1=="inet"{print $2}' echo "本服务器的IP是$IP" echo "</br>" //换行!!

df -h / |awk '{print "您的根分区剩余:"$4}' echo "</br>"

free | awk '/Mem/{print "内存剩余:"$4}' echo "</br>"

user=who | wc -l echo -n "当前有$user用户登陆这台计算机"

firefox http://192.168.4.254/cgi-bin/test.sh

本服务器的IP是192.168.4.254 您的根分区剩余:347G 内存剩余:13140136 当前有4用户登陆这台计算机

客户端:firefox http://ip/cgi-bin/test.sh

awk if语句

if [];then a b fi c

if(3>1){}

if(3>x){a}else{b}

if(3>8){a} else if(3>5){b} else{c}

if(3>1){a;b} ; c //c肯定会执行 或 if(3>1){a;b} c

awk 'BEGIN{} 条件{} END{}' 文件 //if是个命令,不能打在条件中

awk '{if(){}else{}}'

awk '{if($3>500){x++}else{y++}} END{print x,y}' /etc/passwd 或者 sheel的思维模式如下: x=0,y=0 if [$3>500] ;then let x++ else let y++ fi