ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®
ÇöÀçÀ§Ä¡ : article>UnixFile2



joinc´Â Firefox¿Í chrome¿¡¼­ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼­´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.
<!> ÃֽŹ®¼­´Â System Programing Wiki¿¡ À¯ÁöµË´Ï´Ù. ¿©±â´Â °Ë»öÀ» À§ÇÑ º¹»çº» Á¤º¸¸¸À» À¯ÁöÇÕ´Ï´Ù.
ÆÄÀÏÀÇ ¿¬°á°ú ¿¬°áÇØÁ¦
ÆÄÀÏÀ» ¿¬°á(link)¿¡´Â "½Éº¼¸¯ ¸µÅ©" ¿Í "ÇÏµå ¸µÅ©" ÀÇ 2°¡Áö°¡ Á¸ÀçÇÑ´Ù. Çϵ帵ũ´Â ¿¬°áÀ» ¿øÇÏ´Â ¿øº»ÆÄÀÏÀÇ inode ¸¦ °¡Áö°í ÆÄÀÏÀ» Á÷Á¢ ¸¸µéÁö¸¸ (ÆÄÀϺ¹»ç), linke ´Â inode ¸¦ °¡Áö°í ÆÄÀÏÀ» ¸¸µéÁö ¾Ê°í, ´ÜÁö ÆÄÀϸ¸À» ÂüÁ¶ÇÑ´Ù.
½Éº¼¸µ ¸µÅ©ÀÇ °æ¿ì ¼­·Î ´Ù¸¥ ÆÄÀϽýºÅÛ »çÀ̸¦ ¿¬°áÇÒ¼ö ÀÖÁö¸¸(ÆÄÀÏÀ» ´ÜÁö ÂüÁ¶ÇÏ´Â °ÍÀ̹ǷÎ), ÇÏµå ¸µÅ©ÀÇ °æ¿ì ´Ù¸¥ ÆÄÀϽýºÅÛ »çÀ̸¦ ¿¬°áÇÒ¼ö´Â ¾ø´Ù. ±× ÀÌÀ¯´Â Çϵ帵ũ°¡ inode ¸¦ °¡Áö°í ÆÄÀÏÀ» ¿¬°áÇÑ´Ù°í Çߴµ¥, ´Ù¸¥ ÆÄÀϽýºÅÛ ÀÇ °æ¿ì inode °¡ Áߺ¹µÉ¼ö°¡ Àֱ⠶§¹®(Áï À¯ÀÏÇÑ ÆÄÀÏ À̶ó´Â°É È®ÀÎÇÒ¼ö ¾øÀ½)ÀÌ´Ù. ±×·¯¹Ç·Î ¼­·Î´Ù¸¥ ÆÄÀϽýºÅÛ(ÆÄƼ¼Ç) »çÀÌ¿¡ ÆÄÀÏ º¹»ç¸¦ ¿øÇÑ´Ù¸é, º°µµÀÇ ÇÔ¼ö¸¦ ¸¸µé¾î¼­ ½á¾ß ÇÑ´Ù.
ÀÌ·¯ÇÑ ÆÄÀϽýºÅÛÀ» ³Ñ³ªµå´Â ÆÄÀÏÀÇ ¿¬°áÀ» ½Å°æ½á¾ß ÇÑ´Ù¸é, ÆÄÀÏÀ» Á÷Á¢ read ÇØ¼­ write ÇÏ´Â ÇÔ¼ö¸¦ ¸¸µé¾î¼­ »ç¿ëÇØ¾ß ÇÒ°ÍÀÌ´Ù.
ÆÄÀÏÀÇ ¸µÅ©¸¦ ÇØÁ¦Çϱâ À§Çؼ­´Â unlink(2) ¸¦ »ç¿ëÇÏ¸é µÈ´Ù.
À¯´Ð½º ½©»ó¿¡¼­µµ ÀÌ·¯ÇÑ ÆÄÀÏ ¸µÅ©¸¦ À§ÇÑ "ln" À̶ó´Â ½Ã½ºÅÛ ¸í·É¾î°¡ Á¸ÀçÇϴµ¥, "-s" ¿É¼ÇÀ» »ç¿ëÇÏ¸é ½Éº¼¸¯ ¸µÅ© "-d" ¸¦ »ç¿ëÇϸé Çϵ帵ũ¸¦ ½ÃŰ°Ô µÈ´Ù.
¸µÅ©

