1. 程式人生 > 實用技巧 >linux就該這麼學--課程第五天

linux就該這麼學--課程第五天

學習內容

  Vim文字編輯器

  編寫shell指令碼

  流程控制語句

  計劃任務服務程式

1. Vim文字編輯器

  1.1 三種模式:

    命令模式:控制游標移動,可對文字進行復制、貼上、刪除和查詢等工作。

    輸入模式:正常的文字錄入。

    末行模式:儲存或退出文件,以及設定編輯環境。

    

  

    Vim中常用的命令

命令 作用
dd 刪除(剪下)游標所在整行
5dd 刪除(剪下)從游標處開始的5行
yy 複製游標所在整行
5yy 複製從游標處開始的5行
n 顯示搜尋命令定位到的下一個字串
N 顯示搜尋命令定位到的上一個字串
u 撤銷上一步的操作
p 將之前刪除(dd)或複製(yy)過的資料貼上到游標後面

    末行模式中可用的命令

命令 作用
: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
?字串 在文字中從下至上搜索該字串
/字串 在文字中從上至下搜尋該字串

      使用a、i、o三個鍵從命令模式切換到輸入模式。

      其中,a鍵與i鍵分別是在游標後面一位和游標當前位置切換到輸入模式,

         o鍵則是在游標的下面再建立一個空行,此時可敲擊a鍵進入到編輯器的輸入模式

  1.2 配置主機名稱

    為了便於在區域網中查詢某臺特定的主機,或者對主機進行區分,除了要有IP地址外,還要為主機配置一個主機名,主機之間可以通過這個類似於域名的名稱來相互訪問。在Linux系統中,主機名大多儲存在/etc/hostname檔案中,接下來將/etc/hostname檔案的內容修改為“ytt.com”

    第1步

:使用Vim編輯器修改“/etc/hostname”主機名稱檔案。

    第2步:把原始主機名稱刪除後追加“ytt.com”。注意,使用Vim編輯器修改主機名稱檔案後,要在末行模式下執行:wq!命令才能儲存並退出文件。

    第3步:儲存並退出文件,然後使用hostname命令檢查是否修改成功。

    hostname命令用於檢視當前的主機名稱,但有時主機名稱的改變不會立即同步到系統中,所以如果發現修改完成後還顯示原來的主機名稱,可重啟虛擬機器後再行檢視: 命令列中輸入 hostname 即可

  1.2 配置網絡卡資訊

    網絡卡IP地址配置的是否正確是兩臺伺服器是否可以相互通訊的前提。在Linux系統中,一切都是檔案,因此配置網路服務的工作其實就是在編輯網絡卡配置檔案.

    在RHEL 5、RHEL 6中,網絡卡配置檔案的字首為eth,第1塊網絡卡為eth0,第2塊網絡卡為eth1;以此類推。而在RHEL 7中,網絡卡配置檔案的字首則以ifcfg開始,加上網絡卡名稱共同組成了網絡卡配置檔案的名字,例如ifcfg-eno16777736;好在除了檔名變化外也沒有其他大的區別。

    現在有一個名稱為ifcfg-eno16777736的網絡卡裝置,我們將其配置為開機自啟動,並且IP地址、子網、閘道器等資訊由人工指定,其步驟應該如下所示。

    第1步:首先切換到/etc/sysconfig/network-scripts目錄中(存放著網絡卡的配置檔案)。

    第2步:使用Vim編輯器修改網絡卡檔案ifcfg-eno16777736,逐項寫入下面的配置引數並儲存退出。由於每臺裝置的硬體及架構是不一樣的,因此請讀者使用ifconfig命令自行確認各自網絡卡的預設名稱。

    第3步:重啟網路服務並測試網路是否聯通。

    進入到網絡卡配置檔案所在的目錄,然後編輯網絡卡配置檔案,在其中填入下面的資訊:

    

    執行重啟網絡卡裝置的命令(在正常情況下不會有提示資訊),然後通過ping命令測試網路能否聯通。由於在Linux系統中ping命令不會自動終止,因此需要手動按下Ctrl-c鍵來強行結束程序。

  1.4 配置Yum倉庫

    Yum軟體倉庫的作用是為了進一步簡化RPM管理軟體的難度以及自動分析所需軟體包及其依賴關係的技術。可以把Yum想象成是一個碩大的軟體倉庫,裡面儲存有幾乎所有常用的工具,而且只需要說出所需的軟體包名稱,系統就會自動為您搞定一切。

    第1步:進入到/etc/yum.repos.d/目錄中(因為該目錄存放著Yum軟體倉庫的配置檔案)。

    第2步:使用Vim編輯器建立一個名為rhel7.repo的新配置檔案(檔名稱可隨意,但字尾必須為.repo),逐項寫入下面加粗的配置引數並儲存退出(不要寫後面的中文註釋)。

[rhel-media]:Yum軟體倉庫唯一識別符號,避免與其他倉庫衝突。

name=linuxprobe:Yum軟體倉庫的名稱描述,易於識別倉庫用處。

baseurl=file:///media/cdrom:提供的方式包括FTP(ftp://..)、HTTP(http://..)、本地(file:///..)。

enabled=1:設定此源是否可用;1為可用,0為禁用。

gpgcheck=1:設定此源是否校驗檔案;1為校驗,0為不校驗。

gpgkey=file:///media/cdrom/RPM-GPG-KEY-redhat-release:若上面引數開啟校驗,那麼請指定公鑰檔案地址。

    第3步:按配置引數的路徑掛載光碟,並把光碟掛載資訊寫入到/etc/fstab檔案中。

    第4步:使用“yum install httpd -y”命令檢查Yum軟體倉庫是否已經可用。

    進入/etc/yum.repos.d目錄中後建立Yum配置檔案:

      

    建立掛載點後進行掛載操作,並設定成開機自動掛載(詳見第6章)。嘗試使用Yum軟體倉庫來安裝Web服務,出現Complete!則代表配置正確:

 

