4、Vim编辑器与Shell命令脚本

4.1、Vim文本编辑器

Vim编辑器的三种模式及切换方法

  • 命令模式:控制光标移动,可对文本进行复制、粘贴、删除和查找等

  • 输入模式:正常文本录入

  • 保存或退出我能当,以及设置编译环境

  • 命令模式中常用的命令

   命令                作用             dd           删除(剪切)光标所在整行        5dd           删除(剪切)从光标处开始的5行      yy           复制光标所在的整行         5yy           复制从光标处开始的5行        n            显示搜索命令定位到的下一个字符      N              显示搜索命令定位到的上一个字符      u              撤销上一步的操作          P             将之前删除(dd)或复制(yy)过的数据粘贴到光标后面
  • 末行模式常用的命令
       命令                            作用          :w                      保存          :q                      退出          :q!                     强制退出(放弃对文档的修改内容)   :wq!                   强制保存退出        :set nu                   显示行号         :set nonu                  不显示行号        :命令                执行该命令        :整数                跳到该命令        :s/one/two                 将当前贯标所在行的第一个one替换成two:s/one/two/g               将当前贯标所在行的所有的one替换成two:%s/one/two/g              将全文中的所有的one替换成two  ?字符串                 在文本中从下至上所搜改字符串    /字符串              在文本中从上至下所搜改字符串

4.1.1、编写简单的文档

给文档取名字:linux.txt,如果存在则打开,否则创建


按a、i、o等键进入输入模式

输入之后按Esc退出

输入:wq!强制保存并退出,使用cat查看内容

在文件中追加语句,并强制退出不保存,使用cat查看

4.1.2、配置主机名称

在Linux系统中,主机名大多保存在/etc/hostname文件中

[root@chenstudy ~]# vim /etc/hostname
chen
# 重启虚拟机之后在进行查看
[root@chen ~]# hostname
chen
[root@chen ~]#

4.1.3、配置网卡信息

在 Linux 系统中, 一切都是文件,因此配置网络服务的工作其实就是在编辑网卡配置文件

在CentOS7中网卡配置文件的前缀为ifcfg开始

  • 第1步:首先切换到/etc/sysconfig/network-scripts 目录中(存放着网卡的配置文件)
  • 第2步: 编辑器修改网卡文件 ifcfg-en33,逐项写入下面的配置参数并 保存退出。
    • 我之前配置过了所以我的直接显示了IP地址
    • 学习Linux时建议大家配置静态IP,这样我们就可以用finalshell进行连接了
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=cc396254-ae13-43c7-aaec-23b8866d98a1
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.200.130
GATEWAY=192.168.200.2
DNS1=192.168.200.2
# 设备类型:TYPE=Ethernet
# 地址分配模式:BOOTPROTO=static
# 网卡名称:NAME=en33
# 是否启动:ONBOOT=yes
# IP 地址:IPADDR=192.168.200.130
# 网关地址:GATEWAY=192.168.200.2
# DNS 地址:DNS1=192.168.200.2

  • 第3步:重启网络服务并测试网络是否联通。由于在 Linux 系统中 ping 命令不会自动终止,因此需要手动按下 Ctrl-c 键来强行结束进程 。
[root@chen network-scripts]# systemctl restart network
[root@chen network-scripts]# ping 192.168.200.130
PING 192.168.200.130 (192.168.200.130) 56(84) bytes of data.
64 bytes from 192.168.200.130: icmp_seq=1 ttl=64 time=0.042 ms
64 bytes from 192.168.200.130: icmp_seq=2 ttl=64 time=0.072 ms
64 bytes from 192.168.200.130: icmp_seq=3 ttl=64 time=0.057 ms
64 bytes from 192.168.200.130: icmp_seq=4 ttl=64 time=0.074 ms
64 bytes from 192.168.200.130: icmp_seq=5 ttl=64 time=0.073 ms
^C
--- 192.168.200.130 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 3999ms
rtt min/avg/max/mdev = 0.042/0.063/0.074/0.015 ms
[root@chen network-scripts]#

4.1.4、配置Yum软件仓库

