240606 AWS

PangE·2024년 6월 6일

교안 103~110

리눅스 파일 시스템 - 하드 링크와 소프트 링크

리눅스 파일 스스템은 유니스 계열의 파일 시스템에서 사용하는 inode라는 자료구조를 사용하는데 모든 디렉터리와 파일은 이 inode를 한 개씩 가지고 있다. inode에는 파일의 허가권, 소유권, 파일의 데이터가 저장되는 실제 위치 등의 중ㅇ요한 정보가 저장된다.
그러므로 inode는 파일의 내용이 저장되는 메모리 번지를 가르키는 주소이며 우리가 리눅스 시스템에서 보는 파일은 이 inode에 연결되어 관리되는 형태라고 생각하면 된다.
리눅스에서도 윈도우의 바로 가기와 비슷한 개념이 있는데 이를 리눅스 링크라고 한다. 리눅스의 링크에는 하드링크(Hard Link)와 소프트링크(Soft Link) 두가지로 나누어지며 소프트 ㄹ이크는 심볼릭링크 (Symbolic Link)라고도 한다.

  • 하드링크(Hard Link)
    -원본 파일과 동일한 inode 번호와 허가권을 가지며 디렉터리에는 링크할수 없고 자원을 고유하면서 데이터를 안전하게 관리하고자 할 때 사용
    -하드 링크는 원본 파일과 동일한 inode를 직접 가르키므로 원본 파일이 삭제되더라도 파일 데이터가 존재한다면 원본 파일에 접근이 가능함
    -하드 링크는 파일만 참조 가능하며 디렉터리는 참조가 불가능함
    -동일한 파일 시스템에서만 하드 링크가 가능함
  • 소프트 링크(Soft Link) - 심볼릭 링크(Symbolic Link):
    -심볼릭링크를 생서하면 또 다른 inode를 생서해서 이를 참조하게 됨
    -심볼릭 링크는 하드 링크의 단점을 보완하기 위해서 나온 개념으로 파일 시스템이 달라도 링크 할 수 있고파일ㄹ과 디렉터리 모두에 링크가 가능함
    -원본 파일과 심볼릭 링크 파일은 서롱 inode 번호와 파일 허가권이 다름
    -원본 파일의 inode를 참조하는 것이 아니라 원본 파일의 데이터 경로만 참조하기 때문에 원보 팡일이 삭제되면 심볼릭 링크는 사용 할 수없음

# stat는 ls로 표시되지 않은 상세정보를 확인할때 사용

# ln은링크 파일을 만드는 명령으로 옵션이 없으면 하드 링크 파일을 생성함

$ cp file01.txt link.txt
$ ln link.txt link_hard.txt
파일의 하드 링크를 생성하고 다음과 같이 파일 상세 정보를 확인하면 원본 파일과 하
드 링크한 파일의 Inode 값이 같을 것을 확인할 수 있다.
파일을 복사하면 물리적으로 2개의 파일이 되지만 하드 링크를 하면 원본 파일과 동일
한 파일 데이터를 가리키는 링크 파일을 하나 만든 것 뿐이며 물리적으로 하나의 파일
데이터를 가리키게 된다.

# 하드 링크의 원본 파일인 link.txt 파일 삭제

$ rm link.txt

# 원본 파일을 삭제했지만 하드 링크 파일의 내용을 조회할 수 있음

$ cat link_hard.txt

# file01.txt를 복사하고 ln의 -s 옵션을 이용해 심볼릭 링크 생성

cp file01.txt slink.txt
ln -s slink.txt slink_soft.txt

심볼릭 링크는 새로운 inode를 생성해 원본 파일을 가리키게ㅔ 되므로 원본 파일인 slink.txt 파일을 삭제하게 되면 심볼릭 링크는 사용할 수 없다.

$ mkdir link_test
$ cp ./touch* ./link_test

$ ln -s link_test slink

# 원본 파일이 삭제된 심볼릭 링크 삭제

$ rm slink_soft.txt

파일 시스템 - 파일 권한 관리

리눅스 운영체제는 사용자와 리소스에 대한 권한을 관리하며 사용자를 사용자와 그 사
용자가 속한 사용자 그룹으로 나눠 권한을 관리한다.
리눅스에서 파일 및 디렉터리를 생성하면 소유자 권한을 가지며 사용자에 따라서 접근
할 수 있는 권한이 달라진다. 또한 파일 및 디렉터리는 소유자, 소유자 그룹, 전체 사용
자에 대해서 읽고, 쓰고, 실행할 수 있는 권한을 관리한다.
리눅스에서 사용자 계정은 root(관리자)와 일반 사용자로 구분하며 아래와 같은 사용자
계정이 있다.

▪ 루트 계정 :
-일반 사용자 계정 생성과 권한을 부여하고 비밀번호를 바꿀 수 있음
-모든 권한을 가진 슈퍼 관리자 계정
▪ 시스템 계정 :
-리눅스 설치시 시스템 관리를 위해서 기본적으로 생성되는 계정
-시스템 계정은 여러 가지가 있으며 일반적으로 로그인 할 수 없음
▪ 사용자 계정 :
-리눅스를 사용하는 일반 사용자를 위한 계정
-본인이 생성한 파일의 소유자 권한을 가지며 root 권한을 가진 파일은
실행하거나 볼 수가 없고 root로부터 권한을 부여 받아야 함

# id는 현재 사용자의 uid, gid, 그룹 정보를 확인하는 명령

$ id
uid=1000(ubuntu) gid=1000(ubuntu)
groups=1000(ubuntu),4(adm),20(dialout),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(
video),46(plugdev),119(netdev),120(lxd),999(docker)

# users와 who는 현재 호스트에 로그인한 모든 사용자를 출력하는 명령

$ users
root ubuntu ubuntu
$ who
ubuntu pts/0 2023-10-19 01:17 (115.92.164.155)
ubuntu pts/1 2023-10-19 01:17 (115.92.164.155)
root pts/2 2023-10-19 07:42 (13.209.1.61)

# 현재 로그인한 사용자명을 출력하는 명령

$ whoami
$ logname
ubuntu

0개의 댓글