Shell 치트 시트

실습 랩을 통해 쉘 학습하기

실습 랩과 실제 시나리오를 통해 쉘 스크립팅 및 명령줄 작업을 학습하세요. LabEx 는 필수 Bash 명령어, 파일 작업, 텍스트 처리, 프로세스 관리 및 자동화를 다루는 포괄적인 쉘 과정을 제공합니다. 명령줄 효율성과 쉘 스크립팅 기술을 마스터하세요.

파일 및 디렉토리 작업

파일 목록 보기: ls

현재 위치의 파일 및 디렉토리를 표시합니다.

# 현재 디렉토리의 파일 목록 보기
ls
# 상세 정보와 함께 목록 보기
ls -l
# 숨겨진 파일 표시
ls -a
# 사람이 읽기 쉬운 파일 크기로 목록 보기
ls -lh
# 수정 시간순으로 정렬
ls -lt

파일 생성: touch

빈 파일을 생성하거나 타임스탬프를 업데이트합니다.

# 새 파일 생성
touch newfile.txt
# 여러 파일 생성
touch file1.txt file2.txt file3.txt
# 기존 파일의 타임스탬프 업데이트
touch existing_file.txt

디렉토리 생성: mkdir

새 디렉토리를 생성합니다.

# 디렉토리 생성
mkdir my_directory
# 중첩된 디렉토리 생성
mkdir -p parent/child/grandchild
# 여러 디렉토리 생성
mkdir dir1 dir2 dir3

파일 복사: cp

파일 및 디렉토리를 복사합니다.

# 파일 복사
cp source.txt destination.txt
# 디렉토리 재귀적으로 복사
cp -r source_dir dest_dir
# 확인 프롬프트와 함께 복사
cp -i file1.txt file2.txt
# 파일 속성 보존
cp -p original.txt copy.txt

이동/이름 변경: mv

파일 및 디렉토리를 이동하거나 이름을 변경합니다.

# 파일 이름 변경
mv oldname.txt newname.txt
# 파일을 디렉토리로 이동
mv file.txt /path/to/directory/
# 여러 파일 이동
mv file1 file2 file3 target_directory/

파일 삭제: rm

파일 및 디렉토리를 제거합니다.

# 파일 삭제
rm file.txt
# 디렉토리 및 내용 삭제
rm -r directory/
# 확인 없이 강제 삭제
rm -f file.txt
# 대화형 삭제 (각각 확인)
rm -i *.txt

탐색 및 경로 관리

현재 디렉토리: pwd

현재 작업 디렉토리 경로를 출력합니다.

# 현재 디렉토리 표시
pwd
# 예시 출력:
/home/user/documents

디렉토리 변경: cd

다른 디렉토리로 변경합니다.

# 홈 디렉토리로 이동
cd ~
# 상위 디렉토리로 이동
cd ..
# 이전 디렉토리로 이동
cd -
# 특정 디렉토리로 이동
cd /path/to/directory
퀴즈

로그인하여 이 퀴즈에 답하고 학습 진행 상황을 추적하세요

cd ~는 무엇을 합니까?
홈 디렉토리로 변경
루트 디렉토리로 변경
상위 디렉토리로 변경
새 디렉토리 생성

디렉토리 트리: tree

디렉토리 구조를 트리 형식으로 표시합니다.

# 디렉토리 트리 표시
tree
# 깊이를 2 레벨로 제한
tree -L 2
# 디렉토리만 표시
tree -d

텍스트 처리 및 검색

파일 보기: cat / less / head / tail

다양한 방식으로 파일 내용을 표시합니다.

# 전체 파일 표시
cat file.txt
# 페이지별로 파일 보기
less file.txt
# 처음 10줄 표시
head file.txt
# 마지막 10줄 표시
tail file.txt
# 마지막 20줄 표시
tail -n 20 file.txt
# 파일 변경 사항 추적 (로그에 유용)
tail -f logfile.txt

파일 내 검색: grep

텍스트 파일에서 패턴을 검색합니다.

