LINUX Shell - 이해하기



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가지(시험+실무)

  1. 변수는 항상 따옴표

rm -rf "$target"
cp "$src" "$dst"
  1. 명령 치환/평가(eval) 지양

  • eval "$input" 같은 방식은 명령 주입 위험

  1. PATH 고정/절대경로 사용

PATH=/usr/sbin:/usr/bin:/sbin:/bin
/usr/bin/grep ...
  1. 임시파일은 안전하게

tmp="$(mktemp)"
  1. 권한 최소화

  • root로 돌릴 필요 없으면 일반 계정으로 실행

  1. 로그 남기기

./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개

  1. ls -al은 숨김 파일을 포함해 자세한 목록을 보여준다. → O

  2. chmod 600 key.pem은 소유자만 읽기/쓰기 가능하게 한다. → O

  3. umask는 이미 존재하는 파일의 권한을 변경하는 명령이다. → X (새로 생성될 때 기본 권한 제한)

  4. tail -f는 파일의 끝부분을 실시간으로 متابعة(추적)한다. → O

  5. ps -ef는 시스템의 모든 프로세스를 전체 형식으로 보여준다. → O

  6. grep은 기본적으로 파일 권한을 변경하는 명령이다. → X (문자열 검색)

  7. ss -lntp는 리스닝 포트/프로세스 정보를 확인할 때 자주 쓴다. → O


객관식 8개

  1. 현재 작업 디렉터리를 출력하는 명령은?
    cdpwdlswhoami정답: ②

  2. /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정답: ①

  3. 특정 문자열(error)을 로그에서 찾을 때 사용하는 명령은?
    findgreppstar정답: ②

  4. 실행 중인 프로세스를 PID로 강제 종료할 때 자주 쓰는 형식은?
    kill -9 PIDrm -9 PIDstop -9 PIDps -9 PID정답: ①

  5. systemd 환경에서 서비스 상태 확인 명령은?
    service status sshdsystemctl status sshdss status sshdip status sshd정답: ②

  6. 네트워크 인터페이스/IP 정보를 확인하는 명령으로 적절한 것은?
    ip aps -efchmod 755tar -xvf정답: ①

  7. 파일 무결성(해시)을 확인하는 명령은?
    sha256sum filechmod filecat filetouch file정답: ①

  8. 디렉터리를 tar로 묶는 명령으로 맞는 것은?
    tar -cvf a.tar dir/tar -lntp a.tar dir/tar -ef a.tar dir/tar -chmod a.tar dir/정답: ①


댓글 쓰기

새 댓글을 작성할 수 없습니다.*

다음 이전