Vim编辑器与Shell命令脚本

news2025/2/25 12:20:16

 前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 

目录

一、Vim文本编辑器

二、编写Shell脚本

三、流程控制语句

四、计划任务服务程序

致谢


一、Vim文本编辑器

在Linux系统中一切都是文件,而配置一个服务就是在修改其配置文件的参数

Vim编辑器设置了三种模式——命令模式末行模式编辑模式

  • 命令模式:控制光标移动,可对文本进行复制、粘贴、删除和查找等工作
  • 输入模式:正常的文本录入
  • 末行模式保存或退出文档,以及设置编辑环境

命令模式中最常用的一些命令

命令作用
dd删除(剪切)光标所在整行
5dd删除(剪切)光标处开始的5行
yy复制光标所在整行
5yy复制光标出开始的5行
n显示搜索命令定位到的下一个字符串
N显示搜索命令定位到的上一个字符串
u撤销上一步的操作
p将之前删除(dd)或复制(yy)过的数据粘贴到光标后面

末行模式主要用于保存或退出文件,以及设置Vim编辑器的工作环境,还可以让用户执行外部的Linux命令或跳转到所编写文档的特定行数

命令作用
:w保存
:q退出
:q!强制退出(放弃对文档的修改内容)
:wq!强制保存退出
:set nu显示行号
:set noun不显示行号
:命令执行该命令
:整数跳转到该行
:s/one/two将当前光标所在行的第一个one替换成two
:s/one/two/g将当前光标所在行的所有one替换成two
:%s/one/two/g将全文中的所有one替换成two
?字符串在文本中从下至上搜索该字符串
/字符串在文本中从上至下搜索该字符串

1、编写简单文档

2、配置主机名称

为了便于在局域网中查找某台特定的主机,或者对主机进行区分,除了要有IP地址外,还要为主机配置一个主机名,主机之间可以通过类似于域名的名称来相互访问。在Linux系统中,主机名大多保存在/etc/hostname文件中,接下来修改配置文件的内容为“linuxprobe.com”

 [root@linux ~]# vim /etc/hostname
 linuxprobe.com

hostname命令用于查看当前的主机名称,但有时主机名称的改变不会立即同步到系统,所以如果发现修改完成后还显示原来的主机名称,可重启虚拟机后再行查看:

 [root@linux ~]# hostname
 linuxprobe.com

3、配置网卡信息

  • 首先切换到/etc/sysconfig/network-scripts目录中(存放着网卡的配置文件)
  • 使用Vim编辑器修改网卡文件ifcfg-ens160,逐项写入下面的参数并保存退出。(自行确认网卡的默认名称)
    • 设备类型:TYPE=Ethernet
    • 地址分配模式:BOOTPROTO=static
    • 网卡名称:NAME=ens160
    • 是否启动: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 ~]# cd /etc/sysconfig/network-scripts/
 [root@linux network-scripts]# vi ifcfg-ens33 
 [root@linux network-scripts]# cat ifcfg-ens33 
 TYPE=Ethernet
 BOOTPROTO=static
 NAME=ens160
 DEFROUTE=yes
 ONBOOT=yes
 IPADDR=192.168.10.10
 NETMASK=255.255.255.0
 GATEWAY=192.168.10.1

执行重启网卡设备的命令,然后通过ping命令测试网络能否连通。

 [root@linux network-scripts]# nmcli connection reload ens160
 [root@linux network-scripts]# ping baidu.com
 PING baidu.com (110.242.68.66) 56(84) bytes of data.
 64 bytes from 110.242.68.66 (110.242.68.66): icmp_seq=1 ttl=128 time=64.8 ms
 64 bytes from 110.242.68.66 (110.242.68.66): icmp_seq=2 ttl=128 time=53.9 ms
 64 bytes from 110.242.68.66 (110.242.68.66): icmp_seq=3 ttl=128 time=50.1 ms
 64 bytes from 110.242.68.66 (110.242.68.66): icmp_seq=4 ttl=128 time=52.4 ms
 ^C
 --- baidu.com ping statistics ---
 4 packets transmitted, 4 received, 0% packet loss, time 3012ms
 rtt min/avg/max/mdev = 50.066/55.269/64.750/5.646 ms
 [root@linux network-scripts]# 

