[리눅스마스터 2급 2차] 1과목 – 2. 쉘(Shell)

[1과목: 리눅스 운영 및 관리]

1. 파일 시스템 관련 명령어


2. 쉘(Shell)

2. 1. 개념 및 종류

2. 1. 1. 개념

  • 커널(Kernel)과 사용자간의 인터페이스를 제공
  • 사용자가 입력한 명령어를 해석하여 프로그램을 실행
  • 로그인할 때 실행되어, 사용자 별 환경 설정 가능
  • 강력한 스크립트(Script)언어이며, 쉘 자체가 프로그래밍 기능 보유


2. 1. 2. 종류 ★

  • 본쉘(sh; Bourne Shell)계열과 C쉘 계열로 나뉨
  • 사용자 프롬프트가 ‘$’이면 본쉘 계열, ‘%’이면 C쉘 계열
  • C쉘은 본쉘의 모든 기능과 명령어 히스토리, 별명, 작업 제어 기능을 추가 보유

본쉘 계열 ★★★

종류실행파일특징
본쉘/bin/sh– 벨 연구소의 스티븐 본이 1979년 개발
UNIX에서 기본 쉘로 사용
콘쉘/bin/ksh– AT&T사 벨 연구소의 데이비드 콘이 본쉘을 확장하여 1986년 개발
– 명령어 완성 기능, 히스토리 기능을 가짐
배쉬쉘/bin/bash– 브레인 폭스가 1989년에 개발
– 본쉘을 기반으로 GNU 프로젝트에 의해 개발
Linux 표준 쉘로 채택
– Linux, macOSX 등 다양한 운영체제에서 사용
– 명령어 완성 기능, 히스토리, 명령어 치환, 편집 등 지원
지쉘/bin/zsh– 폴 팔스타드가 1990년에 개발
– 확장형 본쉘로 Korn Shell의 재작성 쉘
– 강력한 히스토리, 향상된 명령행 편집, 파일 중간 자동완성 기능 포함
– 탭이나 화살표 키를 이용해 선택 기능 포함

C쉘 계열 ★★★

종류실행파일특징
C쉘/bin/csh– 버클리 대학의 빌 조이가 1981년에 C언어 기반으로 개발.
히스토리, 별명(Alias), 작업 제어 등의 기능 포함
– 다양한 프로그래밍 작성 기능 포함
TC쉘/bin/tcsh– Ken Greer가 1982년에 개발
– 확장 C쉘로 BSD계열 UNIX에서 가장 많이 사용
– 명령행 편집 기능 제공
– emacs, history explorer, 자동 완성, 자동 로그아웃 기능
– 로그인 상태, 사용자, 터미널 모니터링
– $host, $hosttype 등의 새로운 환경 변수 포함


2. 1. 3. 쉘 확인 및 변경 ★

: 쉘은 사용자가 로그인 후 자동으로 생성되는 로그인 쉘, 사용자가 직접 실행하는 서브 쉘로 구분

로그인 쉘 확인

  • /etc/shells 파일에서 사용할 수 있는 쉘 확인 가능
  • passwd 파일에서 계정마다 할당된 쉘 확인 가능
  • echo $SHELL‘ 환경 변수를 사용한 명령어로 로그인 시 할당된 쉘 확인 가능
  • ‘finger -l’명령어 사용

쉘 변경
: 로그인 쉘 변경은 반 영구적인 쉘 변경 방법. 관리자가 쉘 변경 후 다음 변경을 하기 전까지 지정된 쉘 사용

#chsh ★★
: 일반 사용자 환경에서 로그인 쉘 변경

#chsh [옵션] [계정명] [변경쉘]

[옵션]
-s [변경쉘]: 지정하는 쉘을 앞으로 사용할 쉘로 변경
-l: 현재 사용 가능한 쉘 확인(/etc/shells 파일 안에 지정된 쉘)

chsh                    # chsh명령어 이후 변경할 쉘 추가 입력
chsh -s /bin/bash       # chsh -s bash는 사용 불가. 정확한 쉘 경로 입력
chsh --shell /bin/bash

#usermod
: 관리자 환경에서 지정된 계정의 정보를 변경할 때 사용하는 명령어. 옵션으로 쉘 변경 가능

#usermod [옵션] [계정명]

[옵션]
-s [변경쉘]: 기존 쉘에서 새로운 쉘로 변경


2. 2. 환경 설정

2. 2. 1. 환경 변수와 쉘 변수 ★

