구름톤 딥다이브를 본격적으로 수강하기 전에 기존에 알고있던 리눅스 기초 지식을 복습할 수 있는 프리코스 강의가 있어 복습했다.
알고있던 명령어들이 대부분이여서 빠르게 수강할 수 있었다.
다만 해당 게시글은 노션에서 정리한 것을 단순히 옮긴 수준의 퀄리티 글이여서 읽기 좀 힘들 수 있다.
혹시나, 정리본이 필요한 사람이 만약에 있다면 댓글로 달아주시면 노션 게시글을 공유하도록 하겠다.
웹 서비스 등 리눅스 기초보다는 리눅스 운영에 가까운 서비스는 과감하게 생략했다.
이미 고등학교 시절 많이 구축해 보기도 했고, 구름톤 딥다이브를 위한 목적에서 벗어난 범위이기 때문이다.
ls
명령어의 역할
디렉토리 내 파일 및 폴더 목록을 표시한다.
명령어의 예시
- ls → 현재 디렉토리의 파일 및 폴더 목록 출력
- ls -l → 상세 정보(권한, 소유자, 크기, 수정 날짜 등)와 함께 목록 출력
- ls -a → 숨김 파일(.으로 시작하는 파일) 포함하여 목록 출력
- ls -lh → 파일 크기를 사람이 읽기 쉬운 형식(KB, MB, GB)으로 표시
- ls -lt → 수정 시간 기준으로 정렬하여 출력
- ls /etc → 특정 디렉토리(/etc)의 파일 목록 출력
pwd
명령어의 역할
현재 작업 중인 디렉토리의 절대 경로를 출력한다.
명령어의 예시
- pwd → 현재 디렉토리의 전체 경로 출력
- pwd -L → 심볼릭 링크를 유지한 상태로 경로 출력
- pwd -P → 실제 물리적 경로(심볼릭 링크를 해석한 경로) 출력
cd
명령어의 역할
현재 작업 디렉토리를 변경한다.
명령어의 예시
- cd /home/user → /home/user 디렉토리로 이동
- cd .. → 상위 디렉토리로 이동
- cd ~ → 사용자의 홈 디렉토리로 이동
- cd - → 이전 작업 디렉토리로 이동
- cd /etc && ls → /etc 디렉토리로 이동 후 파일 목록 출력
상대경로와 절대경로
- 상대경로는 현재 디렉토리의 위치를 기준으로 다른 디렉토리의 위치를 표현하는 것으로 ..은 부모 디렉토리를 의미한다. 즉, 'cd ..'은 현재 디렉토리의 부모 디렉토리로 이동하는 명령이다. 참고로 현재 디렉토리는 '.' 이다.
- 절대경로는 최상위 디렉토리를 기준으로 경로를 표현하는 것을 의미한다. 최상위 디렉토리는 루트(root) 디렉토리라고 하고 '/' 이다. 'cd /'는 최상위 디렉토리로 이동한다는 뜻이다. 'cd /home/egoing'은 현재 디렉토리가 무엇이건 언제나 '/home/egoing'을 의미하는데 이런 식의 경로 표현을 절대경로라고 한다.
rm
명령어의 역할
파일 또는 디렉토리를 삭제한다.
명령어의 예시
- rm file.txt → file.txt 파일 삭제
- rm -i file.txt → 삭제 전에 확인 메시지 출력
- rm -f file.txt → 강제 삭제(확인 없이 삭제)
- rm -r dir/ → dir/ 디렉토리와 내부 파일 삭제
- rm -rf dir/ → dir/ 디렉토리를 강제 삭제(경고 없이 삭제)
- rm *.log → 현재 디렉토리의 .log 확장자를 가진 모든 파일 삭제
-help
명령어의 역할
명령어의 사용법과 옵션을 확인하는 도움말을 출력한다.
명령어의 예시
- ls --help → ls 명령어의 사용법과 옵션 목록 출력
- grep --help → grep 명령어의 도움말 출력
- tar --help → tar 명령어의 사용법 및 옵션 확인
- chmod --help → chmod 명령어의 상세 옵션 확인
참고
- 대부분의 리눅스 명령어는 -help 옵션을 제공하며, 이를 통해 사용법을 간단히 확인할 수 있다.
- 보다 자세한 설명이 필요하면 man <명령어> 또는 info <명령어>를 사용할 수도 있다.
man
명령어의 역할
명령어의 매뉴얼 페이지를 출력하여 사용법과 상세 정보를 확인한다.
명령어의 예시
- man ls → ls 명령어의 매뉴얼 페이지 출력
- man grep → grep 명령어의 사용법 및 옵션 확인
- man -k network → "network"와 관련된 명령어 목록 검색
- man 5 passwd → passwd 파일 형식(섹션 5) 문서 확인
- man -f ls → ls 명령어가 포함된 매뉴얼 섹션 확인
참고
- 매뉴얼 페이지는 여러 섹션(1~9)으로 구성되며, 같은 이름의 명령어가 다른 섹션에 있을 수도 있다.
- q 키를 눌러 매뉴얼 페이지를 종료할 수 있다.
sudo
명령어의 역할
일반 사용자 계정에서 관리자(root) 권한으로 명령어를 실행한다.
명령어의 예시
- sudo apt update → 패키지 목록을 업데이트 (Debian 계열)
- sudo yum install httpd → Apache 웹 서버 설치 (RHEL 계열)
- sudo systemctl restart nginx → Nginx 서비스 재시작
- sudo vi /etc/hosts → 시스템 파일 /etc/hosts를 root 권한으로 편집
- sudo su → root 계정으로 전환
- sudo -u postgres psql → 특정 사용자(postgres) 권한으로 psql 실행
참고
- sudo를 실행하려면 사용자가 sudo 그룹에 속해 있어야 한다.
- visudo 명령어를 사용하여 /etc/sudoers 파일을 수정하면 특정 사용자나 그룹에 대한 권한을 제어할 수 있다.
- sudo !! → 직전 명령어를 관리자 권한으로 실행한다.
nano
명령어의 역할
터미널에서 간단하게 텍스트 파일을 편집할 수 있는 CLI 기반 텍스트 편집기이다.
명령어의 예시
- nano file.txt → file.txt 파일을 열어 편집
- nano /etc/hosts → 시스템 설정 파일 /etc/hosts를 편집
- nano -c file.txt → 파일을 열 때 줄 번호 표시
- nano -m file.txt → 마우스 지원 활성화
- nano -B file.txt → 편집 전 백업 파일(file.txt~) 자동 생성
참고
- ^0 에서 ^는 Ctrl 키를 의미한다.
- 단축키 목록
- nano는 vi나 vim보다 직관적이고 간단하여 빠르게 파일을 편집할 때 유용하다.
리눅스의 패키지 관리자(Package Manager)
패키지 관리자(Package Manager)는 리눅스 시스템에서 소프트웨어 패키지를 설치, 업데이트, 제거 및 관리하는 도구이다. 각 배포판은 자체적인 패키지 관리 시스템을 사용한다.
- 저장소(Repository): 패키지 관리자가 소프트웨어를 다운로드하는 원격/로컬 저장소
- 의존성 해결: 일부 패키지는 다른 패키지에 의존하며, APT, YUM, DNF 등은 이를 자동 해결
- 캐시 관리: 패키지 정보 및 다운로드한 패키지 파일을 캐싱하여 재사용 가능
Debian 계열 (Ubuntu, Debian 등)
- APT (Advanced Package Tool)
- DPKG (Debian Package Manager)
wget
명령어의 역할
웹에서 파일을 다운로드하는 명령어로, HTTP, HTTPS, FTP 프로토콜을 지원한다.
명령어의 예시
- wget http://example.com/file.zip → 지정된 URL에서 file.zip 다운로드
- wget -O myfile.zip http://example.com/file.zip → 파일을 myfile.zip 이름으로 저장
- wget -c http://example.com/file.zip → 다운로드가 중단된 경우 이어서 다운로드
- wget -r http://example.com/ → 웹사이트를 재귀적으로 다운로드
- wget --limit-rate=500k http://example.com/file.zip → 다운로드 속도를 500KB/s로 제한
- wget --no-check-certificate https://example.com/file.zip → SSL 인증서 오류 무시하고 다운로드
- wget -i urls.txt → urls.txt에 있는 여러 개의 URL에서 파일을 순차적으로 다운로드
참고
- 기본적으로 다운로드한 파일은 현재 작업 디렉토리에 저장된다.
- wget은 GUI 없이 동작하기 때문에 서버 환경에서 파일을 가져올 때 유용하다.
- SSL 인증서가 필요한 경우 wget --ca-certificate=file.pem 옵션을 사용할 수 있다.
git
명령어의 역할
분산 버전 관리 시스템(Git)을 사용하여 소스 코드의 변경 사항을 추적하고 관리한다.
명령어의 예시
- git init → 현재 디렉토리를 Git 저장소로 초기화
- git clone https://github.com/user/repo.git → 원격 저장소를 로컬로 복제
- git status → 현재 저장소의 상태 확인
- git add file.txt → file.txt 변경 사항을 스테이징 영역에 추가
- git commit -m "커밋 메시지" → 스테이징된 변경 사항을 커밋
- git push origin main → 로컬 변경 사항을 원격 저장소의 main 브랜치로 푸시
- git pull origin main → 원격 저장소의 최신 변경 사항을 로컬로 가져오기
- git branch feature → 새로운 브랜치 feature 생성
- git checkout feature → feature 브랜치로 전환
- git merge feature → 현재 브랜치에 feature 브랜치의 변경 사항 병합
- git log --oneline → 간단한 형식으로 커밋 로그 확인
- git reset --hard HEAD~1 → 마지막 커밋을 되돌리고 변경 사항 삭제
참고
- git config --global user.name "Your Name" → 전역 사용자 이름 설정
- git config --global user.email "you@example.com" → 전역 사용자 이메일 설정
- .gitignore 파일을 사용하여 Git에서 추적하지 않을 파일을 지정할 수 있다.
CLI(Command-Line Interface)를 배워야 하는 이유
CLI(Command-Line Interface)는 GUI(Graphical User Interface)보다 학습 곡선이 가파를 수 있지만, 효율성과 자동화 측면에서 뛰어난 장점을 제공한다.
기준
|
CLI
|
GUI
|
사용 속도
|
명령어 입력 후 즉시 실행 가능
|
마우스로 클릭해야 하므로 상대적으로 느림
|
자동화
|
스크립트 작성으로 반복 작업 자동화 가능
|
수작업이 필요하여 자동화 어려움
|
시스템 자원 사용
|
매우 적음 (텍스트 기반)
|
비교적 많음 (그래픽 요소 사용)
|
유연성
|
다양한 파라미터와 옵션 조합 가능
|
제한적인 기능 제공
|
원격 관리
|
SSH 등으로 원격 서버 관리 가능
|
GUI 원격 접속이 불편하고 무겁다
|
학습 난이도
|
명령어를 익혀야 하지만 강력한 제어 가능
|
직관적이지만 기능이 제한적
|
재현성
|
같은 명령어 실행 시 동일한 결과 보장
|
GUI의 경우 설정이 다를 수 있음
|
CLI를 사용하는 이유 - 연속 실행(세미콜론 ;)
CLI에서는 여러 명령어를 한 줄에서 연속 실행(Sequence Execution)할 수 있다. 이를 위해 세미콜론(;)을 사용하면 된다.
- 여러 개의 명령어를 한 번에 실행 가능
- 입력 시간을 줄여서 생산성 향상
- 스크립트 없이 간단한 자동화 가능
명령어1 ; 명령어2 ; 명령어3
- 명령어1이 실행된 후 명령어2, 명령어3이 차례대로 실행됨.
- 앞의 명령어가 성공하든 실패하든 상관없이 다음 명령어가 실행됨.
명령어1 && 명령어2 && 명령어3
- 명령어1이 실행된 후 명령어2, 명령어3이 차례대로 실행됨.
- 앞의 명령어가 성공하든 실패하든 상관없이 다음 명령어가 실행됨.
CLI를 사용하는 이유 - 파이프라인(|)
CLI에서는 파이프라인(|)을 사용하여 여러 명령어를 연결하고 데이터를 효율적으로 처리할 수 있다.
- 출력(Output)을 다음 명령어의 입력(Input)으로 전달 가능
- 데이터를 실시간으로 필터링 및 가공 가능
- GUI에서는 불가능한 복잡한 데이터 처리 자동화 가능
명령어1 | 명령어2 | 명령어3
- 명령어1의 출력이 명령어2의 입력으로 전달됨.
- 명령어2의 출력이 명령어3의 입력으로 전달됨.
- 연속적으로 데이터를 가공하면서 원하는 결과를 얻을 수 있음.
- 파이프라인 (|) 예제
- 파이프라인 > 를 사용해 Output 으로 사용할 수 있다.
grep
명령어의 역할
파일 또는 입력된 텍스트에서 특정 문자열을 검색하는 명령어이다.
명령어의 예시
- grep "error" logfile.txt → logfile.txt에서 "error"가 포함된 줄 출력
- grep -i "error" logfile.txt → 대소문자 구분 없이 "error" 검색
- grep -r "TODO" /home/user/projects → /home/user/projects 디렉토리 내 모든 파일에서 "TODO" 검색
- grep -v "DEBUG" logfile.txt → logfile.txt에서 "DEBUG"가 포함되지 않은 줄 출력
- grep -c "error" logfile.txt → logfile.txt에서 "error"가 포함된 줄 개수 출력
- grep -n "error" logfile.txt → logfile.txt에서 "error"가 포함된 줄과 해당 줄 번호 출력
- ps aux | grep nginx → 실행 중인 프로세스 목록에서 "nginx" 포함된 행 검색
- ls -l | grep "^d" → 디렉토리만 필터링하여 출력
참고
- grep은 정규 표현식을 지원하며, grep -E 또는 egrep을 사용하면 확장 정규 표현식을 활용할 수 있다.
- 특정 단어만 검색하려면 grep -w "word"를 사용한다.
- grep -A 3 "error" logfile.txt → "error"가 포함된 줄과 그 아래 3줄 출력
- grep -B 3 "error" logfile.txt → "error"가 포함된 줄과 그 위 3줄 출력
- grep -C 3 "error" logfile.txt → "error"가 포함된 줄과 위아래 3줄 출력
Linux - 입출력 리디렉션(IO Redirection) 1: 출력(Output)
- 출력 리디렉션(Output Redirection)은 명령어 실행 결과(표준 출력, 에러 출력)를 파일로 저장하거나 다른 출력 방식으로 변경하는 기능이다.
- 출력 리디렉션 종류
- 표준 출력 리디렉션 (> & >>)
- 표준 오류 리디렉션 (2>, 2>>)
- 표준 출력 + 표준 오류 리디렉션 (&>, &>>)
- /dev/null을 활용한 출력 무시
Linux - 입출력 리디렉션(IO Redirection) 2: 입력(Input Redirection)
입력 리디렉션(Input Redirection)은 명령어 실행 시 키보드 입력 대신 파일 또는 다른 입력 소스를 사용할 수 있도록 하는 기능이다.
1. 입력 리디렉션(Input Redirection) 종류
연산자
|
설명
|
<
|
파일을 표준 입력으로 사용
|
<<
|
여러 줄 입력(히어 도큐먼트, Here Document) 사용
|
<<<
|
문자열을 표준 입력으로 전달 (히어 스트링, Here String)
|
2. 파일 입력 리디렉션(File Input Redirection) (<)
1) 파일을 입력으로 사용
sort < input.txt
- input.txt 파일의 내용을 표준 입력으로 받아 정렬(sort) 수행
- 히어 도큐먼트(Here Document) (<<)
4. 히어 스트링(Here String) (<<<)
1) 문자열을 입력으로 전달
grep "hello" <<< "hello world"
- "hello world" 문자열을 grep의 입력으로 전달하여 "hello" 검색