Çϵ帵ũ¿Í ½Éº¼¸µ ¸µÅ©
¿ì¼± ½Éº¼¸¯ ¸µÅ© ÂÊÀ» º¸¸é ÆÄÀϽýºÅÛÀÌ ´Ù¸¥µ¥µµ º°¹®Á¦ ¾øÀÌ ¸µÅ©°¡ µÊÀ» ¾Ë¼ö ÀÖ´Ù.
±×·¯³ª ¼­·Î´Ù¸¥ ÆÄÀϽýºÅÛ(ÀåÄ¡)°£¿¡ Çϵ帵ũ¸¦ ÇÏ·Á°í ÇÒ°æ¿ì ¿¡·¯°¡ ³ª´Â°É º¼¼ö ÀÖÀ»°ÍÀÌ´Ù. À§¿¡¼­ ¸»ÇßµíÀÌ inode ¸¦ °¡Á®°¡±â ¶§¹®ÀÌ´Ù.
À§ÀÇ ¿¹Á¦¿¡¼­ "-d" ¿É¼ÇÀ» ÀÌ¿ëÇÑ ÇÏµå ¸µÅ©¿¡¼­ ¿¡·¯°¡ ¹ß»ýÇÑ ÀÌÀ¯´Â ¼­·Î´Ù¸¥ ÀåÄ¡¿¡ ÀÖ´Â ÆÄÀÏÀ» Çϵ帵ũ ½ÃŰ·Á°í Ç߱⠶§¹®ÀÌ´Ù.
¾Æ·¡´Â °£´ÜÇÑ ¿¹Á¦ÀÌ´Ù.

¿¹Á¦: link.c
#include <unistd.h>
#include <string.h>
#include <stdio.h>

int main(int argc, char **argv)
{
    int opt;

    if ( argc != 4)
    {
        printf ("Usage: ./link [s|h] [¿øº»ÆÄÀÏ] [º¹»çÆÄÀÏ]\n");
        return -1;
    }

    if(access(argv[2], F_OK) != 0)
    {
        printf("¿øº»ÆÄÀÏÀÌ ¾ø½À´Ï´Ù\n");
        return -1;
    }

    if(access(argv[3], F_OK) == 0)
    {
        printf("ÀÌ¹Ì ÆÄÀÏÀÌ Á¸ÀçÇÕ´Ï´Ù\n");
        return -1;
    }

    while((opt = getopt(argc, argv, "sh")) != -1)
    {
        switch(opt)
        {
            case 's':
                printf("½Éº¼¸¯¸µÅ©\n");
                symlink(argv[2], argv[3]);
                break;

            case 'h':
                printf("Çϵ帵ũ\n");
                link(argv[2], argv[3]);
                break;
        }
    }
}


¿¹»ó°ú ´Þ¸® --; ½â ±×·²µíÇÏ°Ô µ¹¾Æ°¥ °ÍÀÌ´Ù. ¸í·ÉÇà ¿É¼ÇÀÇ Ã³¸®¸¦ À§Çؼ­ getopt ¸¦ »ç¿ëÇߴµ¥ getopt ¿¡ ´ëÇѳ»¿ëÀº getopt¸¦ ÀÌ¿ëÇÑ ÇÁ·Î±×·¥ ÀÎÀÚ󸮸¦ ÂüÁ¶Çϱ⠹ٶõ´Ù.
"-s" ¿É¼ÇÀ» ÁÖ¸é symlink(2)¸¦ ÀÌ¿ëÇØ¼­ ½Éº¼¸µ ¸µÅ©¸¦ ¸¸µé°í,
"-h" ¿É¼ÇÀ» ÁÖ¸é link(2)¸¦ ÀÌ¿ëÇØ¼­ Çϵ帵ũ¸¦ ¸¸µç´Ù.
"-d" ¿É¼ÇÀ» ÁÖ¸é ÇØ´ç ÆÄÀÏÀÇ ¿¬°áÀ» ÇØÁ¦ÇÑ´Ù.

