개발자 끄적끄적

셀과 파일 시스템 본문

Linux

셀과 파일 시스템

햏치 2023. 3. 3. 23:10

<리눅스 파일 시스템>

1. ext2 파일 시스템
- 단일 파일의 크기가 최대 2Giga byte
- 파일명은 최대 256Byte
- 최대 지원 파일 시스템 크기는 4 Tera byte
- 디렉토리 당 저장 가능한 최대 파일 수 약 25,500개

2. ext3 파일 시스템
- 단일 파일크기 제한은 4Giga byte
- 파일명은 최대 256Byte
- 최대 파일 시스템 크기는 16Tera byte
- 디렉토리 당 저장 가능한 최대 파일 수 약 65,565개
- 저널링 파일 시스템을 지원
*저널링 파일 시스템 : 파일 시스템 오류 수정을 위한 파일 시스템


3. ext4 파일 시스템
- 대용량 파일 지원
- 호환성 : 마운트 가능
- fsk 기능 향상
- Extends 지원
- 하위 디렉토리 확대
- 조각 모음 : ext3 저널링 파일 시스템에서 발생되는 단편화를 조각모음으로 개선




<셸(Shell) 및 환경변수>

<셸(Shell)>
- 운영체제와 사용자 간에 대화식 인터페이스를 제공
- 리눅스 표준 셸은 bash 
- 커널을 호출하여 커널에게 명령을 실행하고 그 결과를 출력


<셸 기능>
- 시그널 처리
- 프로그램을 실행
- 파이프, 리다이랙션, 백그라운드 프로세스 설정
- 입력된 내용을 파악해서 명령 줄을 분석
- 와일드 카드, 히스토리 문자, 특수문자 분석
- env : 셸 환경정보 확인
- set : 셸 환경변수 설정
- 셸의 종류 : /etc/shells 파일 확인



<셸(Shell) 종류>
1. C shell
- 사용자의 작업 환경의 편리성을 위하여 cshrc 파일에 필요한 환경 변수를
  저장하여 사용자가 로그인 시에 지정 명령들의 자동 수행 가능

2. Bourne shell
- 사용자의 편의성을 위하여 .profile 파일에 환경 변수를 저장
- .profile 역할은 C셸의 .cshrc 파일과 동일

3. Korn shell
- .kshrc 또는 .profile 파일에 환경 변수를 저장
- C셸 기능을 모두 제공
- 셸 스크립트 언어는 Bourne shell과 유사


4. Bash shell
- C shell과 Korn shell의 특징을 결합한것으로 
  GNU 프로젝트에 의해서 개발된 셸
- 리눅스에서 가장 많이 사용
- 명령 편집 기능을 제공

5. TC shell
- C shell의 기능을 강화한 것으로 명령 편집 기능을 제공




<chsh 명령>
- 기본 쎌을 다른 셸로 변경할 때 사용하는 리눅스 터미날 명령



<chsh 옵션>
-s : 지정한 셸을 앞으로 사용할 로그인 셸로 변경
-l(list) : /etc/shells 파일 내에 지정된 셸을 출력
-u(usage) : 도움말을 출력
-v(version) : 버전정보를 출력





<환경설정 파일 및 환경 변수>

1. 환경설정 파일
- 셸(Shell) 환경설정 파일은 사용자가 로그인 및 로그아웃 시에 실행해야 하는
  작업을 포함하고 있는 파일

1) 시스템 전역 설정파일
- /etc/profile
  - 시스템 전역 초기화 피일로 로그인 셸에서 실행 

- /etc/bashrc
  - 일반적으로 사용되는 설정
  - 시스템 전체 환경, 시작 프로그램 설정, 로그인 셋업 기능, alias는 정의

