- 1.Shell是什么
- 2.(文件目錄)導航
- 3.Linux系統
- 4.操作文件和目錄
- 5.命令的使用
- 6.重定向
- 7.透過shell看世界
- 8.高級鍵盤技巧
- 9.權限
- 10.進程
- 11.環境
- 12.VIM
- 13.定制提示符
- 14.軟件包管理
- 15.存儲介質
- 16.網絡
- 17.文件搜索
- 18.歸檔與備份
- 19.正則表達式
- 20.文本處理
- 21.格式化輸出
- 22.打印
- 23.編譯程序
- 24 ~ 35. shell腳本語言相關內容
- 36.其它命令
1.Shell是什么
- 當談到命令行的時候,我們實際上指的是shell。shell是一個接收由鍵盤輸入的命令,並將其傳遞給操作系統執行的程序。一般Linux提供的shell程序叫做bash(Bourne Again Shell),即bash是sh的增強版本。
- 如果shell提示符的最后一個字符是
#
,而不是一個$
符號,那么終端會話將享有超級用戶特權。 - 即使沒有運行terminal,一些終端會話也會在圖形桌面的后台運行,這叫做虛擬終端或者虛擬控制台。在絕大多數系統中,通過依次按下Ctrl-Alt-F1鍵到Ctrl-Alt-F6組合鍵可以訪問大部分Linux發行版中的終端會話。
2.(文件目錄)導航
- 以“.”字符開頭的文件名是隱藏的。這僅說明
ls
命令不會列出這些文件,除非輸入ls -a
。 - Linux沒有文件擴展名的概念。
- Linux創建文件名的過程,最后僅使用句號,連字符和下划線這些特殊字符。
3.Linux系統
-
大部分命令看起來如下所示:
command -options arguments
- 命令后面跟有一個或多個選項
- 命令后面還會跟有一個或多個參數,這些參數是命令作用的對象
-
ls
命令的長列表字段(-l
)-
-rw-r-r--
:- 第一個字符表示文件的類型。在不同的類型之間,開頭的"-"表示該文件是一個普通文件,d表示是一個目錄。
- 緊接着的三個字符表示文件所有者的權限。
- 再接着的三個字符表示文件所屬組中成員的訪問權限。
- 最后三個字符,表示其他所有人的訪問權限。
-
-
Linux發布了一個Linux文件系統層次標准(Linux Filesystem Hierarchy Standard)1。
4.操作文件和目錄
- 類UNIX操作系統(如Linux)並不包含還原刪除操作的命令。一旦使用
rm
命令,就徹底刪除了。 - 當
rm
命令和通配符一起使用的時候,除仔細檢查輸入內容外,可使用ls
命令預先對通配符做出測試,這將顯示欲刪除的文件。 - 硬鏈接由兩條重要的局限性:
- 硬鏈接不能引用自身文件系統以外的文件。也就是說,鏈接不能引用與該鏈接不在同一磁盤分區的文件。
- 硬鏈接無法引用目錄
- 符號鏈接是為了克服硬鏈接的局限性而創建的。符號鏈接與Windows系統下的快捷方式非常相似,但是,符號鏈接要早於Windows的快捷方式很多年
- 由於文件名是由鏈接創建的,所以一個文件通常至少有一個鏈接。
- 創建硬鏈接時,實際上是創建了額外的名稱,這些名稱都指向同一數據部分。系統分配了一些列的盤塊給所謂的索引節點(inode),該節點隨后與文件名稱部分建立關聯。因此,每個硬鏈接都指向包含文件內容的具體索引節點。
- 創建符號鏈接時,同時也創建了一個文本用來描述目標文件在哪里與符號鏈接有關聯。
- 大部分(對符號鏈接的)操作,是以鏈接目標作為對象的,而非鏈接本身。而
rm
命令是個例外。當刪除一個鏈接的時候,鏈接本身被刪除,但是目標文件依舊存在。
5.命令的使用
-
一條命令無外乎以下4種情況:
- 可執行程序
- shell內置命令
- shell函數。shell函數是合並到環境變量中的小型shell腳本。
- alias命名。
-
which
命令只適用於可執行程序,而不適用於內置命令和命令別名。 -
man
命令顯示的“手冊文檔”被分成多個部分,它不僅包括用戶命令,也包括系統管理命令、程序接口、文件格式等。 -
系統中安裝的很多軟件包都有自己的文檔文件,它們存放在
/usr/share/doc
目錄中。
6.重定向
- 程序的運行結果,一般發送到了標准輸出
stdout
- 程序的狀態信息,一般發送到了標准錯誤
stderr
- 許多程序可以從一個標准輸入
stdin
的設備獲得輸入。默認情況下,標准輸入鏈接到鍵盤 - 使用重定向操作符
>
,可以把標准輸出導入文件,而不是打印在屏幕上 - 使用重定向操作符
>>
,會把重定向的標准輸出追加到文件的末尾,而不是重寫文件 - 因為標准錯誤的文件描述符的索引是2,所以標准錯誤的重定向操作符是
2>
- 系統提供了一個稱作是位桶(bit bucket)的特殊文件,它接受輸入但是不對任何輸入做處理
7.透過shell看世界
擴展
- 路徑名擴展,pathname expression。通過通配符來實現擴展的機制,叫做路徑名擴展。
- 波浪線擴展。
- 算數擴展。
- 花括號擴展。一般用於創建一系列的文件和目錄。
- 參數擴展。
- 命令替換。
引用
- 雙引號。雙引號使得單詞分割,路徑名擴展,波浪線擴展,花括號擴展都失去作用。但是參數擴展,算數擴展,命令替換仍然生效。
- 單引號。單引號會抑制所有的擴展。
- 轉義字符。反斜杠稱為轉義字符。
8.高級鍵盤技巧
- shell提供了一種專門用來擴展歷史記錄項的功能 -- 使用
!
字符.
9.權限
- 在UNIX術語中,所有用戶是指整個世界(world)。
- 用戶賬戶定義在
/etc/passwd
文件中,用戶組定義在/etc/group
文件中,文件/etc/shadow
保存了用戶的密碼信息。 -
文件類型:
屬性 文件類型 - 普通文件 d 目錄文件 l 符號鏈接。符號鏈接后面的文件模式屬性都是 rwxrwxrwx
但是這是偽權限。符號鏈接的目標文件的權限才是真權限。c 字符設備文件。該文件類型表示以字節流處理數據的設備,如終端或調制解調器。 b 塊設備文件。該文件類型表示以數據塊方式處理數據的設備,如硬盤驅動或者光盤驅動。 -
常用的八進制文件模式就下面幾種:
- 7(rwx)
- 6(rw-)
- 5(r-x)
- 4(r--)
- 0(---)
-
符號表示法
+
表示添加一種權限-
表示刪除一種權限=
表示只有指定的權限可用,其它所有的權限都被刪除
-
umask
命令設置的掩碼值只能在當前shell會話中生效,在當前的shell會話結束后,則必須重新設置。
10.進程
- 一個程序的運行可以觸發其它程序的運行,在進程系統中這種情況被表述為父進程創建子進程。
- TTY是teletype(電傳打印機)的縮寫,代表了進程的控制終端(controlling terminal)。
top
命令:x
選項,告知ps顯示所有的進程,不管它運行在哪個終端。tty
列顯示x
,代表沒有控制終端- 輸出結果中添加了一個命名為STAT(state,而不是stats)的列,代表進程的當前狀態.
- 使進程在后台運行:
- 命令后面加上
&
符號即可在后台運行 jobs
命令,可以查看該終端下所有后台運行的進程fg
命令,可以讓后台運行的進程回到前台來運行
- 命令后面加上
- 信號:
- 使用
kill
,向進程發送信號,可以終止進程。默認是SIGTERM(15) - 如果要強制殺死,可以使用
kill -9 pid
- 使用
11.環境
-
shell變量和環境變量
- shell變量是由bash存放的少量數據
- 環境變量就是除此之外的所有其它變量
set
命令會同時顯示shell變量和環境變量,而printenv
命令只會顯示環境變量
-
在用戶輸入命令后,shell不會搜索整個目錄來尋找可執行文件,而是會搜索
PATH
變量中存儲的目錄列表 -
一般來說,在
PATH
中添加目錄,或者定義額外的環境變量這些操作,需要放入到.bash_profile
文件中。其它的操作應該放在.bashrc
文件. -
擴展名為
.bak
,.sav
,.old
,.orig
是常用的標示備份文件的方法.
12.VIM
基本操作我已經熟悉,這章略過.
13.定制提示符
- 提示符是由名為
PS1
(prompt string 1的縮寫)這個環境變量來定義的。
14.軟件包管理
pass
15.存儲介質
etc/fstab
文件內容列出了系統啟動時掛載的設備(通常是硬盤分區)- 卸載設備能確保緩存中的所有剩余數據寫入設備,從而設備能夠安全移除。
16.網絡
ping
命令會向指定的網絡主機發送特殊網絡數據包IMCP ECHO_REQUEST.eh0
是以太網端口,lo
是系統用來訪問自己的回環虛擬接口,也就是localhost。- SSH協議解決了於遠程主機進行安全通信的兩個基本問題:第一,該協議能驗證遠程主機的身份是否真實,從而避免中間人攻擊;第二,該協議將本機於遠程主機之間的通信內容全部加密。
ssh
命令除了能開啟遠程系統上的shell會話之外,還能直接執行單個命令。
17.文件搜索
-
locate
命令的搜索數據庫是由另一個叫做updatedb
的程序創建,這個程序通常用cron定時執行,所以有時locate
查找的結果不是最新的 -
locate
程序查找文件僅僅是依據文件名,而find
程序則是依據文件的各種數據在既定的目錄(遞歸其下面的子目錄)里面查找。
18.歸檔與備份
gzip
命令用於壓縮一個或多個文件,文件后綴名一般是.gz
bzip2
是由Julian Seward開發,和gzip命令相仿,但是使用不同的壓縮算法。該算法具有高質量的數據壓縮能力,但是壓縮的速度卻降低了。使用bzip2
壓縮后的文件以.bz2
為后綴名.- 歸檔是一個聚集眾多文件並將它們組合成一個大文件的過程,它通常作為系統備份的一部分。
tar
是類UNIX系統中用於歸檔文件的經典工具。tar是tape archived餓縮寫。- 使用
tar
進行解壓縮,除非使用超級用戶的名義執行命令,否則提取出來的文件和目錄的所有權屬於執行命令的用戶,而不是文件的原始作者。 zip
命令即是壓縮工具,也是文件歸檔工具。Linux用戶主要使用zip
程序與Windows系統交換文件,而不是將其用於壓縮或者歸檔文件。- 關於
zip
,有一點需要注意(與tar命令相反),即如果指定的歸檔文件已經存在,那么zip
僅僅會更新而不會取而代之。 - 針對類UNIX系統,使用
rsync
命令可以進行文件同步。該命令使用rsync遠程更新協議
,這個協議允許rsync
命令快速檢測到本地和遠程系統上兩個目錄之間的不同,從而以最少數量的復制動作以完成兩個目錄之間的同步. rsync
命令不支持遠程系統和遠程系統之間的復制.
19.正則表達式
已經熟悉,略過.
20.文本處理
sort
命令可以允許多個文件作為其輸入參數uniq
參數近針對已排序的輸入數據進行去重diff
和patch
是代碼提交更新中最主要使用的兩個命令,包括git
命令也有用到.
21.格式化輸出
pass
22.打印
pass
23.編譯程序
./configure
其實是執行源代碼樹下的一個shell腳本,它的任務就是分析生成環境。大多數的源代碼都包含這個腳本make
程序的作用就是輸入Makefile
,該文件描述生成最后可執行程序時的各部件之間的聯系和依賴關系.- 一般打包好的源代碼都包含一個特殊的
make
target程序,就是make install
.這個程序的目的是把在系統目錄下安裝最后生成的可執行程序.
24 ~ 35. shell腳本語言相關內容
閱讀了一遍書中內容,暫時沒有內容學shell,只要保持大概看得懂就行了。
36.其它命令
組命令
使用花括號括起來,子shell
使用圓括號子shell
在當前shell的子拷貝中執行命令,而組命令在當前shell執行所有命令。在子shell退出的時候,復制的環境變量也就消失了。- 在一個好的設計中,腳本應該針對用戶注銷和關閉電腦的情況下作出反應,做一些比如刪除臨時文件的清理工作。
trap
命令可以針對不同的SIGNAL作出反應. wait
命令可以讓父腳本暫停,直到指定的進程(比如子腳本)結束.- 命名管道,可以建立兩個進程之間的通信。