4、配置软件仓库

搭建并配置软件仓库的大致步骤如下

  • 进入到/etc/yum.repos.d/目录中(该目录存放着软件仓库的配置文件)
  • 使用Vim编辑器创建一个名为rhel8.repo的配置文件,逐项写入下面的配置参数并保存退出
    • 仓库名称:具有唯一性的表示名称,不应与其他软件仓库发生冲突
    • 描述信息(name):可以是一些介绍词,易于识别软件仓库的用处
    • 仓库位置(baseurl):即软件包的获取方式,可以使用FTP、HTTP与本地file
    • 是否启用(endable):设置此源是否被使用,1为使用,0为禁用
    • 是否检查(gpgcheck):设置此源是否被校验,1位校验,0为禁用
    • 公钥位置(gpgkey):若上面参数开启了校验功能,则此处为公钥文件位置。若没有开启,省略
  • 按配置参数中所填写的仓库位置挂载光盘把光盘挂载信息写入到/etc/fstab文件
  • 使用"yum install httpd -y" 命令检查软件仓库是否已经可用(建议在8版本系统中使用dnf作为软件的命令"dnf install httpd -y")

实战:

 [root@linux ~]# cd /etc/yum.repos.d/
 [root@linux yum.repos.d]# vim rehl8.repo
 [BaseOS]
 name=BaseOS
 baseurl=file:///media/cdrom/BaseOS
 enabled=1
 gpgcheck=0
 [AppStream]
 name=AppStream
 baseurl=file:///media/cdrom/AppStream
 enabled=1
 gpgcheck=0

创建挂载点后进行挂载操作,并设置成开机自动挂载(后面会详细介绍)

 [root@linux yum.repos.d]# mkdir -p /media/sdrom
 [root@linux yum.repos.d]# mount /dev/sdrom /media/cdrom
 mount: /media/sdrom: WARNING: device write-protected, mount read-only.
 [root@linux yum.repos.d]# vim /etc/fstab
 /dev/cdrom /media/sdrom iso9660 defaults 0 0

尝试使用软件仓库的yum命令来安装Web服务,软件包名称叫做httpd

 [root@linux yum.repos.d]# yum install httpd
 Updating Subscription Management repositories.
 Unable to read consumer identity
 ...省略...
 Complete!

二、编写Shell脚本

Shell可以被理解为人与计算机硬件之间的“翻译官”,Shell脚本的工作方式有两种:交互式批处理

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

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

查看SHELL变量可以发现当前系统已经默认使用Bash作为命令行终端解释器

 [root@linux ~]# echo $SHELL
 /bin/bash

1、编写简单的脚本

查看当前所在工作路径并列出当前目录下所有的文件及属性信息

[root@linux ~]# vim example.sh 
#!/bin/bash
#For Example BY linuxprobe.com
pwd
ls -al

Shell脚本文件的名称可以任意,建议将.sh后缀加上,以表示是一个脚本文件

