본문 바로가기
리눅스

패키지 관리, 사용자/그룹, 셸 스크립트 자동화

by 클라우드 최 2026. 4. 29.

 

### : 시스템 관리

```

프로그램 설치 → apt (Advanced Package Tool)

사용자 관리   → 권한 분리 (보안)

환경변수      → 프로그램 설정값 자동 로드

```

 

### : 자동화

```

반복 작업 → 스크립트 작성 → 자동 실행

한 번 만들면 → 계속 재사용

```

 

---

 

#  — 패키지 관리, 사용자/그룹, 환경변수

 

## 핵심 개념

 

### 패키지

- Linux에서 **프로그램을 설치/제거**할 때 사용

- Ubuntu는 `apt` (Advanced Package Tool, 고급 패키지 도구) 명령어로 관리

 

### 사용자 & 그룹

- 여러 명이 같은 컴퓨터를 사용

- 누가 뭘 할 수 있는지 권한 분리

 

### 환경변수

- 프로그램이 사용하는 **설정값들**

- `$PATH`, `$HOME` 등이 대표적

 

---

 

## 실습

 

### Q: 프로그램을 어떻게 설치해?

 

**A:** `apt` (Advanced Package Tool, 고급 패키지 도구) 명령어를 사용해요.

 

**주요 명령어:**

 

| 명령어 | 의미 |

|--------|------|

| `sudo apt update` | 패키지 목록 최신화 (update = 갱신) |

| `sudo apt install <name>` | 패키지 설치 (install = 설치) |

| `sudo apt remove <name>` | 패키지 제거 (설정 유지) |

| `sudo apt purge <name>` | 패키지 + 설정 모두 제거 (purge = 완전 제거) |

| `sudo apt search <name>` | 패키지 검색 (search = 검색) |

| `apt list --installed` | 설치된 패키지 목록 |

 

**실습 결과:**

 

```bash

# 1️⃣ 패키지 목록 최신화

sudo apt update

 

# 2️⃣ git 설치

sudo apt install git

 

# 3️⃣ 설치 확인

git --version

# git version 2.34.1

```

 

---

 

### Q: sudo가 뭐야?

 

**A:** `sudo` (Super User DO, 최고 권한자로 실행) = 관리자 권한으로 실행

 

```

일반 사용자가 할 수 없는 일들

├─ 패키지 설치 (시스템 수정)

├─ 다른 사용자 추가

├─ 시스템 파일 수정

└─ 포트 1024 이하 사용

    ↓

sudo 붙이면 → 관리자 권한으로 실행 ✅

```

 

```bash

apt install git         # ❌ Permission denied (권한 거부)

sudo apt install git    # ✅ 작동

```

 

---

 

### Q: 새 사용자를 어떻게 추가해?

 

**A:** `useradd` (user add, 사용자 추가) 명령어 사용 (root 권한 필요)

 

**실습 결과:**

 

```bash

# 1️⃣ 'dev' 사용자 추가

sudo useradd -m -s /bin/bash dev

         #            │  │

         #            │  └─ -s (shell, 셸): 기본 셸을 bash로 지정

         #            └─ -m (make home, 홈 생성): 홈 디렉토리 자동 생성

 

# 2️⃣ 비밀번호 설정 (passwd = password)

sudo passwd dev

# New password: ← 비번 입력

# Retype new password: ← 다시 입력

 

# 3️⃣ sudo 그룹에 추가 (관리자 권한)

sudo usermod -aG sudo dev

#            │

#            └─ -aG (append to Group, 그룹에 추가): 기존 그룹 유지하면서 추가

 

# 4️⃣ dev 사용자로 전환 (su = Switch User, 사용자 전환)

su - dev

```

 

---

 

### Q: `/etc/passwd`와 `/etc/shadow`가 뭐야?

 

**A:** 사용자 정보를 저장하는 파일들이에요.

 

**`/etc/passwd` (공개 정보):**

 

