😎 κ³΅λΆ€ν•˜λŠ” μ§•μ§•μ•ŒνŒŒμΉ΄λŠ” μ²˜μŒμ΄μ§€?

[파일 정보와 κΆŒν•œ] 파일의 μ ‘κ·Ό κΆŒν•œ 및 λ³€κ²½ with 링크 λ³Έλ¬Έ

πŸ‘©‍πŸ’» IoT (Embedded)/Raspberry Pi

[파일 정보와 κΆŒν•œ] 파일의 μ ‘κ·Ό κΆŒν•œ 및 λ³€κ²½ with 링크

μ§•μ§•μ•ŒνŒŒμΉ΄ 2024. 1. 6. 00:13
728x90
λ°˜μ‘ν˜•

<μ„œμ˜μ§„ λ‹˜μ˜ 사물인터넷을 μœ„ν•œ λ¦¬λˆ…μŠ€ ν”„λ‘œκ·Έλž˜λ° with λΌμ¦ˆλ² λ¦¬νŒŒμ΄ μ„œμ μ„ μ°Έκ³ ν•΄μ„œ μž‘μ„±ν•˜μ˜€μŠ΅λ‹ˆλ‹€ :-)>

 

⭐ ν•˜λ“œ 링크와 심볼릭 링크

링크 : ν•΄λ‹Ή νŒŒμΌμ„ λ‹€λ₯Έ κ²ƒμœΌλ‘œ μ—°κ²°ν•΄μ„œ μ‚¬μš©ν•˜λŠ” κ°œλ…

ν•˜λ“œ 링크 : κ°•ν•˜κ²Œ μ—°κ²°λ˜μ–΄ μžˆλŠ” 것, ν•˜λ‚˜μ˜ 파일이 두 개의 μ΄λ¦„μœΌλ‘œ λΆˆλ¦°λ‹€κ³  μƒκ°ν•˜λ©΄ 이해가 쉽닀

μ–΄λ–€ μ΄λ¦„μœΌλ‘œ νŒŒμΌμ„ μˆ˜μ •ν•˜λ“  원본 νŒŒμΌμ— μ ‘κ·Ό 및 μˆ˜μ •μ΄ κ°€λŠ₯ν•˜λ‹€

심볼링 링크 : μ•½ν•˜κ²Œ μ—°κ²°λ˜μ–΄ μžˆλŠ” 것, νŒŒμΌμ— λŒ€ν•œ 간접적인 ν¬μΈν„°λ‘œ μ‹€μ œ νŒŒμΌμ— λŒ€ν•œ 경둜λ₯Ό μ €μž₯ν•œλ‹€

μœˆλ„μš°μ˜ λ°”λ‘œκ°€κΈ°μ™€ λΉ„μŠ·ν•œ κ°œλ…μ‘λ‘œ 원본 파일과 링크 파일이 λ”°λ‘œ μ‘΄μž¬ν•˜λ―€λ‘œ 각각 μ°Έκ³ ν•  수 μžˆλ‹€

ν•˜λ“œ 링크
: νŒŒμΌμ— λŒ€ν•΄ 같은 μ•„μ΄λ…Έλ“œλ₯Ό 가진닀
μ–΄λ–€ 파일둜 μ ‘κ·Όν•˜λ“  λ™μΌν•œ 파일둜 κ°„μ£Όλ˜κ³ , 같은 μ•„μ΄λ…Έλ“œ λΈ”λ‘μ—μ„œλ§Œ μ‚¬μš©ν•  수 있기 λ•Œλ¬Έμ— 단일 파일 μ‹œμŠ€ν…œ μ—μ„œλ§Œ μ‚¬μš©μ΄ κ°€λŠ₯ν•˜λ‹€
심볼릭 링크
: 원본 파일 μœ„μΉ˜μ— λŒ€ν•œ μœ„μΉ˜(μ•„μ΄λ…Έλ“œ)λ§Œμ„ μ €μž₯ν•˜κ³  있기 λ•Œλ¬Έμ— μ•„μ΄λ…Έλ“œμ™€ 데이터가 λ”°λ‘œ μ‘΄μž¬ν•œλ‹€

 

β˜‘οΈ ln λͺ…λ Ήμ–΄λŠ” ν•˜λ“œ 링크와 심볼릭 링크 λͺ¨λ‘ 지원함

ln [-s] 원본_파일λͺ… λ§ν¬λ˜λŠ”_이름

심볼릭 링크된 νŒŒμΌμ„ ls -l 둜 확인해보면 원본 νŒŒμΌμ„ 가리킀고 μžˆλ‹€

ν•˜λ“œ 링크된 νŒŒμΌμ€ 1.txt νŒŒμΌμ΄λ‚˜ 2.txt 파일 λͺ¨λ‘ 같은 μ•„μ΄λ…Έλ“œλ₯Ό 가리킀고, 링크 μˆ˜κ°€ μ¦κ°€ν•˜μ˜€μœΌλ―€λ‘œ 링크 μˆ˜κ°€ 2 가리킨닀

echo λͺ…λ Ήμ–΄ μ‚¬μš©ν•˜μ—¬ 2.txt νŒŒμΌμ— λ‚΄μš©μ„ μΆ”κ°€ν•˜λ©΄ 1.txt 파일의 크기와 λ‚΄μš©μ΄ 동일해짐을 확인할 수 μžˆλ‹€

touch 1.txt
ln 1.txt 2.txt
ln -s 1.txt 3.txt
ls -il [1-3].txt

