課程內容#
目錄結構#
-
-
-
最上頭的 root 為根目錄 /,不是 root 用戶
-
此外,在根目錄 / 下還有一個 root 資料夾,是 root 用戶的家目錄
- 除了 root 用戶,其它用戶都無法進入
-
bin、sbin 二進制 /[系統的]
-
etc 配置資料夾【全局】
-
opt 可選的,存在意義不是很強,用戶可選擇地放文件
-
run 當前正在跑的文件,一般不關注
-
var 動態數據
- mail 系統的通知機制,不是 e-mail
- log 日誌【重要,勿修改】
- 查看信息一般需要 sudo 權限,一般要查看 error、warning 的位置
- last 顯示的登錄信息就存放在 wtmp 文件中
-
boot 內核文件,啟動相關
-
home 所有用戶的家的父目錄
- 用戶的家都在 home 下,路徑為 ${HOME} 或~
-
lib、lib64 庫
-
media 媒體 [早期掛載軟碟、光碟用,U 盤不在這,現在都用得少了]
-
mnt 掛載目錄
- 掛載其它的文件系統,如 U 盤、WSL 中的 CD... 盤
- 約定俗成的掛載點,不會自動掛載,也可以有其他任意位置的掛載點
-
proc 進程
- 通過 ps 查看對應進程 id 後,可在 proc 目錄下找到對應 id 的目錄
- 目錄裡的文件大都是 0KB,因為都不是真的,只是為了顯示
- 其中有一個 fd 目錄→文件描述符 file descriptor
-
- 可以往 stdout【#1】輸入 abc,即會在終端顯示
- 暫時不管 10 是做什麼的
-
-
tmp 臨時資料夾
- 關機就會清空,不是緩衝
- [PS] tmpfile 命令,可創建臨時文件,參考 man tmpfile
-
dev 設備文件
-
usr用戶主動安裝的文件
- 一般是管理員用戶,普通用戶無法安裝軟件
- local 共享文件 [手冊...]
啟動流程#
- 👉按下開機鍵
- 👉加載BIOS:硬件檢測 [CPU、磁碟、記憶條等],讀取配置 [系統安裝位置等],直到讀取 MBR
- BIOS—— 基本輸入輸出系統,基於 CMOS 晶片的固件
- 固件是基於軟件和硬件的,將一些程序固化 [燒製] 在一個晶片上
- 一直上電的 [鈕扣電池],掉電就會初始化
- BIOS—— 基本輸入輸出系統,基於 CMOS 晶片的固件
- 👉讀取第一個可啟動設備內的 MBR [主引導分區]
- 存儲了引導程序 Boot Loader
- 加載 kernel:檢測硬件,加載驅動
- 此時 kernel 接手 BIOS 的工作
- 👉執行引導程序 [Ubuntu:Grub]
- 加載虛擬文件系統,把內核 kernel 跑起來
- 👉初始化磁碟,讀取系統映像文件
- 👉啟動 1 號進程
- 早期叫 init,現在叫 cnd
- 此時系統有自己的功能了
- 👉加載磁碟,掛載數據,啟動各種服務,連接終端
- 👉【最後】運行 x windows 系統→有圖形化界面
運行級別#
Linux 下,不同的運行級別對應不同的服務來啟動系統
run level | 含義 | 備註 |
---|---|---|
0 | halt | 系統關機 |
1 | single user mode | 在系統出問題時維護用,類似安全模式 |
2 | multi-user, without nfs | nfs:network file system |
3 | full multi-user mode | 完整的多用戶純文本模式【常用】 |
4 | unused | 系統保留,沒有用 |
5 | X11 | 在 run level 3 的基礎上加載 X windows |
6 | reboot | 重啟 |
- 啟動方式發展
- System V [依次啟動]
- Upstart [分組啟動,沒有依賴關係的服務可以同時啟動]
- Systemd [全部服務一起啟動,有依賴關係的服務再稍稍滯後,進一步提高並發性]
- 系統啟動速度並不代表系統性能的好壞,如大型機器,幾年重啟一次,要好好檢查一下硬件
- 熱啟動:在沒有必要的情況下,跳過 BIOS 的硬件檢測過程,加快啟動速度
配置文件#
文件系統#
- /etc/fstab 開機時掛載的文件系統
- 靜態文件系統信息,指示需要掛載的系統盤
- 如:需給公司機器掛載一個其它的磁碟,可以在這設置
- /etc/mtab 當前掛載的文件系統
用戶系統#
- /etc/passwd 用戶信息
- 不僅有普通的用戶,還有非常多系統用戶
- 用戶:密碼佔用符:uid:gid: 用戶描述:家目錄:默認 shell
- 以前密碼佔用符存放密碼,現在放在👇
- /etc/shadow 用戶密碼
- 顯示的密碼加密了,解密成本也許大於獲取的價值
- /etc/group 群組信息
- /etc/gshadow 群組密碼
- 基本不用,root 來管整個體系即可,沒必要細分到組
- /etc/sudoers Sudoer 列表
- % 代表組
- 可自己添加
Shell#
- echo ${SHELL} 查看該用戶的 Shell 類型
- /etc/shells 可用的 Shells 列表
【針對 zsh】
- /etc/zsh/zprofile 用戶首選項【全局】
- ⭐在 man zsh 裡搜索 ——FILES,即可看到所有可配置 zsh 的文件路徑
- 舉例:在 4 個全局配置、4 個用戶配置裡 echo "In ..."
- 在用戶登錄 zsh 時,顯示順序如下:
-
- 順序:zshenv→zprofile→zshrc→zlogin,先全局 (G),再用戶 (L)
- [PS] 用戶配置文件
- $ZDOTDIR/.zshenv
- $ZDOTDIR/.zprofile
- $ZDOTDIR/.zshrc
- $ZDOTDIR/.zlogin
- $ZDOTDIR/.zlogout
- $ZDOTDIR—— 默認為用戶的家目錄
系統環境#
- /etc/environment 環境變量
- PATH 環境變量:${PATH}
- which 命令,會在這【PATH 環境變量】裡面的路徑找命令對應的文件【文件需可執行】
- ⭐PATH 添加路徑 ".":PATH=${PATH}:.
- 可直接在 PATH 變量後添加:.,即可連接
- 還可使用 export PATH=${PATH}:.
- ❗ 但兩種方式都是在內存中修改,重連 shell 後就會消失
- 詳見下 2 節 —— 環境變量
- /etc/updatedb.conf 文件檢索數據庫配置信息
- updatedb 更新數據庫 [更新後,可以使剛被創建的文件被 locate 找到,數據庫不是實時更新的]
- /etc/issue、/etc/issue.net 發行信息、[遠程登錄時的顯示]
- /etc/os-release 更詳細的系統信息
網絡#
- ⭐/etc/hosts 主機列表
- 也叫靜態 DNS,可以寫對應關係
- ❗ 域名 [主機名]→IP 地址
- [自己的理解] 類似 windows 的 hosts,對於一個名稱的解析先找 hosts,再使用 DNS
- /etc/hostname 主機名
- ①需要 sudo 權限修改→新的主機名
- ②重啟主機;或者使用 [hostname 新的主機名]臨時修改內存中的主機名,否則改了後,環境裡的主機名並沒有變
- ③再重連即可
- [自己的理解] 第①步改的是真正的主機名,第②步 hostname 用來臨時修改內存裡的主機名,直接重啟也可刷新內存
- ⭐/etc/resolv.conf 域名解析服務器地址
- DNS 動態域名服務器
- ❗ 域名→IP 地址
- /etc/network/interfaces 網卡配置文件,先自行查看
環境變量#
- env 所有環境變量,命名通常為大寫字母
- 通過 $ 加上環境變量的名稱,即可調用
- PATH 可執行文件夾的路徑
- OLDPWD 上次工作目錄
- HISTSIZE 保存的歷史記錄大小 [輸入命令]
- bash 默認保存 1000 行
- zsh 暫時沒有該變量
- 通過 history 可以查看輸入的命令歷史,無痕瀏覽自行搜索
- export
- export PATH=${PATH}:.
- 等同於 PATH=${PATH}:.
- 相比直接給環境變量賦值,export 更規範
- 這是在內存中修改,如果想固化該變量,每次連接都生效,可在任意【配置文件】中添加上述語句,zsh 的配置文件詳見上 3 節 ——Shell
- [PS] 可通過 set 查看所有本地定義的環境變量
軟件管理#
- 源碼安裝
git clone XXXX # 下載源代碼
cd XXX
make # 編譯
make install # 安裝
- 軟件包管理系統
- ⭐推薦 apt:它可以被理解為 apt-get 和 apt-cache 的高級集成版
- man apt 可以看到其描述:高級、比 apt-get、apt-cache 交互性更好
- 舉例:
隨堂練習#
代碼演示#
附加知識點#
- shell 中聲明定義的變量存儲在內存中,在進程空間裡,將 shell 關閉再打開,變量就沒了
- 不要把一切皆文件的概念理解過頭了,文件是靜態的,需要進程來維護文件,使動態化
- 變量存儲在進程空間裡
- ps 可以看到進程 ID
- ⭐使用 ssh 綽號登錄雲主機,如 ssh Ten,WSL 上效果如下👇
-
- 針對 WSL 或 MacOS
- ①在本機的 /etc/hosts 裡添加雲主機的 IP,對應一個綽號 Ten,如:45.123.111.1 Ten
- ②在本機創建一個用戶,名稱與想登錄的雲主機用戶一致,如:hz [本機用戶]、hz [雲主機用戶]
- ③此時在本機 ssh Ten,輸入密碼即可登錄
- ❗ 重啟後失效 [針對 WSL 2,其他系統方法自行搜索,WSL 1 不能 chattr]
- 使用 sudo chattr +i /etc/hosts,使 /etc/hosts 只讀,重啟也不會被重置
- 若要再修改:sudo chattr -i /etc/hosts
- [PS] 還可使用 ssh-copy-id 做免密登錄,tldr ssh-copy-id 可查看幫助說明
-
- 域名和 IP 可以是多對多的,可以做負載均衡
思考點#
Tips#
- [bash 下] /etc/profile 用戶首選項【全局】 [默認 shell 為 bash 時會先運行的文件]