从内核视角将文件分成七种类型:
大家普遍理解的文件属于此类,(如:图片,视频,mp3,ppt,zip == ),这类文件也叫正则文件,当然是无处不在.
turing@ubuntu:/home/tools$ ls -hil
total 12M
1083954 -rwxrwxr-x 1 turing turing 2.3M Feb 18 18:55 gn
1083803 -rw-r--r-- 1 root root 9.4M Nov 25 2020 hapsigntoolv2.jar
1083802 -rw-r--r-- 1 root root 58K Nov 25 2020 hmos_app_packing_tool.jar
turing@ubuntu:/home/openharmony/code-v1.1.1-LTS$ ls -lhi
total 68K
1202976 drwxr-xr-x 3 turing turing 4.0K Jun 21 02:38 applications
1173738 drwxr-xr-x 10 turing turing 4.0K Jun 21 02:38 base
1106153 drwxr-xr-x 3 turing turing 4.0K Jun 21 02:38 build
turing@ubuntu:/dev$ ls -lhi
total 0
210 brwxr-xr-x 2 root root 420 Jul 23 18:59 block
337 brwxr-xr-x 2 root root 80 Jul 23 18:05 bsg
字符设备文件:即串行端口的接口设备,例如键盘、鼠标等等。通常在 /dev目录下能看到它
turing@ubuntu:/dev$ ls -lhi
total 0
124 crw------- 1 root root 10, 175 Jul 23 18:05 agpgart
373 crw-r--r-- 1 root root 10, 235 Jul 23 18:05 autofs
这类文件通常用在网络数据连接。可以启动一个程序来监听客户端的要求,客户端就可以通过套接字来进行数据通信,最常在 /var/run目录中看到这种文件类型。
turing@ubuntu:/var/run$ ls -lhi
690 srw-rw-rw- 1 root root 0 Jul 23 18:05 snapd-snap.socket
689 srw-rw-rw- 1 root root 0 Jul 23 18:05 snapd.socket
管道文件主要用于进程间通讯。比如使用mkfifo命令可以创建一个FIFO文件,启用一个进程A从FIFO文件里读数据,启动进程B往FIFO里写数据,先进先出,随写随读。
turing@ubuntu:/var/run$ ls -lhi
690 srw-rw-rw- 1 root root 0 Jul 23 18:05 snapd-snap.socket
689 srw-rw-rw- 1 root root 0 Jul 23 18:05 snapd.socket
这里说的链接指的是软链接,类似Windows下面的快捷方式。,这类文件非常多,尤其 /bin,/usr/bin目录下最多.
turing@ubuntu:/bin$ ls -lhi
143828 lrwxrwxrwx 1 root root 29 Jul 14 21:51 rmiregistry -> /etc/alternatives/rmiregistry
132128 lrwxrwxrwx 1 root root 4 Jul 14 19:10 rnano -> nano
132131 lrwxrwxrwx 1 root root 29 Jul 14 19:10 rrsync -> ../share/rsync/scripts/rrsync
132132 lrwxrwxrwx 1 root root 21 Jul 14 19:10 rsh -> /etc/alternatives/rsh
文件属性,简单的说,有这么几种
1173738 drwxr-xr-- 10 turing turing 4.0K Jun 21 02:38 base
[ 0 ] [ 1 ] [ 2 ] [ 3 ][ 4 ] [ 5 ] [ 6 ] [ 7 ]
[vnode编号] [ 权限 ] [硬链接][拥有者][群组] [文件容量] [ 修改日期 ] [ 文件名]
vnode编号 vnode是文件系统非常重要的一个概念,后续有专门的篇幅结合源码详细说明,每个文件都有唯一的一个编号,跟身份证号一样,全国有100万人叫李伟,大家沟通都是叫李伟,不会喊身份证,并不影响沟通,但到了公安局就只认身份证,只要敢犯罪保准一逮一个准.所以视角不同,关注的点是不一样的。文件管理的机制是一模一样的,普通用户只需记住高清大片放在C:\xx\xx\xx\xx\xxx\xxx\xx.avi下就可以了,不管埋的多深都能翻出来。根本不需要知道vnode.id是多少。但到了内核层面,它操作的都是vnode.id
权限 对于多用户多群组的系统,就必须有权限来加持文件操作,该栏可以分成以下4个小组
d, rwx, r-x, r-x
r=100=4, w=010=2, x=001=1, -=0
rwxr-xr-- 可表示为
111101100 = 754
chmod -R xxx 文件或目录 :改变文件拥有者
有两种方法可改变文件的权限
turing@ubuntu:/home/openharmony/code-v1.1.1-LTS$ ls -hli
1103292 -rw-r--r-- 1 turing root 350 Jul 21 00:17 ohos_config.json
turing@ubuntu:/home/openharmony/code-v1.1.1-LTS$ chmod -R 777 ohos_config.json
turing@ubuntu:/home/openharmony/code-v1.1.1-LTS$ ls -hli
1103292 -rwxrwxrwx 2 turing root 350 Jul 21 00:17 ohos_config.json
777 = (111)(111)(111) = (rwx)(rwx)(rwx)
u +(加入) r
chmod g -(除去) w 文件或目录
o =(设定) x
a
(u)user (g)group (o)others (a)all
chmod u=rwx,go=rx ohos_config.json 结果: rwxr-xr-x
chmod a+w ohos_config.json 结果: rwxrwxrwx
chmod u-r+wx ohos_config.json 结果: -wxrwxrwx
链接 一栏代表的是硬链接的数量,有硬链接就会有软链接,有什么区别呢。
先说清楚为什么会有链接 ? 原因是因为同一个文件往往需要被同一个用户或多个用户同时使用,好东西要懂得分享,好人一生平安,大片怎能独享。做个小实验看下二者的区别
#对ohos_config.json 创建硬链接和软链接
#创建硬链接命令 ln ohos_config.json hard_link
#创建软链接命令 ln -s ohos_config.json hard_link
turing@ubuntu:/home/openharmony/code-v1.1.1-LTS$ ls -hli
1103292 -rw-r--r-- 1 turing root 350 Jul 21 00:17 ohos_config.json
turing@ubuntu:/home/openharmony/code-v1.1.1-LTS$ ln ohos_config.json hard_link
turing@ubuntu:/home/openharmony/code-v1.1.1-LTS$ ln -s ohos_config.json soft_link
turing@ubuntu:/home/openharmony/code-v1.1.1-LTS$ ls -hli
1103292 -rw-r--r-- 2 turing root 350 Jul 21 00:17 hard_link
1103292 -rw-r--r-- 2 turing root 350 Jul 21 00:17 ohos_config.json
1086100 lrwxrwxrwx 1 turing root 16 Jul 29 01:06 soft_link -> ohos_config.json
拥有者
chown :改变文件拥有者
chown -R 账号名称 文件或目录
chown -R 账号名称:用户组名称 文件或目录
turing@ubuntu:/home/openharmony/code-v1.1.1-LTS$ll
-rw-r--r-- 2 root root 350 Jul 21 00:17 ohos_config.json
turing@ubuntu:/home/openharmony/code-v1.1.1-LTS$sudo chown -R turing:turing ohos_config.json
turing@ubuntu:/home/openharmony/code-v1.1.1-LTS$ll
-rw-r--r-- 2 turing turing 350 Jul 21 00:17 ohos_config.json
群组
chgrp -R 用户组名称 文件或目录
turing@ubuntu:/home/openharmony/code-v1.1.1-LTS$ll
-rw-r--r-- 2 root root 350 Jul 21 00:17 ohos_config.json
turing@ubuntu:/home/openharmony/code-v1.1.1-LTS$sudo chgrp -R turing ohos_config.json
turing@ubuntu:/home/openharmony/code-v1.1.1-LTS$ll
-rw-r--r-- 2 root turing 350 Jul 21 00:17 ohos_config.json
修改日期
用stat命令可以查看一个文件的信息
turing@ubuntu:/home/openharmony/code-v1.1.1-LTS$ stat ohos_config.json
File: ohos_config.json
Size: 350 Blocks: 8 IO Block: 4096 regular file
Device: 805h/2053d Inode: 1103292 Links: 2
Access: (0644/-rw-r--r--) Uid: ( 1000/ turing) Gid: ( 0/ root)
Access: 2021-07-24 02:07:21.683190622 -0700
Modify: 2021-07-21 00:17:34.733766830 -0700
Change: 2021-07-29 01:20:14.314343117 -0700
Birth: -
了解了文件后,再看文件系统.
欢迎大家关注公众号<程序猿百晓生>,可以了解到一下知识点。
`欢迎大家关注公众号<程序猿百晓生>,可以了解到一下知识点。`
1.OpenHarmony开发基础
2.OpenHarmony北向开发环境搭建
3.鸿蒙南向开发环境的搭建
4.鸿蒙生态应用开发白皮书V2.0 & V3.0
5.鸿蒙开发面试真题(含参考答案)
6.TypeScript入门学习手册
7.OpenHarmony 经典面试题(含参考答案)
8.OpenHarmony设备开发入门【最新版】
9.沉浸式剖析OpenHarmony源代码
10.系统定制指南
11.【OpenHarmony】Uboot 驱动加载流程
12.OpenHarmony构建系统--GN与子系统、部件、模块详解
13.ohos开机init启动流程
14.鸿蒙版性能优化指南
.......
什么是文件系统? 看看维基百科的解释:
简单地说,文件系统是操作系统中负责管理持久数据的子系统,基本数据单位是文件,它的目的是对磁盘上的文件进行组织管理,组织的方式不同,就会形成不同的文件系统。
计算机文件系统很像我们大学的智能图书管理系统,你去图书馆借书,只需在屏幕上选中要借的书本列表提交后会自动把书提取出来放到你的面前,你并不需要知道书本是如何被检测出来,它真实的摆放在几号馆的几号书架的第几排。每个大学都有一套独立的图书管理方式,有的按分类,有的按科目,有的按地域,有的按时间。 即便都按分类来的,分类的方法也会不一样,而且管理1万册很高效的方法却不一定对1000万册也同样高效,但衡量方法的好坏无非是看以下几个要素:
计算机的文件系统因为技术的更新,因为各个公司的利益保护等等诸多原因,肯定也是百花齐放的,跟计算机语言一样,绝大多数语言的发明只是为了解决某个实验室或者某个公司当下遇到的问题,很多压根没想那么远,标准和规范那都是后话,取决于你的市场规模和背后的金主。统一标准是好,但真的很难。世界语出现很多年了,但又有几个人去学。联合国存在也很多年了,就不听你,不交会费,你能有啥办法。经济基础决定上层建筑,这句话初中政治就反复讲,当初不理解,现在是彻底明白了,终究是要靠实力说话的。
所以不要去奇怪为什么会有这么多语言要学,这么多前端,后台框架要搞,互联网技术版图还处于群雄争霸时代,巨头林立,身处其中的码农都是绞肉机里的肉。而且这种分裂的趋势会愈演愈烈, PC时代 Windows 一统天下, 手机时代 苹果,Android 楚汉相争,万物互联时代 鸿蒙,苹果,Fuchsia 很可能是三分天下。新生代不断崛起,老贵族不下牌桌。
文件系统按类型可分成以下四种:
日志文件系统具有闪存文件系统需要的特性,这类文件系统包括JFFS2和YAFFS。也有为了避免日志频繁写入而导致闪存寿命衰减的非日志文件系统,如exFAT。
JFFS2(全称: Journalling Flash File System Version2),是Redhat公司开发的闪存文件系统,其前身是JFFS,最早只支持 NOR Flash, 自2.6版以后开始支持 NAND Flash, 适合使用于嵌入式系统。
YAFFS(全称:Yet Another Flash File System)是由Aleph One公司所发展出来的 NAND Flash 嵌入式文件系统。
对于鸿蒙内核,JFFS2,YAFFS,tmpfs,procfs,FAT,NTFS,ZFS将是后续章节的重点.
如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。