- /etc/profile.d/*sh
  - 시스템 내부의 설정을 가진 파일
  - sh라는 확장자를 가진다

2) 사용자별 설정파일
- .bash_profile
  - 사용자 홈 디렉토리에 있는 파일
  - 개별적인 셸 환경을 설정

- .bashrc
   - 사용자 정의 변수, 함수 alias를 정의

- .bash_logout
  - 사용자가 로그아웃할 때 실행되는 파일을 정의



2. 환경변수
- 특정한 의미로 설정된 값
- 유용하게 사용될 변수 및 설정해야 하는 값을 설정
- env 명령어 : 현재 환경에 설정되어 있는 모든 변수를 확인



<환경변수>
SHELL : 사용자의 로그인 셸의 절대경로
HOME : 홈 디렉토리에 대한 경로 이름
PATH : 실행할 명령어를 찾을 경로
USER : 사용자 이름
LOGNAME : 로그인할 때 사용할 이름
TERM : 사용 중인 단말기를 설명
MAIL : 전자메일 우편함
HOSTNAME : 호스트 명을 의미
TMOUT : 이 시간 동안 명령 등의 입력이 없으면 연결이 종료




<권한관리 및 그룹 설정>

1. umask(666)
- Default 권한 값을 가지고 있는 것은 umask값이다
- 읽기 : r(=4)
- 쓰기 : w(=2)
- 실행 : x(=0)
*디렉토리 권한은 777


2. chmod(change mode)
- 사용자에게 권한을 부여 u옵션(user)
- 그룹에게 권한을 부여 g옵션(group)
- 다른 사용자에게 권한 부여 o옵션(other)
- chmod[옵션] 파일명 최고권한은 777이다
- 읽기 : r(=4)
- 쓰기 : w(=2)
- 실행 : x(=1)




<리눅스 파일의 종류>
- u : user
- g : group
- o : other
- a : all
- + : 권한 추가
- - : 권한 삭제(회수)
- r : 읽기
- w : 쓰기
- x : 실행




3. chown(change owner) 
- 파일에 대한 사용자와 그룹을 변경



<chown 옵션>
-R : 하위 디렉토리의 모든 권한 변경
-c(content) : 권한변경 파일 내용 출력



<chown 명령어 대상>
- u(user) / g(group) / o(other) / a(all)



<chown 명령어 인자값>
+(권한 추가) / -(권한 제거) / =(해당 권한으로 그대로 변경)


<권한>
- r : 읽기 권한
- w : 쓰기 권한
- x : 실행 권한



4. chgrp(chage group)
- 파일이나 디렉토리의 소유그룹을 변경



<chgrp 옵션>
-c(content) : 실제 변경된 것을 보여줌
-h : 심볼릭 링크 자체의 그룹을 변경
-f : 그룹이 변경되지 않은 파일에 대해서 오류 메시지를 보여주지 않음
-v : 작업 진행 상태를 설명
-R : 하위 모든 파일도 지정한 그룹으로 변경




<특수 권한>

1. setuid(set user id)
- 설정된 파일의 해당 파일을 다른 사용자가 실행하게 되면, 
  그 파일의 소유자의 권한으로 실행되는 파일
- setuid에서 소문자(s) - 실행권한O/ 대문자(S) - 실행권한X
- 설정 : 8진수 4000



2. setgid(set group id)
- 파일 생성자의 그룹 소유권을 얻는 것
- 설정 : 8진수 2000



3. sticky bit
- 공용 디렉토리를 만들어서 모두들 자유롭게 사용할 수 있도록 하기 위해
- 권한부여 : 1000
- 해당 디렉토리의 삭제만큼 해당 디렉토리 소유자만 가능(root는 제외)
- 즉, /tmp 디렉토리를 확인하면 drwxrwxrwt로 나타나며, 
  t라는 것이 sticky bit로 설정되어 있다



<특수 권한 파일 종류>
- setuid : 실행 파일에서 사용(/etc/passwd)
- setgid : 동일한 project에 실행 권한을 부여하기 위하여 setgid 사용
- sticky bit : 디렉터리 내에 인가된 사용자만 쓰기(write) 가능하도록 하기 위해 설정




<특수권한 파일 설정>
구분 : 4=setuid
특수권한 설정 : #chmod 4755 setuid_program
특수권한 파일 검색 : #find /-perm - 4000 -print

구분 : 2=getgid
특수권한 설정 : #chmod 2755 setgid_program
특수권한 파일 검색 : #find /-perm - 2000 -print

구분 :1=sticky bit
특수권한 설정 : #chmod 1777 sticky bit_directory
특수권한 파일 검색 : #find /-perm - 1000 -print
ex) - find / -perm 7000 -print : suid, sgid, sticky 
-> suid, sgid, sticky bit가 모두 설정된 파일을 검사

ex) - find / -perm 6000 -print 
-> suid, sgid가 설정된 파일을 검사

'Linux' 카테고리의 다른 글

에디터  (2) 2023.03.03
리눅스(Linux) 개요  (0) 2023.03.03
리눅스 응용분야  (0) 2023.03.03