CAB TA 4기 12일차의 기록

Urban Jungle·2025년 3월 27일

CAB TA 4기

목록 보기
12/28

리디렉션 및 파이프 실습 2

1. /tmp로 이동 후 /root로 돌아간 뒤 /tmp/mtest 생성

cd /tmp/
cd /root/ 또는 cd 또는 cd ~
mkdir /tmp/mtest 또는 mkdir ~-/mtest
  • /tmp → /root 이동 확인 후 다시 /tmp/mtest 생성

2. /tmp/mtest에 파일 다량 생성

cd /tmp/mtest
touch za{1..10}
touch zb{01..10}
touch zc{001..100}

touch ~-/z{a{1..10}, b{01..10}},c{001..100}}
  • 생성파일: za1 ~ za10 zb01 ~ zb10 zc001 ~ zc100

3. 파일 삭제: [ ], ?, * 패턴 활용

rm za[1-9] za10
rm zb??
rm zc*

rm -f ~-/z{a[0-9],a10,b??,c*}
  • za[1-9] za10 : [ ]는 한 자리 수 / za10은 따로 지정
  • zb?? : zb + 임의의 두 문자 (zb01 ~ zb10)
  • zc* : zc로 시작하는 모든 파일

4. /media 안에 디렉토리 & 파일 생성 + 정리

mkdir -p /media/{Music,Movie,Picture}

touch /media/music{00..20}.mp3
touch /media/movie{00..10}.avi
touch /media/picture{0..9}.jpg

mv /media/music*.mp3 /media/Music
mv /media/movie*.avi /media/Movie
mv /media/picture*.jpg /media/Picture
  • {}로 범위 또는 여러 항목 생성
  • mv에서 *로 패턴 지정 → 간단하게 디렉토리별 정리

5. ps -ef 결과를 pfile01에 저장

ps -ef > pfile01
  • 표준 출력만 저장
  • 에러 출력은 없음 (그래도 2>/dev/null을 붙여도 OK)

6. ls -R / 실행 시 에러는 출력하지 않게

ls -R / 2> /dev/null

  • 2> : 표준 에러 리디렉션
  • /dev/null : 에러를 버리는 공간 (= 블랙홀)

7. rpm -qa 결과 중 sh가 포함된 항목만 필터링

rpm -qa | grep 'sh'

  • 설치된 패키지 목록 중 sh 포함된 항목만 출력

8. 위 결과를 파일로 저장까지

rpm -qa | grep 'sh' > shlist.txt

  • 결과: 현재 디렉토리에 shlist.txt 파일 생성됨

grep 실습 3

/var/log/secure 파일의 심볼릭 링크 만들기

ln -s /var/log/secure /tmp/secure_s

  • -s: 심볼릭 링크 생성
  • /tmp/secure_s는 실제 파일이 아닌 가상의 연결 파일

1. root 패턴 검색

grep 'root' /tmp/secure_s

  • root가 포함된 줄 전체 출력

2. /tmp/secure_s 에서 s로 시작해서 t로 끝나는 패턴 검색

grep s.*t /tmp/secure_s

  • s.*ts로 시작해서 t로 끝나는 문자열

3. /tmp/secure_s 에서 대소문자를 무시하고 'ju' 패턴 검색

grep -i 'ju' /tmp/secure_s

  • -i: ignore case → Ju, JU, ju 등 모두 매치됨

4. su가 정확한 단어로 포함된 줄 검색

grep -w 'su' /tmp/secure_s

  • -w: 정확한 단어 단위로 매칭
  • 예: sudo는 제외됨, su만 따로 존재해야 매치

5. vagrant 정규표현식으로 검색

grep 'v[a-z]*t' /tmp/secure_s

  • v[a-z]*t: v로 시작해서 알파벳 여러 개 + t로 끝나는 단어
  • vagrant도 포함됨
  • 그냥 grep 'vagrant'도 되지만, 여긴 패턴 매칭 연습이므로 정규표현식 강조

6. /var/log 내에서 root 패턴 검색 (재귀 포함 가능)

grep -r 'root' /var/log

  • -r: 재귀적으로 하위 디렉토리 포함 검색

7. 3월 01일~31일, 08:00~18:59 사이 내용 검색

