创建链接文件
Linux系统中硬盘文件存储原理
硬盘数据分类
-
用户数据(user data):即文件的数据块(data block),存储数据真实空间
-
元数据(metadata):存储文件附加属性,如:文件的大小、创建的时间、所有者等信息
硬连接
原理:
-
linux系统允许多个文件指向同一个inode,即允许一个文件拥有多个有效地路径名
-
理解:硬连接就是指向原始文件inode的指针
查看方法
-
ll 文件名
-
stat 文件名
建立硬连接
-
格式:
ln -参数 源文件 目标连接文件
-
例1:
[root@server ~]# touch m1.txt [root@server ~]# stat m1.txt 文件:m1.txt 大小:0 块:0 IO 块:4096 普通空文件 设备:fd00h/64768d Inode:16802638 硬链接:1 # 初始连接数为1 权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root) 环境:unconfined_u:object_r:admin_home_t:s0 最近访问:2022-12-13 18:30:25.883879146 +0800 最近更改:2022-12-13 18:30:25.883879146 +0800 最近改动:2022-12-13 18:30:25.883879146 +0800 创建时间:2022-12-13 18:30:25.882879146 +0800 [root@server ~]# ln m1.txt m2.txt # 建立m2.txt指向m1.txt的硬连接 [root@server ~]# stat m1.txt 文件:m1.txt 大小:0 块:0 IO 块:4096 普通空文件 设备:fd00h/64768d Inode:16802638 硬链接:2 # 连接数加1 权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root) 环境:unconfined_u:object_r:admin_home_t:s0 最近访问:2022-12-13 18:30:25.883879146 +0800 最近更改:2022-12-13 18:30:25.883879146 +0800 最近改动:2022-12-13 18:31:22.487877027 +0800 创建时间:2022-12-13 18:30:25.882879146 +0800
注意
软硬连接的区别
[root@server ~]# echo "hello" > s1 [root@server ~]# ln s1 s2 # 建立硬连接 [root@server ~]# stat s1 文件:s1 大小:6 块:8 IO 块:4096 普通文件 设备:fd00h/64768d Inode:16802662 硬链接:2 权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root) [root@server ~]# stat s2 文件:s2 大小:6 块:8 IO 块:4096 普通文件 设备:fd00h/64768d Inode:16802662 硬链接:2 # s1 s2 indoe号相同:16802662 权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root) [root@server ~]# ln -s s1 s3 [root@server ~]# stat s3 文件:s3 -> s1 大小:2 块:0 IO 块:4096 符号链接 设备:fd00h/64768d Inode:16802663 硬链接:1 # 软连接s3 inode:16802663不同
目录操作命令
创建目录(make directory)
格式:
mkdir [-p] [/路径/]目录名
参数
例:
[root@server ~]# mkdir t1 [root@server ~]# mkdir t2 t3 t4 # 批量一次性新建 [root@server ~]# mkdir -p n1/n2/n3 # 新建递归目录
du命令
选项 | 功能 |
---|---|
-a | 统计磁盘空间占用时包括所有的文件,而不仅仅只统计目录。 |
-s | 只统计每个文件所占用空间总的大小,而不是统计每个子目录、文件的大小。 |
-h | 以K,M,G为单位显示磁盘使用情况,以提高信息的可读性。 |
新建文件
创建普通文件
touch用法1:
[root@server ~]# stat /etc/hostname File: /etc/hostname Size: 22 Blocks: 8 IO Block: 4096 regular file Device: 10302h/66306d Inode: 8608116 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Context: system_u:object_r:hostname_etc_t:s0 Access: 2022-06-09 11:19:35.484027446 +0800 Modify: 2022-04-16 14:46:36.153011877 +0800 Change: 2022-04-16 14:46:36.153011877 +0800 [root@server ~]# stat /etc/hostname 文件:/etc/hostname 大小:7 块:8 IO 块:4096 普通文件 设备:fd00h/64768d Inode:17805263 硬链接:1 权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root) 最近访问:2023-04-23 10:01:42.285018639 +0800 最近更改:2023-03-22 11:20:57.098407291 +0800 最近改动:2023-03-22 11:20:57.098407291 +0800 创建时间:2023-03-22 11:20:57.097407349 +0800 # 分析 # atime,即access time,访问文件的时间,查看了一下文件内容(cat),文件的atime时间会更新 # mtime,即modify time,修改内容的时间,文件内容被改变了,ctime会更新 # ctime,即change time,修改文件元数据的时间
[root@server ~]# touch /etc/hostname [root@server ~]# date 2023年 04月 24日 星期一 09:37:38 CST [root@server ~]# stat /etc/hostname 文件:/etc/hostname 大小:7 块:8 IO 块:4096 普通文件 设备:fd00h/64768d Inode:17805263 硬链接:1 权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root) 最近访问:2023-04-24 09:37:36.800493399 +0800 最近更改:2023-04-24 09:37:36.800493399 +0800 最近改动:2023-04-24 09:37:36.800493399 +0800 创建时间:2023-03-22 11:20:57.097407349 +0800
touch用法2
-
硬连接建立后,删除其中的一个后数据依然可以访问,只有硬连接为0时,数据旧无法访问了
-
软连接
原理:
-
软连接是一种符号连接,类似于windows的“快捷方式”,仅包含所连接的路径名
-
格式
ln -s 源文件 目标连接名
例1:
[root@server ~]# echo "china" > h1.txt # 新建文件 [root@server ~]# ln -s h1.txt h2.txt # 创建软连接,指向h2.txt [root@server ~]# ll h2.txt lrwxrwxrwx. 1 root root 6 12月 13 18:52 h2.txt -> h1.txt # 查看连接关系 [root@server ~]# stat h1.txt 文件:h1.txt 大小:6 块:8 IO 块:4096 普通文件 设备:fd00h/64768d Inode:2777696 硬链接:1 # 硬连接还是1,没有变化 权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root) 环境:unconfined_u:object_r:admin_home_t:s0
例2:建立网卡配置文件的软连接
[root@server ~]# ln -s /etc/NetworkManager/system-connections/ens160.nmconnection /root/nic [root@node4 ~]# ll /root/nic lrwxrwxrwx. 1 root root 43 12月 13 18:56 /root/nic -> /etc/sysconfig/network-scripts/ifcfg-ens160 [root@server ~]# cat nic
注意
-
软连接只是一种指向关系,删除源文件则数据不可访问
-
[root@server ~]# echo "china" > d1.txt [root@server ~]# ln -s d1.txt d2.txt [root@server ~]# ll d2.txt lrwxrwxrwx. 1 root root 6 12月 13 19:00 d2.txt -> d1.txt [root@server ~]# cat d2.txt china [root@server ~]# rm -f d1.txt [root@server ~]# cat d2.txt # 连接失效 cat: d2.txt: 没有那个文件或目录
-
可以通过ll命令查看软连接实际执行文件及位置
-
更改软连接方法:ln -snf 新文件名 软连接名
-
删除软连接,只是删除指向关系,源数据依然可以访问
-
硬连接中源文件与连接文件公用一个inode号,是同一个文件,软连接中源文件与连接文件拥有不同inode号,是2个不同的文件
-
软连接的指向关系可以查看,硬连接不可以查看
-
连接数不同,软连接数不会增加
-
文件大小不同,硬连接文件大小与源文件一样
-
软连接不受任何文件系统的影响,任何用户都可以创建指向目录的软连接
-
-p 可快速创建出目录结构中指定的每个目录,对于已存在的目录不会被覆盖
-
-v 显示创建目录的详细过程
-
作用:统计目录及文件的空间占用情况,查看某个目录中的各级子目录所占用的磁盘空间数。
-
命令格式: du 参数
-
参数:
-
如果文件已存在,更新文件的三个时间,
stat
可以查看文件的详细信息 -
如果文件不存在,则表示创建文件
删除文件
格式:
rm -参数 文件名
用法:
删除文件: rm 文件名
删除目录:rm -r 目录名
强制删除不确认:rm -f 文件名
注意
数据流和重定向
数据流
echo "字符串" echo "$量"
作用
[root@server ~]# echo "hello world"
[root@server ~]# str1="hello world" [root@server ~]# echo "$str1" hello world [root@server ~]# num=1024 [root@server ~]# echo "$num" 1024 [root@server ~]# echo $SHELL /bin/bash
将标准输出重定向到文件
[root@server ~]# echo "hello" > /root/test/file [root@server ~]# echo "world" >> /root/test/file
tee命令读取数据输出到文件
tee命令
-
删除前必须确认路径及名称
-
标准输入(standard input,简称stdin):默认情况下,标准输入指从键盘获取的输入
-
标准输出(standard output,简称stdout):默认情况下,命令执行所回传正确的信息会输出到屏幕上
-
标准错误输出(standard error output,简称stderr):默认情况下,标准错误输出可理解为命令执行失败后,所回传的错误信息会输出到屏幕上
-
不管正确或错误的数据都是默认输出到屏幕上,所以屏幕是混乱的。所以就需要用数据流重定向将这两条数据分开。数据流重定向可以将标准输出和标准错误输出分别传送到其他的文件或设备去,而分别传送所用的特殊字符如下所示:
-
标准输入(stdin):代码为0
-
标准输出(stdout):代码为1
-
标准错误输出(stderr):代码为2
-
删除文件时必须将文件名及扩展名写全
-
将标准输出重定向到文件
echo命令
-
作用:向终端设备上输出字符串或变量提取后的值
-
格式
-
-
例:
-
读取标准输入的数据,并将其内容输出到文件的同时输出到屏幕(即想把输出保存到文件中,又想在屏幕上看到内容)
-
tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时输出到文件。
格式
tee 参数 文件名
参数
-a或--append,附加到现有文件的后面,而非覆盖它
-i或--ignore-interrupts 忽略中断信号
--help 在线帮助
[root@server ~]# tee -a test1.txt # 追加 123 123 456 456 [root@server ~]# cat test1.txt aaa bbb ccc 123 456