一、Vim 文本編輯器
在 Linux 系統(tǒng)中一切都是文件烛亦,而配置一個服務(wù)就是在修改其配置文件的參數(shù)
1. Vim 編輯器模式
vim 編輯器模式 | 說明 |
---|---|
命令模式默認
|
控制光標移動瘤袖,可對文本進行復(fù)制态秧、粘貼、刪除和查找等工作 |
編輯模式 | 正常的文本錄入 |
末行模式 | 保存或退出文檔店煞,以及設(shè)置編輯環(huán)境 |
Vim 編輯器模式的切換方法
提示:
- 在每次運行 Vim 編輯器時,默認進入命令模式咧欣,此時需要先切換到輸入模式后再進行文檔編寫工作浅缸,而每次在編寫完文檔后需要先返回命令模式,然后再進入末行模式魄咕,執(zhí)行文檔的保存或退出操作
- 在 Vim 中衩椒,無法直接從輸入模式切換到末行模式
末行模式中可用的命令
- 末行模式主要用于保存或退出文件,以及設(shè)置 Vim 編輯器的工作環(huán)境,還可以讓用戶執(zhí)行外部的 Linux 命令或跳轉(zhuǎn)到所編寫文檔的特定行數(shù)
命令 | 作用 |
---|---|
:w |
保存 |
:q |
退出 |
:q! |
強制退出(放棄對文檔的修改) |
:wq! |
強制保存退出 |
:set nu |
顯示行號 |
:set nonu |
不顯示行號 |
:命令 |
執(zhí)行該命令 |
:整數(shù) |
跳轉(zhuǎn)到該行 |
:s/one/two |
將當前光標所在行的第一個 one 替換成 two |
:s/one/two/g |
將當前光標所在行的所有 one 替換成 two |
:%s/one/two/g |
將全文中的所有 one 替換成 two |
?字符串 |
在文本中從下至上搜索該字符串 |
/字符串 |
在文本中從上至下搜索該字符串 |
Vim 編輯器
a毛萌、 i苟弛、 o 三個鍵從命令模式切換到輸入模式
- a 鍵與 i 鍵分別是在光標后面一位和光標當前位置切換到輸入模式
- o 鍵則是在光標的下面再創(chuàng)建一個空行,此時可敲擊 a 鍵進入到編輯器的輸入模式
2. Vim 中常用的命令
命令 | 作用 |
---|---|
dd |
刪除(剪切)光標所在整行 |
5dd |
刪除(剪切)從光標處開始的 5 行 |
yy |
復(fù)制光標所在整行 |
5yy |
復(fù)制從光標處開始的 5 行 |
n |
顯示搜索命令定位到的下一個字符串 |
N |
顯示搜索命令定位到的上一個字符串 |
u |
撤銷上一步的操作 |
p |
將之前刪除(dd)或復(fù)制(yy)過的數(shù)據(jù)粘貼到光標后面 |
二阁将、配置主機名稱
為了便于在局域網(wǎng)中查找某臺特定的主機膏秫,或者對主機進行區(qū)分,除了要有 IP 地址外做盅,還要為主機配置一個主機名缤削,主機之間可以通過這個類似于域名的名稱來相互訪問
- 修改主機名稱文件
vim /etc/hostname
- 查看主機名
hostname
三、配置網(wǎng)卡
網(wǎng)卡 IP 地址配置的是否正確是兩臺服務(wù)器是否可以相互通信的前提
在 Linux 系統(tǒng)中吹榴,一切都是文件亭敢,因此配置網(wǎng)絡(luò)服務(wù)的工作其實就是在編輯網(wǎng)卡配置文件
提示:
- 在 RHEL 5、 RHEL 6 中图筹,網(wǎng)卡配置文件的前綴為 eth帅刀,第 1 塊網(wǎng)卡為eth0,第 2 塊網(wǎng)卡為 eth1,以此類推
- 在 RHEL 7 中远剩,網(wǎng)卡配置文件的前綴則以 ifcfg開始扣溺,加上網(wǎng)卡名稱共同組成了網(wǎng)卡配置文件的名字,例如 ifcfg-eno16777736瓜晤;好在除了文件名變化外也沒有其他大的區(qū)別
cd /etc/sysconfig/network-scripts
ls
vim ifcfg-ens33
默認
提示:
- 配置為開機自啟動锥余,并且 IP地址、子網(wǎng)活鹰、網(wǎng)關(guān)等信息由人工指定
參數(shù) 說明 設(shè)備類型 TYPE=Ethernet 地址分配模式 BOOTPROTO=static 網(wǎng)卡名稱 NAME=ens3 是否啟動 ONBOOT=yes IP 地址 IPADDR=192.168.10.10 子網(wǎng)掩碼 NETMASK=255.255.255.0 網(wǎng)關(guān)地址 GATEWAY=192.168.10.1 DNS 地址 DNS1=192.168.10.1
- 重啟網(wǎng)卡設(shè)備
systemctl restart network
四哈恰、配置 Yum 軟件倉庫
Yum 軟件倉庫的作用是為了進一步簡化 RPM 管理軟件的難度以及自動分析所需軟件包及其依賴關(guān)系的技術(shù)
- 進入yum配置文件夾
cd /etc/yum.repos.d/
ls
- 新建rhel7.repo
vim rhel7.repo
五、編寫 Shell 腳本
工作方式 | 英文 | 說明 |
---|---|---|
交互式 | Interactive | 用戶每輸入一條命令就立即執(zhí)行 |
批處理 | Batch | 由用戶事先編寫好一個完整的 Shell 腳本志群, Shell 會一次性執(zhí)行腳本中諸多的命令 |
1. 編寫簡單的腳本
- 查看當前命令行終端解釋器
echo $SHELL
- 查看當前所在工作路徑并列出當前目錄下所有的文件及屬性信息
vim test.sh
#!/bin/bash
#For Example BY Ricsy
pwd
ls -al
提示:
- 第一行的腳本聲明(#!)用來告訴系統(tǒng)使用哪種 Shell 解釋器來執(zhí)行該腳本
- 第二行的注釋信息(#)是對腳本功能和某些命令的介紹信息着绷,使得自己或他人在日后看到這個腳本內(nèi)容時,可以快速知道該腳本的作用或一些警告信息
- 第三锌云、四行的可執(zhí)行語句也就是我們平時執(zhí)行的 Linux 命令了
- 執(zhí)行
sh test.sh
或
chmod +x test.sh
./test.sh
2. 接收用戶的參數(shù)
Shell 腳本程序中的參數(shù)位置變量
提示:
- $0 對應(yīng)的是當前 Shell 腳本程序的名稱
- $#對應(yīng)的是總共有幾個參數(shù)
- $*對應(yīng)的是所有位置的參數(shù)值
- $?對應(yīng)的是顯示上一次命令的執(zhí)行返回值
- $1荠医、$2、$3……則分別對應(yīng)著第 N 個位置的參數(shù)值
如:
vim example.sh
#!/bin/bash
echo "當前腳本名稱為$0"
echo "總共有$#個參數(shù)桑涎,分別是$*彬向。 "
echo "第 1 個參數(shù)為$1,第 5 個為$5攻冷。 "
sh example.sh one two three four five six
3. 判斷用戶的參數(shù)
按照測試對象來劃分娃胆,條件測試語句可以分為 4 種:
1. 文件測試語句
文件測試所用的參數(shù)
運算符 | 作用 |
---|---|
-d |
測試文件是否為目錄類型 |
-e |
測試文件是否存在 |
-f |
判斷是否為一般文件 |
-r |
測試當前用戶是否有權(quán)限讀取 |
-w |
測試當前用戶是否有權(quán)限寫入 |
-x |
測試當前用戶是否有權(quán)限執(zhí)行 |
如:
- 判斷/etc/fstab 是否為一個目錄類型的文件,然后通過 Shell 解釋器的內(nèi)設(shè)$?變量顯示上一條命令執(zhí)行后的返回值等曼。如果返回值為 0里烦,則目錄存在凿蒜;如果返回值為非零的值,則意味著目錄不存在
[ -d /etc/fstab ]
echo $?
- 判斷/etc/fstab 是否為一般文件胁黑,如果返回值為 0废封,則代表文件存
在,且為一般文件
[ -f /etc/fstab ]
echo $?
2. 邏輯測試語句
-
&&
表示當前面的命令執(zhí)行成功后才會執(zhí)行它后面的命令 -
||
表示當前面的命令執(zhí)行失敗后才會執(zhí)行它后面的命令 -
!
表示把條件測試中的判斷結(jié)果取相反值
如:
- 判斷當前登錄的用戶是否為非管理員用戶
[ ! $USER = root ] && echo "user" || echo "root"
3. 整數(shù)值比較語句
可用的整數(shù)比較運算符
運算符 | 作用 |
---|---|
-eq |
是否等于 |
-ne |
是否不等于 |
-gt |
是否大于 |
-lt |
是否小于 |
-le |
是否等于或小于 |
-ge |
是否大于或等于 |
如:
- 10 是否大于 10
[ 10 -gt 10 ]
echo $?
- 獲取內(nèi)存可用量
free -m
free -m | grep Mem:
free -m | grep Mem: | awk '{print $4}'
FreeMem=`free -m | grep Mem: | awk '{print $4}'`
echo $FreeMem
使用整數(shù)運算符來判斷內(nèi)存可用量的值是否小于 1024丧蘸,若小
于則會提示“Insufficient Memory”(內(nèi)存不足)的字樣
[ $FreeMem -lt 1024 ] && echo "Insufficient Memory"
4. 字符串比較語句
- 判斷測試字符串是否為空值漂洋,或兩個字符串是否相同
- 用來判斷某個變量是否未被定義(即內(nèi)容為空值)
常見的字符串比較運算符
運算符 | 作用 |
---|---|
= | 比較字符串內(nèi)容是否相同 |
!= | 比較字符串內(nèi)容是否不同 |
-z | 判斷字符串內(nèi)容是否為空 |
如:
- 判斷 String 變量是否為空值,進而判斷是否定義了這個變量
[ -z $String]
echo $?
- 環(huán)境變量值 LANG 不是英語(en.US)時力喷,則會滿足邏輯測試條件并輸出“Not en.US”(非英語)的字樣
[ $LANG!="en.US" ] && echo "Not en.US"
六刽漂、流程控制語句
1. if 條件測試語句
單分支的 if 語句
if 條件語句的單分支結(jié)構(gòu)由 if、 then弟孟、 fi 關(guān)鍵詞組成爽冕,而且只在條件成立后才執(zhí)行預(yù)設(shè)的命令,相當于口語的“如果……那么……”
如:
- 單分支的 if 條件語句來判斷/media/cdrom 文件是否存在披蕉,若存在就結(jié)束條件判斷和整個 Shell 腳本,反之則去創(chuàng)建這個目錄
vim mkcdrom.sh
#!/bin/bash
DIR="/media/cdrom"
if [ ! -e $DIR ]
then
mkdir -p $DIR
fi
雙分支的 if 語句
if 條件語句的雙分支結(jié)構(gòu)由 if乌奇、 then没讲、 else、 fi 關(guān)鍵詞組成礁苗,它進行一次條件匹配判斷爬凑,如果與條件匹配,則去執(zhí)行相應(yīng)的預(yù)設(shè)命令试伙;反之則去執(zhí)行不匹配時的預(yù)設(shè)命令嘁信,相當于口語的“如果……那么……或者……那么……”
如:
- 驗證某臺主機是否在線
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
sh chkhost.sh 192.168.10.10
多分支的 if 語句
if 條件語句的多分支結(jié)構(gòu)由 if、 then疏叨、 else潘靖、 elif、 fi 關(guān)鍵詞組成蚤蔓,它進行多次條件匹配判斷卦溢,這多次判斷中的任何一項在匹配成功后都會執(zhí)行相應(yīng)的預(yù)設(shè)命令,相當于口語的“如果……那么……如果……那么……”
如:
多分支的 if 條件語句來判斷用戶輸入的分數(shù)在哪個成績區(qū)間內(nèi)秀又,然后輸出如Error单寂、Excellent、 Pass吐辙、 Fail 等提示信息
vim chkscore.sh
#!/bin/bash
read -p "Enter your score(0-100): " GRADE
if [ $GRADE -gt 100 ] || [ $GRADE -lt 0 ] ; then
echo "$GRADE is Error"
else
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
fi
sh chkscore.sh
提示:
- 在 Linux 系統(tǒng)中宣决, read 是用來讀取用戶輸入信息的命令,能夠把接收到的用戶輸入信息賦值給后面的指定變量昏苏, -p 參數(shù)用于向用戶顯示一定的提示信息
2. for 條件循環(huán)語句
for 循環(huán)語句允許腳本一次性讀取多個信息尊沸,然后逐一對信息進行操作處理威沫,當要處理的數(shù)據(jù)有范圍時,使用 for 循環(huán)語句再適合不過了
如:
1.使用 for 循環(huán)語句從列表文件中讀取多個用戶名椒丧,然后為其逐一創(chuàng)建用戶賬戶并設(shè)置密碼
- 用戶列表
vim users.txt
andy
barry
carl
duke
eric
george
- 腳本
vim Example.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 "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
fi
done
提示:
- 執(zhí)行批量創(chuàng)建用戶的 Shell 腳本 Example.sh壹甥,在輸入為賬戶設(shè)定的密碼后將由腳本自動檢查并創(chuàng)建這些賬戶。由于已經(jīng)將多余的信息通過輸出重定向符轉(zhuǎn)移到了/dev/null 黑洞文件中壶熏,因此在正常情況下屏幕窗口除了“用戶賬戶創(chuàng)建成功”(Create success)的提示后不會有其他內(nèi)容
- 在 Linux 系統(tǒng)中句柠, /etc/passwd 是用來保存用戶賬戶信息的文件。如果想確認這個腳本是否成功創(chuàng)建了用戶賬戶棒假,可以打開這個文件溯职,看其中是否有這些新創(chuàng)建用戶信息
- 從文本中自動讀取主機列表,然后自動逐個測試這些主機是否在線
vim ipadds.txt
192.168.10.10
192.168.10.11
192.168.10.12
vim CheckHosts.sh
#!/bin/bash
HLIST=$(cat ~/ipadds.txt)
for IP in $HLIST
do
ping -c 3 -i 0.2 -W 3 $IP &> /d
if [ $? -eq 0 ] ; then
echo "Host $IP is On-line."
else
echo "Host $IP is Off-line."
fi
done
3. while 條件循環(huán)語句
while 條件循環(huán)語句是一種讓腳本根據(jù)某些條件來重復(fù)執(zhí)行命令的語句帽哑,它的循環(huán)結(jié)構(gòu)往往在執(zhí)行前并不確定最終執(zhí)行的次數(shù)谜酒,完全不同于 for 循環(huán)語句中有目標、有范圍的使用場景妻枕。 while 循環(huán)語句通過判斷條件測試的真假來決定是否繼續(xù)執(zhí)行命令僻族,若條件為真就繼續(xù)執(zhí)行,為假就結(jié)束循環(huán)
如:
- 猜測數(shù)值大小
vim Guess.sh
#!/bin/bash
PRICE=$(expr $RANDOM % 1000)
TIMES=0
echo "商品實際價格為 0-999 之間屡谐,猜猜看是多少述么? "
while true
do
read -p "請輸入您猜測的價格數(shù)目: " INT
let TIMES++
if [ $INT -eq $PRICE ] ; then
echo "恭喜您答對了,實際價格是 $PRICE"
echo "您總共猜 g $TIMES 次"
exit 0
elif [ $INT -gt $PRICE ] ; then
echo "太高了愕掏! "
else
echo "太低了度秘! "
fi
done
4. case 條件測試語句
case 語句是在多個范圍內(nèi)匹配數(shù)據(jù),若匹配成功則執(zhí)行相關(guān)命令并結(jié)束整個條件測試饵撑;而如果數(shù)據(jù)不在所列出的范圍內(nèi)剑梳,則會去執(zhí)行星號(*)中所定義的默認命令
vim Checkkeys.sh
#!/bin/bash
read -p "請輸入一個字符,并按 Enter 鍵確認: " KEY
case "$KEY" in
[a-z]|[A-Z])
echo "您輸入的是 字母滑潘。 "
;;
[0-9])
echo "您輸入的是 數(shù)字垢乙。 "
;;
*)
echo "您輸入的是 空格、功能鍵或其他控制字符语卤。 "
esac
七侨赡、計劃任務(wù)服務(wù)程序
計劃任務(wù)分為一次性計劃任務(wù)與長期性計劃任務(wù)
一次性計劃任務(wù)-at
- 一次性計劃任務(wù)只執(zhí)行一次,一般用于滿足臨時的工作需求
提示:
- 可以用 at命令實現(xiàn)這種功能
at [時間]
- 如果想要查看已設(shè)置好但還未執(zhí)行的一次性計劃任務(wù)
at -l
- 要想將其刪除
atrm [任務(wù)序號]
- 在使用 at 命令來設(shè)置一次性計劃任務(wù)時粱侣,默認采用的是交互式方法
- Ctrl + D組合鍵來結(jié)束編寫計劃任務(wù)
at 23:30
systemctl restart httpd
at -l
atrm 1
at -l
或
echo "systemctl restart httpd" | at 23:30
at -l
atrm 1
at -l
長期性計劃任務(wù)-crondtab
提示:
- 創(chuàng)建羊壹、編輯計劃任務(wù)的命令為
crontab -e
- 查看當前計劃任務(wù)的命令為
crontab -l
- 刪除某條計劃任務(wù)的命令為
crontab -r
- 如果您是以管理員的身份登錄的系統(tǒng)
crontab -u
來編輯他人的計劃任務(wù)
分、時齐婴、日油猫、月、星期
字段 | 說明 |
---|---|
分 | 取值為 0~59 的整數(shù) |
時 | 取值為 0~23 的任意整數(shù) |
日 | 取值為 1~31 的任意整數(shù) |
月 | 取值為 1~12 的任意整數(shù) |
星期 | 取值為 0~7 的任意整數(shù)柠偶,其中 0 與 7 均為星期日 |
命令 | 要執(zhí)行的命令或程序腳本 |
如:
- 在每周一情妖、三睬关、五的凌晨 3 點 25 分,都需要使用 tar 命令把某個網(wǎng)站的數(shù)據(jù)目錄進行打包處理毡证,使其作為一個備份文件
crontab -e
25 3 * * 1,3,5 /usr/bin/tar -czvf backup.tar.gz /home/wwwroot
crontab -l
- 每周一至周五的凌晨 1 點鐘自動清空/tmp 目錄內(nèi)的所有文件
crontab -e
0 1 * * 1-5 /usr/bin/rm -rf /tmp/*
crontab -l
說明:
- 除了用逗號(,)來分別表示多個時間段电爹,例如“8,9,12”表示 8 月、 9 月
和 12 月料睛。還可以用減號(-)來表示一段連續(xù)的時間周期(例如字段“日”的取值為“12-15”丐箩,則表示每月的 12~15 日)。以及用除號(/)表示執(zhí)行任務(wù)的間隔時間(例如“*/2”表示每隔2 分鐘執(zhí)行一次任務(wù))- 在 crond 服務(wù)的配置參數(shù)中恤煞,可以像 Shell 腳本那樣以#號開頭寫上注釋信息屎勘,這樣在日后回顧這段命令代碼時可以快速了解其功能、需求以及編寫人員等要信息
- 計劃任務(wù)中的“分”字段必須有數(shù)值居扒,絕對不能為空或是號概漱,而“日”和“星期”字段不能同時使用,否則就會發(fā)生沖突
- 在 crond 服務(wù)的計劃任務(wù)參數(shù)中喜喂,所有命令一定要用絕對路徑的方式來寫,可以用type或whereis查看
更新中......