sed 替换文件内容 找谁 干啥 -n 取消默认输出 查找 sed -n '3p' /etc/passwd 查找第三行 sed -n '3,10p' /etc/passwd 查找文件的第三行到第十行 sed -n '2,$p' /etc/passwd查找文件从第二行到尾行

grep和sed awk模糊匹配查找的区别 grep grep 'root' file awk awk '/root/' file sed sed -n '/root/p' file sed -n '/root/,/halt/p' /etc/passwd (贪婪匹配结尾匹配不到就全部打印出来,root-halt,第二个root继续匹配halt,没有第二个halt就全部打印出来。底下以此类推) 替换 sed -n 's#root#oldboy#p' passwd 替换匹配到行的第一个root为oldboy sed -n 's#root#oldboy#gp' passwd 替换所有的root为oldboy sed -n '1s#root#oldboy#gp' passwd 替换第一行所有的root为oldboy sed -n '/root/s#root#oldboy#gp' passwd 把匹配到的root行进行替换 删除是s##d sed 后向引用 sed -r 's#(.)#\1 alex#g' 1.txt 例子: 批量创建用户 echo oldboy{1..10}|xargs -n1|sed -r 's#(.)#userdel -r \1#g'|bash

echo oldboy{1..10}|xargs -n1|sed -r 's#(.*)#useradd \1;echo echo $RANDOM|md5sum|cut -c1-8|passwd --stdin \1#g' useradd oldboy1;echo $RANDOM|md5sum|cut -c1-8|passwd --stdin oldboy1 echo echo $RANDOM|md5sum|cut -c1-8|passwd --stdin oldboy1 echo b78bbdca|passwd --stdin oldboy1

useradd oldboy1;ran=echo $RANDOM|md5sum|cut -c1-8;echo $ran|passwd --stdin oldboy1 useradd oldboy1;ran=cfc891e6;echo $ran|passwd --stdin oldboy1

echo oldboy{1..10}|xargs -n1|sed -r 's#(.*)#useradd \1;ran=echo $RANDOM|md5sum|cut -c1-8;echo $ran|passwd --stdin \1;echo $ran \1>> pass.txt#g'|bash seq 生成序列 -s 指定分隔符 默认\n(回车) \t tab \n 回车 bc 计算 安装bc 面试题 seq -s + 100|bc awk 查找 统计 (擅长取列) //找谁 {}awk的动作 awk '/root/' psswd awk '{动作}' file 取出第五列 awk 列数 从第一列开始$1 awk默认分隔符 空格 tab awk '{print $1}' /etc/hosts

指定分隔符 head -1 /etc/passwd|awk -F: '{print $1}' head -1 /etc/passwd|awk -F ":" '{print $1}' 如果列数空格隔开 使用. 或者使用" " 双引号里面想写什么就什么 head -1 /etc/passwd|awk -F: '{print $1,$3}' head -1 /etc/passwd|awk -F: '{print $1"---"$3}' 扩展 在awk中输出的自定义字符串 默认都当做变量 只有加双引号才被识别为字符 1.echo oldboy{1..10}|xargs -n1|awk '{print "useradd " $1}' 2.[root@oldboy ~]# echo oldboy{1..3}|xargs -n1|awk '{print "useradd " $1";echo 123456|passwd --stdin " $1}' useradd oldboy1;echo 123456|passwd --stdin oldboy1 useradd oldboy2;echo 123456|passwd --stdin oldboy2 useradd oldboy3;echo 123456|passwd --stdin oldboy3

[root@oldboy ~]# ps axu|awk '{print $5}'|grep -v VSZ|tr "\n" "+"|sed -r 's#(.)#\10\n#g' 43648+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+37124+44836+0+0+0+0+0+0+0+0+0+0+0+55508+99656+298712+21672+223560+221236+538436+26376+58064+126280+573816+112796+220764+110088+89620+89792+0+157188+116456+157188+116360+0+0+89724+0+0+155324+113540+112704+107972+116932+0 [root@oldboy ~]# ps axu|awk '{print $5}'|grep -v VSZ|tr "\n" "+"|sed -r 's#(.)#\10\n#g'|bc 4248600 在awk中输出的自定义字符串 默认都是变量 只有加双引号才被认识为字符

