sed awk 用户管理
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sed awk 用户管理相关的知识,希望对你有一定的参考价值。
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 oldboy1..10|xargs -n1|sed -r ‘s#(.)#userdel -r \1#g‘|bash
echo oldboy1..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 oldboy1..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 oldboy1..10|xargs -n1|awk ‘print "useradd " $1‘
2.[root@oldboy ~]# echo oldboy1..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
0
2
0
1
-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 授权
堡垒机
以上是关于sed awk 用户管理的主要内容,如果未能解决你的问题,请参考以下文章