上述脚本文件中:第一行的脚本声明(#!)用来告诉系统使用哪种Shell解释器来执行该脚本第二行的注释信息(#)是对脚本功能和某些命令的介绍信息;第三四行就是平时执行的Linux命令了

[root@linux ~]# bash example.sh 
/root
total 84
dr-xr-x---. 18 root root 4096 Jul  3 20:14 .
dr-xr-xr-x. 19 root root  270 May 16 10:21 ..
...

除了使用bash解释器命令直接运行Shell脚本文件外,第二种运行脚本程序的方法是通过输入完整路径的方式来执行。但默认会因为权限不足而提示报错,只需要为脚本文件增加执行权限即可。

[root@linux ~]# ./example.sh
-bash: ./example.sh: Permission denied
[root@linux ~]# chmod u+x example.sh 
[root@linux ~]# ./example.sh
/root
total 84
dr-xr-x---. 18 root root 4096 Jul  3 20:14 .
dr-xr-xr-x. 19 root root  270 May 16 10:21 ..
-rw-r--r--   1 root root    0 Oct  1  2024 AA.conf
...

2、接收用户的参数

为了让Shell脚本程序更好地满足用户的一些实时的需求,必须要让脚本程序能够像之前执行命令时那样,接收用户输入的参数.

比如当用户执行某一个命令,加或不加参数的输出结果也是不同的

[root@linux ~]# wc -l anaconda-ks.cfg 
47 anaconda-ks.cfg
[root@linux ~]# wc -c anaconda-ks.cfg 
1084 anaconda-ks.cfg
[root@linux ~]# wc -w anaconda-ks.cfg 
102 anaconda-ks.cfg

意味着命令不仅要能够接收用户输入的内容,还要有能力进行判断区别,根据不同的输入调用不同的功能

Shell脚本语言已经考虑到了这些,内设了用于接收参数的变量,变量之间使用空格间隔。例如

  • $0对应的是当前Shell脚本程序的名称
  • $#对应的是总共有几个参数
  • $*对应的是所有位置的参数值
  • $?对应的是显示上一次命令的执行返回值
  • $1、2...分别对应着第N个位置的参数值
[root@linux ~]# vim example.sh 
#!/bin/bash
echo "当前脚本名称为$0"
echo "总共有$#个参数,分别是$*。"
echo "第一个参数为$1,第五个为$5。"

[root@linux ~]# bash example.sh one two three four five six
当前脚本名称为example.sh
总共有6个参数,分别是one two three four five six。
第一个参数为one,第五个为five。

3、判断用户的参数

Shell脚本中的条件测试语法可以判断表达式是否成立,若条件成立则返回数字0,否则便返回非零值。语法:“[ 条件表达式 ]“。按照测试对象分,条件测试语句可以分为4种:

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

文件测试使用指定条件来判断文件是否存在或权限是否满足等情况的运算符,文件测试所用参数:

操作符作用
-d测试文件是否为目录类型
-e测试文件是否存在
-f判断是否为一般文件
-r测试当前用户是否有权限读取
-w测试当前用户是否有权限写入
-x测试当前用户是否有权限执行

示例:判断/etc/fstab是否为一个目录类型的文件,然后通过Shell解释器的内设$?变量显示上一条命令执行后的返回值。再测试其是否为一般文件。

[root@linux ~]# [ -d /etc/fstab ]
[root@linux ~]# echo $?
1
[root@linux ~]# [ -f /etc/fstab ]
[root@linux ~]# echo $?
0

逻辑语句用于对测试结果进行逻辑分析,根据测试结果可实现不同的效果。例如在Shell终端中逻辑“”的运算符号是&&,它表示当前面的命令执行后才执行它后面的命令

[root@linux ~]# [ -e /dev/cdrom ] && echo "Exist" 
Exist

逻辑“”的运算符号是||,表示当前面的命令执行失败后才会执行它后面的命令,因此可以用来结合系统环境变量USER来判断当前登录的用户是否是非管理员身份:

[root@linux ~]# echo $USER
root
[root@linux ~]# [ $USER = root ] || echo "user"
[root@linux ~]# su - linuxprobe
[linuxprobe@linuxprobe ~]$ [ $USER = root ] || echo "user"
user

”的运算符号是一个叹号(!),表示把条件测试中的判断结果取相反值

[linuxprobe@linuxprobe ~]$ exit
logout
[root@linux ~]# [ ! $USER = root ] || echo "administrator"
administrator

逻辑运算符示例:

[root@linux ~]# [ ! $USER = root ] && echo "user" || echo "root"
root

整数比较运算符仅是对数字的操作,可用的整数比较运算符:

操作符作用
-eq是否等于
-ne是否不等于
-gt是否大于
-lt是否小于
-le是否等于或小于
-ge是否大于或等于

示例1:测试10是否大于10以及10是否等于10

[root@linuxprobe ~]# [ 10 -gt 10 ]
[root@linuxprobe ~]# echo $?
1	
[root@linuxprobe ~]# [ 10 -eq 10 ]
[root@linuxprobe ~]# echo $?
0

示例2:free命令能够获取当前系统正在使用及可用的内存信息

# 查看内存使用情况
[root@linuxprobe ~]# free -m		
              total        used        free      shared  buff/cache   available
Mem:           9519        1471        6865          13        1182        7784
Swap:             0           0           0
# 过滤剩余内存量的行
[root@linuxprobe ~]# free -m | grep Mem:
Mem:           9519        1471        6865          13        1182        7784
# 保留第四列
[root@linuxprobe ~]# free -m | grep Mem: | awk '{print $4}'
6864

# 若把这个命令写入Shell脚本里,建议把输出结果赋值给一个变量
[root@linuxprobe ~]# FreeMem=`free -m | grep Mem | awk '{print $4}'`
[root@linuxprobe ~]# echo $FreeMem
6863

# 我们使用整数运算符来判断内存可用量的值是否小于1024,小于则提示
[root@linuxprobe ~]# [ $FreeMem -lt 1024 ] && echo "Insufficient Memory"
Insufficient Memory

字符串比较语句用于判断测试字符串是否为空值,或两个字符串是否相同。经常用来判断某个变量是否未定义(即内容为空值),字符串比较常见的运算符:

操作符作用
=比较字符串内容是否相同
!=比较字符串内容是否不同
-z判断字符串内容是否为空

字符串比较语句示例:

# 通过判断String变量是否为空值,进而判断是否定义了这个变量
[root@linuxprobe ~]# [ -z $String ]
[root@linuxprobe ~]# echo $?
0

# 在引用逻辑运算符
[root@linuxprobe ~]# echo $LANG
en_US.UTF-8
[root@linuxprobe ~]# [ ! $LANG = "en.US" ] && echo "Not en.US"
Not en.US

三、流程控制语句

1、if条件测试语句

if语句分为单分支结构、双分支结构、多分支结构

单分支结构if、then、fi关键字组成,而且只在条件成立后才执行预设命令:

# 判断/media/cdrom目录是否存在,不存在则创建
[root@linuxprobe ~]# vim mkcdrom.sh
#!/bin/bash
DIR="/media/cdrom"
if [ ! -d $DIR ]
then
	mkdir -p $DIR
fi
[root@linuxprobe ~]# bash mkcdrom.sh 
[root@linuxprobe ~]# ls -ld /media/cdrom
drwxr-xr-x 2 root root 6 Jul  4 10:22 /media/cdrom

双分支结构if、then、else、fi关键字组成,它进行一次性匹配判断。如果条件匹配,则执行预设命令;

[root@linuxprobe ~]# vim chkhost.sh
#!/bin/bash
ping -c 3 -i 0.2 -W 3 $1 &> /dev/null
if [ $? -eq 0 ]
then 
	echo "Host $1 is On-line."
else
	echo "Host $1 is Off-line."
fi
[root@linuxprobe ~]# bash chkhost.sh 10.0.0.2
Host 10.0.0.2 is On-line.
[root@linuxprobe ~]# bash chkhost.sh 10.0.0.10
Host 10.0.0.10 is Off-line.

多分支结构if、then、else、elif、fi关键字组成,它进行多次判断,任何一项在匹配成功后都会执行相应的预设命令

[root@linuxprobe ~]# vim chkscore.sh 
#!/bin/bash
read -p "Enter your score (0-100):" GRADE
if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ] ; then
	echo "$GRADE is Excullent"
elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ] ; then
	echo "$GRADE is Pass"
else 
	echo "$GRADE is Fail"
fi

[root@linuxprobe ~]# bash chkscore.sh 
Enter your score (0-100):88
88 is Excullent
[root@linuxprobe ~]# bash chkscore.sh 
Enter your score (0-100):80
80 is Pass
[root@linuxprobe ~]# bash chkscore.sh 
Enter your score (0-100):30
30 is Fail

2、for条件循环语句

for循环语句允许脚本一次性读取多个信息,然后逐一对信息进行操作处理

[root@linuxprobe ~]# vim users.txt
andy
barry
carl
duke
eric
george

# /dev/null是一个被称作Linux黑洞的文件,把输出信息重定向到这个文件等同于删除数据
[root@linuxprobe ~]# vim addusers.sh
#!/bin/bash
read -p "Enter The Users Password : " PASSWD
for UNAME in `cat users.txt`
do 
	id $UNAME &> /dev/null
	if [ $? -eq 0 ]
	then
		echo "$UNAME , Already exists"
	else
		useradd $UNAME &> /dev/null
		echo "$PASSWD" | passwd --sdtin $UNAME &> /dev/null
		echo "$UNAME , Create success"
	fi
done

[root@linuxprobe ~]# bash addusers.sh 
Enter The Users Password : linuxprobe
andy , Create success
barry , Create success
carl , Create success
duke , Create success
eric , Create success
george , Create success
[root@linuxprobe ~]# tail -6 /etc/passwd
andy:x:1001:1001::/home/andy:/bin/bash
barry:x:1002:1002::/home/barry:/bin/bash
carl:x:1003:1003::/home/carl:/bin/bash
duke:x:1004:1004::/home/duke:/bin/bash
eric:x:1005:1005::/home/eric:/bin/bash
george:x:1006:1006::/home/george:/bin/bash