2) 변수를 입력으로 전달
name="Linux"
- echo "안녕하세요, $name" <<< "Linux"
- 변수 값을 입력으로 사용
head
명령어의 역할
파일의 처음 몇 줄을 출력하는 명령어이다. 기본적으로 처음 10줄을 표시한다.
명령어의 예시
- head file.txt → file.txt의 처음 10줄 출력
- head -n 5 file.txt → file.txt의 처음 5줄 출력
- head -n 20 file.txt → file.txt의 처음 20줄 출력
- head -c 100 file.txt → file.txt의 처음 100바이트 출력
- head -v file.txt → 파일 이름과 함께 내용 출력
- head -q file1.txt file2.txt → 여러 파일을 출력할 때 파일 이름 없이 출력
참고
- head는 tail 명령어와 반대로 동작하며, tail은 파일의 마지막 몇 줄을 출력하는 데 사용된다.
- 여러 개의 파일을 입력하면 각각의 파일에 대해 결과를 출력한다.
- 파이프(|)와 함께 사용하면 긴 출력에서 상위 일부만 확인할 수 있다.
tail
명령어의 역할
파일의 마지막 몇 줄을 출력하는 명령어이다. 기본적으로 마지막 10줄을 표시한다.
명령어의 예시
- tail file.txt → file.txt의 마지막 10줄 출력
- tail -n 5 file.txt → file.txt의 마지막 5줄 출력
- tail -n 20 file.txt → file.txt의 마지막 20줄 출력
- tail -c 100 file.txt → file.txt의 마지막 100바이트 출력
- tail -f /var/log/syslog → syslog 파일의 실시간 변경 내용을 계속 출력
- tail -F /var/log/syslog → 파일이 이동되거나 삭제되어도 계속 감시 (f보다 안정적)
- tail -q file1.txt file2.txt → 여러 파일을 출력할 때 파일 이름 없이 출력
참고
- tail -f는 로그 파일 감시에 유용하며, 실시간으로 변경되는 내용을 볼 수 있다.
- tail은 head 명령어와 반대로 동작하며, 파일의 마지막 부분을 확인하는 데 사용된다.
- 파이프(|)와 함께 사용하면 긴 출력에서 하위 일부만 확인할 수 있다.
Linux - 쉘(Shell)과 커널(Kernel)
쉘(Shell)과 커널(Kernel)은 리눅스 운영체제의 핵심 구성 요소로, 시스템 자원 관리와 사용자 인터페이스 역할을 수행한다.
- 커널(Kernel)
- 쉘(Shell)
- 요약
Linux - 디렉터리 구조(Directory Structure)
리눅스 디렉터리 구조(Directory Structure)는 FHS(Filesystem Hierarchy Standard)에 따라 계층적으로 구성되어 있으며, 각 디렉터리는 특정한 역할을 수행한다.
1. 리눅스 디렉터리 구조 개요
디렉터리
|
설명
|
/
|
루트 디렉터리, 모든 파일 및 디렉터리의 최상위 경로
|
/bin
|
필수 명령어(ls, cat, cp 등)가 포함된 바이너리 디렉터리
|
/boot
|
부팅 관련 파일(vmlinuz, initrd.img, grub 등) 저장
|
/dev
|
하드웨어 장치 파일(sda, tty, null 등)이 포함
|
/etc
|
시스템 설정 파일(passwd, hosts, fstab 등) 저장
|
/home
|
사용자 홈 디렉터리(/home/user)
|
/lib
|
기본 라이브러리(libc.so, ld-linux.so 등) 저장
|
/media
|
이동식 미디어(USB, CD-ROM) 마운트 지점
|
/mnt
|
임시 마운트 지점
|
/opt
|
추가 애플리케이션 패키지 설치 경로
|
/proc
|
시스템 및 프로세스 정보(/proc/cpuinfo, /proc/meminfo 등) 제공
|
/root
|
루트 사용자의 홈 디렉터리
|
/run
|
시스템 초기화 및 프로세스 관련 파일 저장
|
/sbin
|
시스템 관리자용 바이너리 명령어(fsck, ifconfig 등) 저장
|
/srv
|
서비스 데이터(HTTP, FTP 등) 저장
|
/sys
|
시스템 및 하드웨어 정보 제공
|
/tmp
|
임시 파일 저장, 시스템 재부팅 시 삭제됨
|
/usr
|
공유 응용 프로그램 및 라이브러리 저장
|
/var
|
가변 데이터(로그, 캐시, 메일, 스풀 등) 저장
|
whereis
명령어의 역할
명령어의 실행 파일, 소스 코드, 매뉴얼 페이지가 저장된 위치를 찾는다.
명령어의 예시
- whereis ls → ls 명령어의 바이너리, 소스, 매뉴얼 페이지 위치 출력
- whereis -b ls → ls 명령어의 실행 파일 위치만 출력
- whereis -m ls → ls 명령어의 매뉴얼 페이지 위치만 출력
- whereis -s ls → ls 명령어의 소스 코드 위치만 출력
- whereis -l → whereis가 검색하는 디렉토리 목록 출력
참고
- whereis는 실행 파일(b), 매뉴얼 파일(m), 소스 코드(s)를 찾을 수 있다.
- 단순히 명령어의 경로를 찾고 싶다면 which 명령어를 사용할 수도 있다.
- whereis는 일반적으로 시스템 디렉토리(/bin, /sbin, /usr/bin 등)에서만 검색하며, 사용자 디렉토리는 포함되지 않는다.
Linux - $PATH 환경 변수
$PATH는 시스템에서 실행 가능한 명령어가 저장된 디렉터리 목록을 지정하는 환경 변수이다.
- 사용자가 명령어를 입력하면, 쉘(Shell)은 $PATH에 정의된 디렉터리에서 해당 명령어를 찾는다.
- $PATH에 등록되지 않은 디렉터리의 실행 파일은 절대 경로 또는 상대 경로를 입력해야 실행 가능하다.
- echo $PATH 명령어를 통해 설정되어 있는 실행 가능한 명령어와 관련된 디렉터리를 확인할 수 있다.
Linux - 프로세스(Process) 1: 컴퓨터 구조(Computer Structure)
프로세스(Process)는 프로그램이 실행될 때 CPU, RAM, Storage 간의 데이터 흐름을 거쳐 동작한다.
- 프로그램 로드 (Storage → RAM)
- 명령어 실행 (RAM → CPU)
- 입출력 및 저장 (CPU → RAM → Storage)
- 프로세스 종료
Linux - 프로세스(Process) 2: ps, top, htop
ps, top, htop은 리눅스에서 프로세스를 모니터링하고 관리하는 도구이다.
ps는 현재 실행 중인 프로세스를 스냅샷(snapshot) 방식으로 출력하고, top과 htop은 실시간으로 프로세스를 모니터링하는 도구이다.
- ps (Process Status) - 현재 실행 중인 프로세스 조회
- top - 실시간 프로세스 모니터링
- htop - 직관적인 프로세스 모니터링 (top의 확장형)
Linux - top에서의 로드 애버리지(Load Average)
로드 애버리지(Load Average)는 시스템의 CPU 부하 상태를 나타내는 지표로, 일정 시간 동안 실행 중이거나 실행 대기 중인 프로세스의 평균 개수를 의미한다.
- top 명령어 실행 시, 상단에 표시되는 load average: 0.50, 1.20, 2.10이 이에 해당한다. 이 수치는 하나의 코어를 기준으로 대기하고 있는 프로세스를 의미한다.
- 로드 애버리지 해석 방법
- CPU 코어 수에 따른 해석
- 나의 경우는 12코어 맥북을 사용하고 있으므로 Load average 2.64 3.13 3.01 기준으로 CPU 사용률이 약 25% 수준인 것이다.

