console:/ # ls -l data/
total 1908
drwx------ 2 root root 4096 2021-08-19 10:58 adb
drwxrwxr-x 2 system system 4096 2021-08-19 10:58 anr
drwxrwx--x 11 system system 4096 2021-09-30 11:45 app
drwx------ 2 root root 4096 2021-08-19 10:58 app-asec
drwxrwx--x 2 system system 4096 2021-08-19 10:58 app-ephemeral
drwxrwx--x 2 system system 4096 2021-08-19 10:58 app-lib
drwxrwx--x 2 system system 4096 2021-08-19 10:58 app-private
drwx------ 4 system system 4096 2021-09-30 11:45 backup
drwxr-xr-x 2 shell shell 4096 2021-08-19 10:58 bootchart
drwxrwx--- 5 system cache 4096 2021-08-19 10:58 cache
drwxrwx--x 3 root root 4096 2021-08-19 10:58 dalvik-cache
drwxrwx--x 110 system system 4096 2021-09-30 11:45 data
drwxrwx--- 3 drm drm 4096 2021-08-19 10:58 drm
drwxrwx--x 2 system system 4096 2021-08-19 10:58 droidota
drwxr-x--x 4 root root 4096 2021-08-19 10:58 local
drwxrwx--x 3 log log 4096 2021-08-19 10:58 log
-rw------- 1 root root 1675080 2021-08-20 09:32 logcat.txt
drwxrwx--- 2 root root 16384 2021-08-19 10:58 lost+found
drwxrwx--- 4 media_rw media_rw 4096 2021-08-19 10:58 media
drwxrwx--- 2 mediadrm mediadrm 4096 2021-08-19 10:58 mediadrm
drwxrwx--t 42 system misc 4096 2021-08-19 10:58 misc
drwxrwx--t 3 system misc 4096 2021-08-19 10:58 misc_ce
drwxrwx--t 3 system misc 4096 2021-08-19 10:58 misc_de
drwxrwx--- 3 nfc nfc 4096 2021-08-19 10:58 nfc
drwxrwx--x 2 root root 4096 2021-08-19 10:58 ota
drwxrwx--- 2 system cache 4096 2021-08-19 10:58 ota_package
drwx------ 2 root root 4096 2021-09-30 11:45 property
drwxrwx--x 2 system system 4096 2021-08-19 10:58 resource-cache
drwx------ 2 system system 4096 2021-08-19 10:58 ss
drwxrwxr-x 18 system system 4096 2021-09-30 12:28 system
drwxrwx--- 3 system system 4096 2021-08-19 10:58 system_ce
drwxrwx--- 3 system system 4096 2021-08-19 10:58 system_de
drwxrwx--x 2 system system 4096 2021-08-19 10:58 tombstones
drwx------ 3 root root 4096 2021-08-19 10:58 unencrypted
drwx--x--x 2 system system 4096 2021-08-19 10:58 user
drwx--x--x 3 system system 4096 2021-08-19 10:58 user_de
drwxrwx--x 6 root root 4096 2021-08-19 10:58 vendor
drwxrwx--x 3 root root 4096 2021-08-19 10:58 vendor_ce
drwxrwx--x 3 root root 4096 2021-08-19 10:58 vendor_de
这个数值其实不太重要(但是知道它可以认识到什么叫"Linux一切皆文件"), 它表示所列出文件共占用多大的磁盘空间. 在这里共占用了1908K个字节的磁盘空间.
什么叫做所列出文件共占用多大的磁盘空间呢? 就是把当前 ls -l 列出的所有文件的大小加起来一起是多大, 关键点是文件夹只占用4K(4096byte = 4KByte)的内存空间, 是的, 没错, 就4K. 无论文件夹里面装了多少文件多大多小的文件, 文件夹占用磁盘空间的永远都只是4K个字节. 那么这时候你可能会问, 那么那些在文件夹中文件呢? 这时候就体现出了, 什么叫做"Linux一切皆文件"了.
在Linux操作系统中, 文件夹其实也是一个文件, 固定为4K字节, 这4K的字节中, 存储着大量的这个文件夹的信息. 在日常的应用编程中, Linux给我们提供了一系列的数据结构以及API(application program interface, 系统应用编程接口), 让我们来读取和维护这个文件(文件夹)的信息. 所以我们图中看到的4096字节的文件夹占用空间是真实的, 不是你眼花, 也不是Linux系统抽风了.
如果把上面所有的数值加起来(我上面的截图不全), 算一下是不是真的占用了1908K个字节, 会发现这个数值是偏大的. 这个会涉及到文件系统中"块"的概念.
1.文件 类型 | 2.文件所有者权限 | 3.文件所属组权限 | 4.其他人权限 | 5.目录的子目录个数/文件的硬链接个数 | 6.文件所有者 | 7.文件所有组 | 8.文件大小 | 9.文件的修改日期 | 10.文件名 | |
示 例 1 | d | rwx | --- | --- | 2 | root | root | 4096 | adb | |
示例2 | d | rwx | rwx | r-x | 2 | system | system | 4096 | anr | |
示例3 | d | rwx | rwx | --x | 6 | system | system | 4096 | app |
1.文件类型
2.文件所有者权限 Owner
3.文件所属组权限 Group
4.其他人权限 Other
5.目录的子目录个数/文件的硬链接个数
6.文件所有者
7.文件所有组
8.文件大小
9.文件的修改日期
10.文件名
链接文件的概念类似于windows里的快捷方式,多个链接文件同时指向一个“源文件”。链接文件分为硬链接和软链接(又称符号链接)两种。
在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号inode 。软链接,其实就是新建立一个文件,这个文件就是专门用来指向别的文件的(那就和windows 下的快捷方式的那个文件有很接近的意味)。软链接产生的是一个新的文件,但这个文件的作用就是专门指向某个文件的,删了这个软链接文件,那就等于不需要这个链接,和原来的存在的实体原文件没有任何关系,但删除原来的文件,则相应的软链接不可用(cat那个软链接文件,则提示“没有该文件或目录“)
硬链接是不会建立inode的,他只是在文件原来的inode link count域再增加1而已,也因此硬链接是不可以跨越文件系统的。相反都是软链接会重新建立一个inode,当然inode的结构跟其他的不一样,他只是一个指明源文件的字符串信息。一旦删除源文件,那么软链接将变得毫无意义。而硬链接删除源文件的时候,系统调用会检查inode link count的数值,如果他大于等于1,那么inode不会被回收,因此文件的内容不会被删除,相当于删除了一个索引。
硬链接实际上是为文件建一个别名,链接文件和原文件实际上是同一个文件。可以通过ls -i来查看一下,这两个文件的inode号是同一个,说明它们是同一个文件;而软链接建立的是一个指向,即链接文件内的内容是指向原文件的指针,它们是两个文件。
软链接可以跨文件系统,硬链接不可以;软链接可以对一个不存在的文件名(filename)进行链接(当然此时如果你vi这个软链接文件,linux会自动新建一个文件名为filename的文件),硬链接不可以(其文件必须存在,inode必须存在);软链接可以对目录进行连接,硬链接不可以。两种链接都可以通过命令 ln 来创建。ln 默认创建的是硬链接。使用 ln -s 开关可以创建软链接
如果使用ln,做一个指向该文件的硬链接再查看该文件,该文件的第2字段就会变成2。此时logcat.txt 和logcat1.txt称为互为硬链接。他们指向同一个文件,无论是修改哪一个文件,另一个里也做相应的变化,因为实际上他们指向同一个文件(即同一文件的不同文件名),互为硬链接的文件具有相同的文件节点。
ln 要被创建的文件的绝对路径 创建的快捷方式的名字
1|console:/ # ln data/logcat.txt data/logcat1.txt
console:/ # ls -l data/
-rw------- 2 root root 1675080 2021-08-20 09:32 logcat.txt
-rw------- 2 root root 1675080 2021-08-20 09:32 logcat1.txt
-i 查的是文件的inode
console:/ # ls -i data/logcat.txt data/logcat1.txt
435 data/logcat.txt 435 data/logcat1.txt