리눅스 - 리눅스 파일 시스템 소유권과 권한

정현우·2021년 7월 9일
4

Linux Basic to Advanced

목록 보기
2/16

리눅스 파일 시스템 소유권과 권한

리눅스에서는 시스템 내의 모든 정적인 요소를 파일로 취급한다. 리눅스에서 다루는 디렉토리와 파일의 개념과 shell을 통해 리눅스 터미널 환경을 활용하자. 그리고 가장 기본이되는 "소유권과 권한"에 대해 알아보자.

파일 시스템이란?

  • 윈도나 맥OS에서 접하기 쉬운 '폴더'를 떠올려 보자. 이게 곧 파일 시스템의 기본이다.
  • 저장 장치 내에서 데이터를 읽고 쓰기 위해 미리 정한 약속(기준)
  • 파일 저장 및 검색을 할 수 있도록 관리하는 방법, 파일을 어떻게 관리할 것인가에 대한 정책(검색을 포함해)이다.
  • 디렉토리(Directories)와 파일(Files)의 형태로 구성되어 있다.
  • 리눅스의 파일시스템은 루트 파일 아래에 계층적으로 모든 파일과 디렉토리가 만들어진다.
    • 트리형태의 계층적 파일 시스템 구조를 제공한다.
    • 중간노드를 디렉토리라 하고 더 이상 하위노드를 가질 수 없는 최하위 노드를 파일
  • 주기억장치나 디스크처럼 물리적인 H/W 저장공간에 저장되는 데이터 집합

종류

  • FAT: 파일 할당 테이블이라는 의미
    • 디지털 카메라와 같이 메모리 카드에 사용되는 메모리 시스템
    • 너무나 단순한 자료 구조, 작은 파일 다수일시 디스크 공간 활용도가 떨어짐
  • NTFS: 윈도우즈 NT 계열의 파일 시스템 구조, 뉴 테크롤리지의 약자
    • 시스템 고장과 디스크 손상 복구 능력이 있다. 파일 손상 발생시 디스크 볼륨 재구성해서 일관성 있는 상태로 복구가 가능하다. 즉 안정성이 높다. 보안성도 FAT보다 많이 향상되었다.
  • EXT: 익스텐드 시리즈. 2차 확장 시스템을 의미한다. 리눅스 (3로 대체될때까지)에서 기본 파일 시스템으로 존재
    • EXT3는 2와 완벽하게 호환된다. 온라인 파일 시스템에 굉장히 많은 성능. 큰 규모 디렉토리를 위해 해시를 통해 접근 가능한 H트리 사용 -> 데이터 탐색 더욱 빠르게 가능
    • EXT4는 3를 계승하고 성능 상승.

리눅스 파일 디렉토리 구조

간단하게 살펴보는 리눅스 파일 디렉토리 구조

  • 트리 형태를 유지한다. tree - 이와 같은 명령어로 확인이 가능하다
  • root : 최상위, 모든 디렉토리의 시작점
  • bin : 기존의 명령어가 저장되어 있다.
  • boot : 리눅스의 부트 -> 시작될때 설정과 세팅에 대한 값 존재
  • etc- : 리눅스의 여타 모든 설정파일이 존재하는 디렉토리
  • home : 사용자의 홈 디렉토리. 리눅스의 계정 추가하면 home하위에 그 계정에 맞는 디렉토리가 생성된다.
  • lib : 리눅스에 사용되는 라이브러리를 저장하는 디렉토리

usr/bin/tree가 설치되어 있지 않다면 tree 명령어를 사용할 수 없다.

tree 패키지를 설치하기 위해서는 권한을 획득하는 sudo와 패키지 설치를 위한 apt 명령어를 활용하여 sudo apt install tree 명령어를 사용한다.

