1.當執行一個指令的時候,舉例來講【ls】,系統會依照PATH的設定去每一個PATH定義的目錄下搜尋文件名爲ls的可執行文件,若是在PATH定義的目錄中含有多個文件名爲ls的可執行文件,那麼先搜尋到的同名指令先被執行!shell
2.使用echo $PATH能夠查看那些目錄被定義了。echo 有【顯示、印出】的意思,而PATH 前面加上的 $ 表示後面接的是變量。數據庫
3.shell script 是利用shell 的功能所寫的一個【程序program】,這個程序是使用純文本文件,將一些shell的語法與指令(含外部指令)寫在裏面,搭配正規表示法、管線命令與數據流重導向等功能,已達到咱們所想要的處理目的。vim
4.幹嗎學些shell scripts (1)自動化管理的重要依據;天天要進行的任務有:查詢登入檔、追蹤流量、監控用戶使用主機狀態、主機各項硬設備狀態、主機軟件更新查詢等等。(2)追蹤與管理系統的重要工做。(3)簡單入侵檢測功能。(4)連續指令單一化。(5)簡單的數據處理。(6)跨平臺支持與學習歷程較短。緩存
5.(1)指令的執行時從上而下、從左到右的分析與執行;(2)指令、選項與參數間的多個空白都會被忽略掉;(3)空白行也將被忽略掉,而且【tab】按鍵所推開的空白一樣視爲空格鍵;(4)若是讀取到一個Enter符號(CR),就嘗試開始執行改行(或該串)命令;(5)至於若是一行的內容太多,則可使用【\Enter】來延伸至下一行;(6)【# 】可做爲批註!任何加在# 下面的資料將所有被視爲批註文字而被忽略。bash
6.養成良好的script 撰寫習慣,在每一個script的文件頭除記錄好:(1)script的功能;(2)script的版本信息;(3)script的做者與聯繫方式;(4)script的版權宣告方式;(5)script的History(歷史記錄);(6)script內特殊的指令,使用【絕對路徑】的方式來下達;(7)script運轉時須要的環境變量預先宣告與設定;(8)撰寫script 的工具最好使用vim 而不是vi,由於vim會有額外的語法檢驗機制。此外,在較爲特殊的程序代碼部分,建議加上批註說明。服務器
7.利用判斷符號 []。由於中括號用在不少地方,包括通配符與正規表示法等等,因此若是要在bash的語法當中使用中括號做爲shell的判斷式時,必需要注意中括號的兩端須要有空格符來分割。(1)在中括號[]內的每一個組件都須要有空格鍵來分割;(2)在中括號內的變數,最好都以雙引號括起來;(3)在中括號內的變數,最好都以單或者雙引號括起來。網絡
8.條件判斷式 (1)利用if…then ;(2)利用case…esac 判斷;(3)利用funcation功能。函數
9.循環(loop)(1)while do done,until do done(不定循環);(2)for…do…done(固定循環);(3)for…do…done 的數值處理。工具
10.每一個登入的使用者至少都會取得兩個ID,一個是使用者ID(User ID,簡稱UID)、一個是羣組ID(Group ID,簡稱GID)。oop
11.當你輸入帳號後,系統是怎麼處理的那? (1)先找尋/etc/passwd 裏面是否有你輸入的帳號?若是沒有則跳出,若是有的話則將該帳號對應的UID與GID(在/etc/group中)讀出來,另外,該帳號的家目錄與shell設定也一併讀出;(2)再來則是覈對密碼錶,這是Linux會進入 /etc/shadow 裏面找出對應的帳號與UID,而後覈對一下你剛輸入的密碼與裏頭的密碼是否相符。(3)若是一切都OK的話,就會進入shell 控管的階段。
12. /etc/passwd 文件結構 每一行都表明一個帳號,有幾行就表明有幾個帳號在你的系統中。不過須要特別留意的是,裏頭有不少帳號原本就是系統正常運做所必須的,咱們能夠簡稱爲系統帳號,例如 bin.daemon,adm,nobody等等,這些帳號請不要隨意的殺掉。
13.新增與移除使用者:useradd,相關配置文件,passwd,usermod,userdel。
14.使用了useradd 創建了帳號以後,在預設的狀況下,該帳號是暫時被封鎖的,也就是說,該帳號是沒法登入的。直接給他設定新密碼就行了。
15.Linux 開發商先在固定的硬件平臺與操做系統平臺上面將須要安裝或升級的軟件編譯好,而後將這個軟件的全部相關文件打包成爲一個特殊格式的文件,在這個文件內還包含了預先偵測系統與相依軟件的腳本,並提供記載該軟件提供的全部文件信息等。最終將這個軟件文件釋放出來。客戶端取得這個文件後,只要透過特定的指令來安裝,那麼該軟件文件就會依照內部的腳原本偵測相依的前驅軟件是否存在,若安裝的環境符合要求,就會開始安裝。安裝完成後還會將該軟件的信息寫入軟件管理機制中,以達成將來能夠進行升級、移除等動做。
16.RPM 全名 是【Red-Hat Package Manager】簡稱則爲RPM。顧明思議,當初這個軟件管理的機制是由Red Hat 這家公司發展出來的。RPM 是以一種數據庫記錄的方式來將你所須要的軟件安裝到你的Linux系統的一套管理機制。
17.RPM 最大的特色就是將你要安裝的軟件先編譯過,而且打包成爲RPM機制的包裝文件,透過包裝好的軟件裏頭默認的數據庫記錄,記錄這個軟件要安裝的 時候必須具有的相依屬性軟件,當安裝在你的Linux主機時,RPM會先依照軟件裏頭的數據查詢Linux主機的相依屬性軟件是否知足,如知足則予以安裝,若不知足則不予安裝。而且安裝的時候將軟件的信息寫入RPM的數據庫中,以便將來的查詢、驗證和反安裝。
18.SRPM 是Source RPM 的意思,也就是這個RPM文件裏面含有原始碼。特別注意的是,這個SRPM 所提供的軟件內容【並無通過編譯】,它所提供的是原始碼。
19.SRPM的擴展名是以***.src.rpm 這種格式來命名的。
20.SRPM 雖然內容是原始碼,可是他仍然還有該軟件所須要的相依性軟件說明、以及全部RPM文件所提供的數據。同時,他與RPM不一樣的是,他也提供了參數配置文件(就是configure 與makefile).因此,若是咱們下載的是SRPM,那麼要安裝該軟件時,就必需要(1)先將已該文件以RPM管理的方式編譯,此時SRPM會被編譯成爲RPM文件;(2)而後將編譯完成的RPM文件安裝到Linux系統中。
21.RPM 文件必需要在相同的Linux 環境下才可以安裝,而SRPM既然是原始碼的格式,天然咱們就能夠透過修改SRPM內的參數配置文件,而後從新編譯產生能適合咱們Linux環境的RPM文件。
22.透過檔名能夠知道 軟件名稱 – 版本信息 –釋放版本次數—操做硬件平臺。
23.RPM 有如下的有點:(1)RPM內含已經編譯過的程序與配置文件等數據,可讓用戶免除從新編譯的困擾;(2)RPM 在安裝以前,會先檢查系統的硬盤容量、操做系統版本等,可避免文件被錯誤安裝;(3)RPM 文件自己提供軟件版本信息、相依屬性軟件名稱、軟件用途說明、軟件所含文件等信息,便於瞭解軟件;(4)RPM 管理的方式使用數據庫記錄RPM文件的相關參數,以便於升級、移除、查詢與驗證。
24.YUM 機制:CentOS (1)先將釋放出來的軟件放置到YUM服務器內(2)而後分析這些軟件的相依屬性問題,將軟件內的記錄信息寫下來(header)。而後再將這些信息分析後記錄成軟件相關性的列表。這些列表數據與軟件所在的本機或網絡位置能夠稱呼爲容器或軟件倉庫或軟件庫(repository)。當客戶端有軟件安裝的需求時,客戶端主機會主動的向網絡上面的yum 服務器的軟件庫網址下載清單列表,而後透過列表的數據與本機RPM數據庫已存在的軟件數據相比較,就可以一口氣安裝所須要的具備相依屬性的軟件了。
25.因此軟件倉庫內的列表會記載每一個文件的相依屬性關係,以及全部文件的網絡位置(URL)! 因爲記錄了詳細的軟件網絡位置,因此有需求的時候,固然就會自動的從網絡下載該軟件。
26.基本上rpm 這個指令真的就剩下查詢與檢驗的功能,因此,查詢與檢驗仍是要學的,至於安裝,透過yum就行了。
27.使用RPM來升級很簡單,就是以-Uvh 或者-Fvh 來升級便可。-Uvh 後面接的軟件即便沒有安裝過,則系統將予以直接安裝;若後面接的軟件有安裝過舊版,則系統自動更新;-Fvh 若是後面接的軟件並未安裝到你的Linux 系統上,則該軟件不會被安裝,亦即只有已安裝到你Linux 系統的軟件纔會被升級。
28.驗證(Verify)的功能主要在於提供系統管理員一個有用的管理機制,做用的方式是【使用/var/lib/rpm底下的數據庫內容來比對目前Linux系統的環境下的全部軟件文件】,也就是說,當你有數據不當心遺失,或者是由於你誤殺了某個軟件的文件,或者是不當心不知道修改了哪個軟件的文件內容,可使用這個簡單的方法來驗證一下本來的文件系統。
29.在Linux系統上面,一個文件能不能被執行看的是有沒有可執行的那個權限(具備 x permission),不過,Linux 系統上真正認識的可執行文件實際上是二進制文件(binary program)。
30.函式庫 就 相似子程序的角色,能夠被呼叫來執行的一段功能函數。
31.可使用make 這個指令的相關功能來進行編譯過程的指令簡化了。 當執行make 時,make 會在當前的目錄下搜尋Makefile(or makefile) 這個文本文件,而Makefile 裏面則記錄了原始碼如何編譯的詳細信息! make 會自動的判別原始碼是否通過變更了。
32.通常來講,偵測程序會偵測的數據大約有低下這些:(1)是否有適合的編譯程序能夠編譯本軟件的程序代碼;(2)是否已經存在本軟件所須要的函式庫,或其餘須要的相依軟件;(3)操做系統平臺適合適合本軟件,包括Linux的核心版本;(4)核心的表頭定義檔(header include)是否存在(驅動程序必需要的偵測)。
33.所謂的源代碼,其實就是一些寫滿了程序代碼的純文本文件。
34.因爲咱們的原始文件有時並不是僅只有一個文件,因此咱們沒法直接進行編譯。這個時候就須要先產生目標文件,而後再以鏈接製做成爲binnary可執行文件。
35.gcc 爲Linux 上面最標準的編譯程序,這個gcc 是由GNU 計劃所維護的。
36.make 有這些好處:(1)簡化編譯時所須要下達的指令;(2)若在編譯完成以後,修改了某個原始碼文件,則make 僅會針對被修改了的文件進行編譯,其餘的object file 不會被更動;(3)最後能夠依照相依性來更新(update)執行檔。
37.事實上不少在Linux平臺上面發展的軟件的原始碼,本來就是以gcc 爲底來設計的。
38.通常來講,以Tarball 方式釋放出來的軟件當中,爲了簡化編譯的流程,一般都是配合前幾個小節提到的make 這個指令來依據目標文件的相依性來進行編譯的。
39.不少的軟件在發展的時候都是直接取用系統核心提供的函式庫與include文件的,這樣才能夠與這個系統兼容。
40.幾乎每一個軟件都會提供聯機幫助的服務,那就是 info 與 man 的功能。
41.咱們會發現軟件的內容大體上是擺在etc,lib,bin,man等目錄當中,分別表明【配置文件、函式庫、執行檔、聯機幫助檔】。
42.Diff 這個指令 能夠將【兩個文件之間的差別性列出來】。
43.不少的軟件之間都會互相取用彼此提供的函式庫來進行特殊功能的運轉。例如不少須要驗證身份的程序都習慣利用PAM這個某塊提供的驗證機制來實做,而不少網絡聯機機制則習慣利用SSL函式庫來進行聯機加密的機制。
44.函式庫依照是否被編譯到程序內部而分爲動態和靜態函式庫。
45.靜態函式庫的特點:(1)擴展名:這類的函式庫一般擴展名爲libxxx.a的類型; (2) 編譯行爲:這類函式庫在編譯的時候會直接整合到執行程序當中,因此利用靜態函式庫編譯成的文件會比較大一些;(3)獨立執行的狀態:這類函式庫的最大優勢,就是編譯成功的可執行文件能夠獨立執行,而不須要再向外部要求讀取函式庫的內容。(4)升級難易度: 雖然執行檔能夠獨立執行,但由於函式庫是直接整合到執行檔中,所以若函式庫升級時,整個執行檔必需要從新編譯才能將新版的函式庫整合到程序中,也就是說,在升級方面,只要函式庫升級了,全部將此函式庫歸入的程序都須要從新編譯。
46.動態函式庫的特點:(1) 擴展名:這類函式庫一般擴展名爲libxxx.so.(2)編譯行爲:與靜態函式庫被整個捉到程序中不一樣的,動態函式庫在編譯的時候,在程序裏面只有一個【指向(Pointer)】的位置而已。也就是說,動態函式庫的內容並無被整合到執行檔中,而是當執行檔要使用到函式庫的機制時,程序纔會去讀取函式庫來使用。因爲執行文件當中僅具備指向動態執行函式庫所在的指標而已,並不包含函式庫的內容。
47.獨立執行的狀態: 這類型的函式庫所編譯出來的程序不能被獨立執行,由於當咱們使用到函式庫的機制時,程序纔會去讀取函式庫,因此函式庫文件【必需要存在】才行,並且,函式庫的【所在目錄也不能改變】,由於咱們的可執行文件裏面僅有【指標】。(4)升級難易度:當函式庫升級後,執行檔根本不須要進行從新編譯,由於執行檔會直接指向新的函式庫文件。
48.如何判斷某個可執行的binnary文件含有什麼動態函式庫呢?很簡單,利用ldd 就能夠了。
49.Service幾個常見的狀態:
*active(running):正有一隻或多隻程序正在系統中執行。
*active(exited):僅執行一次就正常結束的服務,目前並無任何程序在系統中執行。
*active(waiting):正在執行當中,不過還在等待其餘的事件才能繼續處理。
*inactive:這個服務目前沒有運轉的意思。
50.重啓網卡: service network restart
51.直接關閉防火牆
systemctl stop firewalld.service
禁止firewall開機啓動
systemctl disable firewalld.service
52.Linux Swap 空間釋放
Swap意思是交換分區,一般咱們說的虛擬內存,是從硬盤中劃分出的一個分區。當物理內存不夠用的時候,內核就會釋放緩存區(buffers/cache)裏一些長時間不用的程序,而後將這些程序臨時放到Swap中,也就是說若是物理內存和緩存區內存不夠用的時候,纔會用到Swap。
主要使用的命令是:
swapoff -a; 和 swapon -a;
注意:這樣清理有個前提條件,空閒的內存必須比已經使用的swap空間大
53 . shell 鏈接 Linux Server,鏈接會話時間過短,修改會話有效時間窗口。
修改的文件 爲 /etc/profile 參數爲 TMOUT。
(保存,新鏈接纔有效)
54.從本機目錄安裝軟件包
因爲RPM 是透過預先編譯並打包成RPM文件格式後,再加以安裝的一種方式,而且還可以進行數據庫的記載。因此 RPM有如下優勢:
* RPM 內含有已經編譯過的程序和配置文件等數據,可讓用戶免除從新編譯的困擾;
* RPM 在被安裝以前,會先檢查系統的磁盤容量、操做系統版本等,可避免文件被錯誤安裝;
* RPM 文件自己提供軟件版本信息、相依屬性軟件名稱、軟件用途說明、軟件所含文件等信息,便於瞭解軟件;
* RPM 管理的方式使用數據庫記錄RPM文件的相關參數,便於升級、移除、查詢與驗證。
咱們有時候在安裝某個程序時,報錯:
No package XXXXX available. Error: Nothing to do
這個時候,咱們能夠找到rpm文件先下載到本地,而後再經過本地目錄安裝。
sudo yum localinstall XXXXX-1.8.3-1.x86_64.rpm
以上問題解決,報錯消失。
----我的學習筆記