Linux學習筆記——文件系統基礎與根文件系統詳解

文件系統基礎與根文件系統詳解

    • 什么是文件系統?
    • 什么是根文件系統(Root File System)?
      • 一句話理解:
      • 更詳細地說:
    • 根文件系統為什么重要?
      • 1. 啟動依賴
      • 2. 提供根目錄 `/`
      • 3. 支持掛載其他文件系統
      • 4. 提供運行環境
    • 嵌入式Linux中,根文件系統的作用更突出
    • 根文件系統的組成結構
  • 可執行映像文件的結構
    • 什么是可執行映像文件?
    • 可執行文件的組成部分
      • 1. 代碼段(.text)
      • 2. 數據段(.data)
      • 3. BSS段(.bss)
      • 4. 堆(Heap)
      • 5. 棧(Stack)
    • 舉個小例子說明:
    • 小結
  • 總結歸納


什么是文件系統?

文件系統(File System)是操作系統用于管理和存儲數據的一種機制。它負責:

  • 組織文件(比如目錄結構)
  • 保存文件(比如磁盤上的具體存儲位置)
  • 訪問文件(比如讀寫權限、文件打開關閉等)

就好比我們在圖書館里找書,文件系統就像是圖書館的管理員和索引目錄,幫我們高效查找、保存、組織信息。

常見的文件系統類型包括:

  • FAT32:U盤常見格式,兼容性強
  • NTFS:Windows系統常用
  • ext3/ext4:Linux系統常用

什么是根文件系統(Root File System)?

一句話理解:

根文件系統就是Linux啟動后最先使用、最基本的那個文件系統,是所有文件和目錄的“家”。

更詳細地說:

根文件系統是內核啟動后**第一個掛載(mount)**的文件系統,它的作用是支撐操作系統后續的運行,包括:

  • 提供基礎目錄結構(如 /bin/etc/lib/sbin/dev 等)
  • 提供啟動腳本和初始化進程(如 initinittabrcS 腳本等)
  • 提供運行基本命令所需的程序和動態庫(如 lscd 等命令)

如果把內核比作發動機,那么根文件系統就像是車身結構和操作系統環境,它必須提供最基本的組件,才能讓“車子真正跑起來”。


根文件系統為什么重要?

我們來分幾個角度解釋它的重要性:

1. 啟動依賴

內核啟動之后,需要運行第一個用戶空間進程——init,這個 init 程序必須在根文件系統中才能找到。

2. 提供根目錄 /

整個 Linux 的文件系統是一個倒置的樹形結構,根節點就是 /,所有文件和目錄都從 / 出發。比如:

  • /bin/ls:存放基本命令 ls
  • /lib/ld-linux.so.3:動態鏈接器
  • /etc/init.d/:啟動服務腳本

沒有根 /,整個目錄體系就無法組織。

3. 支持掛載其他文件系統

Linux 支持掛載多個磁盤/分區作為子目錄,比如:

  • /home:單獨掛載在另一分區
  • /mnt/usb:掛載U盤

但是這些操作本身的邏輯和配置文件(如 /etc/fstab)就要放在根文件系統里。

4. 提供運行環境

命令行工具(如 ls, cd)、系統調用所依賴的庫(如 libc.so)、shell 終端(如 bashsh)都在根文件系統中。否則你輸入命令也執行不了。


嵌入式Linux中,根文件系統的作用更突出

在嵌入式設備中,內核與根文件系統通常是分開存儲的:

  • 內核(zImage/uImage):負責硬件驅動、系統調度
  • 根文件系統(rootfs):負責提供用戶空間運行環境

如果你下載了內核卻沒有對應的根文件系統,會出現提示“無法加載rootfs”,系統也就啟動失敗。


根文件系統的組成結構

通常包含如下目錄:

目錄含義
/bin基本命令(二進制程序),如 ls, cp, mkdir
/sbin系統管理員用命令,如 mount, reboot
/lib程序運行所依賴的共享庫,如 libc.so
/etc系統配置文件,如 fstab, passwd
/dev設備節點,如 tty, null
/proc虛擬文件系統,內核和進程信息
/sys與設備相關的內核信息
/tmp臨時文件目錄
/root超級用戶的家目錄
/home普通用戶家目錄
/mnt掛載點,臨時掛載外部設備
/usr用戶軟件目錄
/var可變數據,如日志文件

可執行映像文件的結構


什么是可執行映像文件?

可執行映像文件是指可以被操作系統裝載并運行的程序文件。比如:

  • Linux中的 a.out, hello
  • Windows中的 .exe

Linux 系統中的可執行文件通常是 ELF 格式(Executable and Linkable Format)


可執行文件的組成部分

一個標準的可執行文件通常包含以下幾個區域:

1. 代碼段(.text)

  • 存放程序的機器指令(也就是編譯后的代碼)
  • 通常是只讀的,防止程序被惡意修改
  • 可以被多個程序共享加載(節省內存)

2. 數據段(.data)

  • 存放已初始化的全局變量和靜態變量
  • 可讀寫的,比如 int a = 10; 編譯后就會進入數據段

