Linux文件——Ext2文件系統(3)_軟硬鏈接

文章目錄

  • 文件的軟硬鏈接
    • 軟鏈接
    • 硬鏈接
    • 軟硬鏈接對比
    • 軟硬鏈接應用
    • 軟硬鏈接注意事項
    • 總結

文件的軟硬鏈接

本篇文章將重點講解文件系統中的一個重要的知識點:
即文件的軟硬鏈接。

軟鏈接

對于軟鏈接的講解,我們先來使用一個指令看看效果:ln -s 被軟鏈接的文件 鏈接的文件
在這里插入圖片描述
運行代碼:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <dirent.h>
#include <sys/types.h>
#include <unistd.h>
int main(int argc, char *argv[]) {if (argc != 2) {fprintf(stderr, "Usage: %s <directory>\n", argv[0]);exit(EXIT_FAILURE);}DIR *dir = opendir(argv[1]); // 系統調用,自行查閱if (!dir) {perror("opendir");exit(EXIT_FAILURE);}struct dirent *entry;while ((entry = readdir(dir)) != NULL) { //系統調用,自行查閱// Skip the "." and ".." directory entriesif (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0) {continue;}printf("Filename: %s, Inode: %lu\n", entry->d_name, (unsigned long)entry->d_ino);
}closedir(dir);return 0;
}

我們在當前目錄下,使用該指令,把當前目錄下的TestDir目錄進行軟鏈接,鏈接的名為DIR,我們打開查看當前目錄下的文件,發現多了一個文件叫做DIR。
而且,這個文件的類型標識符是l,表示是一個鏈接文件。
我們試著使用一下這個鏈接文件:
在這里插入圖片描述
我們發現,是可以把這個DIR當作成可執行文件來用的,因為鏈接的就是一個可執行文件!

我們來看看被鏈接的文件和鏈接文件的區別:
在這里插入圖片描述
我們會發現,軟鏈接文件DIR是有獨立的inode編號的!也就是說,它是一個獨立的文件!

硬鏈接

有軟鏈接,就有硬鏈接。
使用指令ln 被鏈接文件 鏈接文件即可完成對文件的硬鏈接:
在這里插入圖片描述
硬鏈接文件是DIR_HARD。我們發現,這個文件和被鏈接文件的inode編號都是一樣的,都是666187,這說明:硬鏈接的文件本質上就不是一個獨立的文件!因為沒有獨立的inode編號!

軟硬鏈接對比

前面我們講解了軟硬鏈接的使用,也介紹了軟硬鏈接的一些特點,接下來,我們來對比一下:

首先,軟硬鏈接的本質區別就是:
軟鏈接的文件具有獨立的inode編號!所以是一個獨立的文件。而硬鏈接的文件不是。


對于軟鏈接,它里面的內容是什么呢?
其實就是保存了被軟鏈接的文件的路徑!在別的地方進行軟鏈接,調用的時候通過這個保存的路徑來找到文件并且做相應操作。

這不就是Windows系統下的快捷方式嗎?
在這里插入圖片描述
這個所謂的目標,其實就是運行該軟件的可執行程序!

因為這些可執行程序有可能會藏得很深,如果每次運行都要去找是很麻煩的。所以,就可以使用軟鏈接的方式,保存目標文件路徑。使用的時候就是通過這個路徑來使用。


而硬鏈接,由于它沒有獨立的inode,所以硬鏈接的文件不是獨立的文件。那它是什么呢?
其實就是當前目錄下和被硬鏈接文件所處目錄下都添加了一份:inode和硬鏈接文件的名的映射關系罷了,只不過這個inode,是和被鏈接文件一樣的!

所以,這個行為本質上就是在給文件做副本。刪除文件時,通過引用計數來判斷當前inode使用的次數,來決定是否需要完全刪除文件。

所以,硬鏈接是可以用來做備份工作的!

軟硬鏈接應用

這里來講一個我們一直在用,但是卻不知道其中管理的內容。
當前目錄.上級目錄..

其實所謂的當前目錄.上級目錄..就是目錄的硬鏈接罷了!
我們來驗證一下:

驗證當前目錄.
在這里插入圖片描述
驗證上級目錄..
在這里插入圖片描述


經過驗證,確實發現,文件系統其實對當前目錄.上級目錄..進行了硬鏈接操作。也就是說,保存了當前目錄下的內容和上級目錄的內容。

這也就是為什么我們使用當前目錄.上級目錄..可以正常操作當前目錄和上級目錄了!效果和直接使用目錄名一致!

軟硬鏈接注意事項

但是,這里要說的是:
在Linux系統下,是不允許用戶對目錄進行硬鏈接的!
在這里插入圖片描述

但是,當前目錄.上級目錄..就是對目錄進行的硬鏈接。這是操作系統自動進行的!其余情況下,不允許用戶進行對目錄的硬鏈接。


這里我們來稍微解釋一下:

