C语言笔记-16-Linux基础-文件元数据
创始人
2024-03-16 02:09:06
0

C语言笔记-16-Linux基础-文件元数据


文章目录

  • C语言笔记-16-Linux基础-文件元数据
  • 前言
  • 一、概述
  • 二、ln 硬连接
  • 三、软连接
  • 四、stat 获取元数据
  • 总结


前言

自学笔记,没有历史知识铺垫(省略百度部分)C语言笔记-16-Linux基础-文件元数据


一、概述

文件由meta+data组成inode结构体,meta中存储文件大小、文件描述、链接引用计数 等信息。
每个文件都有唯一的inode节点,但是一个inode节点可以映射多个文件。
ls -li ls -i 查看文件元数据.

在这里插入图片描述

硬连接和软连接区别

硬连接

  1. 同一个inode号指定多个文件名方式
  2. 不占用新的inode
  3. 不占用任何新的空间
  4. 对数据文件备份 防止误删除
  5. 不可以跨文件系统创建(即不能跨分区),如ln /boot/data/data.txt /home/data/data.txt 会报错
  6. 任意删除一个文件名,文件都不会损坏

软连接

  1. 快捷方式
  2. 占用新的inode号
  3. 占用少量的磁盘空间
  4. 可以跨文件系统创建
  5. 删除源文件后,软链接文件无效
dony15$ ls -li
total 77328
#inode节点编号85273125 drwxr-xr-x   3 dony15  staff        96  5 13  2022 chiner99694886 drwxr-xr-x  66 dony15  staff      2112 12  2 09:04 csp99695194 drwxr-xr-x  16 dony15  staff       512 12  2 08:51 metrics69131869 drwxr-x--x   5 dony15  staff       160 11  1  2021 nacos
103071428 -rw-r--rwx   1 dony15  staff  39588967 11 29 09:08 ons.log

二、ln 硬连接

ln 源文件 新文件 硬链接,inode节点编码相同,两个文件实际上指向的同一个inode节点
ln source.txt target.txt

inode

dony15$ ln ons.log ons_bakdony15$ ls -li
103071428 -rw-r--rwx   2 dony15  staff  39588967 11 29 09:08 ons.log
103071428 -rw-r--rwx   2 dony15  staff  39588967 11 29 09:08 ons_bak

三、软连接

ln -s 源文件 新文件 软链接
ln -s source.txt target.txt
快捷方式的方案
file3实际上存储file2的引用,file2指向真实的源inode
当file2删除,file3将无效

软连接

# 建立软链接
dony15$ ln -s ons_bak ons_bak2
dony15$ ls -li
103071428 -rw-r--rwx   2 dony15  staff  39588967 11 29 09:08 ons.log
103071428 -rw-r--rwx   2 dony15  staff  39588967 11 29 09:08 ons_bak
103610945 lrwxr-xr-x   1 dony15  staff         7 12  2 22:24 ons_bak2 -> ons_bak
# 删除软连接源文件
dony15$ rm -rf ons_bak
dony15$ ls -li
103071428 -rw-r--rwx   1 dony15  staff  39588967 11 29 09:08 ons.log
103610945 lrwxr-xr-x   1 dony15  staff         7 12  2 22:24 ons_bak2 -> ons_bak
# 软链接源文件删除后,目标文件将失效
dony15$ cat ons_bak2 
cat: ons_bak2: No such file or directory# 重新创建ons_bak文件,ons_bak2将重新生效,并依旧软连接ons_bak,但是ons_bak与ons.log将再无关系
dony15$ echo "testABC">ons_bak
dony15$ cat ons_bak2
testABCdony15$ ls -li
103071428 -rw-r--rwx   1 dony15  staff  39588967 11 29 09:08 ons.log
103611180 -rw-r--r--   1 dony15  staff         8 12  2 22:29 ons_bak
103610945 lrwxr-xr-x   1 dony15  staff         7 12  2 22:24 ons_bak2 -> ons_bak

四、stat 获取元数据

int stat(const char *pathname,struct stat *buf)

#include 
#include 
#include 
#include int main(int argc, char *argv[])
{struct stat sbuf;int r = stat(argv[1], &sbuf);if (r == -1){perror("查看失败");return -1;}printf("inode: %llu \n", sbuf.st_ino);printf("inode nlink: %u \n", sbuf.st_nlink);return 0;
}
dony15$ ./ac.out test
inode: 103603039 
inode nlink: 1 dony15$ ls -li
103603039 -rw-r--r--  1 dony15  staff     12 12  2 20:54 test

总结

本章主要为C语言笔记-16-Linux基础-文件元数据

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
【Ctfer训练计划】——(三... 作者名:Demo不是emo  主页面链接:主页传送门 创作初心ÿ...