ÆÄÀϱÇÇÑ¹× ¼ÒÀ¯ÁÖ/±×·ì º¯°æ ÆÄÀÏÀÇ ½ÇÇà±ÇÇÑÀº "À¯Àú", "±×·ì", "±×¹ÛÀÇ À¯Àú(other)" ¿¡ ´ëÇÑ ±ÇÇÑÀ» °¢±â ÁöÁ¤ÇØ ÁÙ¼ö ÀÖ´Ù.
[root@localhost test]# ls -al
-rwxr-xr-x    1 root     root        13953  1¿ù 24  2002 access
-rw-r--r--    1 root     yundream      180  1¿ù 24  2002 access.c
-rw-r--r--    1 root     root          708  1¿ù 24  2002 access.c.html
-rwxr-xr-x    1 root     root        25250  7¿ù 31 21:57 accumulate
-rw-r--r--    1 root     root          346  7¿ù 31 21:57 accumulate.cc
-rwxr-xr-x    1 root     root        13976  8¿ù 17 16:40 add
-rw-r--r--    1 root     root          101  8¿ù 17 16:40 add.c
-rwxr-xr-x    1 root     root        25333  7¿ù 31 22:37 adjacent_difference
-rw-r--r--    1 root     root          389  7¿ù 31 22:37 adjacent_difference.cc
-rwxr-xr-x    1 root     root        14104  8¿ù 18 14:29 alarm
-rw-r--r--    1 root     root          230  8¿ù 18 14:29 alarm.c
-rwxr-xr-x    1 root     root        13791  1¿ù 14  2002 argc
-rw-r--r--    1 root     root          214  1¿ù 14  2002 argc.c
-rw-r--r--    1 root     root          777  1¿ù 14  2002 argc.c.html
-rwxr-xr-x    1 root     root        15191 12¿ù 19  2001 array
-rw-r--r--    1 root     root          742 12¿ù 19  2001 array.c
-rwxr-xr-x    1 root     root        13678  9¿ù 20 00:43 asc
-rw-r--r--    1 root     root           38  9¿ù 20 00:42 asc.c
À§´Â "ls -al" ÀÇ °á°ú ÀÌ´Ù. ls -al À» »ç¿ëÇÒ°æ¿ì °¢ ÆÄÀϱÇÇÑ, ÆÄÀÏÀÇ ¼ÒÀ¯ÀÚ, ¼ÒÀ¯±×·ìµî¿¡ ´ëÇÑ »ó¼¼ÇÑ Á¤º¸¸¦ º¼¼ö°¡ ÀÖ´Ù.
ls -al ÀÇ °á°ú °¡Àå ¾ÕÀÇ 10ÀÚ¸®°¡ ÆÄÀÏÀÇ ±ÇÇÑÀ» ³ªÅ¸³½´Ù. ÀÌ 10ÀÚ¸®Áß °¡Àå ¾ÕÀÚ¸®´Â ÆÄÀÏÀÇ Å¸ÀÔ(ÀÏ¹ÝÆÄÀÏ, µð·ºÅ丮, FIFO, ¼ÒÄÏ)À» ¸í½ÃÇϰí, ³ª¸ÓÁö 9ÀÚ¸®°¡ ÆÄÀÏÀÇ ±ÇÇÑÀ» ³ªÅ¸³»´Âµ¥, 3ÀÚ¸®¾¿ ²÷¾î¼­ °¢°¢ "¼ÒÀ¯ÀÚ", "±×·ì", "Other" ¿¡ ´ëÇÑ ±ÇÇÑÀ» ¸í½ÃÇÑ´Ù.
"w"´Â ¾²±â±ÇÇÑ, "r"Àº Àбâ±ÇÇÑ, "x"´Â ¾²±â±ÇÇÑ, "-" ´Â ±ÇÇѾøÀ½À» ³ªÅ¸³½´Ù.
±×·¯¹Ç·Î À§ÀÇ access ÆÄÀÏÀº ¼ÒÀ¯ÀÚÀÎ "root"À¯Àú¿¡°Ô ´ëÇÏ¿© "rwx"(Àбâ, ¾²±â, ½ÇÇà) ±ÇÇÑÀÌ ºÎ¿©µÇ¾î ÀÖ°í, "root"±×·ì¿¡ Æ÷ÇÔµÈ À¯Àú¿Í ±×¹ÛÀÇ À¯Àú¿¡ ´ëÇØ"r-x"(Àбâ, ½ÇÇà) ±ÇÇÑÀÌ ºÎ¿©µÈ´Ù.
access.c ÆÄÀÏÀ» º¸¸é "root" »ç¿ëÀÚ¿¡°Ô "rw-"(Àϱâ, ¾²±â), yundream ±×·ì¿¡ Æ÷ÇÔµÈ À¯Àú¿Í, ±×¹ÛÀÇ À¯Àú¿¡°Ô ´ëÇÏ¿©¼­´Â ´ÜÁö "r--"(Àбâ) ±ÇÇѸ¸ ºÎ¿©µÇ¾î ÀÖÀ½À» ¾Ë¼ö ÀÖ´Ù.
  ¼ÒÀ¯ÀÚ   ±×·ì     Other
 +-+-+-+  +-+-+-+  +-+-+-+
 |R|W|X|  |R|W|X|  |R|W|X|
 +-+-+-+  +-+-+-+  +-+-+-+
  4 2 1    4 2 1    4 2 1 