Yum 软件仓库的作用是为了进一步简化 RPM 管理软件的难度以及自动分析 所需软件包及其依赖关系的技术 ,要使用 Yum 软件仓库,就要先把它搭建起来,然后将其配置规则确定好才行

  • 第1步:进入到/etc/yum.repos.d/目录中(该目录存放着 Yum 软件仓库的配置文件)。
  • 第2步:使用 Vim 编辑器创建一个名为 rhel7.repo 的新配置文件(文件名称可随意,但后 缀必须为.repo),逐项写入下面加粗的配置参数并保存退出(不要写后面的中文注释)。
    • [rhel-media] :Yum 软件仓库唯一标识符,避免与其他仓库冲突。
    • name=linuxchen: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 软件仓库是否已经可用。
[root@chen network-scripts]# cd /etc/yum.repos.d/
[root@chen yum.repos.d]# vim centos7.repo
[root@chen yum.repos.d]# vim centos7.repo[centos7]
name=centos7
baseurl=file:///media/cdrom
enabled=1
gpgcheck=0

  • 创建挂载点后进行挂载操作,并设置成开机自动挂载 (第六章会讲解)尝试使用 Yum 软 件仓库来安装 Web 服务,出现 Complete!则代表配置正确 :
[root@chen yum.repos.d]# mkdir -p /media/cdrom
[root@chen yum.repos.d]# mount /dev/cdrom /media/cdrom
mount: /dev/sr0 写保护,将以只读方式挂载
[root@chen yum.repos.d]# vim /etc/fstab
[root@chen yum.repos.d]# vim /etc/fstab
[root@chen yum.repos.d]# yum install httpd
已安装:httpd.x86_64 0:2.4.6-97.el7.centos.5
作为依赖被安装:httpd-tools.x86_64 0:2.4.6-97.el7.centos.5                 mailcap.noarch 0:2.1.41-2.el7   完毕!

4.2、编写Shell脚本

可以将 Shell 终端解释器当作人与计算机硬件之间的“翻译官”,它作为用户与 Linux 系 统内部的通信媒介,除了能够支持各种变量与参数外,还提供了诸如循环、分支等高级编程 语言才有的控制结构特性。要想正确使用 Shell 中的这些功能特性,准确下达命令尤为重要。 Shell 脚本命令的工作方式有两种:交互式和批处理。

交互式(Interactive):用户每输入一条命令就立即执行。批处理(Batch):由用户事先编写好一个完整的 Shell 脚本,Shell 会一次性执行脚本 中诸多的命令。

在 Shell 脚本中不仅会用到前面学习过的很多 Linux 命令以及正则表达式、管道符、数据 流重定向等语法规则,还需要把内部功能模块化后通过逻辑语句进行处理,最终形成日常所 见的 Shell 脚本 。

4.2.1、编写简单的脚本

使用Vim 编辑器把 Linux 命令按照顺序依次写入到一个 文件中,这就是一个简单的脚本了

# 如果想查看当前所在工作路径并列出当前目录下所有的文件及属性信息,实现这个功能的脚本应该类似于下面这样
[root@chen ~]# vim chen.sh
#!/bin/bash
# For Ex BY chen
pwd
ls -al
[root@chen ~]# bash chen.sh
/root
总用量 120
dr-xr-x---. 17 root root 4096 4月  18 18:31 .
dr-xr-xr-x. 18 root root 4096 3月  25 03:11 ..
-rw-------.  1 root root 1476 4月  15 23:54 .bash_history
-rw-r--r--.  1 root root   18 12月 29 2013 .bash_logout
-rw-r--r--.  1 root root  176 12月 29 2013 .bash_profile
-rw-r--r--.  1 root root  176 12月 29 2013 .bashrc
drwx------. 13 root root 4096 3月  25 03:27 .cache
# 第二种运行脚本程序的方法是通过输入完整路径的方式来执行
# 但默认会因为权限不足而提示报错信息,此时只需要为脚本文件增加执行权限即可
[root@chen ~]# ./chen.sh
-bash: ./chen.sh: 权限不够
[root@chen ~]# chmod u+x chen.sh
[root@chen ~]# ./chen.sh
/root
总用量 120
dr-xr-x---. 17 root root 4096 4月  18 18:31 .
dr-xr-xr-x. 18 root root 4096 3月  25 03:11 ..
-rw-------.  1 root root 1476 4月  15 23:54 .bash_history
-rw-r--r--.  1 root root   18 12月 29 2013 .bash_logout
-rw-r--r--.  1 root root  176 12月 29 2013 .bash_profile
-rw-r--r--.  1 root root  176 12月 29 2013 .bashrc
drwx------. 13 root root 4096 3月  25 03:27 .cache