리눅스 전체 주요 디렉토리

  • /var : /var/log나 /var/adm과 같이 자주 변경되는 시스템 파일들을 가지고 있다.
  • /etc : 시스템이나 사용자 관리를 위한 자료 파일이나 관리자용 명령파일들을 가지고 있다.
  • /bin : 기본적으로 명령파일들이 있다. (cli 명령파일들 이라고 생각하자)
  • /sbin : 시스템 운영 및 관리를 위한 명령 파일들이 있다.부팅과정에 필요한 명령들은 여기에 있고 정상 동작 상태에서 필요한 크기가 큰 명령파일
  • /boot : 리눅스 커널의 메모리 이미지와 부팅 과정에서 필요한 정보 파일들이 있다.
  • /home : 각 사용자들의 홈 디렉토리는 이 아래에 존재한다. 명시적으로 ~ 위치로 표현한다.
  • /lib : 시스템 라이브러리나 각종 언어를 위한 라이브러리들을 가진다.
  • /proc : 커널과 프로세스 정보를 얻을 수 있는 가상 파일 시스템이 마운트되어 있는데 실제로는 커널내의 테이블과 연결되어 있다.
  • /root : 시스템 superuser, 관리자인 root의 홈디렉토리다.
  • /tmp : 잠시 사용되는 임시 파일들을 위한 디렉터리이다. 주로 캐싱 파일들이 저장된다.
  • /usr : 두 번째 파일 시스템으로 루트 파일 시스템과 구조가 유사하다. 용량이 크고 자주 사용되지 않는 파일들이 있다.

보기 쉽게 정리된 사진

bin

  • bin과 비슷한 역할을 하는 디렉토리가 많아서 이 친구만 우선적으로 정리하자.
렉토리용도사용권한
/bin기본적인 명령어일반 사용자
/sbin시스템 관리를 위한 명령어슈퍼유저(root)
/usr/bin/bin에 있는 명령을 제외한 기본적인 명령어일반 사용자
/usr/sbin/sbin에 있는 명령을 제외한 시스템 관리를 위한 명령어슈퍼유저(root)

소유권과 권한

  • 각 파일과 폴더마다 다른 권한 설정 가능 -> 유저 접근 관리, 공유 폴더 / 파일 생성 용이
  • ls -al 명령어로 모든 파일 속성 확인이 가능하다! 다양한 정보를 포함하고 있다!
  • 파일 유형(타입)에서 -는 파일 / d는 폴더
    • - : 자료나 프로그램을 저장하는 파일, 일반적인 파일을 의미한다.
    • d : 디렉토리를 의미한다. 파일 이름의 계층 구조 형성을 위해 존재한다.
    • b : 블록장치 파일을 의미한다. 일정 크기의 블록 단위로 입출력을 하는 장치로 커널 내에 이들을 위한 "버퍼 캐쉬 기능"이 있다.
    • c : 문자장치 파일을 의미한다. 블록장치가 아닌 모든 입출력 장치를 문자 장치로 정의한다.
    • P : FIFO 파일. 보통 "파이프" 라고 불리는 프로세스간 통신을 위한 특수 파일이다.
    • S : 보통 유닉스 도메인 소켓이라고 하는데, 컴퓨터 내에 있는 프로세스간 통신을 위한 특수 파일이다.
    • I : 다른 파일에 대해 부여한 새로운 이름으로 ms의 '바로가기' 파일 개념과 유사한 파일이다.
  • 파일 권한은 또 다음장에 더 자세히 살펴보자
  • 링크 수는 ln 명령어로 이용해 링크를 걸 수 있는 수
  • read / write / excute 그룹을 소유자, 그룹, 그 외 사용자의 3가지 그룹으로 나눌 수 있다.
  • 아래 숫자는 r,w,x를 숫자로 표현할 수 있다는 걸 보여준다. 즉 최대 총 합은 7이다!

파일 권한 변경

  • chmod: 뒤에 어떤 권한으로 변경할 것인지. 777은 3가지 모든 그룹에 대해 모든 권한을 준다는 의미!

  • chown: 소유권도 변경이 가능하다. 해당 명령어는 root권한이 있어야 실행가능하다.

  • 예시

