日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

【轉(zhuǎn)】linux cp(拷貝命令)ln(鏈接命令)實(shí)質(zhì)區(qū)別之我見

 techres 2012-05-24
linux cp(拷貝命令)與ln(鏈接命令)實(shí)質(zhì)區(qū)別之我見

        一開始自己在網(wǎng)上也查了很多關(guān)于此方面的資料,但是沒有一個(gè)說的能讓人徹底明白,徹底走出迷霧的。今天我將把自己更為清晰的簡介說出來供大家參考:

        在講這兩個(gè)命令之前,首先要給大家講一下Linux文件系統(tǒng)在磁盤分區(qū)中是如何存儲(chǔ)一個(gè)文件的。像Windows一樣,我把Linux文件系統(tǒng)存儲(chǔ)文件時(shí)也分為三大塊:inode,dir,data。inode在Linux中對應(yīng)一個(gè)文件或一個(gè)目錄,它主要是存儲(chǔ)文件的大小、創(chuàng)建時(shí)間、訪問時(shí)間、數(shù)據(jù)的存儲(chǔ)位置等一系列信息。下面是Linux為inode定義的數(shù)據(jù)結(jié)構(gòu):

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 計(jì)數(shù) */
__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對應(yīng)關(guān)系的地方。存儲(chǔ)每個(gè)對應(yīng)關(guān)系的數(shù)據(jù)結(jié)構(gòu)Linux中定義如下:

struct ext3_dir_entry_2 {
__u32 inode;    /* Inode 號數(shù) */
__u16 rec_len; /* Directory entry length */
__u8 name_len; /* Name length */
__u8 file_type;
char name[EXT3_NAME_LEN]; /* File name */
};

data也就是文件數(shù)據(jù)實(shí)實(shí)在在所存在的地方了。

那么接下來開始進(jìn)入正題:

cp(拷貝命令):比如說拷貝bing.txt。執(zhí)行"cp bing.txt chuan.txt"拷貝命令時(shí),系統(tǒng)會(huì)產(chǎn)生一個(gè)新inode,把bing.txt相關(guān)的信息填到這個(gè)inode里面。然后把bing.txt的數(shù)據(jù)拷貝到系統(tǒng)為chuan.txt所開辟的空間里面。最后,把chuan.txt和新inode ID對應(yīng)起來放到dir里面。

ln(鏈接命令):

鏈接命令分為兩大塊:軟連接、硬鏈接;

軟連接(命令格式ln -s file1 file2):系統(tǒng)為file2產(chǎn)生一個(gè)新的inode,把file1的inode信息完全復(fù)制到file2的inode中去。然后在dir里面添加一個(gè)對應(yīng)關(guān)系:file2 <-----> file2的inode的ID。

硬鏈接(命令格式:ln [-d] file1 file2): 硬鏈接很簡單,僅僅是產(chǎn)生一個(gè)file2<----->file1的inodeID 的對應(yīng)關(guān)系。所以說硬鏈接很節(jié)省空間,而且它有一個(gè)很大的好處,那就是可以避免誤刪除帶來的損失。因?yàn)長inux中刪除一個(gè)文件時(shí)首先把這個(gè)文件的inode中i_link_count(此變量為硬鏈接數(shù)。為什么沒有軟連接呢?因?yàn)檐涍B接只是完全復(fù)制源文件的inode的并不公用源文件的inode,他只是相當(dāng)于Windows中的快捷方式而已。)變量的值減一,然后判斷i_link_count是否為0,若是則刪除。否則不會(huì)刪除。

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多