今天開始學習,開始作筆記,但願本身能堅持下去html
參考連接:https://www.linuxprobe.com/chapter-04.htmllinux
Linux系統中通用的文本編輯器shell
vi的升級版本:着色vim
命令模式:控制光標移動,文本複製、粘貼、刪除等操做bash
輸入模式:輸入文本信息網絡
末行模式:保存或退出文檔,以及設置編輯環境編輯器
i學習 |
在光標前插入測試 |
I網站 |
定位到行首插入 |
o(小寫) |
在光標所在行下一行插入 |
O(大寫) |
在光標所在行上一行插入 |
a |
在光標後插入 |
A |
在行尾插入 |
h/← |
向左移動 |
l/→ |
向右移動 |
j/↑ |
向下移動 |
k/↑ |
向上移動 |
5j |
向下移動5行 |
0/^ |
移動到行首 |
$ |
移動到行尾 |
gg |
定位到首行 |
G |
定位到尾行 |
50G |
定位到50行 |
x(小寫) |
向後刪除一個字符 |
X(大寫) |
向前刪除一個字符 |
dd |
刪除(剪切)光標所在整行 |
5dd |
刪除(剪切)從光標處開始的5行 |
yy |
複製光標所在整行 |
nyy |
複製光標所在n行 |
p | 將以前刪除(dd)或複製(yy)過的數據粘貼到光標後面 |
Ctrl+b/pageup |
向前翻頁 |
Ctrl+f/pagedown |
向後翻頁 |
u |
撤銷上一步操做 |
n | 顯示搜索命令定位到的下一個字符串 |
N |
顯示搜索命令定位到的上一個字符串 |
命令 | 做用 |
: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 |
?字符串 | 從光標處向前搜索該字符串 |
/字符串 | 從光標處向後搜索該字符串 |
1.vim practice.txt
2.配置主機名稱
3.配置網卡信息
4.配置yum倉庫
[root@localhost ~]# cat example.sh
[root@linuxprobe ~]# bash example.sh
/root/Desktop
total 8 drwxr-xr-x. 2 root root 23 Jul 23 17:31 . dr-xr-x---. 14 root root 4096 Jul 23 17:31 .. -rwxr--r--. 1 root root 55 Jul 23 17:31 example.sh
$0 |
當前shell腳本的名稱 |
$# |
總共有多少個參數 |
$* |
全部位置的參數值 |
$? |
顯示上一次命令的執行返回值 |
$n |
第n個參數 |
[root@linuxprobe ~]# vim example.sh
返回值爲0則爲真,1則爲假
-d | 測試文件是否爲目錄類型 |
-e | 測試文件是否存在 |
-f | 判斷是否爲通常文件 |
-r | 測試當前用戶是否有權限讀取 |
-w | 測試當前用戶是否有權限寫入 |
-x | 測試當前用戶是否有權限執行 |
[root@linuxprobe ~]# [ -d /etc/fstab ]
[root@linuxprobe ~]# echo $? 1
&&:當前面的命令執行成功後纔會執行後面的命令
||:當前面的命令執行失敗後纔會執行後面的命令
!:把條件測試中的判斷結果取反
[root@linuxprobe ~]# [ $USER != root ] && echo "user" || echo "root"
root
先判斷當前登陸用戶的USER變量名稱是否等於root,而後用邏輯運算符「非」進行取反操做,效果就變成了判斷當前登陸的用戶是否爲非管理員用戶了。最後若條件成立則會根據邏輯「與」運算符輸出user字樣;或條件不知足則會經過邏輯「或」運算符輸出root字樣,而若是前面的&&不成立纔會執行後面的||符號。
-eq | 是否等於 |
-ne | 是否不等於 |
-gt | 是否大於 |
-lt | 是否小於 |
-le | 是否等於或小於 |
-ge | 是否大於或等於 |
= | 比較字符串內容是否相同 |
!= | 比較字符串內容是否不一樣 |
-z | 判斷字符串內容是否爲空 |
[root@linuxprobe ~]# vim mkcdrom.sh
判斷/media/cdrom文件是否存在,若存在就結束條件判斷和整個Shell腳本,反之則去建立這個目錄
[root@linuxprobe ~]# vim chkhost.sh
使用雙分支的if條件語句來驗證某臺主機是否在線,而後根據返回值的結果,要麼顯示主機在線信息,要麼顯示主機不在線信息。這裏的腳本主要使用ping命令來測試與對方主機的網絡聯通性,而Linux系統中的ping命令不像Windows同樣嘗試4次就結束,所以爲了不用戶等待時間過長,須要經過-c參數來規定嘗試的次數,並使用-i參數定義每一個數據包的發送間隔,以及使用-W參數定義等待超時時間。
[root@linuxprobe ~]# vim chkscore.sh
使用多分支的if條件語句來判斷用戶輸入的分數在哪一個成績區間內,而後輸出如Excellent、Pass、Fail等提示信息。在Linux系統中,read是用來讀取用戶輸入信息的命令,可以把接收到的用戶輸入信息賦值給後面的指定變量,-p參數用於向用戶顯示必定的提示信息。在下面的腳本示例中,只有當用戶輸入的分數大於等於85分且小於等於100分,才輸出Excellent字樣;若分數不知足該條件(即匹配不成功),則繼續判斷分數是否大於等於70分且小於等於84分,若是是,則輸出Pass字樣;若兩次都落空(即兩次的匹配操做都失敗了),則輸出Fail字樣
[root@linuxprobe ~]# vim Example.sh
編寫Shell腳本Example.sh。在腳本中使用read命令讀取用戶輸入的密碼值,而後賦值給PASSWD變量,並經過-p參數向用戶顯示一段提示信息,告訴用戶正在輸入的內容即將做爲帳戶密碼。在執行該腳本後,會自動使用從列表文件users.txt中獲取到全部的用戶名稱,而後逐一使用「id 用戶名」命令查看用戶的信息,並使用$?判斷這條命令是否執行成功,也就是判斷該用戶是否已經存在。
須要多說一句,/dev/null是一個被稱做Linux黑洞的文件,把輸出信息重定向到這個文件等同於刪除數據(相似於沒有回收功能的垃圾箱),可讓用戶的屏幕窗口保持簡潔
[root@linuxprobe ~]# vim Guess.sh
使用多分支的if條件測試語句與while條件循環語句,編寫一個用來猜想數值大小的腳本Guess.sh。該腳本使用$RANDOM變量來調取出一個隨機的數值(範圍爲0~32767),將這個隨機數對1000進行取餘操做,並使用expr命令取得其結果,再用這個數值與用戶經過read命令輸入的數值進行比較判斷。這個判斷語句分爲三種狀況,分別是判斷用戶輸入的數值是等於、大於仍是小於使用expr命令取得的數值。當前,如今這些內容不是重點,咱們當前要關注的是while條件循環語句中的條件測試始終爲true,所以判斷語句會無限執行下去,直到用戶輸入的數值等於expr命令取得的數值後,這二者相等以後才運行exit 0命令,終止腳本的執行。
[root@linuxprobe ~]# vim Checkkeys.sh
[root@linuxprobe ~]# at 23:30
at > systemctl restart httpd at > #此處請同時按下Ctrl+d來結束編寫計劃任務 job 3 at Mon Apr 27 23:30:00 2015 [root@linuxprobe ~]# at -l 3 Mon Apr 27 23:30:00 2016 a root
一次性計劃任務只執行一次,通常用於知足臨時的工做需求。咱們能夠用at命令實現這種功能,只須要寫成「at 時間」的形式就能夠。若是想要查看已設置好但還未執行的一次性計劃任務,可使用「at -l」命令;要想將其刪除,能夠用「atrm 任務序號」。在使用at命令來設置一次性計劃任務時,默認採用的是交互式方法。例如,使用上述命令將系統設置爲在今晚23:30分自動重啓網站服務。
[root@linuxprobe ~]# echo "systemctl restart httpd" | at 23:30
job 4 at Mon Apr 27 23:30:00 2015
若是咱們但願Linux系統可以週期性地、有規律地執行某些具體的任務,那麼Linux系統中默認啓用的crond服務簡直再適合不過了。建立、編輯計劃任務的命令爲「crontab -e」,查看當前計劃任務的命令爲「crontab -l」,刪除某條計劃任務的命令爲「crontab -r」。另外,若是是以管理員的身份登陸的系統,還能夠在crontab命令中加上-u參數來編輯他人的計劃任務。
口訣「分、時、日、月、星期 命令」。這是使用crond服務設置任務的參數格式(其格式見表)。須要注意的是,若是有些字段沒有設置,則須要使用星號(*)佔位,如圖所示。
分鐘 | 取值爲0~59的整數 |
小時 | 取值爲0~23的任意整數 |
日期 | 取值爲1~31的任意整數 |
月份 | 取值爲1~12的任意整數 |
星期 | 取值爲0~7的任意整數,其中0與7均爲星期日 |
命令 | 要執行的命令或程序腳本 |
計劃任務中的「分」字段必須有數值,絕對不能爲空或是*號,而「日」和「星期」字段不能同時使用,不然就會發生衝突。
假設在每週1、3、五的凌晨3點25分,都須要使用tar命令把某個網站的數據目錄進行打包處理,使其做爲一個備份文件。咱們可使用crontab -e命令來建立計劃任務。爲本身建立計劃任務無需使用-u參數,具體的實現效果的參數如crontab -l命令結果所示:
[root@linuxprobe ~]# crontab -e
no crontab for root - using an empty one 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服務中須要同時包含多條計劃任務的命令語句,應每行僅寫一條。例如咱們再添加一條計劃任務,它的功能是每週至週五的凌晨1點鐘自動清空/tmp目錄內的全部文件。尤爲須要注意的是,在crond服務的計劃任務參數中,全部命令必定要用絕對路徑的方式來寫,若是不知道絕對路徑,請用whereis命令進行查詢,rm命令路徑爲下面輸出信息中加粗部分。
[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/*