4.2.2、接收用户的参数

#Linux 系统中的 Shell 脚本语言 已经内设了用于接收参数的变量,变量之间可以使用空格间隔。
# 例如$0 对应的是当前 Shell 脚本程序的名称,
# $#对应的是总共 有几个参数,
# $*对应的是所有位置的参数值,
# #?对应的是显示上一次命令的执行返回值,而 $1、$2、$3……则分别对应着第 N 个位置的参数值
[root@chen ~]# vim chen.sh
#!/bin/bash
# For Ex BY chen
echo "当前脚本名称为$0"
echo "总共有$#个参数,分别是$*。"
echo "第 1 个参数为$1,第 5 个为$5。"
[root@chen ~]# sh chen.sh one two three four five six
当前脚本名称为chen.sh
总共有6个参数,分别是one two three four five six。
第 1 个参数为one,第 5 个为five。
[root@chen ~]#

4.2.3、判断用户的参数

系统在执行 mkdir 命令时会判断用户输入的信息,即判断用户 指定的文件夹名称是否已经存在,如果存在则提示报错;反之则自动创建。Shell 脚本中的条 件测试语法可以判断表达式是否成立,若条件成立则返回数字 0,否则便返回其他随机数值 。

# 测试语句表达式: [ 条件表达式 ]([]两边均应有一个空格)

条件测试语句可以分为 4 种:

  • 文件测试语句;
  • 逻辑测试语句;
  • 整数值比较语句;
  • 字符串比较语句。

文件测试所用的参数

  运算符         作用      -d         测试文件是否为目录类型 -e      测试文件是否存在   -f       判断是否为一般文件  -r       测试当前用户是否有权限读取-w         测试当前用户是否有权限写入-x         测试当前用户是否有权限执行
#使用文件测试语句来判断/etc/fstab 是否为一个目录类型的文件,然后通过 Shell 解释器的内设$?变量显示上一条命令执行后的返回值。如果返回值为 0,则目录存在;如果返回值为非零的值,则意味着目录不存在
[root@chen ~]# [ -d /etc/fstab ]
[root@chen ~]# echo $?
1
# 使用文件测试语句来判断/etc/fstab 是否为一般文件,如果返回值为 0,则代表文件存在,且为一般文件
[root@chen ~]# [ -f /etc/fstab ]
[root@chen ~]# echo $?
0
[root@chen ~]#
# 此可以用来判断/dev/cdrom 文件是否存在,若存在则输出 Exist 字样;逻辑“与”的运算符号是&&
[root@chen ~]# [ -e /dev/cdrom ] && echo "Exist"
Exist
[root@chen ~]# echo $USER
root
# 逻辑“或”,运算符号为||
[root@chen ~]# [ $USER = root ] || echo "user"
[root@chen ~]# su - chen
上一次登录:四 4月 14 23:07:57 CST 2022pts/2 上
[chen@chen ~]$ [ $USER = root ] || echo "user"
user
[chen@chen ~]$ exit
登出
# 逻辑“非”的运算符号叹号(!)
[root@chen ~]# [ ! $USER  = root ] || echo "Administrator"
Administrator
[root@chen ~]#
  • 可用的整数比较运算符
运算符 作用
-eq 是否等于
-ne 是否不等于
-gt 是否大于
-lt 是否小于
-le 是否等于或小于
-ge 是否大于或等于
[root@chen ~]# [ 10 -gt 10 ]
[root@chen ~]# echo $?
1
[root@chen ~]# [ 10 -eq 10 ]
[root@chen ~]# echo $?
0
[root@chen ~]#
  • 常见的字符串比较运算符
运算符 作用
= 比较字符串内容是否相同
!= 比较字符串内容是否不同
-z 判断字符串内容是否为空
# 通过判断 String 变量是否为空值,进而判断是否定义了这个变量
[root@chen ~]# [ -z $String ]
[root@chen ~]# echo $?
0
[root@chen ~]# [ -z $String "chen" ]
[root@chen ~]# echo $?
1
[root@chen ~]# echo $LANG
zh_CN.UTF-8
[root@chen ~]# [ $LANG != "en.US" ] && echo "Not en.US"
Not en.US
[root@chen ~]#

4.3、流程控制语句

使用Linux命令、管道符、重定向以及条件测试语句来编写最基本的shell脚本,但是不适合生产环境,接下来我们将学习if、for、while、case四种流程语句来学习编写更强大、功能更强的脚本。

