51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2343|回复: 3
打印 上一主题 下一主题

linux命令提问

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2010-12-29 17:18:56 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
ln -d硬链接和cp有啥区别啊?好像没有区别嘛!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

  • TA的每日心情

    2018-10-25 10:51
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]测试排长

    4#
    发表于 2011-6-27 16:00:06 | 只看该作者
    。。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3#
    发表于 2011-3-12 11:07:32 | 只看该作者
    上课 老师刚讲了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    2#
     楼主| 发表于 2010-12-29 19:54:38 | 只看该作者
    找到答案了。
    在讲这两个命令之前,首先要给大家讲一下Linux文件系统在磁盘分区中是如何存储一个文件的。像Windows一样,我把Linux文件系统存储文件时也分为三大块:inode,dir,data。inode在Linux中对应一个文件或一个目录,它主要是存储文件的大小、创建时间、访问时间、数据的存储位置等一系列信息。下面是Linux为inode定义的数据结构:

    struct ext3_inode {
    __u16 i_mode;    /* File mode */
    __u16 i_uid;     /* Low 16 bits of Owner Uid */
    __u32 i_size;    /* 文件大小,单位是 byte */
    __u32 i_atime;   /* Access time */
    __u32 i_ctime;   /* Creation time */
    __u32 i_mtime;   /* Modification time */
    __u32 i_dtime;   /* Deletion Time */
    __u16 i_gid;     /* Low 16 bits of Group Id */
    __u16 i_links_count;          /* Links count */
    __u32 i_blocks;               /* blocks 计数 */
    __u32 i_flags;                /* File flags */
    __u32 l_i_reserved1;          /* 可以忽略 */
    __u32 i_block[EXT3_N_BLOCKS]; /* 一组 block 指针 */
    __u32 i_generation;           /* 可以忽略 */
    __u32 i_file_acl;             /* 可以忽略 */
    __u32 i_dir_acl;              /* 可以忽略 */
    __u32 i_faddr;                /* 可以忽略 */
    __u8 l_i_frag;               /* 可以忽略 */
    __u8 l_i_fsize;              /* 可以忽略 */
    __u16 i_pad1;                 /* 可以忽略 */
    __u16 l_i_uid_high;           /* 可以忽略 */
    __u16 l_i_gid_high;           /* 可以忽略 */
    __u32 l_i_reserved2;          /* 可以忽略 */
    };

    dir是存放文件名和inode ID对应关系的地方。存储每个对应关系的数据结构Linux中定义如下:

    struct ext3_dir_entry_2 {
    __u32 inode;    /* Inode 号数 */
    __u16 rec_len; /* Directory entry length */
    __u8 name_len; /* Name length */
    __u8 file_type;
    char name[EXT3_NAME_LEN]; /* File name */
    };

    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,若是则删除。否则不会删除。
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-25 16:18 , Processed in 0.073628 second(s), 28 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表