Bo2SS

Bo2SS

5 基本系統

課程內容#

目錄結構#

  • 圖片
  • 圖片
  • 最上頭的 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 晶片的固件
      • 固件是基於軟件和硬件的,將一些程序固化 [燒製] 在一個晶片上
      • 一直上電的 [鈕扣電池],掉電就會初始化
  • 👉讀取第一個可啟動設備內的 MBR [主引導分區]
    • 存儲了引導程序 Boot Loader
    • 加載 kernel:檢測硬件,加載驅動
    • 此時 kernel 接手 BIOS 的工作
  • 👉執行引導程序 [Ubuntu:Grub]
    • 加載虛擬文件系統,把內核 kernel 跑起來
  • 👉初始化磁碟,讀取系統映像文件
  • 👉啟動 1 號進程
    • 早期叫 init,現在叫 cnd
    • 此時系統有自己的功能了
  • 👉加載磁碟,掛載數據啟動各種服務,連接終端
  • 👉【最後】運行 x windows 系統→有圖形化界面

運行級別#

Linux 下,不同的運行級別對應不同的服務來啟動系統

run level含義備註
0halt系統關機
1single user mode在系統出問題時維護用,類似安全模式
2multi-user, without nfsnfs:network file system
3full multi-user mode完整的多用戶純文本模式【常用】
4unused系統保留,沒有用
5X11在 run level 3 的基礎上加載 X windows
6reboot重啟
  • 啟動方式發展
    • 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 時會先運行的文件]

課程速記#

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。