【I/O】文件I/O_01文件类型

继续基础知识学习.

Linux号称一切皆文件。那它是如何把不同文件系统,设备驱动,网络连接这些信息统统用文件表示,好奇+1.

1.linux系统结构

(1)unix系统的核心组成

内核、shell、文件系统和应用程序

内核:负责管理系统的进程、内存、设备驱动程序、文件和网络系统(内核空间)

shell:系统的用户界面,提供了用户与内核进行交互操作的一种接口

文件系统: linux操作系统将独立的文件系统组合成了一个层次化的树形结构,通过"挂载"把新的文件系统给挂装到某个目录上,这棵树就叫虚拟文件系统(VFS)

应用程序:用户应用程序(用户空间)

 

2.一切皆文件

Linux 中一切都可以看作文件,包括普通文件、链接文件、Socket 以及设备驱动等,对其进行相关操作时,都可能会创建对应的文件描述符(FD)。

(1)文件类型

1)普通文件

#cd /root

#ls  #r开头 ,普通文件

2)目录,字符设备文件

#cd /dev

#ls  #c开头,字符设备

 

不同标识对应不同文件类型

3)连接文件(硬连接,软连接)

硬连接

#vim rongshu.txt (随便写一个文件)

#ln /root/rongshu.txt /root/rongshu2.txt

#ls

#stat rongshu.txt

#stat rongshu2.txt

 

rongshu.txt和rongshu2.txt的Inode号一样,表示硬连接,磁盘实际上就1个文件,有2个变量都是指向这个文件

修改和删除会发生什么?

#vim rongshu.txt

修改会同步修改

#rm -f rongshu.txt

 

删除实际上是删除引用,数量会有表示

软连接

#ln -s rongshu2.txt /root/rongshu3.txt

#stat rongshu2.txt

#stat rongshu3.txt

 

Inode号不同,实际上是两个文件(类似创建一个快捷方式)

修改和删除会发生什么?

vim rongshu2.txt

rm -f rongshu2.txt

 

修改任意一个,文件都会同步修改

删除rongshu2.txt ,rongshu3.txt的指向会丢失,会报错

这就是软硬连接区别

(2)模拟创建一个文件系统

 1)创建一个磁盘文件

#mkdir rongshu

#dd if =/dev/zero of=mydisk.img bs=1048576 count=100 ,创建一个100M的空文件

#ll -h

#losetup /dev/loop0 mydisk.img ,把文件mydisk.img挂载到目录:dev/loop0

#mke2fs /dev/loop0 ,格式化文件

 

2)把/dev/loop0像 dev/ada1一样挂到一个虚拟目录

找一个挂载目录,如:/mnt/rongshufs

#cd /mnt

#mkdir rongshufs

#mount -t ext2 /dev/loop0 /mnt/rongshufs

#df -h

 

这里访问/mnt/rongshufs实际上是访问我的mydist.img

3)创建bash启动的库文件

#whereis bash

#pwd

#mkdir bin

#ll

#cp /bin/bash bin

#ll

#cd bin

#pwd

#ll

#ldd bash ,bash启动需要的库文件

 

 4)模拟一个文件系统,拷贝bash需要的库文件

#cd ..

#mkdir lib64

#ll

#pwd

#cp /lib64/{libtinfo.so.5,libdl.so.2,libc.so.6,ld-linux-x86-64.so.2} ./lib64/

#ll

 

 5)切换系统,操作命令

#cd ..

#ll

#chroot ./   切换系统

#echo $$    查看当前系统

#vi

#cat

#exit

#ll

 

这里可以看到,我的rongshufs文件系统,实际上也是保存在文件mydisk.img中的

 6)小结

 

 

7)延伸docker

docker第一步就是要创建镜像文件img。

img里面放的是程序。docker有一个容器概念(容器是虚幻的,它是一个命名空间,里面跑的是进程,它没有操作系统内核,都是复用物理机的那个统一内核)

先有镜像-产生容器概念-镜像在磁盘就是img文件-必须先挂载-再重img里面放的根目录读取执行文件-再准备命名空间-然后进程再跑到这个空间里面

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值