Linux結(jié)構(gòu)目錄詳解
在Linux中,系統(tǒng)默認(rèn)的用戶是root,其實和 windows 的 administrator 類似,root 用戶可以操作操作系統(tǒng)的任何文件和設(shè)備,OMG,記住了,是大哥大,干啥都行,所以在生產(chǎn)環(huán)境就不要亂用root了,權(quán)利越大,責(zé)任越大吶
學(xué)習(xí)Linux,就要習(xí)慣通過命令行的方式學(xué)習(xí),這樣也高大上一點嘛,還不熟練趕快把前面兩篇文章拿來敲一遍.。目前的Linux導(dǎo)圖如下

1 系統(tǒng)與硬件相關(guān)
虛擬裝好了,我們就比較好奇這些配置都是什么。如果你還記得第一篇中的安裝過程,那么在這里的操作你就知道了 "原來是這樣"。
查看系統(tǒng)的 pci 設(shè)備
lspci 命令可以查看所有的 pci 設(shè)備,比如主板,聲卡等

查看CPU信息
more?/proc/cpuinfo?
其中 processor 是邏輯處理器的唯標(biāo)識符,vendor-id 是處理器類型,如果是英特爾的處理器,那么字符串就是genuinelntel。physical id 是每個封裝的唯一標(biāo)識符,也是一個物理的CPU,siblings 表示位于相同物理封裝中的邏輯處理器數(shù)量,core id 為每個內(nèi)核的唯一標(biāo)識符
在 siblings 和 CPU cores 有個對應(yīng)關(guān)系,如果 siblings 是 CPU cores 的兩倍,則系統(tǒng)支持超線程。
如果要查看 CPU 的個數(shù),那么可以通過下面的命令
cat?/proc/cpuinfo?|?grep?“physical?id”??|?sort?|?uniq?|?wc?-l
如果要查看系統(tǒng)所有的邏輯CPU個數(shù)
cat?/proc/cpuinfo?|grep?"processor"?|?wc?-l
如果要查看內(nèi)存的信息

more?/proc/meminfo
從結(jié)果可以看出,目前總內(nèi)存為1.8G,可用1.5G,緩沖區(qū)占用1260KB。
more?/proc/meminfo
查看磁盤分區(qū)的信息
fdisk??-l

從上圖我們可以看見虛擬了 42G 的磁盤以及每個分區(qū)的大小,是不是關(guān)于硬件相關(guān)的信息看的清清楚楚了,就這樣不再神秘
2 文件系統(tǒng)的了解
經(jīng)典樹形目錄
Linux 牛逼之一在于將所有的內(nèi)容以文件的形式展現(xiàn)出來,通過一個樹形的結(jié)構(gòu)統(tǒng)一管理和組織這些文件。Linux 典型的樹形結(jié)構(gòu)如下圖所示
這個樹有個根,根下面很多「杈」,「杈」上可以長出很多葉子

整個系統(tǒng)都是按照文件的形式放在根目錄中,同時會將文件分類,這樣形成一個樹形目錄結(jié)構(gòu),這樣的布局給管理文件帶來了很大的方便,我們確實需要去了解這些目錄結(jié)構(gòu),對于后續(xù)的系統(tǒng)排錯還是蠻重要的噠。雖然有些啰嗦,不過這些圖確實是實打?qū)嵉漠嫵鰜淼模瑳]事看看就知道了,不用記住。
etc目錄
這個目錄主要存放的是管理文件用的相關(guān)配置文件,比較重要的 ?/etc/rc,用戶信息文件 /etc/passwd,具體的如下圖

/usr目錄
這個目錄主要存放的是應(yīng)用程序和文件,如果在安裝軟件的時候,選擇默認(rèn)安裝的位置,通常就會默認(rèn)在這個位置,下次就別問我裝的東西去哪里,what??具體信息如下圖

/var目錄
通常用來存放系統(tǒng)運行的日志文件,如下圖

/dev 目錄
包含所有的設(shè)備文件
/proc 目錄
這個目錄是虛擬目錄,主要存放的是內(nèi)存的映射,通過這個目錄和內(nèi)核的數(shù)據(jù)結(jié)構(gòu)打交道比如修改內(nèi)核參數(shù),獲取進(jìn)程的相關(guān)信息,具體信息如下