3. BSS段(.bss)

  • 存放未初始化的全局變量和靜態變量
  • 在程序運行前,這些變量會被自動初始化為0
  • BSS不占據磁盤空間,只在內存中占用空間(更節省)

4. 堆(Heap)

  • 程序運行時動態分配的內存區域(如使用 malloc()
  • 空間大小在運行時決定

5. 棧(Stack)

  • 用于函數調用時保存局部變量、返回地址等
  • 每個線程都有自己的棧,自動增長/收縮

舉個小例子說明:

#include <stdio.h>int global_a = 10;         // .data段
static int static_b;       // .bss段
int main() {int local_var = 5;     // 棧int *heap_var = malloc(100); // 堆printf("Hello World\n"); // .text段return 0;
}
部分內容
.textmain()printf()的編譯代碼
.dataglobal_a = 10
.bssstatic_b
local_var
heap_var = malloc()

小結

名稱含義是否可寫
.text代碼段否(只讀)
.data初始化的數據
.bss未初始化的數據
Heap動態分配區
Stack函數調用用

總結歸納

項目說明
根文件系統是Linux啟動后的第一個文件系統,提供基本命令、庫、腳本等,保障系統能運行
文件系統 vs 內核文件系統是用戶空間的“工具箱”,內核是操作系統的“核心引擎”
沒有根文件系統內核無法完成系統初始化,Linux系統無法運行
可執行文件組成包括代碼段、數據段、bss段、堆、棧等,各有不同用途和特性

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/900705.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/900705.shtml
英文地址,請注明出處:http://en.pswp.cn/news/900705.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

R語言進行聚類分析

目錄 簡述6種系統聚類法 實驗實例和數據資料&#xff1a; 上機實驗步驟&#xff1a; 進行最短距離聚類&#xff1a; 進行最長距離聚類&#xff1a; 進行中間距離聚類&#xff1a; 進行類平均法聚類&#xff1a; 進行重心法聚類&#xff1a; 進行ward.D聚類&#xff1a;…

【回眸】Linux 內核 (十四)進程間通訊 之 信號量

前言 信號量概念 信號量常用API 1.創建/獲取一個信號量 2.改變信號量的值 3. 控制信號量 信號量函數調用 運行結果展示 前言 上一篇文章介紹的共享內存有局限性,如:同步與互斥問題、內存管理復雜性問題、數據結構限制問題、可移植性差問題、調試困難問題。本篇博文介…

記錄IBM服務器檢測到備份GPT損壞警告排查解決過程

服務器設備&#xff1a;IBM x3550 M4 Server IMM默認IP地址&#xff1a;192.168.70.125 用戶名&#xff1a;USERID 密碼&#xff1a;PASSW0RD&#xff08;注意是零0&#xff09; 操作系統&#xff1a;Windows Hyper-V Server 2016 IMM Web System Status Warning&#xff1…

“Pseudo Global Warming”:偽全球變暖PGW

“Pseudo Global Warming”&#xff1a;偽全球變暖PGW PGW方法概述&#x1f50d; 一、PGW 方法的定義&#x1f9e0; 二、PGW 方法的基本原理&#x1f6e0;? 三、PGW 方法的主要步驟&#x1f4c8; 四、PGW 模擬時常涉及的變量&#x1f4ca; 五、PGW 方法的優/缺點&#x1f4da;…

2025-04-06 Unity Editor 2 —— GUILayout

文章目錄 常用組件1 Label 文本標簽2 TextField / TextArea / PasswordField 輸入框3 Butto / RepeatButton 按鈕4 Horizontal / Vertical 方向布局5 Box 自動布局框6 ScrollView 滾動視圖7 Horizontal / VerticalSlider 滑動條8 Area GUI 區域9 Window 窗口10 Toolbar 工具欄1…

Qt 交叉編譯詳細配置指南

一、Qt 交叉編譯詳細配置 1. 準備工作 1.1 安裝交叉編譯工具鏈 # 例如安裝ARM工具鏈(Ubuntu/Debian) sudo apt-get install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf# 或者64位ARM sudo apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu 1.2 準備目標…

用PointNet++訓練自己的數據集(語義分割模型semseg)

&#xff08;1&#xff09;訓練部件分割&#xff08;partseg&#xff09;模型和檢測自己點云并將結果保存txt&#xff0c;請看博主上兩篇文章 &#xff08;2&#xff09;本文背景是將pipe點云上的缺陷和本體檢測出來&#xff0c;即1種語義場景&#xff08;pipe&#xff09;&…

kotlin中主構造函數是什么

一 Kotlin 中的主構造函數 主構造函數&#xff08;Primary Constructor&#xff09;是 Kotlin 類聲明的一部分&#xff0c;用于在 創建對象時初始化類的屬性。它不像 Java 那樣是一個函數體&#xff0c;而是緊跟在類名后面。 主構造函數的基本定義 class Person(val name: S…

PHP 過濾器

PHP 過濾器 引言 PHP作為一種廣泛使用的服務器端腳本語言&#xff0c;提供了強大的數據處理能力。在處理數據時&#xff0c;確保數據的安全性和準確性至關重要。PHP過濾器&#xff08;Filters&#xff09;就是用來對數據進行預處理和后處理的工具。本文將詳細介紹PHP過濾器的…

【WebRTC】開源項目Webrtc-streamer介紹

WebRTC-Streamer 這是一個用于通過簡單的信令機制&#xff08;參見 api&#xff09;流式傳輸 WebRTC 媒體源的實驗項目&#xff0c;支持以下媒體源&#xff1a; 捕獲設備 屏幕捕獲 mkv 文件 RMTP/RTSP 源 同時該項目也兼容 WHEP 接口。 注意 * 在線演示已停止&#xff0c…

【Java設計模式】第9章 原型模式講解

9. 原型模式 9.1 原型模式講解 定義:通過拷貝原型實例創建新對象,無需調用構造函數。特點: 創建型模式無需了解創建細節適用場景: 類初始化消耗資源多對象創建過程繁瑣(如屬性賦值復雜)循環體中需創建大量對象優點: 性能優于直接new簡化創建流程缺點: 必須實現clone()…

【Java集合】LinkedList源碼深度分析

參考筆記&#xff1a;java LinkedList 源碼分析&#xff08;通俗易懂)_linkedlist源碼分析-CSDN博客 目錄 1.前言 2.LinkedList簡介 3.LinkedList的底層實現 4.LinkedList 與 ArrayList 的對比 4.1 如何選擇 4.2 對比圖 5.LinkedList 源碼Debug 5.1 add(E e) &#xff…

openssl源碼分析之加密模式(modes)

openssl實現分組加密模式&#xff08;例如AES128-CBC的CBC部分&#xff09;的模塊名字叫做modes&#xff0c;源代碼位于 https://gitee.com/gh_mirrors/openssl/tree/master/crypto/modes 博主又打不開github了TT&#xff0c;只能找個gitee鏡像 頭文件是modes.h。 該模塊目前…

Java 搭建 MC 1.18.2 Forge 開發環境

推薦使用 IDEA 插件 Minecraft Development 進行創建項目 創建完成后即可進行 MOD 開發。 但是關于 1.18.2 的開發教程太少&#xff0c;因此自己研究了一套寫法&#xff0c;寫法并非是最優的但是是探索開發MOD中的一次筆記和記錄 GITHUB: https://github.com/zimoyin/zhenfa…

nginx如何實現負載均衡?

Nginx 是一款高性能的 Web 服務器和反向代理服務器&#xff0c;它可以通過配置實現負載均衡功能。以下是實現負載均衡的詳細步驟和方法&#xff1a; 1. 基本概念 負載均衡是將客戶端請求分發到多個后端服務器上&#xff0c;以提高系統的可用性和性能。Nginx 支持多種負載均衡策…

深度學習天崩開局

李沐大神的d2l包導入&#xff0c; 這玩意需要python311版本&#xff0c;我現在版本已經313了&#xff0c;作為一個天生要強的男人&#xff0c;我是堅決不向低版本低頭的。 然后我就研究啊&#xff0c;各種翻資料啊&#xff0c;然后deepseek加豆包都翻爛了&#xff0c; 最終所…

docker部署jenkins并成功自動化部署微服務

一、環境版本清單&#xff1a; docker 26.1.4JDK 17.0.28Mysql 8.0.27Redis 6.0.5nacos 2.5.1maven 3.8.8jenkins 2.492.2 二、服務架構&#xff1a;有gateway&#xff0c;archives&#xff0c;system這三個服務 三、部署步驟 四、安裝linux 五、在linux上安裝redis&#…

MPDrive:利用基于標記的提示學習提高自動駕駛的空間理解能力

25年4月來自南方科技大學、百度、英國 KCL和琶洲實驗室&#xff08;廣東 AI 和數字經濟實驗室&#xff09;的論文“MPDrive: Improving Spatial Understanding with Marker-Based Prompt Learning for Autonomous Driving”。 自動駕駛視覺問答&#xff08;AD-VQA&#xff09;…

Halcon圖像采集

Halcon是一款強大的機器視覺軟件&#xff0c;結合C#可以開發出功能完善的視覺應用程序。 基本設置 確保已經安裝了Halcon和Halcon的.NET庫&#xff08;HalconDotNet&#xff09;。 1. 添加引用 在C#項目中&#xff0c;需要添加對HalconDotNet.dll的引用&#xff1a; 右鍵點…

Win10定時任務計劃無法顯示要執行的EXE任務程序界面,問題解決辦法

用C#開發的一款WINFORM程序&#xff0c;在電腦測試一切順利&#xff0c;運行結果正確。但用電腦的定時任務執行時&#xff0c;程序界面不顯示&#xff0c;重啟電腦、各種試都不行&#xff0c;最終問題解決。 解決辦法&#xff1a; 要選“只在用戶登陸時運行”&#xff0c;才能執…