1. 程式人生 > 實用技巧 >Linux 基礎

Linux 基礎

0 執行環境

  • 本機系統:Windows 7

  • 虛擬機器軟體:Oracle VM VirtualBox 6

  • 虛擬機器系統:CenOS 7

1 Linux 安裝

詳情參考這篇博文:

VirtualBox 6 安裝 CentOS 7:https://www.cnblogs.com/PikapBai/p/13513474.html

2 Linux SSH 遠端登入

Linux 一般作為伺服器使用,而伺服器一般放在機房,你不可能在機房操作你的 Linux 伺服器。

這時我們就需要遠端登入到Linux伺服器來管理維護系統。

Linux 系統中是通過 SSH 服務實現的遠端登入功能,預設 SSH 服務埠號為 22。

詳情參考這篇博文:

MobaXterm 連線 VirtualBox 6 虛擬機器中的 CenOS 7:https://www.cnblogs.com/PikapBai/p/13514531.html

3 Linux 系統 啟動過程

3.1 核心引導

當計算機開啟電源後,首先是 BIOS 開機自檢,按照 BIOS 中設定的啟動裝置來啟動。作業系統接管硬體後,首先讀入 /boot 目錄下的核心檔案

3.2 執行 init

init 程序是系統所有程序的起點,沒有這個程序,系統中任何程序都不會啟動。

init 程式首先是需要讀取配置檔案 /etc/inittab。

3.2.1 執行級別

許多程式需要開機啟動。它們在Windows叫做"服務"(service),在Linux就叫做"守護程序"(daemon)。

init程序的一大任務,就是去執行這些開機啟動的程式。

但是,不同的場合需要啟動不同的程式,比如用作伺服器時,需要啟動Apache,用作桌面就不需要。

Linux允許為不同的場合,分配不同的開機啟動程式,這就叫做"執行級別"(runlevel)。也就是說,啟動時根據"執行級別",確定要執行哪些程式。

Linux系統有 7 個執行級別(runlevel):

  • 執行級別 0:系統停機狀態,系統預設執行級別不能設為 0,否則不能正常啟動

  • 執行級別 1:單使用者工作狀態,root 許可權,用於系統維護,禁止遠端登陸

  • 執行級別 2:多使用者狀態(沒有 NFS)

  • 執行級別 3:完全的多使用者狀態(有 NFS),登陸後進入控制檯命令列模式

  • 執行級別 4:系統未使用,保留

  • 執行級別 5:X11 控制檯,登陸後進入圖形 GUI 模式

  • 執行級別 6:系統正常關閉並重啟,預設執行級別不能設為 6,否則不能正常啟動

3.3 系統初始化

在 init 的配置檔案中有這麼一行: si::sysinit:/etc/rc.d/rc.sysinit 它呼叫執行了 /etc/rc.d/rc.sysinit,而 rc.sysinit 是一個 bash shell 的指令碼,它主要是完成一些系統初始化的工作,rc.sysinit 是每一個執行級別都要首先執行的重要指令碼。

它主要完成的工作有:啟用交換分割槽,檢查磁碟,載入硬體模組以及其它一些需要優先執行任務。

l5:5:wait:/etc/rc.d/rc 5

這一行表示以 5 為引數執行 /etc/rc.d/rc,/etc/rc.d/rc 是一個 Shell 指令碼,它接受 5 作為引數,去執行 /etc/rc.d/rc5.d/ 目錄下的所有的 rc 啟動指令碼,/etc/rc.d/rc5.d/ 目錄中的這些啟動指令碼實際上都是一些連線檔案,而不是真正的 rc 啟動指令碼,真正的 rc 啟動指令碼實際上都是放在 /etc/rc.d/init.d/目錄下。

而這些 rc 啟動指令碼有著類似的用法,它們一般能接受 start、stop、restart、status 等引數。

/etc/rc.d/rc5.d/ 中的 rc 啟動指令碼通常是 K 或 S 開頭的連線檔案,對於以 S 開頭的啟動指令碼,將以 start 引數來執行。

而如果發現存在相應的指令碼也存在 K 打頭的連線,而且已經處於執行態了(以 /var/lock/subsys/ 下的檔案作為標誌),則將首先以 stop 為引數停止這些已經啟動了的守護程序,然後再重新執行。

這樣做是為了保證是當 init 改變執行級別時,所有相關的守護程序都將重啟。

至於在每個執行級中將執行哪些守護程序,使用者可以通過 chkconfig 或 setup 中的 "System Services" 來自行設定。

3.4 建立終端

