1. 程式人生 > >Linux學習之基礎篇—1

Linux學習之基礎篇—1

一、計算機組成及其功能

計算機組成包括硬體和軟體兩部分,硬體指計算機系統中各種物理裝置,軟體指各種需要的應用程式。

硬體系統

  • 計算機硬體是指構成計算機的物理裝置。所有計算機在基本結構上都遵循馮·諾依曼體系。link
    馮·諾依曼設計思想包括三方面:

1.計算機應包括運算器、控制器、儲存器、輸入裝置和輸出裝置五部件。
2.計算機內部的資料和指令以二進位制表示。
3.程式和資料存放在儲存器中,計算機執行程式時,無需人工干預,自動、連續地執行程式,並得到預期結果。

(1)、控制器

計算機的中樞神經,其功能時對程式規定的控制資訊進行解釋,根據其要求進行控制,排程程式、資料、地址,協調計算機各部分工作及記憶體與外設的訪問等

(2)、運算器

其功能是對資料進行各種算術運算和邏輯運算—對資料進行加工處理

(3)、儲存器

儲存器的功能是儲存程式、資料和各種訊號、命令等資訊—對資料進行加工處理

(4)、輸入裝置

輸入裝置與輸出裝置合稱為外部裝置—外設,輸入裝置的作用是將程式、原始資料、文字、字元、控制命令或現場採集的資料等資訊輸入到計算機。常見的輸入裝置有鍵盤、滑鼠、光輸入機、磁帶機、磁碟機等。

(5)、輸出裝置

輸出裝置將外計算機的中間部分或最後結果、機內的各種資料符號及文字或各種控制訊號等資訊輸出來。微機常用的輸出裝置有顯示終端CRT、印表機、鐳射印字機、光碟等。

軟體系統

通常把計算機軟體分為“系統軟體”和“應用軟體”兩大類。

系統軟體
系統軟體指管理、控制和維護計算機及其外部裝置,提供使用者與計算機之間介面等方面的軟體。相對於軟體而言,系統軟體裡計算機系統的硬體比較近,而離使用者關心的問題則遠一些,它不專門針對具體的應用問題。

應用軟體

一般指呢些能夠直接幫助個人或單位完成具體工作的各種各樣的軟體,如文書處理軟體、計算機輔助設計軟體、企業事業單位的資訊管理軟體以及遊戲軟體等。應用軟體一般不能獨立在計算機上執行而必須由系統軟體支援。支援應用軟體執行的最為基礎的一種系統軟體就是作業系統。應用軟體、特備是各種專用軟體包經常是由專門的軟體廠商提供。

二、核心功能及作用

1、程序管理

核心負責建立和銷燬程序, 並處理它們與外部世界的聯絡(輸入和輸出). 不同程序間通訊(通過訊號, 管道, 或者程序間通訊原語)對整個系統功能來說是基本的, 也由核心處理. 另外, 排程器, 控制程序如何共享 CPU, 是程序管理的一部分. 更通常地, 核心的程序管理活動實現了多個程序在一個單個或者幾個 CPU 之上的抽象.

2、記憶體管理

計算機的記憶體是主要的資源, 處理它所用的策略對系統性能是至關重要的. 核心為所有程序的每一個都在有限的可用資源上建立了一個虛擬地址空間. 核心的不同部分與記憶體管理子系統通過一套函式呼叫互動, 從簡單的 malloc/free 對到更多更復雜的功能.

3、檔案系統

Unix 在很大程度上基於檔案系統的概念; 幾乎 Unix 中的任何東西都可看作一個檔案. 核心在非結構化的硬體之上建立了一個結構化的檔案系統, 結果是檔案的抽象非常多地在整個系統中應用. 另外, Linux 支援多個檔案系統型別, 就是說, 物理介質上不同的資料組織方式. 例如, 磁碟可被格式化成標準 Linux 的 ext3 檔案系統, 普遍使用的 FAT 檔案系統, 或者其他幾個檔案系統.

4、裝置控制

幾乎每個系統操作最終都對映到一個物理裝置上. 除了處理器, 記憶體和非常少的別的實體之外, 全部中的任何裝置控制操作都由特定於要定址的裝置相關的程式碼來進行. 這些程式碼稱為裝置驅動. 核心中必須嵌入系統中出現的每個外設的驅動, 從硬碟驅動到鍵盤和磁帶驅動器. 核心功能的這個方面是本書中的我們主要感興趣的地方.

5、網路

網路必須由作業系統來管理, 因為大部分網路操作不是特定於某一個程序: 進入系統的報文是非同步事件. 報文在某一個程序接手之前必須被收集, 識別, 分發. 系統負責在程式和網路介面之間遞送資料報文, 它必須根據程式的網路活動來控制程式的執行. 另外, 所有的路由和地址解析問題都在核心中實現.

三、常見Linux發行版及版本間聯絡與異同