```bash

cat /etc/passwd

# cat = concatenate (연결, 출력)

```

 

```

root:x:0:0:root:/root:/bin/bash

xxxxx :x:1000:1000::/home/ xxxxx :/bin/bash

 │             │  │   │   │       │                │

 │             │  │   │   │       │                └─ 기본 셸 (bash)

 │             │  │   │   │       └─ 홈 디렉토리

 │             │  │   │   └─ 설명 (comment, 주석)

 │             │  │   └─ 그룹 ID (GID = Group ID)

 │             │  └─ 사용자 ID (UID = User ID)

 │             └─ x = 비번은 /etc/shadow에 저장됨

 └─ 사용자명

```

 

**`/etc/shadow` (비밀번호, root만 볼 수 있음):**

 

```bash

sudo cat /etc/shadow

```

 

```

xxxxx :$6$abcd1234$xyz...:18...:0:99999:7:::

              │

              └─ 비밀번호 해시 (hash, 암호화된 값)

```

 

**중요:** 비밀번호는 **해시(hash, 단방향 암호화)**되어 저장되므로 원본을 복구할 수 없어요!

 

```

입력한 비밀번호 → 해싱 → 저장된 해시와 비교 → 일치하면 로그인

                          ↑

                   원본은 아무도 모름! 🔐

```

 

---

 

### Q: 비밀번호는 어떻게 변경해?

 

**A:** `passwd` (password, 비밀번호) 명령어 사용

 

```bash

# 내 비밀번호 변경

passwd

 

# 다른 사용자 비밀번호 변경 (관리자)

sudo passwd dev

```

 

**취소:** `Ctrl + C` (Cancel, 취소)

 

---

 

### Q: 시스템 사용자와 일반 사용자의 차이?

 

**A:** UID(User ID, 사용자 ID)로 구분돼요.

 

| 항목 | 시스템 사용자 | 일반 사용자 (너) |

|------|-------|-------|

| UID (User ID) | 1, 2, 3... (1000 미만) | **1000 이상** |

| 셸 | `/usr/sbin/nologin` (로그인 불가) | `/bin/bash` |

| 홈 디렉토리 | 없거나 시스템 폴더 | `/home/사용자명/` |

| 역할 | 서비스 실행 | 실제 사람이 사용 |

 

```

daemon, www-data, systemd-* → 시스템 사용자 (서비스용)

xxxxx , dev          → 일반 사용자 (사람이 로그인)

```

 

---

 

### Q: `$PATH`가 뭐야?

 

**A:** "명령어를 어디서 찾을지" 정해주는 환경변수 (PATH = 경로)

 

```bash

echo $PATH

# /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/snap/bin

```

 

**의미:** 콜론(`:`)으로 구분된 경로들을 **순서대로** 검색

 

**실제 동작:**

 

```bash

git --version

```

 

```

1. /usr/local/sbin에서 git 찾기? → 없음

2. /usr/local/bin에서 찾기? → 없음

3. /usr/sbin에서 찾기? → 없음

4. /usr/bin에서 찾기? → 있다! ✅

   → /usr/bin/git 실행

```

 

---

 

### Q: `which`와 `find` 차이는?

 

**A:** 찾는 대상과 범위가 달라요.

 

| 도구 | 찾는 것 | 범위 |

|------|---------|------|

| `which` (어디?) | **명령어** (실행파일만) | **PATH 안에서만** |

| `find` (찾기) | **모든 파일** | **전체 파일시스템** |

 

**실습:**

 

```bash

# which: 명령어 위치 찾기

which python3      # /usr/bin/python3

which git          # /usr/bin/git

which test.txt     # (아무것도 안 나옴 - 일반 파일이라서)

 

# find: 파일 검색

find . -name "*.txt"           # 현재 폴더에서 .txt 찾기

find ~ -name "*.txt"           # 홈 폴더에서 찾기

find / -name "*.txt"           # 전체 시스템에서 찾기

```

 

