@extends('layouts.app') @section('title', '리눅스 & 서버 명령어') @push('styles') @endpush @section('content')
{{-- ============================================================ --}} {{-- 히어로 배너 --}} {{-- ============================================================ --}}
아카데미 리눅스 & 서버 명령어

리눅스 & 서버 명령어

서버 운영에 필요한 기본 명령어부터 권한 관리까지 — 초보자를 위한 실전 가이드

🐧
{{-- ============================================================ --}} {{-- 좌측 고정 목차 (TOC) --}} {{-- ============================================================ --}} {{-- ============================================================ --}} {{-- 우측 콘텐츠 --}} {{-- ============================================================ --}}
{{-- 모바일 목차 --}} {{-- ============================================================ --}} {{-- 1. 터미널 기초 --}} {{-- ============================================================ --}}

1 터미널 기초

터미널이란? ?터미널(Terminal)은 컴퓨터에게 텍스트로 명령을 내리는 창이다. 마우스 클릭 대신 키보드로 모든 작업을 수행할 수 있다.

비유: 카카오톡 대화처럼

카카오톡에서 친구에게 메시지를 보내면 답장이 오듯, 터미널에서 명령어를 입력하면 컴퓨터가 결과를 보여준다. GUI(그래픽 화면)에서 마우스로 폴더를 더블클릭하는 것을, 터미널에서는 cd 폴더이름이라고 타이핑하는 것이다.

프롬프트 읽는 법

pro@sam-server:~$
pro 현재 로그인한 사용자 이름
sam-server 접속 중인 서버(호스트) 이름
~ 현재 위치. ~는 홈 디렉토리 (/home/pro)
$ 일반 사용자. #이면 관리자(root) 권한
{{-- ============================================================ --}} {{-- 2. 파일 탐색 --}} {{-- ============================================================ --}}

2 파일 탐색 — "내가 지금 어디에 있고, 뭐가 있지?"

pwd / cd — 현재 위치 확인 & 이동

# 현재 위치 확인 $ pwd /home/webservice/mng # 폴더 이동 $ cd /home/webservice/api # 절대 경로로 이동 $ cd storage/logs # 상대 경로로 이동 $ cd .. # 한 단계 위(부모 폴더)로 $ cd ~ # 홈 디렉토리로 $ cd - # 직전 디렉토리로 되돌아가기
팁: 폴더 이름을 몇 글자 치고 Tab 키를 누르면 자동 완성된다!

ls / ll — 파일 목록 보기 ?llls -la의 별칭(alias)이다. 대부분의 서버에서 기본 설정되어 있다.

# 기본 목록 $ ls # 파일/폴더 이름만 $ ls -l # 상세 정보 (권한, 크기, 날짜) $ ls -la # 숨김 파일(.env 등)까지 포함 $ ls -lh # 사람이 읽기 쉬운 크기 (KB, MB) $ ll # ls -la 와 동일 (단축 명령)

ls -l 출력 읽는 법:

-rw-r--r-- 1 pro pro 4.2K Jan 15 10:30 .env drwxr-xr-x 5 pro pro 4.0K Jan 15 10:30 storage │ │ │ │ │ │ └─ 파일/폴더 이름 │ │ │ │ │ └─ 수정 날짜 │ │ │ │ └─ 파일 크기 │ │ │ └─ 소유 그룹 │ │ └─ 소유자 │ └─ 링크 수 └─ 권한 (d=폴더, -=파일 / r읽기 w쓰기 x실행)
{{-- ============================================================ --}} {{-- 3. 파일 조작 --}} {{-- ============================================================ --}}

3 파일 조작 — "읽고, 복사하고, 이동하고, 삭제하기"

cat / head / tail — 파일 내용 보기

