网易首页 > 网易号 > 正文 申请入驻

shell脚本专题:生产常用shell用例

0
分享至

专题背景

最近使用了个自动化平台(详见自动化运维平台Spug测试)进行每周的变更,效果很不错,平台将大量重复繁琐的操作通过脚本分发方式标准化自动化了,平台核心是下发到各个服务器的shell脚本,感觉有必要对shell脚本做个总结,所以有了写本专题的想法。本专题将结合运维实际介绍shell脚本的各项用法,预计10篇左右,将包括系统巡检、监控、ftp上传下载、数据库查询、日志清理、时钟同步、定时任务等,里面会涉及shell常用语法、注意事项、调试排错等。

本文前言

文章主要介绍最近在日常生产运维中使用到的一些shell语句,主要有替换、删除、查找指定行和指定字符、文件传输、列与列互换等。

shell用例

1.禁止root直接登录

需求:为保证安全,生产上禁止root账号直接登录

修改前:

[root@ansible /etc/ssh]# ll|grep sshd_config
-rw-------. 1 root root 3907 4月 11 2018 sshd_config
[root@ansible /etc/ssh]# more /etc/ssh/sshd_config|grep PermitRootLogin
#PermitRootLogin yes
# the setting of "PermitRootLogin without-password".

修改前目录/etc/ssh下只有一个sshd_config文件且配置PermitRootLogin为注释状态

修改后:

[root@ansible /etc/ssh]# sed -i.bak 's/#PermitRootLogin yes/PermitRootLogin no/g' /etc/ssh/sshd_config
[root@ansible /etc/ssh]# more /etc/ssh/sshd_config|grep PermitRootLogin
PermitRootLogin no
# the setting of "PermitRootLogin without-password".
[root@ansible /etc/ssh]# ll|grep sshd_config
-rw------- 1 root root 3905 1月 22 15:26 sshd_config
-rw-------. 1 root root 3907 4月 11 2018 sshd_config.bak

修改后目录/etc/ssh多了个备份文件且PermitRootLogin参数解注释且为no状态

2.更新sudoer列表

需求:某些账号需要root权限

修改前:

[root@ansible /etc]# cd
[root@ansible ~]# cd /etc
[root@ansible /etc]# ll|grep sudoers
-r--r-----. 1 root root 4328 10月 30 2018 sudoers
drwxr-x---. 2 root root 6 10月 31 2018 sudoers.d
[root@ansible /etc]# more sudoers|grep 'ALL=(ALL)'
root ALL=(ALL) ALL
%wheel ALL=(ALL) ALL
# %wheel ALL=(ALL) NOPASSWD: ALL

修改前/etc下只有sudoers文件且除了root无其他账号有root权限

修改后:

[root@ansible /etc]# sed -i.bak "/root.*ALL=(ALL).*ALL/a\app ALL=(ALL) ALL" /etc/sudoers
[root@ansible /etc]# ll|grep sudoers
-r--r----- 1 root root 4355 1月 22 16:05 sudoers
-r--r----- 1 root root 4328 1月 22 15:53 sudoers.bak
drwxr-x---. 2 root root 6 10月 31 2018 sudoers.d
[root@ansible /etc]# more sudoers|grep 'ALL=(ALL)'
root ALL=(ALL) ALL
app ALL=(ALL) ALL
%wheel ALL=(ALL) ALL
# %wheel ALL=(ALL) NOPASSWD: ALL

修改后/etc多了个备份文件sudoers.bak且root下的一行多了app账号的信息,使app拥有root权限

3.scp复制多个目录或文件

需求:复制多个本地文件到远端或将远端多个文件复制到本地

本地复制到远程目录:

[root@ansible ~]# touch a.txt b.txt c.txt
[root@ansible ~]# mkdir d
[root@ansible ~]# scp -v -r a.txt b.txt c.txt d root@172.16.7.157:/tmp

本地新建文件a.txt b.txt c.txt和目录d,复制到远程主机的/tmp目录

远程目录复制到本地:

[root@157 ~]# touch 01.sh 02.sh 03.sh
[root@157 ~]# mkdir 04

[root@ansible ~]# scp -v -r root@172.16.7.157:/root/\{01.sh,02.sh,03.sh,04\} /tmp

