Linux系统中的shell
一.shell的介绍
1.什么是shell?
shell是linux的一外壳,它包在linux内核的外面,为用户和内核之间的交互提供了一个接口,当用户下达指令给操作系统的时候,实际上是把指令告诉shell,经过shell解释,处理后让内核做出相应的动作系统的回应和输出的信息也由shell处理,然后显示在用户的屏幕上。
2.什么是shell脚本?
简单的说,当命令或者程序不在命令行执行,而是通过一个程序文件来执行,这个程序就被称为shell脚本也就是在shell脚本里内置了多条命令,语句,循环控制,然后将这些命令一次性执行完毕,这种通过文件执行命令的方式称为非交互式。
3.为什么使用shell脚本?
适合处理操作系统底层的业务,有众多系统命令为其做支撑(还有文本处理三兄弟grep,sed,awk)适合处理纯文本文件,linux中许多服务配置文件,启动脚本,都是纯文本(httpd,nfs,mysql,nginx,lvs),linux系统脚本用shell开发更简单。
二.用shell脚本来全自动化的在虚拟加上安装系统
问题引入:当kickstart自动安装脚本存在,网络资源存在,dhcp存在,我们在安装虚拟机是仍然需要重复选择才能进入安装界面。如何去避免这些重复的操作,此时需要写一个脚本避免这些操作。
1.指定分区
添加一块大小为50个G的硬盘
fdisk /dev/sdb
将50个G分配给一个盘
mkfs.xfs /dev/sdb1
mount /dev/sdb1 /var/lib/libvirt/images
2.配置Apache服务器
配置Apache服务器的目的是为了网络共享 安装资源
具体操作如下:
dnf install httpd -y
systemctl enable --now httpd
mkdir /var/www/html/rhel8
mount /run/media/root/RHEL-8-0-0-BaseOS-x86_64 /var/www/html/rhel8 --bind
3.配置dhcp服务
dnf install dhcp-server -y
vim /etc/dhcp/djcpd.conf
4.kickstart自动化脚本的制作
cp anaconda-ks.cfg /var/www/html/ks.cfg
vim /var/www/html/ks.cfg
4.在虚拟机上的virtual machine manager·上安装系统
(1)首先安装虚拟化的三个插件
(2)配置桥接模式
vim /etc/sysconfig/network-scripts/ifcfg-br0
vim /etc/sysconfig/network-scripts/ifcfg-westos
nmcli connection reload
nmcli connection down westos
nmcli connection up westos
nmcli connection up br0
5.编写shell脚本
vim virt-install.sh
sh virt-install.sh 运行脚本
进入自动化安装界面,耐心等待。
三.shell中的一些基本语句
1.diff
diff file1 file2 比较两个文件
[num1,num2] 第一个文件中的行
a 添加 c 更改 d 删除 < 第一个文件中的内容 > 第二个文件中的内容
[num3,num4] 第二个文件中的行
常用参数:
2.patch
patch 源文件 补丁文件
-b 备份源文件
3.cut 用于抓取信息
cut
-b 显示字节
-d : 指定: 为分隔符
-f 指定显示的列 5 第五列 3,5第三和第五列 3-5 3到第5列 -5 第五列之前 5- 第五列之后
-c 指定截取的字符 (数字用法同 -f)
--complement 反选
--output-delimiter=分隔符 指定输出的分隔符
例题:
ifconfig ens160 | grep "inet " |cut -c 14-28
4.sort
-n 纯数字排序 -r 倒叙 -u 去掉重复 -o 输出指定文件 -t 指定分隔符 -k 指定排序的列
练习:(1)查找文件中最大的两个文件
5.uniq
练习:检测apache服务器被谁访问的次数最多,显示访问者ip并显示访问次数
cat /etc/httpd/logs/access_log | cut -d " " -f 1 | uniq -c | grep `cat /etc/httpd/logs/access_log | cut -d " " -f 1 | uniq -c | sort -nr | head -n 1`
6.test
test = [] [] 就相当于test命令
“test $a=$b” = [ $a=$b ]
测试题:当/使用量超过80%发送警告邮件到root用户的邮箱中
7.tr 大小写之间的转换
tr ‘a-z’ ‘A-Z’ | 小写转大写 |
---|---|
tr ‘A-Z’ ‘a-z’ | 大写转小写 |
课后练习题:
如果脚本后未指定检测文件报错“未指定检测文件,请指定”
如果脚本后指定文件不存在报错“此文件不存在”
当文件存在时请检测文件类型并显示到输出中