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 <옵션> [파일명]