其他目錄
/boot目錄
這么說吧,你要是把這個目錄給干掉了,你就是大哥。它存放了啟動 Linux 的核心文件,包含鏡像文件和鏈接文件,破壞后系統(tǒng)基本上就不能啟動
/bin/sbin
當(dāng)你裝相關(guān)的軟件或者安裝包后,很多時候都會鏈接在這個目錄下面,另外這里也存放了平時我們使用的各種 shell 命令。比如cp,ls,dd等
對于sbin,這里的 s 是 super 的意思,意味著需要超級用戶才能執(zhí)行的命令。常見磁盤分區(qū) fdisk,創(chuàng)建文件系統(tǒng)的 mkfs就在這里
/home
這個目錄是系統(tǒng)中每個用戶的工作目錄,每個用戶都會有自己主目錄,通常名稱為用戶名,如果有個用戶是小藍(lán),那么主目錄就是xiaolan
/lib
在開發(fā)的過程中,很多共享庫文件等很多放在這里,這個目錄會包含引導(dǎo)進(jìn)程所需要的靜態(tài)庫文件。后續(xù)在分享程序開發(fā)的時候會深入掰扯
/root
一般用戶沒有進(jìn)入這個目錄的權(quán)限,它是root的主目錄
/lost+found
保存丟失的文件。什么意思,如果我們不恰當(dāng)?shù)年P(guān)機操作,可能導(dǎo)致一些文件丟失,這些丟失的臨時文件可能就會存放在這里。當(dāng)重新啟動的時候,引導(dǎo)程序就會運行 fsck 程序并發(fā)現(xiàn)這個文件
/tmp
用于存放臨時文件,隨時可能被刪除
3 CPU核心部件
這部分內(nèi)容是先過一邊,后續(xù)會對每一個部分進(jìn)行詳細(xì)的闡述
Linux 的內(nèi)核相當(dāng)于 CPU 的大腦,經(jīng)過了十幾年的共同努力,現(xiàn)在已經(jīng)到xxx核。
作為一個開源操作系統(tǒng),也給予我們難得的機會去學(xué)習(xí)這個成熟的操作系統(tǒng),一個完整的計算機內(nèi)核包含五個部分,分別是內(nèi)存管理,進(jìn)程管理,進(jìn)程間通信,虛擬文件系統(tǒng)和網(wǎng)絡(luò)接口,這一部分在后面的文章會單獨介紹,先了解個大概,如果看過之前的面試連載文章,很多時候都會涉及到這些問題,這么說吧,在面試中的百分之八十的問題,你都可以聯(lián)系到操作系統(tǒng)層面,或者和操作系統(tǒng)相關(guān)知識點,相關(guān)設(shè)計理念巧合,當(dāng)然不是巧合,就是學(xué)習(xí)過往成熟的經(jīng)驗罷了
內(nèi)存管理
我們知道,在區(qū)區(qū)的小內(nèi)存環(huán)境下,可以運行很多的軟件。Linux 內(nèi)存管理中支持虛擬內(nèi)存,即在系統(tǒng)上可以運行所有程序占用的內(nèi)存總量大于實際物理內(nèi)存,多余的這部分內(nèi)存是從磁盤申請所得,在內(nèi)存緊缺的情況下,內(nèi)存管理就會負(fù)責(zé)在磁盤和內(nèi)存之間進(jìn)行交換。
進(jìn)程管理
Linux 可多任務(wù)運行,那么在單CPU的情況下怎么支持多任務(wù)呢。這個任務(wù)就得交給進(jìn)程調(diào)度來完成了。每當(dāng)系統(tǒng)運行的時候,調(diào)度器會分配一個時間片,然后調(diào)度器根據(jù)不同的時間片選擇進(jìn)程運行。比如A進(jìn)程的時間片用完了,那么調(diào)度器會選擇一個新的進(jìn)程繼續(xù)運行,由于這個切換的速度和頻率都很快,以致于讓我感覺是多個程序在同時的運行,實際上CPU 在同一個時間只有一個進(jìn)程在運行。
進(jìn)程間通信
各個進(jìn)程的友好相處才能共建繁華生態(tài)嘛。不同的進(jìn)程有自己的進(jìn)程空間,要通信就得找只隔壁大哥內(nèi)核中專轉(zhuǎn)。在一般情況下,一個進(jìn)程等待硬件操作完成就會被掛起,硬件操作完畢進(jìn)程恢復(fù)執(zhí)行,這個協(xié)調(diào)過程就是進(jìn)程間的通信機制了
虛擬文件系統(tǒng)
為了讓眾多的文件系統(tǒng)有一個統(tǒng)一的接口,采用了通用的文件模型---虛擬文件系統(tǒng)。虛擬文件系統(tǒng)分為邏輯文件系統(tǒng)和設(shè)備驅(qū)動程序。其中邏輯文件系統(tǒng)如 ex2,ex3 等。設(shè)備驅(qū)動程序包含了硬件控制器所編寫的設(shè)備驅(qū)動程序模塊。
網(wǎng)絡(luò)接口
首先需要知道每一種網(wǎng)絡(luò)硬件設(shè)備都會對應(yīng)相應(yīng)的設(shè)備驅(qū)動程序,網(wǎng)絡(luò)設(shè)備驅(qū)動程序主要負(fù)責(zé)與硬件設(shè)備來進(jìn)行通信
4 CPU運行機制
知道了CPU的目錄結(jié)構(gòu),現(xiàn)在說說其運行機制,主要包括了 init 系統(tǒng),系統(tǒng)的運行級別,系統(tǒng)的關(guān)閉方法
Linux 初始化init系統(tǒng)
啟動首先從 Bios 開始,接下來 Linux 引導(dǎo)程序?qū)?nèi)核載入內(nèi)存進(jìn)行內(nèi)核初始化,隨后啟動 init 進(jìn)程,這個進(jìn)程是系統(tǒng)的第一個進(jìn)程,負(fù)責(zé)產(chǎn)出其他的進(jìn)程
僅僅讓內(nèi)核運行起來還沒啥用處,還需要管理,控制這些進(jìn)程,從而系統(tǒng)進(jìn)入一個用戶設(shè)定的用戶模式,即 init 系統(tǒng)
起初采用 sysinit,它主要依賴于腳本,串行啟動進(jìn)程,最大的缺點就是慢,在服務(wù)器上看還沒有什么影響,如果是在手機移動端,這得急死人,隨后出現(xiàn)了systemd取代了慢的upstart
在 Wndows 中,系統(tǒng)有安全運行模式和正常運行的模式,在 Linux 中的運行級別更加的靈活
一共有七種運行級別,定義在 /etc/inittab 中,sysinit 會檢查 /etc/inittab 文件查看是否含有 initdefault 來啟動一個默認(rèn)的運行級別
0:表示關(guān)機模式
1:單用戶模式
6:重啟模式,關(guān)閉所有的運行進(jìn)程
2:表示多用戶模式
3:表示多用戶模式,支持nfs服務(wù)
4:表示基本不用的用戶模式,可以實現(xiàn)特定的等了請求
5:表示完成多用戶模式,默認(rèn)等了到x-windows系統(tǒng)
這些數(shù)字和 init 結(jié)合就產(chǎn)生了相應(yīng)的含義,比如init 1表示系統(tǒng)進(jìn)入單用戶模式,、init 6表示系統(tǒng)將重新啟動
有了新的systemd管理體系以后,默認(rèn)的運行級別通過軟連接的方式實現(xiàn)。
查看系統(tǒng)的默認(rèn)target,如下所示

