
root는 시스템 내 모든 명령어,파일,자원에 제한없이 접근 할 수 있다.
💡root로 직접 로그인 하지 말고 평소에 일반 계정으로 쓰다가 sudo 권한을 빌려씀리눅스에선 대소문자를 구분함 공백은 다루기 어려우므로 웬만하면 사용 x
ubuntu@5e82576dec86:~$
↑ ↑ ↑
user host prompt symbol
$는 일반 사용자, #는 root 계정을 의미 (관례)
# 두 번째 컨테이너로 ssh 접속
ssh ubuntu@가상ip주소
# 다시 사용자로 돌아가기
exit

sudo su는 "sudo 권한으로 su(switch user, 기본값은 root) 실행" → root 쉘로 전환ubuntu@...:~$ → root@...:/home/ubuntu# 로 바뀐 게 핵심 신호입니다$ → #: 일반 사용자에서 root로 바뀌었다는 표시즉, "내 화면과 키보드는 여기 있지만, 실제 작업은 저기서 일어난다"는 게 SSH 접속의 본질입니다.
172.27.0.3이라는 주소의 22번 포트로 연결을 요청합니다sshd(SSH 데몬)라는 프로그램이 이 요청을 받습니다ubuntu)과 비밀번호를 확인해서 로그인이 승인되면| 디렉터리 | 역할 |
|---|---|
| /boot | 커널, 초기 RAM 디스크, GRUB 같은 부트로더 설정 등 부팅에 필요한 파일 |
| /dev | 하드디스크, USB 등 하드웨어 장치를 파일처럼 다루는 장치 파일 |
| /etc | 시스템 설정 파일 (hostname, sudoers 등 텍스트 파일 형태) |
| /bin | ls, cp, mv 등 모든 사용자가 쓰는 필수 실행 파일 |
| /sbin | fdisk, ifconfig, init 등 root가 시스템 관리용으로 쓰는 필수 실행 파일 |
| /opt | 기본 설치에 포함 안 된 서드파티/추가 소프트웨어 설치 위치 |
| /proc | 커널이 실행 중 정보를 제공하는 가상 파일시스템 (예: /proc/cpuinfo → CPU 정보) |
| /lib | /bin, /sbin 실행에 필요한 공유 라이브러리, 커널 모듈 |
| /tmp | 임시 파일 저장소, 재부팅 시 지워질 수 있음 |
| /home | 각 사용자별 개인 홈 디렉터리 |
| /var | 로그(/var/log), spool 등 계속 늘어나는(variable) 데이터 |
| /run | 프로세스 ID, 락 파일 등 비영구적 런타임 데이터 (초기 부팅 시점부터 사용) |
| /mnt | 외부 저장장치 등을 임시로 마운트하는 공용 지점 |
| /media | USB, CD-ROM 같은 이동식 미디어 마운트 (데스크탑 환경에서 주로 자동 사용) |
| /usr | 대부분의 사용자용 유틸리티/애플리케이션이 모여있는 곳 (/usr/bin, /usr/sbin, /usr/lib, /usr/local 하위 구조) |
강의 자료가 강조하는 4가지:
/bin, /sbin — 스크립팅과 시스템 관리 작업에서 자주 마주침/etc — 서비스/애플리케이션 설정을 직접 수정하게 되는 곳 (예: nginx 설정, cron 설정 등)/var — 로그(/var/log)가 여기 있어서, 장애 모니터링·디버깅할 때 제일 먼저 들여다보는 곳/opt — 서드파티 소프트웨어 설치 위치, /home — 사용자 데이터/개인 설정 저장 위치| 명령어 | 설명 |
|---|---|
cd (Change Directory) | 지정한 디렉터리로 이동. 인자 없이 치면 홈 디렉터리로 이동 |
pwd (Print Working Directory) | 현재 위치의 절대 경로를 출력 |
ls (List) | 디렉터리 내용 나열. 인자 없으면 현재 위치 기준. 옵션: -l(자세히), -a(숨김 파일 포함) |
| 명령어 | 설명 |
|---|---|
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/는 되돌릴 수 없으니 특히 주의 |
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" 포함된 것
updatedb가 자동 갱신find보다 빠르지만, 색인 갱신 이후 생긴 최신 파일은 못 찾을 수 있음| 명령어 | 설명 |
|---|---|
whatis | 명령어 한 줄 요약. 역시 mandb 같은 명령으로 주기적 갱신되는 데이터베이스 기반 |
--help | 대부분 명령어 뒤에 붙여서 터미널에서 바로 간단한 사용법 확인 |
man | 매뉴얼 페이지 — 옵션, 동작 원리, 예제까지 포함된 가장 상세한 도움말 |
| 방식 | 연결 경로 | 특징 |
|---|---|---|
ssh ubuntu@172.27.0.3 | 네트워크(22번 포트)를 통해 접속 | SSH 데몬이 떠 있어야 함, 계정/비밀번호 인증 필요 |
docker exec -it 컨테이너ID /bin/bash | Docker 엔진이 직접 컨테이너 프로세스에 접근 | 네트워크를 안 거침, 인증도 필요 없음 (호스트에서 Docker 권한만 있으면 바로 들어감) |
# bash로 컨테이너 접속
docker exec -it 23013c876b0e /bin/bash
touch hello# 빈 파일 생성ls# 현재 디렉터리 내용 확인mkdir new_directory# 디렉터리 생성
cp hello world# hello를 world라는 이름으로 복사vi hello# vi 편집기로 파일 내용 편집cat hello# 파일 내용을 화면에 출력 → "hello"라고 입력하신 게 확인됨
rm -r new_directory# 디렉터리 삭제 (-r: recursive, 디렉터리는 재귀 삭제 필요)rm -rf helloworld# 파일/디렉터리 강제 삭제 (-f: force, 확인 없이 삭제)
cd# 인자 없이 → 홈 디렉터리로 이동 (root면 /root)cd /tmp# 절대 경로로 이동cd ubuntu# 상대 경로 - 현재 위치에 'ubuntu' 폴더가 없어서 에러cd /home# /home으로 이동cd ubuntu# 상대 경로로 /home/ubuntu 진입 성공
find — 실시간으로 파일시스템을 뒤져서 찾음 (느리지만 항상 최신)
find. -name hello# 현재 위치(.)부터 이름이 정확히 hello인 것 찾기find. -name hel*# 와일드카드로 hel로 시작하는 것 찾기
locate — 미리 만들어진 색인(database)에서 찾음 (빠르지만 최신 정보 반영 안 될 수 있음)
locate -i hello# 대소문자 무시하고 hello 포함된 경로 검색sudo updatedb# locate가 쓰는 색인을 최신화locate -i hello# 업데이트 후 재검색 → 방금 만든 helloworld가 새로 나타남
whatisls# 명령어의 한 줄 요약 설명
결과: ls (1) - list directory contents
| 키 | 동작 |
|---|---|
0 또는 gg | 줄 맨 앞으로 |
^ | 줄의 첫 번째 공백 아닌 문자로 |
$ | 줄 끝으로 |
G | 파일 맨 끝으로 |
:25 | 25번째 줄로 이동 |
| 키 | 동작 |
|---|---|
i | 커서 위치에서 입력 모드 진입 |
x | 커서 아래 글자 삭제 |
dd | 현재 줄 삭제 |
yy | 현재 줄 복사(yank) |
p | 복사한 내용 붙여넣기 |
u | 실행 취소 (undo) |
| 키 | 동작 |
|---|---|
/텍스트 | 텍스트 검색, n=다음, N=이전 |
:%s/old/new/g | 파일 전체에서 old → new 일괄 치환 |
| 키 | 동작 |
|---|---|
:w | 저장 |
:q | 종료 |
:wq 또는 ZZ | 저장 후 종료 |
:q! | 저장 안 하고 강제 종료 |
| 옵션 | 기능 |
|---|---|
-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에 등록된 파일을 삭제해도 등록된 스케줄은 사라지지 않음

drwxr-x--- 1 ubuntu root 4096 ... .
| 부분 | 의미 |
|---|---|
d | 디렉터리 (-면 일반 파일) |
rwxr-x--- | 권한 (소유자/그룹/기타 순으로 3칸씩) |
ubuntu | 소유자(owner) |
root | 소유 그룹(group) |
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: 하위 전체 재귀 적용
chmod — 권한 변경권한 구조: rwxrwxrwx = 소유자(user) / 그룹(group) / 기타(others) 각 3칸
| 문자 | 숫자 | 의미 |
|---|---|---|
| r | 4 | read |
| w | 2 | write |
| x | 1 | execute |
숫자 방식(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) + +(추가)/-(제거)/=(설정)
chgrp — 그룹 소유권만 변경chgrp[options] new-group file/directorychgrp developers file.txt# 그룹만 developers로 변경chgrp -R developers /project# 재귀 적용