egrep '^Mar [0-3][0-9] (0[8-9]|1[0-8])' /tmp/secure_s

  • ^Mar: 줄 시작이 3월
  • [0-3][0-9]: 01~39 가능 → 날짜 포괄
  • 0[8-9]: 1[0-8]
  • 실제 날짜 검증은 안 하지만, log 파일 형식 기준으론 유효

8. rootvagrant 동시 검색 (2가지 방법)

방법 ①: -e 옵션

grep -e 'root' -e 'vagrant' /tmp/secure_s

방법 ②: egrep OR 조건

egrep 'root|vagrant' /tmp/secure_s

9. . 자체를 검색 (2가지 방법)

방법 ①: 백슬래시 이스케이프

grep '\.' /tmp/secure_s

방법 ②: -F 옵션 (리터럴 모드)

grep -F '.' /tmp/secure_s
또는
fgrep '.' /tmp/secure_s

  • .는 기본적으로 "모든 문자 1개"를 의미하는 메타문자
  • \. 또는 -F 옵션으로 문자 그대로 인식

find 실습 2

/var/log/ 디렉토리를 /tmp/로 복사

cp -r /var/log /tmp/

  • /tmp/log 디렉토리 생성됨 (하위 포함 복사)

1. /tmp에서 이름이 messages인 파일 찾기

find /tmp -name 'messages'

  • -name: 정확한 이름 매칭 (대소문자 구분)

2. /var/log에서 타입이 디렉토리 + 그룹이 utmp인 파일 찾기

find /var/log -type d -group utmp

  • -type d: 디렉토리

  • -group utmp: 그룹명이 utmp인 파일/디렉토리 대상

3. /tmp에서 5바이트 이하 파일 검색 + 자세히 출력

find /tmp -type f -size -5c -ls
또는
find /tmp -size -5c -exec ls -ild {} \;

  • -size -5c: 5바이트 보다 작은 (< 5 bytes)
  • -ls: ls -l처럼 상세 정보 출력

4. /tmp에서 파일명이 old로 끝나는 파일 → /root/로 이동

find /tmp -type f -name '*old' -exec mv {} /root/ \;

  • *old: 파일명이 old로 끝남
  • -exec mv {} /root/ \;: 찾은 각 파일을 /root/로 이동

5. /tmp에서 cron으로 시작하는 파일을 대화형으로 삭제

find /tmp -type f -name 'cron*' -ok rm -r {} \;

  • -ok: 실행 전 [y/n] 확인을 받는 안전한 삭제
  • cron*: 파일명이 cron으로 시작

6. /tmp에서 log가 포함된 일반 파일 삭제

find /tmp -type f -name '*log*' -exec rm {} \;

  • -type f: 일반 파일
  • *log*: 이름 중간에 log 포함

vi(vi editor)/Vim(Vi Improved)

Vim의 3가지 주요 모드

1. Command Mode

  • 기본 모드 (입력 없이 이동/삭제/복사 등)

2. Insert Mode (Edit Mode)

  • i, a, o 등으로 진입 → 내용 입력 가능

3. Last Line Mode (Extend Mode)

  • :로 진입 → 저장/종료/치환 등 수행

Command → Insert 모드 단축키

i: 커서 앞에서 입력
a: 커서 뒤에서 입력
o: 아래 줄 새 줄 입력
O: 위 줄 새 줄 입력
I: 줄 맨 앞에서 입력
A: 줄 맨 뒤에서 입력
R: overwrite 모드 (Windows처럼 덮어쓰기)
r: 한 문자만 수정
cc: 또는 S 현재 줄 삭제 후 입력모드 진입
cw: 단어 삭제 후 입력
s: 문자 삭제 후 입력

Command 모드: 이동 / 수정 / 복사 / 붙여넣기

h, j, k, l: 좌, 하, 상, 우 이동
^: 줄 맨 앞으로
$: 줄 맨 뒤로
H: 화면의 첫 번째 줄
L: 화면의 마지막 줄
gg: 또는 1G 문서 맨 위로
G: 문서 맨 아래로
nG: n번째 줄로 이동

삭제 & 되돌리기

dd: 줄 삭제
dw: 단어 삭제
d^: 커서부터 줄 앞까지 삭제
d$: 커서부터 줄 뒤까지 삭제
u: 실행 취소 (undo)
U: 해당 줄 전체 복원
Ctrl + r: 다시 실행 (redo)

복사 & 붙여넣기

yy: 줄 복사
yw: 단어 복사
y^: 커서부터 줄 앞까지 복사
y$: 커서부터 줄 뒤까지 복사
p: 커서 아래 붙여넣기
P: 커서 위 붙여넣기