3、while条件循环语句

while条件循环是一种让脚本根据某些条件来重复执行命令的语句,它的循环结构往往在执行前并不确定最终执行的次数,while循环通过判断条件测试的真假来决定是否继续执行命令,若条件为真就继续执行,为假结束循环;

示例:编写一个用来猜测数值大小的脚本Guess.sh

[root@linuxprobe ~]# cat Guess.sh 
#!/bin/bash
PRICE=$(expr $RANDOM % 1000)
TIMES=0
echo "商品实际价格为0-999之间,猜猜看是多少?"
while true
do 
	read -p "请输入您猜测的价格数目: " INT
	let TIMES++
	if [ $INT -eq $PRICE ] ; then
		echo "恭喜你答对了,实际价格是 $PRICE"
		echo "您总共猜测了 $TIME 次"
		exit
	elif [ $INT -gt $PRICE ] ; then
		echo "太高了!"
	else
		echo "太低了"
	fi
done

4、case条件测试语句

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

# 前面的脚本只能接受数字,下面进行改变:
[root@linuxprobe ~]# vim Checkkeys.sh
#!/bin/bash
read -p "请输入一个字符,并按Enter键确认:" KEY
case "$KEY" in 
	[a-z]|[A-Z])
		echo "您输入的是 字母"
		;;
	[0-9])
		echo "您输入的是 数字"
		;;
	*)
		echo "您输入的是 空格、功能键或其他控制字符。"
esac
[root@linuxprobe ~]# bash Checkkeys.sh 
请输入一个字符,并按Enter键确认:6
您输入的是 数字
[root@linuxprobe ~]# bash Checkkeys.sh 
请输入一个字符,并按Enter键确认:p
您输入的是 字母
[root@linuxprobe ~]# bash Checkkeys.sh 
请输入一个字符,并按Enter键确认:$#	
您输入的是 空格、功能键或其他控制字符。

四、计划任务服务程序

在指定的时间段自动启动或停止某些服务或命令,从而实现运维的自动化。计划分为一次性计划任务长期性计划任务

  • 一次性计划任务:例:今晚23点30分重启网站服务
  • 长期性计划任务:每周一的凌晨3点25分都把/home/wwwroot目录打包备份为backup.tar.gz

一次性计划任务只执行一次,一般用于临时的工作需求。用at命令实现,只需要写成"at 时间"的形式即可。还可以使用“al-l”命令查看已设置好但还未执行的一次性计划任务;使用“atrm 任务序号”将其删除;at命令参数如下:

参数作用
-f指定包含命令的任务文件
-q指定新任务名称
-l显示待执行任务列表
-d删除指定待执行任务
-m任务执行后给用户发邮件

在使用at命令来设置一次性计划任务时,默认采用的是交互式方法;

# 将系统设置在今晚23:30分自动重启网站服务
[root@linuxprobe ~]# at 23:30
warning: commands will be executed using /bin/sh	# warning只是在告诉我们接下来将由sh解释器负责执行
at> systemctl restart httpd
at> 此处按下Ctrl+d结束编写
job 1 at Thu Jul  4 23:30:00 2024
[root@linuxprobe ~]# at -l
1	Thu Jul  4 23:30:00 2024 a root