4.3.1、if条件测试语句

  • if 条件测试语句可以让脚本根据实际情况自动执行相应的命令。从技术角度来讲,if 语 句分为单分支结构、双分支结构、多分支结构;
  • if 条件语句的单分支结构由 if、then、fi 关键词组成 相当于口语的“如果……那么……”
# 下面使用单分支的 if 条件语句来判断/chen/study 目录是否存在,若存在就结束条件判断和整个 Shell 脚本,反之则去创建这个目录
[root@chen ~]# vim mkstudy.sh#!/bin/bash
DIR="/chen/study"
if [ ! -e $DIR ]
then
mkdir -p $DIR
fi
# 执行脚本
[root@chen ~]# bash mkstudy.sh
[root@chen ~]# ls -d /chen/study
/chen/study

  • if 条件语句的双分支结构由 if、then、else、fi 关键词组成
# 使用双分支的 if 条件语句来验证某台主机是否在线,然后根据返回值的结果,要么 显示主机在线信息,要么显示主机不在线信息
[root@chen ~]# vim chkhost.sh#!/bin/bash
ping -c 3 -i 0.2 -W 3 $1 &> /dev/null
if [ $? -eq 0 ]
then
echo "Host $1 id On-line."
else
echo "Host $1 is Off-line."
fi
# 执行脚本
[root@chen ~]# vim chkhost.sh
[root@chen ~]# bash chkhost.sh 192.168.200.130
Host 192.168.200.130 id On-line.
[root@chen ~]# bash chkhost.sh 192.168.200.131
Host 192.168.200.131 is Off-line.
[root@chen ~]#

  • if 条件语句的多分支结构由 if、then、else、elif、fi 关键词组成相当于口语的“如 果……那么……如果……那么……”
[root@chen ~]# vim chkcore.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"
elif [ $GRADE -ge 0 ] && [ $GRADE -le 69 ] ; then
echo "$GRADE is Fail"
else
echo "Plase enter legal score"
fi
# 执行脚本
[root@chen ~]# vim chkcore.sh
[root@chen ~]# bash chkcore.sh
Enter your score (0-100):88
88 is Excellent
[root@chen ~]# bash chkcore.sh 200
Enter your score (0-100):200
Plase enter legal score

4.3.2、for条件循环语句

for 循环语句允许脚本一次性读取多个信息,然后逐一对信息进行操作处理,当要处理的数据 有范围时,使用 for 循环语句再适合不过了

# 使用 for 循环语句从列表文件中读取多个用户名,然后为其逐一创建用户账户并设置密码
# 1.首先创建用户名称的列表文件 users.txt,每个用户名称单独一行
[root@chen ~]# vim user.txt
chen
zj
ldz
wxy
# 2.接下来编写 Shell 脚本 chen.sh
# /dev/null 是一个被称作 Linux 黑洞的文件,把输出信息重定向到这个文件等同于删除数据(类似于没有回收功能的垃圾箱),可以让用户的屏幕窗口保持简洁
[root@chen ~]# vim chen.sh#!/bin/bash
# For Ex BY chen
read -p "Enter The Users Password : " PASSWD
for UNAME in `cat user.txt`
do id $UNAME &> /dev/nullif [ $? -eq 0 ]thenecho "$UNAME , Already exists"else useradd $UNAME &> /dev/nullecho "$PASSWD" | passwd --stdin $UNAME &> /dev/nullecho "$UNAME , Create success"fi
done
# 执行批量创建用户的 Shell 脚本 chen.sh,在输入为账户设定的密码后将由脚本自动检查并创建这些账户。
[root@chen ~]# vim user.txt
[root@chen ~]# vim chen.sh
[root@chen ~]# vim chen.sh
[root@chen ~]# bash chen.sh
Enter The Users Password : linux
chen , Already exists
zj , Create success
ldz , Create success
wxy , Create success
# 如果想确认这个脚本是否成功创建了用户账户,可以打开这个文件,看其中是否有这些新创建的用户信息
[root@chen ~]# tail -6 /etc/passwd
tcpdump:x:72:72::/:/sbin/nologin
chen:x:1000:1000:chen:/home/chen:/bin/bash
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
zj:x:1001:1001::/home/zj:/bin/bash
ldz:x:1002:1002::/home/ldz:/bin/bash
wxy:x:1003:1003::/home/wxy:/bin/bash
[root@chen ~]#

