기본 파일 시스템에서는 모든 파일이 하나의 디렉터리에 저장된다. 디렉터리 항목이 파일 또는 다른 디렉터리를 가리키도록 수정한다. 즉, 디렉터리 계층 구조를 만든다.
디렉터리는 그 크기를 확장할 수 있다. 파일 이름은 14byte로 길이를 제한한다. 원한다면 제한 길이를 늘려도 된다. 하지만 파일의 경로 이름은 더 14byte보다는 더 길게 만들어야 한다.
각각의 프로세스는 서로 독립적인 디렉터리를 갖는다.
시작할 때 루트 디렉터리를 초기 프로세스의 현재 디렉터리로 설정한다. 한 프로세스가 fork() 시스템 콜로 다른 프로세스를 시작하면 자식 프로세스는 부모 프로세스의 현재 디렉터리를 상속받는다. 그 후 두 프로세스의 현재 디렉터리는 독립적이므로 현재 디렉터리를 변경하는 것은 다른 프로세스에게 영향을 미치지 않는다.
무슨 뜻이냐 하면, 만약 shell 프로그램의 CWD가 /home/rene
인 상황에서 ls 프로그램을 실행하게 되면, shell 프로세스의 자식 프로세스인 ls의 CWD 역시 /home/rene
라는 것이다. ls 프로그램은 CWD인 /home/rene
을 기준으로 작업을 실시한다. 여기서 shell 프로그램이 CWD를 바꾼다고 해서 ls의 CWD까지 바뀌는 건 아니니까....
이게 UNIX 파일 시스템에서 cd 명령어가 shell built-in 명령어인 이유이다.
디렉터리 구분은 슬래시('/') 문자로 한다. 또한 특수한 파일 이름들인 '.' 및 '..'도 Unix에서와 동일한 의미를 갖도록 만들어야 한다.