1. 程式人生 > >(一)Linux基礎(1)

(一)Linux基礎(1)

融合 code 優化 管理 pac 軟件 不同的 包管理器 控制進程

一、計算機的組成及其功能。
計算機由以下四部分組成:
1、中央處理器(CPU),CPU又由運算器和控制器構成
CPU的功能主要是解釋計算機指令以及處理計算機軟件中的數據。
控制器(Control):是整個計算機的中樞神經,其功能是對程序規定的控制信息進行解釋,根據其要求進行控制,調度程序、數據、地址,協調計算機各部分工作及內存與外設的訪問等。
運算器(Datapath):運算器的功能是對數據進行各種算術運算和邏輯運算,即對數據進行加工處理。

2、存儲器(Memory):存儲器的功能是存儲程序、數據和各種信號、命令等信息,並在需要時提供這些信息。例如計算機的內存。

3、輸入設備(Input system):輸入設備是計算機的重要組成部分,輸入設備與輸出設備合稱為外部設備,簡稱外設,輸入設備的作用是將程序、原始數據、文字、字符、控制命令或現場采集的數據等信息輸入到計算機。常見的輸入設備有鍵盤、鼠標器、光電輸入機、磁帶機、磁盤機、光盤機等。

4、輸出設備(Output system):輸出設備與輸入設備同樣是計算機的重要組成部分,它把外算機的中間結果或最後結果、機內的各種數據符號及文字或各種控制信號等信息輸出出來。微機常用的輸出設備有顯示器、打印機、激光印字機、繪圖儀及磁帶、光盤機等。

二、內核功能以及作用

完整的操作系統(OS)由kernel(內核)加Application(應用程序)組成
狹義的OS就指內核(kernel),內核的作用如下:

內核將硬件的接口抽象成為系統調用
1、進程管理
?內核負責創建和銷毀進程, 並處理它們與外部世界的聯系(輸入和輸出). 不同進程間通訊(通過信號, 管道, 或者進程間通訊原語)對整個系統功能來說是基本的, 也由內核處理. 另外, 調度器, 控制進程如何共享 CPU, 是進程管理的一部分. 更通常地, 內核的進程管理活動實現了多個進程在一個單個或者幾個 CPU 之上的抽象.

2、內存管理
?計算機的內存是主要的資源, 處理它所用的策略對系統性能是至關重要的. 內核為所有進程的每一個都在有限的可用資源上建立了一個虛擬地址空間. 內核的不同部分與內存管理子系統通過一套函數調用交互, 從簡單的 malloc/free 對到更多更復雜的功能.
3、文件系統
?Unix 在很大程度上基於文件系統的概念; 幾乎 Unix 中的任何東西都可看作一個文件. 內核在非結構化的硬件之上建立了一個結構化的文件系統, 結果是文件的抽象非常多地在整個系統中應用. 另外, Linux 支持多個文件系統類型, 就是說, 物理介質上不同的數據組織方式. 例如, 磁盤可被格式化成標準 Linux 的 ext3 文件系統, 普遍使用的 FAT 文件系統, 或者其他幾個文件系統.
4、設備控制(驅動程序)
?幾乎每個系統操作最終都映射到一個物理設備上. 除了處理器, 內存和非常少的別的實體之外, 全部中的任何設備控制操作都由特定於要尋址的設備相關的代碼來進行. 這些代碼稱為設備驅動. 內核中必須嵌入系統中出現的每個外設的驅動, 從硬盤驅動到鍵盤和磁帶驅動器.
5、網絡功能
?網絡必須由操作系統來管理, 因為大部分網絡操作不是特定於某一個進程: 進入系統的報文是異步事件. 報文在某一個進程接手之前必須被收集, 識別, 分發. 系統負責在程序和網絡接口之間遞送數據報文, 它必須根據程序的網絡活動來控制程序的執行. 另外, 所有的路由和地址解析問題都在內核中實現.

三、常見Linux的發行版,不同發行版之間的聯系與區別。
主流發行版如下
1.Debian 它的分支:Ubuntu->mint\
ubuntu: 基於Debian二次開發的開源Linux操作系統,主要針對桌面和服務器。
mint:是基於ubuntu的Linux發行版,致力於桌面系統,對個人用戶來說更加的美觀和高效。