在157上新建文件01.sh 02.sh 03.sh和目录04,复制到本地的/tmp目

4.删除已存在的定时任务

需求:删除指定的定时任务

[root@ansible /var/spool/cron]# crontab -l
0 0 * * * /usr/sbin/ntpdate -u ntpserver >> /tmp/ntp.log
[root@ansible /var/spool/cron]# sed -i.bak '/\/usr\/sbin\/ntpdate/d' /var/spool/cron/root

注意,匹配/usr/sbin/ntpdate时"/"需要转义

5.行内列与列互换

需求:将/etc/hosts文件中ip和主机名互换,ansible中主机列表格式为主机名+ip

修改前:

[root@ansible ~]# cd /etc
[root@ansible /etc]# cp hosts hosts-ansible.txt
[root@ansible /etc]# more hosts-ansible.txt
10.17.6.137 loong576-file01
10.17.6.129 loong576-kxxl01
10.17.6.130 loong576-kxxl02
10.17.6.131 loong576-capp01
10.17.6.132 loong576-capp02
10.17.6.128 loong576-pbgw01
10.17.6.127 loong576-pbgw02
10.17.6.134 loong576-xucs01
10.17.6.133 loong576-xucs02
10.17.6.136 loong576-webc01
10.17.6.135 loong576-webc02
10.17.6.14 loong576-gwxx-1
10.17.6.15 loong576-gwxx-2
10.17.6.18 loong576-mysql1
10.17.6.17 loong576-mysql2

修改后:

[root@ansible /etc]# awk '{print $2,$1 > "hosts-ansible.txt"}' hosts-ansible.txt
[root@ansible /etc]# more hosts-ansible.txt
loong576-file01 10.17.6.137
loong576-kxxl01 10.17.6.129
loong576-kxxl02 10.17.6.130
loong576-capp01 10.17.6.131
loong576-capp02 10.17.6.132
loong576-pbgw01 10.17.6.128
loong576-pbgw02 10.17.6.127
loong576-xucs01 10.17.6.134
loong576-xucs02 10.17.6.133
loong576-webc01 10.17.6.136
loong576-webc02 10.17.6.135
loong576-gwxx-1 10.17.6.14
loong576-gwxx-2 10.17.6.15
loong576-mysql1 10.17.6.18
loong576-mysql2 10.17.6.17

这个脚本可以很方便的实现ip和主机名的位置互换

6.指定行新增

需求:在ip地址10.17.6前同时新增参数‘ansible_ssh_host=’

[root@ansible /etc]# sed -i 's/10.17.6/ansible_ssh_host=&/' hosts-ansible.txt

通过5和6可以很方便的将/etc/hosts的ip+主机名格式转换为主机名+ansible_ssh_host=+ip的格式,满足ansible对主机名的格式要求

7.find、xargs、rm删除找到的文件

需求:使用find查找满足条件的文件并删除

[root@ansible /]# find ./ -name *[0-9]\*.bak
./home/a001.bak
./opt/04.txt.bak
./opt/03.bak
./tmp/09.bak
./tmp/10.txt.bak
./usr/05.bak
./usr/06.txt.bak
./var/07.bak
./var/08.txt.bak
./root/02.txt.bak
./root/01.bak
[root@ansible /]# find ./ -name *[0-9]\*.bak|xargs rm -rf
[root@ansible /]# find ./ -name *[0-9]\*.bak

查找以数字开头以.bak结尾的所有文件,然后删除

8.sed、find、grep删除/替换文件中的指定字符

需求:查找所有文件中包含'loong576'的字符串并替换或者删除

修改前:

[root@ansible-awx os-check]# find .|xargs grep -rl 'loong576'
./defaults/main.yaml
./files/check_linux.sh
./tasks/main.yaml
./defaults/main.yaml
./defaults/main.yaml
./files/check_linux.sh
./files/check_linux.sh
./tasks/main.yaml
./tasks/main.yaml
[root@ansible-awx os-check]# find .|xargs grep -ri 'loong576'
./defaults/main.yaml:# Created by loong576 2020.05
./files/check_linux.sh:# Created by loong576 2020.05
./tasks/main.yaml:# Created by loong576 2020.05
./defaults/main.yaml:# Created by loong576 2020.05
./defaults/main.yaml:# Created by loong576 2020.05
./files/check_linux.sh:# Created by loong576 2020.05
./files/check_linux.sh:# Created by loong576 2020.05
./tasks/main.yaml:# Created by loong576 2020.05
./tasks/main.yaml:# Created by loong576 2020.05