**`.`, `~`, `/` 의미:**

 

| 기호 | 의미 |

|------|------|

| `.` | 현재 디렉토리 (current directory) |

| `~` | 홈 디렉토리 (home directory) |

| `/` | 루트 디렉토리 (root, 최상위 폴더) |

 

---

 

### Q: `~/.bashrc`가 뭐야?

 

**A:** bash가 시작될 때 자동으로 실행되는 **설정 파일**

 

```

.       = 숨겨진 파일 (점으로 시작)

bash    = Bourne Again SHell (셸의 일종, 명령어 해석기)

rc      = run command (실행할 설정들)

```

 

**실행 시점:**

 

```

터미널 열기

    ↓

bash (Bourne Again SHell) 시작

    ↓

~/.bashrc 자동 실행

    ↓

설정 적용 ✅

```

 

**들어가는 내용:**

 

```bash

# 1. alias (별칭, 명령어 단축)

alias ll='ls -lah'

alias rm='trash-put'

 

# 2. 환경변수 (export = 내보내기/공유)

export PATH="/usr/local/bin:$PATH"

export EDITOR="nano"

 

# 3. 함수

my_function() {

    echo "안녕!"

}

```

 

---

 

### Q: `~/.bashrc`와 `~/.profile` 차이?

 

**A:** 실행 시점이 달라요.

 

| 파일 | 언제 | 몇 번 | 용도 |

|------|------|-----|------|

| `~/.bashrc` | 터미널 열 때마다 | 매번 | alias, 함수, 자주 쓰는 설정 |

| `~/.profile` | 로그인할 때 | 1번 | 로그인 환경 설정 |

 

```

~/.profile = 게임 시작할 때 한 번 설정

~/.bashrc  = 게임 켤 때마다 확인

```

 

---

 

### Q: alias가 뭐야?

 

**A:** `alias` (별칭) = 명령어 단축! 자주 쓰는 명령어를 짧은 이름으로 만들 수 있어요.

 

```bash

alias ll='ls -lah'

      │   │

      │   └─ 실제 명령어 (ls = list, -l = long, -a = all, -h = human-readable)

      └─ 단축 이름

```

 

**의미:** "지금부터 `ll`이라고 치면 `ls -lah`를 실행해"

 

**자주 쓰는 alias들:**

 

```bash

alias ll='ls -lah'        # ls long all human-readable (상세 목록)

alias la='ls -A'          # ls All (숨겨진 파일도 보기)

alias rm='trash-put'      # rm을 안전하게 (휴지통으로 이동)

alias grep='grep --color=auto'  # 색칠된 grep (Global Regular Expression Print)

alias mkdir='mkdir -p'    # mkdir parents (부모 디렉토리도 자동 생성)

alias ..='cd ..'          # cd = change directory (상위 디렉토리로)

```

 

**실습:**

 

```bash

# 1️⃣ ~/.bashrc에 추가

echo "alias ll='ls -lah'" >> ~/.bashrc

 

# 2️⃣ 적용 (source = 읽어서 적용)

source ~/.bashrc

 

# 3️⃣ 확인

alias ll        # alias ll='ls -lah' 출력

ll              # ls -lah 실행됨

```

 

---

 

##  핵심 정리

 

### 패키지 관리

```bash

sudo apt update           # 목록 최신화

sudo apt install <name>   # 설치

sudo apt remove <name>    # 제거

```

 

### 사용자 관리

```bash

sudo useradd -m -s /bin/bash 사용자명     # user add

sudo passwd 사용자명                      # password

sudo usermod -aG sudo 사용자명            # user modify

```

 

### 환경변수

```bash

echo $PATH                # 명령어 검색 경로

export VAR="value"        # 환경변수 설정 (export = 내보내기)

```

 

### 명령어 위치 찾기

```bash

which python3             # 명령어 위치 (PATH에서)

find . -name "*.txt"      # 파일 검색 (지정 폴더)

```

 