# 还可以使用管道符连接,实现非交互式创建一次性计划任务
[root@linuxprobe ~]# echo "systemctl restart httpd" | at 23:30
warning: commands will be executed using /bin/sh
job 2 at Thu Jul  4 23:30:00 2024
[root@linuxprobe ~]# at -l
1	Thu Jul  4 23:30:00 2024 a root
2	Thu Jul  4 23:30:00 2024 a root

# 使用atrm命令轻松删除其中一个
[root@linuxprobe ~]# atrm 2
[root@linuxprobe ~]# at -l
1	Thu Jul  4 23:30:00 2024 a root

还有种特殊场景——把计划任务写入Shell脚本中,当用户激活后再开始倒计时执行,而不是像上面那样固定时间,一般使用“at now +2 MINUTE”的方式操作,这样代表2分钟(MINUTE)后执行这个任务,也可以替代成小时(HOUR)、日(DAY)、月(MONTH)等词汇;

[root@linuxprobe ~]# at now +2 MINUTE
warning: commands will be executed using /bin/sh
at> systemctl restart httpd
at> <EOT>
job 3 at Thu Jul  4 15:17:00 2024

crond服务能让Linux系统周期性地、有规律地执行某些具体的内容;创建、编辑计划任务的命令是:“crontab -e”,查看当前计划任务的命令是“cntroab -l”,删除某条计划任务的命令为“crontab -r”;另外,如果是root身份登录,还可以在crontab命令中加上-u参数编辑他人的计划任务。crontab参数如下:

参数作用
-e编辑计划任务
-u指定用户名称
-l列出任务列表
-r删除计划任务

分、时、日、月、星期 命令”。这是crond服务设置任务的参数格式;注意,如果有些数字未被设置,则需要用*号占位。下面是具体说明:

字段说明
分钟取值为0-59的整数
小时取值为0-23的任意整数
日期取值为1-31的任意整数
月份取值为1-12的任意整数
星期取值为0-7的任意整数,其中0与7均为星期日
命令要执行的命令或程序脚本

示例:假设在每周一、三、五的凌晨3点25分,都需要使用tar命令把某个网站的数据目录进行打包处理,使其作为一个备份文件。可以使用crontab -e命令创建,为自己创建计划任务无需使用-u参数

[root@linuxprobe ~]# crontab -e
crontab: installing new crontab
[root@linuxprobe ~]# crontab -l
25 3 * * 1,3,5 /usr/bin/tar -czvf backup.tar.gz /home/wwwroot

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

如果在crond服务中需要同时包含多条计划任务的命令语句,应每行仅写一条。注意,在crond服务的计划任务参数中,所有命令一定要用绝对路径的方式来写,若不知道,就用whereis命令进行查询;

[root@linuxprobe ~]# whereis rm
rm: /usr/bin/rm /usr/share/man/man1/rm.1.gz /usr/share/man/man1p/rm.1p.gz
[root@linuxprobe ~]# crontab -e
crontab: installing new crontab
[root@linuxprobe ~]# 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/*

总结:在crond服务的配置参数中,一般会像Shell脚本那样#号开头写上注释信息;另外,计划任务中的“分”字段必须有数值,绝不能为空或是*号,而“日”和“星期”字段不能同时使用,否则会发生冲突

删除crond计划可以使用crontab -e命令进入到编辑界面删除文本即可,也可使用crontab -r命令直接进行删除

[root@linuxprobe ~]# crontab -r
[root@linuxprobe ~]# crontab -l
no crontab for root

致谢

在此,我要对所有为知识共享做出贡献的个人和机构表示最深切的感谢。同时也感谢每一位花时间阅读这篇文章的读者,如果文章中有任何错误,欢迎留言指正。 

学习永无止境,让我们共同进步!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1901975.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java技术栈总结:kafka篇

一、# 基础知识 1、安装 部署一台ZooKeeper服务器&#xff1b;安装jdk&#xff1b;下载kafka安装包&#xff1b;上传安装包到kafka服务器上&#xff1a;/usr/local/kafka;解压缩压缩包&#xff1b;进入到config目录&#xff0c;修改server.properties配置信息&#xff1a; #…

