LINUX Shell 쉽게 이해하기 (개념 + 종류 + 보안 포인트)
1) Shell이 뭔데?
"Shell(쉘)"은 사용자가 입력한 명령어를 받아서 "리눅스 커널(OS 핵심)"에게 전달하고, 결과를 다시 보여주는 “명령 해석기”예요.
-
사용자 ↔ Shell ↔ 커널 ↔ 하드웨어
즉, "리눅스에서 명령을 실행하는 창(환경)"이라고 생각하면 쉽습니다.
2) 쉘의 역할 3가지
| 역할 | 설명 | 예시 |
|---|---|---|
| 명령 해석 | 명령어를 분석해서 실행 | ls, cp, rm |
| 작업 제어 | 백그라운드/포그라운드 전환 | &, jobs, fg, bg |
| 스크립트 실행 | 명령을 파일로 묶어 자동화 | .sh 스크립트, cron 작업 |
3) 쉘 종류(자주 나오는 것)
| 쉘 | 특징 | 비고 |
|---|---|---|
sh |
전통적인 기본 쉘 | 스크립트 호환의 기준 느낌 |
bash |
가장 흔한 기본 쉘 | 대부분 리눅스 기본 |
zsh |
자동완성/편의 기능 강함 | 개발자 선호 |
csh/tcsh |
C 문법 느낌 | 일부 환경에서 사용 |
ksh |
Korn Shell | 유닉스 계열에서 종종 |
✅ 내 로그인 쉘 확인:
echo $SHELL
✅ 시스템에 등록된 쉘 목록:
cat /etc/shells
4) 로그인 쉘 vs 비로그인 쉘(헷갈리는 포인트)
-
로그인 쉘: SSH 접속/콘솔 로그인처럼 “로그인”으로 시작되는 쉘
-
비로그인 쉘: 터미널에서
bash를 한 번 더 실행하거나 스크립트 실행 등
이 차이 때문에 환경변수 설정 파일이 다르게 적용될 수 있어요.
5) 환경변수 & 설정 파일(실전에서 많이 씀)
| 파일 | 주로 언제 | 내용 예 |
|---|---|---|
~/.bash_profile / ~/.profile |
로그인 시 | PATH, 기본 환경 |
~/.bashrc |
터미널 열 때(대화형) | alias, 프롬프트 |
/etc/profile |
모든 사용자 로그인 공통 | 전역 환경 |
/etc/bashrc(계열별) |
대화형 공통 | 전역 alias 등 |
✅ 환경변수 확인/설정:
echo $PATH
export PATH=$PATH:/opt/bin
6) 기본 사용 예시(초보 필수)
pwd # 현재 위치
ls -al # 목록 자세히
cd /var/log # 이동
cat file.txt # 보기
grep "error" log # 검색
리다이렉션/파이프(중요)
command > out.txt # 출력 저장(덮어쓰기)
command >> out.txt # 출력 추가
command 2> err.txt # 에러 저장
command > a 2>&1 # 표준출력+에러 합치기
cat a.txt | grep hi # 파이프 연결
7) 정보보안기사 관점: Shell 보안 포인트
(1) 위험한 습관
-
root로 상시 작업
-
rm -rf /같은 파괴적 명령 오타 -
스크립트에 비밀번호 하드코딩
-
PATH 조작 취약점(예: 현재 디렉터리
.가 PATH 앞에 있음)
(2) 점검 키워드(시험/실무)
| 포인트 | 왜 위험? | 대응 |
|---|---|---|
| 권한상승(sudo, SUID) | 쉘에서 시스템 장악 가능 | 최소권한, SUID 점검 |
| 환경변수 주입 | 잘못된 PATH/LD_* 로 악용 | PATH 안전 구성 |
| 로그 기록 | 명령 기록으로 추적 가능 | ~/.bash_history 관리/감사 |
| 쉘 제한 | 특정 계정 로그인 차단 | /usr/sbin/nologin, /bin/false |
✅ 로그인 차단용 쉘 예:
ftp:x:14:50:FTP:/srv/ftp:/usr/sbin/nologin
8) 한 줄 요약
Linux Shell은 사용자의 명령을 해석해 커널에 전달하는 명령 해석기이며, 자동화(스크립트/cron)와 작업 제어를 제공하지만 권한·환경변수·로그 관리가 보안의 핵심이다.
1) 쉘 스크립트 기본 문법(필수) + 보안 코딩 팁
1-1. 기본 뼈대
#!/bin/bash
set -euo pipefail
echo "Hello, Shell!"
-
#!/bin/bash: 어떤 쉘로 실행할지 지정 -
set -euo pipefail:-
-e오류 나면 중단 -
-u미정 변수 사용 시 중단 -
pipefail파이프 중간 실패도 실패 처리
→ 실무/보안에 매우 유용
-
1-2. 변수 & 입력
name="hong"
echo "$name"
echo "첫번째 인자: $1"
✅ 사용자 입력 받기
read -r user
echo "입력: $user"
1-3. 조건문(if)
if [ -f "/etc/passwd" ]; then
echo "파일 존재"
else
echo "없음"
fi
자주 쓰는 테스트
-
-f파일,-d디렉터리,-r/-w/-x권한 -
문자열:
=!=-z(비어있음) -
숫자:
-eq -ne -gt -lt -ge -le
1-4. 반복문(for/while)
for u in alice bob; do
echo "$u"
done
while read -r line; do
echo "$line"
done < input.txt
1-5. 함수
backup() {
echo "백업 시작"
}
backup
1-6. 보안 코딩 핵심 6가지(시험+실무)
-
변수는 항상 따옴표
rm -rf "$target"
cp "$src" "$dst"
-
명령 치환/평가(eval) 지양
-
eval "$input"같은 방식은 명령 주입 위험
-
PATH 고정/절대경로 사용
PATH=/usr/sbin:/usr/bin:/sbin:/bin
/usr/bin/grep ...
-
임시파일은 안전하게
tmp="$(mktemp)"
-
권한 최소화
-
root로 돌릴 필요 없으면 일반 계정으로 실행
-
로그 남기기
./job.sh >> /var/log/job.log 2>&1
2) 정보보안기사 자주 나오는 리눅스 명령어 Top 30 요약표
| 분류 | 명령어 | 용도(한 줄) | 예시 |
|---|---|---|---|
| 기본 | pwd |
현재 경로 | pwd |
ls |
목록 | ls -al |
|
cd |
이동 | cd /var/log |
|
| 파일 | cat |
내용 출력 | cat a.txt |
less |
페이지 보기 | less log |
|
cp |
복사 | cp a b |
|
mv |
이동/이름변경 | mv a b |
|
rm |
삭제 | rm -f a |
|
mkdir |
폴더 생성 | mkdir test |
|
touch |
파일 생성/시간변경 | touch a |
|
| 권한 | chmod |
권한 변경 | chmod 640 a |
chown |
소유자 변경 | chown user a |
|
chgrp |
그룹 변경 | chgrp dev a |
|
umask |
기본 권한 제한 | umask 027 |
|
| 검색 | grep |
문자열 검색 | grep error log |
find |
파일 찾기 | find / -name xferlog |
|
awk |
필드 처리 | awk -F: '{print $1}' /etc/passwd |
|
sed |
치환/편집 | sed 's/a/b/' |
|
| 프로세스 | ps |
프로세스 보기 | ps -ef |
top |
실시간 자원 | top |
|
kill |
종료 | kill -9 PID |
|
| 네트워크 | ip |
IP/라우팅 | ip a |
ss |
소켓/포트 | ss -lntp |
|
ping |
연결 확인 | ping 8.8.8.8 |
|
| 로그 | tail |
끝 보기 | tail -f /var/log/messages |
journalctl |
systemd 로그 | journalctl -xe |
|
| 계정 | id |
UID/GID | id user1 |
whoami |
내 계정 | whoami |
|
passwd |
비밀번호 변경 | passwd user1 |
|
| 서비스 | systemctl |
서비스 제어 | systemctl status sshd |
| 아카이브 | tar |
압축/묶기 | tar -cvf a.tar dir/ |
| 무결성 | sha256sum |
해시 확인 | sha256sum file |
아래는 리눅스 명령어 Top 30 기반 기출형 15문제(OX 7 + 객관식 8) 입니다. (정답 포함)
OX 문제 7개
-
ls -al은 숨김 파일을 포함해 자세한 목록을 보여준다. → O -
chmod 600 key.pem은 소유자만 읽기/쓰기 가능하게 한다. → O -
umask는 이미 존재하는 파일의 권한을 변경하는 명령이다. → X (새로 생성될 때 기본 권한 제한) -
tail -f는 파일의 끝부분을 실시간으로 متابعة(추적)한다. → O -
ps -ef는 시스템의 모든 프로세스를 전체 형식으로 보여준다. → O -
grep은 기본적으로 파일 권한을 변경하는 명령이다. → X (문자열 검색) -
ss -lntp는 리스닝 포트/프로세스 정보를 확인할 때 자주 쓴다. → O
객관식 8개
-
현재 작업 디렉터리를 출력하는 명령은?
①cd②pwd③ls④whoami→ 정답: ② -
/etc/passwd에서 계정명(첫 번째 필드)만 출력하려면 가장 적절한 것은?
①awk -F: '{print $1}' /etc/passwd
②grep -F: '{print $1}' /etc/passwd
③sed -F: '{print $1}' /etc/passwd
④cat -F: '{print $1}' /etc/passwd→ 정답: ① -
특정 문자열(error)을 로그에서 찾을 때 사용하는 명령은?
①find②grep③ps④tar→ 정답: ② -
실행 중인 프로세스를 PID로 강제 종료할 때 자주 쓰는 형식은?
①kill -9 PID②rm -9 PID③stop -9 PID④ps -9 PID→ 정답: ① -
systemd 환경에서 서비스 상태 확인 명령은?
①service status sshd②systemctl status sshd③ss status sshd④ip status sshd→ 정답: ② -
네트워크 인터페이스/IP 정보를 확인하는 명령으로 적절한 것은?
①ip a②ps -ef③chmod 755④tar -xvf→ 정답: ① -
파일 무결성(해시)을 확인하는 명령은?
①sha256sum file②chmod file③cat file④touch file→ 정답: ① -
디렉터리를 tar로 묶는 명령으로 맞는 것은?
①tar -cvf a.tar dir/②tar -lntp a.tar dir/③tar -ef a.tar dir/④tar -chmod a.tar dir/→ 정답: ①