Vim編輯器與Shell命令腳本

?前言:本博客僅作記錄學習使用,部分圖片出自網絡,如有侵犯您的權益,請聯系刪除?

目錄

一、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/hostnamelinuxprobe.com

hostname命令用于查看當前的主機名稱,但有時主機名稱的改變不會立即同步到系統,所以如果發現修改完成后還顯示原來的主機名稱,可重啟虛擬機后再行查看:

?[root@linux ~]# hostnamelinuxprobe.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=EthernetBOOTPROTO=staticNAME=ens160DEFROUTE=yesONBOOT=yesIPADDR=192.168.10.10NETMASK=255.255.255.0GATEWAY=192.168.10.1

執行重啟網卡設備的命令,然后通過ping命令測試網絡能否連通。

?[root@linux network-scripts]# nmcli connection reload ens160[root@linux network-scripts]# ping baidu.comPING 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 ms64 bytes from 110.242.68.66 (110.242.68.66): icmp_seq=2 ttl=128 time=53.9 ms64 bytes from 110.242.68.66 (110.242.68.66): icmp_seq=3 ttl=128 time=50.1 ms64 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 3012msrtt 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=BaseOSbaseurl=file:///media/cdrom/BaseOSenabled=1gpgcheck=0[AppStream]name=AppStreambaseurl=file:///media/cdrom/AppStreamenabled=1gpgcheck=0

創建掛載點后進行掛載操作,并設置成開機自動掛載(后面會詳細介紹)

?[root@linux yum.repos.d]# mkdir -p /media/sdrom[root@linux yum.repos.d]# mount /dev/sdrom /media/cdrommount: /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 httpdUpdating 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 ]
thenmkdir -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."
elseecho "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 ] ; thenecho "$GRADE is Excullent"
elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ] ; thenecho "$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/nullif [ $? -eq 0 ]thenecho "$UNAME , Already exists"elseuseradd $UNAME &> /dev/nullecho "$PASSWD" | passwd --sdtin $UNAME &> /dev/nullecho "$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 "請輸入您猜測的價格數目: " INTlet TIMES++if [ $INT -eq $PRICE ] ; thenecho "恭喜你答對了,實際價格是 $PRICE"echo "您總共猜測了 $TIME 次"exitelif [ $INT -gt $PRICE ] ; thenecho "太高了!"elseecho "太低了"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.pswp.cn/diannao/42380.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/42380.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/42380.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Rust 程序設計語言學習——函數式語言功能:迭代器和閉包

Rust 的閉包&#xff08;closures&#xff09;是可以保存在一個變量中或作為參數傳遞給其他函數的匿名函數。可以在一個地方創建閉包&#xff0c;然后在不同的上下文中執行閉包運算。不同于函數&#xff0c;閉包允許捕獲被定義時所在作用域中的值。 迭代器&#xff08;iterato…

C++ STL 隨機數用法介紹

目錄 一:C語言中的隨機數 二:C++中的隨機數 1. 生成隨機數的例子 2. 隨機數引擎 3. 隨機數引擎適配器 4. C++中預定義的隨機數引擎,引擎適配器 5. 隨機數分布 一:C語言中的隨機數 <stdlib.h>//初始化隨機種子 srand(static_cast<unsigned int>(time(nullptr)…

C#面: 依賴注入有哪幾種方式?

依賴注入&#xff08;Dependency Injection&#xff0c;簡稱DI&#xff09;是一種設計模式&#xff0c;用于解耦組件之間的依賴關系。在C#中&#xff0c;常見的依賴注入方式有以下幾種&#xff1a; 構造函數注入&#xff08;Constructor Injection&#xff09;&#xff1a;通過…

dependencyManagement的作用、nacos的學習

使用SpringCloudAlibaba注意各組件的版本適配 SpringCloudAlibaba已經包含了適配的各組件&#xff08;nacos、MQ等&#xff09;的版本號&#xff0c;也是一個版本仲裁者&#xff0c;但是可能已經有了父項目Spring-Boot-Starter-Parent這個版本仲裁者&#xff0c;又不能加多個父…

什么是獨立服務器?

獨立服務器是指一個單獨的物理服務器&#xff0c;整體的硬件設施都是獨立存在的&#xff0c;有著強大的性能&#xff0c;只需要運行用戶個人的數據信息&#xff0c;并且可以享受到獨立服務器的硬件與軟件&#xff0c;當網站有著大量的用戶進行訪問或者是需要運行大型的軟件時&a…

leetcode熱題100.零錢兌換(動態規劃)

今天給大家分享一道動態規劃的常考題&#xff0c;零錢兌換&#xff0c;很有趣的動態規劃題目&#xff0c;希望可以對大家找工作過程中起到幫助&#xff0c;幫助大家拓展下思維 給你一個整數數組 coins &#xff0c;表示不同面額的硬幣&#xff1b;以及一個整數 amount &#xf…

6、Redis系統-數據結構-06-跳表

六、跳表&#xff08;Skiplist&#xff09; 跳表是一種高效的動態數據結構&#xff0c;可以用于實現有序集合&#xff08;Sorted Set&#xff0c;Zset&#xff09;。與平衡樹相比&#xff0c;跳表具有實現簡單、效率高的優點&#xff0c;因此被 Redis 選用作為有序集合的底層數…