### 설정 파일

```bash

nano ~/.bashrc            # bash (Bourne Again SHell) 설정 편집

source ~/.bashrc          # 변경사항 적용

```

 

---

 

---

 

#  — 셸 스크립트 기초

 

## 핵심 개념

 

### 셸 스크립트 = bash 명령어 모음

- 여러 명령어를 **파일에 저장**해서 한 번에 실행

- **반복 작업 자동화**의 핵심

- Docker, CI/CD (Continuous Integration / Continuous Deployment, 지속적 통합/지속적 배포) 등 어디서든 쓰임

 

---

 

##   실습

 

### Q: 셸 스크립트가 뭐야?

 

**A:** bash (Bourne Again SHell) 명령어들을 파일에 저장해서 한 번에 실행하는 거예요.

 

**기본 구조:**

 

```bash

#!/bin/bash          # ← Shebang (이 파일은 bash 스크립트야!)

 

echo "안녕하세요!"   # ← bash 명령어들 (echo = 출력)

ls -la               # ls = list, -l = long, -a = all

date                 # 현재 날짜/시간 출력

```

 

---

 

### Q: `#!/bin/bash`이 뭐야?

 

**A:** **Shebang** (Sharp + Bang, `#!`의 별칭) — "이 파일을 bash로 실행해"라고 알려주는 표식

 

```bash

#!/bin/bash         ← bash (Bourne Again SHell) 스크립트

#!/usr/bin/python3  ← Python 스크립트

#!/usr/bin/env node ← Node.js 스크립트

```

 

**없으면?** 시스템이 어떤 언어인지 몰라서 오류 발생

 

---

 

### Q: 스크립트는 어떻게 실행해?

 

**A:** 3단계로!

 

**실습 결과:**

 

```bash

# 1단계: 스크립트 파일 만들기 (nano = 텍스트 에디터)

nano hello.sh

```

 

내용 입력:

```bash

#!/bin/bash

 

echo "안녕하세요!"          # echo = 출력

echo "현재 시간은:"

date                        # 현재 날짜/시간

echo "현재 사용자:"

whoami                      # who am I (나는 누구?)

```

 

```bash

# 2단계: 실행 권한 주기 (chmod = Change Mode, 권한 변경)

chmod +x hello.sh

#       │

#       └─ +x (add execute, 실행 권한 추가)

 

# 3단계: 실행하기

./hello.sh

#  │

#  └─ ./ = 현재 폴더(.)에서 실행

```

 

**결과:**

```

안녕하세요!

현재 시간은:

Wed Apr 29 16:48:29 KST 2026

                  ↑

                  KST = Korea Standard Time (한국 표준시)

현재 사용자:

xxxxx

```

 

---

 

### Q: 변수는 어떻게 써?

 

**A:** 변수 선언 후 `$` 붙여서 사용

 

**규칙:**

 

```bash

# 선언 (= 앞뒤 공백 없음! 중요!)

NAME=" xxxxx "

AGE=25

 

# 사용 ($ 붙이기)

echo $NAME           # xxxxx

echo "이름: $NAME"   # 이름: xxxxx

```

 

**실습 결과:**

 

```bash

nano user_info.sh

```

 

```bash

#!/bin/bash

 

# 변수 선언

NAME=" xxxxx "

AGE=25

ROLE="developer"

 

# 변수 사용

echo "=== 사용자 정보 ==="

echo "이름: $NAME"

echo "나이: $AGE"

echo "직책: $ROLE"

echo "환영합니다, $NAME!"

```

 

```bash

chmod +x user_info.sh

./user_info.sh

```

 

**결과:**

```

=== 사용자 정보 ===

이름: xxxxx

나이: 25

직책: developer

환영합니다, xxxxx !

```

 

---

 

### Q: 따옴표 차이가 뭐야?

 

**A:** 셋 다 다르게 동작해요!

 

| 따옴표 | 의미 | 예시 |

