《Linux命令行大全》 筆記記錄


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命令預先對通配符做出測試,這將顯示欲刪除的文件。
  • 硬鏈接由兩條重要的局限性:
    1. 硬鏈接不能引用自身文件系統以外的文件。也就是說,鏈接不能引用與該鏈接不在同一磁盤分區的文件。
    2. 硬鏈接無法引用目錄
  • 符號鏈接是為了克服硬鏈接的局限性而創建的。符號鏈接與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參數近針對已排序的輸入數據進行去重
  • diffpatch是代碼提交更新中最主要使用的兩個命令,包括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命令可以讓父腳本暫停,直到指定的進程(比如子腳本)結束.
  • 命名管道,可以建立兩個進程之間的通信。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM