1. Root (관리자 계정)

root는 시스템 내 모든 명령어,파일,자원에 제한없이 접근 할 수 있다.

💡root로 직접 로그인 하지 말고 평소에 일반 계정으로 쓰다가 sudo 권한을 빌려씀

2. 대소문자 구분 & 공백 금지

리눅스에선 대소문자를 구분함 공백은 다루기 어려우므로 웬만하면 사용 x

3. 명령 프롬프트 구조

ubuntu@5e82576dec86:~$
  ↑        ↑         ↑
 user     host    prompt symbol
  • user: 현재 로그인한 사용자명
  • host: 접속 중인 호스트(컨테이너/서버) 이름
  • prompt symbol: $는 일반 사용자, #는 root 계정을 의미 (관례)

4. 파일시스템 경로

  • 절대 경로 : /부터 시작하는 완전한 경로
  • 상대 경로 : 현재 작업 디렉터리 기준의 경로

실습

1. 컨테이너 내부 IP로 컨테이너 간 SSH 접속

💡ifconfig로 확인한 172.27.0.2는 Docker가 만든 내부 가상 네트워크 상의 IP임
# 두 번째 컨테이너로 ssh 접속
ssh ubuntu@가상ip주소

# 다시 사용자로 돌아가기
exit

2. sudo로 root 권한 빌리기

  • sudo su는 "sudo 권한으로 su(switch user, 기본값은 root) 실행" → root 쉘로 전환
  • 프롬프트가 ubuntu@...:~$ → root@...:/home/ubuntu# 로 바뀐 게 핵심 신호입니다
    • $ → #: 일반 사용자에서 root로 바뀌었다는 표시

SSH가 뭐 하는 프로토콜인가

  • SSH (Secure Shell)은 원격 컴퓨터에 로그인해서 그 컴퓨터의 쉘(명령줄)을 내 손으로 조작할 수 있게 해주는 프로토콜입니다.
  • 내 컴퓨터(윈도우 PC)에서 명령어를 치지만
  • 실제로 그 명령어는 저 멀리 있는(또는 다른 컨테이너 안에 있는) 다른 컴퓨터에서 실행됩니다
  • 그 실행 결과가 다시 내 화면으로 전송되어 보여집니다

즉, "내 화면과 키보드는 여기 있지만, 실제 작업은 저기서 일어난다"는 게 SSH 접속의 본질입니다.

"접속했다"는 게 구체적으로 무슨 일인가

  • 내 컴퓨터가 172.27.0.3이라는 주소의 22번 포트로 연결을 요청합니다
  • 상대방(그 컨테이너) 안에서 대기 중이던 sshd(SSH 데몬)라는 프로그램이 이 요청을 받습니다
  • 계정(ubuntu)과 비밀번호를 확인해서 로그인이 승인되면
  • 상대방 컴퓨터 안에서 새로운 쉘 프로세스(bash 등)가 하나 생성되고, 내 터미널이 그 쉘에 연결됩니다

5. Top Level 디렉토리 구조

FHS (Filesystem Hierarchy Standard)란

  • 리눅스 디렉터리는 계층 구조로 되어 있고, 각 디렉터리가 정해진 역할을 갖습니다.
  • 이 규칙을 FHS(Filesystem Hierarchy Standard)라고 하며, 유닉스 계열 OS 전반이 이 표준을 따릅니다.

주요 디렉터리 정리

디렉터리역할
/boot커널, 초기 RAM 디스크, GRUB 같은 부트로더 설정 등 부팅에 필요한 파일
/dev하드디스크, USB 등 하드웨어 장치를 파일처럼 다루는 장치 파일
/etc시스템 설정 파일 (hostname, sudoers 등 텍스트 파일 형태)
/binls, cp, mv 등 모든 사용자가 쓰는 필수 실행 파일
/sbinfdisk, ifconfig, init 등 root가 시스템 관리용으로 쓰는 필수 실행 파일
/opt기본 설치에 포함 안 된 서드파티/추가 소프트웨어 설치 위치
/proc커널이 실행 중 정보를 제공하는 가상 파일시스템 (예: /proc/cpuinfo → CPU 정보)
/lib/bin, /sbin 실행에 필요한 공유 라이브러리, 커널 모듈
/tmp임시 파일 저장소, 재부팅 시 지워질 수 있음
/home각 사용자별 개인 홈 디렉터리
/var로그(/var/log), spool 등 계속 늘어나는(variable) 데이터
/run프로세스 ID, 락 파일 등 비영구적 런타임 데이터 (초기 부팅 시점부터 사용)
/mnt외부 저장장치 등을 임시로 마운트하는 공용 지점
/mediaUSB, CD-ROM 같은 이동식 미디어 마운트 (데스크탑 환경에서 주로 자동 사용)
/usr대부분의 사용자용 유틸리티/애플리케이션이 모여있는 곳 (/usr/bin, /usr/sbin, /usr/lib, /usr/local 하위 구조)

개발자(SWE)로서 특히 기억해야 할 것

강의 자료가 강조하는 4가지:

  1. /bin, /sbin — 스크립팅과 시스템 관리 작업에서 자주 마주침
  2. /etc — 서비스/애플리케이션 설정을 직접 수정하게 되는 곳 (예: nginx 설정, cron 설정 등)
  3. /var — 로그(/var/log)가 여기 있어서, 장애 모니터링·디버깅할 때 제일 먼저 들여다보는 곳
  4. /opt — 서드파티 소프트웨어 설치 위치, /home — 사용자 데이터/개인 설정 저장 위치

6. 기본 명령어

1. 파일시스템 탐색 (Navigating)

명령어설명
cd (Change Directory)지정한 디렉터리로 이동. 인자 없이 치면 홈 디렉터리로 이동
pwd (Print Working Directory)현재 위치의 절대 경로를 출력
ls (List)디렉터리 내용 나열. 인자 없으면 현재 위치 기준. 옵션: -l(자세히), -a(숨김 파일 포함)

2. 파일 관리 (File management)

명령어설명
touch파일이 없으면 빈 파일 생성, 있으면 수정 시각(timestamp)만 갱신
cp (Copy)파일/디렉터리 복사. cp -r sourcedir/ destdir/ → 디렉터리는 -r로 재귀 복사 필요
vi/vim텍스트 편집기로 파일을 열어 내용 편집
mkdir (Make Directory)디렉터리 생성. -p 옵션으로 중첩 구조를 한 번에 생성 가능 (예: mkdir -p a/b/c)
rm (Remove)파일/디렉터리 삭제. -r은 재귀 삭제, -f는 확인 없이 강제 삭제. rm -rf directory/는 되돌릴 수 없으니 특히 주의

3. 검색: find vs locate

find — 실시간(real-time) 검색

find[path...][expression]find /home -name"*.txt"# /home 아래 .txt 파일 전체 검색find /var/log -type f -mtime -7# 최근 7일 내 수정된 파일만
  • 경로 생략 시 현재 디렉터리부터 검색
  • 이름, 타입, 수정일, 크기, 권한 등 다양한 조건으로 검색 가능

locate — 미리 만든 색인(database) 기반 검색

locate[options] patternlocate"*.png"# .png로 끝나는 경로 전부locate -i"project"# 대소문자 무시하고 "project" 포함된 것
  • 이 색인은 보통 하루에 한 번 cron job으로 updatedb가 자동 갱신
  • find보다 빠르지만, 색인 갱신 이후 생긴 최신 파일은 못 찾을 수 있음

4. 도움말 확인하기

명령어설명
whatis명령어 한 줄 요약. 역시 mandb 같은 명령으로 주기적 갱신되는 데이터베이스 기반
--help대부분 명령어 뒤에 붙여서 터미널에서 바로 간단한 사용법 확인
man매뉴얼 페이지 — 옵션, 동작 원리, 예제까지 포함된 가장 상세한 도움말

실습

SSH 접속과 뭐가 다른가

방식연결 경로특징
ssh ubuntu@172.27.0.3네트워크(22번 포트)를 통해 접속SSH 데몬이 떠 있어야 함, 계정/비밀번호 인증 필요
docker exec -it 컨테이너ID /bin/bashDocker 엔진이 직접 컨테이너 프로세스에 접근네트워크를 안 거침, 인증도 필요 없음 (호스트에서 Docker 권한만 있으면 바로 들어감)
# bash로 컨테이너 접속 
docker exec -it 23013c876b0e /bin/bash

1. 파일/디렉터리 생성 & 조회

touch hello# 빈 파일 생성ls# 현재 디렉터리 내용 확인mkdir new_directory# 디렉터리 생성

2. 파일 복사 & 편집

cp hello world# hello를 world라는 이름으로 복사vi hello# vi 편집기로 파일 내용 편집cat hello# 파일 내용을 화면에 출력 → "hello"라고 입력하신 게 확인됨

3. 삭제

rm -r new_directory# 디렉터리 삭제 (-r: recursive, 디렉터리는 재귀 삭제 필요)rm -rf helloworld# 파일/디렉터리 강제 삭제 (-f: force, 확인 없이 삭제)
  • r : 디렉터리 안 내용까지 재귀적으로 삭제
  • f : 삭제 확인 안 묻고 강제로 진행 (실무에서 rm -rf는 되돌릴 수 없어서 특히 조심해야 하는 명령입니다)

4. 경로 이동 (cd 복습)

cd# 인자 없이 → 홈 디렉터리로 이동 (root면 /root)cd /tmp# 절대 경로로 이동cd ubuntu# 상대 경로 - 현재 위치에 'ubuntu' 폴더가 없어서 에러cd /home# /home으로 이동cd ubuntu# 상대 경로로 /home/ubuntu 진입 성공
  • /tmp에는 ubuntu 디렉터리가 없지만, /home에는 있어서 위치에 따라 같은 명령이 성공/실패가 갈린 걸 직접 확인하셨습니다.

5. 파일 검색 — find vs locate

