4.1 Vim文本编辑器
命令模式:控制光标移动,可对文本进行复制、粘贴、删除和查找等工作。
输入模式:正常的文本录入。
末行模式:保存或退出文档,以及设置编辑环境。
[root@myserver ~]# vim new.txt
[root@myserver ~]# cat new.txt
This is a test
Vim 有三种可视模式。
使用 Vim 编辑文本时,可视化模式对于识别要操作的文本块非常有用.Vim 的可视模式有三个模式:字符、行和块。进入每种模式的按键是:
字符模式: v (小写)
行模式: V (大写)
块模式: Ctrl+v
命令 用途
Esc 退回到普通模式
v 激活面向字符的可视模式
V 激活面向行的可视模式
Ctrl + v 激活面向列块的可视模式
gv 重选上次的高亮选区
o 切换到高亮选区的活动端
(1) 按下 v 键进入可视化字符模式。单词 VISUAL 将出现在屏幕底部。 使用箭头来高亮显示所需的文本。你可以使用其他导航命令,例如 w 高亮显示至下一个单词的开头, $ 来包含该行的其余部分。在文本高亮显示后,按下 d 删除文本。如果你删除得太多或不够,按下 u 撤销并重新开始。 将光标移动到新位置,然后按 p 粘贴文本。改你还可以高亮显示要替换的一段文本。
w选中部分单词,然后d,然后u撤销 效果如图:
(2) 将光标放在要操作的文本的第一行或最后一行的任何位置。按下 V 进入行模式。单词 VISUAL LINE 将出现在屏幕底部。使用导航命令(上下方向键)高亮显示多行文本。高亮显示所需文本后,使用命令来操作它。按下 d 删除,然后将光标移动到新位置,按下 p 粘贴文本,结果如下图
(3)按下 Ctrl+v 进入可视化块模式。单词 VISUAL BLOCK 将出现在屏幕底部。敲击键盘上下键将要注释的行先先高亮显示,再点击大I 再注释 再按esc键,效果如下图:
4.1.2 配置主机名称
第1步:使用Vim编辑器修改“/etc/hostname”主机名称文件。
第2步:把原始主机名称删除后追加“linuxprobe.com”。注意,使用Vim编辑器修改主机名称文件后,要在末行模式下执行:wq!命令才能保存并退出文档。
第3步:保存并退出文档,然后使用hostname命令检查是否修改成功
或者hostnamectl set-hostname linuxprobe
[root@myserver c]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.88 myserver
[root@myserver c]#
4.1.3 配置网卡信息
第1步:首先切换到/etc/sysconfig/network-scripts目录中(存放着网卡的配置文件)。
第2步:使用Vim编辑器修改网卡文件ifcfg-eno160,逐项写入下面的配置参数并保存退出。由于每台设备的硬件及架构是不一样的,因此请读者使用ifconfig命令自行确认各自网卡的默认名称
设备类型:TYPE=Ethernet
地址分配模式:BOOTPROTO=static
网卡名称:NAME=eno160
是否启动:ONBOOT=yes
IP地址:IPADDR=192.168.1.88
子网掩码:NETMASK=255.255.255.0
网关地址:GATEWAY=192.168.1.2
DNS地址:DNS1=114.114.114.114
第3步:重启网络服务并测试网络是否联通
[root@myserver c]# nmcli connection reload
[root@myserver c]# ping www.baidu.com
PING www.wshifen.com (103.235.46.39) 56(84) bytes of data.
64 bytes from 103.235.46.39 (103.235.46.39): icmp_seq=5 ttl=128 time=372 ms
64 bytes from 103.235.46.39 (103.235.46.39): icmp_seq=6 ttl=128 time=371 ms
64 bytes from 103.235.46.39 (103.235.46.39): icmp_seq=7 ttl=128 time=371 ms
^C
--- www.wshifen.com ping statistics ---
7 packets transmitted, 3 received, 57.1429% packet loss, time 128ms
rtt min/avg/max/mdev = 371.288/371.707/372.365/0.685 ms
[root@myserver c]#
4.1.4 配置Yum仓库
第1步:进入到/etc/yum.repos.d/目录中(因为该目录存放着Yum软件仓库的配置文件)。
第2步:使用Vim编辑器创建一个名为rhel7.repo的新配置文件(文件名称可随意,但后缀必须为.repo),逐项写入下面加粗的配置参数并保存退出(不要写后面的中文注释)
第3步:按配置参数的路径挂载光盘,并把光盘挂载信息写入到/etc/fstab文件中。
第4步:使用“yum install httpd -y”命令检查Yum软件仓库是否已经可用。
配置本地yum源
[root@myserver c]# cat /etc/yum.repos.d/redhat.repo
#
# Certificate-Based Repositories
# Managed by (rhsm) subscription-manager
#
# *** This file is auto-generated. Changes made here will be over-written. ***
# *** Use "subscription-manager repo-override --help" if you wish to make changes. ***
#
# If this file is empty and this system is subscribed consider
# a "yum repolist" to refresh available repos
#
[localREPO]
name=localhost8
baseurl=file:///media/BaseOS
enable=1
gpgcheck=0
[localREPO_APP]
name=localhost8_app
baseurl=file:///media/AppStream
enable=1
gpgcheck=0
[root@myserver c]#
测试yum源的有效性
[root@myserver c]# yum install -y httpd
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
Extra Packages for Enterprise Linux Modular 8 - x86_64 1.4 kB/s | 9.1 kB 00:06
Extra Packages for Enterprise Linux 8 - x86_64 4.3 kB/s | 7.6 kB 00:01
localhost8 2.7 MB/s | 2.7 kB 00:00
localhost8_app 3.1 MB/s | 3.2 kB 00:00
Dependencies resolved.
============================================================================================================================================================
Package Arch Version Repository Size
============================================================================================================================================================
Installing:
httpd x86_64 2.4.37-10.module+el8+2764+7127e69e localREPO_APP 1.4 M
Installing dependencies:
redhat-logos-httpd noarch 80.7-1.el8 localREPO 25 k
apr x86_64 1.6.3-9.el8 localREPO_APP 125 k
apr-util x86_64 1.6.1-6.el8 localREPO_APP 105 k
httpd-filesystem noarch 2.4.37-10.module+el8+2764+7127e69e localREPO_APP 34 k
httpd-tools x86_64 2.4.37-10.module+el8+2764+7127e69e localREPO_APP 101 k
mod_http2 x86_64 1.11.3-1.module+el8+2443+605475b7 localREPO_APP 156 k
Installing weak dependencies:
apr-util-bdb x86_64 1.6.1-6.el8 localREPO_APP 25 k
apr-util-openssl x86_64 1.6.1-6.el8 localREPO_APP 27 k
Enabling module streams:
httpd 2.4
Transaction Summary
============================================================================================================================================================
Install 9 Packages
Total size: 2.0 M
Installed size: 5.4 M
Downloading Packages:
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Installing : apr-1.6.3-9.el8.x86_64 1/9
Running scriptlet: apr-1.6.3-9.el8.x86_64 1/9
Installing : apr-util-bdb-1.6.1-6.el8.x86_64 2/9
Installing : apr-util-openssl-1.6.1-6.el8.x86_64 3/9
Installing : apr-util-1.6.1-6.el8.x86_64 4/9
Running scriptlet: apr-util-1.6.1-6.el8.x86_64 4/9
Installing : httpd-tools-2.4.37-10.module+el8+2764+7127e69e.x86_64 5/9
Running scriptlet: httpd-filesystem-2.4.37-10.module+el8+2764+7127e69e.noarch 6/9
Installing : httpd-filesystem-2.4.37-10.module+el8+2764+7127e69e.noarch 6/9
Installing : redhat-logos-httpd-80.7-1.el8.noarch 7/9
Installing : mod_http2-1.11.3-1.module+el8+2443+605475b7.x86_64 8/9
Installing : httpd-2.4.37-10.module+el8+2764+7127e69e.x86_64 9/9
Running scriptlet: httpd-2.4.37-10.module+el8+2764+7127e69e.x86_64 9/9
Verifying : redhat-logos-httpd-80.7-1.el8.noarch 1/9
Verifying : apr-1.6.3-9.el8.x86_64 2/9
Verifying : apr-util-1.6.1-6.el8.x86_64 3/9
Verifying : apr-util-bdb-1.6.1-6.el8.x86_64 4/9
Verifying : apr-util-openssl-1.6.1-6.el8.x86_64 5/9
Verifying : httpd-2.4.37-10.module+el8+2764+7127e69e.x86_64 6/9
Verifying : httpd-filesystem-2.4.37-10.module+el8+2764+7127e69e.noarch 7/9
Verifying : httpd-tools-2.4.37-10.module+el8+2764+7127e69e.x86_64 8/9
Verifying : mod_http2-1.11.3-1.module+el8+2443+605475b7.x86_64 9/9
Installed products updated.
Installed:
httpd-2.4.37-10.module+el8+2764+7127e69e.x86_64 apr-util-bdb-1.6.1-6.el8.x86_64
apr-util-openssl-1.6.1-6.el8.x86_64 redhat-logos-httpd-80.7-1.el8.noarch
apr-1.6.3-9.el8.x86_64 apr-util-1.6.1-6.el8.x86_64
httpd-filesystem-2.4.37-10.module+el8+2764+7127e69e.noarch httpd-tools-2.4.37-10.module+el8+2764+7127e69e.x86_64
mod_http2-1.11.3-1.module+el8+2443+605475b7.x86_64
Complete!
[root@myserver c]#
4.2 Shell脚本
交互式(Interactive):用户每输入一条命令就立即执行。
批处理(Batch):由用户事先编写好一个完整的Shell脚本,Shell会一次性执行脚本中诸多的命令
如果想查看当前htop信息利用命令执行如下(htop利用epel-release源安装)
接收用户的参数
[root@myserver c]# cat example.sh
#!/bin/bash
#output message
echo "当前脚本名称为$0"
echo "总共有$#个参数,分别是$*。"
echo "第1个参数为$1,第5个为$5。"
[root@myserver c]# sh example.sh 1 2 3 4 5
当前脚本名称为example.sh
总共有5个参数,分别是1 2 3 4 5。
第1个参数为1,第5个为5。
[root@myserver c]#
判断用户的参数
[root@myserver c]# [ -d /etc/fstab ]
[root@myserver c]# echo $?
1
[root@myserver c]# [ -f /etc/fstab ]
[root@myserver c]# echo $?
0
[root@myserver c]# [ -e /dev/cdrom ] && echo "Exist"
Exist
[root@myserver c]# [ $USER = docker ] || echo "user"
user
[root@myserver c]#
整数比较运算符仅是对数字的操作,不能将数字与字符串、文件等内容一起操作,而且不能想当然地使用日常生活中的等号、大于号、小于号等来判断。因为等号与赋值命令符冲突,大于号和小于号分别与输出重定向命令符和输入重定向命令符冲突。因此一定要使用规范的整数比较运算符来进行操作
[root@myserver c]# free -m
total used free shared buff/cache available
Mem: 1966 1095 223 8 646 683
Swap: 2095 261 1834
[root@myserver c]# free -m | grep Mem:
Mem: 1966 1095 223 8 646 683
[root@myserver c]# free -m | grep Mem: | awk '{print $4}'
223
[root@myserver c]# FreeMem=`free -m | grep Mem: | awk '{print $4}'`
[root@myserver c]# echo $FreeMem
223
[root@myserver c]# [ $FreeMem -lt 1024 ] && echo "Insufficient Memory"
Insufficient Memory
[root@myserver c]#
4.3 流程控制语句
if条件测试语句
if条件测试语句可以让脚本根据实际情况自动执行相应的命令。从技术角度来讲,if语句分为单分支结构、双分支结构、多分支结构;其复杂度随着灵活度一起逐级上升。
if条件语句的单分支结构由if、then、fi关键词组成,而且只在条件成立后才执行预设的命令,相当于口语的“如果……那么……”。单分支的if语句属于最简单的一种条件判断结构,语法格式如图4-17所示。
脚本主要使用ping命令来测试与对方主机的网络联通性,需要通过-c参数来规定尝试的次数,并使用-i参数定义每个数据包的发送间隔,以及使用-W参数定义等待超时时间
在Linux系统中,read是用来读取用户输入信息的命令,能够把接收到的用户输入信息赋值给后面的指定变量,-p参数用于向用户显示一定的提示信息。在下面的脚本示例中,只有当用户输入的分数大于等于85分且小于等于100分,才输出Excellent字样;若分数不满足该条件(即匹配不成功),则继续判断分数是否大于等于70分且小于等于84分,如果是,则输出Pass字样;若两次都落空(即两次的匹配操作都失败了),则输出Fail字样
[root@myserver ~]# cat chkscore.sh
#!/bin/bash
read -p "Enter your score(0-100):" 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"
fi
[root@myserver ~]# sh chkscore.sh
Enter your score(0-100):80
80 is Pass
[root@myserver ~]# sh chkscore.sh
Enter your score(0-100):60
60 is Fail
[root@myserver ~]# sh chkscore.sh
Enter your score(0-100):70
70 is Pass
[root@myserver ~]#