rc 執行完畢後,返回 init。這時基本系統環境已經設定好了,各種守護程序也已經啟動了。

init 接下來會開啟 6 個終端,以便使用者登入系統。在 inittab 中的以下 6 行就是定義了 6 個終端:

2345:respawn:/sbin/mingetty tty1
2345:respawn:/sbin/mingetty tty2
2345:respawn:/sbin/mingetty tty3
2345:respawn:/sbin/mingetty tty4
2345:respawn:/sbin/mingetty tty5
2345:respawn:/sbin/mingetty tty6

從上面可以看出在2、3、4、5的執行級別中都將以 respawn 方式執行 mingetty 程式,mingetty 程式能開啟終端、設定模式。

同時它會顯示一個文字登入介面,這個介面就是我們經常看到的登入介面,在這個登入介面中會提示使用者輸入使用者名稱,而使用者輸入的使用者將作為引數傳給 login 程式來驗證使用者的身份。

3.5 使用者登入系統

一般來說,使用者的登入方式有三種:

  1. 命令列登入

  2. ssh登入

  3. 圖形介面登入

對於執行級別為 5 的圖形方式使用者來說,他們的登入是通過一個圖形化的登入介面。登入成功後可以直接進入 KDE、Gnome 等視窗管理器。

而本文主要講的還是文字方式登入的情況:當我們看到 mingetty 的登入介面時,我們就可以輸入使用者名稱和密碼來登入系統了。

Linux 的賬號驗證程式是 login,login 會接收 mingetty 傳來的使用者名稱作為使用者名稱引數。

然後 login 會對使用者名稱進行分析:如果使用者名稱不是 root,且存在 /etc/nologin 檔案,login 將輸出 nologin 檔案的內容,然後退出。

這通常用來系統維護時防止非 root 使用者登入。只有 /etc/securetty 中登記了的終端才允許 root 使用者登入,如果不存在這個檔案,則 root 使用者可以在任何終端上登入。

/etc/usertty 檔案用於對使用者作出附加訪問限制,如果不存在這個檔案,則沒有其他限制。

4 圖形模式與文字模式的切換方式

Linux 預設提供了六個命令視窗終端機讓我們來登入。

預設我們登入的就是第一個視窗,也就是 tty1,這個六個視窗分別為 tty1,tty2 … tty6,你可以按下 Ctrl + Alt + F1 ~ F6 來切換它們。

如果你安裝了圖形介面,預設情況下是進入圖形介面的,此時你就可以按 Ctrl + Alt + F1 ~ F6來進入其中一個命令視窗介面。

當你進入命令視窗介面後再返回圖形介面只要按下 Ctrl + Alt + F7 就回來了。

如果你用的 VMWare 虛擬機器,命令視窗切換的快捷鍵為 Alt + Space + F1~F6. 如果你在圖形介面下請按 Alt + Shift + Ctrl + F1~F6 切換至命令視窗。

5 Linux 關機

在 linux 領域內大多用在伺服器上,很少遇到關機的操作。畢竟伺服器上跑一個服務是永無止境的,除非特殊情況下,不得已才會關機。

正確的關機流程為:sync > shutdown > reboot > halt

關機指令為:shutdown ,你可以 man shutdown 來看一下幫助文件。

例如你可以執行如下命令關機:

sync 將資料由記憶體同步到硬碟中。

shutdown 關機指令,你可以man shutdown 來看一下幫助文件。例如你可以執行如下命令關機:

shutdown –h 10 ‘This server will shutdown after 10 mins’ 這個命令告訴大家,計算機將在10分鐘後關機,並且會顯示在登陸使用者的當前螢幕中。

shutdown –h now 立馬關機

shutdown –h 20:25 系統會在今天20:25關機

shutdown –h +10 十分鐘後關機

shutdown –r now 系統立馬重啟

shutdown –r +10 系統十分鐘後重啟

reboot 就是重啟,等同於 shutdown –r now

halt 關閉系統,等同於shutdown –h now 和 poweroff

最後總結一下,不管是重啟系統還是關閉系統,首先要執行 sync 命令,把記憶體中的資料寫到磁碟中。

關機的命令有 shutdown –h now halt poweroffinit 0 , 重啟系統的命令有 shutdown –r now reboot init 6

6 Linux 檔案

6.1 Linux 檔案

Linux 系統中一切皆檔案。

在 Linux 系統中任何東西都是以檔案形式來儲存的。這其中不僅包括我們熟知的文字檔案、可執行檔案等等,還包括硬體裝置、虛擬裝置、網路連線等等,甚至連目錄其實都是一種特殊的檔案。