# 파일에서 패턴 검색
grep "pattern" file.txt
# 대소문자 구분 없이 검색
grep -i "pattern" file.txt
# 디렉토리에서 재귀적으로 검색
grep -r "pattern" directory/
# 줄 번호 표시
grep -n "pattern" file.txt
# 일치하는 줄 수 계산
grep -c "pattern" file.txt
퀴즈

로그인하여 이 퀴즈에 답하고 학습 진행 상황을 추적하세요

grep -r "pattern" directory/는 무엇을 합니까?
현재 파일에서만 검색
디렉토리의 모든 파일에서 재귀적으로 검색
파일 내 패턴을 대체
패턴을 포함하는 파일 삭제

파일 찾기: find

기준에 따라 파일 및 디렉토리를 찾습니다.

# 이름으로 파일 찾기
find . -name "*.txt"
# 유형으로 파일 찾기
find . -type f -name "config*"
# 디렉토리 찾기
find . -type d -name "backup"
# 지난 7일 이내에 수정된 파일 찾기
find . -mtime -7
# 찾아서 명령어 실행
find . -name "*.log" -delete

텍스트 조작: sed / awk / sort

텍스트 데이터를 처리하고 조작합니다.

# 파일 내 텍스트 바꾸기
sed 's/old/new/g' file.txt
# 특정 열 추출
awk '{print $1, $3}' file.txt
# 파일 내용 정렬
sort file.txt
# 중복 줄 제거
sort file.txt | uniq
# 단어 빈도수 계산
cat file.txt | tr ' ' '\n' | sort | uniq -c

파일 권한 및 소유권

권한 보기: ls -l

상세한 파일 권한 및 소유권을 표시합니다.

# 상세 파일 정보 표시
ls -l
# 예시 출력:
# -rw-r--r-- 1 user group 1024 Jan 1 12:00 file.txt
# d = 디렉토리, r = 읽기, w = 쓰기, x = 실행

권한 변경: chmod

파일 및 디렉토리 권한을 수정합니다.

# 소유자에게 실행 권한 부여
chmod +x script.sh
# 특정 권한 설정 (755)
chmod 755 file.txt
# 그룹/다른 사용자에 대한 쓰기 권한 제거
chmod go-w file.txt
# 재귀적 권한 변경
chmod -R 644 directory/
퀴즈

로그인하여 이 퀴즈에 답하고 학습 진행 상황을 추적하세요

chmod 755 file.txt는 무엇을 설정합니까?
모든 사용자에게 읽기, 쓰기, 실행
소유자에게 읽기/쓰기, 다른 사용자에게 읽기
소유자에게 읽기, 쓰기, 실행; 그룹 및 다른 사용자에게 읽기, 실행
모든 사용자에게 읽기만 허용

소유권 변경: chown / chgrp

파일 소유자 및 그룹을 변경합니다.

# 소유자 변경
chown newowner file.txt
# 소유자 및 그룹 변경
chown newowner:newgroup file.txt
# 그룹만 변경
chgrp newgroup file.txt
# 재귀적 소유권 변경
chown -R user:group directory/

권한 숫자

숫자 권한 표기법 이해.

# 권한 계산:
# 4 = 읽기 (r), 2 = 쓰기 (w), 1 = 실행 (x)
# 755 = rwxr-xr-x (소유자: rwx, 그룹: r-x, 다른 사용자: r-x)
# 644 = rw-r--r-- (소유자: rw-, 그룹: r--, 다른 사용자: r--)
# 777 = rwxrwxrwx (모두에 대한 전체 권한)
# 600 = rw------- (소유자: rw-, 그룹: ---, 다른 사용자: ---)

프로세스 관리

프로세스 보기: ps / top / htop

실행 중인 프로세스에 대한 정보를 표시합니다.

# 현재 사용자의 프로세스 표시
ps
# 모든 프로세스를 상세 정보와 함께 표시
ps aux
# 트리 형식으로 프로세스 표시
ps -ef --forest
# 대화형 프로세스 뷰어
top
# 향상된 프로세스 뷰어 (사용 가능한 경우)
htop