2.Slackware 它的分支:S.u.S.E->SLES,OpenSUSE
S.u.S.E: 是基於slackware二次開發的一款Linux,也是針對於商業桌面、服務器。
SLES:企業服務器操作系統,可以和微軟的系統互相兼容。
OpenSuSE:由S.u.S.E發展而來,主要用於桌面環境,用戶界面非常的華麗,性能良好。
3.RedHat 它的分支RedHat 9.0-> RedHat Enterprise Linux:RHEL->CentOS:Community Enterprise OS ;Fedora
RHEL:RedHat公司發布面向企業的Linux操作系統。
CentOS:基於RedHat提供的可自由使用源代碼的Linux版本,相當於RHEL的山寨版,主要是開源、免費,特有的社區文化促進CentOS不斷發展完善,其本質內容上和RHEL沒有什麽區別
Fedora:可以看做是RedHat方面的一個測試版本,主要是針對新的技術測試提供一個系統平臺,而且版本更新叠代非常的快。
4.Gentoo:基於linux的自由操作系統,它能為幾乎任何應用程序或需求自動地作出優化和定制。追求極限的配置、性能,以及頂尖的用戶和開發者社區,都是Gentoo體驗的標誌特點,尤其***非常喜歡使用Gentoo的系統版本。
5.ArchLinux :以輕量簡潔為設計理念的Linux發行版。其開發團隊秉承簡潔、優雅和代碼最小化的設計宗旨。 發行版之間的聯系與區別
聯系:所有的版本型號,無論是何種系統均采用的是Linux的內核,都需要遵循GNU的GPL協定,也就是通俗意義上的GNU/Linux。
區別:不同的發行版系統各自的版本號均不同都有自己獨特的版本號信息
例如:
RHEL:5.x,6.x,7.x
Fedora 23
Debian:8.x
OpenSuSE:13.x
同時雖然底層Linux內核一樣,但封裝後攜帶的庫以及應用程序各不相同,不同的包管理器(SLES、Fedora、openSUSE、centos、RHEL使用rmp包管理系統,包文件以RPM為擴展名;Ubuntu系列,Debian系列使用基於DPKG包管理系統,包文件以deb為擴展名。)
Debian: dpkg程序包管理器,前端管理工具 apt-get Ubuntu繼承了這個管理法則) 包格式deb
ReadHat: rpm管理包, 前端管理工具yum-->新一代叫dnf CentOS繼承 包格式rpm
S.u.S.E: rpm,zypper

四、常見的開源協議(GPL,LGPL, BSD,Apache等)以及開源協議的區別
GPL(GNU通用公共許可證): General Public License
大多數軟件許可證決意剝奪你共享和修改軟件的自由。相比之下,GNU通用公共許可證試圖保證你共享和修改自由軟件的自由。——保證自由軟件對所有用戶是自由的
為了保護你的權利,我們需要作出規定:禁止任何人不承認你的權利,或者要求你放棄這些權利。如果你修改了自由軟件或者發布了軟件的副本,這些規定就轉化為你的責任。
例如,如果你發布這樣一個程序的副本,不管是收費的還是免費的,你必須將你具有的一切權利給予你的接受者;你必須保證他們能收到或得到源程序;並且將這些條款給他們看,使他們知道他們有這樣的權利。

LGPL: Lesser GPL
任何程序員在寫程序時 調用了庫接口不用開源 。

BSD許可協議(Berkeley Software Distribution license)是自由軟件中使用最廣泛的許可協議之一
1、如果二次發布的產品中包含源代碼,則在源代碼中必須帶有原來的代碼中的BSD協定;
2、如果二次發布產品是二進制格式的庫或程序,則需要在發布的文檔或版權聲明中說明包含原來的代碼中的BSD協定;
3、不可以用開源代碼的作者或組織,以及原來的產品的名字做市場推廣;
跟其他條款相比,從GNU通用公共許可證(GPL)到限制重重的著作權(Copyright),BSD許可證比較寬松,甚至跟公有領域更為接近。
BSD許可證被認為是copycenter(中間著作權),介乎標準的copyright與GPL的copyleft之間。GPL強迫後續版本必須一樣是自由軟件,BSD的後續版本可以選擇要繼續是BSD或其他自由軟件條款或封閉軟件等等。
許可證文本被認為遵循公有領域,所以可以不受限制地修改。
遵守BSD License的軟件,允許用作商業用途,甚至可按照專屬許可證進行再發布。
自由軟件作者可以方便地采用BSD許可證下的軟件,從而跟GPL下的作品融合。
BSD許可證並不允許受讓方將其刪除或替換為其他許可證。
以BSD許可證授權的軟件派生著作,都必須要包含一段文字以交代源代碼的來源。GNU工程將這個稱為“令人感到不舒服的BSD交代條款”(obnoxious BSD advertising clause)。

