셸(Shell) 관리 및 종류 🖥️

셸 변경 및 조회

  • chsh: 사용자의 로그인 셸을 변경하는 명령어입니다.

    • -s: 변경할 셸의 경로를 지정합니다.
    • -l: 변경 가능한 셸 목록을 출력합니다. (/etc/shells 파일 내용)
  • /etc/shells: 시스템에서 사용 가능한 셸의 목록이 저장된 파일입니다.

  • echo $SHELL: 현재 사용자가 로그인 시 부여받은 기본 셸 정보를 출력합니다. (셸 변경 후에도 이 값은 바로 바뀌지 않을 수 있습니다.)


주요 셸의 종류 및 발전 순서

📜 셸 개발 순서 sh → csh → tcsh → ksh → bash → zsh

  • sh (bourne shell): 최초의 유닉스 셸로, 스티븐 본이 개발했습니다. 많은 셸의 기반이 됩니다.
  • csh (c shell): C언어와 유사한 문법을 가진 셸로, 빌 조이가 개발했습니다.
  • ksh (korn shell): shcsh의 장점을 결합한 셸입니다.
  • bash (bourne again shell): sh를 기반으로 GNU 프로젝트에서 개발했으며, 현재 대부분의 리눅스 배포판에서 기본 셸로 사용됩니다.
  • zsh (z shell): ksh를 기반으로 다양한 확장 기능(강력한 자동 완성, 테마 등)을 추가한 셸입니다.
  • dash: POSIX 표준을 지향하는 경량화된 셸로, 데비안/우분투 계열에서 시스템 기본 셸(/bin/sh)로 사용됩니다.

셸 환경 설정 파일 ⚙️

💡 Note

  • **profile**이 들어간 파일: 주로 환경 변수 설정에 사용됩니다.
  • **rc**가 들어간 파일: 별칭(alias)이나 함수처럼 셸이 시작될 때마다 적용되어야 하는 설정에 사용됩니다.

💡 Note

  • /etc/ 경로: 시스템 모든 사용자에게 적용되는 전역 설정 파일입니다.
  • ~/ (.bashrc 등): 특정 사용자에게만 적용되는 개인 설정 파일입니다.

사용자별 설정 파일 (~/)

  • ~/.bash_profile: 사용자가 로그인할 때 한 번만 실행됩니다. $PATH 같은 환경 변수를 설정하기에 적합합니다.
  • ~/.bashrc: 새로운 셸이 시작될 때마다 실행됩니다. alias나 프롬프트(PS1) 설정 등을 저장합니다.
  • ~/.bash_logout: 사용자가 로그아웃하기 직전에 실행되는 스크립트입니다.
  • ~/.bash_history: 사용자가 입력한 명령어 기록이 저장되는 파일입니다. 로그아웃 시 현재 세션의 기록이 이 파일에 추가됩니다.

전역 설정 파일 (/etc/)

  • /etc/profile: 모든 사용자가 로그인할 때 가장 먼저 읽어 들이는 전역 환경 설정 파일입니다.
  • /etc/bashrc: 모든 사용자에게 공통으로 적용되는 alias와 함수를 설정하는 파일입니다.

사용자 계정 관리 파일 👤

  • /etc/passwd: 사용자 계정의 기본 정보를 담고 있는 파일입니다.

    • 형식: [유저명]:[비밀번호(x)]:[UID]:[GID]:[사용자정보]:[홈디렉터리]:[로그인셸]
  • /etc/shadow: 사용자의 암호화된 비밀번호와 패스워드 정책을 저장하는 파일로, root만 읽을 수 있습니다.

    • 파일 구조 (필드):
      1. Login Name: 사용자 계정명
      2. Encrypted: 암호화된 패스워드
      3. Last Changed: 마지막 패스워드 변경일
      4. Minimum: 최소 패스워드 사용 기간
      5. Maximum: 최대 패스워드 사용 기간
      6. Warn: 만료 전 경고 기간
      7. Inactive: 비활성화 유예 기간
      8. Expire: 계정 만료일
      9. Reserved: 예약 필드
  • /etc/login.defs: 사용자 계정 생성 시 적용될 기본값(패스워드 정책, UID/GID 범위 등)을 정의한 파일입니다.


주요 명령어 ⌨️

셸 변수 및 명령어 기록

  • history: 이전에 사용한 명령어 목록을 보여줍니다.
    • !!: 바로 직전 명령 재실행
    • !-n: n번째 전 명령 재실행
    • !?string?: 문자열 string을 포함하는 최근 명령 재실행
  • alias: 특정 명령어에 별칭을 부여합니다. ~/.bashrc에 저장하여 영구적으로 사용할 수 있습니다.
  • unalias: 설정된 별칭을 해제합니다.
  • env: 전역 환경 변수를 조회합니다.
  • set: 지역 셸 변수 및 환경 설정을 조회합니다.
  • 변수 선언/조회: VAR="value"로 선언하고 $VAR로 조회합니다.

프로세스 및 아카이브

  • 백그라운드 실행: 명령어 뒤에 & 기호를 붙이면 프로세스가 백그라운드에서 실행됩니다.
  • tar: 여러 파일이나 디렉터리를 하나의 아카이브 파일로 묶거나(c), 푸는(x) 명령어입니다.
    • 주요 옵션: c(생성), x(추출), t(목록), v(과정표시), f(파일지정)
    • 압축 옵션: z(gzip), j(bzip2), J(xz)

💡 응용 tar tvf [파일명.tar] | grep [찾을_파일] : tar 아카이브 내에 특정 파일이 포함되어 있는지 확인할 수 있습니다.

  • gzip: 파일을 .gz 형식으로 압축하거나 해제(-d)하는 명령어입니다.