2. 編寫shell指令碼

  2.1 接收使用者的引數

    Linux系統重大shell指令碼語言內設了用於接收引數的變數,變數之間可以使用空格間隔。

    $0對應的是當前Shell指令碼程式的名稱,

    $#對應的是總共有幾個引數,

    $*對應的是所有位置的引數值,

    $?對應的是顯示上一次命令的執行返回值,

    $1、$2、$3……則分別對應著第N個位置的引數值

    

  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。

  2.2 判斷使用者的引數

    Shell指令碼中的條件測試語法可以判斷表示式是否成立,若條件成立則返回數字0,否則便返回其他隨機數值。條件測試語法的執行格式如下圖所示。切記,條件表示式兩邊均應有一個空格

    

    按照測試物件來劃分,條件測試語句可以分為4種:

      檔案測試語句;

      邏輯測試語句;

      整數值比較語句;

      字串比較語句。

    檔案測試即使用指定條件來判斷檔案是否存在或許可權是否滿足等情況的運算子,具體的引數如表

操作符 作用
-d 測試檔案是否為目錄型別
-e 測試檔案是否存在
-f 判斷是否為一般檔案
-r 測試當前使用者是否有許可權讀取
-w 測試當前使用者是否有許可權寫入
-x 測試當前使用者是否有許可權執行

    使用檔案測試語句來判斷/etc/fstab是否為一個目錄型別的檔案,然後通過Shell直譯器的內設$?變數顯示上一條命令執行後的返回值。如果返回值為0,則目錄存在;如果返回值為非零的值,則意味著目錄不存在:

    

    再使用檔案測試語句來判斷/etc/fstab是否為一般檔案,如果返回值為0,則代表檔案存在,且為一般檔案:

    

    邏輯"與&","或||","非!"

    

    命令A && 命令B || 命令C

    若A為真,則執行B; 反之執行C

  整數比較運算子僅是對數字的操作,不能將數字與字串、檔案等內容一起操作,而且不能想當然地使用日常生活中的等號、大於號、小於號等來判斷。因為等號與賦值命令符衝突,大於號和小於號分別與輸出重定向命令符和輸入重定向命令符衝突。因此一定要使用規範的整數比較運算子來進行操作。可用的整數比較運算子如表

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

    

  字串比較語句用於判斷測試字串是否為空值,或兩個字串是否相同。它經常用來判斷某個變數是否未被定義(即內容為空值),理解起來也比較簡單。字串比較中常見的運算子如表

操作符 作用
= 比較字串內容是否相同
!= 比較字串內容是否不同
-z 判斷字串內容是否為空

3. 流程控制語句

  3.1 if條件測試語句

   

  

  3.2 for條件迴圈語句

  

  3.3 while條件迴圈語句

   

  3.4 case條件測試語句

    

4. 計劃任務服務程式

  計劃任務分為一次性計劃任務與長期性計劃任務:

    一次性計劃任務:今晚11點30分開啟網站服務。

    長期性計劃任務:每週一的凌晨3點25分把/home/wwwroot目錄打包備份為backup.tar.gz。

  4.1 at命令

  一次性計劃任務只執行一次,一般用於滿足臨時的工作需求。可以用at命令實現這種功能,只需要寫成“at 時間”的形式就可以。

  如果想要檢視已設定好但還未執行的一次性計劃任務,可以使用“at -l”命令;

  要想將其刪除,可以用“atrm 任務序號”。

  使用at命令來設定一次性計劃任務時,預設採用的是互動式方法。

  例如,使用下述命令將系統設定為在今晚23:30分自動重啟網站服務。

  

  4.2 crontab命令

    希望Linux系統能夠週期性地、有規律地執行某些具體的任務,那麼Linux系統中預設啟用的crond服務簡直再適合不過了。

    建立、編輯計劃任務的命令為“crontab -e”,

    檢視當前計劃任務的命令為“crontab -l”,

    刪除某條計劃任務的命令為“crontab -r”。

    另外,如果您是以管理員的身份登入的系統,還可以在crontab命令中加上-u引數來編輯他人的計劃任務。

    需要說明的是,除了用逗號(,)來分別表示多個時間段,

    例如“8,9,12”表示8月、9月和12月。還可以用減號(-)來表示一段連續的時間週期(例如欄位“日”的取值為“12-15”,則表示每月的12~15日)。以及用除號(/)表示執行任務的間隔時間(例如“*/2”表示每隔2分鐘執行一次任務)。

    如果在crond服務中需要同時包含多條計劃任務的命令語句,應每行僅寫一條。

    例如我們再新增一條計劃任務,它的功能是每週一至週五的凌晨1點鐘自動清空/tmp目錄內的所有檔案。尤其需要注意的是,在crond服務的計劃任務引數中,所有命令一定要用絕對路徑的方式來寫,如果不知道絕對路徑,請用whereis命令進行查詢,rm命令路徑為下面輸出資訊中加粗部分。

    注意事項:  

    在crond服務的配置引數中,可以像Shell指令碼那樣以#號開頭寫上註釋資訊,這樣在日後回顧這段命令程式碼時可以快速瞭解其功能、需求以及編寫人員等重要資訊。

    計劃任務中的“分”欄位必須有數值,絕對不能為空或是*號,而“日”和“星期”欄位不能同時使用,否則就會發生衝突。