1、常見的Linux發行版本

  • Debian:執行起來及其穩定,非常實用於伺服器。
  • Gentoo:與Debian一樣,這款作業系統包含數量眾多的軟體包。
  • Ubuntu:是Debian的衍生版。
  • Damn Vulnerable Linux:用於訓練Linux管理員(因為其綁定了壞的、配置不當、過時的、容易被不法分子攻擊的軟體)
  • 紅帽企業級Linux:有伺服器版本,支援眾多處理器架構,包括x86和x86_64。
  • Fedora:適用於那些想嘗試最先進的技術,等不及程式的穩定版本出來。
  • Kali Linux:Debian的一款衍生版,Kali旨在用於滲透測試。
  • Arch Linux:是一款採用滾動發行方式作業系統只需要安裝一次當有某個新版本就可以升級發行版本,不需要重新安裝。
  • openSUSE:發行版本是免費的,並不提供商業用途使用。

2、版本間聯絡與異同

(1)、聯絡

  • 同屬於Linux大家族,系統中都有Linux核心

(2)、異同

從大的方面來說,Linux發行版可以大致分為個人桌面版和企業伺服器版

  • 個人桌面版

面向個人使用者。由於安裝圖形化介面,介面美觀、操作方便、比較適合新手,但對於伺服器版來說較消耗資源。

  • 企業級伺服器版

面向企業使用者,系統穩定性好,資源消耗小,滿足企業需求,但基本上都是命令列介面,需要一定的基礎才能上手。

四、常見開原協議及協議間區別

Apache License 2.0

這是一個著名的非盈利開源組織Apache採用的協議,它勵程式碼共享和尊重原作者的著作權,同時也允許程式碼修改,再發布(作為開源或商業軟體)。

  • 要求
    1、在程式碼中保留作者提供的協議和版權資訊
    2、如果修改了程式碼,則必須在被修改的檔案中進行說明。

  • 允許的權利
    商用、分發、修改、專利授權、私用、附加協議

  • 禁止項
    1、禁止因使用等造成影響責任承擔、也就是說免責申明
    2、不能使用相應的商標。

GPLv3
此協議是應用最為廣泛的開源協議,擁有較強的版權自由要求,也賦予和保證了開源專案開發者廣泛的權利。基本上,它允許使用者合法複製,分發和修改軟體,但衍生程式碼的分發需開源並且也要遵守此協議。此協議有許多變種,不同變種的要求略有不同。

  • 要求
    1、修改後的原始碼也需要公開
    2、版權及協議也要於此協議一致
    3、修改後,需要在相應的檔案做說明,

  • 允許
    商用,分發,修改,專利授權,私用

  • 禁止
    禁止因使用等造成影響責任承擔、也就是說免責申明
    靜止在軟體分發傳播過程中附加上原來沒有的協議條款等
    提示:商業軟體不能使用GPL協議的程式碼。

LGPL
其主要用於一些程式碼庫,LGPL比起GPL它授予的許可權較少,LGPL允許商業軟體通過類庫引用(link)方式使用LGPL類庫而不需要開源商業軟體的程式碼。因此使用LGPL協議的開原始碼可以被商業軟體作為類庫引用併發布和銷售。注意是以類庫的形式使用,也就是說如果修改了原始碼的話則也必須使用LGPL協議貢獻原始碼出來。

  • 要求
    1、公開使用了LGPL部分的程式碼,其餘部分不需要公開。
    2、可以庫引用的方式用於商業軟體。
    3、在程式碼中保留作者提供的協議和版權資訊

  • 允許
    商用、分發、修改、專利授權、私用、附加協議

  • 禁止
    禁止承擔責任,(免責申明)、

MIT
寬鬆簡單且精要的一個協議。在適當標明來源及免責的情況下,它允許你對程式碼進行任何形式的使用,也就是原作者只想保留版權,而無任何其他了限制,而你必須在發行版裡包含原許可協議的宣告,無論你是以二進位制釋出的還是以原始碼釋出的。

  • 要求
    1、在程式碼中保留作者提供的協議和版權資訊

  • 允許
    商用、分發、修改、私用、附加協議

  • 禁止
    禁止承擔責任,(免責申明)

BSD
BSD開源協議是一個給於使用者很大自由的協議。基本上使用者可以”為所欲為”,可以自由的使用,修改原始碼,也可以將修改後的程式碼作為開源或者專有軟體再發布。與MIT協議只存在細微差異。差別為MIT可以使用原名稱進行宣傳,而BSD不可以。

  • 要求
    在程式碼中保留作者提供的協議和版權資訊

  • 允許
    商用、分發、修改、私用、附加協議

  • 禁止
    禁止承擔責任,(免責申明)

Mozilla 2.0
是由Mozilla基金建立維護的。此協議旨在較為寬鬆的BSD協議和更加互惠的GPL協議中尋找一個折衷點,允許免費重發布、免費修改,但要求修改後的程式碼版權歸軟體的發起者。這種授權維護了商業軟體的利益,它要求基於這種軟體得修改無償貢獻版權給該軟體。

  • 要求
    1、公開原始碼
    2、在程式碼中保留作者提供的協議和版權資訊

  • 允許
    商用、分發、修改、專利授權、私用、附加協議

  • 禁止
    1、禁止承擔責任,(免責申明)
    2、禁止使用商標

