๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
6. CS ๊ธฐ์ดˆ ๐Ÿ“š/Linux & Unix ๐Ÿง

[Linux/Unix][6-2] $ ./2 test.txt test.bak

by lxvxxu 2025. 10. 21.
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>

int main(int argc, char *argv[])
{
    int fd1, fd2;
    int n;
    char buf[BUFSIZ];

    fd1 = open(argv[1], O_RDONLY);
    fd2 = open(argv[2], O_WRONLY | O_CREAT, 0644);

    while ((n = read(fd1, buf, BUFSIZ)) > 0)
        write(fd2, buf, n);

    close(fd1);
    close(fd2);

    return 0;
}

 

2) ์ด ์ฝ”๋“œ๊ฐ€ ํ•˜๋Š” ์ผ (๋™์ž‘ ์„ค๋ช…)

  • open(argv[1], O_RDONLY)
    → ์ฒซ ๋ฒˆ์งธ ์ธ์ž๋กœ ๋ฐ›์€ ์ž…๋ ฅ ํŒŒ์ผ์„ ์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ ์—ฐ๋‹ค.
  • open(argv[2], O_WRONLY | O_CREAT, 0644)
    → ๋‘ ๋ฒˆ์งธ ์ธ์ž๋กœ ๋ฐ›์€ ์ถœ๋ ฅ ํŒŒ์ผ์„ ์“ฐ๊ธฐ ์ „์šฉ์œผ๋กœ ์—ฐ๋‹ค. ์—†์œผ๋ฉด 0644 ๊ถŒํ•œ์œผ๋กœ ์ƒˆ๋กœ ๋งŒ๋“ ๋‹ค. (์ด๋ฏธ ์žˆ์œผ๋ฉด “์—ด๊ธฐ๋งŒ” ํ•˜๊ณ  ์ž๋ฅด์ง„ ์•Š์Œ)
  • read → write ๋ฃจํ”„
    → ์ž…๋ ฅ ํŒŒ์ผ์—์„œ ์ตœ๋Œ€ BUFSIZ(stdio๊ฐ€ ์ •ํ•ด๋‘” ์ ๋‹นํ•œ ํฌ๊ธฐ)๋งŒํผ ์ฝ์–ด์„œ, ์ฝํžŒ ๋ฐ”์ดํŠธ ์ˆ˜ n๋งŒํผ ์ถœ๋ ฅ ํŒŒ์ผ์— ์“ด๋‹ค. 0์ด ๋‚˜์˜ค๋ฉด EOF๋ผ ๋ณต์‚ฌ ์ข…๋ฃŒ.
  • close
    → ๋‘ ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ๋ฅผ ๋‹ซ๊ณ  ์ข…๋ฃŒ.

๊ฒฐ๋ก ์ ์œผ๋กœ ๊ฐ„๋‹จํ•œ ํŒŒ์ผ ๋ณต์‚ฌ ํ”„๋กœ๊ทธ๋žจ์ด์•ผ.


