當時學習《鳥哥的Linux私房菜-基礎學習篇》記錄的點

来源:https://www.cnblogs.com/xuliuzai/archive/2019/05/20/10894124.html
-Advertisement-
Play Games

1.當執行一個指令的時候,舉例來說【ls】,系統會依照PATH的設定去每個PATH定義的目錄下搜尋文件名為ls的可執行文件,如果在PATH定義的目錄中含有多個文件名為ls的可執行文件,那麼先搜尋到的同名指令先被執行! 2.使用echo $PATH可以查看那些目錄被定義了。echo 有【顯示、印出】的 ...


1.當執行一個指令的時候,舉例來說【ls】,系統會依照PATH的設定去每個PATH定義的目錄下搜尋文件名為ls的可執行文件,如果在PATH定義的目錄中含有多個文件名為ls的可執行文件,那麼先搜尋到的同名指令先被執行!

2.使用echo $PATH可以查看那些目錄被定義了。echo 有【顯示、印出】的意思,而PATH 前面加上的 $ 表示後面接的是變數。

3.shell script 是利用shell 的功能所寫的一個【程式program】,這個程式是使用純文本文件,將一些shell的語法與指令(含外部指令)寫在裡面,搭配正規表示法、管線命令與數據流重導向等功能,已達到我們所想要的處理目的。

4.幹嘛學些shell scripts (1)自動化管理的重要依據;每天要進行的任務有:查詢登入檔、追蹤流量、監控用戶使用主機狀態、主機各項硬設備狀態、主機軟體更新查詢等等。(2)追蹤與管理系統的重要工作。(3)簡單入侵檢測功能。(4)連續指令單一化。(5)簡單的數據處理。(6)跨平臺支持與學習歷程較短。

5.(1)指令的執行時從上而下、從左到右的分析與執行;(2)指令、選項與參數間的多個空白都會被忽略掉;(3)空白行也將被忽略掉,並且【tab】按鍵所推開的空白同樣視為空格鍵;(4)如果讀取到一個Enter符號(CR),就嘗試開始執行改行(或該串)命令;(5)至於如果一行的內容太多,則可以使用【\Enter】來延伸至下一行;(6)【# 】可作為批註!任何加在# 下麵的資料將全部被視為批註文字而被忽略。

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)。

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空間大

 

  

----個人學習筆記

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 文章大綱 一、運行模式二、用戶與用戶組管理(重點)三、網路設置四、ssh服務(重點)五、學習資料下載六、參考文章 自有服務,即不需要用戶獨立去安裝的軟體的服務,而是當系統安裝好之後就可以直接使用的服務(內置)。 一、運行模式 運行模式也可以稱之為運行級別。在linux中存在一個進程:init (in ...
  • 文章大綱 一、vi介紹二、vim三種模式(重點)三、命令模式四、模式間的切換(重點)五、末行模式六、編輯模式七、實用功能八、擴展九、學習資料下載十、參考文章 一、vi介紹 Vi編輯器是所有Unix及Linux系統下標準的編輯器,類似於windows系統下的notepad(記事本)編輯器,由於在Uni ...
  • 1.ORACLE資料庫數據導入到測試庫環境 172.15.1.51 root kic@test 172.15.1.52 root 一般先將數據導入52的環境(配置比較低),再將數據導入51的環境(本文檔使用的環境) 2. 測試環境建立oracle資料庫用戶,並且賦予nc表空間許可權 3.使用數據泵im ...
  • 回到目錄 通常,半導體元器件的製造商會為自己每一種型號的產品提供一個描述其參數性能的詳細說明書,術語叫作datasheet,中文叫作“數據規格書”,也叫“數據手冊”。下麵我們以常用的1N4148二極體為例,來介紹如何閱讀二極體的數據手冊。 在www.alldatasheet.com上,你可以搜到絕大 ...
  • 文章大綱 一、高級指令二、練習題三、學習資料下載四、參考文章 一、高級指令 1. hostname指令 作用:操作伺服器的主機名(讀取、設置)語法1:#hostname 含義:表示輸出完整的主機名語法2:#hostname -f 含義:表示輸出當前主機名中的FQDN(全限定功能變數名稱) 2. id指令 作 ...
  • 文章大綱 一、指令與選項二、基礎指令(重點)三、進階指令(重點)四、學習資料下載五、參考文章 一、指令與選項 什麼是Linux的指令?指在Linux終端(命令行)中輸入的內容就稱之為指令。 一個完整的指令的標準格式:Linux通用的格式 一個指令可以包含多個選項操作對象也可以是多個 例如:需要讓張三 ...
  • 什麼是操作系統? 操作系統(Operating System,OS)是控制應用程式執行和充當硬體系統和應用程式之間的界面的軟體。 操作系統的目標 方便性、有效性、可擴充性、開放性。 操作系統的作用 OS作為用戶與電腦硬體系統之間的介面 如圖所示,用戶可以通過命令方式、系統調用和圖標 視窗方式實現與 ...
  • 話不多說,直接進入正題 第一步查看是否能ping通,第二步就是掃描埠,開放了埠才能進行攻擊 linux進入msfconsole,搜索03_026 等待一會,返回漏洞的全名,exploit是一個攻擊模塊 接下來就是使用這個漏洞(在linux里複製快捷鍵是ctrl+shift+c,粘貼快捷鍵是ctr ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...