Alroha

[스나이퍼팩토리] 카카오클라우드 - 클라우드 개발자 교육 7주차(리눅스 기본) 본문

IT/Kakao cloud 부트캠프

[스나이퍼팩토리] 카카오클라우드 - 클라우드 개발자 교육 7주차(리눅스 기본)

헤이로하 2025. 9. 18. 09:22

🐧 리눅스 (1일차)

1️⃣ 리눅스

✅ 특징

  • 운영체제(OS): 앱이 하드웨어에서 돌아가게 해주는 기본 소프트웨어
  • 강점: 오픈소스 🆓, 자동화 스크립팅 💡, 서버·네트워크에 강함 🌐, 멀티유저/멀티태스킹
  • 약점: 상용 앱/멀티미디어 툴 부족, 한글 문서 미흡(영문 도움말 익숙해지기!)
  • 실습 환경: VirtualBox + Ubuntu (RedHat 계열) 권장 → 되돌리기/복제 쉬움 (Rocky Linux 사용)

🧪 실습

  • 가상 머신 생성 → Ubuntu ISO 부팅 → 사용자 계정/로케일 설정
  • 네트워크 연결 후 reboot   # 재부팅


2️⃣ 셸(Shell) 

🧠 개념 

  • 커널: CPU/메모리/프로세스 관리(본체)
  • : 사용자의 명령을 받아 커널에 전달(인터페이스)
  • 프롬프트: user@host:~$ (일반 $ / 루트 #)
  • 로그인 셸 vs 비로그인 셸: 로그인 시 시작되는 최초 셸 / 셸 안에서 다시 켠 셸

🔁 자주 쓰는 셸

  • bash(표준), zsh(기능 풍부), sh(표준 스크립팅), tcsh(대화형 강함)
  • 임시 전환: bash, sh → 종료는 exit

3️⃣ 셸 편집·자동완성

⌨️ 커맨드라인 편집(단축키)

Ctrl+a / Ctrl+e 행 처음 / 끝
Ctrl+b / Ctrl+f 좌/우 한 글자 이동
Esc, b / Esc, f 단어 단위 좌/우
Ctrl+h(Backspace) / Ctrl+d 왼쪽/현재 글자 삭제 (빈 줄에서 Ctrl+d는 셸 종료)
Ctrl+w 커서 앞 단어 삭제
Ctrl+u / Ctrl+k 커서~행 처음 / 커서~행 끝 삭제
Ctrl+y 마지막 삭제 내용 붙여넣기

🧩 자동완성 

  • Tab: 명령/경로 자동완성 (두 번 → 후보 목록)
  • Ctrl+p / Ctrl+n: 이전/다음 명령
  • Ctrl+r: 이력 검색 → Enter 실행 / Esc 커맨드라인으로

🚑 실습시 겪은 문제

입력이 멈춤 Ctrl+s로 출력이 잠긴 상태 → Ctrl+q 해제
명령 무한 실행 Ctrl+c 강제 중단
터미널 글자 깨짐 Ctrl+l(화면 정리) → reset(초기화)

4️⃣ 파일·디렉터리

🌲 구조·경로

  • 단일 트리 /(루트) 아래로 계층화, 다른 디스크도 마운트로 연결
  • 절대 경로: /usr/bin/perl / 상대 경로: ./, ../
  • FHS(대표 디렉터리)
    • /bin 일반 명령, /sbin 관리자 명령, /etc 설정, /home 사용자 홈
    • /var 로그·가변 데이터, /tmp 임시, /usr 앱/라이브러리, /dev 디바이스 파일

🚶 디렉터리 이동 & 탐색

pwd              # 현재 경로
cd /usr/lib      # 절대 경로
cd ..            # 한 단계 위
cd               # ~ (홈)로 이동
cd ~/report      # 틸드 확장
ls               # 목록

🧰 명령어 치트시트 (자주 쓰는 옵션 포함)

📋 목록/경로/생성·삭제·이동

# 목록
ls               # 기본
ls -l            # 상세(권한/소유/크기/시간)
ls -a            # 숨김 포함
ls -F            # 종류 기호(/,* ,@) 표시
ls -lh           # 사람이 읽기 쉬운 크기
ls -lt           # 최근 수정순

# 경로 확장(셸이 처리)
ls *.txt         # 확장자 패턴
ls ba??          # 글자수 지정

# 디렉터리
mkdir work
mkdir -p a/b/c   # 중첩 생성

# 파일(빈 파일)
touch newfile

# 삭제(주의!)
rm file1
rm -i file1      # 삭제 전 확인
rm -r dir1       # 디렉터리 재귀 삭제
rm -rf dir1      # 강제 재귀(매우 위험)

# 복사/이동/이름변경
cp file1 file2
cp -r dirA dirB  # 디렉터리 복사
cp -i file1 file2  # 덮어쓰기 확인
mv a b           # 이름 변경 or 이동
mv -i a b        # 덮어쓰기 확인

🔗 링크(하드링크, 심볼릭 링크)

  • 하드링크는 원본파일이 삭제되어도 하드링크 파일의 내용이 유지되지만, 심볼릭 링크는 원본파일이 삭제되면 내용을 볼 수 없게 된다.
ln file1 file2      # 하드링크(같은 inode)
ln -s target link   # 심볼릭 링크(별칭)

📖 내용 보기

cat file            # 짧은 파일
cat -n file         # 행 번호
less file           # 스크롤/검색(/키워드, n/N, q 종료)

🔎 파일 찾기

# 디렉터리 트리 실시간 탐색(정확하지만 느림)
find . -name '*.txt'          # 이름(대소문자 구분)
find . -iname '*.txt'         # 대소문자 무시
find . -type d -name 'doc'    # 디렉터리만
# AND 조건은 나열(-a 생략 가능)
find . -type f -name '*.sh' -print

# DB 기반 초고속 검색(사전 색인 필요)
sudo updatedb                 # 인덱스 갱신(최초/수동)
locate -i notes               # 대소문자 무시
locate -b python              # 파일명 기준(basename)
locate -A bash doc            # AND 검색

❓ 명령어 위치/도움말

which ls          # 실행될 실제 경로
which -a ls       # PATH 내 모든 후보

<cmd> --help      # 간단 도움말
man <cmd>         # 상세 매뉴얼(less 조작 동일)
man -k copy       # 키워드 검색(whatis db)
LANG=C <cmd> --help    # 영문 도움말 강제

🧩 회고록

  • 탭 완성 먼저! 긴 경로·오타 방지 → cd /u + Tab → /usr/
  • 파괴적 명령 보호: alias rm='rm -i', alias cp='cp -i', alias mv='mv -i'
  • 숨김 파일 체크: ls -la로 삭제 전 내부 안전 확인(.파일 존재 주의)
  • 작업 전 위치 확인: 실수 줄이려면 pwd 습관화

✅ 과제

# 과제1

새로운 VM을 생성
- 1 vCPU 와 2048 MB 그리고 Disk 20GB
- 네트워크 어뎁터는 1번 NAT를 그대로 두고 2번 어뎁터 host-only 어뎁터 혹은 네트워크를 활성화 합니다.
- IP 는 192.168.56.210/24 으로 설정합니다.
- root 사용자 암호는 똑같이 지정 합니다.
- OS는 Rocky9 Linux로 설치 합니다.

# 과제2

기존 VM에서 새로운 VM으로 연결
- ping 명령어를 입력하여 연결을 확인 합니다. ping 192.168.56.210

64 bytes from 192.168.56.210: icmp_seq=41 ttl=64 time=2.99 ms
64 bytes from 192.168.56.210: icmp_seq=42 ttl=64 time=0.578 ms
64 bytes from 192.168.56.210: icmp_seq=43 ttl=64 time=2.92 ms
64 bytes from 192.168.56.210: icmp_seq=44 ttl=64 time=1.02 ms


- ssh 명령어를 이용하여 기존 VM 에서 새 VM으로 연결 합니다. ssh root@192.168.56.210
- 새로운 VM의 호스트 명을 ec2 로 설정합니다. hostnamectl set-hostname ec2
- bash 를 새롭게 실행해서 호스트 명이 변경되는 것을확인합니다. bash exit
- 작업 완료후 빠져 나와서 다시 연결합니다. exit ssh root@192.168.56.210

[root@localhost ~]# exit
logout
Connection to 192.168.56.210 closed.
[localhost work]#ssh root@192.168.56.210
root@192.168.56.210's password: 
Last login: Tue Sep 16 15:41:49 2025 from 192.168.56.200
[root@ec2 ~]#

(+ 추가로 이름 한번 더 변경해 보았다!)

[root@ec2 ~]# hostnamectl set-hostname roha
[root@ec2 ~]# exit
logout
Connection to 192.168.56.210 closed.
[localhost work]#ssh root@192.168.56.210
root@192.168.56.210's password: 
Last login: Tue Sep 16 15:43:57 2025 from 192.168.56.200
[root@roha ~]#

🐧 리눅스 (2일차)

5️⃣ 파일 조작

🔧 명령어 & 자주 쓰는 옵션

디렉터리 생성 mkdir mkdir work / mkdir -p a/b/c 중첩은 -p
빈 파일 touch touch a b c 존재 시 타임스탬프 갱신
삭제(파일/디렉터리) rm rm f1 f2 / rm -i f / rm -r dir / rm -rf dir -i 안전, -rf 매우 위험 ⚠️
빈 디렉터리 삭제 rmdir rmdir empty 숨김 파일 있으면 실패
복사 cp cp f1 f2 / cp f1 f2 f3 dir/ / cp -r dirA dirB / cp -i 덮어쓰기 확인은 -i
이동/이름 변경 mv mv a b / mv f1 f2 dir/ / mv -i 디렉터리 이동 시 -r 필요 없음
내용 보기 cat, less cat -n file / less file 긴 파일은 less
링크 ln 하드: ln a b / 심볼릭: ln -s target link 심볼릭은 경로 별칭에 유리

🧪 실습 

mkdir -p report/2021/05 && ls -F
touch report/2021/05/summary.txt notes.txt
cp -i notes.txt report/2021/05/
mv report/2021/05/summary.txt summary-202105.txt
ln -s report/2021/05 latest
ls -l latest

💡 팁

  • 삭제·덮어쓰기 방지: alias rm='rm -i'; alias cp='cp -i'; alias mv='mv -i'
  • 대량 작업은 와일드카드: *.txt, img_??.png
  • 심볼릭 링크로 긴 경로 단축: ln -s ~/projects/big/path src

6️⃣ 파일 검색 & 명령어 도움말

🔎 정확 탐색: find (실시간 트리 순회)

find . -type f -name '*.txt'            # 이름
find /etc -type d -name 'conf*'         # 디렉터리만
find . -type l -iname '*lib*'           # 심볼릭 링크(대소문자 무시)
  • 패턴은 셸 확장 방지 위해 따옴표로 감싸기: -name '*.log'
  • 조건 AND는 나열( -a 생략 가능), OR은 -o (괄호는 \( ... \) )

⚡ 빠른 탐색: locate

sudo updatedb          # 색인 갱신
locate -i bashrc       # 대소문자 무시
locate -b -i '\vim'    # 베이스명만, 대소문자 무시
locate -A conf nginx   # 둘 다 포함(AND)
  • 최신 파일 즉시 반영 안 될 수 있음 → 급할 땐 find

❓ 사용법·위치 확인

cat --help
man cat            # 상세 매뉴얼(less 조작 동일)
man -k copy        # 키워드 검색
man 5 crontab      # 섹션 지정
which -a ls        # PATH 내 모든 후보

7️⃣ 텍스트 에디터

🧭 모드 체계

  • 보통(normal): 명령 수행(기본)
  • 입력(insert): 텍스트 입력 (i, a 등으로 진입, Esc로 복귀)

⌨️ vi 탐색 단축키

기동/종료 vi file / :w / :q / :q! 저장/종료/강종
이동 h j k l / w b / 0 $ / gg G / 100G 문자·단어·행·파일 단위
편집 i a / x / dd / d$ d0 / yy p 입력·삭제·행삭제·범위삭제·복사/붙여넣기
연결/되돌리기 J / u / Ctrl+r 행 연결 / undo / redo
검색/치환 /word ?word / n N / :%s/old/new/g 방향 검색·다음/이전·전역 치환

🧪 실습 

vim notes.txt              # 파일 생성/열기
# (보통) i -> 내용 입력 -> Esc
:w                         # 저장
:%s/todo/TODO/g            # 치환
:q                         # 종료

8️⃣ 배시(Bash) 설정

🧩 alias (자주 쓰는 옵션 기본화)

alias la='ls -a'
alias ll='ls -lh --group-directories-first'
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias mkdir='mkdir -p'
type ls         # 별칭 확인
\ls             # 일시 해제(\)

⚙️ 배시 옵션

# set
set -o ignoreeof      # Ctrl+D 종료 방지
set -o noclobber      # > 덮어쓰기 방지 (>>는 허용)

# shopt
shopt -s autocd       # 디렉터리명만 쳐도 이동
shopt -s cdspell      # cd 오타 보정
shopt -s dotglob      # 경로확장에 숨김 포함
shopt -s globstar     # ** 패턴(재귀)
shopt -s histappend   # 히스토리 누적

📄 설정 파일 운용

  1. 백업: cp ~/.bashrc ~/.bashrc.bak
  2. 수정: vim ~/.bashrc (다른 터미널 하나 더 열어두기)
  3. 즉시 반영: source ~/.bashrc 또는 . ~/.bashrc
  4. 필요 시 ~/.profile

권장 .bashrc 스니펫

# safer defaults
alias rm='rm -i'; alias cp='cp -i'; alias mv='mv -i'
shopt -s histappend cdspell autocd
set -o ignoreeof; set -o noclobber
export PATH="$PATH:$HOME/bin"
export LESS='--no-init'
PS1='[\u@\h \w]\$ '

 


본 후기는 [카카오엔터프라이즈x스나이퍼팩토리] 카카오클라우드로 배우는 AIaaS 마스터 클래스 2기(B-log) 리뷰로 작성 되었습니다.