3) ์›๋ณธ ์ฝ”๋“œ์˜ ๋ฌธ์ œ/์ฃผ์˜์ 

  1. ์—๋Ÿฌ ์ฒดํฌ๊ฐ€ ์—†์Œ
    • argc ํ™•์ธ์ด ์—†์–ด ์ธ์ž ๊ฐœ์ˆ˜๊ฐ€ ๋ถ€์กฑํ•ด๋„ ๊ทธ๋Œ€๋กœ ์ ‘๊ทผ(์„ธ๊ทธํดํŠธ ์œ„ํ—˜).
    • open/read/write/close ๋ฐ˜ํ™˜๊ฐ’์„ ํ™•์ธํ•˜์ง€ ์•Š์Œ → ํŒŒ์ผ์„ ๋ชป ์—ด๊ฑฐ๋‚˜, ์ฝ๊ธฐ/์“ฐ๊ธฐ ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๋„ ๋ชจ๋ฆ„.
  2. ๋ถ€๋ถ„ ์“ฐ๊ธฐ(partial write) ๋ฏธ์ฒ˜๋ฆฌ
    • write๋Š” ์š”์ฒญํ•œ ๋ฐ”์ดํŠธ ์ „๋ถ€๋ฅผ ํ•ญ์ƒ ์“ฐ๋Š” ๊ฒŒ ์•„๋‹˜. ์‹ ํ˜ธ(EINTR)๋‚˜ ๊ธฐํƒ€ ์ด์œ ๋กœ ์ผ๋ถ€๋งŒ ์“ธ ์ˆ˜ ์žˆ์–ด. ๊ทธ๋Ÿผ ๋‚จ์€ ๋งŒํผ์„ ๋‹ค์‹œ ์จ์•ผ ํ•จ.
  3. ๋Œ€์ƒ ํŒŒ์ผ์„ ์ž๋ฅด์ง€ ์•Š์Œ(O_TRUNC ๋ˆ„๋ฝ)
    • fd2๋ฅผ ์—ด ๋•Œ O_TRUNC๊ฐ€ ์—†์–ด์„œ ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ํŒŒ์ผ์ด ๋” ๊ธธ์—ˆ๋‹ค๋ฉด ์•ž๋ถ€๋ถ„๋งŒ ์ƒˆ ๋ฐ์ดํ„ฐ๋กœ ๋ฎ์ด๊ณ  ๋’ท๋ถ€๋ถ„์— ์ด์ „ ๋‚ด์šฉ์ด ๋‚จ๋Š”๋‹ค.
    • “์ •ํ™•ํžˆ ๊ฐ™์€ ๋‚ด์šฉ์œผ๋กœ ๋ณต์‚ฌ”ํ•˜๋ ค๋ฉด O_TRUNC๋ฅผ ๋„ฃ๋Š” ๊ฒŒ ์•ˆ์ „.
  4. ๋™์ผ ํŒŒ์ผ ์ž์ฒด ๋ณต์‚ฌ ๋ฐฉ์ง€ ์—†์Œ
    • argv[1]์™€ argv[2]๊ฐ€ ๊ฐ™์€ ํŒŒ์ผ(๊ฐ™์€ device+inode)์ด๋ฉด, ์—ด๊ณ  ์“ฐ๋Š” ์ˆœ๊ฐ„ ์›๋ณธ์„ ์Šค์Šค๋กœ ๋ฎ์–ด๋ฒ„๋ฆฌ๋Š” ํ™ฉ๋‹นํ•œ ์ƒํ™ฉ ๋ฐœ์ƒ ๊ฐ€๋Šฅ. fstat๋กœ ๋™์ผ์„ฑ ์ฒดํฌ๊ฐ€ ์ข‹์Œ.
  5. ๊ถŒํ•œ/umask ์ดํ•ด ํ•„์š”
    • 0644๋Š” “์š”์ฒญ ๊ถŒํ•œ”; ์‹ค์ œ ์ƒ์„ฑ ๊ถŒํ•œ์€ umask์— ์˜ํ•ด ๋” ์ œํ•œ๋  ์ˆ˜ ์žˆ์Œ.

4) ๊ฐœ์„  ๋ฒ„์ „: ์—๋Ÿฌ ์ฒ˜๋ฆฌ + ์•ˆ์ „ ์žฅ์น˜ ํฌํ•จ

์•„๋ž˜๋Š” ์‹ค๋ฌด์ ์œผ๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ๋‹ค๋“ฌ์€ ๋ฒ„์ „์ด์•ผ.

  • ์ธ์ž ํ™•์ธ
  • open ์—๋Ÿฌ ์ฒ˜๋ฆฌ
  • ๋Œ€์ƒ ํŒŒ์ผ O_TRUNC
  • ๋ถ€๋ถ„ ์“ฐ๊ธฐ ์ฒ˜๋ฆฌ
  • EINTR ๋Œ€์‘
  • ๋™์ผ ํŒŒ์ผ(๊ฐ™์€ device+inode) ๋ณต์‚ฌ ๊ธˆ์ง€
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <stdlib.h>

static ssize_t write_all(int fd, const void *buf, size_t n)
{
    const char *p = (const char *)buf;
    size_t left = n;

    while (left > 0) {
        ssize_t w = write(fd, p, left);
        if (w < 0) {
            if (errno == EINTR) continue; // interrupted by signal: retry
            return -1;                     // real error
        }
        p    += w;
        left -= w;
    }
    return (ssize_t)n;
}

