Etc

리눅스 마스터 2급 정리(7) - Shell과 환경 설정

하다보면 되겠지 2025. 5. 6. 23:56

리눅스 Shell의 개요

개념

  • 명령어 해석기(commend interpreter) 역할(사용자 명령어 ↔ 커널)
  • 로그인할 때 실행되어 사용자 별로 다른 사용 환경을 설정함
  • 강력한 스크립트 언어
  • 리다이렉션, 파이프, 쉘 스크립트, 포그라운드/백그라운드 프로세스 실행

 

분류

대부분은 본쉘 계열의 기능을 포함하여 확대 발전한 형태

  • 본쉘(Bourne shell) 계열
    • ‘$’ 프롬프트
    • bash shell(리눅스 표준)
    • z shell(확장 기능 제공)
  • C쉘 계열
    • ‘%’ 프롬프트
    • 본쉘의 모든 기능과 명령어 히스토리, 별명, 작업 제어 기능을 추가로 가짐

 

로그인 쉘 확인

  • /etc/shells: 사용 가능한 쉘 목록
  • /etc/passwd의 마지막 필드: 계정마다 할당된 쉘
  • echo $SHELL: 현재 로그인한 사용자가 사용하고 있는 쉘

 


환경 변수

환경 변수와 쉘 변수

 

  • 주요 환경 변수
  • PATH(사용자가 입력한 명령어를 찾아 실행하기 위해 방문하기 위한 경로 정보), HOME, HOSTNAME, USER, PS1, SHELL, TMOUT, MAIL
  • 환경 변수 설정과 해제
    • 설정: export [변수명]=[값]
    • 해제: unset [변수명]

 

환경 설정 파일

  • 쉘 시작 시 자동으로 실행되는 고유의 파일이 있음
  • 이 파일은 사용자 운영 환경을 설정함
  • 공통 설정: /etc/profile, /etc/bashrc
  • 사용자 설정
    • ~/.bash_profile: 로그인 시 실행됨
    • .~/.bash_history: 명령어를 기록하여 재사용 가능하도록 지원
    • ~/.bashrc: alias와 자동 실행을 지정
    • ~/.bash_logout: 로그아웃 직전에 실행됨
  • /etc/profile.d: 특정 응용 프로그램 시작 시 자동 실행할 스크립트 경로 저장

 


bash shell의 주요 기능

history 기능

  • 일정 개수(기본 천개) 이상 사용했던 명령어를 저장했다가 다시 불러 사용
  • .bash_history에 저장된 명령어를 재사용
  • 해당 파일은 개별 사용자들의 홈 디렉터리에 위치

 

alias 기능

  • 자주 사용하는 명령어를 별칭으로 지정하여 간편하게 사용

 


프로세스

개념

  • 프로세스: CPU와 메모리를 할당받아 프로그램이 실행된 상태. 즉, CPU/메모리 등 자원을 할당받아 실행된 상태
  • 프로세스마다 고유의 PID를 가짐
  • 최초 실행 프로세스는 원래 init으로, PID 1을 가짐. 단 CentOS 7부터는 systemd가 최초 실행되면서 1이 됨

 

프로세스 관련 용어

데몬의 종류
1. Stand Alone(ex: httpd)
  - 독립적으로 운영되는 데몬
  - 사용자 요청 시 즉시 응답 가능
2. inetd 데몬(ex: telnet, FTP)
  - 슈퍼 데몬이라고도 부름
  - 하위에 종속된 모든 데몬이 함께 실행됨
  - 사용자 요청 시 해당되는 서비스를 구동하여 응답하여 속도는 느리나 메모리 효율성
  • fork: 기본 프로세스를 복제하여 실행 → 부모/자식 관계
  • exec: 새로운 프로세스로 변경되어 실행 → 하나의 프로세스만 남게 됨
  • 데몬: 부팅 시 자동으로 실행되는 백그라운드 프로세스
    • 메모리에 상주하며 사용자의 특정 요청을 즉시 처리하는 대기 서버 프로세스
    • CentOS7부터는 systemd에 의해 관리되며 일부 바뀐 부분 존재
  • 시그널: 프로세스에게 전달할 수 있는 이벤트(신호)
    • kill -l로 가능한 시그널 목록 확인

 


프로세스 관련 명령어

ps(process status)

좀비 프로세스
좀비 프로세스는 KILL 시그널을 받아도 종료되지 않음. 이 프로세스는 이미 현재 프로세스에 대한 모든 정보가 메모리에서 사라졌지만 부모 프로세스가 정상적인 종료 처리를 하지 못해 발생함

 

  • 실행 중인 프로세스의 목록/상태 정보를 표시
  • CPU 사용도가 낮은 순으로 출력됨
  • 옵션 없이 요청할 경우 현재 터미널에서 실행되고 있는 프로세스 관련 정보만 표시
  • ps <옵션>

 

pstree

  • 실행 중인 프로세스의 목록을 트리 형식으로 표시
  • pstree <옵션>

 

jobs

  • 작업 프로세스의 동작 상태 표시(중지, 진행 중, 변경되었지만 보고되지 않음)
  • jobs <옵션> [작업번호]

 

bg/fg

  • 백그라운드 ↔ 포그라운드로 작업 전환
  • bg <작업번호> | fg <작업번호>
# ping 8.8.8.8 > NULL &
- '>' NULL을 통해 화면에 출력하지 않도록 함
- '&'를 통해 리눅스 명령어를 백그라운드 실행

 

kill

  • 프로세스 종료
  • kill <옵션> [시그널 번호 | PID | %작업번호]

 

killall

  • 동일한 데몬의 여러 프로세스를 한번에 종료
  • 프로세스명으로 연관된 모든 프로세스를 종료함
  • killall <옵션> [프로세스명]

 

nice

프로세스 우선 순위
프로세스의 우선 순위가 높다는 것은 다른 프로세스보다 시스템 자원이 더 많이 할당되는 것을 의미함. 즉 실행 속도가 빨라지게 됨
  • 프로세스의 우선 순위를 확인하고 변경
  • NI값을 조정(-20 ~19 범위)
  • 값이 작을수록 우선 순위가 높음
  • 일반 사용자는 NI값 증가만 가능
  • nice <옵션> [프로세스명]

 

renice

NICE vs RENICE
-  nice: 우선순위를 변경하며 프로그램을 재시작(옵션값의 숫자를 더함)
- renice: 현재 실행 중인 프로그램의 우선순위를 변경(설정한 값 자체로 변경됨)
  • 실행 중인 프로세스의 우선순위 변경
  • renice <옵션> <NI값> [PID]

 

top

  • 시스템 운영 상태 혹은 프로세스 상태 확인
  • top <옵션> [PID]
  • -d: 실시간 화면 출력 시간 지정(기본 5초)
    -p: PID 지정

 

nohup

  • 프로세스 중단 없이 백그라운드로 작업 실행
  • 로그아웃 되어도 계속 실행됨
  • 백그라운드로 실행될 수 있도록 명령어 뒤에 ‘&’를 명시
  • 표준 출력 내용을 nohup.out에 기록

 

cron

  • 주기적으로 반복되는 일을 자동으로 실행할 수 있도록 설정
  • crond: 스케쥴링 데몬
  • /etc/crontab: 설정 파일
  • crontab <옵션> [파일명]

 

 


References