find — 실시간으로 파일시스템을 뒤져서 찾음 (느리지만 항상 최신)

find. -name hello# 현재 위치(.)부터 이름이 정확히 hello인 것 찾기find. -name hel*# 와일드카드로 hel로 시작하는 것 찾기

locate — 미리 만들어진 색인(database)에서 찾음 (빠르지만 최신 정보 반영 안 될 수 있음)

locate -i hello# 대소문자 무시하고 hello 포함된 경로 검색sudo updatedb# locate가 쓰는 색인을 최신화locate -i hello# 업데이트 후 재검색 → 방금 만든 helloworld가 새로 나타남
  • 처음 locate -i hello를 쳤을 때 /home/ubuntu/helloworld가 안 나왔던 이유는, 색인이 아직 그 파일 생성 시점을 반영 못 했기 때문입니다.
  • sudo updatedb로 색인을 갱신하니 그제서야 잡혔죠. → find는 실시간, locate는 색인 기반이라는 차이를 직접 실습으로 확인하신 겁니다.

6. 명령어 도움말

whatisls# 명령어의 한 줄 요약 설명

결과: ls (1) - list directory contents

  • (1)은 man page의 섹션 번호 (1번 = 일반 사용자 명령어

7. Visual Editor(vi)

이동 (명령 모드에서)

키동작
0 또는 gg줄 맨 앞으로
^줄의 첫 번째 공백 아닌 문자로
$줄 끝으로
G파일 맨 끝으로
:2525번째 줄로 이동

편집

키동작
i커서 위치에서 입력 모드 진입
x커서 아래 글자 삭제
dd현재 줄 삭제
yy현재 줄 복사(yank)
p복사한 내용 붙여넣기
u실행 취소 (undo)

검색 & 치환

키동작
/텍스트텍스트 검색, n=다음, N=이전
:%s/old/new/g파일 전체에서 old → new 일괄 치환

저장 & 종료

키동작
:w저장
:q종료
:wq 또는 ZZ저장 후 종료
:q!저장 안 하고 강제 종료

8. crontab

1. crontab이란

  • 예약된 작업(cron job)을 관리하는 명령어
  • 반복 작업 자동화, 시스템 유지보수 스케줄링, 정기적인 스크립트/명령 실행에 사용
  • crontab으로 작업을 생성/편집/조회/삭제 가능

2. 핵심 특징

  • 사용자별 스케줄: 계정마다 독립된 cron 스케줄 보유
  • 유연한 스케줄링: 특정 시간/날짜/간격 등 자유롭게 설정
  • CLI 기반 관리: crontab 명령으로 전부 조작
  • 권한 관리: 다른 사용자 crontab은 별도 권한 필요

3. crontab 옵션

옵션기능
-e현재 사용자의 crontab 편집
-l현재 사용자의 cron 작업 목록 출력
-r현재 사용자의 crontab 삭제
-u <user>다른 사용자의 crontab 관리 (권한 필요)
/sbin/service cron start          # cron 서비스 시작
ps -ef | grep cron | grep -v grep # 실제로 cron 데몬이 떠 있는지 확인

* * * * * echo "This runs every minute">> /tmp/cron_test.log
이건 매분마다 /tmp/cron_test.log에 "This runs every minute"이라는 문자열을 이어붙이는(append) 작업입니다.
💡crontab에 등록된 파일을 삭제해도 등록된 스케줄은 사라지지 않음

9.파일 권한/소유권 관리

drwxr-x---  1  ubuntu  root  4096  ...  .
부분의미
d디렉터리 (-면 일반 파일)
rwxr-x---권한 (소유자/그룹/기타 순으로 3칸씩)
ubuntu소유자(owner)
root소유 그룹(group)

1. chown — 소유자(및 그룹) 변경

chown[options] new-owner[:new-group] file/directorychown john file.txt# 소유자만 john으로chown john:developers file.txt# 소유자=john, 그룹=developers 동시 변경chown -R john /home/john# -R: 하위 전체 재귀 적용

2. chmod — 권한 변경

권한 구조: rwxrwxrwx = 소유자(user) / 그룹(group) / 기타(others) 각 3칸

문자숫자의미
r4read
w2write
x1execute

숫자 방식(Numeric) — 3자리 숫자로 한 번에 지정

chmod755 file.txt# 7(rwx) = 소유자: 읽기+쓰기+실행# 5(r-x) = 그룹: 읽기+실행# 5(r-x) = 기타: 읽기+실행

기호 방식(Symbolic) — 특정 대상에만 권한 추가/제거

chmod g+w file.txt# 그룹(g)에 쓰기(w) 권한 추가(+)chmod -R a+rx /project# 재귀(-R)로 전체(a)에 읽기+실행 권한 추가

기호: u(user), g(group), o(others), a(all) + +(추가)/-(제거)/=(설정)

3. chgrp — 그룹 소유권만 변경

chgrp[options] new-group file/directorychgrp developers file.txt# 그룹만 developers로 변경chgrp -R developers /project# 재귀 적용
profile
A developer who codes with joy, never boring!

0개의 댓글