locate
명령어의 역할
파일 시스템에서 특정 파일이나 디렉토리의 경로를 빠르게 검색한다.
명령어의 예시
- locate file.txt → file.txt 파일이 존재하는 모든 경로 출력
- locate -i readme → 대소문자 구분 없이 readme 파일 검색
- locate /bin/bash → /bin/bash 파일의 전체 경로 출력
- locate -c config → config가 포함된 파일 개수 출력
- locate -l 5 error.log → error.log 파일 검색 결과 중 5개만 출력
- locate "*.conf" → .conf 확장자를 가진 모든 파일 검색
참고
- locate는 기존에 생성된 데이터베이스(/var/lib/mlocate.db)를 기반으로 검색하기 때문에 매우 빠르다.
- 새롭게 생성된 파일을 반영하려면 데이터베이스를 업데이트해야 한다.
- find 명령어는 실시간 검색을 수행하지만, locate는 데이터베이스를 기반으로 빠르게 검색하는 방식이므로 최신 파일이 검색되지 않을 수 있다.
find
명령어의 역할
파일 시스템에서 특정 조건에 맞는 파일이나 디렉토리를 검색한다.
명령어의 예시
- find / -name file.txt → 루트 디렉토리(/)에서 file.txt 파일 검색
- find /home -name "*.log" → /home 디렉토리에서 .log 확장자를 가진 파일 검색
- find /var/log -type f -name "*.log" → /var/log 디렉토리에서 .log 파일만 검색
- find /etc -type d -name "conf.d" → /etc 디렉토리에서 conf.d 폴더 검색
- find . -size +100M → 현재 디렉토리에서 100MB보다 큰 파일 검색
- find /tmp -user user1 → /tmp 디렉토리에서 user1이 소유한 파일 검색
- find /home -mtime -3 → 최근 3일 이내 수정된 파일 검색
- find /var -name "*.log" -exec rm -f {} \; → /var 디렉토리에서 .log 파일을 찾아 삭제
참고
- find는 실시간으로 검색하므로 locate보다 느리지만, 최신 상태의 파일을 검색할 수 있다.
- type 옵션
- size 옵션
- mtime 옵션
- exec 옵션을 사용하면 검색된 파일에 대해 특정 명령어 실행 가능
Linux - 백그라운드 실행(Background Execution) (Ctrl+Z, &)
리눅스에서 프로세스를 백그라운드로 실행하면, 터미널을 차단하지 않고 다른 작업을 수행할 수 있다.
- &를 사용하여 명령을 백그라운드에서 실행하거나, Ctrl+Z로 실행 중인 프로세스를 일시 정지한 후 백그라운드로 전환할 수 있다.
- jobs를 사용하여 현재 백그라운드에서 실행되고 있는 프로세스에 대한 PID 값과 Job ID 값을 얻을 수 있다.
- kill를 사용하여 해당 백그라운드에서 실행되는 프로세스를 terminated 시킬 수 있다.
- fg %$JOB_ID 를 사용하여 백그라운드에서 실행되는 프로세스를 다시 포그라운드로 가져올 수 있다.
Linux - 데몬(Daemon)
데몬(Daemon)은 백그라운드에서 실행되며, 지속적으로 시스템 서비스를 제공하는 프로세스이다.
- 일반적으로 사용자가 직접 실행하지 않으며, 부팅 시 자동 실행되고, 시스템이 종료될 때까지 동작한다.
- 데몬(Daemon)의 특징
- 데몬 프로세스 확인 방법
Linux - 시간 기반 작업 스케줄링(Time-based Job Scheduling) - cron 사용법(Usage)
cron은 리눅스에서 특정 시간에 자동으로 명령어 또는 스크립트를 실행하는 데 사용되는 스케줄링 시스템이다.
- 반복적인 작업(백업, 로그 정리, 시스템 유지보수 등)을 자동화하는 데 유용하다.
- 스케줄링 정보는 crontab(크론 테이블) 파일에 저장되며, 사용자별로 관리 가능하다.
1. cron 및 crontab 개요
개념
|
설명
|
cron
|
일정한 시간 간격으로 작업을 실행하는 데몬 프로세스
|
crontab
|
cron 스케줄을 관리하는 설정 파일
|
/etc/crontab
|
시스템 전체의 cron 작업을 설정하는 글로벌 설정 파일
|
/var/spool/cron/
|
각 사용자별 crontab 스케줄 저장 디렉터리
|
2. crontab 명령어 사용법
명령어
|
설명
|
crontab -l
|
현재 사용자 cron 작업 목록 확인
|
crontab -e
|
cron 작업 추가 또는 수정
|
crontab -r
|
현재 사용자의 cron 작업 전체 삭제
|
crontab -u user -l
|
특정 사용자의 cron 작업 확인 (root 권한 필요)
|
3. crontab 일정 표현 형식
- crontab 파일의 각 줄은 특정 시간에 실행될 작업을 정의한다.
- 기본 형식: 분 시간 일 월 요일 실행할_명령어
- crontab 사용 예제
- cron 로그 확인 (/var/log/cron)
alias
명령어의 역할
명령어를 단축해서 사용할 수 있도록 별칭을 설정하는 명령어이다.
명령어의 예시
- alias ll='ls -l' → ll을 ls -l로 단축하여 사용
- alias rm='rm -i' → rm을 rm -i로 설정하여 삭제 시 확인 메시지 표시
- alias gs='git status' → gs를 입력하면 git status 실행
- alias dfh='df -h' → dfh를 입력하면 df -h 실행
- alias update='sudo apt update && sudo apt upgrade -y' → 시스템 업데이트 명령어 단축
참고
- 현재 설정된 별칭을 확인하려면 alias 명령어를 실행
- 별칭을 해제하려면 unalias ll 또는 unalias -a (모든 별칭 해제)
- 별칭을 영구적으로 사용하려면 ~/.bashrc 또는 ~/.zshrc 파일에 추가한 후 source ~/.bashrc 실행
Linux - 시작 스크립트(Startup Script) - bashrc
~/.bashrc는 사용자의 Bash 셸이 실행될 때 자동으로 실행되는 스크립트 파일이다.
- 주로 환경 변수 설정, 명령어 별칭(alias), 프롬프트 설정, 사용자 정의 함수 등을 포함한다.
- 아래는 시작 스크립트의 종류이다.
Linux - 다중 사용자(Multi-User)
리눅스는 기본적으로 다중 사용자(Multi-User) 환경을 지원하는 운영체제이며, 여러 사용자가 동시에 시스템을 사용할 수 있다.
- 각 사용자는 고유한 계정, 파일, 프로세스, 권한을 가지며, 시스템 리소스에 대한 접근이 제어된다.
id
명령어의 역할
현재 사용자 또는 지정된 사용자의 UID(사용자 ID), GID(그룹 ID), 소속 그룹 정보를 출력한다.
명령어의 예시
- id → 현재 사용자의 UID, GID, 소속 그룹 정보 출력
- id user1 → user1 사용자의 UID, GID, 소속 그룹 정보 출력
- id -u → 현재 사용자의 UID만 출력
- id -g → 현재 사용자의 기본 그룹(GID)만 출력
- id -G → 현재 사용자가 속한 모든 그룹의 GID 출력
- id -nG → 현재 사용자가 속한 그룹의 이름 출력
- id -u user1 → user1 사용자의 UID 출력
- id -g user1 → user1 사용자의 기본 그룹 ID 출력
참고
- UID 0은 root 사용자를 의미한다.
- 그룹 정보는 /etc/group 파일에서 확인할 수 있다.
- whoami는 현재 사용자 이름만 출력하는 반면, id는 UID, GID 및 그룹 정보를 포함하여 상세 정보를 제공한다.
who
명령어의 역할
현재 시스템에 로그인한 사용자 목록과 로그인 정보를 출력한다.
명령어의 예시
- who → 현재 로그인한 모든 사용자 출력
- who -H → 컬럼 헤더(제목) 포함하여 출력
- who -q → 로그인한 사용자 계정만 출력 및 사용자 수 표시
- who -b → 시스템 부팅 시간 출력
- who -m → 현재 터미널에서 실행한 사용자 정보만 출력
- who -u → 사용자의 로그인 시간과 프로세스 ID 포함하여 출력
참고
- who는 현재 로그인한 사용자 목록을 표시하며, w 명령어는 로그인한 사용자의 세부적인 활동 정보(CPU 사용량, 실행 중인 프로세스 등)를 포함하여 출력한다.
- whoami는 현재 명령을 실행한 사용자 이름만 출력한다.
Linux - 루트 사용자(Root User)
루트 사용자(Root User)는 리눅스에서 최고 권한을 가진 관리자 계정으로, 시스템의 모든 파일 및 설정을 변경할 수 있다.
- 일반적으로 UID(User ID)가 0인 계정이며, 모든 명령 실행, 사용자 관리, 시스템 설정 변경 등의 권한을 가진다.
- 루트 사용자(root)의 특징
- 루트 사용자로 전환하는 방법
- 루트 계정 보안 관리
passwd
명령어의 역할
사용자 계정의 비밀번호를 변경하거나 정보를 수정하는 명령어이다.
명령어의 예시
- passwd → 현재 사용자의 비밀번호 변경
- passwd user1 → user1 사용자의 비밀번호 변경 (root 권한 필요)
- passwd -e user1 → user1 사용자의 비밀번호 만료 설정 (다음 로그인 시 변경 요구)
- passwd -l user1 → user1 계정 잠금
- passwd -u user1 → user1 계정 잠금 해제
- passwd -S user1 → user1 계정의 비밀번호 상태 확인
- passwd -x 30 user1 → user1 사용자의 비밀번호 최대 사용 기간을 30일로 설정
참고
- 비밀번호 정책(최소 길이, 복잡성 등)은 /etc/login.defs 또는 pam_pwquality 모듈을 통해 관리된다.
- 루트 사용자는 다른 사용자의 비밀번호를 변경할 수 있다.
- 계정 잠금(l)과 해제(u)는 사용자 로그인 보안 정책에 활용된다.
adduser / useradd
명령어의 역할
새로운 사용자를 생성하는 명령어이다.
명령어의 예시
- adduser (권장)
- useradd (저수준 명령어)
참고
- adduser는 더 직관적이고 자동 설정 포함 (useradd보다 권장됨)
- useradd는 더 낮은 수준의 명령어이며, 홈 디렉토리 생성(m) 등 추가 옵션이 필요함
- 사용자의 정보를 확인하려면 id user1 또는 getent passwd user1 명령어 사용
usermod
명령어의 역할
기존 사용자의 정보를 수정하는 명령어이다.
명령어의 예시
- sudo usermod -l newuser olduser → olduser의 사용자 이름을 newuser로 변경
- sudo usermod -d /home/newhome -m user1 → user1의 홈 디렉토리를 /home/newhome으로 이동
- sudo usermod -s /bin/zsh user1 → user1의 기본 로그인 쉘을 /bin/zsh로 변경
- sudo usermod -G sudo user1 → user1을 sudo 그룹에 추가
- sudo usermod -aG docker user1 → user1을 docker 그룹에 추가 (기존 그룹 유지)
- sudo usermod -L user1 → user1 계정 잠금
- sudo usermod -U user1 → user1 계정 잠금 해제
참고
- G 옵션은 기존 그룹을 덮어쓰므로, 기존 그룹을 유지하면서 추가하려면 aG 옵션을 사용해야 한다.
- 계정 잠금(L)과 해제(U)는 로그인 보안 정책 관리에 사용된다.
- 사용자의 현재 정보를 확인하려면 id user1 또는 getent passwd user1을 사용하면 된다.
Linux - 권한(Permission) : 기본 개념(Basic)
리눅스에서는 파일과 디렉터리에 대한 접근 권한을 제어하여 보안을 유지한다.
- 모든 파일과 디렉터리는 소유자(Owner), 그룹(Group), 기타 사용자(Others)에 대해 각각의 권한을 가진다.
- 리눅스 파일 권한 개요
- 권한은 rwx(읽기, 쓰기, 실행) 형식으로 표현되며, 각 파일은 3개의 사용자 그룹에 대해 개별적인 권한을 가진다.
chmod
명령어의 역할
파일 및 디렉토리의 권한(퍼미션)을 변경하는 명령어이다.
명령어의 예시
- 숫자 모드(8진수) 변경
- 기호 모드(문자) 변경
- 디렉토리 권한 설정
참고
- chmod는 파일 권한을 직접 변경하며, 소유자를 변경하려면 chown을 사용한다.
- 8진수 권한 의미:
- ls -l을 사용하여 현재 파일 권한을 확인할 수 있다.
Linux - 권한(Permission) : 파일과 디렉터리
리눅스에서 실행 권한(Execute Permission, x)은 파일 및 디렉터리에 대해 다른 의미를 가진다.
- 파일 권한(File Permission)의 의미
- 디렉터리 권한(Directory Permission)의 의미
Linux - 그룹(Group)
리눅스에서 그룹(Group)은 사용자를 묶어서 파일 및 디렉터리의 접근 권한을 효과적으로 관리하는 개념이다.
- 여러 사용자가 동일한 그룹에 속하면, 해당 그룹에 부여된 권한을 공유할 수 있다.
- 그룹을 활용하면 다중 사용자 환경에서 파일 및 시스템 자원을 보다 효율적으로 관리할 수 있다.
- 그룹(Group)의 특징
groupadd
명령어의 역할
새로운 사용자 그룹을 생성하는 명령어이다.
명령어의 예시
- sudo groupadd devs → devs 그룹 생성
- sudo groupadd -g 1050 admins → GID(그룹 ID) 1050을 가진 admins 그룹 생성
- sudo groupadd -r system_group → 시스템 그룹 생성 (r 옵션 사용)
참고
- 기본적으로 새 그룹의 GID는 /etc/group 파일에서 자동으로 할당된다.
- 특정 사용자를 그룹에 추가하려면 usermod -aG groupname username 명령어를 사용해야 한다.
- 그룹 정보를 확인하려면 getent group groupname 또는 cat /etc/group을 사용하면 된다.
chown
명령어의 역할
파일 및 디렉토리의 소유자(user)와 그룹(group)을 변경하는 명령어이다.
명령어의 예시
- 파일 소유자 변경
- 그룹 변경
- 현재 소유권 유지하면서 그룹만 변경
참고
- 현재 파일의 소유자를 확인하려면 ls -l file.txt 사용
- R 옵션을 사용하면 디렉토리 내 모든 파일과 하위 디렉토리에 적용
- 시스템의 모든 파일 소유권을 변경할 때는 주의해야 한다. (-preserve-root 옵션을 활용)
- 특정 사용자만 파일을 관리하도록 설정할 때 유용하다.
curl
명령어의 역할
HTTP, HTTPS, FTP 등 다양한 프로토콜을 사용하여 웹 요청을 전송하고 데이터를 다운로드하는 명령어이다.
명령어의 예시
- 기본적인 HTTP 요청
- HTTP 요청 옵션 사용
- 데이터 전송
- 인증 및 보안
참고
- curl은 REST API 테스트, 파일 다운로드, HTTP 요청 디버깅 등에 자주 사용된다.
- JSON 데이터를 다룰 때 jq와 함께 사용하면 가독성이 향상된다.
- wget과 비교하면 curl은 더 다양한 프로토콜과 HTTP 요청을 지원하며, wget은 주로 파일 다운로드에 최적화되어 있다.