其實是因為,系統中的文件搜索路徑是一個文件樹!如果對目錄進行硬鏈接的話,那么會導致形成路徑環!假設現在搜索某個文件,對搜到了一個硬鏈接的目錄。這時候就麻煩了,如果硬鏈接到根目錄,搜著搜著就回到了根目錄下去了。

這嚴重影響了操作系統對于文件的搜索效率!但是,操作系統對上級目錄和當前目錄進行硬鏈接,不也是形成路徑環嗎?
這不用擔心,這兩個硬鏈接文件名字非常特殊,判斷后做特殊處理即可。

操作系統選擇硬鏈接當前路徑和上級路徑,其實是為了用戶能夠操作起來更加方便!

總結

至此,到這里我們就把Ext2文件系統的絕大部分相關知識介紹完了。當然,Linux系統下還存在著多個文件系統,如Ex3,Ext4,xfs…
但是,對于Ext系列的文件系統來說,主要邏輯還是相通的,只是在個別地方的操作會有進行優化。其它的文件系統如果感興趣也可以上網查閱資料。

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

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

相關文章

Java SE:類與對象的認識

Java中的類與對象&#xff1a;構建程序世界的基石 在Java編程的世界里&#xff0c;類與對象是面向對象編程&#xff08;OOP&#xff09;的核心概念&#xff0c;它們就像構建大廈的磚瓦&#xff0c;支撐起整個程序的結構。理解類與對象&#xff0c;是掌握Java編程的關鍵一步。 類…

Hexo - 免費搭建個人博客03 - 將個人博客托管到github,個人博客公開給大家訪問

導言我的博客&#xff1a;https://q164129345.github.io/ 既然要將個人博客托管到github&#xff0c;首先我們肯定要有一個github賬戶。另外也需要在電腦上安裝另外一個著名的代碼管理工具git。 一、創建github倉庫二、在Hexo設置部署的內容# Deployment## Docs: https://hexo.…

一次Oracle集群腦裂問題分析處理

問題描述 填寫問題的基礎信息。 系統名稱 數據庫集群 IP地址 xxxxxx 操作系統 Linux 數據庫 Oracle 11.2.0.4 癥狀表現 問題的癥狀表現如下 4月26號晚22點02分左右&#xff0c;HIS集群發生腦裂&#xff0c;十幾分鐘后&#xff08;22.18&#xff09;一節點集群率先獲…

0基礎法考隨手筆記 02(刑訴法專題04 辯護與代理)

0基礎法考隨手筆記 02&#xff08;刑訴法專題04 辯護與代理&#xff09; 1.值班律師相關權力義務2. 3. 4.什么是強制醫療 注意&#xff1a;為強制醫療指派的律師&#xff0c;是訴訟代理人&#xff0c;不是辯護人&#xff0c;因為此人不會被追究刑事責任。 “強制醫療” 是刑事訴…

HF86611_VC1/HF86611Q_VC1:多通道USB HiFi音頻解碼器固件技術解析

引言隨著音頻技術的不斷發展&#xff0c;多通道音頻處理和多接口兼容性成為現代音頻設備的重要需求。本文將介紹一款基于XMOS XU316技術的多通道USB HiFi音頻解碼器固件——HF86611_VC1/HF86611Q_VC1&#xff0c;這是一款專為多接口HiFi音頻應用設計的軟件解決方案。產品概述HF…

python---列表(List)

文章目錄創建列表基本操作訪問元素&#xff08;索引&#xff09;切片操作修改列表常用方法列表推導式多維列表列表是 Python 中最基本、最常用的數據結構之一&#xff0c;它是一個有序的可變集合&#xff0c;可以包含不同類型的元素。創建列表 # 空列表 empty_list [] empty_…

ESP32-S3學習筆記<3>:UART的應用

ESP32-S3學習筆記&#xff1c;3&#xff1e;&#xff1a;UART的應用1. 頭文件包含2. UART的配置2.1 uart_num的選擇2.2 uart_config的設定2.2.1 baud_rate/波特率設置2.2.2 data_bits/數據位數設置2.2.3 parity/奇偶校驗位設置2.2.4 stop_bits/停止位設置2.2.5 flow_ctrl/流控位…

【Vue3】加載高德地圖案例

官方API:展示地圖-入門教程-地圖 JS API 2.0 | 高德地圖API 1、獲取高德Key 參考&#xff1a;準備-地圖 JS API 2.0 | 高德地圖API 2、創建工程 npm create vitelatest 3、下載依賴集運行項目 npm install npm i amap/amap-jsapi-loader --save npm run dev 4、編寫核心…

【工具】Pycharm隱藏側邊燈泡提示

問題描述 在Pycharm中&#xff0c;每行前面很容易出現一個小燈泡&#xff0c;有時候很影響操作&#xff0c;需要將其取消掉設置方法打開設置 按 CtrlAltS 打開設置對話框或者通過菜單 File → Settings&#xff08;在 macOS 上是 PyCharm → Preferences&#xff09;導航到外觀…