# 让脚本从文本中自动读取主机列表,然后自动逐个测试这些主机是否在线
[root@chen ~]# vim ipadds.txt192.168.200.130
192.168.200.131
192.168.200.132
# 双分支 if 条件语句与 for 循环语句相结合,让脚本从主机列表文件 ipadds.txt中自动读取 IP 地址(用来表示主机)并将其赋值给 HLIST 变量,从而通过判断 ping 命令执行后的返回值来逐个测试主机是否在线
[root@chen ~]# vim CheckHosts.sh#!/bin/bash
HLIST=$(cat ~/ipadds.txt)
for IP in $HLIST
doping -c 3 -i 0.2 -W 3 $IP &> /dev/nullif [ $? -eq 0 ]thenecho "Host $IP is On-line."elseecho "Host $IP is Off-line."fi
done
[root@chen ~]# ./CheckHosts.sh
-bash: ./CheckHosts.sh: 权限不够
[root@chen ~]# chmod u+x CheckHosts.sh
[root@chen ~]# ./CheckHosts.sh
Host 192.168.200.130 is On-line.
Host 192.168.200.131 is Off-line.
Host 192.168.200.132 is Off-line.
[root@chen ~]#

4.3.3、while条件循环语句

while 条件循环语句是一种让脚本根据某些条件来重复执行while 循环语句通过判断条件测试的真假来决定是否继续执行命令,若条件为真就继续执行, 为假就结束循环 命令的语句

# 接下来结合使用多分支的 if 条件测试语句与 while 条件循环语句,编写一个用来猜测数值大小的脚本 Guess.sh
[root@chen ~]# vim Guess.sh
[root@chen ~]# vim Guess.sh#!/bin/bash
PRICE=$(expr $RANDOM % 100)
TIMES=0
echo "商品的价格在0-99之间,猜猜看是多少?"
while true
doread -p "请输入你猜的价格数目:" INT
let TIMES++
if [ $INT -eq $PRICE ] ; thenecho "恭喜你答对了,商品的实际价格 $PRICE."echo "你共猜测了 $TIMES 次"exit 0elif [ $INT -gt $PRICE ] ; thenecho "太高了!" elseecho "太低了!" fi
done
# 执行脚本
[root@chen ~]# bash Guess.sh
商品的价格在0-99之间,猜猜看是多少?
请输入你猜的价格数目:90
太高了!
请输入你猜的价格数目:85
太高了!
请输入你猜的价格数目:60
太高了!
请输入你猜的价格数目:25
太低了!
请输入你猜的价格数目:45
太高了!
请输入你猜的价格数目:42
太高了!
请输入你猜的价格数目:39
太高了!
请输入你猜的价格数目:30
太低了!
请输入你猜的价格数目:36
太低了!
请输入你猜的价格数目:38
恭喜你答对了,商品的实际价格 38.
你共猜测了 10 次
[root@chen ~]#

4.3.4、case条件测试语句

case 语句是在多个范围内匹配 数据,若匹配成功则执行相关命令并结束整个条件测试;而如果数据不在所列出的范围内, 则会去执行星号(*)中所定义的默认命令

# 我们编写脚本 Checkkeys.sh,提示用户输入一个字符并将其赋值给变量 KEY, 然后根据变量 KEY 的值向用户显示其值是字母、数字还是其他字符
[root@chen ~]# vim CheckKeys.sh#!/bin/bash
read -p "请输入一个字符,并按Enter键确认:" KEY
case "$KEY" in[a-z]|[A-Z])echo "您输入的是 字母。";;[0-9])echo "您输入的是 数字。";;*)echo "您输入的是空格 、功能键或其他控制字符。"
esac
# 保存并执行程序
[root@chen ~]# vim CheckKeys.sh
[root@chen ~]# bash CheckKeys.sh
请输入一个字符,并按Enter键确认:Z
您输入的是 字母。
[root@chen ~]# bash CheckKeys.sh
请输入一个字符,并按Enter键确认:3
您输入的是 数字。
[root@chen ~]# bash CheckKeys.sh
请输入一个字符,并按Enter键确认:
您输入的是空格 、功能键或其他控制字符。
[root@chen ~]#