Last Line 모드 (:)

:w: 저장
:q: 종료 (수정 없을 때)
:q!: 저장 없이 강제 종료
:wq 또는 :x: 저장 후 종료

라인번호 보기

:set nu: 줄 번호 표시
:set nonu: 줄 번호 숨김

줄 단위 작업

:n,m d: n~m 줄 삭제
:n,m co l: n~m 줄 복사 → l 아래에 붙여넣기
:n,m m l: n~m 줄 잘라서 → l 아래에 이동

치환 (문자열 바꾸기)

:%s/A/B/g: 문서 전체에서 AB로 바꾸기
:n,m s/A/B/g: 특정 줄 범위에서만 바꾸기

검색

/string: 앞으로 string 검색
?string: 뒤로 string 검색
n: 다음 검색결과로 이동
N: 이전 검색결과로 이동

자주 쓰는 실전 명령어 요약

:1,5 d: 5줄 삭제
:%s/old/new/g: 특정 단어 전체 치환
:5 co 10: 특정 라인 복사
:1,10 m $: 문서 맨 아래 붙여넣기
/root + n: root 포함된 줄 찾기


vim 실습

/etc/passwd 파일을 /root/passwd1으로 복사

cp /etc/passwd /root/passwd1

Vim 열기

vim /root/passwd1

1. 1번 라인을 14번 라인에 붙이기

방법 ①: 직접 복사/이동

1G       → 1번 라인으로 이동  
yy       → 현재 라인 복사  
14G      → 14번 라인으로 이동  
P        → 해당 라인 위에 붙이기

방법 ②: 명령어 한 줄

:1 co 13

  • co는 copy (13줄 아래 = 14번 위치)

2. 1번 라인의 root 수정 → ro123o098t

1G            → 1번 라인 이동  
/oo           → 두 번째 o로 이동  
i             → insert 모드  
123           → 입력  
<Esc>  
/oo           → 다음 o로 이동  
a             → append 모드  
098           → 입력  
<Esc>
  • 결과: rootro123o098t

3. 1번부터 10번까지 잘라서 마지막 줄 아래에 붙이기

방법 ①: 명령 조합

1G  
10dd       → 10줄 잘라내기  
G          → 마지막 줄 이동  
p          → 아래에 붙여넣기

방법 ②: 명령어 한 줄

:1,10 m $

  • $는 마지막 줄을 의미

4. 4번 줄의 ot만 복사해서 adm 안에 붙여 aotdm 만들기

4G  
/ot         → ot로 이동  
v2l         → 비주얼 모드로 ot 선택  
y           → 복사  

/adm        → adm 단어로 이동  
i 또는 l로 커서 이동 (d 앞에)  
p           → 붙여넣기  
<Esc>
  • 결과: admaotdm

5. 1~5번 줄의 / 기호를 |로 치환

:1,5 s/\//|/g

  • \//를 문자로 인식하기 위한 이스케이프 처리

6. 현재 작업 내용을 /root/vitest 파일로 저장하고 종료

:w /root/vitest
:q
  • :w → 저장, :q → 종료
  • 강제종료는 :q!, 저장 후 종료는 :wq

kill 명령어 기본 구조

kill [옵션 or 시그널번호] PID

  • 기본값은 -15 (정상 종료 요청 = SIGTERM)
  • PID는 프로세스 번호 (ps, top, pgrep 등으로 확인 가능)

자주 쓰는 시그널 정리표

예시 명령어 모음

프로세스 종료 (default: SIGTERM)

kill 1234
kill -15 1234

강제 종료

kill -9 1234

  • SIGKILL → 무조건 종료

프로세스 일시 정지 & 재개

kill -STOP 1234

kill -CONT 1234

설정 재로드 요청

kill -HUP 1234

  • 설정 파일 리로드
  • Apache, Nginx, sshd 등은 HUP으로 설정을 다시 불러올 수 있음

보충 설명

SIGKILL (-9): 강력하지만 위험 → 종료 준비를 못 하므로 파일 손상 가능성 있음
SIGTERM (-15): 정상적인 종료 요청 → 서비스는 신호를 감지해 종료 절차 수행
SIGSTOP / SIGCONT: fg, bg 명령어처럼 백그라운드 작업을 수동 제어 가능


프로세스 실습