echo "123" >> 2.txt
more 1.txt
ls -il [1-3].txt

 

⭐ 파일의 μ ‘κ·Ό κΆŒν•œ λ³€κ²½

β˜‘οΈ chmod

chmod λͺ…λ Ήμ–΄μ˜ μΈμˆ˜μ— 파일의 μ ‘κ·Ό κΆŒν•œμ„ μ„€μ •ν•˜λŠ”λ°, 파일 μ ‘κ·Ό κΆŒν•œμ„ μ„€μ •ν•˜λŠ” 방법은 λ¬Έμžμ—΄μ„ μ΄μš©ν•˜λŠ”  방법과 8μ§„μˆ˜ μ΄μš©ν•˜κΈ°

λ¬Έμžμ—΄μ„ μ΄μš©ν•œ κΆŒν•œμ„€μ •
u(user/owner) : μ†Œμœ μž, g(group) : κ·Έλ£Ή, o(others) : λ‹€λ₯Έ μ‚¬λžŒ, a(all) : λͺ¨λ“  μ‚¬λžŒ
+ : κΆŒν•œ μΆ”κ°€, - : κΆŒν•œ μ‚­μ œ
r(read) : 읽기, w(write) : μ“°κΈ°, x(execute) : μ‹€ν–‰, s(set-user-ID/set-group-ID)

chmod λ³€κ²½ν• _μ‚¬μš©μžλ©΄ 파일λͺ…
chgrp λ³€κ²½ν• _κ·Έλ£Ήλͺ… 파일λͺ…

 

ls -l 2.txt
sudo chmod ug+x 2.txt
ls -l 2.txt

 

 

β˜‘οΈ 파일 정보 좜λ ₯ stat

λ¦¬λˆ…μŠ€μ—μ„œ 파일 에 λŒ€ν•œ 정보λ₯Ό μ•Œκ³  싢은 경우

ν˜„μž¬ 파일의 이름, 크기, μ‚¬μš©ν•˜λŠ” λΈ”λ‘μ˜ 수, μ•„μ΄λ…Έλ“œμ— λŒ€ν•œ 정보 λ“± λ‹€μ–‘ν•œ 정보λ₯Ό 좜λ ₯ν•œ

stat {파일λͺ…}+

 

⭐ ν˜„μž¬ 파일의 κΆŒν•œμ„ λ³€κ²½ν•˜κΈ°

// ν˜„μž¬ 파일의 κΆŒν•œμ„ λ³€κ²½ν•˜λŠ” μ½”λ“œ
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>

int main(int argc, char **argv) {
    struct stat statbuf;

    if (argc < 3) {
        fprintf(stderr, "Usage: %s file1 file2\n", argv[0]);
        return -1;
    }

    // 1) νŒŒμΌμ— 쑴재 여뢀에 λŒ€ν•œ 정보λ₯Ό κ°€μ Έμ˜¨λ‹€
    if (stat(argv[1], &statbuf) < 0) {
        perror("stat");
        return -1;
    }

    // 2) chmod ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•΄μ„œ νŒŒμΌμ— set-grout-ID λ₯Ό μ„€μ •ν•˜κ³  그룹의 μ‹€ν–‰ κΆŒν•œμ„ ν•΄μ œν•œλ‹€
    if (chmod(argv[1], (statbuf.st_mode & ~S_IXGRP) | S_ISGID) < 0) {
        perror("chmod");
        return -1;
    }

    // 3) 8μ§„μˆ˜ μ΄μš©ν•΄μ„œ 파일의 κΆŒν•œμ„ 644("rw-r--r--") μ ˆλŒ“κ°’μœΌλ‘œ μ„€μ •ν•œλ‹€
    if (chmod(argv[2], S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH) < 0) {
        perror("chmod");
        return -1;
    }
    // => λΉŒλ“œν•΄μ„œ μ‹€ν–‰ν•˜κΈ° μ „ 4.txt μ‹€ν–‰ κΆŒν•œμ„ μ£Όκ³  μ‹€ν–‰ν•˜κΈ°

    return 0;
}

/*
gani@gani:~/raspi/File $ umask 0022
gani@gani:~/raspi/File $ gcc -o chmod chmod.c
gani@gani:~/raspi/File $ chmod g+x 4.txt
gani@gani:~/raspi/File $ ls -l 4.txt 5.txt
-rw-r-xr-- 1 gani gani 0  1μ›”  5일  23:53 4.txt
--w-r--rw- 1 gani gani 0  1μ›”  5일  23:54 5.txt
gani@gani:~/raspi/File $ ./chmod 4.txt 5.txt
gani@gani:~/raspi/File $ ls -l 4.txt 5.txt
-rw-r-Sr-- 1 gani gani 0  1μ›”  5일  23:53 4.txt
-rw-r--r-- 1 gani gani 0  1μ›”  5일  23:54 5.txt

첫 번째 νŒŒμΌμ€ 그룹의 set-grout-ID κ°€ μ„€μ •λ˜κ³  μ‹€ν–‰ κΆŒν•œμ΄ 제거됨
두 번째 νŒŒμΌμ€ 644 κΆŒν•œμœΌλ‘œ μ„€μ •λ˜μ–΄ 있음
*/
umask 0022
gcc -o chmod chmod.c
chmod g+x 4.txt
ls -l 4.txt 5.txt

./chmod 4.txt 5.txt
ls -l 4.txt 5.txt

728x90
λ°˜μ‘ν˜•
Comments