4.4、计划任务服务程序

  1. 计划任务服务程序就是可以使得 Linux 在无需人为介入的情况下,在指定的时间段自动 启用或停止某些服务或命令,从而实现运维的自动化
  2. 计划任务分为一次性计划任务与长期性计划任务,大家可以按照如下方式理解。
  3. 一次性计划任务:今晚 11 点 30 分开启网站服务。
  4. 长期性计划任务:每周一的凌晨 3 点 25 分把/home/wwwroot 目录打包备份为 backup.tar.gz
# “at 时间”:一次性计划任务
# “at -l”命令:查看已设置好但还未执行的一次性计划任务
# “atrm 任务序号”:删除任务
[root@chen ~]# at 23:20
at> systemctl restart network
at> 此处请同时按下 Ctrl + D 组合键来结束编写计划任务
job 2 at Wed Apr 20 23:20:00 2022
[root@chen ~]# at -l
2   Wed Apr 20 23:20:00 2022 a root
[root@chen ~]# atrm 2
[root@chen ~]# at -l
# at 命令接收前面 echo 命令的输出信息,以达到通过非交互式的方式创建计划一次性任务的目的
[root@chen ~]# echo "systemctl restart network" | at 23:30
job 3 at Wed Apr 20 23:30:00 2022
[root@chen ~]# at -l
3   Wed Apr 20 23:30:00 2022 a root
[root@chen ~]#
  1. 如果我们希望 Linux 系统能够周期性地、有规律地执行某些具体的任务,那么 Linux 系统 中默认启用的 crond 服务简直再适合不过了
  • crontab -e : 创建、编辑计划任务
  • crontab -l : 查看当前计划任务
  • crontab -r : 删除某条计划任务
  • crontab -u: 编辑他人的计划任务

在正式部署计划任务前,请先跟刘遄老师念一下口诀“分、时、日、月、星期 命令”需要注意的是,如果有些字段 没有设置,则需要使用星号(*)占位

  • 使用 crond 设置任务的参数字段说明
字段 说明
取值为0~59的整数
取值为0~23的任意整数
取值为1~31的任意整数
取值为1~12的任意整数
星期 取值为0-7的任意整数,其中0与7均为星期日
命令 要执行的命令或程序脚本
# 假设在每周一、三、五的凌晨 3 点 25 分,都需要使用 tar 命令把某个网站的数据目录进行打包处理,使其作为一个备份文件
# crontab -e 命令来创建计划任务
[root@chen ~]# crontab -e25 3 * * 1,3,5 /usr/bin/tar -czvf backup.tar.gz /home/wwwroot
[root@chen ~]# crontab -e
no crontab for root - using an empty one
crontab: installing new crontab
[root@chen ~]# crontab -l
25 3 * * 1,3,5 /usr/bin/tar -czvf backup.tar.gz /home/wwwroot
[root@chen ~]#

注意:需要说明的是,除了用逗号(,)来分别表示多个时间段,例如“8,9,12”表示 8 月、9 月 和 12 月。还可以用减号(-)来表示一段连续的时间周期(例如字段“日”的取值为“12-15”, 则表示每月的 12~15 日)。以及用除号(/)表示执行任务的间隔时间(例如“/2”表示每隔 2 分钟执行一次任务)之外

在 crond 服务中需要同时包含多条计划任务的命令语句,应每行仅写一条。