查找包含loong576字样的文件列表并指出该文件包含的具体字符

修改后:将‘Created by loong576 2020.05’的注释更改为‘Created by loong576 2021.01’

[root@ansible-awx os-check]# sed -i "s/2020.05/2021.01/g" `find .|xargs grep -rl 'loong576'`
[root@ansible-awx os-check]# find .|xargs grep -ri 'loong576'
./defaults/main.yaml:# Created by loong576 2021.01
./files/check_linux.sh:# Created by loong576 2021.01
./tasks/main.yaml:# Created by loong576 2021.01
./defaults/main.yaml:# Created by loong576 2021.01
./defaults/main.yaml:# Created by loong576 2021.01
./files/check_linux.sh:# Created by loong576 2021.01
./files/check_linux.sh:# Created by loong576 2021.01
./tasks/main.yaml:# Created by loong576 2021.01
./tasks/main.yaml:# Created by loong576 2021.01

删除时间:

[root@ansible-awx os-check]# sed -i "s/2021.01//g" `find .|xargs grep -rl 'loong576'`
[root@ansible-awx os-check]# find .|xargs grep -ri 'loong576'
./defaults/main.yaml:# Created by loong576
./files/check_linux.sh:# Created by loong576
./tasks/main.yaml:# Created by loong576
./defaults/main.yaml:# Created by loong576
./defaults/main.yaml:# Created by loong576
./files/check_linux.sh:# Created by loong576
./files/check_linux.sh:# Created by loong576
./tasks/main.yaml:# Created by loong576
./tasks/main.yaml:# Created by loong576

9.指定字符最前面、上一行添加字符,最后一行新增一行

需求:在配置ntp服务器时需要在配置文件/etc/ntp.conf指定字符上一行新增行、注释某些默认配置(指定字符前加#)、配置文件/etc/hosts最后新增行

指定字符上一行新增行:

[root@ansible ~]# sed -i '/driftfile/i server ntpserver iburst' /etc/ntp.conf

在指定行driftfile上一行新增‘server ntpserver iburst’

注释某些默认配置(指定字符前加#):

[root@ansible ~]# sed -i '/centos.pool.ntp.org/s/^/#/' /etc/ntp.conf

注释‘server [0..3].centos.pool.ntp.org iburst’

更改前:

更改后:

在最后一行新增:

[root@ansible ~]# sed -i '$a 172.16.7.157 ntpserver' /etc/hosts

本文总结

本文主要介绍了常用的一些shell用例,涉及日常的查找、替换、文件传输等,使用到的命令主要有find、sed、xargs、scp等。shell脚本就是将各个命令按不能使用目的有逻辑的的组合在一起,掌握好了这些命令会对后面的脚本编写起到事半功倍的效果。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
行拘!郑州京广隧道的案子破了!

行拘!郑州京广隧道的案子破了!

河南交通广播1041
2024-03-28 12:32:08
明史学家王崇武与靖难之役的考证

明史学家王崇武与靖难之役的考证

天气观察站
2024-03-28 16:42:32
遭恐袭不到72小时,多名俄罗斯高层已到北京,为普京访华铺路?

遭恐袭不到72小时,多名俄罗斯高层已到北京,为普京访华铺路?

齐文刀
2024-03-27 23:18:32
热度来了!上海4000万新房被抢光,南京二手房卖爆,苏州地价刷新

热度来了!上海4000万新房被抢光,南京二手房卖爆,苏州地价刷新

农村阿祖
2024-03-29 03:14:17
完美身材天使容颜总是呈现在最后

完美身材天使容颜总是呈现在最后

娱乐圈酸柠檬
2024-03-14 13:26:23
「日本第一牛郎」罗兰整头爆改!变「筋肉赛亚人」真面目

「日本第一牛郎」罗兰整头爆改!变「筋肉赛亚人」真面目

小日子万象
2024-03-26 16:54:29
“低空经济+飞行汽车”市场达10万亿?五家龙头有望上涨170%!

“低空经济+飞行汽车”市场达10万亿?五家龙头有望上涨170%!

小叶聊股
2024-03-28 16:09:31
“清明劫”提前上演!今日凌晨的四大消息全面来袭

“清明劫”提前上演!今日凌晨的四大消息全面来袭

逆潮流财商
2024-03-29 00:55:03
速报:一名中国观光客在日本被警方逮捕!

速报:一名中国观光客在日本被警方逮捕!

小日子万象
2024-03-27 13:32:30
失去中国市场后,大量水果烂地里卖不出去,现在后悔得罪中国了?

失去中国市场后,大量水果烂地里卖不出去,现在后悔得罪中国了?

绝对军评
2024-03-04 00:05:03
暗黑女神及川奈央转型上岸,影响力不减反增?揭秘她的成功之路!

暗黑女神及川奈央转型上岸,影响力不减反增?揭秘她的成功之路!

零点娱评
2024-03-28 16:03:41
哪一刻让你觉得贫穷限制了你的想象力?网友的分享让人大开眼界!

哪一刻让你觉得贫穷限制了你的想象力?网友的分享让人大开眼界!

沫姐美食记
2024-03-25 15:46:10
普京:俄公民在阅读时间方面排名世界第二,排名第一是中国

普京:俄公民在阅读时间方面排名世界第二,排名第一是中国

环球网资讯
2024-03-28 14:19:14
辽宁大胜四川!杨鸣帅气+朱荣振握手,张镇麟+2将狂笑,继伟淡定

辽宁大胜四川!杨鸣帅气+朱荣振握手,张镇麟+2将狂笑,继伟淡定

小鬼头体育
2024-03-29 03:26:48
为何蒙古国不治沙?美国专家认为:植树治沙弊大于利,是真是假?

为何蒙古国不治沙?美国专家认为:植树治沙弊大于利,是真是假?

睿鉴历史
2024-03-27 20:25:06
世茂集团2023年收入594.64亿元,股东应占核心业务亏损145.08亿元 #房企财报 #房地产企业

世茂集团2023年收入594.64亿元,股东应占核心业务亏损145.08亿元 #房企财报 #房地产企业

每日经济新闻
2024-03-28 22:55:12
喜欢吃“性器官”的她,开始割自己的器官。

喜欢吃“性器官”的她,开始割自己的器官。

花生了树
2024-03-16 11:18:29
两性生活时,女生更喜欢3个“坏动作”,男生别只会“亲亲抱抱”

两性生活时,女生更喜欢3个“坏动作”,男生别只会“亲亲抱抱”

户外阿崭
2024-03-28 14:16:01
迅雷撤回了发给员工的小米汽车“优惠券”,“给大哥添乱了”

迅雷撤回了发给员工的小米汽车“优惠券”,“给大哥添乱了”

首席合规观察
2024-03-27 14:04:33
好奇:董宇辉做外场直播赚钱吗?答案:不多,平均每天也就100万

好奇:董宇辉做外场直播赚钱吗?答案:不多,平均每天也就100万

杂谈哥闲谈
2024-03-28 17:38:12
2024-03-29 04:44:49
互联网干货博主
互联网干货博主
我是专注分享互联网干货的博主
278文章数 1339关注度
往期回顾 全部

科技要闻

李斌李想何小鹏喊你买小米汽车

头条要闻

小米汽车7分钟大定破2万 网友:这价格真可以杀穿同行

头条要闻

小米汽车7分钟大定破2万 网友:这价格真可以杀穿同行

体育要闻

邮报:加入争夺战,曼联也想要奥尔莫

娱乐要闻

莱昂纳多与25岁新女友互相投喂超恩爱

财经要闻

中国版QE要来?国内外机构观点罕见一致

汽车要闻

混动增程双模式 长安UNI-Z售11.79万起

态度原创

本地
时尚
亲子
手机
公开课

本地新闻

专访|张伟潮:最年轻的龙头专职制造者

2024的流行色,一定离不开安可拉红

亲子要闻

网友:小孩姐让我坐一会儿吧

手机要闻

4299元,努比亚Z60 Ultra摄影师版开售丨超凡AI,大师影像

公开课

30岁之前,你要学会的13件事情

无障碍浏览 进入关怀版