: 변수는 시스템 환경 정보 저장소로, 환경 변수쉘 변수로 구분

환경 변수(전역 변수)

  • 전체 술에서 사용 가능한 전역 변수
  • 서브 쉘에 기능 상속 가능
  • 환경 변수 확인 명령어: env
  • 주요 환경 변수
    • $PATH: 실행할 명령어 경로 검색
    • $HOME: 사용자의 홈 디렉터리의 절대 경로
    • $PWM: 현재 작업중인 디렉터리의 절대 경로
    • $HOSTNAME: 호스트명
    • $USER: 사용자명
    • $SHELL: 사용자의 로그인 쉘
    • $TMOUT: 일정 시간동안 작업을 하지 않을 경우 로그아웃되는 시간
  • 환경 변수 관련 명령어
    • #export: 환경 변수 리스트 확인
    • #export [변수명]=[변수값]: 해당 변수명에 변수값 등록
    • #export [쉘 변수명]: 쉘 변수를 환경 변수로 변경
    • #echo $[변수명]: 변수값 확인

쉘 변수(지역 변수)

  • 현재 로그인 쉘에서만 사용 가능한 지역 변수
  • 서브 쉘에 기능 상속 불가
  • 쉘 변수 관련 명령어
    • #set: 쉘 변수 리스트 확인
    • #set [변수명]=[변수값]
    • #[변수명]=[변수값]: bash에서 set을 생략할 경우 쉘 변수로 지정
    • #echo $[변수명]: 변수값 확인


2. 2. 2. 환경 설정 파일 ★

: 쉘 시작 시 자동으로 실행되는 고유의 시작 파일

/etc/profile ★★★

  • 시스템 전체의 쉘 환경을 제어하는 전역 시스템 설정 파일
  • 스템 전체에 적용되는 환경 변수와 시작 관련 프로그램을 설정
  • 관리자만 설정 가능하여야 하며, 모든 사용자에게 반영
  • 로그인 시 실행. bash_profile은 bash로 로그인 시 로드되며 .profile 둘 중 하나만 로드

/etc/profile.d

  • 몇몇 응용 프로그램들이 시작 시 자동 실행할 스크립트 파일(.sh)가 저장된 디렉터리
  • 보통 /etc/profile에서 호출하여 사용
  • 일반 사용자들의 별칭(Alias)설정 등과 관련된 스크립트도 존재

/etc/bashrc ★★★

  • Alias와 bash가 수행 시 실행되는 함수를 전역으로 제어
  • 사용자가 새로운 쉘을 열 때마다 실행
  • 환경 설정은 .profile파일에, Alias와 환경 설정 이외 함수 .bashrc에 주로 저장

~/.profile & ~/.bash_profile ★★★

  • /etc/profile & /etc/bash_profile의 지역 시스템 설정파일
  • 개인 사용자의 쉘 환경을 제어

~/.bashrc ★★★

  • /etc/bashrc의 지역적인 시스템


2. 2. 3. 히스토리(History)기능 및 환경 변수 ★

히스토리 명령어

: 일정 개수 이상 사용했던 명령어를 개별 사용자의 홈 디렉토리에 존재하는 .bash_history에 저장해 두고 다시 불러서 사용 가능

  • !!: 마지막으로 실행했던 명령문 실행
  • ![n]: n번째 명령어 실행(최근 사용한 1000개 또는 500개 까지만 가능)
  • ![string]: 가장 최근에 ‘string’으로 시작하는 명령문 실행
  • !?[vi]?!: 최근에 사용한 명령 중 ‘vi’를 포함하는 명령문을 찾아 실행
  • history: 최근에 사용한 1000개(또는 500개) 명령어 출력
  • history 3: 최근에 입력한 3개의 명령어 출력

히스토리 환경 변수

  • $HISTSIZE: 히스토리 스택의 크기. 단위는 명령의 개수
  • $HISTFILE: 히스토리 파일의 경로
  • $HISTFILESIZE: 물리적인 히스토리 파일의 실제 크기
  • $HISTTIMEFORMAT: 히스토리 명령어 수행 시간


2. 2. 4. 별명(Alias) 명령어

: 자주 사용하는 명령어를 특정 문자로 입력해 두고 간편하게 사용하는 기능

  • alias: 설정 되어 있는 별명 확인
  • alias [별명] = ‘[명령어]’: 새로운 별명 정의
  • unalias [별명]: 별명 삭제

Leave a Comment