[root@chen ~]# whereis rm
rm: /usr/bin/rm /usr/share/man/man1/rm.1.gz /usr/share/man/man1p/rm.1p.gz
[root@chen ~]#
# 我们再 添加一条计划任务,它的功能是每周一至周五的凌晨 1 点钟自动清空/tmp 目录内的所有文件
[root@chen ~]# crontab -e
25 3 * * 1,3,5 /usr/bin/tar -czvf backup.tar.gz /home/wwwroot
0 1 * * 1-5 /usr/bin/rm -rf /tmp/*
[root@chen ~]# crontab -l
25 3 * * 1,3,5 /usr/bin/tar -czvf backup.tar.gz /home/wwwroot
0 1 * * 1-5 /usr/bin/rm -rf /tmp/*
[root@chen ~]#

注意事项:

  • 在 crond 服务的配置参数中,可以像 Shell 脚本那样以#号开头写上注释信息,这样 在日后回顾这段命令代码时可以快速了解其功能、需求以及编写人员等重要信息。
  • 计划任务中的“分”字段必须有数值,绝对不能为空或是*号,而“日”和“星期” 字段不能同时使用,否则就会发生冲突

小豪学Linux——vim文本编辑器与shell脚本相关推荐

  1. Linux ❉ Vim文本编辑器及其应用详解

    一 介绍 很多人习惯将 Vim 称为 Vi,其实 Vim 是 Vi 的增强版(在 Vi 的基础上增加了正则表达式的查找.多窗口的编辑等功能),使用 Vim 进行程序开发会更加方便. 1 Vi和Vim的 ...

  2. Linux Vim文本编辑器-Vim常用命令

    距离上次Linux的学习,今天又是一个崭新的起点,我们用五天的时间学了一些Linux一些常用的操作命令,但掌握这些还是远远不够的,这个世界就是这样,将生于此,既是幸运也是不幸,只有不断地学习才能有自己 ...

  3. linux vim文本编辑器

    一.工作模式 二.命令

  4. linux系统中vi/vim文本编辑器的使用简介

    linux系统中vi/vim文本编辑器的使用简介 1. vi/vim简介 ​ vi/vim 是linux系统中最基本的编辑器,类似于windows系统中的记事本,几乎所有的linux开发版本都内置了v ...

  5. Linux系统学习关于Vim文本编辑器的使用介绍

    Day04 cippus vim 文本编辑器 vi [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8jFPKIO1-1669517913499)(F:\桌面\src=h ...

  6. linux中vim文本编辑器的默认模式是,Linux 下 vi/vim 文本编辑器超详细使用指南

    Linux下的编辑器最经常使用的就是vim或者vi文本编辑.vi 和vim 编辑器的区别是vim是vi的改进版本,在vi 编辑器的基础上上扩展了不少实用的功能. 大多数的linux/unix 发行版本 ...

  7. Linux 下 vi/vim 文本编辑器超详细使用指南(转载)

    转载于 https://blog.csdn.net/kingmax54212008/article/details/54142633 Linux下的编辑器最常用的就是vim或者vi文本编辑.vi 和v ...

  8. Linux学习笔记(二)(Vim文本编辑器 权限管理(用户,用户组) 系统相关(磁盘,进程))

    Linux学习笔记(二) 5.账号管理 概述 一.用户账号管理 概述 1. 添加账号 :useradd(`useradd 选项 用户名`) 2. 删除帐号(`userdel 选项 用户名`) 3. 修 ...

  9. vim 文本编辑器_Vim Windows安装指南–如何在PC上的PowerShell中运行Vim文本编辑器

    vim 文本编辑器 Vim is a powerful code editor. So powerful that both Linux and Mac have it installed by de ...

最新文章

  1. Kubeedge Edged概述
  2. golang sleep函数 休眠延时
  3. python排序sorted_sorted排序的两个方法 - Python
  4. 解决IDEA Maven项目无法下载依赖
  5. 华为惨遭围剿;京东人工智能养猪;三星承认中国市场失败 | 极客头条
  6. 这个路由器漏洞已存在12年,可影响全球数百万台设备引发供应链攻击
  7. ASP.NET中的TextBox下划线
  8. python曲线拟合预测_python曲线拟合
  9. linux系统属于操作系统吗,linux属于什么操作系统
  10. java计算机毕业设计会议管理系统MyBatis+系统+LW文档+源码+调试部署
  11. 百度对网站就像西门庆对潘金莲
  12. 小游戏开发 小程序app游戏开发 H5小游戏开发
  13. java街边熟食店卤菜网上商城系统springboot+vue
  14. 图形界限命令在命令行输入_设置图形界限的命令为在命令行输入
  15. 使用BoundsChecker查找内存泄露
  16. 优化OpenSearch的搜索结果
  17. NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized“
  18. 软考信息系统监理师:2016年4月1日作业
  19. [翻译] TensorRT 中的 Explicit 与 Implicit Batch
  20. 从风险评估到应急救援,实景三维为抗震减灾提供精细化决策依据

热门文章

  1. Android实时模糊
  2. 支付宝支付,APP报错:“商家订单参数异常,请重新发起支付”(已解决)
  3. eyeurl—一款网页批量截图工具
  4. 输入git stash后如何恢复代码
  5. Spark实现WordCount的11种方式,你知道的有哪些?
  6. 学生机房管理服务器系统,学生机房管理助手
  7. 100行代码实现英语四六级高频单词的统计
  8. 虚拟试衣:GAN的落地应用挑战之一
  9. java字符串数组的常见用法
  10. 别人都知道的法线贴图流程,你竟然还不知道?真不知道你怎么学的