# 파일 전체 내용 출력 $ cat .env # 파일 처음 20줄만 $ head -n 20 storage/logs/laravel.log # 파일 마지막 50줄만 $ tail -n 50 storage/logs/laravel.log # 실시간 로그 모니터링 (새 내용이 추가되면 자동 표시) $ tail -f storage/logs/laravel.log # Ctrl+C로 종료
실무 팁: 서버 에러가 발생하면 tail -f storage/logs/laravel.log로 실시간 로그를 확인한다.

cp / mv / rm — 복사 / 이동 / 삭제

# 파일 복사 $ cp .env .env.backup # .env를 .env.backup으로 복사 $ cp -r storage/ storage_backup/ # 폴더 전체 복사 (-r 필수) # 파일/폴더 이동 (이름 변경에도 사용) $ mv old_name.txt new_name.txt # 이름 변경 $ mv file.txt /home/pro/backup/ # 다른 폴더로 이동 # 파일 삭제 (⚠️ 휴지통 없음! 바로 삭제됨) $ rm file.txt # 파일 삭제 $ rm -r folder/ # 폴더 삭제 (하위 포함)
주의: 리눅스에는 휴지통이 없다. rm으로 삭제하면 복구 불가. 중요한 파일은 삭제 전 cp로 백업하자.

mkdir / touch — 폴더 & 파일 생성

# 폴더 생성 $ mkdir backup # 폴더 생성 $ mkdir -p backup/2026/01 # 중간 폴더까지 한번에 생성 # 빈 파일 생성 $ touch memo.txt # 빈 파일 생성
{{-- ============================================================ --}} {{-- 4. 권한 관리 --}} {{-- ============================================================ --}}

4 권한 관리 — "누가 읽고, 쓰고, 실행할 수 있나?"

리눅스 파일에는 3종류의 사용자 × 3종류의 권한이 있다.

사용자 구분

  • u — 소유자 (Owner)
  • g — 그룹 (Group)
  • o — 기타 (Others)

권한 종류

  • r (4) — 읽기 (Read)
  • w (2) — 쓰기 (Write)
  • x (1) — 실행 (Execute)

chmod — 권한 변경 ?chmod = CHange MODe. 숫자 3자리로 소유자/그룹/기타의 권한을 한번에 설정한다. 예: 755 = rwxr-xr-x

# 숫자 방식 (가장 많이 사용) $ chmod 755 deploy.sh # rwxr-xr-x (소유자: 모두, 나머지: 읽기+실행) $ chmod 644 .env # rw-r--r-- (소유자: 읽기+쓰기, 나머지: 읽기만) $ chmod 600 .env # rw------- (소유자만 읽기+쓰기, 나머지: 접근 불가) $ chmod -R 775 storage/ # 폴더 하위 전체에 적용 (-R = Recursive) # 문자 방식 $ chmod +x script.sh # 실행 권한 추가 $ chmod u+w file.txt # 소유자에게 쓰기 권한 추가

자주 쓰는 권한 조합:

숫자 문자 의미 대상
755rwxr-xr-x실행 가능 스크립트deploy.sh, artisan
644rw-r--r--일반 파일*.php, *.html
600rw-------비밀 파일.env, SSH 키
775rwxrwxr-x공유 폴더storage/, logs/

chown — 소유자 변경 ?chown = CHange OWNer. 파일의 주인을 바꾼다. 웹 서버가 파일에 접근하려면 올바른 소유자 설정이 중요하다.

# 소유자 변경 $ chown pro:pro file.txt # 소유자와 그룹을 pro로 $ chown -R www-data:www-data storage/ # 웹서버가 접근하도록 # SAM 서버에서 자주 사용하는 패턴 $ chown -R pro:pro /home/webservice/mng
{{-- ============================================================ --}} {{-- 5. 검색 & 필터 --}} {{-- ============================================================ --}}

5 검색 & 필터 — "원하는 것을 찾아내기"

grep — 텍스트 검색 ?grep = Global Regular Expression Print. 파일 안에서 특정 텍스트를 찾아 그 줄을 출력한다.

