Linux文件系统的实验

news/2025/10/12 21:46:31/文章来源:https://www.cnblogs.com/chucz/p/19137326

Linux硬、软连接

  • 硬连接:指向了同一个物理位置。建立连接之后,INODE是一样的,引用的个数增加。删掉原始的文件,只是把引用删除了。下面图片的1和2就是指物理文件被引用的个数,删除其中一个引用个数就是1了。而且stat显示的两个文件的INODE是一样的
    • ln /root/a.txt /root/ss.txt
  • 软连接:指向了同一个物理位置,建立连接之后,INODE是不一样的,引用的个数没变化。删除原始文件的时候当前的软连接就会飘红报错
    • ln -s /root/a.txt /root/ss.txt

1617444289987-701aad92-7018-452a-8219-eb437bc160ea.png

1617444152842-e2f71b7a-658b-4e08-b60d-9b6ddb90d6d3.png

实验--自建文件系统挂载到系统目录

一个命令:dd

复制文件并对原文件的内容进行转换和格式化处理

[root@localhost text]# dd if=/dev/zero of=sun.txt bs=1M count=1
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.006107 seconds, 172 MB/s[root@localhost text]# du -sh sun.txt 
1.1M    sun.txt

该命令创建了一个1M大小的文件sun.txt,其中参数解释:

  • if 代表输入文件。如果不指定if,默认就会从stdin中读取输入。
  • of 代表输出文件。如果不指定of,默认就会将stdout作为默认输出。
  • bs 代表字节为单位的块大小。
  • count 代表被复制的块数。
  • /dev/zero 是一个字符设备,会不断返回0值字节(\0)。

一个命令:losetup

让用户得以将文件 视为硬盘驱动器,光驱或软驱等设备,并挂入当作目录来使用。

使用 losetup将磁盘镜像文件虚拟成块设备,注意/dev下面放的都是设备。

losetup /dev/loop0 ~/disk02.img

一个命令:mke2fs

创建磁盘分区上的“etc2/etc3”文件系统

mke2fs  /dev/loop0

就是将这个块设备/dev/loop0格式化为这个文件系统格式

实验过程:

新建空的镜像文件,变成虚拟的块设备格式化之后挂载到硬盘上的VFS的/mnt/ooxx

# 通过自己创建磁盘镜像文件,挂载到vfs目录中,进行目录文件操作:
dd if=/dev/zero   of=~/disk02.img bs=1048576 count=100losetup /dev/loop0 ~/disk02.img
mke2fs  /dev/loop0
mkdir /mnt/ooxx
mount -t ext2 /dev/loop0 /mnt/ooxxcd /mnt/ooxx
mkdir bin lib64
whereis bash
# ldd命令 用于打印程序或者库文件所依赖的共享库列表。
ldd /bin/bash
cp /bin/bash bin
# 不能出现空白符号,拷贝bash的依赖
cp /lib64/{libtinfo.so.5,libdl.so.2,libc.so.6,ld-linux-x86-64.so.2}  lib64
chroot ./
echo "aaa" > /abc.txt
exit# 查看当前位置的文件(当前位置是自己创建的bash的根目录)
cat abc.txt

一个命令:lsof (进程 + 文件描述符 + offset)

不同进程会针对同一个文件维护一个各自的文件描述符FD以及文件指针offset

一切皆文件,文件描述符FD都可以描述他们

展示进程打开了哪些文件,列出指定进程号所打开的文件:

lsof -p $pid# 列出当前bash 进程打开的文件, $$ 就是bash进程
lsof -p $$

1617499425513-2d15c2d1-73b8-440d-8ecf-fa6523e26b2f.png

用文件描述符表示一个普通的文件

文件描述符FD:打开的文件的描述,供进程来使用,每一个bash都是一个新的进程。fd,文件描述符代表打开的文件,有inode号和seek偏移指针的概念

任何文件都0,1,2三个文件描述符FD****,表示文件的标准输入(0),标准输出(1),报错输出(2)

# 新建一个只读文件描述符8,
exec 8< a.txt# 查看当前bash进程的文件描述符
cd /proc/$$/fd
[root@localhost fd]# ll
总用量 0
lrwx------. 1 root root 64 3月  29 21:36 0 -> /dev/pts/0
lrwx------. 1 root root 64 3月  29 21:36 1 -> /dev/pts/0
lrwx------. 1 root root 64 3月  29 21:36 2 -> /dev/pts/0
lrwx------. 1 root root 64 3月  29 21:36 255 -> /dev/pts/0
lr-x------. 1 root root 64 3月  29 21:48 8 -> /root/lab/a.txt

1617500616869-906f2833-501d-4620-81a6-54d66cafb9b2.png

两个进程都可以打开这个文件,但是每一个进程各自会维护自己的指针:

# read a 来自于 8号文件描述符,回车就不读了,所以只是读取第一行
read a 0<& 8

此时查看lsof中的偏移量就是4,但是新打开一个bash之后,一个新的文件描述符指向这个文件的时候,查看对应的偏移量就是0,所以不同进程之间对于同一个文件的描述符以及偏移量是进程隔离的,二者不会互相影响。(类似于java中的迭代器)

