디렉토리

. 과 .. 은 모든 디렉터리에 항상 존재하는 파일 이름이다. 디렉토리가 생성될 때 자동적으로 포함됨.

  • 디렉토리 허가
    • 읽기 : 디렉토리 내의 파일이나 부디렉토리의 이름을 리스트
    • 쓰기 : 디렉토리 내의 파일을 제거하거나 새로운 파일을 생성
    • 실행 : cd 또는 chdir로 디렉토리 내부로 들어갈 수 있음

inode 접근 권한 정보 확인

링크 함수

  • 링크 : 기존 파일이나 디렉터리에 접근할 수 있는 새로운 이름을 의미
  • 링크를 만들 수 있는 기능으로 하드 링크와 심벌릭 링크가 있다.

파일명으로 파일 정보 검색 : stat()

int stat(const char pathname, struct stat statbuf);

  • pathname : 정보를 알고자 하는 파일 명

  • statbuf : 검색한 파일 정보를 저장할 구조체 주소

  • pathname에 지정한 파일의 정보를 검색

  • stat() 함수로 파일의 정보를 검색할 때 파일에 대한 읽기/쓰기/실행 권한이 반드시 있어야 하는 것은 아니지만 파일에 이르는 경로의 각 디렉터리에 대한 읽기 권한을 있어야함

  • 성공하면 0을 반환하고 stat 구조체에 파일 정보를 저장, 오류 발생 시 -1 리턴

stat 구조체

  • stat() 함수로 검색한 inode정보는 stat 구조체에 저장되어 리턴

새로운 파일을 만들면 default link수는 1.
link 수 == 0 -> 삭제

'>' 하나 : overwrite
'>>' 두개 : append

ex) ls -al > text.txt 이렇게 하면 ls -al의 내용이 text.txt에 들어감.
ls -al >> text.txt 하면 본래 text.txt에 써져있던 것에 덧붙여서 더해짐.

파일 기술자로 파일 정보 검색 : fstat()

int fstat(int fd, struct stat *statbuf);

  • fd : 열려 있는 파일의 파일 기술자
  • statbuf : 검색한 파일 정보를 저장할 구조체 주소

파일 경로 대신 현재 열려 있는 파일의 파일 기술자를 인자로 받아 파일 정보를 검색한 후 statbuf 로 지정한 구조체에 저장

st_mode의 구조

chmod로 변경 가능.

r w x

파일 접근 권한 제어

파일의 소유자는 사용자 식별번호로 구별

  • uid, gid
  • /etc/password

chmod u+s test.txt를 하면
-r-S-r-xr-x 와 같이 S가 생김. 이는 다른 사용자도 이걸 읽을 수 있다.

이미 x가 있는데 +s를 하면 s가 생김.

uid와 gid, sticky bit를 설정하려면 이미 적용되있는 권한(ex: 755) + uid상수(04000) = 4755 이런식으로 해야댐. chmod 4755.

/ --S / --S / --T/
uid gid sticky bit

  • 유효 사용자 식별번호 (effective user-id, euid)
    파일에 대해 실제 소유권을 갖는 사용자의 사용자 식별번호 root(루트) 가 여기에 속함.

  • 진짜 사용자 식별번호 (real user-id, ruid)

    실제로 프로세스를 갖는 사용자의 사용자 식별번호
    유효 그룹 식별번호, 진짜 그룹 식별번호
    대부분의 경우, 유효 사용자 식별번호와 진짜 사용자 식별번호는 동일

    set user-id(04000)
    생성된 프로세스에게 그 프로세스를 시작시킨 사용자의 uid대신 파일 소유자의 유 효 사용자 식별번호를 부여
    set group-id(02000)
    sticky bit(01000)
    공유디렉토리(/tmp)에 대한 접근 권한 OR 텍스트-이미지를 swap영역에 남겨둠

파일의 종류 검색

상수와 & 명령을 해주면 혹시 1이 나올 경우 0으로 .. 바꿔줌.

kind = statbuf.st_mode & S_IFMT;

이런식으로..

매크로를 이용한 파일 종류 검색

매크로를 사용하게 되면 소스 파일이 확대되게 만들어줌. 오버헤드가 없음.
짧은 코드의 경우 매크로를 사용한다.

profile
언젠간 전문가가 되겠지

0개의 댓글

Powered by GraphCDN, the GraphQL CDN