int main(int argc, char *argv[])
{
    if (argc != 3) {
        fprintf(stderr, "Usage: %s <src> <dst>\n", argv[0]);
        return 1;
    }

    int fd1 = open(argv[1], O_RDONLY);
    if (fd1 < 0) {
        fprintf(stderr, "open src '%s' failed: %s\n", argv[1], strerror(errno));
        return 1;
    }

    // O_TRUNC: ๋Œ€์ƒ ํŒŒ์ผ์ด ์ด๋ฏธ ์žˆ์œผ๋ฉด ๊ธธ์ด๋ฅผ 0์œผ๋กœ ์ž˜๋ผ์„œ '์ •ํ™•ํžˆ ๊ฐ™์€ ํฌ๊ธฐ'๊ฐ€ ๋˜๊ฒŒ ํ•จ
    int fd2 = open(argv[2], O_WRONLY | O_CREAT | O_TRUNC, 0644);
    if (fd2 < 0) {
        fprintf(stderr, "open dst '%s' failed: %s\n", argv[2], strerror(errno));
        close(fd1);
        return 1;
    }

    // ๊ฐ™์€ ํŒŒ์ผ์ธ์ง€ ๊ฒ€์‚ฌ (device + inode)
    struct stat st_src, st_dst;
    if (fstat(fd1, &st_src) == 0 && fstat(fd2, &st_dst) == 0) {
        if (st_src.st_dev == st_dst.st_dev && st_src.st_ino == st_dst.st_ino) {
            fprintf(stderr, "Refusing to copy a file onto itself.\n");
            close(fd1);
            close(fd2);
            return 1;
        }
    }

    char buf[BUFSIZ];
    for (;;) {
        ssize_t r = read(fd1, buf, sizeof(buf));
        if (r == 0) break;            // EOF
        if (r < 0) {
            if (errno == EINTR) continue;  // retry on signal
            fprintf(stderr, "read failed: %s\n", strerror(errno));
            close(fd1);
            close(fd2);
            return 1;
        }
        if (write_all(fd2, buf, (size_t)r) < 0) {
            fprintf(stderr, "write failed: %s\n", strerror(errno));
            close(fd1);
            close(fd2);
            return 1;
        }
    }

    if (close(fd1) < 0) {
        fprintf(stderr, "close(src) failed: %s\n", strerror(errno));
        // ๊ณ„์† ์ง„ํ–‰ (์ด๋ฏธ ๋ณต์‚ฌ๋ณธ์€ ๋Œ€๋ถ€๋ถ„ ์™„์„ฑ๋จ)
    }
    if (close(fd2) < 0) {
        fprintf(stderr, "close(dst) failed: %s\n", strerror(errno));
        return 1;
    }

    return 0;
}
 
 
์ปดํŒŒ์ผ ํŒ
gcc -Wall -Wextra -O2 -o 2 copy.c
# -Wall -Wextra : ๊ฒฝ๊ณ ๋ฅผ ๋„“๊ฒŒ ์ผฌ(ํ’ˆ์งˆ↑)
# -O2           : ์ตœ์ ํ™”(์†๋„/์šฉ๋Ÿ‰ ์ ๋‹นํžˆ)
 
-Wall
 

 

 

[Linux/Unix] ๋ฆฌ๋ˆ…์Šค/์œ ๋‹‰์Šค ์‹œ์Šคํ…œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์ดํ•ด

๐Ÿ“˜ 1[02] ๋ฆฌ๋ˆ…์Šค์œ ๋‹‰์Šค์‹œ์Šคํ…œํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜์ดํ•ด๋ฆฌ๋ˆ…์Šค/์œ ๋‹‰์Šค ์‹œ์Šคํ…œ ๊ตฌ์กฐ์™€ ํ‘œ์ค€, ์‹œ์Šคํ…œ ํ˜ธ์ถœ๊ณผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ•จ์ˆ˜, man ํŽ˜์ด์ง€ ์‚ฌ์šฉ๋ฒ•๐Ÿงญ 2[02] vivi ์—๋””ํ„ฐ ์‚ฌ์šฉ๋ฒ• — ๋ชจ๋“œ, ๋ช…๋ น์–ด, ํŽธ์ง‘, ์ €์žฅ ๋“ฑ

lxvxxu.tistory.com

 

https://lxvxxu.tistory.com/155

 

[Linux/Unix] 04-3. Inode ์ •๋ณด ์ถœ๋ ฅ