1617500874025-9fd205e6-2106-4bf7-9249-bd6126bcfe12.png

用文件描述符表示socket

# 文件描述符8 输入输出 指向 socket 
exec  8<>  /dev/tcp/www.baidu.com/80

1617501304266-c1de31e5-088f-4361-b2fa-48411e70e4aa.png

/proc

  • 内核映射目录,内核的一些属性。
  • 系统的变量属性,进程的在这里都会在这里被映射成文件
  • 只有开机之后才存在。
  • /proc/$$ 获取和你当前交互的进程的ID号,$BASHPID 也可以获得
  • /proc/$$/fd 目录下是当前进程的所有文件描述符
    • lsof -op $$ 更加细节,查看当前进程打开文件的文件描述符的细节

重定向操作符

不是命令,而是机制

File ifile  =  new File("/ooxx.txt")
out (fd) = new outputstream(ifile)
out.write("fdsfsdf")

上面的java程序在Linux中执行的时候,out会变成一个文件描述符指向ooxx.txt文件

文件描述符FD:打开的文件的描述,供进程来使用,每一个bash都是一个新的进程。

任何文件都0,1,2三个文件描述符FD****,表示文件的标准输入(0),标准输出(1),报错输出(2)

  • 输出重定向: > ,注意写的时候左边的文件描述符不能有空格
  • 输入重定向: <
# 标准输出1指向屏幕
ls ./ 1> ./a.txt
# 将标准输入变成这个文件,标准输出指向一个文件,就不会是屏幕了
cat 0< a.txt 1> b.txt# 正常输出在a, 错误输出在b
ls ./ /deltaqin 1> a.txt 2> b.txt# 从右往左执行,正常的输出覆盖了错误输出
ls ./ /deltaqin 1> a.txt 2> a.txt# 如果重定向符号的右边是文件描述符而不是文件名需要加上 &
# 2指向了1的位置,1的位置改了,就没有
ls ./ /deltaqin 2>& 1 1> b.txt# 将错误信息和正常的信息都放到了a.txt(从右往左执行)
ls ./ /deltaqin 1> a.txt 2>& 1

head 与 tail

head -2 a.txt
tail -2 a.txt
# 查看某一行
head -8 a.txt | tail -1

一个命令:pstree

查看进程之间的父子关系

1617502539345-bf0e72d9-ed4d-4971-8a21-77afa71fbb26.png

1617502702767-c9f7ba34-2641-4cdf-bdbb-778b07c5ba15.png

环境变量 export

将变量设置为环境变量,而不是只对当前进程有效,创建了子进程就不能用了

使用export就可以让子进程也可以获得这个变量的值

管道 |

1617503339056-5f1fe2cc-0de4-4f44-8b9b-775a539df840.png

使用lsof查看详细的文件描述符信息

1617503447055-4e580aab-cc16-457e-93b3-fba9e32d5b90.png

# 左边一个子进程,右边一个子进程,如果父进程有一个变量a,是不会被改变的
{ a=9; echo="deltaqin";} | cat# 先看到 $$ ,后看到管道,输出父进程的pid
echo $$  |  cat# 先看到管道,后看到BASHPID,输出子进程的pid
echo $BASHPID |  cat# 当前bash父进程会生出两个子进程,
{ echo $BASHPID ;  read x;  }  |  { cat ; echo $BASHPID ;  read y; }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/935721.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity 虚拟仿真实验中设计模式的利用 —— 观察者模式(Observer Pattern)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

软中断softirq的CPU使用率升高

中断是系统用来响应硬件设备请求的一种机制,它会打断进程的正常调度和执行,然后调用内核中的中断处理程序来响应设备的请求。中断其实是一种异步的事件处理机制,可以提高系统的并发处理能 力。 由于中断处理程序会打…

CPU多进程切换导致过载-CPU上下文切换

Linux 支持远大于 CPU 数量的任务同时运行。系统在很短的时间内,将 CPU 轮流分配给它们,造成多任务同时运行的错觉。过多的上下文切换,会把 CPU 时间消耗在寄存器、内核栈以及虚拟内存等数据的保存和恢复上,从而缩…

Vue3 之pinia状态管理

一、文档 https://pinia.vuejs.org/zh/introduction.html 二、简单使用 main.jsimport { createApp } from vue import ./style.css import App from ./App.vue import router from ./router import { createPinia } f…

乐理 -01识谱

资料来源 B站up主 三分钟音乐社识谱音名音调 1=C1=D1=E1=F1=G1=A1=B黑键半音&全音 表示音调间的距离唱名规则 全全半全全全半1=C1=D

shader func

1、step:float step(float edge, float x) vec2 step(vec2 edge, vec2 x) vec3 step(vec3 edge, vec3 x) vec4 step(vec4 edge, vec4 x)GLSL 的 step 函数用于比较两个参数的大小,当第一个参数小于第二个参数时返回 …