|--------|------|------|

| `"..."` (큰따옴표, double quote) | **변수 치환됨** | `"$NAME"` → ` xxxxx ` |

| `'...'` (작은따옴표, single quote) | **그대로 출력** | `'$NAME'` → `$NAME` |

| `$(...)` (명령어 치환, command substitution) | **명령어 실행** | `$(date)` → 현재 시간 |

 

**예시:**

 

```bash

NAME=" xxxxx "

 

echo "이름은 $NAME 입니다"     # 이름은 xxxxx 입니다 ✅

echo '이름은 $NAME 입니다'     # 이름은 $NAME 입니다 (그대로!)

echo "현재 시간: $(date)"      # 현재 시간: Wed Apr 29 ...

```

 

---

 

### Q: 조건문은 어떻게 써?

 

**A:** `if [ 조건 ]; then ... fi` 구조 (fi = if를 거꾸로 쓴 것, 끝맺음)

 

**기본 문법:**

 

```bash

if [ 조건 ]; then       # if = 만약

    # 참이면 실행

else                    # else = 그 외에는

    # 거짓이면 실행

fi                      # fi = if의 종료

```

 

**중요:** `[`와 `]` 양쪽에 **공백 필수!**

 

```bash

if [$AGE -ge 18]; then    ❌ 공백 없으면 에러

if [ $AGE -ge 18 ]; then  ✅ 공백 있어야 함

```

 

**비교 연산자:**

 

| 연산자 | 풀네임 | 의미 |

|--------|--------|------|

| `-eq` | equal | = (같음) |

| `-ne` | not equal | ≠ (다름) |

| `-lt` | less than | < (작음) |

| `-le` | less than or equal | ≤ (작거나 같음) |

| `-gt` | greater than | > (큼) |

| `-ge` | greater than or equal | ≥ (크거나 같음) |

 

**실습 결과:**

 

```bash

nano age_check.sh

```

 

```bash

#!/bin/bash

 

AGE=25

 

if [ $AGE -ge 18 ]; then

    echo "성인입니다"

else

    echo "미성년자입니다"

fi

```

 

```bash

./age_check.sh

# 성인입니다

```

 

---

 

### Q: 반복문은 어떻게 써?

 

**A:** `for 변수 in 리스트; do ... done` 구조 (for = ~를 위해, do = 실행, done = 완료)

 

**실습 1: 리스트 반복**

 

```bash

nano loop1.sh

```

 

```bash

#!/bin/bash

 

for name in alice bob charlie; do

    echo "안녕하세요, $name!"

done

```

 

**결과:**

```

안녕하세요, alice!

안녕하세요, bob!

안녕하세요, charlie!

```

 

**실습 2: 숫자 반복**

 

```bash

nano loop2.sh

```

 

```bash

#!/bin/bash

 

for i in {1..5}; do      # i = index (반복 변수)

    echo "반복 $i번"

done

```

 

**결과:**

```

반복 1번

반복 2번

반복 3번

반복 4번

반복 5번

```

 

---

 

### Q: 함수는 어떻게 만들어?

 

**A:** `함수이름() { ... }` 구조

 

**기본 구조:**

 

```bash

함수이름() {

    # 함수 내용

}

 

# 호출

함수이름

```

 

**주의: 끝낼 때 `}`로!**

 

```bash

# if/for는 키워드로 끝남

if [ ... ]; then ... fi      # fi (if 끝)

for ... do ... done          # done (반복 끝)

 

# 함수는 중괄호로 끝남 (C 언어 같이)

함수이름() { ... }            # } (블록 끝)

```

 

**실습 결과:**

 

```bash

nano greet.sh

```

 

```bash

#!/bin/bash

 

# 함수 정의 (greet = 인사하다)

greet() {

    echo "=========="

    echo "안녕하세요!"

    echo "=========="

}

 

# 함수 호출

greet

greet

greet

```

 

**결과:**