터미널 4개 (pts/1 ~ pts/4) 열기

각각에서 다음 실행

sleep 1000 &     # pts/1
sleep 2000 &     # pts/2
sleep 3000 &     # pts/3
sleep 4000 &     # pts/4

메인 터미널 (pts/0)

gedit &
firefox &

1. sleep, gedit, firefox, bashPID / PPID 확인

ps -ef | egrep '(sleep|gedit|firefox|bash)' | grep -v grep

  • ps -ef: 전체 프로세스 표시
  • PPID: 부모 프로세스 ID (ex: bash의 PID가 자식 sleep의 PPID로 나옴)
  • PID: 각 프로세스 고유번호
  • grep -v grep: grep 자신은 제외

2. sleep 20000을 포그라운드로 실행 후 백그라운드로 전환

sleep 20000      # 실행 → Ctrl+Z 로 일시 정지
bg               # 가장 최근 중지 작업을 백그라운드로

또는

jobs             # 중지된 작업 목록 확인
bg %1            # 특정 작업 번호 백그라운드 전환
  • Ctrl+Z → 일시 정지
  • bg → 백그라운드 재개
  • fg → 포그라운드로 다시 전환 가능

3. firefox 프로세스를 kill로 종료

kill -15 <PID>
또는
kill -TERM <PID>

확실히 종료 안되면: kill -9 <PID>

4. gedit 종료 (이름 기반 종료)

pkill gedit

  • pkill: 프로세스 이름으로 종료
  • pgrep gedit으로 먼저 PID 확인 가능

5. 특정 터미널에서 실행된 sleep 프로세스 종료

pkill -t pts/0 sleep
pkill -t pts/3 sleep
  • -t pts/X: 해당 터미널에서 실행된 프로세스만 타겟팅
  • pkillPID 확인 없이 빠른 명령에 적합

6. 모든 bash 셸 강제 종료

방법 1
killall -9 bash

방법 2
pkill -9 bash

  • 모든 터미널이 종료됨
  • SSH도 끊기니 이건 테스트 마지막에 실행해야 함

아카이브

기본 tar 명령 구조

tar [옵션] [파일명.tar] [대상 파일/디렉토리]

옵션과 의미

c: create (생성)
v: verbose (자세히 보기)
f: file (파일 이름 지정)
t: table (목차 확인)
x: extract (압축 해제)
z: gzip 압축 사용
j: bzip2 압축 사용
J: xz 압축 사용

주요 압축 방식 비교

compress

명령어: compress(압축), uncompress(해제)
tar + compress 압축: tar Zcvf file.tar.Z target (Z: compress 사용)
tar + compress 해제: tar Zxvf file.tar.Z
확장자: .Z
압축속도: 매우빠름
압축률: 낮음
가장 오래된 방식, 유닉스 호환성

gzip

tar 옵션: z
확장자: .gz, .tar.gz
압축속도: 빠름
압축률: 낮음
기본 압축, 속도 빠르고 범용

bzip2

tar 옵션: j
확장자: .bz2, .tar.bz2
압축속도: 보통
압축률: 중간
gzip보다 압축률 좋음, 다소 느림

xz

tar 옵션: J
확장자: .xz, .tar.xz
압축속도: 느림
압축률: 높음
최대 압축률, 속도 느림, 최신 시스템에서 추천


아카이브 실습

1. /usr/bin 디렉토리 압축 (아카이브 + 압축)

tar cvf bin.tar /usr/bin
tar zcvf bin.tar.gz /usr/bin
tar jcvf bin.tar.bz2 /usr/bin
tar Jcvf bin.tar.xz /usr/bin
  • .tar → 아카이브만
  • .tar.gz, .tar.bz2, .tar.xz → 아카이브 + 압축

2. 압축 해제 (압축파일을 /tmp에 풀기)

tar Jxvf bin.tar.xz -C /tmp

  • -C는 지정한 경로에 압축을 풀기 위한 옵션
  • bin.tar.xz는 현재 위치에 있어야 하고, /tmp 안에 압축 내용이 풀림

실전 팁

  • .tar 파일은 단순 묶음 (압축 아님)
  • 압축 해제 시 x와 압축 형식 플래그를 같이 써야 함 (z, j, J)
  • -C 옵션은 압축 해제 시 자주 사용됨 → 목적지 지정 가능

profile
똑똑해지고 싶은 공학도

0개의 댓글