#include #include #include int main() { DIR *dp; struct dirent *dent; dp = opendir("."); while ((dent = readdir(dp))) { printf("Name : %s ", dent->d_name); printf("Inode : %d\n", (int)dent->d_ino); } closedir(dp);} ์ข‹์•„! ์‚ฌ์ง„ ์† ์ฝ”๋“œ๋Š” ํ˜„์žฌ ๋””

lxvxxu.tistory.com

 

 

 

 


 

5) $ ./2 test.txt test.bak ์„ ์‹คํ–‰ํ•˜๋ฉด?

  • ์›๋ณธ ์ฝ”๋“œ(์‚ฌ์ง„ ๋ฒ„์ „)
    • test.txt ๋‚ด์šฉ์„ ์ฝ์–ด test.bak์— ์”๋‹ˆ๋‹ค.
    • test.bak๊ฐ€ ์—†์œผ๋ฉด 0644 ๊ถŒํ•œ์œผ๋กœ ์ƒˆ๋กœ ๋งŒ๋“ค์–ด ๋ณต์‚ฌ๋จ.
    • test.bak๊ฐ€ ์ด๋ฏธ ์žˆ์—ˆ๋‹ค๋ฉด ์•ž๋ถ€๋ถ„์€ ์ƒˆ ๋‚ด์šฉ์œผ๋กœ ๋ฎ์ง€๋งŒ, ์›๋ž˜ ํŒŒ์ผ์ด ๋” ๊ธธ์—ˆ์„ ๊ฒฝ์šฐ ๋’ท๋ถ€๋ถ„์˜ ์ด์ „ ๋‚ด์šฉ์ด ๋‚จ์Šต๋‹ˆ๋‹ค. (์™œ๋ƒ๋ฉด O_TRUNC๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ)
  • ๊ฐœ์„  ์ฝ”๋“œ(์œ„ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฒ„์ „)
    • test.bak์ด ์—†์œผ๋ฉด ๋งŒ๋“ค๊ณ , ์žˆ์œผ๋ฉด ๊ธธ์ด๋ฅผ 0์œผ๋กœ ์ž˜๋ผ(O_TRUNC) test.txt์™€ ๋”ฑ ๊ฐ™์€ ๋‚ด์šฉ์ด ๋˜๋„๋ก ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.
    • ์ธ์ž ๋ถ€์กฑ/ํŒŒ์ผ ์—ด๊ธฐ ์‹คํŒจ/์ฝ๊ธฐ·์“ฐ๊ธฐ ์˜ค๋ฅ˜/๋™์ผ ํŒŒ์ผ ๋ณต์‚ฌ ์‹œ๋„๋ฅผ ์ „๋ถ€ ๊ฐ์ง€ํ•ด ์นœ์ ˆํžˆ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

ํ•„์š”ํ•˜๋ฉด O_EXCL์„ ๋”ํ•ด O_CREAT|O_EXCL๋กœ “์ด๋ฏธ ์กด์žฌํ•˜๋ฉด ์‹คํŒจ(๋ฎ์–ด์“ฐ๊ธฐ ๊ธˆ์ง€)” ์ •์ฑ…์œผ๋กœ ๋ฐ”๊ฟ€ ์ˆ˜๋„ ์žˆ์–ด. ๋˜ fsync(fd2)๋กœ ๋””์Šคํฌ ๋™๊ธฐํ™”๊นŒ์ง€ ๋ณด์žฅํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋ณต์‚ฌ ๋์— ํ•œ ๋ฒˆ ํ˜ธ์ถœํ•ด ์ฃผ๋ฉด ์ข‹์•„.

 

 

 

 


์ข‹์•„, 0644 ๊ถŒํ•œ์„ ๊น”๋”ํ•˜๊ฒŒ ์ชผ๊ฐœ์„œ ์„ค๋ช…ํ•ด๋ณผ๊ฒŒ.

0644๊ฐ€ ๋œปํ•˜๋Š” ๊ฒƒ

  • 8์ง„์ˆ˜ ํ‘œ๊ธฐ: ์•ž์˜ 0์€ 8์ง„์ˆ˜(octal)๋ผ๋Š” ๋œป.
  • ๋„ค ์ž๋ฆฌ:
    • 0 → ํŠน์ˆ˜๋น„ํŠธ(SETUID, SETGID, sticky) ์—†์Œ
    • 6 → ์†Œ์œ ์ž(owner) ๊ถŒํ•œ
    • 4 → ๊ทธ๋ฃน(group) ๊ถŒํ•œ
    • 4 → ๊ธฐํƒ€(other) ๊ถŒํ•œ
  • r=4, w=2, x=1 ์ด๋ผ๋Š” ๊ฐ’ ํ•ฉ์œผ๋กœ ํ‘œํ˜„:
    • 6 = 4(r) + 2(w) = rw-
    • 4 = 4(r) = r--