绝区叁--如何在移动设备上本地运行LLM

随着大型语言模型 (LLM)&#xff08;例如Llama 2和Llama 3&#xff09;不断突破人工智能的界限&#xff0c;它们正在改变我们与周围技术的互动方式。这些模型早已集成到我们的手机中&#xff0c;但到目前为止&#xff0c;它们理解和处理请求的能力还非常有限。然而&#xff0c;…

2024年7月6日 (周六) 叶子游戏新闻

自动电脑内部录音器AutoAudioRecorder: 是一款免费的自动音频录制软件&#xff0c;可直接将电脑内部所有的声音录制成 mp3/wav 文件&#xff0c;包括音乐、游戏直播、网络会议、聊天通话等音频源。 卸载工具 HiBitUninstaller: Windows上的软件卸载工具 《不羁联盟》制作人&…

数据库测试|Elasticsearch和ClickHouse的对决

前言 数据库作为产品架构的重要组成部分&#xff0c;一直是技术人员做产品选型的考虑因素之一。 ClkLog会经常遇到小伙伴问支持兼容哪几种数据库&#xff1f;为什么是选择ClickHouse而不是这个或那个。 由于目前市场上主流的数据库有许多&#xff0c;这次我们选择其中一个比较典…

【密码学】密码学体系

密码学体系是信息安全领域的基石&#xff0c;它主要分为两大类&#xff1a;对称密码体制和非对称密码体制。 一、对称密码体制&#xff08;Symmetric Cryptography&#xff09; 在对称密码体制中&#xff0c;加密和解密使用相同的密钥。这意味着发送方和接收方都必须事先拥有这…

医院产科信息化管理系统源码,智慧产科管理系统,涵盖了从孕妇到医院初次建档、历次产检、住院分娩、统计上报到产后42天全部医院服务的信息化管理。

医院产科信息化管理系统源码&#xff0c;智慧产科管理系统&#xff0c;产科专科电子病历系统 技术架构&#xff1a;前后端分离Java&#xff0c;Vue&#xff0c;ElementUIMySQL8.0.36 医院产科信息化管理系统&#xff0c;通过构建专科病例系统实现临床保健一体化&#xff0c;涵…

线程池理解及7个参数

定义理解 线程池其实是一种池化的技术实现&#xff0c;池化技术的核心思想就是实现资源的复用&#xff0c;避免资源的重复创建和销毁带来的性能开销。线程池可以管理一堆线程&#xff0c;让线程执行完任务之后不进行销毁&#xff0c;而是继续去处理其它线程已经提交的任务。 …

【pytorch18】Logistic Regression

回忆线性回归 for continuous:y xwbfor probability output:yσ(xwb) σ:sigmoid or logistic 线性回归是简单的线性模型&#xff0c;输入是x&#xff0c;网络参数是w和b&#xff0c;输出是连续的y的值 如何把它转化为分类问题?加了sigmoid函数&#xff0c;输出的值不再是…

springboot服务启动读取不到application.yml中的nacos.config信息

我的版本&#xff1a; 可以添加bootstrap.yml文件&#xff0c;在里面添加nacos.config的配置信息 也可以添加VM参数 -Dspring.cloud.nacos.discovery.server-addr -Dspring.cloud.nacos.config.server-addr -Dspring.cloud.nacos.config.namespace -Dspring.cloud.nacos.discov…

Java实现登录验证 -- JWT令牌实现

目录 1.实现登录验证的引出原因 2.JWT令牌2.1 使用JWT令牌时2.2 令牌的组成 3. JWT令牌&#xff08;token&#xff09;生成和校验3.1 引入JWT令牌的依赖3.2 使用Jar包中提供的API来实现JWT令牌的生成和校验3.3 使用JWT令牌验证登录3.4 令牌的优缺点 1.实现登录验证的引出 传统…

LeetCode刷题之搜索二维矩阵

