Linux就該這麼學04學習筆記

今天開始學習,開始作筆記,但願本身能堅持下去html

參考連接:https://www.linuxprobe.com/chapter-04.htmllinux

vim編輯器

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
?字符串 從光標處向前搜索該字符串
/字符串 從光標處向後搜索該字符串

 

vim實驗

1.vim practice.txt

2.配置主機名稱

3.配置網卡信息

4.配置yum倉庫

 

 

2.shell腳本

簡單腳本

[root@localhost ~]# cat example.sh 
#!/bin/bash #告訴系統使用哪一種shell解釋器執行該腳本 pwd ls -al

 

[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
#!/bin/bash echo "當前腳本名稱爲$0" echo "總共有$#個參數,分別是$*。" echo "第1個參數爲$1,第5個爲$5。" [root@linuxprobe ~]# sh example.sh one two three four five six 當前腳本名稱爲example.sh 總共有6個參數,分別是one two three four five six。 第1個參數爲one,第5個爲five。

 

判斷用戶的參數

文件測試語句

返回值爲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 判斷字符串內容是否爲空

 

流程控制語句

if條件測試語句

 

[root@linuxprobe ~]# vim mkcdrom.sh
#!/bin/bash DIR="/media/cdrom" if [ ! -e $DIR ] then mkdir -p $DIR fi

判斷/media/cdrom文件是否存在,若存在就結束條件判斷和整個Shell腳本,反之則去建立這個目錄

 

 

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

使用雙分支的if條件語句來驗證某臺主機是否在線,而後根據返回值的結果,要麼顯示主機在線信息,要麼顯示主機不在線信息。這裏的腳本主要使用ping命令來測試與對方主機的網絡聯通性,而Linux系統中的ping命令不像Windows同樣嘗試4次就結束,所以爲了不用戶等待時間過長,須要經過-c參數來規定嘗試的次數,並使用-i參數定義每一個數據包的發送間隔,以及使用-W參數定義等待超時時間。

 

[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 Excellent" 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 Excellent [root@linuxprobe ~]# bash chkscore.sh Enter your score(0-100):80 80 is Pass

使用多分支的if條件語句來判斷用戶輸入的分數在哪一個成績區間內,而後輸出如Excellent、Pass、Fail等提示信息。在Linux系統中,read是用來讀取用戶輸入信息的命令,可以把接收到的用戶輸入信息賦值給後面的指定變量,-p參數用於向用戶顯示必定的提示信息。在下面的腳本示例中,只有當用戶輸入的分數大於等於85分且小於等於100分,才輸出Excellent字樣;若分數不知足該條件(即匹配不成功),則繼續判斷分數是否大於等於70分且小於等於84分,若是是,則輸出Pass字樣;若兩次都落空(即兩次的匹配操做都失敗了),則輸出Fail字樣

for條件循環語句

 

[root@linuxprobe ~]# 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

編寫Shell腳本Example.sh。在腳本中使用read命令讀取用戶輸入的密碼值,而後賦值給PASSWD變量,並經過-p參數向用戶顯示一段提示信息,告訴用戶正在輸入的內容即將做爲帳戶密碼。在執行該腳本後,會自動使用從列表文件users.txt中獲取到全部的用戶名稱,而後逐一使用「id 用戶名」命令查看用戶的信息,並使用$?判斷這條命令是否執行成功,也就是判斷該用戶是否已經存在。

須要多說一句,/dev/null是一個被稱做Linux黑洞的文件,把輸出信息重定向到這個文件等同於刪除數據(相似於沒有回收功能的垃圾箱),可讓用戶的屏幕窗口保持簡潔

while條件循環語句

 

[root@linuxprobe ~]# vim 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 "您總共猜想了 $TIMES 次" exit 0 elif [ $INT -gt $PRICE ] ; then echo "過高了!" else echo "過低了!" fi done

使用多分支的if條件測試語句與while條件循環語句,編寫一個用來猜想數值大小的腳本Guess.sh。該腳本使用$RANDOM變量來調取出一個隨機的數值(範圍爲0~32767),將這個隨機數對1000進行取餘操做,並使用expr命令取得其結果,再用這個數值與用戶經過read命令輸入的數值進行比較判斷。這個判斷語句分爲三種狀況,分別是判斷用戶輸入的數值是等於、大於仍是小於使用expr命令取得的數值。當前,如今這些內容不是重點,咱們當前要關注的是while條件循環語句中的條件測試始終爲true,所以判斷語句會無限執行下去,直到用戶輸入的數值等於expr命令取得的數值後,這二者相等以後才運行exit 0命令,終止腳本的執行。

 

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鍵確認:^[[15~ 您輸入的是 空格、功能鍵或其餘控制字符。

 

計劃任務服務程序

 

[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/*
相關文章
相關標籤/搜索