1993.1.18

SUBJECT: Symbolic/Hard linkÀÇ ºñ±³

CONTENTS:
0. Introduction
1. Hard link
   1) "link"ÀÇ °³³ä:
   2) hard link¶õ ?
   3) hard linkÀÇ Æ¯¼º
2. Symbolic link

DESCRIPTION:
0. UNIXÀÇ file typeÀ» ¾ê±âÇÒ ¶§,
   ordinary, directory, special, socket, FIFOs¿Í ÇÔ²²
   symbolic link, hard linkµµ ¾ð±ÞµÈ´Ù.
   symbolic/hard link¸¦ file typeÀ¸·Î ÀÌÇØÇÏ·Á¸é ¿ì¼± °³³ä°ú Ư¡À» ÀÌÇØÇØ¾ß ÇÒ °Í °°´Ù.

1. Hard link
   1) "link"ÀÇ °³³ä: 
      - "link"¶ó´Â °³³äÀ» ÀÌÇØÇÏ´Â ÇÑ ¹æ¹ýÀº
        filesystemÀÇ directory°¡ ¾î¶»°Ô °èÃþÀûÀ¸·Î ±¸Á¶¸¦ Çü¼ºÇÏ°í ÀÖÀ¸¸ç
        ¾î¶»°Ô "cd" command·Î ¿©·¯ directory¸¦ À̵¿ÇÒ ¼ö Àִ°¡¸¦ ÀÌÇØÇÏ´Â °ÍÀÌ´Ù.
      - °¢ directory´Â ±âº»ÀûÀ¸·Î ÃÖ¼ÒÇÑ µÎ °³ÀÇ fileÀ» °¡Áø´Ù.
           ¨ç directory ÀÚ½ÅÀ» Ç¥ÇöÇÏ´Â dot(.)
           ¨è ÀÚ½ÅÀÇ parent directory¸¦ Ç¥ÇöÇÏ´Â  dot-dot(..)
      - ÀÌ µÎ fileÀÌ directoryµéÀ» ¿¬°áÇÏ¿© filesystemÀÇ °èÃþÀû ±¸Á¶¸¦ Çü¼ºÇÑ´Ù.
        °¢ directoryÀÇ parent¿Í sub-directory¸¦ dot(.)¿Í dot-dot(..) file·Î ¿¬°á ÇÏ´Â °ÍÀÌ´Ù. 
        Áï ¨ç 'current directoryÀÇ dot-dot(..) file'ÀÇ inode
                = 'parent directoryÀÇ dot(.) file'ÀÇ inode
           ¨è 'current directoryÀÇ dot(.) file'ÀÇ inode
                = 'sub directoryÀÇ dot-dot(..) file'ÀÇ inode
      - sub directory°¡ ¿©·¯ °³ÀÎ directoryÀÇ °æ¿ì
        sub directoryµéÀÇ dot-dot(..) fileÀÇ inode´Â
        À̵é parent directoryÀÇ dot(.) fileÀÇ inode¿Í °°À» °ÍÀÌ´Ù.
        ´Þ¸® Ç¥ÇöÇϸé, sub directoryµéÀÇ °¢ 'drectory entry'´Â
        current directoryÀÇ dot-dot(..) file Áï parenet directoryÀÇ inode¸¦ °¡¸®Å°´Â °ÍÀÌ´Ù.
      - ÀÌó·³ 'ÇϳªÀÇ inode'¿¡ '¿©·¯ °³ÀÇ (direcory) file'ÀÌ '¿¬°á(link)'µÇ¾î ÀÖÀ» ¼ö ÀÖ°í,
        ÀÌ ¶§ '¿¬°á(link)µÈ °¹¼ö'¸¦ 'link °¹¼ö'¶ó ÇÑ´Ù.
        "ls -l"À» »ç¿ëÇϸé directoryµéÀÌ ÃÖ¼ÒÇÑ 2°³ ÀÌ»óÀÇ 'link °¹¼ö'¸¦ °¡Áö°í ÀÖÀ½À»
        È®ÀÎÇÒ ¼ö ÀÖ´Ù.
   2) hard link¶õ ?
      - À§¿¡¼­ directory¸¦ µé¾î ¼³¸íÇÑ linkÀÇ °³³ä¼­
        ¿©·¯°³ÀÇ (directory) fileµéÀÌ
        ÇÑ °³ÀÇ inode number¸¦ »ç¿ëÇØ ¼­·Î ¿¬°áµÉ ¼ö ÀÖÀ½À» º¸¾Ò´Ù.
      - hard link¶õ ÀÌ·¯ÇÑ link¿Í °°Àº °³³äÀÌ´Ù.
        ÇÑ fileÀÇ inode¿¡ ¿©·¯ fileµéÀÇ inode¸¦ ÀÏÄ¡½ÃÅ´À¸·Î½á
        ¼­·Î¸¦ ¿¬°á(link)½ÃÅ°´Â ¹æ½ÄÀÎ °ÍÀÌ´Ù.
      - hard link´Â 'directory file'ÀÇ link ±¸Á¶¸¦ 'ordinary file'·Î È®Àå½ÃŲ °ÍÀÌ´Ù.
        Áï "ln"À̶ó´Â command¸¦ »ç¿ëÇÏ¿©
        ½ÇÁ¦ (hard) linkµÈ fileµéÀ» »ý¼ºÇÔÀ¸·Î½á 'link¶ó´Â ³»ºÎÀû Ç¥Çö'À»
        'hard link file (type)'À¸·Î ¹Ù²Ù¾î ÁÖ´Â °ÍÀÌ´Ù. 
      - hard link¸¦ È®ÀÎÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀº 
        symbolic linkó·³ filename¿¡¼­ È®ÀÎÇÒ ¼ö ÀÖ´Â °ÍÀÌ ¾Æ´Ï°í, 
        'link °¹¼ö'°¡ 2 ÀÌ»óÀΰ¡¸¦ È®ÀÎÇÏ°í
        inode number°¡ °°Àº fileÀ» ã¾Æ¾ß ÇÏ´Â °ÍÀÌ´Ù.
   3) hard linkÀÇ Æ¯¼º
      - hard link´Â fileÀÌ Á¸ÀçÇÒ ¶§¸¸ ¸¸µé¾î Áú ¼ö ÀÖ´Ù.
        Áï inode°¡ ¹Ì¸® Á¸ÀçÇÏ°í ÀÖ¾î¾ß 'µ¿ÀÏ inode'¸¦ °®´Â fileÀ» ¸¸µé ¼ö Àִ°Í.
      - filesystemÀ» crossÇÏ¿© hard link¸¦ Çü¼ºÇÒ ¼ö´Â ¾ø´Ù.
        A filesystem¿¡¼­ B filesystem¿¡ ÀÖ´Â file(inode number¸¦ 2577À̶ó ÇÑ´Ù¸é)·Î
        hard link¸¦ ½ÃµµÇÑ´Ù ÇÔÀº B filesystemÀÇ file inode number 2577°ú °°Àº inode number¸¦
        A filesystemÀÇ hard linkµÈ fileÀÌ °¡Áø´Ù´Â °Í.
        ±×·¯³ª ½ÇÁ¦ A filesystemÀÇ inode number 2577Àº B filesystemÀÇ 2577°ú´Â ¹«°üÇÑ °ÍÀÌ´Ù.
      - super user¸¸ÀÌ directory¸¦ °¡¸®Å°´Â »õ·Î¿î (hard) link¸¦ »ý¼ºÇÒ ¼ö ÀÖ´Ù.
        ÀÌ´Â filesystemÀÌ loopingÀ» µ¹°Ô²û linkµÉ ¼ö ÀÖ´Â °¡´É¼ºÀÌ Àֱ⠶§¹®ÀÌ´Ù.
      - hard linkµÈ fileÁß Çϳª¸¦ Áö¿ü´Ù°í ÇÏ¿© ½ÇÁ¦ ±× fileÀ» Áö¿ü´Ù°í ÇÒ ¼ö ÀÖ´Â °ÍÀº ¾Æ´Ï´Ù.
        hard linkµÇ¾î ÀÖ´Â ´Ù¸¥ fileÀÌ µ¿ÀÏ inode¸¦ »ç¿ëÇϱ⠶§¹®ÀÌ´Ù.
        fileÀ» Áö¿ü´Ù ÇÔÀº ±× fileÀÌ »ç¿ëÇÏ°í ÀÖ´Â indoe°¡ releaseµÊÀ» ÀǹÌÇÑ´Ù.
   