# 파일에서 특정 문자열 검색 $ grep "DB_HOST" .env # .env에서 DB_HOST 찾기 # 폴더 전체에서 검색 (-r = 재귀, -n = 줄번호) $ grep -rn "Exception" storage/logs/ # 로그에서 Exception 검색 # 대소문자 무시 (-i) $ grep -i "error" laravel.log # error, Error, ERROR 모두 검색 # 해당 문자열이 없는 줄 찾기 (-v) $ grep -v "#" .env # 주석 제외하고 보기

find — 파일 찾기

# 파일명으로 찾기 $ find . -name "*.log" # 현재 폴더에서 .log 파일 찾기 $ find /home -name ".env" # /home 아래 모든 .env 찾기 # 크기 기준 (100MB 이상 파일) $ find / -size +100M # 디스크 용량 잡아먹는 파일 추적 # 최근 7일 내 수정된 파일 $ find . -mtime -7 # 최근 1주일 내 변경된 파일

파이프 ( | ) — 명령어 연결하기 ?파이프(|)는 앞 명령의 출력을 뒤 명령의 입력으로 넘긴다. 여러 명령을 조합해서 강력한 작업을 수행할 수 있다.

# 프로세스 중에서 nginx 찾기 $ ps aux | grep "nginx" # 파일 목록을 줄 수 세기 $ ls -la | wc -l # 현재 폴더의 파일 개수 # 로그에서 에러만 뽑아서 최근 10개만 $ grep "ERROR" laravel.log | tail -n 10
{{-- ============================================================ --}} {{-- 6. 시스템 모니터링 --}} {{-- ============================================================ --}}

6 시스템 모니터링 — "서버 상태 확인하기"

top / htop — CPU & 메모리 사용량

# 실시간 프로세스 모니터 (기본 내장) $ top # q 키로 종료 # 더 보기 쉬운 모니터 (설치 필요할 수 있음) $ htop # 컬러풀한 UI, F10 또는 q로 종료
확인 포인트: CPU가 100%에 가까우면 서버가 바쁜 것, 메모리(MEM)가 90% 이상이면 메모리 부족 위험.

df / free — 디스크 & 메모리 확인

# 디스크 용량 확인 (-h = 사람이 읽기 쉬운 형태) $ df -h Filesystem Size Used Avail Use% Mounted on /dev/sda1 50G 32G 16G 67% / # 메모리 사용량 확인 $ free -h total used free shared buff/cache available Mem: 3.8Gi 2.1Gi 0.3Gi 45Mi 1.4Gi 1.4Gi # 특정 폴더 용량 확인 $ du -sh storage/logs/ # 로그 폴더 크기 확인 $ du -sh * # 현재 폴더의 각 항목 크기
{{-- ============================================================ --}} {{-- 7. 프로세스 & 서비스 --}} {{-- ============================================================ --}}

7 프로세스 & 서비스 — "실행 중인 프로그램 관리"

ps / kill — 프로세스 확인 & 종료

# 모든 프로세스 보기 $ ps aux # 전체 프로세스 목록 $ ps aux | grep "php" # PHP 관련 프로세스만 $ ps aux | grep "nginx" # Nginx 프로세스 확인 # 프로세스 종료 (PID = 프로세스 번호) $ kill 1234 # 정상 종료 요청 $ kill -9 1234 # ⚠️ 강제 종료 (최후의 수단)

systemctl — 서비스 관리 ?systemctl은 리눅스의 서비스(=백그라운드 프로그램) 관리 도구다. Nginx, PHP-FPM, MySQL 등을 시작/중지/재시작할 때 사용한다.

# 서비스 상태 확인 (안전, 언제든 OK) $ systemctl status nginx # Nginx 상태 $ systemctl status php8.3-fpm # PHP-FPM 상태 $ systemctl status mysql # MySQL 상태 # ⚠️ 서비스 제어 (서비스 중단 위험 — 확인 후 실행) $ sudo systemctl restart nginx # Nginx 재시작 $ sudo systemctl restart php8.3-fpm $ sudo systemctl stop nginx # Nginx 중지 (사이트 접속 불가!) $ sudo systemctl start nginx # Nginx 시작
{{-- ============================================================ --}} {{-- 8. 네트워크 --}} {{-- ============================================================ --}}