6.2 Linux 檔案許可權位

Linux 系統是一種典型的多使用者系統,不同的使用者處於不同的地位,擁有不同的許可權。為了保護系統的安全性,Linux 系統對不同的使用者訪問同一檔案(包括目錄檔案)的許可權做了不同的規定。

在 Linux 中我們 可以使用 ll 或者 ls –l 命令來列出檔案的詳細資訊,如下所示:

ls -l 命令顯示的資訊中,開頭是由 10 個字元構成的字串,這就是 Linux 檔案許可權位

其中第一個字元表示檔案型別,它可以是下述型別之一:

  • 當為[ d ]則是目錄

  • 當為[ - ]則是普通檔案

  • 若是[ l ]則表示為符號連結,連結文件(link file);

  • 若是[ b ]則是塊裝置檔案,表示為裝置檔案裡面的可供儲存的介面裝置(可隨機存取裝置);

  • 若是[ c ]則是字元裝置檔案,表示為裝置檔案裡面的串列埠裝置,例如鍵盤、滑鼠(一次性讀取裝置)。

  • 若是[ s ]則是 socket 檔案,網路套接字

  • 若是[ p ]則是管道

後面的 9 個字元表示檔案的訪問許可權,分為 3 組,每組 3 位,且均為『rwx』 的三個引數的組合,這三個許可權的位置不會改變,如果沒有許可權,就會出現減號[ - ]。

  • 第一組表示檔案屬主的許可權

  • 第二組表示同組使用者的許可權

  • 第三組表示其他使用者的許可權。

每一組的三個字元分別表示對檔案的讀、寫和執行許可權。各許可權如下所示:

  • r 讀

  • w 寫

  • x 可執行。對於目錄,表示進入許可權。

  • s 當檔案被執行時,把該檔案的 UID 或 GID 賦予執行程序的 UID(使用者ID)或 GID(組 ID)。

  • t 設定標誌位(sticky bit)。如果是有 sticky bit 的目錄,在該目錄下任何使用者只要有適當的許可權即可建立檔案,但檔案只能被超級使用者、目錄擁有者或檔案屬主刪除。如果是有 sticky bit 的可執行檔案,在該檔案執行後,指向其正文段的指標仍留在記憶體。這樣再次執行它時,系統就能更快地裝入該檔案。

  • 沒有相應位置的許可權。

6.3 Linux 檔案屬主和屬組

[root@www /]# ls -l
total 64
drwxr-xr-x 2 root  root  4096 Feb 15 14:46 cron
drwxr-xr-x 3 mysql mysql 4096 Apr 21  2014 mysql
……

對於檔案來說,它都有一個特定的所有者,也就是對該檔案具有所有權的使用者。

同時,在Linux系統中,使用者是按組分類的,一個使用者屬於一個或多個組。

檔案所有者以外的使用者又可以分為檔案所有者的同組使用者和其他使用者。

因此,Linux 系統按檔案所有者、檔案所有者同組使用者和其他使用者來規定了不同的檔案訪問許可權。

在以上例項中,mysql 檔案是一個目錄檔案,屬主和屬組都為 mysql,屬主有可讀、可寫、可執行的許可權;與屬主同組的其他使用者有可讀和可執行的許可權;其他使用者也有可讀和可執行的許可權。

對於 root 使用者來說,一般情況下,檔案的許可權對其不起作用。

6.4 Linux 連線

Linux 連結分兩種,一種被稱為硬連結(Hard Link),另一種被稱為符號連結(Symbolic Link)。預設情況下,ln 命令產生硬連結。

6.4.1 硬連線

硬連線指通過索引節點來進行連線。

在 Linux 的檔案系統中,儲存在磁碟分割槽中的檔案不管是什麼型別都給它分配一個編號,稱為 索引節點號(Inode Index)

在 Linux 中,多個檔名指向同一索引節點是存在的。比如:A 是 B 的硬連結(A 和 B 都是檔名),則 A 的目錄項中的 inode 節點號與 B 的目錄項中的 inode 節點號相同,即一個 inode 節點對應兩個不同的檔名,兩個檔名指向同一個檔案,A 和 B 對檔案系統來說是完全平等的。刪除其中任何一個都不會影響另外一個的訪問。

硬連線的作用是允許一個檔案擁有多個有效路徑名,這樣使用者就可以建立硬連線到重要檔案,以實現“誤刪”的功能。其原因如上所述,因為對應該目錄的索引節點有一個以上的連線。只刪除一個連線並不影響索引節點本身和其它的連線,只有當最後一個連線被刪除後,檔案的資料塊及目錄的連線才會被釋放。也就是說,檔案真正刪除的條件是與之相關的所有硬連線檔案均被刪除。