階段三:項目開發---搭建項目前后端系統基礎架構:任務13:實現基本的登錄功能

任務描述 任務名稱&#xff1a; 實現基本的登錄功能 知識點&#xff1a; 了解前端Vue項目的基本執行過程 重 點&#xff1a; 構建項目的基本登陸功能 內 容&#xff1a; 通過實現項目的基本登錄功能&#xff0c;來了解前端Vue項目的基本執行過程&#xff0c;并完成基…

如何讓代碼兼容 Python 2 和 Python 3?Future 庫助你一臂之力

目錄 01Future 是什么? 為什么選擇 Future? 安裝與配置 02Future 的基本用法 1、兼容 print 函數 2、兼容整數除法 3、兼容 Unicode 字符串 03Future 的高級功能 1. 處理字符串與字節 2. 統一異常處理…

linux kthread任務管理

目錄 一、linux 創建內核線程1.1 kthread_create1.2 kthread_create_worker kthread_queue_work 二、設置線程優先級和調度策略2.1 sched_setscheduler2.2 調度策略 一、linux 創建內核線程 1.1 kthread_create 在 linux 中&#xff0c;可以使用 kthread_create 接口創建內核…

移動校園(7)ii:uniapp路由響應攔截器處理token,以及微信小程序報錯當前頁面正在處于跳轉狀態,請稍后再進行跳轉....

依據昨天的寫完&#xff0c;在token過期之后&#xff0c;再次調用接口&#xff0c;會觸發后端攔截&#xff0c;扔進全局錯誤處理中間件 前端說明提示都沒有&#xff0c;只有一個這個&#xff0c;現在優化一下&#xff0c;再寫一個類似全局后置守衛&#xff0c;當狀態碼是401的時…

MySQL——數據連接池

數據庫連接 --- 執行完畢 --- 釋放&#xff08;連接到釋放的過程十分浪費系統資源&#xff09; 池化技術&#xff1a;準備一些預先的資源&#xff0c;過來就連接預先準備好的 編寫連接池&#xff0c;實現一個接口 DataSource 開源數據源實現&#xff08;拿來即用&#xff09;…

增強安全防護,解讀智慧校園系統的登錄日志功能

在構建智慧校園系統時&#xff0c;登錄日志功能扮演著不可或缺的角色&#xff0c;它不僅是系統安全的守護者&#xff0c;也是提升管理效率和確保合規性的有力工具。這一機制詳細記錄每次登錄嘗試的方方面面&#xff0c;涵蓋了時間戳、用戶身份、登錄來源的IP地址乃至使用的設備…

phpcms 升級php8.3.8

windows 2008 server 不支持php8.3.8,需升級為windows 2012 1.下載php8.3.8 PHP8.3.9 For Windows: Binaries and sources Releases 2.配置php.ini (1.)在php目錄下找到php.ini-development文件&#xff0c;把它復制一份&#xff0c;改名為php.ini (2.)修改php安裝目錄 根…

《昇思 25 天學習打卡營第 10 天 | ResNet50 遷移學習 》

《昇思 25 天學習打卡營第 10 天 | ResNet50 遷移學習 》 活動地址&#xff1a;https://xihe.mindspore.cn/events/mindspore-training-camp 簽名&#xff1a;Sam9029 使用遷移學習進行狼狗圖像分類 簡介 在機器學習和深度學習中&#xff0c;我們經常面臨數據不足的問題。 遷…

python【文件操作】

文件操作 一、創建文件夾二、文件操作模式1.覆蓋寫入2.讀取3.追加 三、 Python腳本在文件中查找和替換文本四、 python清空文件夾 一、創建文件夾 判斷文件或者文件夾是否存在 import ospathrD://測試文件夾 if not os.path.exists(path):os.mkdir(path)print(os.path.exists…

C++模板元編程(二)——完美轉發

完美轉發指的是函數模板可以將自己的參數“完美”地轉發給內部調用的其它函數。所謂完美&#xff0c;即不僅能準確地轉發參數的值&#xff0c;還能保證被轉發參數的左、右值屬性不變。 文章目錄 場景舊的方法新的方法內部實現參考文獻 場景 思考下面的代碼&#xff1a; templ…

高防服務器的重要性

在數字化時代&#xff0c;網絡安全已成為企業和個人最為關注的問題之一。隨著網絡攻擊的日益頻繁和復雜&#xff0c;傳統的服務器租用服務已難以滿足高安全需求的市場。高防服務器租用應運而生&#xff0c;成為保護網絡安全的重要解決方案。本文將探討高防服務器租用的概念、重…

專業140+總分420+天津大學815信號與系統考研經驗天大電子信息與通信工程,真題,大綱,參考書。

順利上岸天津大學&#xff0c;專業課815信號與系統140&#xff0c;總分420&#xff0c;總結一些自己的復習經歷&#xff0c;希望對于報考天大的同學有些許幫助&#xff0c;少走彎路&#xff0c;順利上岸。專業課&#xff1a; 815信號與系統&#xff1a;指定教材吳大正&#xf…

2-26 基于matlab開發的制冷循環模型

基于matlab開發的制冷循環模型。Simscape兩相流域中的制冷循環模型&#xff0c;在simulink中完成多循環溫度控制。程序已調通&#xff0c;可直接運行。 2-26 制冷循環模型 Simscape兩相流域 - 小紅書 (xiaohongshu.com)