```

==========

안녕하세요!

==========

==========

안녕하세요!

==========

==========

안녕하세요!

==========

```

 

---

 

### Q: 함수에 값을 넘길 수 있어?

 

**A:** `$1`, `$2`로 받으면 돼요! (위치 매개변수, positional parameters)

 

**인자 변수:**

 

```bash

함수이름 값1 값2 값3

 

$1 = 첫 번째 값

$2 = 두 번째 값

$3 = 세 번째 값

$@ = 모든 값 (at sign, 모든 인자)

$# = 값의 개수 (sharp, 개수)

```

 

**실습 결과:**

 

```bash

nano print_box.sh

```

 

```bash

#!/bin/bash

 

print_box() {                    # print_box = 박스 출력

    echo "=========="

    echo "$1"                    # 첫 번째 인자 (argument)

    echo "=========="

}

 

# 호출하면서 값 전달

print_box "안녕하세요"

print_box "환영합니다"

print_box "감사합니다"

```

 

**결과:**

```

==========

안녕하세요

==========

==========

환영합니다

==========

==========

감사합니다

==========

```

 

---

 

### Q: 명령어가 성공했는지 어떻게 알아?

 

**A:** **`$?`** 변수를 보면 돼요! (exit status, 종료 상태)

 

**규칙:**

 

```bash

$? = 0     → 성공 ✅

$? ≠ 0     → 실패 ❌

```

 

**자주 보는 종료 코드 (Exit Code):**

 

| 코드 | 의미 |

|------|------|

| `0` | 성공 (Success) |

| `1` | 일반 에러 (General Error) |

| `2` | 사용법 에러 (Misuse, 파일 없음 등) |

| `127` | 명령어를 찾을 수 없음 (Command Not Found) |

 

**실습 결과:**

 

```bash

nano check_exit.sh

```

 

```bash

#!/bin/bash

 

ls /home

echo "ls /home 결과: $?"

 

ls /nonexistent

echo "ls /nonexistent 결과: $?"

```

 

**결과:**

```

dev  xxxxx

ls /home 결과: 0       ← 성공!

 

ls: cannot access '/nonexistent': No such file or directory

ls /nonexistent 결과: 2  ← 실패! (파일 없음)

```

 

---

 

##  실전 예시

 

### 예시 1: 디스크 사용량 알림

 

```bash

#!/bin/bash

 

# df = disk free, awk = 텍스트 처리, tr = translate

USAGE=$(df / | awk 'NR==2 {print $5}' | tr -d '%')

 

if [ $USAGE -gt 80 ]; then

    echo "⚠️ 디스크 사용량이 ${USAGE}%입니다!"

else

    echo "✅ 디스크 상태 정상 (${USAGE}%)"

fi

```

 

### 예시 2: 백업 스크립트

 

```bash

#!/bin/bash

 

BACKUP_DIR="/home/ xxxxx /backup"

DATE=$(date +%Y%m%d)        # YYYYMMDD 형식

 

mkdir -p $BACKUP_DIR        # mkdir parents (부모 폴더까지)

# tar = tape archive (압축), -c = create, -z = gzip, -f = file

tar -czf $BACKUP_DIR/backup_$DATE.tar.gz ~/Documents

 

echo "백업 완료: backup_$DATE.tar.gz"

```

 

### 예시 3: 사용자 환영 메시지

 

```bash

#!/bin/bash

 

greet() {

    echo "=================="

    echo " 안녕하세요, $1!"

    echo " 오늘은 $(date +%Y-%m-%d)"

    echo "=================="

}

 

greet " xxxxx "

```

 

---

 

##  핵심 정리

 

### 기본 구조

```bash

#!/bin/bash         # Shebang (#!)

chmod +x script.sh  # chmod = Change Mode (실행 권한)

./script.sh         # 실행

```

 

### 변수

```bash

NAME="value"        # 선언 (공백 없음!)

echo $NAME          # 사용 ($ 붙이기)

```

 