8 네트워크 — "외부와 통신하기"

curl / wget — URL 요청 & 파일 다운로드

# URL 응답 확인 (API 테스트에 유용) $ curl https://sam.codebridgex.com # 응답 본문 출력 $ curl -I https://sam.codebridgex.com # 헤더만 확인 (상태 코드) # 파일 다운로드 $ wget https://example.com/file.zip # 파일 다운로드

ss / netstat — 포트 & 연결 확인

# 열려있는 포트 확인 $ ss -tulnp # TCP/UDP 열린 포트 목록 $ ss -tulnp | grep ":80" # 80번 포트(HTTP) 사용 중인지 확인 $ ss -tulnp | grep ":3306" # MySQL(3306) 포트 확인
{{-- ============================================================ --}} {{-- 9. 텍스트 편집 --}} {{-- ============================================================ --}}

9 텍스트 편집 — "서버에서 직접 파일 수정하기"

nano / vi — 터미널 텍스트 편집기

nano (초보자 추천)

$ nano .env # 편집 후: # Ctrl+O → 저장 # Ctrl+X → 종료

vi / vim (고급)

$ vi .env # i → 편집 모드 진입 # Esc → 편집 모드 종료 # :wq → 저장 후 종료 # :q! → 저장 안하고 종료
팁: vi에서 빠져나오지 못할 때는 Esc를 여러 번 누른 후 :q!를 입력하면 된다.
{{-- ============================================================ --}} {{-- 10. 위험 명령어 --}} {{-- ============================================================ --}}

10 위험 명령어 — "절대 주의!"

아래 명령어들은 서버를 망가뜨릴 수 있다. 실행 전 반드시 확인하자.

SAM 서버 정책: 이 명령어들은 팀장/관리자에게 확인 후에만 실행한다.

치명적 rm -rf /

서버의 모든 파일을 삭제한다. 절대 실행하면 안 된다.

# ❌ 절대 금지 rm -rf / # 서버 전체 삭제 rm -rf /* # 서버 전체 삭제 (같은 의미) rm -rf ~ # 홈 디렉토리 전체 삭제 # ✅ 올바른 사용: 삭제할 대상을 명확히 지정 rm -r /home/pro/backup/old-logs/
위험 chmod -R 777

모든 사용자에게 모든 권한을 부여한다. 보안 구멍이 된다.

# ❌ 보안 위험 chmod -R 777 /home/webservice/ # ✅ 올바른 권한 설정 chmod -R 755 /home/webservice/mng/ chmod 600 /home/webservice/mng/.env
위험 kill -9

프로세스를 강제 종료한다. 데이터 손실 위험.

# ❌ 데이터 손실 위험 (MySQL 등에 사용 금지) kill -9 $(pgrep mysql) # ✅ 서비스는 systemctl로 안전하게 종료 sudo systemctl stop mysql
주의 reboot / shutdown

서버를 재부팅/종료한다. 운영 중인 서비스가 모두 중단된다.

# ⚠️ 운영 서버에서 함부로 실행 금지 sudo reboot # 서버 재시작 sudo shutdown -h now # 서버 즉시 종료
{{-- 안전 수칙 요약 --}}

안전 수칙 요약

  • 1. rm 실행 전, 삭제 대상 경로를 두 번 확인한다.
  • 2. chmod 777 대신 필요한 최소 권한만 부여한다.
  • 3. 서비스 중지/재시작은 팀장에게 확인 후 실행한다.
  • 4. 모르는 명령어는 man 명령어 또는 명령어 --help로 먼저 확인한다.
  • 5. 중요한 작업 전에는 항상 백업한다. (cp -r 원본 백업경로)
{{-- Hover Preview --}}
{{-- Lightbox --}} @endsection @push('scripts') @endpush