案例分析-DDOS攻击、网络延迟(延迟确认纳格算法)、NAT延迟

DDoS 攻击 DDoS 的前身是 DoS(Denail of Service),即拒绝服务攻击,指利用大量的合理请求, 来占用过多的目标资源,从而使目标服务无法响应正常请求。 DDoS(Distributed Denial of Service) 则是在 DoS 的基础上…

服务器丢包分析-iptables规则-MTU大小设置错误-perf-火焰图分析处理请求时内核线程调用

服务器丢包分析--iptables规则以及MTU大小设置错误 容器利用 Linux 内核提供的命名空间技术,将不同应用程序的运行隔离起来,并用统一的 镜像,来管理应用程序的依赖环境。这为应用程序的管理和维护,带来了极大的便捷…

2025 年碟式离心机厂家 TOP 企业品牌推荐排行榜,DB640 系列 / DB330 系列 / DB440 系列 / DB460 系列 / DB550 系列 / 专业碟式离心机推荐这十家公司!

在当前工业生产领域,碟式离心机作为实现物料高效分离的关键设备,其性能与品质直接影响着食品、饮料、化工、制药等众多行业的生产效率与产品质量。然而,随着市场需求的不断增长,碟式离心机制造厂家数量逐渐增多,市…

增加客户粘性

增加客户粘性类别参数官方默认值推荐「陷阱值」慢性症状/客户感知使用举例(如何设陷阱)解除方法(救场操作)Worker workers CPU2+1 1 长请求 502,报表卡死 odoo.conf 写 workers = 1,重启 改回 workers = (CPU*2)…

luogu P4513 小白逛公园

题目大意 需要一种数据结构,支持以下两种操作:单点修改 区间求最大连续子段和Sol 很容易想到线段树 首先我们要维护一个区间和\(sum\) 但是只用\(sum\)不能维护区间最大连续子段和 发现最大连续子段和可以从以下几种方…

20231408徐钰涵课程思维导图Openssl实践

20231408徐钰涵课程思维导图Openssl实践 Ubuntu系统实践过程openssl versionopenssl version -helpopenssl list -helpopenssl -help

案例分析-DNS+tcpdump+wireshark

网络优化,实际上包含了整 个网络协议栈的所有层的优化。 DNS解析速度不稳定DNS(Domain Name System) 域名系统,提供 域名和 IP 地址之间映射关系的查询服务。动态服务发现和全局 负载均衡(Global Server Load Bal…

2025 年卧式离心机厂家 TOP 企业品牌推荐排行榜,LW250/LW350/LW450/LW530/LW540 / 专业卧式离心机推荐这十家公司!

在当前工业生产领域,卧式离心机作为关键的分离设备,广泛应用于食品、饮料、化工、制药、环保等众多行业。然而,行业发展却面临着诸多问题,一方面,市场上卧式离心机品牌数量众多,产品质量参差不齐,部分品牌缺乏核…

2025 年水泥管厂家最新推荐排行榜,国标水泥管,二级水泥管,钢筋混凝土水泥管,大口径水泥管,平口水泥管公司推荐!

在基础设施建设持续推进的当下,水泥管作为排水、输水等工程的核心建材,其质量与供应稳定性直接影响项目进度与长期使用效果。然而当前行业中,部分源头厂家存在产品规格不达标、施工服务脱节、售后保障缺失等问题,比…

Day1 经典Holle word

//导入一个文件,stdio.h std是一个标准库 i是input o是output即标准输入输出库 //h是头文件,但stdio之后可导入的不止头文件 //<>在这里的作用是导入系统文件,""则用来导入自定义文件 #include&l…

内存知识总结

虚拟内存与多级页表 对普通进程来说,能看到的其实是内核提供的虚拟内存,这些虚拟内存还需要通过页表,由系统映射为物理内存。 当进程通过 malloc() 申请虚拟内存后,系统并不会立即为其分配物理内存,而是在首次访 …

2025 年金属复合板厂家推荐广东粤洋建材科技有限公司,实力产能与定制服务全景解析金属复合板公司推荐

2025 年铝蜂窝行业正迎来结构性增长机遇,市场规模预计达 110 亿元,年均复合增长率保持 8.5%,绿色建筑政策与轻量化需求成为核心驱动力。随着《建筑装饰用蜂窝铝板》新国标实施,防火等级与环保标准持续升级,倒逼行…

2025 年铝蜂窝板厂家最新推荐排行榜,铝蜂窝板,铝蜂窝吊顶,铝蜂窝墙面板,微孔吸音板,防火A级铝复合板公司推荐

随着建筑装饰行业对轻质高强材料的需求升级,铝蜂窝板凭借优异的物理性能与美学适配性,在幕墙、公共空间、交通设施等领域的应用日益广泛。但当前市场存在明显痛点:部分厂家产能不足导致订单交付延迟,产品适配场景单…

读书笔记:关于Oracle里的“老古董”:LONG类型

我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢! 由于博客中有大量代码,通过页面浏览效果更佳。本文为个人学…