Linux学习第五天

落爺英雄遲暮 提交于 2020-02-27 04:07:13

唉!写博客不保存真是坏习惯

接续第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章

 

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!