前言
身为一个三年的运维工程师,从开发转测开再转运维,都是不断学习的过程,未必开发才是最优秀的,找到适合自己的职业不断深耕,你也会在自己的行业大放光彩,本系列依照《Linux就该这么学》系列随书学习练习操作,将一些课本上不顺畅的地方,全部以最简方式免费开源展示给大家,资源大家可以自行百度,也希望大家多关注刘遄老师的第二版关于centos8的丛书,学习最前沿的Linux相关技术。
常用命令汇总
Vim 文本编辑器
三种模式不再介绍了,用过Linux的都应该掌握了,这里带一下,命令模式、末行模式和编辑模式,切换关系图如下
Vim 常用命令
末行模式可用命令
配置主机名称
[root@linux ~]# vim /etc/hostname
linux
[root@linux ~]# hostname
linux
配置网卡信息
[root@linux ~]# cd /etc/sysconfig/network-scripts
查看目录下的网卡配置文件
静态如下:
设备类型:TYPE=Ethernet
地址分配模式:BOOTPROTO=static
网卡名称:NAME=eno16777736
是否启动:ONBOOT=yes
IP 地址:IPADDR=192.168.10.10
子网掩码:NETMASK=255.255.255.0
网关地址:GATEWAY=192.168.10.1
DNS 地址:DNS1=192.168.10.1
动态如下:
[root@linux ~]#
systemctl restart network
配置Yum 软件仓库
修改配置文件
[root@linux ~]# cd /etc/yum.repos.d/
[root@linux yum.repos.d]# vim rhel7.repo
[rhel7]
name=rhel7
baseurl=file:///media/cdrom
enabled=1
gpgcheck=0
创建挂载点
[root@linux yum.repos.d]# mkdir -p /media/cdrom
[root@linux yum.repos.d]# mount /dev/cdrom /media/cdrom
mount: /dev/sr0 is write-protected, mounting read-only
[root@linux yum.repos.d]# vim /etc/fstab
/dev/cdrom /media/cdrom iso9660 defaults 0 0
安装Web 服务测试
[root@linux ~]# yum install httpd
......
Complete!
编写Shell 脚本
单程脚本测试
[root@linux ~]# vim test.sh
#!/bin/bash
#For test BY linux
pwd
ls -al
[root@linux ~]# bash test.sh
也可以用./执行脚本,若权限不够可以通过chmod +x example.sh 加权
交互脚本测试
[root@linux ~]# vim example.sh
#!/bin/bash
echo "当前脚本名称为$0"
echo "总共有
#个参数,分别是#个参数,分别是
#个参数,分别是
*。"
echo "第1 个参数为
,第个为1,第5个为
1,第5 个为
5。"
[root@linux ~]# sh example.sh one two three four five six
条件测试语句
文件测试参数
[root@linux ~]# [ -d /etc/fstab ]
[root@linux ~]# echo $?
返回值为0,则目录存在;返回值为非零的值,则目录不存在,我们升级成一个语句
[root@linux ~]# [ -e /etc/fstab ] && echo "存在"
逻辑关系对应
|| 表示当前面的命令执行失败后才会执行它后面的命令
&& 表示不管当前面的命令执行结果如何,后边的命令必定会执行
!它表示把条件测试中的判断结果取相反值
[root@linux ~]# [ ! $USER = root ] && echo "user" || echo "root"
运算关系对应
示例
[root@linux ~]# free -m
total used free shared buffers cached
Mem: 1826 1244 582 9 1 413
-/+ buffers/cache: 830 996
Swap: 2047 0 2047
[root@linux ~]# free -m | grep Mem:
Mem: 1826 1244 582 9
[root@linux ~]# free -m | grep Mem: | awk '{print $4}'
582
[root@linux ~]# FreeMem=`free -m | grep Mem: | awk '{print $4}'`
[root@linux ~]# echo $FreeMem
582
使用整数运算符来判断内存可用量的值是否小于1024,若小于则会提示“Insufficient Memory”(内存不足)的字样
[root@linux ~]# [ $FreeMem -lt 1024 ] && echo "Insufficient Memory"
Insufficient Memory
比较关系对应
[root@linux ~]# [ -z $String]
[root@linux ~]# echo $?
0
[root@linux ~]# echo $LANG
en_US.UTF-8
[root@linux ~]# [ $LANG != "en.US" ] && echo "Not en.US"
Not en.US
流程控制语句
if语句
--单分支--
[root@localhost ~]# cat iftest.sh
#! /bin/bash
DIR="/test/iftest"
if [ ! -e $DIR ]
then
mkdir -p $DIR
fi
[root@localhost ~]# ls -d /test/iftest/
/test/iftest/
--双分支--
[root@localhost ~]# cat ifdoubletest.sh
#! /bin/bash
# 通过-c 参数来规定尝试的次数
# 通过-i 参数定义每个数据包的发送间隔
# 通过-W 参数定义等待超时时间
# 通过&> /dev/null 指向为空值
ping -c 3 -i 0.2 -w 3 $1 &> /dev/null
if [ $? -eq 0 ]
then
echo "网络联通"
else
echo "网络不通"
fi
[root@localhost ~]# bash ifdoubletest.sh 192.168.1.1
网络不通
[root@localhost ~]# bash ifdoubletest.sh 10.6.6.97
网络联通
--多分支--
[root@localhost ~]# cat ifmuilttest.sh
#! /bin/bash
# 通过
read -p设置可输入模式
read -p "请输入分数(0-100):" score
if [
score -ge 85 ] && [score -ge 85 ] && [
score -ge 85 ] && [
score -le 100 ];then
echo "成绩优秀"
elif [
score -ge 70 ] && [score -ge 70 ] && [
score -ge 70 ] && [
score -le 84 ];then
echo "成绩良好"
elif [
score -ge 60 ] && [score -ge 60 ] && [
score -ge 60 ] && [
score -le 69 ];then
echo "成绩可以"
elif [
score -ge 0 ] && [score -ge 0 ] && [
score -ge 0 ] && [
score -le 59 ];then
echo "成绩差劲"
else
echo "输入有误,请重新输入"
fi
for语句
--for循环--
用户批量设置密码
[root@localhost ~]# cat ifmuilttest.sh
#! /bin/bash
# read -p 输入
# for in 定义一个变量
# $? -eq 0 判断是否执行成功
# &> /dev/null 指向黑洞文件
# `` 反引号执行shell命令
read -p "请输入创建用户的新密码:" PASSWD
for uname in `cat ifmuiltusertest.txt`
do
id $uname &> /dev/null
if [ $? -eq 0 ]
then
echo "已存在"
else
useradd $uname &> /dev/null
echo "
PASSWD"|passwd−−stdin
PASSWD" | passwd --stdin
uname &> /dev/null
if [ $? -eq 0 ]
then
echo "$uname,创建成功"
else
echo "$uname,创建失败"
fi
fi
done
--双分支if+for循环结合--
[root@localhost learnlinux]# cat CheckHosts.sh
#! /bin/bash
# 通过定义变量代替反引号shell执行
TEST=$(cat ~/learnlinux/ipadds.txt)
for ip in $TEST
do
ping -c 3 -i 0.2 -W 3 $ip &> /dev/null
if [ $? -eq 0 ] ; then
echo "Host $IP is On-line."
else
echo "Host $IP is Off-line."
fi
done
while语句
--多分支if+while循环语句--
[root@localhost learnlinux]# cat whiletest.sh
#! /bin/bash
# $RANDOM 随机数(范围为0~32767)
# expr % 1000 随机数对1000取余
# while ture 循环到真后才停止
# let int++ 赋值
# exit 0 over the game
price=
(expr
(expr
RANDOM % 1000)
TIMES=0
echo "商品实际价格为0-999 之间,猜猜看是多少?"
while true
do
read -p "请输入您猜测的价格数目:" INT
let TIMES++
if [
INT−eq
INT -eq
price ] ; then
echo "恭喜您答对了,实际价格是 $price"
echo "您总共猜测了 $TIMES 次"
exit 0
elif [
INT−gt
INT -gt
price ] ; then
echo "太高了!"
else
echo "太低了!"
fi
done
case语句
--case语句多范围--
[root@localhost learnlinux]# cat Checkkeys.sh
#! /bin/bash
# case in 多个范围匹配数据,匹配成功后执行相关命令结束
# 空格
read -p "请输入一个字符,并按Enter 键确认:" KEY
case "$KEY" in
[a-z] | [A-Z])
echo "您输入的是字母。"
;;
[0-9])
echo "您输入的是数字。"
;;
*)
echo "您输入的是空格、功能键或其他控制字符。"
esac
计划执行服务
at命令
一次性计划任务
[root@linux ~]# at 23:30
at > systemctl restart httpd
at > 此处请同时按下Ctrl + D 组合键来结束编写计划任务
job 3 at Mon Apr 27 23:30:00 2017
[root@linux ~]# at -l
3 Mon Apr 27 23:30:00 2017 a root
永久执行计划任务
[root@linux ~]# echo "systemctl restart httpd" | at 23:30
job 4 at Mon Apr 27 23:30:00 2017
[root@linux ~]# at -l
3 Mon Apr 27 23:30:00 2017 a root
4 Mon Apr 27 23:30:00 2017 a root
删除计划任务
[root@linuxe ~]# atrm 3
[root@linux ~]# at -l
4 Mon Apr 27 23:30:00 2017 a root
crontab命令
创建、编辑计划任务的命令为“crontab -e”
查看当前计划任务的命令为“crontab -l”
删除某条计划任务的命令为“crontab -r”
以管理员的身份参数来编辑他人的计划任务crontab 命令中加上-u
记住命令口诀:“分、时、日、月、星 ,末尾挂命令”
所有命令一定要用绝对路径的方式来写
逗号(,)来分别表示多个时间段“8,9,12”表示8 月、9 月和12 月
减号(-)来表示一段连续的时间周期“日”的取值为“12-15”表示每月的12~15 日
除号(/)表示执行任务的间隔时间“/2”表示每隔2 分钟执行一次任务
** * * *五个星星分别代表五个时间段,不用的时间段用*表示,不能省略
定期备份与删除
[root@linux ~]# whereis rm
rm: /usr/bin/rm /usr/share/man/man1/rm.1.gz /usr/share/man/man1p/rm.1p.gz
[root@linux ~]# crontab -e
crontab: installing new crontab
[root@linux ~]# crontab -l
#在每周一三五的凌晨三点二十五对home目录进行打包
25 3 * * 1,3,5 /usr/bin/tar -czvf backup.tar.gz /home
#在周一到周五每天凌晨一点对tmp目录进行清理
0 1 * * 1-5 /usr/bin/rm -rf /tmp/*
结语
简问简答
分别解释Shell 脚本中与0与0 与3 变量的作用。
答:在Shell 脚本中,代表脚本文件的名称,0代表脚本文件的名称,0 代表脚本文件的名称,3 则代表该脚本在执行时接收的第三
个参数
if 条件测试语句有几种结构,最灵活且最复杂的是哪种结构?
答:if 条件测试语句包括单分支、双分支与多分支等三种结构,其中多分支结构是最灵活
且最复杂的结构,其结构形式为if…then…elif…then…else…fi
for 条件循环语句的循环结构是什么样子的?
答:for 条件循环语句的结构为“for 变量名 in 取值列表 do 命令序列 done”
在while 条件循环语句中使用true 作为循环条件,那么会发生什么事情?
答:因条件测试值永久为true,因此脚本中循环部分会无限地重复执行下去,直到碰到exit命令才会结束
需要依据用户的输入参数执行不同的操作,最方便的条件测试语句是什么?
答:case 条件语句
Linux 系统的长期计划任务所使用的服务是什么,其参数格式是什么?
答:长期计划任务需要使用crond 服务程序,参数格式是“分、时、日、月、星期命令”