系統學習 Linux 筆記

📢 本文由 gemini-3-flash-preview 翻譯

這篇文章由 Hiyoung 撰寫

其文章: https://blog.hiyoung.xyz/2022/08/01/84a03702e5a9/

(參考影片: https://www.bilibili.com/video/BV1WY4y1H7d3?p=1

一、基礎篇

1.1 Linux 檔案系統目錄結構

Linux文件系统目录结构 來源:菜鳥教程

圖中小箭頭表示該檔案實際位置在別處

  • /bin: bin 是 Binaries (二進位檔案) 的縮寫, 這個目錄存放著最經常使用的指令。
  • /boot:
    這裡存放的是啟動 Linux 時使用的一些核心檔案,包括一些連結檔案以及映像檔。
  • /dev :
    dev 是 Device (裝置) 的縮寫, 該目錄下存放的是 Linux 的外部裝置,在 Linux 中存取裝置的方式和存取檔案的方式是相同的。
  • /etc:
    etc 是 Etcetera (等等) 的縮寫, 這個目錄用來存放所有的系統管理所需要的設定檔和子目錄。
  • /home
    使用者的家目錄,在 Linux 中,每個使用者都有一個自己的目錄,一般該目錄名是以使用者的帳號命名的,如上圖中的 alice、bob 和 eve。
  • /lib
    lib 是 Library (函式庫) 的縮寫,這個目錄裡存放著系統最基本的動態連結共享函式庫,其作用類似於 Windows 裡的 DLL 檔案。幾乎所有的應用程式都需要用到這些共享函式庫。
  • /lost+found
    這個目錄一般情況下是空的,當系統非法關機後,這裡就存放了一些檔案。
  • /media
    Linux 系統會自動辨識一些裝置,例如 USB 隨身碟、光碟機等等,當辨識後,Linux 會把辨識的裝置掛載到這個目錄下。
  • /mnt
    系統提供該目錄是為了讓使用者臨時掛載別的檔案系統的,我們可以將光碟機掛載在 /mnt/ 上,然後進入該目錄就可以檢視光碟機裡的內容了。
  • /opt
    opt 是 optional (可選) 的縮寫,這是給主機額外安裝軟體所擺放的目錄。比如你安裝一個 ORACLE 資料庫則就可以放到這個目錄下。預設是空的。
  • /proc
    proc 是 Processes (程序) 的縮寫,/proc 是一種偽檔案系統(也即虛擬檔案系統),儲存的是當前核心執行狀態的一系列特殊檔案,這個目錄是一個虛擬的目錄,它是系統記憶體的映射,我們可以透過直接存取這個目錄來獲取系統資訊。
    這個目錄的內容不在硬碟上而在記憶體裡,我們也可以直接修改裡面的某些檔案,比如可以透過下面的指令來阻擋主機的 ping 指令,使別人無法 ping 你的機器:echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
  • /root
    該目錄為系統管理員,也稱作超級權限者的使用者家目錄。
  • /sbin
    s 就是 Super User 的意思,是 Superuser Binaries (超級使用者的二進位檔案) 的縮寫,這裡存放的是系統管理員使用的系統管理程式。
  • /selinux
    這個目錄是 Redhat/CentOS 所特有的目錄,Selinux 是一個安全機制,類似於 Windows 的防火牆,但是這套機制比較複雜,這個目錄就是存放 selinux 相關的檔案的。
  • /srv
    該目錄存放一些服務啟動之後需要提取的資料。
  • /sys:這是 Linux 2.6 核心的一個很大的變化。該目錄下安裝了 2.6 核心中新出現的一個檔案系統 sysfs 。sysfs 檔案系統整合了下面 3 種檔案系統的資訊:針對程序資訊的 proc 檔案系統、針對裝置的 devfs 檔案系統以及針對虛擬終端機的 devpts 檔案系統。該檔案系統是核心裝置樹的一個直觀反映。當一個核心物件被建立的時候,對應的檔案和目錄也在核心物件子系統中被建立。
  • /tmp
    tmp 是 temporary (臨時) 的縮寫,這個目錄是用來存放一些臨時檔案的。
  • /usr
    usr 是 unix shared resources (共享資源) 的縮寫,這是一個非常重要的目錄,使用者的很多應用程式和檔案都放在這個目錄下,類似於 Windows 下的 program files 目錄。
  • /usr/bin:
    系統使用者使用的應用程式。
  • /usr/sbin:
    超級使用者使用的比較高級的管理程式和系統守護程序。
  • /usr/src:
    核心原始碼預設的放置目錄。
  • /var
    var 是 variable (變數) 的縮寫,這個目錄中存放著在不斷擴充著的東西,我們習慣將那些經常被修改的目錄放在這個目錄下。包括各種紀錄檔。
  • /run
    是一個臨時檔案系統,儲存系統啟動以來的資訊。當系統重新啟動時,這個目錄下的檔案應該被刪掉或清除。如果你的系統上有 /var/run 目錄,應該讓它指向 run。

1.2 檔案基本屬性

1.2.1 基本屬性

在 Linux 中第一個字元代表這個檔案是目錄、檔案或連結檔案等等。

  • 當為 d 則是目錄
  • 當為 則是檔案;
  • 若是 l 則表示為連結檔案 (link file);
  • 若是 b 則表示為裝置檔案裡面的可供儲存的介面裝置 (可隨機存取裝置);
  • 若是 c 則表示為裝置檔案裡面的序列埠裝置,例如鍵盤、滑鼠 (一次性讀取裝置)。

接下來的字元中,以三個為一組,且均為 rwx 的三個參數的組合。其中, r 代表可讀 (read)、 w 代表可寫 (write)、 x 代表可執行 (execute)。 要注意的是,這三個權限的位置不會改變,如果沒有權限,就會出現減號

系统学习Linux笔记_3

每個檔案的屬性由左邊第一部分的 10 個字元來確定(如下圖)。

系统学习Linux笔记_4

從左至右用 0-9 這些數字來表示。

第 0 位確定檔案類型,第 1-3 位確定擁有者(該檔案的所有者)擁有該檔案的權限。第 4-6 位確定所屬群組(所有者的同組使用者)擁有該檔案的權限,第 7-9 位確定其他使用者擁有該檔案的權限。

其中,第 1、4、7 位表示讀權限,如果用 r 字元表示,則有讀權限,如果用 字元表示,則沒有讀權限;

2、5、8 位表示寫權限,如果用 w 字元表示,則有寫權限,如果用 字元表示沒有寫權限;第 3、6、9 位表示可執行權限,如果用 x 字元表示,則有執行權限,如果用 字元表示,則沒有執行權限。

1.2.2 Linux 檔案擁有者和群組

1、chgrp:更改檔案群組

語法:

1
chgrp [-R] 群組名 檔案名

參數選項

  • -R:遞迴更改檔案群組,就是在更改某個目錄檔案的群組時,如果加上 -R 的參數,那麼該目錄下的所有檔案的群組都會更改。

2、chown:更改檔案擁有者,也可以同時更改檔案群組

語法:

1
2
chown [–R] 擁有者名 檔案名
chown [-R] 擁有者名:群組名 檔案名

進入 /root 目錄(~)將 install.log 的擁有者改為 bin 這個帳號:

1
2
3
4
[root@www ~] cd ~
[root@www ~]# chown bin install.log
[root@www ~]# ls -l
-rw-r--r--  1 bin  users 68495 Jun 25 08:53 install.log

將 install.log 的擁有者與群組改回為 root:

1
2
3
[root@www ~]# chown root:root install.log
[root@www ~]# ls -l
-rw-r--r--  1 root root 68495 Jun 25 08:53 install.log

3、chmod:更改檔案 9 個屬性

Linux 檔案屬性有兩種設定方法,一種是數字,一種是符號。

Linux 檔案的基本權限就有九個,分別是 owner/group/others (擁有者/群組/其他) 三種身份各有自己的 read/write/execute 權限。

先複習一下剛剛上面提到的數據:檔案的權限字元為: -rwxrwxrwx , 這九個權限是三個三個一組的!其中,我們可以使用數字來代表各個權限,各權限的分數對照表如下:

  • r:4
  • w:2
  • x:1

每種身份 (owner/group/others) 各自的三個權限 (r/w/x) 分數是需要累加的,例如當權限為: -rwxrwx— 分數則是:

  • owner = rwx = 4+2+1 = 7
  • group = rwx = 4+2+1 = 7
  • others= — = 0+0+0 = 0

所以等一下我們設定權限的變更時,該檔案的權限數字就是 770。變更權限的指令 chmod 的語法是這樣的:

1
chmod [-R] xyz 檔案或目錄

選項與參數:

  • xyz : 就是剛剛提到的數字類型的權限屬性,為 rwx 屬性數值的相加。
  • -R : 進行遞迴 (recursive) 的持續變更,以及連同次目錄下的所有檔案都會變更

舉例來說,如果要將 .bashrc 這個檔案所有的權限都設定啟用,那麼指令如下:

1
2
3
4
5
[root@www ~]# ls -al .bashrc
-rw-r--r--  1 root root 395 Jul  4 11:45 .bashrc
[root@www ~]# chmod 777 .bashrc
[root@www ~]# ls -al .bashrc
-rwxrwxrwx  1 root root 395 Jul  4 11:45 .bashrc

那如果要將權限變成 -rwxr-xr– 呢?那麼權限的分數就成為 [4+2+1][4+0+1][4+0+0]=754。

4、符號類型改變檔案權限

還有一個改變權限的方法,從之前的介紹中我們可以發現,基本上就九個權限分別是:

  • user:使用者
  • group:群組
  • others:其他

那麼我們就可以使用 u, g, o 來代表三種身份的權限。

此外, a 則代表 all,即全部的身份。讀寫的權限可以寫成 r, w, x,也就是可以使用下表的方式來看:

| chmod | u g o a | +(加入) -(除去) =(設定) | r w x | 檔案或目錄 | |---|---|---|---|---|

如果我們需要將檔案權限設定為 -rwxr-xr– ,可以使用 chmod u=rwx,g=rx,o=r 檔案名 來設定:

1
2
3
4
5
6
touch test1    // 建立 test1 檔案
ls -al test1    // 檢視 test1 預設權限
#-rw-r--r-- 1 root root 0 Nov 15 10:32 test1
chmod u=rwx,g=rx,o=r  test1    // 修改 test1 權限
ls -al test1
-rwxr-xr-- 1 root root 0 Nov 15 10:32 test1

而如果是要將權限去掉而不改變其他已存在的權限呢?例如要拿掉全部人的可執行權限,則:

1
2
3
chmod  a-x test1
ls -al test1
#-rw-r--r-- 1 root root 0 Nov 15 10:32 test1

1.3 vim 文字編輯

1.3.1 vim 的三種模式

基本上 vi/vim 共分為三種模式,分別是命令模式編輯模式一般模式

系统学习Linux笔记_5

1.3.2 vim 快捷指令

參考外部網站: https://www.runoob.com/linux/linux-vim.html

1.4 網路配置

1.4.1 VMware 的三種網路連接模式

橋接模式:虛擬機器直接連接外部網路(對外部網路可見),主機起到橋接器的作用,虛擬機器的地位和主機相同,從路由器分配獨立的 IP 位址。

NAT 模式:主機和虛擬機器建構一個專用網路,使用 NAT 對虛擬機器進行 IP 轉換(虛擬機器對外部網路不可見)。此時虛擬機器單獨組成一個區域網路,此時主機和虛擬機器並不在一個網段,無法進行通訊,所以又虛擬一個網路卡(VMnet8)來連接至虛擬機器所在的區域網路。

僅主機模式:這種模式僅僅只讓虛擬機器與主機通訊,不連接至 Internet。

系统学习Linux笔记_6 系统学习Linux笔记_7

1.4.2 配置靜態 IP

參考站內文章: 在虛擬機器中設置靜態 IP(以 CentOS 為例)

1.4.3 配置主機名稱

1
2
3
4
5
6
7
8
9
hostname #檢視當前主機名稱

vim /etc/hostname  #修改主機名稱
#修改後重啟即可顯示新主機名稱

#方法二 

hostnamectl set-hostname ... 
#即時生效
1
2
#修改 hosts 檔案
vim /etc/hosts

1.5 系統管理

1.5.1 service 服務管理

一個正在執行的程式或指令,稱為「程序」(Process)

啟動後一直存在、常駐記憶體的程序,一般稱為「服務」

1
2
3
systemctl start|stop|restart|status servicename #基本語法

/usr/lib/systemd/system/    #服務所在目錄
This post is licensed under CC BY-NC-SA 4.0 by the author.