SHELL(06)

30 篇文章 0 订阅
6 篇文章 0 订阅

SHELL(05)

案例

基础

uptime                            #查看CPU负载
ifconfig eth0                    #查看网卡流量
free                            #查看内存信息
df                                #查看磁盘空间
wc -l /etc/passwd                #查看计算机账户数量
who |wc -l                        #查看登录账户数量
rpm -qa |wc -l                    #查看已安装软件包数量
expect

expect 可以实现shell实现不了的用户交互需求 .

expect 可以写在脚本上 ,自动化完成 ssh ftp等需要交互任务

需要安装包 yum -y install expect

[ spawn ] 调用要执行的可交互命令, 启动新的进程

[ expect ] 从进程接收字符串

[ send ] 用于向进程发送字符串

[ interact ] 允许用户交互

[ exp_continue ] 在expect中多次匹配

[ exit ] 推出expect脚本

[ eof ] expect执行结束 , 推出

[ set ] 设置变量 , 例如 : set time 30

EOF

[ << EOF ] 开头 [ EOF ] 结尾 中间内容表示一个整体输出

常用于 交互式输出

结尾的 [ EOF ]要从行头开始

ssh远程登陆脚本
#!/bin/bash

passwd='123456'

/usr/bin/expect << EOF

set time 30
spawn shh root@192.168.88.240 df -Th

expect{
	"*yes/no" { send "yes\r"; exp_continue }
	"*password;" { send "$passwd\r" }
}
expect eof
EOF
远程安装其他主机httpd软件
#!/bin/bash

	expect << EOF
	spawn ssh 192.168.88.240
	expect "*yes/no" { send "yes\r" }
	expect "password" { send "123456789\r" }
	expect "#" { send "yum -y install httpd\r" }
	expect "#" { send "exit" }
EOF

1. 系统初始化

需求分析

  • 公司某项目中有N台服务器 ,刚安装了Linux系统 , 其中包含 7, 8版本

  • 编写初始化系统脚本 , 可自动适应 7 , 8 版本实现相关需求

需要配置
防火墙服务 和 SELinux

确认用户信息 , 所有服务器永久关闭防火墙服务和SELinux

***确认用户信息***

[ $UID -ne 0 ] && echo "NOT root" && exit
***永久关闭防火墙***

systemctl stop firewalld
systemctl disable firewalld
***永久关闭SELinux***

setenforce 0
sed -i '/^SELINUX/s/enforcing/disabled' /etc/selinux/config
命令历史记录数量与时间戳

判断版本
关闭7版本喜用的命令历史记录
修改8版本的命令历史记录最多保存2000条并加上时间戳

***判断版本***
egrep -q "\s+8\.[0-9]" /etc/redhat-release                    #判断系统版本

if [ $? -ne 0 ];then

***修改/ect/profile 中的 histsize=0 , 记录历史命令数量为0***

sed -ri 's/HISTSIZE=[0-9]+/HISTSIZE=0/' /etc/profile

else

***命令历史记录最多保存2000条并加上时间戳***

sed -ri	'/^HISTSIZE/s/[0-9]+/2000/' /etc/profile
sed -i '/^export /i HISTTIMEFORMAT="%F %T "' /etc/profile    #历史命令时间戳 ,在 export打头的上面添加 HIS..MAT , %F是time , %T是date
sed -i '/^export /s/$/ HISTTIMEFORMAT/' /etc/profile  #export的尾巴'$'替换为新添加的环境变量 HISTTIMEFORMAT ,可以在子进程中也显示时间戳
关闭交换分区

关闭8版本的交换分区

***找到交换分区 , 循环关闭交换分区 , 关闭开机自启动***

swap=$(swapon | awk 'NR!=1{print $1}')
for i in $swap
do
	swapoff $i
done
sed -i '/swap/s/^/#/' /etc/fstab

fi

ssh保持时间

定义root远程登陆系统后的ssh保持时间为 300秒

***定义ssh超时退出时间***

echo "export TMOUT=300"  >> ~/.bash_profile            #定义ssh超时退出时间
设置时间同步

设置时间同步 , ntp服务器地址是192.168.88.240

***设置时间同步客户端 , 服务器是192.168.88.240***

2. 文档处理

[ < ]

< 符号,输入重定向,可以在后面需要跟文件名,这样让程序不再从键盘读取数据,而是从文件中读取数据.

mail -s test root  <  /opt/mail.txt
[ << ]

<< 符号也称Here Document,代表你需要的内容在这里,某指令导入字符串时使用,而无需文件

    mail -s test root << EOF
    hello
    test mail~
    EOF
[ read ]

使用read指令配合输入重定向可同时定义多个变量

    read  a b    
    abc xyz                    #同时为变量a赋值abc,变量b赋值xyz 
    read  a b  <  abc.txt        #利用abc.txt文档内容赋值,仅读取第一行

结合while循环批量读取数据并通过read命令给变量赋值

    while read a b 
    do
        echo  $a  $b
    done < abc.txt            #利用abc.txt文档内容赋值,读取所有行
创建随机数字
tr -cd '_a-zA-Z0-9' < /dev/urandom | head -c 10    
	#-c是取反 -d是删除,对_a-zA-Z0-9取反删除,剩下就只是_a-zA-Z0-9这个范围内的字符串,head -c 10 可以得到10位字符
[ column ]

[ column -t 文件 ] # 用默认分隔符tab来整齐输出文件

[ column -x 文件 ] # 更改默认的排列顺序. 默认顺序是 上->下 , 修改为 左->右

[ column -s “文字符” -t ] # 指定 “文字符” 为 “-t” 的分隔符

[ column -c 字符数 ] # 指定显示宽度

引用其他文件中的函数

引用 user 文件中的 abc函数

. user        #引出 user 文件内容
abc 
read
read -n 3 c    #-n 3是输入足够3个字符就自动进行下一步,c是存储字符的变量
  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值