요약

디렉터리는 파일 이름과 파일 자체(위치, 주인, 권한 등)를 이어 주는 목록이다. 도서관 목록 카드처럼, 이름으로 찾으면 책이 어디 있고 누가 빌릴 수 있는지 알려 준다. 폴더 안에 폴더를 두는 트리 구조로 만들면 다른 폴더끼리는 같은 이름을 써도 되고, 파일을 무리 지어 정리할 수 있다. 여러 사용자가 파일을 함께 쓰면 누가 무엇을 할 수 있는지(접근 권한)와 동시에 고칠 때의 다툼을 관리해야 한다.

예시로 보기

모든 파일을 한 목록에 두면, 사용자 A와 B가 둘 다 report.txt를 만들 수 없다. 사용자마다 디렉터리를 하나씩 주면(2단계) 이름 충돌은 사용자 안에서만 피하면 되지만, 한 사용자의 수백 개 파일을 정리할 방법이 없다. 트리 구조는 /user/hong/os/report.txt와 /user/hong/net/report.txt처럼 경로가 다르면 같은 이름도 허락한다.

정확히 말하면

디렉터리는 파일에 대한 정보(속성, 위치, 소유)를 담고, 파일 이름과 파일을 잇는다. 디렉터리 자체도 운영체제가 소유한 파일이다. 디렉터리가 파일마다 적는 정보는 네 묶음이다.

정보 항목
기본 파일 이름(한 디렉터리 안에서 유일), 파일 종류, 파일 조직
주소 저장된 장치(볼륨), 시작 주소, 사용 크기, 할당 크기(최대)
접근 제어 주인(다른 사용자에게 권한을 주거나 빼앗을 수 있음), 허가된 사용자별 정보, 허락된 동작(읽기·쓰기·실행·네트워크 전송)
사용 기록 만든 날짜와 사람, 마지막 읽은 날짜와 사람, 마지막 고친 날짜와 사람, 마지막 백업 날짜, 현재 사용(잠금 등)

디렉터리는 찾기, 파일 만들기, 지우기, 목록 보기, 갱신 연산을 지원해야 한다.

구조 내용 한계
단순 목록 파일마다 항목 하나. 파일 이름을 키로 하는 순차 파일 파일을 정리하는 데 아무 도움이 없고, 사용자들이 같은 이름을 쓰지 않게 조심해야 한다
2단계 사용자마다 디렉터리 하나와 마스터 디렉터리. 마스터는 사용자 디렉터리마다 주소와 접근 제어 정보를 가진다 이름은 한 사용자 안에서만 유일하면 되고 접근 제한을 걸기 쉽다. 하지만 파일 묶음을 정리할 구조가 없다
트리 (계층) 마스터 디렉터리 아래 사용자 디렉터리, 그 아래 하위 디렉터리와 파일 아래 설명

경로 이름. 루트(마스터) 디렉터리에서 가지를 따라 파일까지 가는 디렉터리 이름들의 나열에 파일 이름을 붙인 것이 경로 이름이다. 경로가 다르면 같은 파일 이름을 써도 된다.

flowchart TD
  R["/ 마스터 디렉터리"] --> U["user"]
  U --> H["hong"]
  H --> OS["os"]
  H --> NET["net"]
  OS --> F1["report.txt"]
  NET --> F2["report.txt"]

두 report.txt는 이름이 같지만 루트에서 내려오는 길이 다르다. 왼쪽은 /user/hong/os/report.txt, 오른쪽은 /user/hong/net/report.txt다.

작업 디렉터리. 전체 경로를 매번 쓰는 것은 번거롭다. 그래서 대화형 사용자나 프로세스에게 현재(작업) 디렉터리를 두고, 전체 경로를 쓰지 않은 파일 이름은 작업 디렉터리 기준으로 해석한다.

파일 공유

다중 사용자 시스템에서 파일을 함께 쓰려면 접근 권한과 동시 접근 관리가 필요하다. 접근 권한은 흔히 앞 권한을 포함하는 계층으로 둔다.

권한 할 수 있는 것
없음 파일이 있는 줄도 모른다
앎 파일이 있다는 것과 주인이 누구인지만 안다
실행 프로그램을 싣고 실행할 수 있지만 복사는 못 한다
읽기 복사·실행을 포함해 어떤 목적으로든 읽는다
덧붙이기 데이터를 더할 수 있지만 기존 내용을 고치거나 지울 수는 없다
갱신 데이터를 고치고, 지우고, 더한다
보호 변경 다른 사용자에게 준 권한을 바꾼다
삭제 파일을 지운다

권한을 줄 대상(사용자 부류)은 주인(보통 만든 사람, 모든 권한), 특정 사용자, 사용자 그룹, 모두다.

동시 접근. 갱신할 때 파일 전체를 잠그거나, 고치는 레코드만 잠근다. 함께 쓰는 접근에는 상호 배제와 교착상태 문제가 따른다.

활용

  • UNIX의 디렉터리는 파일 이름과 아이노드 번호(i-number) 쌍의 목록을 담은 파일이다 → UNIX 아이노드
  • 셸의 cd는 작업 디렉터리를 바꾸고, ./a.txt는 작업 디렉터리 기준 상대 경로, /home/hong/a.txt는 루트부터의 절대 경로다.
  • 레코드 잠금의 상호 배제·교착상태는 경쟁 조건과 임계 구역, 교착상태와 같은 문제다.

연결

확인 문제

C1 2단계 디렉터리가 단순 목록보다 나은 점과, 트리 구조가 2단계보다 나은 점을 하나씩 쓰라.

답: 2단계: 이름이 사용자 안에서만 유일하면 되어 사용자끼리 이름이 부딪히지 않고, 사용자별 접근 제한이 쉽다. 트리: 한 사용자 안에서도 하위 디렉터리로 파일을 무리 지어 정리할 수 있고, 경로가 다르면 같은 이름을 쓸 수 있다.

C2 작업 디렉터리가 /user/hong/os다. notes/ch12.md와 /user/kim/ch12.md는 각각 어느 파일을 가리키는가?

답: notes/ch12.md는 상대 경로라 /user/hong/os/notes/ch12.md. /user/kim/ch12.md는 /로 시작하는 절대 경로라 그대로 /user/kim/ch12.md.

C3 로그 파일에 다른 사용자가 기록을 남기게는 하되 기존 기록을 지우거나 고치지 못하게 하려면 어떤 권한을 주는가?

답: 덧붙이기. 데이터를 더할 수만 있고 기존 내용을 고치거나 지울 수 없다. 갱신 권한을 주면 기존 기록을 고칠 수 있게 된다.