如果需要修改運行級別和targe的對應(yīng)關(guān)系,可以通過下面命令實現(xiàn)
rm?-rf?/etcsystemd/system/default.target
ls?-sf?/lib/systemd/system/multi-user.target?/etc/systemd/system/defalut.target
5 系統(tǒng)關(guān)機過程
關(guān)機方式很多,比如init shutdown halt reboot,下面我們分別看看這些方式以及
shutdown
才開始學(xué)習(xí) Linux 操作系統(tǒng),不要動不動的就拔電源,我們知道此時很多的進(jìn)程正在如火如荼的進(jìn)行,你的這一操作,很可能就導(dǎo)致場面混亂,很多進(jìn)程數(shù)據(jù)丟失,嚴(yán)重一點可能進(jìn)程間開始打架,導(dǎo)致硬件設(shè)備損壞
shutdown 是 shell 編寫的程序,必須要超級用戶才能執(zhí)行。首先通過廣播的方式告訴系統(tǒng)所有的用戶,系統(tǒng)將在xx時間關(guān)閉,同時 login 指令凍結(jié),意味著其他用戶此時不能等了,時間一到,i就會發(fā)信號給shuinit程序吧,init程序就會改變運行級別
shutdown命令之shutdown常見參數(shù)
-f:重新啟動的時候不執(zhí)行fsck
-k:只是發(fā)送西悉尼給所有用戶但不會真正關(guān)機
-r:shutdown之后重啟系統(tǒng)
時間:設(shè)置多長時間可以九天跑一次
halt命令
reboot
reboot和halt類似,只是reboot是關(guān)機后重啟
halt參數(shù)
-i:關(guān)機之前關(guān)閉所有的網(wǎng)絡(luò)接口
-n:halt執(zhí)行的時候不會調(diào)用系統(tǒng)指令sync
init主要用戶系統(tǒng)在不同運行級別的切換,切換工作是立即完成的
6 系統(tǒng)服務(wù)管理工具
在 Centos7 以后,一個非常大的改變即使用了 systemd 管理工具,它不僅可以完成系統(tǒng)初始化的工作,還可以對系統(tǒng)和服務(wù)進(jìn)行管理。同時它也兼容了之前的 sysinit,之前的版本中,這些初始化腳本服務(wù)存在于 /etc/rc.d/init 中,現(xiàn)在被.service文件擴展結(jié)尾的代替
配置文件位于 /etc/systemd 目錄下,配置工具的命令使用 /bin/sbin 目錄下,備用的配置文件位于 /lib/systemd 目錄,可以通過rpm -ql systemd查看所有的路徑
另外,為了方便操作,systemd提供了強大的命令行工具systemctl,下面我們看看這些常見的啟動停止服務(wù)的命令
啟動 停止 重啟服務(wù)
通過systemctl啟動一個服務(wù)
systemctl?start?httpd.service
停掉此服務(wù)
systemctl?stop?httpd.service
重啟服務(wù)
systemctl?restart?httpd.service
systemctl?try-restart?httpd.service#只會在服務(wù)已經(jīng)運行的狀態(tài)下重啟服務(wù)
systemctl?reload?httpd.service#重新加載配置文件
關(guān)閉服務(wù)
systemctl?disable?httpd.service
如果要查看這個服務(wù)狀態(tài)
systemctl?status?httpd.service
7 遠(yuǎn)程工具介紹
這里介紹的即Xshell了,是一個強大的安全終端模擬如那件。支持SSH1,SSH2等協(xié)議。方便遠(yuǎn)程連接到遠(yuǎn)程主機,除此之外,還有豐富的配色方案和樣式選擇。安裝就很簡單了,下面將安裝的過程還是放在這作為記錄供參考
安裝Xshell,去官網(wǎng)download。進(jìn)入安裝頁面

選擇免費為家庭/學(xué)校

接受許可

安裝完成

外觀設(shè)置,字體設(shè)置,文件----屬性中

設(shè)置配色主題

Xshell使用過程中的技巧有哪些?
復(fù)制粘貼 Ctrl+Insert進(jìn)行復(fù)制,Shift+Insert進(jìn)行粘貼
右擊將當(dāng)前頁面的內(nèi)容復(fù)制到記事本中
快速點擊三次就可以選中當(dāng)前行
快速在多個session中切換。Alt+數(shù)字標(biāo)識且數(shù)字====切換到指定session
將命令同時發(fā)送給多個session中(對了,大家可以安裝哈rz,sz方便安裝下載文件)
上面這些操作是在實驗過程中經(jīng)常使用的,在此就沒有截圖的,如果在學(xué)習(xí)Linux的你,可以去嘗試嘗試,非常的簡單啦。
