一开始自己在网上也查了很多关于此方面的资料,但是没有一个说的能让人彻底明白,彻底走出迷雾的。今天我将把自己更为清晰的简介说出来供大家参考: 在讲这两个命令之前,首先要给大家讲一下Linux文件系统在磁盘分区中是如何存储一个文件的。像Windows一样,我把Linux文件系统存储文件时也分为三大块:inode,dir,data。inode在Linux中对应一个文件或一个目录,它主要是存储文件的大小、创建时间、访问时间、数据的存储位置等一系列信息。下面是Linux为inode定义的数据结构: struct ext3_inode { dir是存放文件名和inode ID对应关系的地方。存储每个对应关系的数据结构Linux中定义如下: struct ext3_dir_entry_2 { data也就是文件数据实实在在所存在的地方了。 那么接下来开始进入正题: cp(拷贝命令):比如说拷贝bing.txt。执行"cp bing.txt chuan.txt"拷贝命令时,系统会产生一个新inode,把bing.txt相关的信息填到这个inode里面。然后把bing.txt的数据拷贝到系统为chuan.txt所开辟的空间里面。最后,把chuan.txt和新inode ID对应起来放到dir里面。 ln(链接命令): 链接命令分为两大块:软连接、硬链接; 软连接(命令格式ln -s file1 file2):系统为file2产生一个新的inode,把file1的inode信息完全复制到file2的inode中去。然后在dir里面添加一个对应关系:file2 <-----> file2的inode的ID。 硬链接(命令格式:ln [-d] file1 file2): 硬链接很简单,仅仅是产生一个file2<----->file1的inodeID 的对应关系。所以说硬链接很节省空间,而且它有一个很大的好处,那就是可以避免误删除带来的损失。因为Linux中删除一个文件时首先把这个文件的inode中i_link_count(此变量为硬链接数。为什么没有软连接呢?因为软连接只是完全复制源文件的inode的并不公用源文件的inode,他只是相当于Windows中的快捷方式而已。)变量的值减一,然后判断i_link_count是否为0,若是则删除。否则不会删除。
|
2010-07-17 11:35