6.4.2 軟連線

另外一種連線稱之為符號連線(Symbolic Link),也叫軟連線。
軟連結檔案有類似於 Windows 的快捷方式。它實際上是一個特殊的檔案。

在符號連線中,檔案實際上是一個文字檔案,其中包含的有另一檔案的位置資訊。比如:A 是 B 的軟連結(A 和 B 都是檔名),A 的目錄項中的 inode 節點號與 B 的目錄項中的 inode 節點號不相同,A 和 B 指向的是兩個不同的 inode,繼而指向兩塊不同的資料塊。但是 A 的資料塊中存放的只是 B 的路徑名(可以根據這個找到 B 的目錄項)。A 和 B 之間是“主從”關係,如果 B 被刪除了,A 仍然存在(因為兩個是不同的檔案),但指向的是一個無效的連結。

7 Linux 目錄結構

在 Windows 中,每一個碟符下是一個獨立的檔案系統,硬碟有多少個分割槽就有多少個檔案系統。而在 Linux 系統中不管建立了多少個硬碟分割槽都只有一個檔案系統。整個檔案系統的根目錄是 “/”,從 “/” 根目錄出發理論上可以找到 Linux 系統中的所有目錄和檔案。

登入系統後,在當前命令視窗下輸入命令:

ls /

會看到如下圖所示:

樹狀目錄結構:

以下是對這些目錄的解釋:

系統啟動必須:

  • /boot:存放的啟動Linux 時使用的核心檔案,包括連線檔案以及映象檔案。

  • /etc:存放所有的系統需要的配置檔案和子目錄列表,更改目錄下的檔案可能會導致系統不能啟動。

  • /lib:存放基本程式碼庫(比如c++庫),其作用類似於Windows裡的DLL檔案。幾乎所有的應用程式都需要用到這些共享庫。

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

指令集合:

  • /bin:存放著最常用的程式和指令

  • /sbin:只有系統管理員能使用的程式和指令。

外部檔案管理:

  • /dev :Device(裝置)的縮寫, 存放的是 Linux 的外部裝置。注意:在 Linux 中訪問裝置和訪問檔案的方式是相同的。

  • /media:類 windows 的其他裝置,例如U盤、光碟機等等,識別後 linux 會把裝置放到這個目錄下。

  • /mnt:臨時掛載別的檔案系統的,我們可以將光碟機掛載在 /mnt/ 上,然後進入該目錄就可以檢視光碟機裡的內容了。

臨時檔案:

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

  • /lost+found:一般情況下為空的,系統非法關機後,這裡就存放一些檔案。

  • /tmp:這個目錄是用來存放一些臨時檔案的。

賬戶:

  • /root:系統管理員的使用者主目錄。

  • /home:使用者的主目錄,以使用者的賬號命名的。

  • /usr:使用者的很多應用程式和檔案都放在這個目錄下,類似於 windows 下的 program files 目錄。

  • /usr/bin:系統使用者使用的應用程式與指令。

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

  • /usr/src:核心原始碼預設的放置目錄。

執行過程中要用:

  • /var:存放經常修改的資料,比如程式執行的日誌檔案(/var/log 目錄下)。

  • /proc:管理記憶體空間。虛擬的目錄,是系統記憶體的對映,我們可以直接訪問這個目錄來,獲取系統資訊。這個目錄的內容不在硬碟上而是在記憶體裡,我們也可以直接修改裡面的某些檔案來做修改。

擴充套件用的:

  • /opt:預設是空的,我們安裝額外軟體可以放在這個裡面。

  • /srv:存放服務啟動後需要提取的資料(不用伺服器就是空)

7.1 絕對路徑和相對路徑

. ..

  • 每個目錄下都有 ...

  • . 表示當前目錄

  • .. 表示上一級目錄,即父目錄

  • 根目錄下的 ... 都表示當前目錄

絕對路徑:從 “/” 根目錄開始逐層查詢檔案和目錄。

相對路徑:以當前目錄或上一級目錄為基準逐層查詢檔案和目錄。
例如:當前目錄:“./” ; 當前目錄的上一級目錄:“../”

7.2 使用者 home 目錄

Linux 系統為每一個使用者提供了一個專屬的目錄用來存放它自己的檔案內容,位於 /home/user,稱之為使用者工作目錄或家目錄,表示方式為:

/home/user
~

檢視自己家目錄下的檔案,輸入 ls ~,如下所示: