計算機概論與Linux簡介
- 計算機概論
- Linux介紹與版本
Linux的規劃與安裝
- Linux與硬件平臺密切相關
- 規劃硬件與Linux安裝
- 主機規劃與磁盤分區
- 安裝CentOS、多重引導
簡單使用
- 幫助手冊
- 文本編輯器
- 關機
0. Linux介紹與版本
操作系統(Linux):高效地控制計算機系統硬件,以及系統資源的分配,提供計算機運行所需的功能,為應用層提供一組系統調用接口
- 操作系統移植:參照硬件的功能函數,修改操作系統程序碼,經改版后的操作系統就能在另一個硬件平臺運行
- 2006之前,MAC基于Power CPU架構(IBM設計的硬件架構),之后,基于X86架構(采用Intel設計的硬件架構)
0.1 Linux是類Unix的GNU GPL自由、開源軟件
0.1.1 Unix
第一階段:Unix出現前
1969年前,主機的輸入輸出設備僅可用讀卡機/打印機——批次型操作系統
- 程序設計者將程序相關信息在讀卡紙上打孔,再將讀卡紙插入讀卡機作為主機的輸入,進行運算
1960年,MIT提出 相容分時系統 (Compatible Time-Sharing System, CTSS),多個終端機通過連線接入大型主機,利用主機的資源進行運算
貝爾實驗室、MIT、奇異公司(通用電器)共同發起Multics計劃:讓大型主機達成可供300個以上終端機連線使用的目標
- 1969年前后,貝爾實驗室退出,但最終發展出這一系統https://www.multicians.org/
第二階段:Unix的產生
-
1969年,Ken Thompson的小型文件服務系統
Thompson基于PDP-7這一主機,進行操作系統核心程序編寫。基于組合語言(Assembler)寫出了一組核心程序,包括核心工具程序以及一個文件系統——Unics,Unix的原型
Assembler:直接與芯片對接的低級語言,必須了解硬件架構
-
所有程序或設備都是文件
-
構建編輯器伙伴或文件,一個程序完成一個目標,且要高效地完成目標
-
-
1973年,Ritchie等人以C語言寫出Unix的核心
thompson與Ritchie合作想將Unics改為高階語言編寫,但當時的B高級語言性能不好,所以將B重寫為C語言,以C語言改寫Unics的核心程序。
使用高級語言編寫,與硬件相關性減小,可以輕易移植到不同機器上
Assembler具有專一性,每次安裝到一臺新的機器都需要重新編寫組合語言
-
1977年,Unix第一個重要分支——BSD
貝爾屬于AT&T,Berkeley大學取得了Unix的核心源代碼后,著手修改成適合自己機器的版本, 并且同時增加了很多工具軟件與編譯程序,最終將它命名為Berkeley Software Distribution(BSD)
Sun公司以BSD發展的核心進行自己的商業Unix版本發展
-
1979年,Unix第二個重要分支——System V架構,以及版權宣告
每一家公司自己出的Unix雖然在架構上面大同小異,但是卻真的僅能支持自身的硬件
Unix強調多用戶多任務環境,但早期286架構下的CPU性能不足,所以沒有人研究將Unix移植到x86 CPU
-
1979年,AT&T推出System V第七版Unix,支持x86架構的計算機
出于商業考慮,AT&T在發布時,提及版權限制,“不向學生提供源碼”
第三階段:后續發展
-
1984年,X86架構的Minix操作系統開始撰寫,1986年完成,次年出版Minix相關書記(Andrew Tanenbaum,譚寧邦),完全不參考Unix源碼,但強調與Unix相容
可通過磁片/磁帶購買,且提供源碼
教學目的,因此并不關注生態以及用戶需求
-
1984年,Richard Mathew Stallman(史托曼)發起GNU計劃
1983年以后,因為實驗室硬件的更換,使得史托曼無法繼續以原有的硬件與操作系統(Lisp)繼續自由程序的撰寫
將軟件移植到Unix上面,為了讓軟件可以在不同的平臺上運行, 因
此,史托曼將他發展的軟件均撰寫成可以移植的型態(公布源碼)1984年,開始GNU計劃,目的是:創建一個自由、開放的Unix系統
參考Unix上的軟件,依據這些軟件開發相同功能的軟件——GNU軟件
隨著GNU軟件的流行,史托曼開始撰寫GCC編譯器,
- 所有軟件都需要編譯為二進制的可執行文件,C語言編譯器眾多,但都是專利軟件
- GNU C Compiler
- 先將編輯器Emacs移植到Unix上(語法檢查),磁帶出售,資金,成立自由軟件基金會(Free Software Foundation,FSF)。而后,合作完成了GCC。并撰寫了很多可以被調用的C語言函數庫(GNU C library,glibc)以及操作系統的接口BASH Shell——1990年左右完成
-
1985年,為避免GNU開發的自由軟件被轉化為專利軟件,與律師起草了通用公共許可證(General Public License,GPL)。
emacs
GCC
glibc
Bash shell
hurd,GNU開發的內核
-
1988年:圖形接口XFree 86計劃
1984年,MIT與合作廠商發布 X Window System
1988年,成立非營利性XFree86組織(X Window System+Free+x86)
-
1991年,芬蘭的赫爾辛基大學的Linus Torvalds,宣稱他以bash, gcc等 GNU 的工具寫了一個小小的核心程序,可以在Intel的386機器上面運行
0.1.2 GNU,自由軟件與開放源碼
自由軟件活動:將源代碼連同軟件程序釋出的舉動,在 GNU 計劃的范疇之內就稱為自由軟件(Free Software)運動
自由軟件的版權GNU GPL:而為了避免Open source自由軟件被拿去做成專利軟件, 于是Stallman同時將GNU與FSF發展出來的軟件,都掛上GPL的版權宣告~
- http://people.ofset.org/~ckhung/a/c_83.php
- http://www.gnu.org
自由軟件(Free Software):一個軟件掛上了GPL版權宣告之后,他就成了自由軟件
- 任何人可取得軟件與源代碼
任何人可復制、修改、再發行
回饋:你應該將你修改過的程序碼回饋于社群!但不能
- 修改授權:你不能將一個GPL授權的自由軟件,在你修改后而將他取消GPL授權
單純販賣:你不能單純的販賣自由軟件。
自由軟件與商業行為:自由軟件搭配售后服務與相關手冊是可以售賣的
-
GPL是可以從事商業行為的
-
GPL 目前已經出到第三版 GPLv3。但是,目前使用最廣泛的,還是 GPLv2,包括 Linux 核心就還是使用 GPLv2 的
開源(Open Source):軟件在發布時,同時將作者的源代碼一起公布的意思
開源軟件:滿足開源軟件授權的軟件
需要滿足的條件
- 公布源碼
- 源碼可被全部或部分出售
- 允許修改或衍生產品
- 可以使用與原本完全不同的名稱或編號再發行
- 不可限制個人或團體、領域、產品使用權
- 不可具有排他條款
開源軟件與GPL自由軟件的區別:
開源軟件授權不要求再發行軟件具有相同的授權
開源軟件的全部或部分可作為其他軟件的一部分
任何軟件只要用了GPL的全部或部份程序碼,那么該軟件就得要使用GPL的授權
常見的開源軟件授權
- Apache License 2.0
- BSD 3-Clause “New” or “Revised” license
- BSD 2-Clause “Simplified” or “FreeBSD” license
- GNU General Public License (GPL)
- GNU Library or “Lesser” General Public License (LGPL)
- MIT license
- Mozilla Public License 2.0
- Common Development and Distribution License
專利軟件:僅推出可執行的二進制程序
- 免費專利軟件授權膜式
- Freeware:不公布源碼的免費軟件
- Shareware:有試用期
0.1.3 Linux
Linux歷史
386的多任務測試
多任務:同一CPU的分時復用
- 假設CPU頻率1GHZ,即每秒工作周期為10910^9109 次,假設每個程序運行1000個時鐘周期,然后就要切換到下一個程序,則CPU一秒可切換 10610^6106 次
- 實際上,任務切換也需要占用一定資源,所以在CPU上同時啟動兩個任務,比一個一個執行更耗時
早期X86的多任務處理表現不佳,386得到很大改善
- 要實現多任務,除了硬件(主要是CPU)具有多任務的特性外,操作系統也需要支持這個功能
多任務操作系統中,每個程序被執行,都會被分配一個最大CPU使用時長,一旦超過,當前工作就會被丟出CPU,等待下次工作調度再次調入內核
釋放Linux0.02
測試完386硬件性能后,Linus將Minix安裝到386計算機。
但Minix的軟件支持并不多,所以Linus決定依靠bash與gcc編譯器自己寫內核
很多在Unix上能夠運行的軟件,不能在Linux上運行
為了讓Linux相容于Unix系統,有兩種思路
- 修改軟件
- 修改Linux,讓Linux符合Unix的軟件運行規范
參考POSIX規范
可移植操作系統接口(Portable Operating System Interface,POSIX),規定了操作系統應當提供哪些功能,以及這些功能的接口和行為方式
- 旨在使應用程序在不同的Unix系統之間或從Unix系統向其他符合POSIX標準的系統之間移植時更加便捷,減少因系統差異帶來的問題。
系統級應用:系統調用、文件系統、網絡接口、進程控制、信號處理、進程間通信等
編程語言綁定:為C語言等常用編程語言提供了與操作系統接口交互的方式
工具與工具接口:定義了一系列工具的規范,比如文本處理工具(如grep、awk等)
Linux的發展
-
個人維護階段,Linus解決使用者的問題,或者特殊需求所需的硬件驅動
-
廣大志愿者維護階段,志愿者寫出相容的驅動程序/軟件,Linus將其代入內核,只要測試可以運行,則講這些程序加入內核
為應對隨時加入的程序,Linux發展出模塊化,一些功能獨立于內核,僅有需要時才加入內核,
-
核心功能分工發展階段,副手會先將來自志工們的修補程序或者新功能的程序碼進行測試, 并且結果上傳給托瓦茲看,讓托瓦茲作最后核心加入的源代碼的選擇與整合
1994年,完成Linux正式版內核,V1.0,并加入X window system的支持
1996年,完成2.0,2011年3.0,2015年4.0
Linux核心版本
release版本則是在主、次版本架構不變的情況下,新增的功能累積到一定的程度后所新釋出的核心版本
主線版本與長期維護版本
舊的版本在新的主線版本出現之后,會有兩種機制來處理,一種是結束開發 (End of Live,EOL),另一種是保持該版本的持續維護,即長期維護版本(Longterm)
uname -r
Linux distributions版本
GNU很多軟件都以LInux為主要操作系統,來進行開發
Linux kernel與可運行軟件整合,加上獨有工具,成為LInux的安裝套件(Linux distribution=Kernel+Softwares+Tools+可完整安裝程序)
為了讓所有Linux distributions開發不至于過大差異,采用Linux Standard Base(LSB),以及目錄架構的File system Hierarchy Standard(FHS)等標準來規范開發者
主要分為兩大類系統,一種使用RPM方式安裝軟件,一種使用Debian的dpkg方式安裝系統
RPM軟件管理 | DPKG軟件管理 | |
---|---|---|
商業公司 | RHEL (Red Hat 公司)、SuSE (Micro Focus) | Ubuntu(Canonical Ltd.) |
非商業公司 | Fedora、CentOS、OpenSuSE | Debian、B2D |
Linux應用
企業環境應用:向消費者或員工提供產品信息,整合企業內部的數據統一性
-
網絡服務器
-
關鍵任務的應用(金融數據庫、大型企業網管環境)
x86計算機性能大幅提升,且價格便宜
-
學術機構的高性能運算任務
個人環境的應用:圖形化界面
- 與X window System結合——KDE與GNOME窗口
移動設備
-
Android,針對ARM機器
安卓版本號就是Linux內核版本號
嵌入式系統:操作系統嵌入產品,不會被改動
- 家電、路由器、控制芯片等微控制器
云端應用:單一主機功能強大,造成硬件資源閑置
- 虛擬化技術得以快速發展:在一部實體主機上仿真出多個邏輯上完全獨立的硬件
1. Linux規劃與安裝
安裝Linux之前,需要對distributions特性,服務器的驅動支撐程度、未來升級需求、硬件擴充性需求等考慮
安裝過程中,需要對磁盤分區、文件系統等有一定程度的了解
1.1 主機規劃
各組件或裝置在Linux系統中都是一個文件
1.1.1 硬件選購
任務目標
首先要了解Linux系統預計實現的任務,在選購硬件時才知道哪些組件最為重要
-
裝機目標
計算機硬件的等級與主機未來的功能相關
-
效能/價格、效能/消耗瓦數
如果高一級的產品讓你的花費多一倍,但是新增加的效能卻只有10%,效能/價格比太低
每瓦效能越高,越省電
-
驅動支撐程度
硬件廠商是否提供操作系統相應的驅動程序
硬件選購
較早期的計算機已經沒有能力再負荷新的操作系統
較早期的硬件配備也可能由于保存的問題或者是電子零件老化的問題, 導致系統在運行過程中出現不明的宕機
-
CPU
-
RAM:主存越大越好
-
硬盤:若是作為備份或文件服務器,需要考慮磁盤陣列(RAID)
RAID利用硬件技術將多個硬盤整合為一個大硬盤,操作系統只會看到最后被整合起來的大硬盤
-
網卡
裝機目標與硬件搭配
- 需要桌面系統,則對CPU于內存要求高一些
- 中型以上單位的網絡服務器,對CPU、內存、網卡要求高一些,最好組磁盤陣列
需要更為穩定的Linux服務器,并考慮到系統整體搭配與運行效能,購買已組裝測試過的商用服務器是很好的選擇
- Red Hat 的硬件支持:https://hardware.redhat.com/?pagename=hcl
- Open SuSE 的硬件支持:http://en.opensuse.org/Hardware?LANG=en_UK
- Linux 對筆記本電腦的支援:http://www.linux-laptop.net/
- Linux 對打印機的支持:http://www.openprinting.org/
- Linux 硬件支持的中文HowTo:http://www.linux.org.tw/CLDP/HOWTO/hardware.html#hardware
1.1.2 磁盤分區
硬盤連接方式與設備文件名的關系
在Linux中,每個設備都被當做一個文件,/dev 目錄下
- 實體硬盤大多使用 /dev/sd[a-] 的文件名
- 虛擬機內的硬盤由仿真器產生,磁盤名為 /dev/vd[a-p]
SATA/USB/SAS等磁盤接口都是用SCSI模塊驅動,這些接口的磁盤裝置文件名都是 /dev/sd[a-p] 格式
因此,各裝置文件名與Linux核心偵測到的順序有關
磁盤結構
數據的寫入實際是在磁盤盤片上,磁盤盤面分為扇區與磁道兩種單位
-
內側磁道周長短,可存儲的數據量少;外側磁道周長常,可存儲的數據量大
-
每個磁道分為若干扇區(每個磁道的扇區編號都從0開始),不同磁道的扇區有相同的存儲容量,每個扇區的存儲容量為512Bytes或4KBytes
在對硬盤劃分扇區時,有兩種思路:
- 固定磁道密度:每個磁道的扇區數相等
- 分區磁道密度:外側磁道的扇區數比內側磁道多,內外磁道的扇區存儲容量相等
相對內側磁道,外側磁道的線速度快,數據存取速度更快
磁盤分區
分區:以柱面(cylinder)為單位的連續磁盤空間
- 不同盤片的同一磁道組成一個柱面,柱面是文件系統的最小單位
- 一跨多個磁道
分區目的
-
數據安全性:每個分區的數據都是獨立的,需要對分區內的數據重整時,可將重要數據移動到其他分區
-
系統的效率:利用分區,將數據集中在柱面的某個區段,有助于提高數據讀取的速度與效率
整個磁盤的第一個扇區(0磁道0扇區)存儲磁盤的重要信息,這些信息以MBR(Master Boot Record)格式保存。
但MBR格式的分區,最大的磁盤分區容量為2TB,因此新出現了GPT分區
MBR分區格式
整個盤片的第0扇區
存放兩個信息
-
主要啟動記錄區(MBR):安裝開機管理程序,446Bytes
-
分區表:記錄整顆磁盤的分區狀態,有64Bytes
-
分區表項
字節位 內容及含義 0 引導標志。
0X80H:活動分區
0X00H:非活動分區。1,2,3 本分區的起始磁頭號(第1字節)、扇區號(第二字節低6bit)、柱面號(第3字節高2位+第4字節8位) 4 分區類型符。
0X00H:分區未用(即沒有指定)
0X06H:FAT16基本分區
0X0BH:FAT32基本分區;
0X05H:擴展分區;
0X07H:NTFS分區;
0X0FH:(LBA模式)擴展分區(83H為Linux分區等)。5,6,7 本分區的結束磁頭號、扇區號、柱面號。 8,9,10,11 邏輯起始扇區號 ,本分區之前已用扇區數。 12,13,14,15 本分區的總扇區數。 -
本分區已占用扇區數第912Bytes,本分區總扇區數為第1316Bytes、
232=4G2^{32}=4G232=4G 個扇區,若一個扇區512B,則最多可識別2TB磁盤空間
-
MBR分區類型
分區表所在的區塊僅有64Bytes,因此最多僅能記錄4個分區的信息,這四組分區稱為主要(Primary)分區或延伸(Extended)分區
假設硬盤有400個柱面,共分為4個分區,第四個分區的柱面號為301~400
- 當操作系統為Linux時,分區編號為 /dev/sda1,/dev/sda2,/dev/sda3,/dev/sda4
- 當操作系統為Windows時,分區為C,D,E,F
將數據寫入第四個分區時,相當于寫入到磁盤的301~400號柱面
延伸分區
延伸分區:將柱面相應的分區表項標記為延伸分區,對延伸分區指向的區塊繼續分區,可得到多個邏輯分區
-
延伸分區使用額外的扇區來記錄分區信息,延伸分區本身不能被格式化并寫入數據
每個邏輯分區的前幾個扇區用來記錄分區信息——分區表項
-
延展分區最多只有一個
-
延展分區不能被格式化存取數據,主要分區與邏輯分區可被格式化,并進行數據存取
-
邏輯分區數量隨操作系統而不同
上述邏輯分區,在LInux中的文件名為:
- P1:/dev/sda1
- P2:/dev/sda2
- L1:/dev/sda5
- L2:/dev/sda6
- L3:/dev/sda7
- L4:/dev/sda8
- L5:/dev/sda9
MBR分區遷移
圖一,同屬于延伸分區的邏輯分區可合并:,只需要將兩個邏輯分區刪除,然后將兩個舊邏輯分區的磁盤空間重新建立一個新的分區即可,并不影響其他邏輯分區
圖二,主分區與邏輯分區不可合并:需要將延伸分區內所有的邏輯分區全部破壞,再重新劃分延伸分區與邏輯分區
MBR分區的缺陷
- 一個邏輯分區或主分區,最多記錄2TB的磁盤容量
- 每個分區的容量很小,當總磁盤容量很大,則需要很多分區數
- MBR僅有一個扇區塊,若被破壞,很難恢復
- MBR分區的開機管理程序僅446Bytes,無法容納較多的程度代碼
GPT分區格式
扇區有512B和4KB,為兼容所有的磁盤,因此在定義扇區時,大多會使用邏輯區塊地址(Logical Block Address,LBA)
GPT將所有區塊以LBA規劃(512B),使用34個LBA區塊來記錄分區信息,整個磁盤的最后34個LBA也拿來作為備份
-
LBA0:同MBR的0扇區,446B記錄開機管理程序,在分區表記錄區內,放入特殊標志的分區,表示此磁盤采用GPT格式的分區
-
LBA1(GPT表頭記錄)
記錄分區表本身的位置與大小,記錄備份用的GPT分區放置的位置,分區表的檢驗碼(CRC32)
-
LBA2-LBA33(記錄分區信息)
每個LBA都可以記錄4筆分區記錄,默認情況下,32個LBA可容納128筆分區記錄
每個LBA有512B,即每筆分區紀錄用到128B的空間,共64bit記錄開始/結束扇區號,因此,每個分區的最大容量限制為 264?512B=8ZB2^{64}*512B=8ZB264?512B=8ZB
配合操作系統內核的udev等方式,現在Linux對邏輯分區數量沒有限制
GPT分區沒有邏輯分區與延展分區的概念,每個分區都可用于格式化
注
并不是每個內核都支持GPT格式的磁盤分區
- 磁盤管理工具,fdisk并不識別GPT,需要gdisk或parted指令
- 開機管理程序,grub第一版不識別GPT,grub2之后才識別
總之,是否能夠讀寫GPT格式的分區與開機檢測程序有關
1.1.3 開機管理程序
開機管理程序是寫在主板上的固件(寫入到ROM的軟件程序),第一個被自動執行的程序
主機在加載硬件驅動方面的程序,主要有早期的BIOS與新的UEFI兩種機制
BIOS+MBR/GPT
-
在開機時,BIOS會被自動執行
-
BIOS會分析計算機的存儲設備,訪問設定的系統盤(能夠開機的硬盤),系統盤的第一個扇區為MBR分區,放置開機管理程序(Boot loader)
開機管理程序在操作系統安裝時便提供
開機管理程序提供的功能:
-
提供開機選項:對應多重引導功能,可以選擇不同的開機項
-
載入核心文件:直接指向可開機的程序區段,將控制權轉交給操作系統
若使用類似grub的開機管理程序,則需要額外分區除一個BIOS boot分區,在該分區內,放置引導過程所需的其他程序代碼
- 轉交其他開機管理程序:若選擇多重引導,可能會將開機管理功能轉交給其他開機管理程序
-
多重引導
開機管理程序除安裝在MBR外,還可以安裝在每個分區的啟動扇區(boot sector)。
每個分區都有啟動分區,啟動分區中的開機管理程序 只能識別當前分區內的開機核心文件及其他開機管理程序
開機管理程序 可直接指向或間接將管理權交給另一個管理程序
如上圖,有兩個系統分區,因此,MBR的開機管理程序提供兩個選項
- M1:直接加載Windows的核心程序
- M2:將開機管理工作交給第二個分區的開機管理程序
當選擇M2選項時,整個開機管理工作就交給第二個分區的開機管理程序,由于該開機管理程序僅有一個開機選項,所以使用Linux的核心文件開機
最好先安裝Windows再安裝Linux
- Windows安裝時,安裝程序會主動覆蓋掉MBR以及系統分區的啟動分區
- Linux在安裝時,可以選擇將開機管理程序安裝在MBR或其他分區的啟動分區,LInux可以手動設置選項
UEFI BIOS+GPT
BIOS僅有16bit,難與現階段新的操作系統接軌
UEFI(Unified Extensible Firmware Interface)同一可擴展固件接口
加載所有的UEFI驅動程序后,系統會開啟類似操作系統的Shell環境
- UEFI用于啟動操作系統之前的,硬件檢測、開機管理、軟件設定等目的
- 加載完操作系統后,UEFI會將控制權移交給操作系統
- 此外,UEFI為防止黑客在BIOS階段破壞系統,加入安全啟動機制(即將開機的操作系統必須要被UEFI驗證)
BIOS | UEFI | |
---|---|---|
語言 | 匯編 | C |
硬件資源控制 | 中斷管理 不可變的內存存取 不可變的IO存取 | 使用驅動程序和協議 |
CPU運行環境 | 16bit | CPU保護模式 |
設備擴充方式 | 通過IRQ連接 | 直接加載驅動程序 |
第三方廠商支持 | 差 | 可支持多平臺 |
圖形化 | 差 | 支持 |
內建簡化操作系統前環境 | 不支持 | 支持 |
UEFI只需要加載驅動程序即可控制系統硬件,但并不能代替操作系統
-
硬件資源的管理使用輪詢方式來管理,效率比較低
-
UEFI并不提供完整的快取功能,不能保證效率
\boot目錄的分區
基于GRUB引導程序的系統安裝中,BIOS boot分區用于存放GRUB(引導過程)第二階段的引導文件
第一階段:BIOS加載MBR分區(/dev/sda1)中的開機管理程序,該程序的主要目的是找到并加載第二階段的開機管理程序
- ESP分區,FAT32格式的分區(被不同操作系統和UEFI固件兼容),存儲UEFI開機程序
- 在ESP分區中,有grubx64.efi 文件,第一階段會從ESP分區被加載到內存執行
第二階段:BIOS boot分區,為引導過程提供更多的空間,來存放必要的引導文件,使引導程序能正確地找到并加載操作系統內核
為與Windows兼容,并提供其他第三方廠商所使用的UEFI應用程序的存儲空間,還必須格式化一個vfat的文件系統,作為UEFI分區(/dev/sda2)
因此,鑒于上述兩個分區(BIOS boot分區與UEFI 分區),/boot目錄基本從 /dev/sda3 之后的分區開始
- /boot 目錄通常用于存放與內核相關的文件,這些文件用于開機管理程序將控制權移交給內核后,用于操作系統內核的加載與初始化階段
1.1.4 分區與掛載
Linux內,數據與設備都是以文件形態呈現。
目錄樹結構以根目錄為主,然后向下呈分支狀的一種文件結構
Linux系統通過目錄掛載,將文件系統與目錄樹結構結合
掛載 :利用一個目錄當做進入點,當磁盤分區的數據放置在該目錄下——進入該目錄即可讀取該分區
- 根目錄一定要掛載到分區下
- 其他目錄可按用戶需求掛載到不同的分區
掛載點 :被掛載的目錄
根據用途區分析需要較大容量的目錄,以及讀寫較為頻繁的目錄,將這些重要的目錄分別獨立出來,不于根目錄放在一起
1.2 安裝
1.2.1 單Linux
規劃
-
用途:練習
-
虛擬機硬件配置:
- CPU:X86還是ARM
- 內存
- 硬盤:/dev/vda 40GB
-
distribution:CentOS
- 刻錄鏡像載體
-
網卡:設置橋接
- 確定IP與掩碼
-
磁盤分區的規劃
在Linux環境下,如果分配的磁盤未超過2TB,則默認采用MBR分區,所以為強制使用GPT分區,需要指定安裝參數
- CentOS預設使用LVM方式管理文件系統
-
開機管理程序:CentOS7.X使用grub2,需要安裝在MBR分區
安裝步驟
- 虛擬機硬件配置
- 鏡像制作
- 調整開機介質
- 選擇安裝模式、加入核心參數
- 安裝引導與軟件選擇
- 自定義系統盤分區
- 核心管理與網絡設定
- 安裝完成后的設置
0. 虛擬機硬件配置
在分配硬盤時,現在虛擬機的磁盤驅動器,大多采用qcow2這種虛擬磁盤格式,用多少記錄多少,與實際使用量有關
1. 鏡像制作
拷貝到DVD太慢,可通過dd或其他刻錄軟件,將ISO刻錄到USB設備上
# 假設你的 USB 裝置為 /dev/sdc ,而 ISO 檔名為 centos7.iso 的話:
# if=輸入文件 of=輸出路徑
[root@study ~]# dd if=centos7.iso of=/dev/sdc
2. 調整開機介質
- 進入BIOS(DEL或F2),調整開機順序
- 若是虛擬機,在Boot Option中調整開機順序
3. 選擇安裝模式、加入核心參數
-
安裝模式
-
正常安裝CentOS7的流程
-
測試此光盤,在安裝CentOS7
-
進入排錯模式,
-
以基本圖形窗口安裝CentOS7(使用標準顯卡設定安裝流程)
-
救援CentOS
-
執行內存測試
直至 esc 停止
-
使用本機磁盤開機,不由移動介質開機
-
-
-
加入核心參數,修改安裝程序
強制使用GPT分區時,需要輸入安裝參數
安裝模式為 Install CentOS 7
按 Tab 鍵,讓光標跑到畫面最下方等到輸入額外的安裝參數
在出現的畫面中,輸入 GPT分區的參數
4. 安裝引導與軟件選擇
-
安裝引導略
-
軟件選擇
-
最小型安裝:只安裝內核與Shell
-
含GUI的服務器:預打在GNOME
-
GNOME桌面環境:Linux常見的圖形接口
-
KDE Plasma Workspaces:另一套常見的圖形接口
-
5. 自定義系統盤分區
-
刪除殘留分區
-
第一個分區為 BIOS boot 分區
分區類型:
- 標準分區:/dev/sda1 類似的分區
- LVM:傳統LVM直接給分區分配固定的容量,但可以彈性地增加/削減分區容量
- LVM緊張供應:實際使用多少容量,才會從磁盤分配多少容量
文件系統類型:
-
ext2/ext3/ext4:Linux早期使用的文件系統類型
ext3/ext4多了日志記錄,便于復原。
但磁盤容量越來越大,ext格式不太使用
-
swap:磁盤仿真內存,swap分區不會直接掛載到目錄樹
-
BIOS boot:GPT分區才會用到
-
xfs:適用于大容量的磁盤管理,目前常用
-
vfat:同時被Linux與Windows所支持的文件系統類型。
-
/boot 分區
-
/ ,/home ,/swap 分區
使用LVM的管理方式
/swap 內存置換區,當有數據被存放在內存,但不常被CPU取用,這些數據會被放入*/swap* 分區
6. 核心管理與網絡設定
核心管理:系統 下的 KDUMP ,當Linux系統因為核心問題導致宕機時,會將該宕機事件的內存內數據存儲
網絡設定:設置靜態IP
7. 安裝完成后的設置
最好設置一個普通用戶為管理員,不要直接使用root用戶
注
筆記本加入了非常多的省電機制或其他硬件的管理機制,
當使用適用于一般桌面計算機的鏡像安裝Linux時,不一定適用于筆記本電腦
nofb apm=off acpi=off pci=noacpi
apm是早期的電源管理模塊,acpi是近期的電源管理模塊,這兩者都需要特定的硬件支持,但筆記本電腦可能不適用這些機制
nofb:取消顯卡的緩存偵測,筆記本的顯卡通常是核顯,Linux安裝程序可能不會偵測該顯卡
1.2.2 Linux與Windows多重引導
規劃
BIOS+MBR分區,CentOS 7與Windows 7,同時掛載一個共享的數據盤
Windows 8.1之前的版本,UEFI BIOS+GPT分區才能開機
在沒有UEFI環境下,無法使用GPT分區安裝Windows
- 只需要保證系統盤含UEFI分區
先安裝Linux再安裝Windows,再通過修改系統配置文件達成多重引導
為強制各系統的BIOS位于指定分區,在Linux安裝前,就需要先將分區劃分
安裝步驟
- 分區與安裝Linux
- 安裝Windows
- 救援MBR內的開機管理程序
- 設定多重引導選項
注
- Windows環境最好隔離Linux的系統盤(根目錄與swap分區)
- Linux不可刪除,因為grub開機管理程序會讀取 /boot目錄下的內容,如果Linux移除,則無法識別到Windows的開機管理程序
1. 安裝Linux
開機后,在開始安裝前
按鍵 CTRL+alt+F2 進入安裝過程的shell環境
[anaconda root@localhost /]# parted /dev/vda mklabel msdos # 建立 MBR 分區
[anaconda root@localhost /]# parted /dev/vda mkpart primary 1M 2G # 建立 /boot
[anaconda root@localhost /]# parted /dev/vda mkpart primary 2G 52G # 建立 /
[anaconda root@localhost /]# parted /dev/vda mkpart primary 52G 152G # 建立 C
[anaconda root@localhost /]# parted /dev/vda mkpart extended 152G 100%# 建立延伸分區
[anaconda root@localhost /]# parted /dev/vda mkpart logical 152G 100% # 建立邏輯分區
[anaconda root@localhost /]# parted /dev/vda print # 顯示分區結果
按鍵 CTRL+alt+F2 回到原本的安裝流程,再一步步到分區掛載,再重新格式化
2. 安裝Windows
重啟機器,進入Windows的安裝過程,注意選擇規劃的系統分區
3. 救援Linux的開機管理程序
后安裝的Windows會將MBR分區占用,因此,需要救援回Linux的開機管理程序
救援Linux的開機管理程序
放入安裝介質,開機后,選擇救援模式 Troubleshooting -> Rescue a CentOS system,等待開機后,選擇 Continue
如果有Linux,則會告訴你,原本的系統放置與 /mnt/sysimage 中
輸入指令,將Linux的開機管理程序重新裝回MBR分區
sh-4.2# chroot /mnt/sysimage
sh-4.2# grub2-install /dev/vda
Installing for i386-pc platform.
Installation finished. No error reported.
sh-4.2# exit
sh-4.2# reboot
4. 修改開機選項
開機進入Linux后,切換到root用戶
[root@study ~]# vim /etc/grub.d/40_custom
#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
menuentry "Windows 7" {
set root='(hd0,3)'
chainloader +1
}
[root@study ~]# vim /etc/default/grub
GRUB_TIMEOUT=30 # 將 5 秒改成 30 秒長一些
...
[root@study ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
2. 簡單使用
2.1 登入與關鍵字注解
2.1.1 交互界面
圖形化窗口
- 3:連接目錄
- 4:沒有權限進入的目錄
重啟圖形化界面
在圖形化界面,重啟快捷鍵 Alt+Ctrl+Backspace
圖形化窗口與文本模式切換
文本模式:終端,terminal,console
快捷鍵 Ctrl+Alt+[F1]~[F6]
- 根據 [F1]~[F6] ,依次命名為 tty1~tty6
- 開機完成后,默認系統只會提供 tty環境,首選的開機窗口為tty1
- 當切換時,才會產生額外的ttyx環境
終端啟動圖形化窗口
指令:startx
- 僅能啟動一個X Window
- 已安裝 X Window System,并且X server已啟動
- 有窗口管理程序,如 GNOME/KDE等
將圖形化窗口設為啟動默認:將 graphical.target
服務設為默認
CentOS 7開始使用systemd這種服務管理方式,之前是SystemV
終端登錄與注銷
CentOS Linux 7 (Core)
Kernel 3.10.0-229.el7.x86_64 on an x86_64
study login: dmtsai
Password: <==這里輸入你的密碼
Last login: Fri May 29 11:55:05 on tty1 <==上次登入的情況
[dmtsai@study ~]$ _ <==光標閃爍,等待你的指令輸入
-
CentOS Linux 7 (Core)
Linux distribution名稱與版本
-
Kernel 3.10.0-229.el7.x86_64 on an x86_64
內核版本
-
study login: dmtsai
[主機名] login: [用戶名]
study.centos.vbird 主機名只顯示第一個小數點之前的字母
-
[dmtsai@study ~]$
[當前用戶名]@[主機名] [當前目錄] $
root用戶的提示符為
#
,一般用戶的提示符為$
注銷 exit
2.1.2 指令與指令執行
指令格式
command [-options]/[--options] parameter1 parameter2 ...
指令/可執行文件 選項 參數(1) 參數(2)
指令:理解為可執行的腳本名
只有在環境變量里的,可以在任何地方調用
其余指令需要在特定的目錄下才可執行
-
若指令過程,使用反斜杠(\)換行
-
語系支持:默認情況下,不支持以中文編碼輸出,需要將語系改為英文,
[dmtsai@study ~]$ date 鈭? 5??29 14:24:36 CST 2015 # 純文本界面下,無法顯示中文字,所以前面是亂碼1. 顯示目前所支持的語系 [dmtsai@study ~]$ locale LANG=zh_TW.utf8 # 語言語系的輸出 LC_CTYPE="zh_TW.utf8" # 底下為許多信息的輸出使用的特別語系 LC_NUMERIC=zh_TW.UTF-8 LC_TIME=zh_TW.UTF-8 # 時間方面的語系數據 LC_COLLATE="zh_TW.utf8"2. 修改語系成為英文語系 [dmtsai@study ~]$ LANG=en_US.utf8 [dmtsai@study ~]$ export LC_ALL=en_US.utf8 # LANG 只與輸出訊息有關,若需要更改其他不同的信息,要同步更新 LC_ALL 才行![dmtsai@study ~]$ locale LANG=en_US.utf8 LC_CTYPE="en_US.utf8" LC_NUMERIC="en_US.utf8" ....中間省略.... LC_ALL=en_US.utf8 # 再次確認一下,結果出現,確實是en_US.utf8 這個英文語系!
常見指令
- 日期:date
- 日歷:cal
- 計算器:bc
date
date #顯示系統時間
date +%Y/%m/%d
[年]/[月]/[日]
date +%H:%M
[時]:[分]
cal
[dmtsai@study ~]$ cal [month] [year]
cal [年] # 顯示整年月歷
cal # 顯示本月日歷
bc
輸入bc,會打印版本信息,然后進入bc工作環境(類似python)
[dmtsai@study ~]$ bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.scale=3 # bc預設只輸出整數部分,指定小數點位數
1/3
.333
+ 加法
- 減法
* 乘法
/ 除法
^ 指數
% 取余
指令執行模式
- 該指令會直接顯示結果,然后回到命令提示字符等待下一個指令的輸入;
- 進入到該指令的工作環境,直到結束該指令
quit
,才回到命令提示字符的環境。
常用快捷鍵
Tab
- 在一串指令的第一個字的后面,則為 命令補全
- 在一串指令的第二個字以后時,則為『文件補齊』
- 若安裝 bash-completion 軟件,則在某些指令后面使用[tab] 按鍵時,可以進行『選項/參數的補齊』
Ctrl+C
- 指令中斷
Ctrl+d
- 表示鍵盤輸入結束—— EOF
- 相當于輸入 exit
shift+Page Up 、shift+Page Down
- 上下翻頁
2.1.3 指令注釋
理解在什么情況下,應該使用哪方面的指令
help選項
[指令] -h/--help
局限:
- 必須已知 [指令]
- 不適用于查詢文件 格式
man page
man [關鍵字]
更為詳細的[關鍵字]注解
這些man page的輸出數據通常放在 /usr/share/man 這個目錄下
也可以修改 /etc/man_db.conf 來重定向該目錄(一些distribution中為 man.conf 或 manpath.conf 或 man.config)
man的輸出
輸出項 | 說明 |
---|---|
NAME | 簡短的指令、數據名稱說明 |
SYNOPSIS | 簡短的指令下達語法(syntax)簡介 |
DESCRIPTION | 較為完整的說明 |
OPTIONS | 針對 SYNOPSIS部分,有列舉的所有可用的選項說明 |
COMMANDS | 當此程序(軟件)在執行時,此程序(軟件)可識別指令 |
FILES | 此程序或數據,使用或參考或連結的某些文件 |
SEE ALSO | 與該指令相關的其他指令或說明 |
EXAMPLE | 示例 |
-
翻頁:
- 空格鍵 ,Page Down 向下翻頁
- Page Up 向上翻頁
- Home 首頁
- End 末頁
-
關鍵字搜尋:
- /[關鍵字] 向后搜索[關鍵字]
- ?[關鍵字] 向前搜索 [關鍵字]
- n/N :n表示下一個搜索結果,N表示上一個搜索結果
-
q 離開man環境
關鍵字的精確匹配
man -f [關鍵字]
:會搜索與[關鍵字]完全匹配的指令名稱
相當于
whatis [關鍵字]
如:
[dmtsai@study ~]$ man -f man
man (1) - an interface to the on-line reference manuals
man (1p) - display system documentation
man (7) - macros to format man pages
左邊部分 | 右邊部分 |
---|---|
指令(文件)以及該指令的指令類型 | 該指令的簡短說明 |
-
顯示順序
若
man -f [關鍵字]
有多個輸出,但man [關鍵字]
會輸出在 /etc/man_db.conf 配置文件中,最先搜索到的輸出
關鍵字的模糊搜索
man -k [關鍵字]
:只要man page中含 [關鍵字] 就會輸出
相當于
apropos [關鍵字]
在使用 whatis
和 apropos
時,需要建立 whatis 數據庫,需要再root的身份下執行 mandb
指令
關鍵字類型
man [關鍵字] 可以輸出關鍵字類型
如 man date
會輸出 date(1) 括號中的 1 即表示指令類型
關鍵字編號 | 關鍵字類型 |
---|---|
1 | 用戶在Shell環境中可操作的指令或可執行文件 |
2 | 系統內核可調用的函數或工具 |
3 | 一些常用的額函數與函數庫,大多為C式函數庫(libc) |
4 | 設備文件的說明,在 /dev 下的文件 |
5 | 配置文件或某些文件的格式刷 |
6 | 游戲 |
7 | 管理或協議等,如Linux文件系統,網絡協議,ASCII code等號 |
8 | 系統管理員可用的管理指令 |
9 | 跟Kernel有關的文件 |
info page
info page將輸出拆分為片段 ,每個片段編為一個 page,page間有類似超鏈接的跳轉。每個獨立的頁面被稱為一個節點(node)
支持info page的指令/數據/關鍵字,其輸出數據放置在 /usr/share/info/ 中
[dmtsai@study ~]$ info info
File: info.info, Node: Top, Next: Getting Started, Up: (dir)
- File:當前輸出的page來源文件——info.info
- Node:當前頁面屬于Top節點
- Next:下一節點,名為 Getting Started
- Up:返回上一層
- Prev:前一個節點
省略
* Menu:
* Getting Started:: Getting started using an Info reader.
* Advanced:: Advanced Info commands.
* Expert Info:: Info commands for experts.
* Index:: An index of topics, commands, and variables.
--zz-Info: (info.info.gz)Top, 52 lines --Bot------------------------------------------
-
在Menu中,可見有4個節點
通過將光標移動到對應行,再 Enter ,便可跳轉到相應Page
-
Tab 鍵,在各超鏈接間移動
info page中的快捷鍵
Page切換快捷鍵:N(下一節點),P(上一結點),U(上一層節點)
info page 中,按 h 能提供一些基本按鍵功能的介紹
doc
/usr/share/doc/ 目錄下,會存放一些軟件的說明文檔
這些軟件如何使用,原理說明,未來規劃等
2.2 文本編輯器nano
nano [文件名].txt
快捷鍵
^+[按鍵] 表示 CTRL,M+[按鍵] 表示 ALT
- CTRL+G:幫助信息
- [ctrl]-X:離開naon 軟件,若有修改過文件會提示是否需要儲存喔!
- [ctrl]-O:儲存文件,若你有權限的話就能夠儲存文件了;
- [ctrl]-R:從其他文件讀入資料,可以將某個文件的內容貼在本文件中;
- [ctrl]-W:搜尋字符串,這個也是很有幫助的指令喔!
- [ctrl]-C:說明目前光標所在處的行數與列數等信息;
- [ctrl]-_:可以直接輸入行號,讓光標快速移動到該行;
- [alt]-Y:校正語法功能開啟或關閉(單擊開、再單擊關)
- [alt]-M:可以支持鼠標來移動光標的功能
2.3 關機
-
確定無其他在線用戶
who
指令可查看本機在線的用戶netstat -a
查看網絡的聯機狀態ps -aux
查看啟動的進程 -
數據同步到硬盤
切換到root用戶,一般用戶僅能更新當前硬盤的數據,root用戶可以更新整個系統的數據
su -
sync
-
關機/重啟
關機:
shutdown
、halt
(系統停止,屏幕可能會保留系統已經停止的訊息!)poweroff
(系統關機,所以沒有提供額外的電力,屏幕空白)
重啟:
reboot
shutdown
[root@study ~]# /sbin/shutdown [-krhc] [時間] [警告訊息]
選項與參數:
-k : 不要真的關機,只是發送警告訊息出去!
-r : 在將系統的服務停掉之后就重新啟動(常用)
-h : 將系統的服務停掉后,立即關機。 (常用)
-c : 取消已經在進行的 shutdown 指令內容。
時間 : 指定系統關機的時間!時間的范例底下會說明。若沒有這個項目,則默認 1 分鐘后自動進行。
范例:
[root@study ~]# /sbin/shutdown -h 10 'I will shutdown after 10 mins'
Broadcast message from root@study.centos.vbird (Tue 2015-06-02 10:51:34 CST):
I will shutdown after 10 mins
The system is going down for power-off at Tue 2015-06-02 11:01:34 CST![root@study ~]# shutdown -h now
立刻關機,其中 now 相當于時間為 0 的狀態
[root@study ~]# shutdown -h 20:25
系統在今天的 20:25 分會關機,若在21:25 才下達此指令,則隔天才關機
[root@study ~]# shutdown -h +10
系統再過十分鐘后自動關機
[root@study ~]# shutdown -r now
系統立刻重新啟動
shutdown -c
取消關機計劃
實際上,調用管理工具systemctl關機
[root@study ~]# systemctl [指令]
指令項目包括如下:
halt 進入系統停止的模式,屏幕可能會保留一些訊息,這與你的電源管理模式有關
poweroff 進入系統關機模式,直接關機沒有提供電力喔!
reboot 直接重新啟動
suspend 進入休眠模式
[root@study ~]# systemctl reboot # 系統重新啟動
[root@study ~]# systemctl poweroff # 系統關機