XSS相關理解

由于本人對一小部分dom型xss、原型鏈污染和存儲型xss理解不夠透徹&#xff0c;因此在本篇文章中原型鏈污染和存儲型xss偏重進行概念理解或簡單的代碼理解&#xff0c;隨后會慢慢補充 文章目錄1 XSS概述1.1 什么是XSS&#xff1f;1.2 XSS主要分三種類型2 XSS基礎2.1 XSS基礎練習…

Odoo:免費開源的金屬制品行業ERP管理軟件

引言開源智造Odoo數字化解決方案專家團隊意識到&#xff0c;在當今全球市場中&#xff0c;將盈利能力和競爭力最大化的機會促使許多金屬制品制造商投資于推進業務發展的新技術。金屬制品會計軟件是企業用來處理他們業務和增加利潤的解決方案。某金屬制品加工工藝流程圖&#xf…

Ubuntu22.04配置GTest測試框架

前言 鴻蒙系統的代碼倉庫使用GTest作為單元測試的工具。特性開發時&#xff0c;需要寫demo以驗證開發思路。因此有必要搭建GTest開發環境配合鴻蒙特性開發做開發demo。 我測試環境是wsl2 Ubuntu22.04 LTS。 搭建過程 安裝必備C組件 sudo apt install -y unzip g gcc cmake …

學習日志15 python

1 filter() 函數filter(function, iterable)filter函數是python中的高階函數, 第一個參數是一個篩選函數, 第二個參數是一個可迭代對象, 返回的是一個生成器類型, 可以通過next獲取值。filter() 函數是 Python 內置的高階函數&#xff0c;其主要功能是對可迭代對象中的每個元素…

Linux 環境下安裝 MySQL 8.0.34 二進制 詳細教程 附docker+k8s啟動

文章目錄Linux 環境下安裝 MySQL 8.0&#xff08;二進制&#xff09;詳細教程準備工作安裝依賴包下載并解壓 MySQL下載 MySQL 二進制包解壓 MySQL移動目錄并創建 MySQL 用戶配置 MySQL配置數據目錄與日志目錄編輯配置文件 /etc/my.cnf初始化 MySQL 數據庫配置啟動腳本與環境變量…

HTML ISO-8859-1: 完全解析

HTML ISO-8859-1: 完全解析 引言 ISO-8859-1,又稱為 Latin-1,是一種廣泛使用的字符編碼標準,特別是在HTML文檔中。本文將詳細介紹ISO-8859-1編碼的特點、應用場景以及如何在使用HTML時正確地使用ISO-8859-1編碼。 ISO-8859-1編碼概述 定義 ISO-8859-1編碼是一種單字節編…

c++學習第3篇編輯器——centos7.9.2009系統離線安裝clion軟件并成功調試c++程序

遠程linux服務器安裝clion0 前提2個&#xff1a;1 下載CLion-2021.1.1.tar.gz安裝包2 上傳到linux系統并解壓3 修改linux系統里的/etc/ssh/sshd_config文件中的X11UseLocalhost 注釋去掉并設為no4 安裝xauth5 安裝MobaXterm軟件并使用ssh組件打開clion5.1 如果打不開clion,報錯…

20250722解決在Ubuntu 24.04.2下編譯RD-RK3588開發板的Android13出現找不到lz4的問題

20250722解決在Ubuntu 24.04.2下編譯RD-RK3588開發板的Android13出現找不到lz4的問題 2025/7/22 15:21緣起&#xff1a;在Ubuntu 24.04.2下編譯RD-RK3588開發板的Android13。 報錯&#xff1a;/bin/sh: 1: lz4: not found為了簡單起見&#xff0c;直接在 榮品的技術支持QQ群的 …

加載用戶設置時遇到錯誤找到一個帶有無效“icon“的配置文件。將該配置文件默認為無圖標。確保設置“icon“時,該值是圖像的有效文件路徑“

"C:\Users\Yourname\AppData\Local\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json 修改所有icon字段位none 如&#xff1a;{"guid": "{bf61c995-08cc-4a56-b781-5dba411ef19c}","hidden": false,"icon&…

如何提升連帶消費?從新零售“人-貨-場”模型拆解

目錄 一、分析背景 二、新零售分析思路和分析方法 1.具體分析思路 2.分析方法 三、新零售“人-貨-場”分析的實操步驟 1.數據收集 2.數據處理 3.圖表制作 四、總結 想讓線上引來的顧客&#xff0c;在店里多買幾件&#xff1f; 連帶消費可是實體店賺錢的“秘密武器”&a…

Java異常處理核心原理與最佳實踐

Java異常處理核心原理與最佳實踐 場景&#xff1a; 你開發的文件處理工具在讀取用戶上傳的文件時突然崩潰&#xff0c;控制臺拋出FileNotFoundException。用戶的操作被中斷&#xff0c;數據丟失。這種糟糕的體驗正是異常處理機制要解決的核心問題——如何在程序出錯時優雅地恢復…