唉!写博客不保存真是坏习惯
接续第4章部分内容
配置主机名称
--主机名大多保存在/etc/hostname文件中
--步骤:
--第1步:使用Vim编辑器修改“/etc/hostname”主机名称文件
--第2步:把原始主机名称删除后追加“linuxprobe.com”。注意,使用Vim编辑器修改主机名称文件后,要在末行模式下执行:wq!命令才能保存并退出文档
--第3步:保存并退出文档,然后使用hostname命令检查是否修改成功
hostname命令
--作用是查看当前的主机名称,但有时主机名称的改变不会立即同步到系统中,所以如果发现修改完成后还显示原来的主机名称,可重启虚拟机后再行查看
[root@linuxprobe ~]# hostname
linuxprobe.com
=============================================我·是·分·割·线=============================================
配置网卡信息
--网卡配置文件存放于/etc/sysconfig/network-scripts目录中
--步骤:
--第1步:首先切换到/etc/sysconfig/network-scripts目录中
--第2步:使用Vim编辑器修改网卡文件ifcfg-eno16777736,逐项写入下面的配置参数并保存退出。由于每台设备的硬件及架构是不一样的,因此请读者使用ifconfig命令自行确认各自网卡的默认名称
设备类型: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
--第3步:重启网络服务并测试网络是否联通
进入到网卡配置文件所在的目录,然后编辑网卡配置文件,在其中填入下面的信息:
[root@linuxprobe ~]# cd /etc/sysconfig/network-scripts/
[root@linuxprobe network-scripts]# vim ifcfg-eno16777736
TYPE=Ethernet
BOOTPROTO=static
NAME=eno16777736
ONBOOT=yes
IPADDR=192.168.10.10
NETMASK=255.255.255.0
GATEWAY=192.168.10.1
DNS1=192.168.10.1
执行重启网卡设备的命令(在正常情况下不会有提示信息),然后通过ping命令测试网络能否联通。由于在Linux系统中ping命令不会自动终止,因此需要手动按下Ctrl-c键来强行结束进程
[root@linuxprobe network-scripts]# systemctl restart network
[root@linuxprobe network-scripts]# ping 192.168.10.10
PING 192.168.10.10 (192.168.10.10) 56(84) bytes of data.
64 bytes from 192.168.10.10: icmp_seq=1 ttl=64 time=0.081 ms
64 bytes from 192.168.10.10: icmp_seq=2 ttl=64 time=0.083 ms
64 bytes from 192.168.10.10: icmp_seq=3 ttl=64 time=0.059 ms
64 bytes from 192.168.10.10: icmp_seq=4 ttl=64 time=0.097 ms
^C
--- 192.168.10.10 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 2999ms
rtt min/avg/max/mdev = 0.059/0.080/0.097/0.013 ms
=============================================我·是·分·割·线=============================================
配置Yum仓库
--Yum软件仓库的配置文件存放于/etc/yum.repos.d/目录中
--第1步:进入到/etc/yum.repos.d/目录中
--第2步:使用Vim编辑器创建一个名为rhel7.repo的新配置文件(文件名称可随意,但后缀必须为.repo),逐项写入下面加粗的配置参数并保存退出(不要写后面的中文注释)
[rhel-media] :Yum软件仓库唯一标识符,避免与其他仓库冲突
name=linuxprobe:Yum软件仓库的名称描述,易于识别仓库用处
baseurl=file:///media/cdrom:提供的方式包括FTP(ftp://..)、HTTP(http://..)、本地(file:///..)
enabled=1:设置此源是否可用;1为可用,0为禁用
gpgcheck=1:设置此源是否校验文件;1为校验,0为不校验
gpgkey=file:///media/cdrom/RPM-GPG-KEY-redhat-release:若上面参数开启校验,那么请指定公钥文件地址
--第3步:按配置参数的路径挂载光盘,并把光盘挂载信息写入到/etc/fstab文件中
--第4步:使用“yum install httpd -y”命令检查Yum软件仓库是否已经可用
进入/etc/yum.repos.d目录中后创建Yum配置文件:
[root@linuxprobe ~]# cd /etc/yum.repos.d/
[root@linuxprobe yum.repos.d]# vim rhel7.repo
[rhel7]
name=rhel7
baseurl=file:///media/cdrom
enabled=1
gpgcheck=0
创建挂载点后进行挂载操作,并设置成开机自动挂载(详见第6章)。尝试使用Yum软件仓库来安装Web服务,出现Complete!则代表配置正确:
[root@linuxprobe yum.repos.d]# mkdir -p /media/cdrom
[root@linuxprobe yum.repos.d]# mount /dev/cdrom /media/cdrom
mount: /dev/sr0 is write-protected, mounting read-only
[root@linuxprobe yum.repos.d]# vim /etc/fstab
/dev/cdrom /media/cdrom iso9660 defaults 0 0
[root@linuxprobe ~]# yum install httpd
Loaded plugins: langpacks, product-id, subscription-manager
………………省略部分输出信息………………
Dependencies Resolved
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
httpd x86_64 2.4.6-17.el7 rhel 1.2 M
Installing for dependencies:
apr x86_64 1.4.8-3.el7 rhel 103 k
apr-util x86_64 1.5.2-6.el7 rhel 92 k
httpd-tools x86_64 2.4.6-17.el7 rhel 77 k
mailcap noarch 2.1.41-2.el7 rhel 31 k
Transaction Summary
================================================================================
Install 1 Package (+4 Dependent packages)
Total download size: 1.5 M
Installed size: 4.3 M
Is this ok [y/d/N]: y
Downloading packages:
--------------------------------------------------------------------------------
………………省略部分输出信息………………
Complete!
注意:
--最精简Yum配置文件
[ ]
name=
baseurl=
enabled=
gpgcheck=
=============================================我·是·分·割·线=============================================
编写Shell脚本
Shell脚本命令工作方式有两种:
--交互式(Interactive):用户每输入一条命令就立即执行
--批处理(Batch):由用户事先编写好一个完整的Shell脚本,Shell会一次性执行脚本中诸多的命令
--e.g
脚本声明 #!/bin/bash
脚本注释 #任意说明字符
脚本命令 ls pwd
[root@linuxprobe ~]# vim example.sh
#!/bin/bash #第一行的脚本声明(#!)用来告诉系统使用哪种Shell解释器来执行该脚本
#For Example BY linuxprobe.com #第二行的注释信息(#)是对脚本功能和某些命令的介绍信息,使得自己或他 人在日后看到这个脚本内容时,
可以快速知道该脚本的作用或一些警告信息
pwd #第三、四行的可执行语句也就是我们平时执行的Linux命令了
ls -al
注意:
--Shell脚本文件的名称可以任意,但为了避免被误认为是普通文件,建议将 .sh 后缀加上,以表示一个脚本文件
--第一种执行脚本的方式是用bash解释器命令直接运行Shell脚本文件
--第二种执行脚本的方式是通过输入完整路径的方式来执行脚本文件
接收用户的参数
--Linux系统中的Shell脚本语言,已经内设了用于接收参数的变量,变量之间使用空格间隔
[root@linuxprobe ~]# vim example.sh
#!/bin/bash
echo "当前脚本名称为$0"
echo "总共有$#个参数,分别是$*。"
echo "第1个参数为$1,第5个为$5。"
[root@linuxprobe ~]# sh example.sh one two three four five six
当前脚本名称为example.sh
总共有6个参数,分别是one two three four five six。
第1个参数为one,第5个为five。
判断用户参数
--测试语句格式:[ 条件表达式 ](两边均应有空格)
--条件测试语句分为4种:
文件测试语句
逻辑测试语句
整数值比较语句
字符串比较语句
文件测试所有参数
-d 测试文件是否为目录类型
-e 测试文件是否存在
-f 判断是否为一般文件(正确返回值为0;错误返回值为1; Unix的返回值可能是 2 或 -1)
-r 测试当前用户是否有权限读取
-w 测试当前用户是否有权限写入
-x 测试当前用户是否有权限执行
$?变量
--输出上一条命令返回值
[root@linuxprobe ~]# [ -d /etc/fstab ]
[root@linuxprobe ~]# echo $?
1
&&符号
--作用是逻辑“与”的运算符号
--表示前面的命令成立,则执行后面的命令
[root@linuxprobe ~]# [ -e /dev/cdrom ] && echo "Exist"
Exist
||符号
--作用是逻辑“或”的运算符号
--表示前面命令失败后,才执行后面的命令
[root@linuxprobe ~]# echo $USER
root
[root@linuxprobe ~]# [ $USER = root ] || echo "user"
[root@linuxprobe ~]# su - linuxprobe
[linuxprobe@linuxprobe ~]$ [ $USER = root ] || echo "user"
user
!符号
--作用是逻辑“非”的运算符号
--表示把条件测试中的判断结果取反值
[root@linuxprobe root]# [ !$USER = root ] || echo "administrator"
administrator
整数值比较运算符
操作符 日常生活中的 作用
-eq = 是否等于
-ne ≠ 是否不等于
-gt > 是否大于
-lt < 是否小于
-le ≤ 是否等于或小于
-ge ≥ 是否大于或等于
注意:
--由于生活中用的比较符与Linux中的赋值符,输入输出重定向符冲突,因此使用特定操作符来解决这一问题
接下来小试牛刀。我们先测试一下10是否大于10以及10是否等于10(通过输出的返回值内容来判断):
[root@linuxprobe ~]# [ 10 -gt 10 ]
[root@linuxprobe ~]# echo $?
1
[root@linuxprobe ~]# [ 10 -eq 10 ]
[root@linuxprobe ~]# echo $?
0
free命令
--它可以用来获取当前系统正在使用及可用的内存量信息。接下来先使用free -m命令查看内存使用量情况(单位为MB),然后通过grep Mem:命令过滤出剩余内存量的行,再用awk '{print $4}'命令只保留第四列,最后用FreeMem=`语句`的方式把语句内执行的结果赋值给变量
[root@linuxprobe ~]# free -m
total used free shared buffers cached
Mem: 1826 1244 582 9 1 413
-/+ buffers/cache: 830 996
Swap: 2047 0 2047
[root@linuxprobe ~]# free -m | grep Mem:
Mem: 1826 1244 582 9
[root@linuxprobe ~]# free -m | grep Mem: | awk '{print $4}'
582
[root@linuxprobe ~]# FreeMem=`free -m | grep Mem: | awk '{print $4}'`
[root@linuxprobe ~]# echo $FreeMem
582
--e.g ( 这条命令可用于服务器维护)
[ `free -m | grep Mem: | awk '{print $4}'` -lt 1024 ] && echo "Insufficient Memory" || echo "Adequate Memory"
--e.g (发送邮件)
[ `free -m | grep Mem: | awk '{print $4}'` -lt 1024 ] && echo "xxx内容xxx" -s "xxx主题xxx" | mail root@linuxprobe.com
常见的字符串比较运算符
= 比较字符串内容是否相同
!= 比较字符串内容是否不同
-z 判断字符串内容是否为空
接下来通过判断String变量是否为空值,进而判断是否定义了这个变量:
[root@linuxprobe ~]# [ -z $String ]
[root@linuxprobe ~]# echo $?
0
注意:
--使用变量前,先进行判断是否被使用
=============================================我·是·分·割·线=============================================
流程控制语句
--分为4种:if, for, while, case
if 条件测试语句
--分为三种结构:单分支结构,双分支结构,多分支结构
--单分支结构
--e.g
[root@linuxprobe ~]# vim mkcdrom.sh
#!/bin/bash
DIR="/media/cdrom"
if [ ! -e $DIR ]
then
mkdir -p $DIR
fi
--双分支结构
[root@linuxprobe ~]# vim chkhost.sh
#!/bin/bash
ping -c 3 -i 0.2 -W 3 $1 &> /dev/null /dev/null 黑洞回收文件
-c 定义尝试的次数
-i 定义每个数据包间隔时间
-W 定义等待超时时间
if [ $? -eq 0 ]
then
echo "Host $1 is On-line."
else
echo "Host $1 is Off-line."
fi
注意:
-- /dev/null是一个被称作Linux黑洞的文件,把输出信息重定向到这个文件等同于删除数据(类似于没有回收功能的垃圾箱),可以让用户的屏幕窗口保持简洁
--多分支结构
read命令
--用来读取用户输入信息的命令,能够把接收的用户输入信息赋值给后面的指定变量
-- -p 参数用于向用户显示一定提示信息
[root@linuxprobe ~]# vim chkscore.sh
#!/bin/bash
read -p "Enter your score(0-100):" GRADE 读取用户输入的值赋给GRADE变量
if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ] ; then 合并时用 ; 间隔
echo "$GRADE is Excellent"
elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ] ; then
echo "$GRADE is Pass"
else
echo "$GRADE is Fail" 只要不满足,全部Fail兜底
fi
[root@linuxprobe ~]# bash chkscore.sh
Enter your score(0-100):88
88 is Excellent
[root@linuxprobe ~]# bash chkscore.sh
Enter your score(0-100):80
80 is Pass
......省略部分内容......
for条件循环语句
[root@linuxprobe ~]# vim Example.sh
#!/bin/bash
read -p "Enter The Users Password : " PASSWD
for UNAME in `cat users.txt` (将文件user.txt中的内容逐一赋值给变量UNAME)
do
id $UNAME &> /dev/null(黑洞文件)
if [ $? -eq 0 ](0表示成功,非0表示不成功)
then
echo "Already exists"
else
useradd $UNAME &> /dev/null(新建用户)
echo "$PASSWD" | passwd --stdin $UNAME &> /dev/null(重置密码)
if [ $? -eq 0 ]
then
echo "$UNAME , Create success"
else
echo "$UNAME , Create failure"
fi(结束第一个if)
fi(结束第二个if)
done(结束for语句)
--/etc/passwd 是用来保存用户账户信息的文件
以上是今天学习内容,比较难,需要多加练习
复习:第4章
预习:第4章,第5章
来源:oschina
链接:https://my.oschina.net/190211/blog/3169439