07、Linux 文件管理

一、linux 的文件存储

假如有一个用户在 linux 系统中编辑了一个文件,编辑完内容后,关闭编辑器时会问用户如何命名这个文件,设置完名称之后会选择一个目录将该文件保存到指定目录下,在这个例子中包含了 linux 系统中与文件相关的三个组成部分

  • 数据:就是文件的内容,保存在一个叫 data(数据块)的结构中
  • 元数据:保存一个文件的特征的系统数据 ,用来保存除了文件内容和文件名以外的与文件相关的信息, 诸如文件的创建者,日期,大小等等,保存在一个叫 inode(i节点)的结构中。
  • 文件名:用来保存文件名称,文件名保存在一个叫 dentry(目录项)的结构中。

二、inode 节点介绍

通过前面的课程我们知道,inode 是用来保存文件的元数据的,除此之外还保存文件相关属性信息,如链接数等。我们通过类似 stat hello.txt 这条命令查看指定文件的 inode 信息。

三、链接文件介绍

Linux 中如果用户想把同一个文件保存在两个地方,或用两个不同的文件名保存,除了复制之外还有另外一种选择,就是链接,在 linux 系统中链接分为硬链接,软链接,空链接,递归链接

3.1、链接命令: ln

语法: ln 源文件路径 链接位置路径
常用命令选项:

  • -s 创建软连接
  • -f 强制执行
  • -i 交互模式,文件存在则提示用户是否覆盖
  • -n 把符号链接视为一般目录,显示为一般文件
  • -v 显示详细的处理过程

硬链接:允许一个文件拥有多个有效路径名,这样用户就可以建立硬链接到重要的文件,以防止"误删"源数据,不过硬链接只能在 同一文件系统 中的文件(不能是目录)之间进行连接
软链接 : 也叫符号链接,类似于 windows 系统中的快捷方式,与硬链接不同,软链接就是一个普通文件,软链接可对文件或目录创建。
用一句话来将这两种链接进行总结:

  • 硬链接不能链目录,不能跨文件系统,软链接可以;
  • 源文件删除后软链接失效,硬链接依然可用;

3.2、软链接

bash 复制代码
[root@long90 workdir]# vim hello
# 为 /root/workdir/hello 文件创建一个软链接文件在 /root 目录下
[root@long90 workdir]# ln -s /root/workdir/hello /root/
[root@long90 workdir]# ls -l /root/hello
lrwxrwxrwx 1 root root 19 11月 24 11:01 /root/hello -> /root/workdir/hello
# 显示简单的 inode 信息,链接文件比源文件 的 inode 要大。
[root@long90 workdir]# ls -i /root/workdir/hello /root/hello
33578015 /root/hello   3074943 /root/workdir/hello
# 删除 软链接的源文件,软链接文件失效
[root@long90 workdir]# rm -f /root/workdir/hello
[root@long90 workdir]# cat /root/hello
cat: /root/hello: 没有那个文件或目录

3.3、硬链接

bash 复制代码
[root@long90 workdir]# vim text_ln
[root@long90 workdir]# ln /root/workdir/text_ln /root/
# 硬链接文件与源文件 的 inode 相同大小
[root@long90 workdir]# ls -i /root/workdir/text_ln /root/text_ln
3074943 /root/text_ln  3074943 /root/workdir/text_ln
# 删除 源文件,硬链接不失效。
[root@long90 workdir]# rm /root/workdir/text_ln
rm:是否删除普通文件 '/root/workdir/text_ln'?y
[root@long90 workdir]# cat /root/text_ln
hello 硬链接

3.4、空链接

所谓的空链接就是软链接指向的源文件不存在了,包括源文件被删除,改名。

3.5、递归链接

递归链接不如空链接常见,如果想看的话几乎需要专门寻找,如果用户创建两个软链接,linka与linkb关联,而linkb又与linka关联,这时候就会出现递归链接,比如

3.6、绝对软链接和相对软链接

主要指的是用户在创建软链接的时候使用的是绝对路径还是相对路径来指定链接目标,如果链接创建完成之后不会移动,那么这两种方法可以随意使用,但是如果链接文件需要被移动,那么建议还是使用绝对路径,比如

bash 复制代码
[root@long90 workdir]# touch linka
[root@long90 workdir]# echo 'hello link' > link
[root@long90 workdir]# rm linka
rm:是否删除普通空文件 'linka'?y
[root@long90 workdir]# cat link
hello link
[root@long90 workdir]# ln -s /root/workdir/link linka
[root@long90 workdir]# ln -s ../workdir/link linkb
[root@long90 workdir]# mv linka linkb /root/
[root@long90 workdir]# ll /root/linka /root/linkb
lrwxrwxrwx 1 root root 18 11月 24 11:27 /root/linka -> /root/workdir/link
lrwxrwxrwx 1 root root 15 11月 24 11:28 /root/linkb -> ../workdir/link
[root@long90 workdir]# cat /root/linka
hello link
[root@long90 workdir]# cat /root/linkb
cat: /root/linkb: 没有那个文件或目录

四、时间戳

时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒) 起至现在的总毫秒数。通俗的讲, 时间戳是一份能够表示一份数据在一个特定时间点已经存在的完整的可验证的数据。 它的提出主要是为用户提供一份电子证据, 以证明用户的某些数据的产生时间。 当我们使用 stat 命令查看文件的时候除了创建时间你会发现有三个跟时间戳相关的信息

|-------|------|---------------------|
| 缩写 | 命令 | 目的 |
| Atime | 访问时间 | 文件数据每次被阅读后的更新 |
| Ctime | 改变时间 | 文件的 i-节点信息每次被改变后都更新 |
| Mtime | 修改时间 | 文件数据每次被改变后的更新 |

bash 复制代码
[root@long90 workdir]# stat /root/anaconda-ks.cfg
  文件:/root/anaconda-ks.cfg
  大小:1471          块:8          IO 块:4096   普通文件
设备:fd00h/64768d    Inode:33575044    硬链接:1
权限:(0600/-rw-------)  Uid:(    0/    root)   Gid:(    0/    root)
最近访问:2022-11-23 00:58:07.401862269 +0800   # Atime
最近更改:2022-11-23 00:48:00.304978839 +0800   # Mtime
最近改动:2022-11-23 00:48:00.304978839 +0800   # Ctime
创建时间:2022-11-23 00:48:00.195982761 +0800
相关推荐
24zhgjx-fuhao3 小时前
基于时间的ACL
运维·网络
Raymond运维3 小时前
MySQL包安装 -- RHEL系列(离线RPM包安装MySQL)
linux·运维·数据库·mysql
-dcr3 小时前
24.grep 使用手册
linux·运维开发·grep
心灵宝贝3 小时前
libopenssl1_0_0-1.0.2p-3.49.1.x86_64安装教程(RPM包手动安装步骤+依赖解决附安装包下载)
linux·运维·服务器
tryCbest3 小时前
Windows和Linux设置Https(SSL)访问
linux·windows·https
数据知道4 小时前
Go语言:数据压缩与解压详解
服务器·开发语言·网络·后端·golang·go语言
btyzadt4 小时前
Ubuntu中安装Nuclei教程
linux·运维·ubuntu
养生技术人4 小时前
Oracle OCP认证考试题目详解082系列第45题
运维·数据库·sql·oracle·开闭原则·ocp
致宏Rex4 小时前
Docker 完整教程(3,4) | 网络与挂载
运维·docker·容器