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.[[email protected] ~]# 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
- [[email protected] ~]# 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
- [[email protected] ~]# 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 是一个变量 (输出文件的最后一列)
- [[email protected] ~]# cat 1.txt
- .NET 10.0.0.200/24
- qqq aaa ccc bbb
- aaa ccc
- 111 222 3333
- 666
- [[email protected] ~]# awk '{print NF}' 1.txt
- 2
- 4
- 2
- 3
- 1
- [[email protected] ~]# awk '{print $NF}' 1.txt
- 10.0.0.200/24
- bbb
- ccc
- 3333
- 666
- [[email protected] ~]# cat 1.txt
- .NET 10.0.0.200/24
- qqq aaa ccc bbb
- aaa ccc
- 111 222 3333
- 666
- [[email protected] ~]# awk '{print NF-2}' 1.txt
- 0
- 2
- 0
- 1
- -1
- [[email protected] ~]# awk '{print $(NF-2)}' 1.txt
- .NET 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
修改文件的所有者
- [[email protected] ~]# chown oldboy.oldboy 1.txt
- [[email protected] ~]# ll
- total 16
- -rw-r--r-- 1 oldboy oldboy 60 Aug 15 10:47 1.txt
面试题坑:
- [[email protected] ~]# useradd -u 1500 -g1500 oldboy1
- useradd: group '1500' does not exist
首先创建组
- [[email protected] ~]# groupadd -g 1500 test
- [[email protected] ~]# useradd -u 1500 -g1500 oldboy1
- [[email protected] ~]# 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
- [[email protected] ~]$ ls /root/
- ls: cannot open directory /root/: Permission denied
使用 sudo 大宝剑执行命令
- [[email protected] ~]$ 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 授权
堡垒机
来源: http://www.bubuko.com/infodetail-3156882.html