¿ì¸®´Â ½©»ó¿¡¼­ ÆÄÀϱÇÇѺ¯°æÀ» À§ÇØ ¾Æ·¡¿Í °°Àº ¸í·ÉÀ» »ç¿ëÇÑ´Ù.
[root@localhost test]# chmod 755 test.sh
¼ÒÀ¯ÁÖ¿Í ±×·ìÀÇ º¯°æÀ» À§Çؼ­´Â ¾Æ·¡¿Í °°Àº ¸í·ÉÀ» »ç¿ëÇÑ´Ù.
[root@localhost test]# chown yundream.cvs test.sh
Linux »ó¿¡¼­´Â chown À» ÀÌ¿ëÇÏ¿© ÆÄÀÏ¿¡ ´ëÇÑ ¼ÒÀ¯ÁÖ¿Í ±×·ìÀ» µ¿½Ã¿¡ º¯°æÇÒ¼ö ÀÖÁö¸¸ ´Ù¸¥ Unix ¿¡¼­´Â ±×·ìº¯°æÀ» À§Çؼ­ "chgrp"¸¦ »ç¿ëÇØ¾ß¸¸ ÇÒ°ÍÀÌ´Ù.
C ¿¡¼­´Â ÆÄÀϱÇÇÑ º¯°æÀ» À§Çؼ­ chmod(2), ¼ÒÀ¯ÁÖ/±×·ì º¯°æÀ» À§Çؼ­ chown(2) ÇÔ¼ö¸¦ Á¦°øÇÑ´Ù.

¿¹Á¦ : mychown
#include <sys/types.h>
#include <pwd.h>
#include <unistd.h>

int main(int argc, char **argv)
{
    struct passwd *my_pass;

    my_pass = getpwnam(argv[1]);
    if (my_pass == NULL)
    {
        printf("%s À¯Àú°¡ ¾øÀ½\n", argv[1]);
        exit(0);
    }
    printf("%s : %d\n", argv[1], my_pass->pw_uid, my_pass->pw_gid);
    if (chown(argv[2], my_pass->pw_uid, my_pass->pw_gid) !=0)
    {
        perror("error : ");
    }
}

ÇÁ·Î±×·¥ÀÌ ÇÏ´Â ÀÏÀº °£´ÜÇÏ´Ù. ù¹øÂ° ¾Æ±Ô¸ÕÆ®´Â ±×·ì±ÇÇÑÀ» º¯°æÇÒ À¯ÀúÀÇ ID À̰í, µÎ¹øÂ° ¾Æ±Ô¸ÕÆ®´Â ±ÇÇÑÀ» º¯°æÇÒ ÆÄÀÏ À̸§ÀÌ´Ù.
ÇÁ·Î±×·¥À» ½ÇÇàÇϸé ÇØ´çÆÄÀÏÀÇ ¼ÒÀ¯ÁÖ¿Í ¼ÒÀ¯±×·ìÀÌ º¯°æµÇ°í, ÆÄÀϱÇÇÑÀÌ 664 ·Î º¯°æµÉ°ÍÀÌ´Ù.
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.