2024 7/5 一如既往的晴天&#xff0c;分享几张拍的照片嘿嘿&#xff0c;好几天没做题了&#xff0c;在徘徊、踌躇、踱步。蝉鸣的有些聒噪了&#xff0c;栀子花花苞也都掉落啦&#xff0c;今天给他剪了枝&#xff0c;接回一楼来了。ok&#xff0c;做题啦&#xff01; 图1、宿舍…

EDA 2023 年世界国家suicide rate排名

文章目录 前言:关于数据集列 导入模块导入数据数据预处理探索性数据分析按性别划分的自杀率 [箱线图]相关矩阵热图自杀率最高的 15 个国家变化百分比最高的 15 个国家/地区2023 年世界地图上自杀率的国家 结尾: 前言: 随着社会的不断发展和变迁&#xff0c;人们对于各种社会问…

154. 寻找旋转排序数组中的最小值 II(困难)

154. 寻找旋转排序数组中的最小值 II 1. 题目描述2.详细题解3.代码实现3.1 Python3.2 Java 1. 题目描述 题目中转&#xff1a;154. 寻找旋转排序数组中的最小值 II 2.详细题解 该题是153. 寻找旋转排序数组中的最小值的进阶题&#xff0c;在153. 寻找旋转排序数组中的最小值…

2024 年第十四届亚太数学建模竞赛(中文赛项)浅析

需要完整B题资料&#xff0c;请关注&#xff1a;“小何数模”&#xff01; 本次亚太(中文赛)数学建模的赛题已正式出炉&#xff0c;无论是赛题难度还是认可度&#xff0c;该比赛都是仅次于数模国赛的独一档&#xff0c;可以用于国赛前的练手训练。考虑到大家解题实属不易&…

品牌推广的核心价值:作用解析与意义探讨!

在激烈的市场竞争环境之下&#xff0c;品牌推广已经成为企业不可缺少的一部分。不仅关乎企业的知名度&#xff0c;对市场份额更是起到了决定性的作用。 作为一名手工酸奶品牌的创始人&#xff0c;目前全国也复制了100多家门店&#xff0c;这篇文章&#xff0c;我将和大家分享品…

web学习笔记(八十)

目录 1.小程序实现微信一键登录 2. 小程序的授权流程 3.小程序配置vant库 4.小程序配置分包 5.小程序配置独立分包 6.小程序分包预下载 1.小程序实现微信一键登录 要先实现小程序一键登录首先我们需要给按钮设置一个绑定事件&#xff0c;然后在绑定事件内部通过wx.login…

ETAS工具导入Com Arxml修改步骤

文章目录 前言Confgen之前的更改Confgen之后的修改CANCanIfComComMEcuM修改CanNmCanSMDCMCanTp生成RTE过程报错修改DEXT-诊断文件修改Extract问题总结前言 通讯协议栈开发一般通过导入DBC实现,ETAS工具本身导入DBC也是生成arxml后执行cfggen,本文介绍直接导入客户提供的arxml…

FastAPI+vue3+Primeflex教学20240706,渲染阶乘案例

子绝父相 相对定位是相对于自己原本的位置定位。 绝对定位&#xff0c;如果父元素设置了相对定位&#xff0c;则相对于父元素进行绝对定位&#xff0c;否则相对于最近的设置了相对定位的元素进行绝对定位&#xff0c;或者相对于根元素进行绝对定位。 定位有四个方向&#xff0…

白嫖A100-interLM大模型部署试用活动,亲测有效-2.Git

申明 以下部分内容来源于活动教学文档&#xff1a; Docs git 安装 是一个开源的分布式版本控制系统&#xff0c;被广泛用于软件协同开发。程序员的必备基础工具。 常用的 Git 操作 git init 初始化一个新的 Git 仓库&#xff0c;在当前目录创建一个 .git 隐藏文件夹来跟踪…

Ubuntu基本环境配置

#Jdk 安装 #--查看 已安装 的jdk软件 java -version # 安装jdk软件(如果有选择请选 y) sudo apt install openjdk-11-jdk # 自行学习 vi 或 vim 学习网址如下&#xff1a; # https://www.runoob.com/linux/linux-vim.html #-- 修改系统级 path : /etc/profile 文件 (注意要…