2. Symbolic link
   * ÇÑ fileÀ» ´Ü¼øÈ÷ '´Ù¸¥ À̸§(pathname)'À¸·Î Áö½ÃÇÏ´Â file typeÀÌ´Ù. 
   * symbolic link´Â fileÀ» °¡¸®Å°´Â 'indirect pointer'ÀÌ´Ù.
     hard link´Â fileÀÇ inode·ÎÀÇ  'direct pointer'ÀÌ´Ù.
     hard link°¡ µ¿ÀÏ inode¿¡ ´ëÇÑ ´Ù¼ö fileÀÇ °øÀ¯¶ó¸é
     symbolic link´Â file°ú linknameÀÌ °¢±â ´Ù¸¥ inode¸¦ °¡Áø´Ù.
   * hard linkÀÇ Á¦¾à »çÇ×:
     ¨ç ÀÌ¹Ì Á¸ÀçÇÏ´Â file¸¸À» hard linkÇÒ ¼ö ÀÖ´Ù.
     ¨è µ¿ÀÏÇÑ filesystem¿¡ ÀÖ´Â file¸¸ hard link°¡ °¡´ÉÇÏ´Ù.
     ¨é superuser¸¸ÀÌ directory·Î hard linkÇÒ ¼ö ÀÖ´Ù. ( "-f" optionÀ» »ç¿ëÇØ¾ß ÇÔ) 
   * ¹Ý¸é symbolic link´Â ÀÌ»óÀÇ hard link Á¦¾à »çÇ׿¡ ¹«°üÅä·Ï ±¸ÇöµÈ °Í.
     ¨ç ÇöÀç Á¸ÀçÇÏÁö ¾Ê´Â fileÀÌ¶óµµ (symbolic) link°¡ °¡´ÉÇÏ´Ù
     ¨è filesystemÀ» crossÇÏ¿© symbolic link°¡ °¡´ÉÇÏ´Ù.
     ¨é ÀÏ¹Ý userµµ directory·ÎÀÇ symbolic link°¡ °¡´ÉÇÏ´Ù.
   * symbolic link´Â ÇÑ file/Àüü directory hierarchy¸¦ 
     systemÀÇ ´Ù¸¥ °÷À¸·Î ¿Å±æ ¶§ ¸¹ÀÌ »ç¿ëµÈ´Ù.
   * symbolic link´Â 4.2 BSD¿¡¼­ µµÀԵǾú°í À̾î SVR4¿¡¼­ äÅõǾú´Ù.
     SVR4ÀÇ symbolic link´Â 'ÀüÅëÀûÀÎ System V filesystem'°ú
     'Unified File System(UFS)' ¾çÀÚ¸¦ ¸ðµÎ Áö¿øÇÑ´Ù.
   * 'symbolic link¸¦ °¡Áö´Â file(source ºÎºÐ)'ÀÇ data block¿¡´Â
     'symbolic link°¡ °¡¸®Å°´Â file(destination ºÎºÐ)'ÀÇ À̸§À» °¡Áö°í ÀÖ´Ù.
     ¿¹¸¦ µé¾î,
          lrwxrwxrwx  1  root   7 Aug 11:00   lib -> usr/lib
     'directory entry'ÀÇ filename¿¡´Â 3 character string "lib"ÀÌ µé¾î ÀÖ°í
     file¿¡´Â 7 byteÀÇ data "usr/lib"°¡ ÀÖ´Ù.
     inodeÀÇ 'file type'¿¡ symbolic link¶ó´Â ½Äº°ÀÌ µÇ¾î ÀÖÀ¸¹Ç·Î
     kernelÀº 7 byteÀÇ data "usr/lib"°¡ file "lib"¿¡¼­ symbolic linkµÇ¾î ÀÖÀ½À» ¾Ë°Ô µÈ´Ù.
  




  






Revision History
Created        on Jan. 18 ,1993