Linux基础命令大礼包
Linux的文件管理权限
对于Linux中的软、硬链接的解释与说明,首先要从inode、block说起,这二者的背景在于Linux的ext4这个文件系统
ext4文件系统将分区分为两大部分
inode(i节点) 128Byte 时间戳、权限、大小、位置 block(块) 1、2、4KB 默认为 4KB block 用于实际的数据存储,存储时不一定按顺序的,每个文件都有一个inode号,一个block是存储空间的最小单位 索引号:通过索引号来对文件进行查找;可以理解为图书馆的图书分类与目录注意:
在 inode 信息中,不记录文件名称,而是把文件名记录在上级目录的 block 中。
目录的 block :
记录的是这个目录下所有一级子文件和子目录的文件名及 与node 的对应;
了解到以上的信息,下面开始详解软、硬链接文件的具体含义
命令:
[root@localhost ~]# touch test #建立源文件 [root@localhost ~]# ln /root/test /tmp/test-hard #给源文件建立硬链接文件 /tmp/test-hard [root@localhost ~]# ll -i /root/test /tmp/test-hard 262147 -rw-r--r-- 2 root root 0 6月 19 10:06 /root/test hard 262147 -rw-r--r-- 2 root root 0 6月 19 10:06 /tmp/test-hard #查看两个文件的详细信息,可以发现这两个文件的 inode 号是一样的,"ll"等同于"ls -l"以上命令是创建了硬链接,在文件系统中的结构如下图
详细步骤:
注意,在上图中省略了/目录到/下的root目录的迭代
迭代过程,每轮迭代的前提是要有权限访问 1、首先找到/的inode(根目录的inode是系统已知的,inode号是2),然后判断用户是否有权限访问根目录的block, 2、有,就可以在/的block中访问到/root的文件名及对应的inode号 3、通过/root/目录的inode号,可以查找到/root/目录的inode信息,接着判断用户是否有权限访问 /root/目录的block 4、有,则可以从/root/目录的block中读取到test文件的文件名及对应的inode号 5、通过 test 文件的 inode 号,就可以找到test文件的inode信息,接着判断用户是否有权限访问 test文件的block。 6、有,则可以读取 block 中的数据,这样就完成了 /root/test 文件的读取与访问 / 到 /root 到 /root/tmp 到 /root/tmp/test-hard的过程与上述过程完全一致命令:
[root@localhost ~]# touch check #建立源文件 [root@localhost ~]# ln -s /root/check /tmp/check-soft #建立软链接文件 [root@localhost ~]# ll -id /root/check /tmp/check-soft 262154 -rw-r--r-- 1 root root 0 6月 19 11:30 /root/check 917507 lrwxrwxrwx 1 root root 11 6月 19 11:31 /tmp/ check-soft -> /root/check #软链接和源文件的 inode 号不一致,软链接通过 -> 明显地标识出源文件的位置 #在软链接的权限位 lrwxrwxrwx 中,l 就代表软链接文件以上命令是创建了软链接,在文件系统中的结构如下图
详细步骤:
迭代过程,每轮迭代的前提是要有权限访问 1、首先找到/的inode,然后判断用户是否有权限访问根目录的block 2、有,就可以在/的block中访问到/tmp的文件名及对应的inode号 3、接着访问/tmp/目录的inode信息,判断用户是否有权限访问/tmp/目录的block 4、有,就会在block中读取到软链接文件check-soft的inode号,因为软链接文件会真正建立自己的 inode索引和block,所以软链接文件和源文件的 inode 号是不一样的 5、访问软链接block中指向真实文件的inode 至此完成从软连接文件到真实文件的访问 / 到 /root 到 /root/check的过程与上述过程完全一致 不做过多赘述,还是一个迭代的过程,前提是目录要有访问的权限