백그라운드 작업: & / jobs / fg / bg

백그라운드 및 포그라운드 프로세스를 관리합니다.

# 명령을 백그라운드에서 실행
command &
# 활성 작업 목록 보기
jobs
# 작업을 포그라운드로 가져오기
fg %1
# 작업을 백그라운드로 보내기
bg %1
# 현재 프로세스 일시 중지
Ctrl+Z

프로세스 종료: kill / killall

PID 또는 이름으로 프로세스를 종료합니다.

# PID로 프로세스 종료
kill 1234
# 프로세스 강제 종료
kill -9 1234
# 이름이 같은 모든 프로세스 종료
killall firefox
# 특정 시그널 보내기
kill -TERM 1234

시스템 모니터링: free / df / du

시스템 리소스 및 디스크 사용량을 모니터링합니다.

# 메모리 사용량 표시
free -h
# 디스크 공간 표시
df -h
# 디렉토리 크기 표시
du -sh directory/
# 가장 큰 디렉토리 표시
du -h --max-depth=1 | sort -hr

입력/출력 리디렉션

리디렉션: > / >> / <

명령어 출력 및 입력을 리디렉션합니다.

# 출력을 파일로 리디렉션 (덮어쓰기)
command > output.txt
# 출력을 파일에 추가
command >> output.txt
# 파일에서 입력 리디렉션
command < input.txt
# 출력 및 오류 모두 리디렉션
command > output.txt 2>&1
# 출력 폐기
command > /dev/null
퀴즈

로그인하여 이 퀴즈에 답하고 학습 진행 상황을 추적하세요

쉘 리디렉션에서 >>>의 차이점은 무엇입니까?
>는 추가하고, >>는 덮어씁니다
>는 파일을 덮어쓰고, >>는 파일에 추가합니다
>는 stdout 을 리디렉션하고, >>는 stderr 을 리디렉션합니다
차이점이 없습니다

파이프: |

파이프를 사용하여 명령을 연결합니다.

# 기본 파이프 사용법
command1 | command2
# 다중 파이프
cat file.txt | grep "pattern" | sort | uniq
# 출력 줄 수 계산
ps aux | wc -l
# 긴 출력 페이지 넘기기
ls -la | less

Tee: tee

출력을 파일과 stdout 모두에 씁니다.

# 출력을 저장하고 표시
command | tee output.txt
# 파일에 추가
command | tee -a output.txt
# 다중 출력
command | tee file1.txt file2.txt

Here Documents: <<

명령어에 여러 줄 입력을 제공합니다.

# Here document으로 파일 생성
cat << EOF > file.txt
Line 1
Line 2
Line 3
EOF
# Here document으로 이메일 보내기
mail user@example.com << EOF
Subject: Test
This is a test message.
EOF

변수 및 환경

변수: 할당 및 사용

쉘 변수를 생성하고 사용합니다.

# 변수 할당 (= 주변에 공백 없음)
name="John"
count=42
# 변수 사용
echo $name
echo "Hello, $name"
echo "Count: ${count}"
# 명령어 치환
current_dir=$(pwd)
date_today=$(date +%Y-%m-%d)

환경 변수: export / env

환경 변수를 관리합니다.

# 변수를 환경으로 내보내기
export PATH="/new/path:$PATH"
export MY_VAR="value"
# 모든 환경 변수 보기
env
# 특정 변수 보기
echo $HOME
echo $PATH
# 변수 해제
unset MY_VAR

특수 변수

특별한 의미를 갖는 내장 쉘 변수.

# 스크립트 인수
$0  # 스크립트 이름
$1, $2, $3...  # 첫 번째, 두 번째, 세 번째 인수
$#  # 인수의 개수
$@  # 모든 인수를 개별 단어로
$*  # 모든 인수를 단일 단어로
$?  # 마지막 명령어의 종료 상태
# 프로세스 정보
$$  # 현재 쉘 PID
$!  # 마지막 백그라운드 명령어의 PID