# myidea.txt파일의 권한을 소유자는 읽고, 쓰고, 실행할 수 있게 
# 내가 포함되어 있는 그룹은 읽고 실행만 할 수 있게 그리고 다른 사용자는 실행만 가능하게 만들어주세요.
# 관리자를 elice 에서 queen으로 바꿔주세요 queen은 우리와 같은 그룹이 아닌 kingdom에 속해있습니다. 
# 따라서 그룹도 옮겨줘야 겠죠?

chmod 751 && chown queen:kingdom myidea.txt

파일 명령어

핵심 파일 명령어

  • mkdir: 디렉토리 생성

  • rmdir: 디렉토리 삭제 / 지정한 디렉토리 비어있지 않으면 삭제 불가능

  • touch: 빈 파일 생성

  • rm: 파일 및 디렉토리 삭제 / rmdir로 삭제 못하니까 rm -r 가능

  • cp: 파일 및 디렉토리 복사 / cp A to B

  • mv: 파일 및 디렉토리 이동 / mv A to B

  • cat: 파일 내용 출력

    • cat은 파일을 열어서 표준 출력 스트림(stdout)으로 우리에게 보여주는 명령어
    • cat answer.txt >> hello.py 와 같은 명령어로 answer.txt내용을 hello.py 파일에 >(덮어씌우기), >>(추가하기) 와 같은 작업이 가능하다.
  • find: 파일 검색 / 타입 d는 폴더(디렉토리), f는 파일(file)

그 외 다양한 파일 명령어

  • head 예시: cat elice.txt | head -n 10 # 처음 10줄만 출력
  • tail 예시: cat elice.txt | tail -n 10 # 마지막 10줄만 출력
  • su 예시: su [바꿀계정] # 바꿀계정 생략시 root로
  • more 예시: '화면 단위'로 출력을 해준다. -> space바로 화면단위로 넘어갈 수 있다.

나노 텍스트 에디터

nano?

리눅스 OS 계열의 기본적인 메모장이라고 생각하면 된다. 홈페이지 / 생활코딩

  • 나노는 1999년에 TIP(This isn't Pico, "이것은 피코가 아니다"라는 뜻)라는 이름으로 크리스 알레그레타가 처음 만든 것이다. 본래 그는 자유 소프트웨어 사용권으로 배포되지 않는 피코에 대한 자유 소프트웨어 대체물로 만드는 것이 목적이었다. 이 이름은 2000년 1월 10일에 나노(nano)로 변경되었는데, 이는 유닉스 유틸리티 tip과의 이름 혼동을 피하기 위해서였다. 이 이름은 피코보다 1,000배 크다는 의미에서 SI 접두어 나노에서 비롯되었다. 2001년 2월에 나노는 GNU 프로젝트의 일부가 되었다. 나노는 색 문자, 정규 표현식 검색 및 치환, 부드러운 스크롤링, 다중 버퍼, 재결합 가능한 키 지원, (실험적) 실행 취소 및 편집 변경 다시 시도와 같은, 피코에게 부족한 일부 기능들을 갖추고 있다.

  • 리눅스 터미널 환경인 콘솔에서 직관적인 사용자 인터페이스를 제공하는 emacs처럼 나노(nano)는 vi와 함께 리눅스배포판에서 기본 프로그램으로 사용하고있다. / 리눅스에서는 nano뿐만 아니라 여러 종류의 에디터를 지원한다. gedit, vim, emacs, pico의 대표적인 에디터들이 있다. / apt 패키지로 설치도 가능하다.

  • CLI로 접근하여 텍스트 편집까지! 왜?

  • 기본적인 단축키 명령어!

profile
도메인 중심의 개발, 깊이의 가치를 이해하고 “문제 해결” 에 몰두하는 개발자가 되고싶습니다. 그러기 위해 항상 새로운 것에 도전하고 노력하는 개발자가 되고 싶습니다!

0개의 댓글