Unix 계열의 시스템에서 권한을 통해 제어하는 대상은 File & Directory 이다.

 

즉, 어떠한 사용자(User)가 파일과 디렉토리에 대해, 어떠한 일을 할 수 있게 하거나, 할 수 없게 하는 것을

 

권한을 지정한다고 한다.

 

파일 읽기 & 쓰기 & 실행 요런 것들의 실행 여부를 지정해 주는 것을 Permission이라고 한다.

 

백문이 불여일견, Unix 계열의 시스템에서 특정 파일의 정보를 보여주는 ls -l 명령으로 파일을 살펴보자.

예시 파일 ls -l perm.txt로 해당 파일의 정보를 출력

해당 정보가 출력 됐을 때, 구분할 섹터는 위 사진과 같이 나눌 수 있다. ( | 로 구분 된 것을 섹터라고 칭하겠다)

 

각 섹터 별로 무슨 의미인지 알아보자.

 

첫 번째 섹터 [ - ]

  • 현재 파일의 타입을 나타낸다. 즉, 위 사진에서 perm.txt 파일은 파일이름에서 유추할 수 있듯이 단순한 text 파일이다.

  • 파일이라면 - 로 표시되고, 만약 파일이 아닌 디렉토리라면 해당 부분은 d로 표시된다.

두 번째 섹터 [ rw- rw- r--] (파일(perm.txt)의 사용자 별 접근 권한)

현재 이런 식으로 rw-rw-r-- 표시 되어 있는데, 이는 다시 rw- | rw- | r-- 세 부분씩 잘라서 봐야 한다.

  • 사진의 중간 섹터를 보면 egoing egoing이라는 것을 볼 수 있는데, 이는 각각 파일(perm.txt)에 해당하는 주인(Owner)과 그룹을 나타낸다.

  • 첫 번째로 오는 rw- 는 파일(perm.txt)의 주인(egoing)이 파일에 대해 행할 수 있는 권한을 뜻한다.

  • 이것을 토대로 다시 해석해 본다면 현재 파일(perm.txt)주인(egoing) 유저는 파일에 대해 r : read, w : write만 할 수 있다는 뜻이다.

  • 마지막 -는 x : execute이며, 해당 파일을 실행할 수 있는지 없는지에 대한 설명이라 볼 수 있다. ( - 로 표시 되어 있으니 실행은 불가)

  • 만약 egoing이라는 유저가 실행 권한까지 있다면 앞의 세 글자는 rwx로 표시될 것이다.

  • 두 번째로 오는 rw-는 파일의 그룹(egoing)의 권한을 뜻한다.
    -> 해당 파일에 대한 그룹은 r : read, w : write 만 가능하며 , x : execute 부분은 -로 표시되었기에 실행 권한은 없음을 뜻한다.

  • 세 번째로 오는 r--는 소유자(Owner)도 아닌 그룹(Group)도 아닌 다른 Other의 파일에 대한 접근 권한을 뜻한다.
    -> 오직 r: read만 가능하며, w & x는 -로 표시된 것으로 보아, OS내 다른 유저는 쓰기 및 실행 권한은 없음을 뜻한다.

 

세 번째 섹터 1?  (네 번째 섹터 0은 파일 크기를 의미한다)

  • 파일 액세스 모드 (두 번째 섹터)와 파일 소유자(Owner) 사이에 특이하게 숫자 1이 적혀있는 것을 볼 수 있다.
  • 여기서 숫자 "1"은 해당 파일의 *하드 링크 수를 의미한다.
  • 일반적으로 리눅스에서 파일을 생성 시에, 해당 파일의 초기 하드 링크 수는 1이며, 새로운 하드 링크를 생성할 때마다 해당 수가 증가한다.

 

*하드 링크

 

하드 링크(Hard Link)란 파일 시스템에서 한 파일에 대해 다른 파일 이름을 더 생성하는 것을 말한다.

따라서 동일한 내용을 가지고 있는 하나의 파일에 대해 다른 파일이름(하드 링크)을 만들면, 하나의 파일이 여러 개의 이름을 가지게 된다.

하드 링크는 원본 파일과 데이터 블록을 공유하므로, 원본 파일과 하드 링크 간에는 실제 데이터 복제가 발생하지 않는다.

어느 하드 링크를 통해 파일을 수정 시에도데이터 블록에 저장된 내용이 변경되기 때문에 다른 모든 하드 링크에서도 동일한 내용을 확인이 가능하다.

예를 들어, 'file1'이라는 파일에 대해 하드 링크인 'link1'과 'link2'를 생성 시에, 세 개의 이름 (file1, link1, link2)이 하나의 *데이터 블록을 가리키게 된다.

이들은 동일한 파일의 여러 이름이며, 데이터 블록을 변경하면 모든 이름에서 동일한 변경이 반영된다


*데이터 블록

 

데이터 블록은 파일시스템에서 파일의 실제 내용을 저장하는 데 사용되는 블록이다.

리눅스 파일 시스템은 하드 디스크와 같은 저장 장치를 효율적으로 사용하고 파일을 관리하기 위한 구조를 제공한다.

파일 시스템은 블록 단위로 데이터를 저장하며, 각 블록은 일정한 크기를 갖는다. 

일반적으로 데이터 블록의 크기는 여러 킬로바이트(KB)로 이루어지며, 파일이 생성될 때, 파일 시스템은 해당 파일의 여러 내용을 여러 데이터 블록에 나누어 저장한다.

예를 들어, 10KB 크기의 파일을 생성한다고 가정해 보자. 파일 시스템은 이 파일을 저장하기 위해 적절한 개수의 데이터 블록을 할당한다.

만약, 4KB 크기의 데이터 블록을 사용한다면 이 10KB 파일은 3개의 데이터 블록에 저장된다. 첫 번째 두 블록은 각각 4KB, 마지막 블록은 2KB로 채워진다.

데이터 블록은 파일의 내용을 저장하는 데에만 사용되는 것이 아니라, 메타데이터( 파일 권한, 소유자, 생성 시간 등)도 저장된다.

이러한 메타데이터 블록과 파일 내용 블록은 파일 시스템의 논리적 구조를 구성하게 된다.

여기에 조금 더 설명을 추가하자면, 원본 파일과 하드 링크는 동일한 데이터 블록을 가리키기 때문에, 파일의 내용을 변경하면

데이터 블록이 수정되고 , 원본 파일과 하드 링크 모두 변경된 내용을 반영하게 된다.

이로 인해 파일들은 서로 동일한 내용을 공유하게 되며, 저장 장치의 공간을 효율적으로 활용할 수 있게 된다.

 

 

 

+ Recent posts