五、Linux哲學思想

1、一切皆檔案(以哪個鍵裝置亦如此)

所有資源在Linux上都已檔案方式存在,包括硬體裝置(裝置檔案)通訊方式。
eg:Linux系統中所有的裝置都是作為檔案的一個節點來掛載和使用的,比如光碟機,一般掛載在/mnt/cdrom裡。

2、單一目的的小程式(有眾多目的單一的小程式組成)

一條命令完成一個任務,一串程式碼完成一任務,這些小程式彼此獨立,程式碼簡單,目的明確。

3、組合小程式完成複雜任務

一個複雜的任務不必使用一個大型的程式來獨立完成,它由多個單獨的小程式組合以完成複雜任務。這樣便於排錯,也讓程式執行更完美。

4、檔案儲存配置資訊

使用簡單的檔案編輯器,就可以完成配置。

5、儘量避免捕獲使用者介面

儘量不和使用者進行互動,一個程式一旦開始執行,就不需要使用者進行任何操作。

6、提供機制,而非策略

機制是泥胚,策略是可以制定各種細節。機制是介面,策略是資料流。管道是機制,應用管道處理各種資料是策略。AWK的讀入行迴圈是機制,各種正則表示式與後附的處理操作是策略。

六、Linux目錄結構及目錄命名規定

1、目錄結構

  • /bin

bin 是Binary的縮寫,這個目錄存放著經常使用的命令

  • /boot

這裡存放的是啟動Linux時使用的一些核心檔案,包括一些連線檔案及映象檔案

  • /dev

dev是Device(裝置)的縮寫,該目錄下存放的是Linux的外部裝置,在Linux中訪問裝置的方式和訪問檔案的方式相同

  • /etc

這個目錄用來存放所有的系統管理所需要的配置檔案和子目錄

  • /home

使用者的主目錄,在Linux中,每個使用者都有一個自己的目錄,一般該目錄名是用使用者的賬戶名命名。

  • /lib

此目錄裡面存放著系統最近本的動態連結共享庫,其作用類似於Windows裡面DLL檔案。幾乎所有的應用程式都需要用到這些共享庫。

  • /lost+found

此目錄一般情況下是空的,當系統非法關機後,這裡存放一些檔案

  • /media

Linux系統會自動識別一些裝置,例U盤、光碟機等,當識別後,Linux會把識別的裝置掛載到這個目錄下。

  • /mnt

系統提供該目錄是為了讓使用者臨時掛載別的檔案系統,我們可以將光碟機掛載在/mnt/上,然後進入該目錄就可以檢視光碟機裡面的內容了。

  • /opt

此目錄是給主機額外安裝軟體所擺放的目錄。比如安裝一個oracle資料庫則就可以放到這個目錄下,預設是為空。

  • /proc

此目錄是一個虛擬目錄,它是系統記憶體的對映,可以通過直接訪問這個目錄來獲取系統資訊。此目錄的內容不在硬碟上而是在記憶體中,我們可以直接修改裡面的某些檔案,比如可以通過下面命令來遮蔽主機的ping命令,使別人無法ping你的主機

echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

  • /root

此目錄為系統管理員,也稱作超級許可權者的使用者主目錄。

  • /sbin

s就是Super User的意思,這裡存放的是管理員使用的系統管理程式

  • /selinux

此目錄是Redhat/CentOS所特有的目錄,Selinux回一個安全機制,類似於Windows防火牆,但是這套機制比較複雜,這個目錄就是存放Selinux相關的檔案。

  • /srv

此目錄存放一些服務啟動之後需要提取的資料。

  • /sys

這是Linux2.6核心一個很大變化。此目錄下安裝了2.6核心中新出現的一個檔案系統sysfs。
sysfs檔案系統集成了下面3種檔案系統的資訊:針對程序資訊的proc檔案系統、針對裝置的devfs檔案系統以及針對偽終端的devpts檔案系統。
該檔案系統是核心裝置樹的一個直觀反映。
當一個核心物件被建立時候,對應的檔案和目錄也在核心物件子系統中被建立。

  • /tmp

此目錄存放一些伺服器啟動後需要提取的資料。

  • /usr

使用者的很多應用程式和檔案都放在這個目錄下,類似Windows下的program file目錄。

  • /usr/bin

系統使用者使用的應用程式。

  • /usr/sbin

超級使用者使用的比較高階的管理程式和系統守護程式。

  • /usr/src

核心原始碼預設放置目錄。

  • /var

此目錄中存放著在不斷擴充的東西,習慣將那些經常被修改的目錄放在這個目錄下。包括各種日誌檔案。

  • /run

是一個臨時檔案系統,儲存系統啟動以來的資訊。當系統重啟時,這個目錄下的檔案應該被刪掉或清除。若你的系統上有/var/run目錄應該讓它指向run。

2、目錄命名規定

(1)、除了/之外所有字元都合法
(2)、有些字元最好不要使用,比如空格符、製表符、退格符、字元、: ? ,@ # \ | ; ’ " <>等
(3)、避免使用+、-或 · 來作為普通檔名的第一個字元
(4)、大小寫敏感