Linux教程
Linux概述
Linux是一個基於POSIX和Unix的多用戶、多任務、支持多線程和多CPU的性能穩定的操作系統,可免費使用並自由傳播。
Linux繼承了Unix以網絡為核心的設計思想,它同時也是一個類Unix操作系統,能運行主要的Unix工具軟件、應用程序和網絡協議,支持32位及64位硬件,可安裝在比如手機、平板電腦、路由器、台式計算機、超級計算機等各種計算機硬件設備中。
Linux操作系統最初由一位名為Linus Torvalds(林納斯 托瓦茲)的芬蘭赫爾辛基大學的學生編制內核,隨后由全世界各地的成千上萬的程序員設計和實現。其目的是建立不受任何商品化軟件的版權制約的、全世界都能自由使用的類Unix兼容產品。
Linux教程
W3Cschool提供的 Linux教程主要是為初學Linux的學員提供基礎的入門知識,學員在學習Linux知識之前,需要對硬件知識有大概的了解,這樣便於更快的理解掌握教程中的內容。本教程的內容分為三部分:
第一部分 Linux的基礎入門知識,包括:Linux的安裝、Linux系統目錄結構、Linux文件與目錄管理等內容;
第二部分 Shell語言的知識內容,包括:Shell變量、Shell數組、Shell流程控制等內容;
第三部分 Linux相關的參考手冊,包括:Linux命令大全、Nginx安裝配置等。
學習完本教程后,你可以了解到Linux操作系統的基礎知識,進行簡單的Linux命令操作。另外,學習本教程時,建議配合實踐進行鞏固練習,以便能更好的理解記憶。
Linux學習建議
- Linux學習建議概述:
1、從較為淺顯的Linux入門知識開始,類似《Linux教程》等,並在自己的電腦上安裝Linux系統,進行實操訓練,鞏固自己的基礎知識;
2、尋找Linux進階教程,同時配合進行反復多次的實踐訓練,熟練掌握Linux的編程技術;
3、根據自身的從業方向,選擇相應的高階Linux知識進行學習、實踐。
- Linux學習方法參考:
- Linux學習參考資料:
1、入門:《Linux教程》
2、進階:《鳥哥的Linux私房菜》
3、高階:《Linux內核技術手冊》
Linux開發工具
1、Eclipse:現在較為常用的編輯器之一,具備代碼高亮和智能提速等強大功能。
2、Light Table:提供直觀易用的編程界面,方便定制,並擁有一個強大的插件管理器。
3、Sublime Text:一個較為簡單、方便的編輯器。
4、Dart Editor:支持多種開發語言,樹狀結構分列各類函數、類、方法,便於代碼編寫。
Linux相關鏈接
Linux官網:http://www.linux.org/ (此網站經常顯示服務器錯誤)
Linux下載:http://www.linuxdown.net/soft/
Linux API文檔:http://download.csdn.net/detail/a7320760/3617981
Linux教程:http://www.w3cschool.cn/linux
Linux問答:http://www.w3cschool.cn/topic/linux
Linux特點
- 源碼的開放化
Linux操作系統是免費的,並且開發人員可以自由獲取使用Linux源代碼,開發者可以針對不同的應用需求對源碼進行修改和優化,極大的便捷了嵌入式系統的開發,這也是其他操作系統無法做到的。
- 支持多用戶及任務並行
Linux系統可支持多名用戶在線使用,每個用戶之間互不影響,有較好的保密性;Linux可同時執行多個程序,並且各個程序的運行是獨立的。
- 良好的安全性及穩定性
Linux的內核繼承了Unix系統的穩定、高效的特性,這一特性已在各領域得到了大量的驗證。同時Linux采取了如對讀、寫控制、審計跟蹤、核心授權等多種安全技術,保障用戶開發環境的安全。
- 廣泛的硬件平台支持
Linux可以在多種硬件平台上進行運行,如在帶有x86、680x0、SPARC、Alpha等大多數主流的處理器平台均可以運行。
- 移植的便捷性
Linux系統是一個可移植的操作系統,它的內核設計非常精巧,可依據嵌入式的需求,實時的將某些模塊從內核插入或移除。而Linux移植也就十分便捷,從一個平台轉移到另一個平台后仍能保持自身的正常運行。
更新記錄:
-
Linux 安裝 02-03 14:47
-
Linux 正則表達式 12-06 17:50
-
Linux 學習簡介 11-23 11:47
-
Linux 忘記密碼解決方法 10-11 15:33
-
Linux 文件與目錄管理 10-11 15:29
-
Linux 磁盤管理 10-11 15:26
-
Shell 教程 10-11 15:22
-
Linux vi/vim 10-11 15:15
-
Shell 運算符 10-11 14:53
-
Shell test命令 10-11 14:50
Linux 安裝
本章節我們將為大家介紹Linux的安裝。
本章節以 centos6.4 為例。
centos6.4 下載地址:
注:建議安裝64位Linux系統。
接下來你需要將下載的Linux系統刻錄成光盤或U盤。
注:你也可以在Window上安裝VMware虛擬機來安裝Linux系統。
Linux 安裝步驟
1、首先,使用光驅或U盤或你下載的Linux ISO文件進行安裝。
界面說明:
Install or upgrade an existing system 安裝或升級現有的系統
install system with basic video driver 安裝過程中采用基本的顯卡驅動
Rescue installed system 進入系統修復模式
Boot from local drive 退出安裝從硬盤啟動
Memory test 內存檢測
注:用聯想E49安裝時選擇第一項安裝時會出現屏幕顯示異常的問題,后改用第二項安裝時就沒有出現問題
2、介質直接"skip"就可以了
3、出現引導界面,點擊"next"
4、選中"English(English)"否則會有部分亂碼問題
5、鍵盤布局選擇"U.S.English"
6、選擇"Basic Storage Devies"點擊"Next"
7、詢問是否忽略所有數據,新電腦安裝系統選擇"Yes,discard any data"
8、Hostname填寫格式"英文名.姓"
9、網絡設置安裝圖示順序點擊就可以了
10、時區可以在地圖上點擊,選擇"shanghai"並取消System clock uses UTC前面的對勾
11、設置root的密碼
12、硬盤分區,一定要按照圖示點選
13、調整分區,必須要有/home這個分區,如果沒有這個分區,安裝部分軟件會出現不能安裝的問題
14、詢問是否格式化分區
15、將更改寫入到硬盤
16、引導程序安裝位置
17、最重要的一步,也是本教程最關鍵的一步,也是其他教程沒有提及的一步,按圖示順序點擊
18、取消以下內容的所有選項
Applications
Base System
Servers
並對Desktops進行如下設置
即取消如下選項:
Desktop Debugging and Performance Tools
Desktop Platform
Remote Desktop Clients
Input Methods中僅保留ibus-pinyin-1.3.8-1.el6.x86_64,其他的全部取消
19、選中Languages,並選中右側的Chinese Support然后點擊紅色區域
20、調整完成后如下圖所示
21、至此,一個最精簡的桌面環境就設置完成了,
22、安裝完成,重啟
23、重啟之后,的License Information
24、Create User
Username:填寫您的英文名(不帶.姓)
Full Name:填寫您的英文名.姓(首字母大寫)
25、"Date and Time" 選中 "Synchronize data and time over the network"
Finsh之后系統將重啟
26、第一次登錄,登錄前不要做任何更改,這個很重要!!!登錄之后緊接着退出
第二次登錄,選擇語言,在紅色區域選擇下拉小三角,選other,選中"漢語(中國)"
27、登錄之后,請一定按照如下順序點擊!
至此,CentOS安裝完成,如有其他問題,請隨時與我聯系!!
Linux 正則表達式
這部分內容可以說是學習shell腳本之前必學的內容。如果你這部分內容學的越好,那么你的shell腳本編寫能力就會越強。所以不要嫌這部分內容啰嗦,也不要怕麻煩,要用心學習。一定要多加練習,練習多了就能熟練掌握了。
在計算機科學中,正則表達式是這樣解釋的:它是指一個用來描述或者匹配一系列符合某個句法規則的字符串的單個字符串。在很多文本編輯器或其他工具里,正則表達式通常被用來檢索和/或替換那些符合某個模式的文本內容。許多程序設計語言都支持利用正則表達式進行字符串操作。對於系統管理員來講,正則表達式貫穿在我們的日常運維工作中,無論是查找某個文檔,抑或查詢某個日志文件分析其內容,都會用到正則表達式。
其實正則表達式,只是一種思想,一種表示方法。只要我們使用的工具支持表示這種思想那么這個工具就可以處理正則表達式的字符串。常用的工具有grep, sed, awk 等,下面筆者就介紹一下這三種工具的使用方法。
【grep / egrep】
筆者在前面的內容中多次提到並用到grep命令,可見它的重要性。所以好好學習一下這個重要的命令吧。你要知道的是grep連同下面講的sed, awk都是針對文本的行才操作的。
語法: grep [-cinvABC] ‘word’ filename
-c :打印符合要求的行數
-i :忽略大小寫
-n :在輸出符合要求的行的同時連同行號一起輸出
-v :打印不符合要求的行
-A :后跟一個數字(有無空格都可以),例如 –A2則表示打印符合要求的行以及下面兩行
-B :后跟一個數字,例如 –B2 則表示打印符合要求的行以及上面兩行
-C :后跟一個數字,例如 –C2 則表示打印符合要求的行以及上下各兩行
以下,筆者舉幾個小例子幫助你好好掌握這個grep工具的用法。
a. 過濾出帶有某個關鍵詞的行並輸出行號
b. 過濾不帶有某個關鍵詞的行,並輸出行號
c. 過濾出所有包含數字的行
在前面也提到過這個”[ ]”的應用,如果是數字的話就用[0-9]這樣的形式,當然有時候也可以用這樣的形式[15]即只含有1或者5,注意,它不會認為是15。如果要過濾出數字以及大小寫字母則要這樣寫[0-9a-zA-Z]。另外[ ]還有一種形式,就是[^字符] 表示除[ ]內的字符之外的字符。
這就表示篩選包含oo字符串,但是不包含r字符。
d. 過濾出文檔中以某個字符開頭或者以某個字符結尾的行
在正則表達式中,”^”表示行的開始,”$”表示行的結尾,那么空行則表示”^$”,如果你只想篩選出非空行,則可以使用 “grep -v ‘^$’ filename”得到你想要的結果。現在想一下,如何打印出不以英文字母開頭的行呢?
e. 過濾任意一個字符與重復字符
“.”表示任意一個字符,上例中,就是把符合r與o之間有兩個任意字符的行過濾出來。
“*”表示零個或多個前面的字符。
‘ooo’ 表示oo, ooo, oooo … 或者更多的’o’。現在你是否想到了’.’ 這個組合表示什么意義?
‘.*’表示零個或多個任意字符,空行也包含在內。
f. 指定要過濾字符出現的次數
這里用到了{ },其內部為數字,表示前面的字符要重復的次數。上例中表示包含有兩個o 即’oo’的行。注意,{ }左右都需要加上脫意字符’\’。另外,使用{ }我們還可以表示一個范圍的,具體格式是 ‘\’其中n1<n2,表示重復n1到n2次前面的字符,n2還可以為空,則表示大於等於n1次。
上面部分講的grep,另外筆者常常用到egrep這個工具,簡單點講,后者是前者的擴展版本,我們可以用egrep完成grep不能完成的工作,當然了grep能完成的egrep完全可以完成。如果你嫌麻煩,egrep了解一下即可,因為grep的功能已經足夠可以勝任你的日常工作了。下面筆者介紹egrep不用於grep的幾個用法。為了試驗方便,筆者把test.txt 編輯成如下內容:
rot:x:0:0:/rot:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
operator:x:11:0:operator:/rooot:/sbin/nologin
roooot:x:0:0:/rooooot:/bin/bash
1111111111111111111111111111111
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
a. 篩選一個或一個以上前面的字符
和grep 不同的是,egrep這里是使用’+’的。
b. 篩選零個或一個前面的字符
c. 篩選字符串1或者字符串2
中間有一個’|’表示或者的意思,筆者用這個用的很多,所以這個你最好記一下。
d. egrep中’( )’的應用
用’( )’表示一個整體,例如(oo)+就表示1個’oo’或者多個’oo’
【sed 工具的使用】
grep 工具的功能其實還不夠強大,其實說白了,grep實現的只是查找功能,而它卻不能實現把查找的內容替換掉。以前用vim的時候,可以查找也可以替換,但是只局限於在文本內部來操作,而不能輸出到屏幕上。sed工具以及下面要講的awk工具就能實現把替換的文本輸出到屏幕上的功能了,而且還有其他更豐富的功能。sed和awk都是流式編輯器,是針對文檔的行來操作的。
a. 打印某行 sed -n ‘n’p filename 單引號內的n是一個數字,表示第幾行
b. 打印多行打印整個文檔用 -n ‘1,$’p
c. 打印包含某個字符串的行
上面grep中使用的特殊字符,如’^’, ‘$’, ‘.’, ‘*’等同樣也能在sed中使用。
d. -e 可以實現多個行為
e. 刪除某行或者多行
‘d’ 這個字符就是刪除的動作了,不僅可以刪除指定的單行以及多行,而且還可以刪除匹配某個字符的行,另外還可以刪除從某一行一直到文檔末行。
f. 替換字符或字符串
Linux 學習簡介
Linux 英文解釋為 Linux is not Unix。
誰適合閱讀?
本教程針對的是Linux服務器方面的知識,適合從事運維或后端開發的人員閱讀。
需要具備的知識?
如果你熟悉操作系統方面的知識,相信你會很快學會Linux。
本教程將於Linux的發行版本Centos為例來為大家介紹Linux系統的應用。
Linux 忘記密碼解決方法
很多朋友經常會忘記Linux系統的root密碼,linux系統忘記root密碼的情況該怎么辦呢?重新安裝系統嗎?當然不用!進入單用戶模式更改一下root密碼即可。
步驟如下:
重啟linux系統
3 秒之內要按一下回車,出現如下界面
然后輸入e
在 第二行最后邊輸入 single,有一個空格。具體方法為按向下尖頭移動到第二行,按"e"進入編輯模式
在后邊加上single 回車
最后按"b"啟動,啟動后就進入了單用戶模式了
此時已經進入到單用戶模式了,你可以更改root密碼了。更密碼的命令為 passwd
【使用系統安裝光盤的救援模式】
救援模式即rescue ,這個模式主要是應用於,系統無法進入的情況。如,grub損壞或者某一個配置文件修改出錯。如何使用rescue模式呢?
光盤啟動,按F5 進入rescue模式
輸入linux rescue 回車
選擇語言,筆者建議你選擇英語
選擇us 鍵盤
這里問你是否啟動網絡,有時候可能會聯網調試。我們選no
這里告訴我們,接下來會把系統掛載在/mnt/sysimage 中。
其中有三個選項:
- Continue 就是掛載后繼續下一步。
- Read-Only 掛載成只讀,這樣更安全,有時文件系統損壞時,只讀模式會防止文件系統近一步損壞。
- Skip就是不掛載,進入一個命令窗口模式。
這里我們選擇Continue。
至此,系統已經掛載到了/mnt/sysimage中。接下來回車,輸入chroot /mnt/sysimage 進入管理員環境。
提示: 其實也可以到rescue模式下更改root的密碼的。這個rescue模式和windows PE系統很相近。
當運行了chroot /mnt/sysimage/ 后,再ls 看到目錄結構和原來系統中的目錄結構是一樣的。
沒錯!現在的環境和原來系統的環境是一模一樣的。你可以輸入exit 或者按Ctrl + D退出這個環境。然后你再ls 看一下
這個目錄其實就是rescue模式下的目錄結構,而我們的系統文件全部在 /mnt/sysimage目錄下。
Linux 文件與目錄管理
我們知道Linux的目錄結構為樹狀結構,最頂級的目錄為根目錄 /。
其他目錄通過掛載可以將它們添加到樹中,通過解除掛載可以移除它們。
在開始本教程前我們需要先知道什么是絕對路徑與相對路徑。
- 絕對路徑:
路徑的寫法,由根目錄 / 寫起,例如: /usr/share/doc 這個目錄。 - 相對路徑:
路徑的寫法,不是由 / 寫起,例如由 /usr/share/doc 要到 /usr/share/man 底下時,可以寫成: cd ../man 這就是相對路徑的寫法啦!
處理目錄的常用命令
接下來我們就來看幾個常見的處理目錄的命令吧:
- ls: 列出目錄
- cd:切換目錄
- pwd:顯示目前的目錄
- mkdir:創建一個新的目錄
- rmdir:刪除一個空的目錄
- cp: 復制文件或目錄
- rm: 移除文件或目錄
你可以使用 man [命令] 來查看各個命令的使用文檔,如 :man cp。
ls (列出目錄)
在Linux系統當中, ls 命令可能是最常被運行的。
語法:
[root@www ~]# ls [-aAdfFhilnrRSt] 目錄名稱 [root@www ~]# ls [--color={never,auto,always}] 目錄名稱 [root@www ~]# ls [--full-time] 目錄名稱
選項與參數:
- -a :全部的文件,連同隱藏檔( 開頭為 . 的文件) 一起列出來(常用)
- -d :僅列出目錄本身,而不是列出目錄內的文件數據(常用)
- -l :長數據串列出,包含文件的屬性與權限等等數據;(常用)
將家目錄下的所有文件列出來(含屬性與隱藏檔)
[root@www ~]# ls -al ~
cd (切換目錄)
cd是Change Directory的縮寫,這是用來變換工作目錄的命令。
語法:
cd [相對路徑或絕對路徑]
#使用 mkdir 命令創建w3cschool.cn目錄 [root@www ~]# mkdir w3cschool.cn #使用絕對路徑切換到w3cschool.cn目錄 [root@www ~]# cd /root/w3cschool.cn/ #使用相對路徑切換到w3cschool.cn目錄 [root@www ~]# cd ./w3cschool.cn/ # 表示回到自己的家目錄,亦即是 /root 這個目錄 [root@www w3cschool.cn]# cd ~ # 表示去到目前的上一級目錄,亦即是 /root 的上一級目錄的意思; [root@www ~]# cd ..
接下來大家多操作幾次應該就可以很好的理解 cd 命令的。
pwd (顯示目前所在的目錄)
pwd是Print Working Directory的縮寫,也就是顯示目前所在目錄的命令。
[root@www ~]# pwd [-P] 選項與參數: -P :顯示出確實的路徑,而非使用連結 (link) 路徑。 范例:單純顯示出目前的工作目錄: [root@www ~]# pwd /root <== 顯示出目錄啦~ 范例:顯示出實際的工作目錄,而非連結檔本身的目錄名而已 [root@www ~]# cd /var/mail <==注意,/var/mail是一個連結檔 [root@www mail]# pwd /var/mail <==列出目前的工作目錄 [root@www mail]# pwd -P /var/spool/mail <==怎么回事?有沒有加 -P 差很多~ [root@www mail]# ls -ld /var/mail lrwxrwxrwx 1 root root 10 Sep 4 17:54 /var/mail -> spool/mail # 看到這里應該知道為啥了吧?因為 /var/mail 是連結檔,連結到 /var/spool/mail # 所以,加上 pwd -P 的選項后,會不以連結檔的數據顯示,而是顯示正確的完整路徑啊!
mkdir (創建新目錄)
如果想要創建新的目錄的話,那么就使用mkdir (make directory)吧。
語法:
mkdir [-mp] 目錄名稱
選項與參數:
- -m :配置文件的權限喔!直接配置,不需要看默認權限 (umask) 的臉色~
- -p :幫助你直接將所需要的目錄(包含上一級目錄)遞回創建起來!
范例:請到/tmp底下嘗試創建數個新目錄看看:
[root@www ~]# cd /tmp [root@www tmp]# mkdir test <==創建一名為 test 的新目錄 [root@www tmp]# mkdir test1/test2/test3/test4 mkdir: cannot create directory `test1/test2/test3/test4': No such file or directory <== 沒辦法直接創建此目錄啊! [root@www tmp]# mkdir -p test1/test2/test3/test4
加了這個 -p 的選項,可以自行幫你創建多層目錄!
范例:創建權限為rwx--x--x的目錄
[root@www tmp]# mkdir -m 711 test2 [root@www tmp]# ls -l drwxr-xr-x 3 root root 4096 Jul 18 12:50 test drwxr-xr-x 3 root root 4096 Jul 18 12:53 test1 drwx--x--x 2 root root 4096 Jul 18 12:54 test2
上面的權限部分,如果沒有加上 -m 來強制配置屬性,系統會使用默認屬性。
如果我們使用 -m ,如上例我們給予 -m 711 來給予新的目錄 drwx--x--x 的權限。
rmdir (刪除空的目錄)
語法:
rmdir [-p] 目錄名稱
選項與參數:
- -p :連同上一級『空的』目錄也一起刪除
刪除 w3cschool.cn 目錄
[root@www tmp]# rmdir w3cschool.cn/
范例:將於mkdir范例中創建的目錄(/tmp底下)刪除掉!
[root@www tmp]# ls -l <==看看有多少目錄存在? drwxr-xr-x 3 root root 4096 Jul 18 12:50 test drwxr-xr-x 3 root root 4096 Jul 18 12:53 test1 drwx--x--x 2 root root 4096 Jul 18 12:54 test2 [root@www tmp]# rmdir test <==可直接刪除掉,沒問題 [root@www tmp]# rmdir test1 <==因為尚有內容,所以無法刪除! rmdir: `test1': Directory not empty [root@www tmp]# rmdir -p test1/test2/test3/test4 [root@www tmp]# ls -l <==您看看,底下的輸出中test與test1不見了! drwx--x--x 2 root root 4096 Jul 18 12:54 test2
利用 -p 這個選項,立刻就可以將 test1/test2/test3/test4 一次刪除。
不過要注意的是,這個 rmdir 僅能刪除空的目錄,你可以使用 rm 命令來刪除非空目錄。
cp (復制文件或目錄)
cp 即拷貝文件和目錄。
語法:
[root@www ~]# cp [-adfilprsu] 來源檔(source) 目標檔(destination) [root@www ~]# cp [options] source1 source2 source3 .... directory
選項與參數:
- -a :相當於 -pdr 的意思,至於 pdr 請參考下列說明;(常用)
用root身份,將家目錄下的 .bashrc 復制到 /tmp 下,並更名為 bashr
[root@www ~]# cp ~/.bashrc /tmp/bashrc [root@www ~]# cp -i ~/.bashrc /tmp/bashrc cp: overwrite `/tmp/bashrc'? n <==n不覆蓋,y為覆蓋
rm (移除文件或目錄)
語法:
rm [-fir] 文件或目錄
選項與參數:
- -f :就是 force 的意思,忽略不存在的文件,不會出現警告信息;
- -i :互動模式,在刪除前會詢問使用者是否動作
- -r :遞回刪除啊!最常用在目錄的刪除了!這是非常危險的選項!!!
將剛剛在 cp 的范例中創建的 bashrc 刪除掉!
[root@www tmp]# rm -i bashrc rm: remove regular file `bashrc'? y
如果加上 -i 的選項就會主動詢問喔,避免你刪除到錯誤的檔名!
mv (移動文件與目錄,或修改名稱)
語法:
[root@www ~]# mv [-fiu] source destination [root@www ~]# mv [options] source1 source2 source3 .... directory
選項與參數:
- -f :force 強制的意思,如果目標文件已經存在,不會詢問而直接覆蓋;
- -i :若目標文件 (destination) 已經存在時,就會詢問是否覆蓋!
- -u :若目標文件已經存在,且 source 比較新,才會升級 (update)
復制一文件,創建一目錄,將文件移動到目錄中
[root@www ~]# cd /tmp [root@www tmp]# cp ~/.bashrc bashrc [root@www tmp]# mkdir mvtest [root@www tmp]# mv bashrc mvtest
將某個文件移動到某個目錄去,就是這樣做!
將剛剛的目錄名稱更名為 mvtest2
[root@www tmp]# mv mvtest mvtest2
Linux 文件內容查看
Linux系統中使用以下命令來查看文件的內容:
- cat 由第一行開始顯示文件內容
- tac 從最后一行開始顯示,可以看出 tac 是 cat 的倒著寫!
- nl 顯示的時候,順道輸出行號!
- more 一頁一頁的顯示文件內容
- less 與 more 類似,但是比 more 更好的是,他可以往前翻頁!
- head 只看頭幾行
- tail 只看尾巴幾行
你可以使用 man [命令]來查看各個命令的使用文檔,如 :man cp。
cat
由第一行開始顯示文件內容
語法:
cat [-AbEnTv]
選項與參數:
- -A :相當於 -vET 的整合選項,可列出一些特殊字符而不是空白而已;
- -b :列出行號,僅針對非空白行做行號顯示,空白行不標行號!
- -E :將結尾的斷行字節 $ 顯示出來;
- -n :列印出行號,連同空白行也會有行號,與 -b 的選項不同;
- -T :將 [tab] 按鍵以 ^I 顯示出來;
- -v :列出一些看不出來的特殊字符
檢看 /etc/issue 這個文件的內容:
[root@www ~]# cat /etc/issue CentOS release 6.4 (Final) Kernel \r on an \m
tac
tac與cat命令剛好相反,文件內容從最后一行開始顯示,可以看出 tac 是 cat 的倒着寫!如:
[root@www ~]# tac /etc/issue Kernel \r on an \m CentOS release 6.4 (Final)
nl
顯示行號
語法:
nl [-bnw] 文件
選項與參數:
- -b :指定行號指定的方式,主要有兩種:
-b a :表示不論是否為空行,也同樣列出行號(類似 cat -n);
-b t :如果有空行,空的那一行不要列出行號(默認值); - -n :列出行號表示的方法,主要有三種:
-n ln :行號在螢幕的最左方顯示;
-n rn :行號在自己欄位的最右方顯示,且不加 0 ;
-n rz :行號在自己欄位的最右方顯示,且加 0 ; - -w :行號欄位的占用的位數。
范例一:用 nl 列出 /etc/issue 的內容
[root@www ~]# nl /etc/issue 1 CentOS release 6.4 (Final) 2 Kernel \r on an \m
more
一頁一頁翻動
[root@www ~]# more /etc/man.config # # Generated automatically from man.conf.in by the # configure script. # # man.conf from man-1.6d ....(中間省略).... --More--(28%) <== 重點在這一行喔!你的光標也會在這里等待你的命令
在 more 這個程序的運行過程中,你有幾個按鍵可以按的:
- 空白鍵 (space):代表向下翻一頁;
- Enter :代表向下翻『一行』;
- /字串 :代表在這個顯示的內容當中,向下搜尋『字串』這個關鍵字;
- :f :立刻顯示出檔名以及目前顯示的行數;
- q :代表立刻離開 more ,不再顯示該文件內容。
- b 或 [ctrl]-b :代表往回翻頁,不過這動作只對文件有用,對管線無用。
less
一頁一頁翻動,以下實例輸出/etc/man.config文件的內容:
[root@www ~]# less /etc/man.config # # Generated automatically from man.conf.in by the # configure script. # # man.conf from man-1.6d ....(中間省略).... : <== 這里可以等待你輸入命令!
less運行時可以輸入的命令有:
- 空白鍵 :向下翻動一頁;
- [pagedown]:向下翻動一頁;
- [pageup] :向上翻動一頁;
- /字串 :向下搜尋『字串』的功能;
- ?字串 :向上搜尋『字串』的功能;
- n :重復前一個搜尋 (與 / 或 ? 有關!)
- N :反向的重復前一個搜尋 (與 / 或 ? 有關!)
- q :離開 less 這個程序;
head
取出文件前面幾行
語法:
head [-n number] 文件
選項與參數:
- -n :后面接數字,代表顯示幾行的意思
[root@www ~]# head /etc/man.config
默認的情況中,顯示前面 10 行!若要顯示前 20 行,就得要這樣:
[root@www ~]# head -n 20 /etc/man.config
tail
取出文件后面幾行
語法:
tail [-n number] 文件
選項與參數:
- -n :后面接數字,代表顯示幾行的意思
- -f :表示持續偵測后面所接的檔名,要等到按下[ctrl]-c才會結束tail的偵測
[root@www ~]# tail /etc/man.config # 默認的情況中,顯示最后的十行!若要顯示最后的 20 行,就得要這樣: [root@www ~]# tail -n 20 /etc/man.config
- -d :若來源檔為連結檔的屬性(link file),則復制連結檔屬性而非文件本身;
- -f :為強制(force)的意思,若目標文件已經存在且無法開啟,則移除后再嘗試一次;
- -i :若目標檔(destination)已經存在時,在覆蓋時會先詢問動作的進行(常用)
- -l :進行硬式連結(hard link)的連結檔創建,而非復制文件本身;
- -p :連同文件的屬性一起復制過去,而非使用默認屬性(備份常用);
- -r :遞回持續復制,用於目錄的復制行為;(常用)
- -s :復制成為符號連結檔 (symbolic link),亦即『捷徑』文件;
- -u :若 destination 比 source 舊才升級 destination !
Linux 磁盤管理
Linux磁盤管理好壞管理直接關系到整個系統的性能問題。
Linux磁盤管理常用三個命令為df、du和fdisk。
- df:列出文件系統的整體磁盤使用量
- du:檢查磁盤空間使用量
- fdisk:用於磁盤分區
df
df命令參數功能:檢查文件系統的磁盤空間占用情況。可以利用該命令來獲取硬盤被占用了多少空間,目前還剩下多少空間等信息。
語法:
df [-ahikHTm] [目錄或文件名]
選項與參數:
- -a :列出所有的文件系統,包括系統特有的 /proc 等文件系統;
- -k :以 KBytes 的容量顯示各文件系統;
- -m :以 MBytes 的容量顯示各文件系統;
- -h :以人們較易閱讀的 GBytes, MBytes, KBytes 等格式自行顯示;
- -H :以 M=1000K 取代 M=1024K 的進位方式;
- -T :顯示文件系統類型, 連同該 partition 的 filesystem 名稱 (例如 ext3) 也列出;
- -i :不用硬盤容量,而以 inode 的數量來顯示
實例 1
將系統內所有的文件系統列出來!
[root@www ~]# df Filesystem 1K-blocks Used Available Use% Mounted on /dev/hdc2 9920624 3823112 5585444 41% / /dev/hdc3 4956316 141376 4559108 4% /home /dev/hdc1 101086 11126 84741 12% /boot tmpfs 371332 0 371332 0% /dev/shm
在 Linux 底下如果 df 沒有加任何選項,那么默認會將系統內所有的 (不含特殊內存內的文件系統與 swap) 都以 1 Kbytes 的容量來列出來!
實例 2
將容量結果以易讀的容量格式顯示出來
[root@www ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/hdc2 9.5G 3.7G 5.4G 41% / /dev/hdc3 4.8G 139M 4.4G 4% /home /dev/hdc1 99M 11M 83M 12% /boot tmpfs 363M 0 363M 0% /dev/shm
實例 3
將系統內的所有特殊文件格式及名稱都列出來
[root@www ~]# df -aT Filesystem Type 1K-blocks Used Available Use% Mounted on /dev/hdc2 ext3 9920624 3823112 5585444 41% / proc proc 0 0 0 - /proc sysfs sysfs 0 0 0 - /sys devpts devpts 0 0 0 - /dev/pts /dev/hdc3 ext3 4956316 141376 4559108 4% /home /dev/hdc1 ext3 101086 11126 84741 12% /boot tmpfs tmpfs 371332 0 371332 0% /dev/shm none binfmt_misc 0 0 0 - /proc/sys/fs/binfmt_misc sunrpc rpc_pipefs 0 0 0 - /var/lib/nfs/rpc_pipefs
實例 4
將 /etc 底下的可用的磁盤容量以易讀的容量格式顯示
[root@www ~]# df -h /etc Filesystem Size Used Avail Use% Mounted on /dev/hdc2 9.5G 3.7G 5.4G 41% /
du
inux du命令也是查看使用空間的,但是與df命令不同的是Linux du命令是對文件和目錄磁盤使用的空間的查看,還是和df命令有一些區別的,這里介紹Linux du命令。
語法:
du [-ahskm] 文件或目錄名稱
選項與參數:
- -a :列出所有的文件與目錄容量,因為默認僅統計目錄底下的文件量而已。
- -h :以人們較易讀的容量格式 (G/M) 顯示;
- -s :列出總量而已,而不列出每個各別的目錄占用容量;
- -S :不包括子目錄下的總計,與 -s 有點差別。
- -k :以 KBytes 列出容量顯示;
- -m :以 MBytes 列出容量顯示;
實例 1
列出目前目錄下的所有文件容量
[root@www ~]# du 8 ./test4 <==每個目錄都會列出來 8 ./test2 ....中間省略.... 12 ./.gconfd <==包括隱藏文件的目錄 220 . <==這個目錄(.)所占用的總量
直接輸入 du 沒有加任何選項時,則 du 會分析當前所在目錄的文件與目錄所占用的硬盤空間。
實例 2
將文件的容量也列出來
[root@www ~]# du -a 12 ./install.log.syslog <==有文件的列表了 8 ./.bash_logout 8 ./test4 8 ./test2 ....中間省略.... 12 ./.gconfd 220 .
實例 3
檢查根目錄底下每個目錄所占用的容量
[root@www ~]# du -sm /* 7 /bin 6 /boot .....中間省略.... 0 /proc .....中間省略.... 1 /tmp 3859 /usr <==系統初期最大就是他了啦! 77 /var
通配符 * 來代表每個目錄。
與 df 不一樣的是,du 這個命令其實會直接到文件系統內去搜尋所有的文件數據。
fdisk
fdisk 是 Linux 的磁盤分區表操作工具。
語法:
fdisk [-l] 裝置名稱
選項與參數:
- -l :輸出后面接的裝置所有的分區內容。若僅有 fdisk -l 時, 則系統將會把整個系統內能夠搜尋到的裝置的分區均列出來。
實例 1
列出所有分區信息
[root@AY120919111755c246621 tmp]# fdisk -l Disk /dev/xvda: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000 Device Boot Start End Blocks Id System /dev/xvda1 * 1 2550 20480000 83 Linux /dev/xvda2 2550 2611 490496 82 Linux swap / Solaris Disk /dev/xvdb: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x56f40944 Device Boot Start End Blocks Id System /dev/xvdb2 1 2610 20964793+ 83 Linux
實例 2
找出你系統中的根目錄所在磁盤,並查閱該硬盤內的相關信息
[root@www ~]# df / <==注意:重點在找出磁盤文件名而已 Filesystem 1K-blocks Used Available Use% Mounted on /dev/hdc2 9920624 3823168 5585388 41% / [root@www ~]# fdisk /dev/hdc <==仔細看,不要加上數字喔! The number of cylinders for this disk is set to 5005. There is nothing wrong with that, but this is larger than 1024, and could in certain setups cause problems with: 1) software that runs at boot time (e.g., old versions of LILO) 2) booting and partitioning software from other OSs (e.g., DOS FDISK, OS/2 FDISK) Command (m for help): <==等待你的輸入!
輸入 m 后,就會看到底下這些命令介紹
Command (m for help): m <== 輸入 m 后,就會看到底下這些命令介紹 Command action a toggle a bootable flag b edit bsd disklabel c toggle the dos compatibility flag d delete a partition <==刪除一個partition l list known partition types m print this menu n add a new partition <==新增一個partition o create a new empty DOS partition table p print the partition table <==在屏幕上顯示分割表 q quit without saving changes <==不儲存離開fdisk程序 s create a new empty Sun disklabel t change a partition's system id u change display/entry units v verify the partition table w write table to disk and exit <==將剛剛的動作寫入分割表 x extra functionality (experts only)
離開 fdisk 時按下 q
,那么所有的動作都不會生效!相反的, 按下w
就是動作生效的意思。
Command (m for help): p <== 這里可以輸出目前磁盤的狀態 Disk /dev/hdc: 41.1 GB, 41174138880 bytes <==這個磁盤的文件名與容量 255 heads, 63 sectors/track, 5005 cylinders <==磁頭、扇區與磁柱大小 Units = cylinders of 16065 * 512 = 8225280 bytes <==每個磁柱的大小 Device Boot Start End Blocks Id System /dev/hdc1 * 1 13 104391 83 Linux /dev/hdc2 14 1288 10241437+ 83 Linux /dev/hdc3 1289 1925 5116702+ 83 Linux /dev/hdc4 1926 5005 24740100 5 Extended /dev/hdc5 1926 2052 1020096 82 Linux swap / Solaris # 裝置文件名 啟動區否 開始磁柱 結束磁柱 1K大小容量 磁盤分區槽內的系統 Command (m for help): q
想要不儲存離開嗎?按下 q 就對了!不要隨便按 w 啊!
使用 p
可以列出目前這顆磁盤的分割表信息,這個信息的上半部在顯示整體磁盤的狀態。
磁盤格式化
磁盤分割完畢后自然就是要進行文件系統的格式化,格式化的命令非常的簡單,使用 mkfs
(make filesystem) 命令。
語法:
mkfs [-t 文件系統格式] 裝置文件名
選項與參數:
- -t :可以接文件系統格式,例如 ext3, ext2, vfat 等(系統有支持才會生效)
實例 1
查看 mkfs 支持的文件格式
[root@www ~]# mkfs[tab][tab] mkfs mkfs.cramfs mkfs.ext2 mkfs.ext3 mkfs.msdos mkfs.vfat
按下兩個[tab],會發現 mkfs 支持的文件格式如上所示。
實例 2
將分區 /dev/hdc6(可指定你自己的分區) 格式化為 ext3 文件系統:
[root@www ~]# mkfs -t ext3 /dev/hdc6 mke2fs 1.39 (29-May-2006) Filesystem label= <==這里指的是分割槽的名稱(label) OS type: Linux Block size=4096 (log=2) <==block 的大小配置為 4K Fragment size=4096 (log=2) 251392 inodes, 502023 blocks <==由此配置決定的inode/block數量 25101 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=515899392 16 block groups 32768 blocks per group, 32768 fragments per group 15712 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912 Writing inode tables: done Creating journal (8192 blocks): done <==有日志記錄 Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 34 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override. # 這樣就創建起來我們所需要的 Ext3 文件系統了!簡單明了!
磁盤檢驗
fsck(file system check)用來檢查和維護不一致的文件系統。
若系統掉電或磁盤發生問題,可利用fsck命令對文件系統進行檢查。
語法:
fsck [-t 文件系統] [-ACay] 裝置名稱
選項與參數:
- -t : 給定檔案系統的型式,若在 /etc/fstab 中已有定義或 kernel 本身已支援的則不需加上此參數
- -s : 依序一個一個地執行 fsck 的指令來檢查
- -A : 對/etc/fstab 中所有列出來的 分區(partition)做檢查
- -C : 顯示完整的檢查進度
- -d : 打印出 e2fsck 的 debug 結果
- -p : 同時有 -A 條件時,同時有多個 fsck 的檢查一起執行
- -R : 同時有 -A 條件時,省略 / 不檢查
- -V : 詳細顯示模式
- -a : 如果檢查有錯則自動修復
- -r : 如果檢查有錯則由使用者回答是否修復
- -y : 選項指定檢測每個文件是自動輸入yes,在不確定那些是不正常的時候,可以執行 # fsck -y 全部檢查修復。
實例 1
查看系統有多少文件系統支持的 fsck 命令:
[root@www ~]# fsck[tab][tab] fsck fsck.cramfs fsck.ext2 fsck.ext3 fsck.msdos fsck.vfat
實例 2
強制檢測 /dev/hdc6 分區:
[root@www ~]# fsck -C -f -t ext3 /dev/hdc6 fsck 1.39 (29-May-2006) e2fsck 1.39 (29-May-2006) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information vbird_logical: 11/251968 files (9.1% non-contiguous), 36926/1004046 blocks
如果沒有加上 -f 的選項,則由於這個文件系統不曾出現問題,檢查的經過非常快速!若加上 -f 強制檢查,才會一項一項的顯示過程。
磁盤掛載與卸除
Linux 的磁盤掛載使用 mount
命令,卸載使用 umount
命令。
磁盤掛載語法:
mount [-t 文件系統] [-L Label名] [-o 額外選項] [-n] 裝置文件名 掛載點
實例 1
用默認的方式,將剛剛創建的 /dev/hdc6 掛載到 /mnt/hdc6 上面!
[root@www ~]# mkdir /mnt/hdc6 [root@www ~]# mount /dev/hdc6 /mnt/hdc6 [root@www ~]# df Filesystem 1K-blocks Used Available Use% Mounted on .....中間省略..... /dev/hdc6 1976312 42072 1833836 3% /mnt/hdc6
磁盤卸載命令 umount
語法:
umount [-fn] 裝置文件名或掛載點
選項與參數:
- -f :強制卸除!可用在類似網絡文件系統 (NFS) 無法讀取到的情況下;
- -n :不升級 /etc/mtab 情況下卸除。
卸載/dev/hdc6
[root@www ~]# umount /dev/hdc6
Shell 教程
Shell 是一個用C語言編寫的程序,它是用戶使用Linux的橋梁。Shell既是一種命令語言,又是一種程序設計語言。
Shell 是指一種應用程序,這個應用程序提供了一個界面,用戶通過這個界面訪問操作系統內核的服務。
Ken Thompson的sh是第一種Unix Shell,Windows Explorer是一個典型的圖形界面Shell。
Shell 腳本
Shell 腳本(shell script),是一種為shell編寫的腳本程序。
業界所說的shell通常都是指shell腳本,但讀者朋友要知道,shell和shell script是兩個不同的概念。
由於習慣的原因,簡潔起見,本文出現的"shell編程"都是指shell腳本編程,不是指開發shell自身。
Shell 環境
Shell 編程跟java、php編程一樣,只要有一個能編寫代碼的文本編輯器和一個能解釋執行的腳本解釋器就可以了。
Linux的Shell種類眾多,常見的有:
- Bourne Shell(/usr/bin/sh或/bin/sh)
- Bourne Again Shell(/bin/bash)
- C Shell(/usr/bin/csh)
- K Shell(/usr/bin/ksh)
- Shell for Root(/sbin/sh)
- ……
本教程關注的是 Bash,也就是 Bourne Again Shell,由於易用和免費,Bash在日常工作中被廣泛使用。同時,Bash也是大多數Linux系統默認的Shell。
在一般情況下,人們並不區分 Bourne Shell 和 Bourne Again Shell,所以,像 #!/bin/sh,它同樣也可以改為#!/bin/bash。
#!告訴系統其后路徑所指定的程序即是解釋此腳本文件的Shell程序。
第一個shell腳本
打開文本編輯器(可以使用vi/vim命令來創建文件),新建一個文件test.sh,擴展名為sh(sh代表shell),擴展名並不影響腳本執行,見名知意就好,如果你用php寫shell 腳本,擴展名就用php好了。
輸入一些代碼,第一行一般是這樣:
"#!" 是一個約定的標記,它告訴系統這個腳本需要什么解釋器來執行,即使用哪一種Shell。
echo命令用於向窗口輸出文本。
運行Shell腳本有兩種方法:
1、作為可執行程序
將上面的代碼保存為test.sh,並cd到相應目錄:
chmod +x ./test.sh #使腳本具有執行權限 ./test.sh #執行腳本
注意,一定要寫成./test.sh,而不是test.sh,運行其它二進制的程序也一樣,直接寫test.sh,linux系統會去PATH里尋找有沒有叫test.sh的,而只有/bin, /sbin, /usr/bin,/usr/sbin等在PATH里,你的當前目錄通常不在PATH里,所以寫成test.sh是會找不到命令的,要用./test.sh告訴系統說,就在當前目錄找。
2、作為解釋器參數
這種運行方式是,直接運行解釋器,其參數就是shell腳本的文件名,如:
/bin/sh test.sh /bin/php test.php
這種方式運行的腳本,不需要在第一行指定解釋器信息,寫了也沒用。
所有的 Unix Like 系統都會內建 vi 文書編輯器,其他的文書編輯器則不一定會存在。
但是目前我們使用比較多的是 vim 編輯器。
vim 具有程序編輯的能力,可以主動的以字體顏色辨別語法的正確性,方便程序設計。
什么是 vim?
Vim是從 vi 發展出來的一個文本編輯器。代碼補完、編譯及錯誤跳轉等方便編程的功能特別豐富,在程序員中被廣泛使用。
簡單的來說, vi 是老式的字處理器,不過功能已經很齊全了,但是還是有可以進步的地方。 vim 則可以說是程序開發者的一項很好用的工具。 連 vim 的官方網站 (http://www.vim.org) 自己也說 vim 是一個程序開發工具而不是文字處理軟件。
vim 鍵盤圖:
vi/vim 的使用
基本上 vi/vim 共分為三種模式,分別是一般模式、編輯模式與指令列命令模式。 這三種模式的作用分別是:
- 一般模式:
以 vi 打開一個檔案就直接進入一般模式了(這是默認的模式)。在這個模式中, 你可以使用『上下左右』按鍵來移動光標,你可以使用『刪除字符』或『刪除整行』來處理檔案內容, 也可以使用『復制、貼上』來處理你的文件數據。 - 編輯模式:
在一般模式中可以進行刪除、復制、貼上等等的動作,但是卻無法編輯文件內容的! 要等到你按下『i, I, o, O, a, A, r, R』等任何一個字母之后才會進入編輯模式。注意了!通常在 Linux 中,按下這些按鍵時,在畫面的左下方會出現『INSERT 或 REPLACE 』的字樣,此時才可以進行編輯。而如果要回到一般模式時, 則必須要按下『Esc』這個按鍵即可退出編輯模式。 - 指令列命令模式:
在一般模式當中,輸入『 : / ? 』三個中的任何一個按鈕,就可以將光標移動到最底下那一行。在這個模式當中, 可以提供你『搜尋資料』的動作,而讀取、存盤、大量取代字符、離開 vi 、顯示行號等等的動作則是在此模式中達成的!
簡單的說,我們可以將這三個模式想成底下的圖標來表示:
vi/vim 使用實例
使用 vi/vim 進入一般模式
如果你想要使用 vi 來建立一個名為 test.txt 的文件時,你可以這樣做:
[root@www ~]# vi test.txt
直接輸入 vi 文件名 就能夠進入 vi 的一般模式了。請注意,記得 vi 后面一定要加文件名,不管該文件存在與否!
按下 i 進入編輯模式,開始編輯文字
在一般模式之中,只要按下 i, o, a 等字符就可以進入編輯模式了!
在編輯模式當中,你可以發現在左下角狀態欄中會出現 –INSERT- 的字樣,那就是可以輸入任意字符的提示。
這個時候,鍵盤上除了 [Esc] 這個按鍵之外,其他的按鍵都可以視作為一般的輸入按鈕了,所以你可以進行任何的編輯。
按下 [ESC] 按鈕回到一般模式
好了,假設我已經按照上面的樣式給他編輯完畢了,那么應該要如何退出呢?是的!沒錯!就是給他按下 [Esc] 這個按鈕即可!馬上你就會發現畫面左下角的 – INSERT – 不見了!
在一般模式中按下 :wq 儲存后離開 vi
OK,我們要存檔了,存盤並離開的指令很簡單,輸入『:wq』即可保存離開!
OK! 這樣我們就成功創建了一個 test.txt 的文件。是不是很簡單。
vi/vim 按鍵說明
除了上面簡易范例的 i, [Esc], :wq 之外,其實 vim 還有非常多的按鍵可以使用。
第一部份:一般模式可用的按鈕說明,光標移動、復制貼上、搜尋取代等
移動光標的方法 | |
---|---|
h 或 向左箭頭鍵(←) | 光標向左移動一個字符 |
j 或 向下箭頭鍵(↓) | 光標向下移動一個字符 |
k 或 向上箭頭鍵(↑) | 光標向上移動一個字符 |
l 或 向右箭頭鍵(→) | 光標向右移動一個字符 |
如果你將右手放在鍵盤上的話,你會發現 hjkl 是排列在一起的,因此可以使用這四個按鈕來移動光標。 如果想要進行多次移動的話,例如向下移動 30 行,可以使用 "30j" 或 "30↓" 的組合按鍵, 亦即加上想要進行的次數(數字)后,按下動作即可! | |
[Ctrl] + [f] | 屏幕『向下』移動一頁,相當於 [Page Down]按鍵 (常用) |
[Ctrl] + [b] | 屏幕『向上』移動一頁,相當於 [Page Up] 按鍵 (常用) |
[Ctrl] + [d] | 屏幕『向下』移動半頁 |
[Ctrl] + [u] | 屏幕『向上』移動半頁 |
+ | 光標移動到非空格符的下一列 |
- | 光標移動到非空格符的上一列 |
n | 那個 n 表示『數字』,例如 20 。按下數字后再按空格鍵,光標會向右移動這一行的 n 個字符。例如 20 則光標會向后面移動 20 個字符距離。 |
0 或功能鍵[Home] | 這是數字『 0 』:移動到這一行的最前面字符處 (常用) |
$ 或功能鍵[End] | 移動到這一行的最后面字符處(常用) |
H | 光標移動到這個屏幕的最上方那一行的第一個字符 |
M | 光標移動到這個屏幕的中央那一行的第一個字符 |
L | 光標移動到這個屏幕的最下方那一行的第一個字符 |
G | 移動到這個檔案的最后一行(常用) |
nG | n 為數字。移動到這個檔案的第 n 行。例如 20G 則會移動到這個檔案的第 20 行(可配合 :set nu) |
gg | 移動到這個檔案的第一行,相當於 1G 啊! (常用) |
n | n 為數字。光標向下移動 n 行(常用) |
搜尋與取代 | |
/word | 向光標之下尋找一個名稱為 word 的字符串。例如要在檔案內搜尋 vbird 這個字符串,就輸入 /vbird 即可! (常用) |
?word | 向光標之上尋找一個字符串名稱為 word 的字符串。 |
n | 這個 n 是英文按鍵。代表重復前一個搜尋的動作。舉例來說, 如果剛剛我們執行 /vbird 去向下搜尋 vbird 這個字符串,則按下 n 后,會向下繼續搜尋下一個名稱為 vbird 的字符串。如果是執行 ?vbird 的話,那么按下 n 則會向上繼續搜尋名稱為 vbird 的字符串! |
N | 這個 N 是英文按鍵。與 n 剛好相反,為『反向』進行前一個搜尋動作。 例如 /vbird 后,按下 N 則表示『向上』搜尋 vbird 。 |
使用 /word 配合 n 及 N 是非常有幫助的!可以讓你重復的找到一些你搜尋的關鍵詞! | |
:n1,n2s/word1/word2/g | n1 與 n2 為數字。在第 n1 與 n2 行之間尋找 word1 這個字符串,並將該字符串取代為 word2 !舉例來說,在 100 到 200 行之間搜尋 vbird 並取代為 VBIRD 則: 『:100,200s/vbird/VBIRD/g』。(常用) |
:1,$s/word1/word2/g | 從第一行到最后一行尋找 word1 字符串,並將該字符串取代為 word2 !(常用) |
:1,$s/word1/word2/gc | 從第一行到最后一行尋找 word1 字符串,並將該字符串取代為 word2 !且在取代前顯示提示字符給用戶確認 (confirm) 是否需要取代!(常用) |
刪除、復制與貼上 | |
x, X | 在一行字當中,x 為向后刪除一個字符 (相當於 [del] 按鍵), X 為向前刪除一個字符(相當於 [backspace] 亦即是退格鍵) (常用) |
nx | n 為數字,連續向后刪除 n 個字符。舉例來說,我要連續刪除 10 個字符, 『10x』。 |
dd | 刪除游標所在的那一整列(常用) |
ndd | n 為數字。刪除光標所在的向下 n 列,例如 20dd 則是刪除 20 列 (常用) |
d1G | 刪除光標所在到第一行的所有數據 |
dG | 刪除光標所在到最后一行的所有數據 |
d$ | 刪除游標所在處,到該行的最后一個字符 |
d0 | 那個是數字的 0 ,刪除游標所在處,到該行的最前面一個字符 |
yy | 復制游標所在的那一行(常用) |
nyy | n 為數字。復制光標所在的向下 n 列,例如 20yy 則是復制 20 列(常用) |
y1G | 復制游標所在列到第一列的所有數據 |
yG | 復制游標所在列到最后一列的所有數據 |
y0 | 復制光標所在的那個字符到該行行首的所有數據 |
y$ | 復制光標所在的那個字符到該行行尾的所有數據 |
p, P | p 為將已復制的數據在光標下一行貼上,P 則為貼在游標上一行! 舉例來說,我目前光標在第 20 行,且已經復制了 10 行數據。則按下 p 后, 那 10 行數據會貼在原本的 20 行之后,亦即由 21 行開始貼。但如果是按下 P 呢? 那么原本的第 20 行會被推到變成 30 行。 (常用) |
J | 將光標所在列與下一列的數據結合成同一列 |
c | 重復刪除多個數據,例如向下刪除 10 行,[ 10cj ] |
u | 復原前一個動作。(常用) |
[Ctrl]+r | 重做上一個動作。(常用) |
這個 u 與 [Ctrl]+r 是很常用的指令!一個是復原,另一個則是重做一次~ 利用這兩個功能按鍵,你的編輯,嘿嘿!很快樂的啦! | |
. | 不要懷疑!這就是小數點!意思是重復前一個動作的意思。 如果你想要重復刪除、重復貼上等等動作,按下小數點『.』就好了! (常用) |
第二部份:一般模式切換到編輯模式的可用的按鈕說明
進入插入或取代的編輯模式 | |
---|---|
i, I | 進入插入模式(Insert mode): i 為『從目前光標所在處插入』, I 為『在目前所在行的第一個非空格符處開始插入』。 (常用) |
a, A | 進入插入模式(Insert mode): a 為『從目前光標所在的下一個字符處開始插入』, A 為『從光標所在行的最后一個字符處開始插入』。(常用) |
o, O | 進入插入模式(Insert mode): 這是英文字母 o 的大小寫。o 為『在目前光標所在的下一行處插入新的一行』; O 為在目前光標所在處的上一行插入新的一行!(常用) |
r, R | 進入取代模式(Replace mode): r 只會取代光標所在的那一個字符一次;R會一直取代光標所在的文字,直到按下 ESC 為止;(常用) |
上面這些按鍵中,在 vi 畫面的左下角處會出現『--INSERT--』或『--REPLACE--』的字樣。 由名稱就知道該動作了吧!!特別注意的是,我們上面也提過了,你想要在檔案里面輸入字符時, 一定要在左下角處看到 INSERT 或 REPLACE 才能輸入喔! | |
[Esc] | 退出編輯模式,回到一般模式中(常用) |
第三部份:一般模式切換到指令列模式的可用的按鈕說明
指令列的儲存、離開等指令 | |
---|---|
:w | 將編輯的數據寫入硬盤檔案中(常用) |
:w! | 若文件屬性為『只讀』時,強制寫入該檔案。不過,到底能不能寫入, 還是跟你對該檔案的檔案權限有關啊! |
:q | 離開 vi (常用) |
:q! | 若曾修改過檔案,又不想儲存,使用 ! 為強制離開不儲存檔案。 |
注意一下啊,那個驚嘆號 (!) 在 vi 當中,常常具有『強制』的意思~ | |
:wq | 儲存后離開,若為 :wq! 則為強制儲存后離開 (常用) |
ZZ | 這是大寫的 Z 喔!若檔案沒有更動,則不儲存離開,若檔案已經被更動過,則儲存后離開! |
:w [filename] | 將編輯的數據儲存成另一個檔案(類似另存新檔) |
:r [filename] | 在編輯的數據中,讀入另一個檔案的數據。亦即將 『filename』 這個檔案內容加到游標所在行后面 |
:n1,n2 w [filename] | 將 n1 到 n2 的內容儲存成 filename 這個檔案。 |
:! command | 暫時離開 vi 到指令列模式下執行 command 的顯示結果!例如 『:! ls /home』即可在 vi 當中察看 /home 底下以 ls 輸出的檔案信息! |
vim 環境的變更 | |
:set nu | 顯示行號,設定之后,會在每一行的前綴顯示該行的行號 |
:set nonu | 與 set nu 相反,為取消行號! |
特別注意,在 vi/vim 中,數字是很有意義的!數字通常代表重復做幾次的意思! 也有可能是代表去到第幾個什么什么的意思。
舉例來說,要刪除 50 行,則是用 『50dd』 對吧! 數字加在動作之前,如我要向下移動 20 行呢?那就是『20j』或者是『20↓』即可。
Shell 基本運算符
Shell 和其他編程語言一樣,支持多種運算符,包括:
- 算數運算符
- 關系運算符
- 布爾運算符
- 字符串運算符
- 文件測試運算符
原生bash不支持簡單的數學運算,但是可以通過其他命令來實現,例如 awk 和 expr,expr 最常用。
expr 是一款表達式計算工具,使用它能完成表達式的求值操作。
例如,兩個數相加(注意使用的是反引號 ` 而不是單引號 '):
#!/bin/bash val=`expr 2 + 2` echo "兩數之和為 : $val"
執行腳本,輸出結果如下所示:
兩數之和為 : 4
兩點注意:
- 表達式和運算符之間要有空格,例如 2+2 是不對的,必須寫成 2 + 2,這與我們熟悉的大多數編程語言不一樣。
- 完整的表達式要被 ` ` 包含,注意這個字符不是常用的單引號,在 Esc 鍵下邊。
算術運算符
下表列出了常用的算術運算符,假定變量 a 為 10,變量 b 為 20:
運算符 | 說明 | 舉例 |
---|---|---|
+ | 加法 | `expr $a + $b` 結果為 30。 |
- | 減法 | `expr $a - $b` 結果為 10。 |
* | 乘法 | `expr $a \* $b` 結果為 200。 |
/ | 除法 | `expr $b / $a` 結果為 2。 |
% | 取余 | `expr $b % $a` 結果為 0。 |
= | 賦值 | a=$b 將把變量 b 的值賦給 a。 |
== | 相等。用於比較兩個數字,相同則返回 true。 | [ $a == $b ] 返回 false。 |
!= | 不相等。用於比較兩個數字,不相同則返回 true。 | [ $a != $b ] 返回 true。 |
注意:條件表達式要放在方括號之間,並且要有空格,例如: [$a==$b] 是錯誤的,必須寫成 [ $a == $b ]。
實例
算術運算符實例如下:
#!/bin/bash # author:W3Cschool教程 # url:www.w3cschool.cn a=10 b=20 val=`expr $a + $b` echo "a + b : $val" val=`expr $a - $b` echo "a - b : $val" val=`expr $a \* $b` echo "a * b : $val" val=`expr $b / $a` echo "b / a : $val" val=`expr $b % $a` echo "b % a : $val" if [ $a == $b ] then echo "a 等於 b" fi if [ $a != $b ] then echo "a 不等於 b" fi
執行腳本,輸出結果如下所示:
a + b : 30 a - b : -10 a * b : 200 b / a : 2 b % a : 0 a 不等於 b
注意:
- 乘號(*)前邊必須加反斜杠(\)才能實現乘法運算;
- if...then...fi 是條件語句,后續將會講解。
關系運算符
關系運算符只支持數字,不支持字符串,除非字符串的值是數字。
下表列出了常用的關系運算符,假定變量 a 為 10,變量 b 為 20:
運算符 | 說明 | 舉例 |
---|---|---|
-eq | 檢測兩個數是否相等,相等返回 true。 | [ $a -eq $b ] 返回 false。 |
-ne | 檢測兩個數是否相等,不相等返回 true。 | [ $a -ne $b ] 返回 true。 |
-gt | 檢測左邊的數是否大於右邊的,如果是,則返回 true。 | [ $a -gt $b ] 返回 false。 |
-lt | 檢測左邊的數是否小於右邊的,如果是,則返回 true。 | [ $a -lt $b ] 返回 true。 |
-ge | 檢測左邊的數是否大等於右邊的,如果是,則返回 true。 | [ $a -ge $b ] 返回 false。 |
-le | 檢測左邊的數是否小於等於右邊的,如果是,則返回 true。 | [ $a -le $b ] 返回 true。 |
實例
關系運算符實例如下:
#!/bin/bash # author:W3Cschool教程 # url:www.w3cschool.cn a=10 b=20 if [ $a -eq $b ] then echo "$a -eq $b : a 等於 b" else echo "$a -eq $b: a 不等於 b" fi if [ $a -ne $b ] then echo "$a -ne $b: a 不等於 b" else echo "$a -ne $b : a 等於 b" fi if [ $a -gt $b ] then echo "$a -gt $b: a 大於 b" else echo "$a -gt $b: a 不大於 b" fi if [ $a -lt $b ] then echo "$a -lt $b: a 小於 b" else echo "$a -lt $b: a 不小於 b" fi if [ $a -ge $b ] then echo "$a -ge $b: a 大於或等於 b" else echo "$a -ge $b: a 小於 b" fi if [ $a -le $b ] then echo "$a -le $b: a 小於或等於 b" else echo "$a -le $b: a 大於 b" fi
執行腳本,輸出結果如下所示:
10 -eq 20: a 不等於 b 10 -ne 20: a 不等於 b 10 -gt 20: a 不大於 b 10 -lt 20: a 小於 b 10 -ge 20: a 小於 b 10 -le 20: a 小於或等於 b
布爾運算符
下表列出了常用的布爾運算符,假定變量 a 為 10,變量 b 為 20:
運算符 | 說明 | 舉例 |
---|---|---|
! | 非運算,表達式為 true 則返回 false,否則返回 true。 | [ ! false ] 返回 true。 |
-o | 或運算,有一個表達式為 true 則返回 true。 | [ $a -lt 20 -o $b -gt 100 ] 返回 true。 |
-a | 與運算,兩個表達式都為 true 才返回 true。 | [ $a -lt 20 -a $b -gt 100 ] 返回 false。 |
實例
布爾運算符實例如下:
#!/bin/bash # author:W3Cschool教程 # url:www.w3cschool.cn a=10 b=20 if [ $a != $b ] then echo "$a != $b : a 不等於 b" else echo "$a != $b: a 等於 b" fi if [ $a -lt 100 -a $b -gt 15 ] then echo "$a -lt 100 -a $b -gt 15 : 返回 true" else echo "$a -lt 100 -a $b -gt 15 : 返回 false" fi if [ $a -lt 100 -o $b -gt 100 ] then echo "$a -lt 100 -o $b -gt 100 : 返回 true" else echo "$a -lt 100 -o $b -gt 100 : 返回 false" fi if [ $a -lt 5 -o $b -gt 100 ] then echo "$a -lt 100 -o $b -gt 100 : 返回 true" else echo "$a -lt 100 -o $b -gt 100 : 返回 false" fi
執行腳本,輸出結果如下所示:
10 != 20 : a 不等於 b 10 -lt 100 -a 20 -gt 15 : 返回 true 10 -lt 100 -o 20 -gt 100 : 返回 true 10 -lt 100 -o 20 -gt 100 : 返回 false
邏輯運算符
以下介紹 Shell 的邏輯運算符,假定變量 a 為 10,變量 b 為 20:
運算符 | 說明 | 舉例 |
---|---|---|
&& | 邏輯的 AND | [[ $a -lt 100 && $b -gt 100 ]] 返回 false |
|| | 邏輯的 OR | [[ $a -lt 100 || $b -gt 100 ]] 返回 true |
實例
邏輯運算符實例如下:
#!/bin/bash # author:W3Cschool教程 # url:www.w3cschool.cn a=10 b=20 if [[ $a -lt 100 && $b -gt 100 ]] then echo "返回 true" else echo "返回 false" fi if [[ $a -lt 100 || $b -gt 100 ]] then echo "返回 true" else echo "返回 false" fi
執行腳本,輸出結果如下所示:
返回 false 返回 true
字符串運算符
下表列出了常用的字符串運算符,假定變量 a 為 "abc",變量 b 為 "efg":
運算符 | 說明 | 舉例 |
---|---|---|
= | 檢測兩個字符串是否相等,相等返回 true。 | [ $a = $b ] 返回 false。 |
!= | 檢測兩個字符串是否相等,不相等返回 true。 | [ $a != $b ] 返回 true。 |
-z | 檢測字符串長度是否為0,為0返回 true。 | [ -z $a ] 返回 false。 |
-n | 檢測字符串長度是否為0,不為0返回 true。 | [ -n $a ] 返回 true。 |
str | 檢測字符串是否為空,不為空返回 true。 | [ $a ] 返回 true。 |
實例
字符串運算符實例如下:
#!/bin/bash # author:W3Cschool教程 # url:www.w3cschool.cn a="abc" b="efg" if [ $a = $b ] then echo "$a = $b : a 等於 b" else echo "$a = $b: a 不等於 b" fi if [ $a != $b ] then echo "$a != $b : a 不等於 b" else echo "$a != $b: a 等於 b" fi if [ -z $a ] then echo "-z $a : 字符串長度為 0" else echo "-z $a : 字符串長度不為 0" fi if [ -n $a ] then echo "-n $a : 字符串長度不為 0" else echo "-n $a : 字符串長度為 0" fi if [ $a ] then echo "$a : 字符串不為空" else echo "$a : 字符串為空" fi
執行腳本,輸出結果如下所示:
abc = efg: a 不等於 b abc != efg : a 不等於 b -z abc : 字符串長度不為 0 -n abc : 字符串長度不為 0 abc : 字符串不為空
文件測試運算符
文件測試運算符用於檢測 Unix 文件的各種屬性。
屬性檢測描述如下:
操作符 | 說明 | 舉例 |
---|---|---|
-b file | 檢測文件是否是塊設備文件,如果是,則返回 true。 | [ -b $file ] 返回 false。 |
-c file | 檢測文件是否是字符設備文件,如果是,則返回 true。 | [ -c $file ] 返回 false。 |
-d file | 檢測文件是否是目錄,如果是,則返回 true。 | [ -d $file ] 返回 false。 |
-f file | 檢測文件是否是普通文件(既不是目錄,也不是設備文件),如果是,則返回 true。 | [ -f $file ] 返回 true。 |
-g file | 檢測文件是否設置了 SGID 位,如果是,則返回 true。 | [ -g $file ] 返回 false。 |
-k file | 檢測文件是否設置了粘着位(Sticky Bit),如果是,則返回 true。 | [ -k $file ] 返回 false。 |
-p file | 檢測文件是否是具名管道,如果是,則返回 true。 | [ -p $file ] 返回 false。 |
-u file | 檢測文件是否設置了 SUID 位,如果是,則返回 true。 | [ -u $file ] 返回 false。 |
-r file | 檢測文件是否可讀,如果是,則返回 true。 | [ -r $file ] 返回 true。 |
-w file | 檢測文件是否可寫,如果是,則返回 true。 | [ -w $file ] 返回 true。 |
-x file | 檢測文件是否可執行,如果是,則返回 true。 | [ -x $file ] 返回 true。 |
-s file | 檢測文件是否為空(文件大小是否大於0),不為空返回 true。 | [ -s $file ] 返回 true。 |
-e file | 檢測文件(包括目錄)是否存在,如果是,則返回 true。 | [ -e $file ] 返回 true。 |
實例
變量 file 表示文件"/var/www/w3cschool/test.sh",它的大小為100字節,具有 rwx 權限。下面的代碼,將檢測該文件的各種屬性:
#!/bin/bash # author:W3Cschool教程 # url:www.w3cschool.cn file="/var/www/w3cschool/test.sh" if [ -r $file ] then echo "文件可讀" else echo "文件不可讀" fi if [ -w $file ] then echo "文件可寫" else echo "文件不可寫" fi if [ -x $file ] then echo "文件可執行" else echo "文件不可執行" fi if [ -f $file ] then echo "文件為普通文件" else echo "文件為特殊文件" fi if [ -d $file ] then echo "文件是個目錄" else echo "文件不是個目錄" fi if [ -s $file ] then echo "文件不為空" else echo "文件為空" fi if [ -e $file ] then echo "文件存在" else echo "文件不存在" fi
執行腳本,輸出結果如下所示:
文件可讀 文件可寫 文件可執行 文件為普通文件 文件不是個目錄 文件不為空 文件存在
Shell test命令
Shell中的 test 命令用於檢查某個條件是否成立,它可以進行數值、字符和文件三個方面的測試。
數值測試
參數 | 說明 |
---|---|
-eq | 等於則為真 |
-ne | 不等於則為真 |
-gt | 大於則為真 |
-ge | 大於等於則為真 |
-lt | 小於則為真 |
-le | 小於等於則為真 |
實例演示:
num1=100 num2=100 if test $[num1] -eq $[num2] then echo '兩個數相等!' else echo '兩個數不相等!' fi
輸出結果:
兩個數相等!
字符串測試
參數 | 說明 |
---|---|
= | 等於則為真 |
!= | 不相等則為真 |
-z 字符串 | 字符串長度偽則為真 |
-n 字符串 | 字符串長度不偽則為真 |
實例演示:
num1="runoob" num2="runoob" if test num1=num2 then echo '兩個字符串相等!' else echo '兩個字符串不相等!' fi
輸出結果:
兩個字符串相等!
文件測試
參數 | 說明 |
---|---|
-e 文件名 | 如果文件存在則為真 |
-r 文件名 | 如果文件存在且可讀則為真 |
-w 文件名 | 如果文件存在且可寫則為真 |
-x 文件名 | 如果文件存在且可執行則為真 |
-s 文件名 | 如果文件存在且至少有一個字符則為真 |
-d 文件名 | 如果文件存在且為目錄則為真 |
-f 文件名 | 如果文件存在且為普通文件則為真 |
-c 文件名 | 如果文件存在且為字符型特殊文件則為真 |
-b 文件名 | 如果文件存在且為塊特殊文件則為真 |
實例演示:
cd /bin if test -e ./bash then echo '文件已存在!' else echo '文件不存在!' fi
輸出結果:
文件已存在!
另外,Shell還提供了與( -a )、或( -o )、非( ! )三個邏輯操作符用於將測試條件連接起來,其優先級為:"!"最高,"-a"次之,"-o"最低。例如:
cd /bin if test -e ./notFile -o -e ./bash then echo '有一個文件存在!' else echo '兩個文件都不存在' fi
輸出結果:
有一個文件存在!
Linux 忘記密碼解決方法
很多朋友經常會忘記Linux系統的root密碼,linux系統忘記root密碼的情況該怎么辦呢?重新安裝系統嗎?當然不用!進入單用戶模式更改一下root密碼即可。
步驟如下:
重啟linux系統
3 秒之內要按一下回車,出現如下界面
然后輸入e
在 第二行最后邊輸入 single,有一個空格。具體方法為按向下尖頭移動到第二行,按"e"進入編輯模式
在后邊加上single 回車
最后按"b"啟動,啟動后就進入了單用戶模式了
此時已經進入到單用戶模式了,你可以更改root密碼了。更密碼的命令為 passwd
【使用系統安裝光盤的救援模式】
救援模式即rescue ,這個模式主要是應用於,系統無法進入的情況。如,grub損壞或者某一個配置文件修改出錯。如何使用rescue模式呢?
光盤啟動,按F5 進入rescue模式
輸入linux rescue 回車
選擇語言,筆者建議你選擇英語
選擇us 鍵盤
這里問你是否啟動網絡,有時候可能會聯網調試。我們選no
這里告訴我們,接下來會把系統掛載在/mnt/sysimage 中。
其中有三個選項:
- Continue 就是掛載后繼續下一步。
- Read-Only 掛載成只讀,這樣更安全,有時文件系統損壞時,只讀模式會防止文件系統近一步損壞。
- Skip就是不掛載,進入一個命令窗口模式。
這里我們選擇Continue。
至此,系統已經掛載到了/mnt/sysimage中。接下來回車,輸入chroot /mnt/sysimage 進入管理員環境。
提示: 其實也可以到rescue模式下更改root的密碼的。這個rescue模式和windows PE系統很相近。
當運行了chroot /mnt/sysimage/ 后,再ls 看到目錄結構和原來系統中的目錄結構是一樣的。
沒錯!現在的環境和原來系統的環境是一模一樣的。你可以輸入exit 或者按Ctrl + D退出這個環境。然后你再ls 看一下
這個目錄其實就是rescue模式下的目錄結構,而我們的系統文件全部在 /mnt/sysimage目錄下。