awk 变量 0($0输出所有) 1 2 3 awk NF 把最后一列的列号赋值给NF,NF是一个变量(输出文件的最后一列)

[root@oldboy ~]# cat 1.txt inet 10.0.0.200/24 qqq aaa ccc bbb aaa ccc 111 222 3333 666 [root@oldboy ~]# awk '{print NF}' 1.txt 2 4 2 3 1 [root@oldboy ~]# awk '{print $NF}' 1.txt 10.0.0.200/24 bbb ccc 3333 666

[root@oldboy ~]# cat 1.txt inet 10.0.0.200/24 qqq aaa ccc bbb aaa ccc 111 222 3333 666 [root@oldboy ~]# awk '{print NF-2}' 1.txt 02 01 -1 [root@oldboy ~]# awk '{print $(NF-2)}' 1.txt inet 10.0.0.200/24 aaa aaa ccc 111

sed awk 取行 sed -n '3p' file sed -n '1,10p' file awk 'NR==3' file awk 'NR==1' /etc/passwd awk 'NR<2' /etc/passwd awk 'NR>2' /etc/passwd && 并且 || 或者 awk 'NR>2&&NR<6' /etc/passwd 行号大于2 并且小于6 3-5行 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

awk 'NR==1||NR==6' /etc/passwd 取第1行或者第六行 root:x:0:0:root:/root:/bin/bash sync:x:5:0:sync:/sbin:/bin/sync

chown 修改文件的所有者 [root@oldboy ~]# chown oldboy.oldboy 1.txt [root@oldboy ~]# ll total 16 -rw-r--r-- 1 oldboy oldboy 60 Aug 15 10:47 1.txt

面试题坑: [root@oldboy ~]# useradd -u 1500 -g1500 oldboy1 useradd: group '1500' does not exist 首先创建组 [root@oldboy ~]# groupadd -g 1500 test [root@oldboy ~]# useradd -u 1500 -g1500 oldboy1 [root@oldboy ~]# id oldboy1 uid=1500(oldboy1) gid=1500(test) groups=1500(test) htop iotop iftop

sudo 临时让用户拥有root的权限 sudo 尚方大宝剑 宝剑--只能看一看皇宫-----------ls

sudo -l 查看可执行命令 输入密码三次 自动临时保存 下次登录还会提示输入密码 sudo -k 清空临时密码

开发人员的使用权限 避免使用* 第一个里程碑 如何查看自己的大宝剑 sudo -l 第二个里程碑 授权大宝剑 授权命令使用全路径 visudo -------------vim /etc/sudoers visudo 语法检测 alex ALL=(ALL) /usr/bin/ls

[alex@oldboy ~]$ ls /root/
ls: cannot open directory /root/: Permission denied
使用sudo大宝剑执行命令
[alex@oldboy ~]$ sudo ls /root
1.txt  2.txt  pass.txt	passwd	test

第三个里程碑 授权所有的命令 alex ALL=(ALL) /usr/bin/* 代授权的用户或组 机器=(授权角色) 可以执行的命令 user MACHINE= COMMANDS tom ALL=(ALL) /usr/sbin/useradd 第四个里程碑 如何取反 某一个命令不能使用 alex ALL=(ALL) /usr/bin/*,!/usr/bin/su alex ALL=(ALL) /usr/bin/ls,/usr/bin/less

运维用户授权 alex ALL=(ALL) NOPASSWD: ALL

jumpserver 跳板机-堡垒机

小结: sed 取行 替换 awk 取列 统计 chown 更改文件所有者 -R 递归修改目录下所有的文件的所有者 和用户相关的命令 sudo 授权 堡垒机