### 따옴표

```bash

"..."  → 변수 치환 (double quote, 큰따옴표)

'...'  → 그대로 (single quote, 작은따옴표)

$(...) → 명령어 실행 (command substitution)

```

 

### 조건문

```bash

if [ $AGE -ge 18 ]; then     # if = 만약, ge = greater or equal

    echo "성인"

else                          # else = 그 외

    echo "미성년"

fi                            # fi = if 종료

```

 

### 반복문

```bash

for i in {1..5}; do          # for = 반복, do = 실행

    echo $i

done                          # done = 완료

```

 

### 함수

```bash

my_func() {                  # 함수 정의

    echo "$1"                # 첫 번째 인자 ($1 = first argument)

}

my_func "Hello"              # 함수 호출

```

 

### 종료 코드

```bash

명령어 실행

echo $?  # exit status (0 = 성공, 0 아니면 실패)

```

 

---

 

##  통합 정리

 

### : 시스템 관리

- ✅ `apt` (Advanced Package Tool)로 패키지 설치/제거

- ✅ 사용자 추가, 권한 관리 (`useradd`, `usermod`, `passwd`)

- ✅ `/etc/passwd`, `/etc/shadow` 이해

- ✅ `$PATH` 환경변수 이해

- ✅ `which` (명령어 위치) vs `find` (파일 검색)

- ✅ `~/.bashrc` (bash run command)로 alias, 환경변수 설정

 

### : 자동화

- ✅ Shebang(`#!`)으로 스크립트 시작

- ✅ 변수, 따옴표 차이 이해

- ✅ 조건문(`if`), 반복문(`for`) 활용

- ✅ 함수와 인자 (`$1`, `$2`)

- ✅ 종료 코드(`$?`, exit status)로 성공/실패 판단

 

### 통합 개념

```

: 환경 만들기 (사용자, 패키지, 환경변수)

   ↓

 그 환경에서 자동화 (스크립트)

   ↓

실무에서 매일 쓰는 시스템 관리 능력!

```

 

---

 

## 📖 줄임말 사전 

 

| 줄임말 | 풀네임 | 의미 |

|-------|--------|------|

| `apt` | Advanced Package Tool | 고급 패키지 도구 |

| `sudo` | Super User DO | 최고 권한자로 실행 |

| `bash` | Bourne Again SHell | 셸의 일종 (명령어 해석기) |

| `useradd` | user add | 사용자 추가 |

| `usermod` | user modify | 사용자 수정 |

| `passwd` | password | 비밀번호 |

| `groupadd` | group add | 그룹 추가 |

| `chmod` | Change Mode | 권한 변경 |

| `chown` | Change Owner | 소유자 변경 |

| `UID` | User ID | 사용자 ID |

| `GID` | Group ID | 그룹 ID |

| `PATH` | Path | (명령어) 경로 |

| `rc` | Run Commands | 실행할 설정들 |

| `ls` | list | 목록 보기 |

| `cd` | change directory | 디렉토리 이동 |

| `pwd` | print working directory | 현재 위치 출력 |

| `cp` | copy | 복사 |

| `mv` | move | 이동/이름 변경 |

| `rm` | remove | 삭제 |

| `mkdir` | make directory | 디렉토리 생성 |

| `cat` | concatenate | 연결/출력 |

| `grep` | Global Regular Expression Print | 패턴 검색 |

| `wc` | word count | 단어/줄 수 세기 |

| `ps` | process status | 프로세스 상태 |

| `df` | disk free | 디스크 여유 공간 |

| `du` | disk usage | 디스크 사용량 |

| `tar` | tape archive | 압축/묶음 |

| `CI/CD` | Continuous Integration / Continuous Deployment | 지속적 통합/배포 |

| `KST` | Korea Standard Time | 한국 표준시 |

| `WSL` | Windows Subsystem for Linux | Windows에서 Linux 실행 환경 |

 

---