๊ทธ๋ž˜์„œ 0644 = ์†Œ์œ ์ž rw-, ๊ทธ๋ฃน r--, ๊ธฐํƒ€ r-- ์ด๊ณ , ls -l๋กœ ๋ณด๋ฉด ๋ณดํ†ต:

 
-rw-r--r--

(๋งจ ์•ž์˜ -๋Š” ํŒŒ์ผ ํƒ€์ž…: -(์ผ๋ฐ˜ํŒŒ์ผ), d(๋””๋ ‰ํ„ฐ๋ฆฌ) ๋“ฑ)


ํŒŒ์ผ๊ณผ ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ์˜ ์ฐจ์ด

๊ถŒํ•œ ๋น„ํŠธ์˜ ์˜๋ฏธ๊ฐ€ ํŒŒ์ผ๊ณผ ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ์กฐ๊ธˆ ๋‹ค๋ฅด๊ฒŒ ๋А๊ปด์ ธ:

์ผ๋ฐ˜ ํŒŒ์ผ์— 0644

  • ์†Œ์œ ์ž: ์ฝ๊ธฐ/์“ฐ๊ธฐ ๊ฐ€๋Šฅ (์ˆ˜์ • ๊ฐ€๋Šฅ)
  • ๊ทธ๋ฃน/๊ธฐํƒ€: ์ฝ๊ธฐ๋งŒ ๊ฐ€๋Šฅ (์ˆ˜์ • ๋ถˆ๊ฐ€)
  • ์‹คํ–‰(x) ์—†์Œ: ์‹คํ–‰ ํŒŒ์ผ์ด ์•„๋‹˜ → ์Šคํฌ๋ฆฝํŠธ/๋ฐ”์ด๋„ˆ๋ฆฌ๋กœ ์‹คํ–‰ ์•ˆ ๋จ

๋””๋ ‰ํ„ฐ๋ฆฌ์— 0644 (์ฃผ์˜!)

  • r(์ฝ๊ธฐ): ๋””๋ ‰ํ„ฐ๋ฆฌ ๋ชฉ๋ก์„ ์ฝ์„ ๊ถŒ๋ฆฌ
  • x(์‹คํ–‰): ๋””๋ ‰ํ„ฐ๋ฆฌ ์ง„์ž…/ํƒ์ƒ‰ ๊ถŒ๋ฆฌ(search/traverse)
  • 0644๋Š” x๊ฐ€ ์ „๋ถ€ ๋น ์ ธ์„œ:
    • cd๋กœ ๋“ค์–ด๊ฐ€์ง€ ๋ชปํ•จ
    • ํŒŒ์ผ ์กด์žฌ ์—ฌ๋ถ€ ํ™•์ธ๋„ ์ œํ•œ๋จ
    • ls๋„ ์ œ๋Œ€๋กœ ๋ชป ํ•  ์ˆ˜ ์žˆ์Œ(ํ”Œ๋žซํผ/์ƒํ™ฉ์— ๋”ฐ๋ผ ์—๋Ÿฌ)

→ ๋””๋ ‰ํ„ฐ๋ฆฌ๋Š” ๋ณดํ†ต 0755(r-x r-x r-x)๋‚˜ 0700์ฒ˜๋Ÿผ ์‹คํ–‰(x) ๋น„ํŠธ๋ฅผ ์ผœ์„œ ์”€.


์™œ 0644๊ฐ€ ํ”ํ• ๊นŒ? (umask์™€์˜ ๊ด€๊ณ„)

์ƒˆ ํŒŒ์ผ์˜ ๊ธฐ๋ณธ ๊ถŒํ•œ์€:

  • ํŒŒ์ผ: 0666 & ~umask
  • ๋””๋ ‰ํ„ฐ๋ฆฌ: 0777 & ~umask