Apache(協定): Apache Software Foundatin Apache軟件組織基金會
Apache許可證(Apache License),是一個由Apache軟件基金會發布的自由軟件許可證,最初為Apache http服務器而撰寫。Apache許可證要求被授權者保留著作權和放棄權利的聲明,但它不是一個反著作權的許可證。
Apache許可證是寬容的,因為它不會強制派生和修改產物使用相同的許可證進行發布(與一些著作權許可證不同,參見比較)。但它仍然要求對所有未修改的部分應用相同的許可證,並且在每個許可文件中,必須保留再分發代碼中的任何原始著作權,專利,商標和歸屬通知(不需要包括任何部分的派生作品);並且在每個更改的許可文件中,都必須添加一條通知,說明對該文件進行了更改。

如果聲明文本文件作為原始作品發布的一部分包含在內,則派生作品必須在包含該通知文本文件的可讀副本,可以是文檔或顯示在軟件中。

聲明文件的內容不會修改許可證,因為它們僅用於提供信息,並且可以在許可證文本中添加更多屬性聲明,前提是這些聲明不能被理解為修改許可證。修改可能有適當的著作權聲明,並可能為修改提供不同的許可條款。

除非另有明確規定,否則許可證持有者向授權者提交的任何文稿將根據許可證的條款進行,沒有任何條款和條件,但這並不排除與授權者有關的這些貢獻有單獨的協議。
Apache軟件基金會與自由軟件基金會都同意Apache許可證屬於自由軟件許可證,且兼容於第三版的GNU通用公共許可證,不過,雙方也都同意,第一版與第二版的GNU通用公共許可證並不兼容於Apache許可證。

五、Linux的哲學思想
1、一切皆文件:
把幾乎所有的資源統統抽象為文件形式;包括硬件設備,甚至通信接口等;
open(),read(),Write(),close(),delete(),create()
硬件設備也可通過文件表示:
物理終端:/dev/console
虛擬終端:/dev/tty# [1-6] #表示數字1到6之間
串行終端:/dev/ttyS#
偽終端:/dev/pts/#
2、由眾多功能單一的程序組成;一個程序只做一件事,並且做好;
組合小程序完成復雜任務;
3、盡量避免跟用戶交互;
目標:易於以編程的方式實現自動化任務;
4、使用文本文件保存配置信息;

六、linux目錄結構以及目錄結構命名規定
目錄結構是為了將眾多的文件有效的組織起來
Linux目錄是一個倒置樹狀結構
目錄:路徑映射;
文件:存儲空間存儲的一旦流式數據,對數據可以做到按名存取(有邊界的磁盤上的一段數據流);
文件系統:層級結構,有索引;
/:原初起點,根,根目錄;
/ 第二層結構(子目錄)/第三層結構
examlple
/dev/pst/2:
最左側/:表示根目錄
其它的/:表示路徑分隔符
Linux的路徑分隔符是/(windows的路徑分隔符是\)
文件的路徑表示:
絕對路徑:從根開始表示出的路徑
相對路徑:從當前位置開始表示出的路徑

  文件名使用法則:
      1.嚴格區分字符大小寫:file1,File1,FILE1都不是同一個文件
      2.目錄頁也是文件,在同一路徑下,兩個文件不能同名,linux下的文件夾和文件名不能同名(一切皆文件)
      3.支持使用除/以外的任意字符;
      4.最長不能超過255個字符;

  用戶有家目錄:home,
      用戶的起始目錄:普通用戶管理文件的位置
  工作目錄:

       /etc/sysconfig/network-scripts/ifcfg-ens33
             basename:最右側的文件或目錄;      (基名)
             dirname: basename左側的路徑:     (目錄名)
        命令:
           ~]# basename /PATH/TO/SOMEFILE
               SOMEFILE
           ~]# dirname /PATH/TO/SOMEFELE
               /PATH/TO

(一)Linux基礎(1)