매개변수 확장

고급 변수 조작 기술.

# 기본값
${var:-default}  # var가 비어 있으면 기본값 사용
${var:=default}  # var가 비어 있으면 기본값으로 설정
# 문자열 조작
${var#pattern}   # 시작 부분에서 가장 짧은 일치 항목 제거
${var##pattern}  # 시작 부분에서 가장 긴 일치 항목 제거
${var%pattern}   # 끝 부분에서 가장 짧은 일치 항목 제거
${var%%pattern}  # 끝 부분에서 가장 긴 일치 항목 제거

스크립팅 기초

스크립트 구조

기본 스크립트 형식 및 실행.

#!/bin/bash
# 이것은 주석입니다
# 변수
greeting="Hello, World!"
user=$(whoami)
# 출력
echo $greeting
echo "Current user: $user"
# 스크립트 실행 권한 부여:
chmod +x script.sh
# 스크립트 실행:
./script.sh

조건문: if

조건문을 사용하여 스크립트 흐름을 제어합니다.

#!/bin/bash
if [ -f "file.txt" ]; then
    echo "파일이 존재합니다"
elif [ -d "directory" ]; then
    echo "디렉토리가 존재합니다"
else
    echo "둘 다 존재하지 않습니다"
fi
# 문자열 비교
if [ "$USER" = "root" ]; then
    echo "루트로 실행 중입니다"
fi
# 숫자 비교
if [ $count -gt 10 ]; then
    echo "Count는 10보다 큽니다"
fi

루프: for / while

루프를 사용하여 명령을 반복합니다.

#!/bin/bash
# 범위가 있는 for 루프
for i in {1..5}; do
    echo "Number: $i"
done
# 파일을 대상으로 하는 for 루프
for file in *.txt; do
    echo "Processing: $file"
done
# While 루프
count=1
while [ $count -le 5 ]; do
    echo "Count: $count"
    count=$((count + 1))
done

함수

재사용 가능한 코드 블록을 생성합니다.

#!/bin/bash
# 함수 정의
greet() {
    local name=$1
    echo "Hello, $name!"
}
# 반환 값이 있는 함수
add_numbers() {
    local sum=$(($1 + $2))
    echo $sum
}
# 함수 호출
greet "Alice"
result=$(add_numbers 5 3)
echo "Sum: $result"

네트워크 및 시스템 명령어

네트워크 명령어

연결성을 테스트하고 네트워크 구성을 확인합니다.

# 네트워크 연결 테스트
ping google.com
ping -c 4 google.com  # 4개 패킷만 전송
# DNS 조회
nslookup google.com
dig google.com
# 네트워크 구성
ip addr show  # IP 주소 표시
ip route show # 라우팅 테이블 표시
# 파일 다운로드
wget https://example.com/file.txt
curl -O https://example.com/file.txt

시스템 정보: uname / whoami / date

시스템 및 사용자 정보를 가져옵니다.

# 시스템 정보
uname -a      # 모든 시스템 정보
uname -r      # 커널 버전
hostname      # 컴퓨터 이름
whoami        # 현재 사용자 이름
id            # 사용자 ID 및 그룹
# 날짜 및 시간
date          # 현재 날짜/시간
date +%Y-%m-%d # 사용자 지정 형식
uptime        # 시스템 가동 시간

아카이브 및 압축: tar / zip

압축된 아카이브를 생성 및 추출합니다.

# tar 아카이브 생성
tar -czf archive.tar.gz directory/
# tar 아카이브 추출
tar -xzf archive.tar.gz
# zip 아카이브 생성
zip -r archive.zip directory/
# zip 아카이브 추출
unzip archive.zip
# 아카이브 내용 보기
tar -tzf archive.tar.gz
unzip -l archive.zip

파일 전송: scp / rsync

시스템 간에 파일을 전송합니다.

# 원격 서버로 파일 복사
scp file.txt user@server:/path/to/destination
# 원격 서버에서 복사
scp user@server:/path/to/file.txt .
# 디렉토리 동기화 (로컬에서 원격으로)
rsync -avz local_dir/ user@server:/remote_dir/
# 삭제 포함 동기화 (미러링)
rsync -avz --delete local_dir/ user@server:/remote_dir/

명령어 기록 및 단축키

명령어 기록: history

이전 명령어를 보고 재사용합니다.

# 명령어 기록 표시
history
# 마지막 10개 명령어 표시
history 10
# 이전 명령어 실행
!!
# 번호로 명령어 실행
!123
# 'ls'로 시작하는 마지막 명령어 실행
!ls
# 대화형으로 기록 검색
Ctrl+R

기록 확장

이전 명령어의 일부를 재사용합니다.

# 이전 명령어의 인수
!$    # 이전 명령어의 마지막 인수
!^    # 이전 명령어의 첫 번째 인수
!*    # 이전 명령어의 모든 인수
# 사용 예시:
ls /very/long/path/to/file.txt
cd !$  # /very/long/path/to/file.txt 로 이동

키보드 단축키

효율적인 명령줄 사용을 위한 필수 단축키.

# 탐색
Ctrl+A  # 줄의 시작으로 이동
Ctrl+E  # 줄의 끝으로 이동
Ctrl+F  # 한 문자 앞으로 이동
Ctrl+B  # 한 문자 뒤로 이동
Alt+F   # 한 단어 앞으로 이동
Alt+B   # 한 단어 뒤로 이동
# 편집
Ctrl+U  # 커서 앞 줄 지우기
Ctrl+K  # 커서 뒤 줄 지우기
Ctrl+W  # 커서 앞 단어 삭제
Ctrl+Y  # 마지막으로 삭제된 텍스트 붙여넣기
# 프로세스 제어
Ctrl+C  # 현재 명령어 중단
Ctrl+Z  # 현재 명령어 일시 중지
Ctrl+D  # 쉘 종료 또는 EOF

명령어 조합 및 팁

유용한 명령어 조합

일반적인 작업을 위한 강력한 한 줄 명령어.

# 여러 파일에서 텍스트 찾기 및 바꾸기
find . -name "*.txt" -exec sed -i 's/old/new/g' {} \;
# 현재 디렉토리에서 가장 큰 파일 찾기
du -ah . | sort -rh | head -10
# 특정 패턴에 대해 로그 파일 모니터링
tail -f /var/log/syslog | grep "ERROR"
# 디렉토리 내 파일 수 계산
ls -1 | wc -l
# 타임스탬프를 사용하여 백업 생성
cp file.txt file.txt.backup.$(date +%Y%m%d-%H%M%S)

별칭 및 함수

자주 사용하는 명령어에 대한 바로 가기를 만듭니다.

# 별칭 생성 ( ~/.bashrc 에 추가)
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'
alias ..='cd ..'
alias ...='cd ../..'
# 모든 별칭 보기
alias
# 영구적인 별칭 생성 ~/.bashrc:
echo "alias mycommand='long command here'" >>
~/.bashrc
source ~/.bashrc

작업 제어 및 화면 세션

장기 실행 프로세스 및 세션 관리.

# 명령을 백그라운드에서 시작
nohup long_running_command &
# screen 세션 시작
screen -S mysession
# screen에서 분리: Ctrl+A 다음 D
# screen에 다시 연결
screen -r mysession
# screen 세션 목록
screen -ls
# 대안: tmux
tmux new -s mysession
# 분리: Ctrl+B 다음 D
tmux attach -t mysession

시스템 유지보수

일반적인 시스템 관리 작업.

# 디스크 사용량 확인
df -h
du -sh /*
# 메모리 사용량 확인
free -h
cat /proc/meminfo
# 실행 중인 서비스 확인
systemctl status service_name
systemctl list-units --type=service
# 패키지 목록 업데이트 (Ubuntu/Debian)
sudo apt update && sudo apt upgrade
# 설치된 패키지 검색
dpkg -l | grep package_name

관련 링크