์ผ๋ฐ˜์ ์ธ ๊ธฐ๋ณธ umask๊ฐ€ 022๋ผ๋ฉด:

  • ํŒŒ์ผ: 0666 & 0755 = 0644
  • ๋””๋ ‰ํ„ฐ๋ฆฌ: 0777 & 0755 = 0755

๊ทธ๋ž˜์„œ ์ƒˆ๋กœ ๋งŒ๋“  ์ผ๋ฐ˜ ํŒŒ์ผ์ด ๋Œ€์ฒด๋กœ 0644, ๋””๋ ‰ํ„ฐ๋ฆฌ๋Š” 0755์ธ ๊ฒƒ.


์„ค์ •/๋ณ€๊ฒฝ ๋ฐฉ๋ฒ•

์ˆซ์ž ํ‘œ๊ธฐ

 
chmod 0644 file.txt

๊ธฐํ˜ธ ํ‘œ๊ธฐ(๋™๋“ฑ ์˜๋ฏธ)

 
chmod u=rw,go=r file.txt
# ๋˜๋Š”
chmod a=r,u+w file.txt

ํ™•์‹คํžˆ ์‹คํ–‰ ๋น„ํŠธ ์ œ๊ฑฐ

 
chmod a-x file.txt

์ฒดํฌํ•˜๊ธฐ

 
ls -l file.txt
# -rw-r--r--  ... file.txt

stat -c '%a %A %n' file.txt
# 644 -rw-r--r-- file.txt

์‹ค์ „ ํŒ & ํ•จ์ •

  • ์‹คํ–‰ ์Šคํฌ๋ฆฝํŠธ๋Š” 0755์ฒ˜๋Ÿผ ์‹คํ–‰ ๋น„ํŠธ๋ฅผ ์ค˜์•ผ ์‹คํ–‰๋จ:
  •  
    chmod 0755 run.sh
  • ๋ฏผ๊ฐํ•œ ์„ค์ • ํŒŒ์ผ(SSH ํ‚ค ๋“ฑ)์€ ๋„ˆ๋ฌด ๋„“์€ ๊ถŒํ•œ์ด๋ฉด ํ”„๋กœ๊ทธ๋žจ์ด ๊ฑฐ๋ถ€ํ•จ:
  •  
    chmod 0600 ~/.ssh/id_rsa
  • ์‹ฌ๋ณผ๋ฆญ ๋งํฌ์— chmod ํ•ด๋„ ๋ณดํ†ต ๋งํฌ ์ž์ฒด ๊ถŒํ•œ์€ ์˜๋ฏธ ์—†๊ณ , ๋Œ€์ƒ ํŒŒ์ผ ๊ถŒํ•œ์— ์ ์šฉ๋˜๊ฑฐ๋‚˜ ๋ฌด์‹œ๋จ(์‹œ์Šคํ…œ์— ๋”ฐ๋ผ ๋‹ค๋ฆ„).
  • ACL/๋Šฅ๋ ฅ(capabilities) ์ด ์ถ”๊ฐ€๋กœ ์„ค์ •๋œ ํ™˜๊ฒฝ์—์„  ๋‹จ์ˆœ 0644๋งŒ์œผ๋กœ ์ ‘๊ทผ ์ œ์–ด๊ฐ€ ์™„์ „ํžˆ ์„ค๋ช…๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์–ด์š”.
  • ๊ณต์œ  ํ™˜๊ฒฝ์—์„œ 0644๋Š” “๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ฝ๊ธฐ ํ—ˆ์šฉ”์ด๋ฏ€๋กœ, ๋ฏผ๊ฐํ•œ ๋‚ด์šฉ์ด๋ผ๋ฉด 0600์„ ๊ณ ๋ ค.

์š”์•ฝ ํ•œ ์ค„

0644 = ์†Œ์œ ์ž ์ฝ๊ธฐ/์“ฐ๊ธฐ, ๋‚˜๋จธ์ง€๋Š” ์ฝ๊ธฐ๋งŒ, ์‹คํ–‰์€ ์—†์Œ.
์ผ๋ฐ˜ ํŒŒ์ผ์˜ ๊ธฐ๋ณธ ๊ถŒํ•œ์œผ๋กœ ์ ์ ˆํ•˜๊ณ , ๋””๋ ‰ํ„ฐ๋ฆฌ์—” ๋ถ€์ ์ ˆ(๋Œ€์‹  0755๋ฅผ ์‚ฌ์šฉ).