// CHAPTER 02

Linux
Ubuntu 명령어 · 시스템 관리

Ubuntu 기반 리눅스의 기본 명령어부터 파일 권한, 사용자 관리,
프로세스, 셸 스크립트까지 실무에서 자주 쓰는 핵심 내용을 정리합니다.

// KEY CONCEPTS

핵심 개념 한눈에 보기

리눅스 운영에서 꼭 알아야 할 핵심 영역입니다.

COMMAND

기본 명령어

파일 탐색, 디렉토리 이동, 내용 확인 등 터미널에서 가장 자주 쓰는 명령어 모음입니다.

PERMISSION

파일 권한

rwx 권한 체계와 chmod, chown으로 파일·디렉토리의 접근을 제어합니다.

USER

사용자 / 그룹

root 슈퍼유저와 일반 사용자, 그룹 개념을 이해하고 계정을 생성·관리합니다.

PROCESS

프로세스

실행 중인 프로그램의 상태를 확인하고, 필요 시 종료하는 방법을 다룹니다.

SHELL

셸 스크립트

반복 작업을 자동화하는 bash 스크립트의 변수, 조건문, 반복문을 다룹니다.

PACKAGE

apt 패키지 관리

Ubuntu의 패키지 관리자 apt로 소프트웨어를 설치, 업데이트, 삭제합니다.

// BASIC COMMANDS

기본 명령어

터미널을 처음 열었을 때부터 자주 사용하는 필수 명령어들입니다.

명령어주요 옵션설명
ls-a  -l  -al현재 디렉토리 파일 목록 표시. -a 숨김 포함, -l 상세 정보
cd [경로]..  ~  /디렉토리 이동. 단독 입력 시 홈 디렉토리로 이동
pwd현재 작업 중인 경로 출력
mkdir [이름]-p디렉토리 생성. -p 중간 경로까지 한 번에 생성
rm [파일]-r  -f파일 삭제. -r 디렉토리 포함 재귀 삭제, -f 강제 삭제
cp [원본] [대상]-r파일 또는 디렉토리 복사
mv [원본] [대상]파일 이동 또는 이름 변경
touch [파일]빈 파일 생성. 파일이 있으면 수정 시간만 갱신
find [경로]-name  -size조건에 맞는 파일 검색. 예) find / -name "*.log"
history이전에 입력한 명령어 목록 표시
clear터미널 화면 초기화
sudo [명령어]관리자 권한으로 명령 실행
systemctlstart/stop/restart/status서비스(데몬) 제어 및 상태 확인

📌 경로 표기법

./ 현재 디렉토리  ·  ../ 상위 디렉토리  ·  ~/ 홈 디렉토리  ·  / 루트 디렉토리
프롬프트에서 $는 일반 사용자, #는 root(슈퍼유저)를 의미합니다.

// FILE I/O

파일 입출력 · 리다이렉션 · 파이프

명령어의 입력과 출력을 파일이나 다른 명령어로 연결하는 방법입니다.

파일 내용 보기

cat 파일 전체를 한번에 출력  ·  head / tail 앞 또는 뒤 10줄 출력  ·  more 페이지 단위 출력(스페이스: 다음 페이지)  ·  less more의 확장판(이전 페이지로 되돌아가기 가능)

리다이렉션 입출력 방향 전환

> 명령 결과를 파일로 저장 (기존 내용 덮어씀)
>> 명령 결과를 파일에 추가 (기존 내용 유지)
< 파일 내용을 명령어의 입력으로 전달

파이프 |

앞 명령어의 출력 결과를 뒷 명령어의 입력으로 바로 연결합니다.
예) ps -ef | grep nginx → 실행 중인 프로세스 중 nginx만 필터링
자주 쓰는 필터 명령어: grep(패턴 검색) · sort(정렬) · wc(줄·단어 수) · awk(열 처리) · tail -f(실시간 로그 확인)

# 파일에 결과 저장
ls -al > filelist.txt
echo "추가 내용" >> filelist.txt
 
# 파이프로 필터링
cat /var/log/syslog | grep "error" | tail -20

// EDITOR

vi(vim) 에디터 단축키

서버 환경에서 가장 많이 쓰는 터미널 편집기입니다. 명령 모드입력 모드를 구분하는 것이 핵심입니다. 간단한 편집은 nano 편집기가 더 편리합니다.

// 모드 전환
  • i현재 커서 위치부터 입력
  • Shift+I현재 줄 맨 앞부터 입력
  • a커서 다음 칸부터 입력
  • Shift+A현재 줄 맨 끝부터 입력
  • ESC명령 모드로 돌아가기
// 커서 이동
  • h왼쪽 이동 (←)
  • l오른쪽 이동 (→)
  • j아래 이동 (↓)
  • k위 이동 (↑)
// 편집
  • x커서 위치 문자 삭제 (Del)
  • Shift+X앞 문자 삭제 (Backspace)
  • dd현재 줄 삭제
  • yy현재 줄 복사
  • p붙여넣기 (커서 다음 줄)
// 저장 · 종료
  • :w저장
  • :q종료
  • :wq저장 후 종료
  • :q!저장 없이 강제 종료
// nano 편집기
  • Ctrl+S저장
  • Ctrl+X나가기

// PERMISSION

파일 권한 (chmod · chown)

리눅스의 모든 파일과 디렉토리는 소유자(User), 그룹(Group), 나머지(Other) 세 단위로 읽기·쓰기·실행 권한을 가집니다.

User (소유자)
Group (그룹)
Other (나머지)
-type
r4
w2
x1
r4
w2
-0
r4
-0
-0
-rwxrw-r-- = 764
4
r  읽기

파일 내용 읽기 허용

2
w  쓰기

파일 내용 수정 허용

1
x  실행

파일 실행 허용

0
-  없음

해당 권한 없음

# chmod: 파일 권한 변경
chmod 755 script.sh   # rwxr-xr-x (소유자 모두, 나머지 읽기·실행)
chmod 644 index.html  # rw-r--r-- (소유자 읽기·쓰기, 나머지 읽기)
chmod +x script.sh   # 실행 권한만 추가
 
# chown: 파일 소유자 변경
chown ubuntu:ubuntu file.txt
chown -R ubuntu:ubuntu ./mydir/  # -R 하위 전체 적용

파일 종류 표시 ls -l 첫 글자

- 일반 파일  ·  d 디렉토리  ·  l 심볼릭 링크

// USER · GROUP

사용자 · 그룹 관리

리눅스는 다중 사용자 시스템입니다. root는 모든 작업이 가능한 슈퍼유저이며, 모든 사용자는 하나 이상의 그룹에 반드시 소속됩니다.

주요 설정 파일

/etc/passwd  → 사용자 계정 정보 (이름:암호:UID:GID:설명:홈디렉토리:기본셸)
/etc/shadow  → 사용자 암호 (암호화 저장)
/etc/group   → 그룹 정보 (그룹명:암호:GID:보조그룹 사용자)

# 사용자 생성 (adduser: 대화형 / useradd: 옵션 기반)
adduser newuser
useradd -m -s /bin/bash newuser  # -m: 홈디렉토리 생성 (필수)
 
# 비밀번호 설정
passwd newuser
 
# 그룹에 사용자 추가 (sudo 권한 부여 예시)
usermod -aG sudo newuser
 
# 사용자 삭제 (-r: 홈디렉토리 함께 삭제)
userdel -r newuser
 
# 다른 계정으로 전환 / root 전환
su - username
sudo su -                    # root로 전환

// PACKAGE · ARCHIVE

apt 패키지 관리 · 파일 압축

# apt: 패키지 관리 (항상 update 먼저)
sudo apt update                           # 패키지 목록 갱신
sudo apt install -y nginx              # 설치 (-y: 확인 자동 승인)
sudo apt remove nginx                   # 삭제 (설정 파일 유지)
sudo apt purge nginx                    # 삭제 + 설정 파일까지 제거
# tar.gz 압축 / 해제 (가장 많이 사용)
tar -cvzf archive.tar.gz ./mydir/   # 압축
tar -xvzf archive.tar.gz           # 현재 위치에 해제
tar -xvzf archive.tar.gz -C ./dest/  # 지정 경로에 해제
 
# zip / unzip
zip output.zip file1 file2
unzip output.zip

tar 옵션 요약

c 생성(create)  ·  x 해제(extract)  ·  v 진행 내용 출력(verbose)  ·  z gzip 압축  ·  f 파일 이름 지정

// PROCESS

프로세스 관리

프로세스는 하드디스크에 저장된 실행 코드가 메모리에 올라와 실행 중인 상태입니다. 모든 프로세스는 고유한 PID를 가지며, 부모-자식 관계로 구성됩니다.

# 프로세스 확인
ps -ef | grep nginx        # nginx 프로세스만 검색
pstree                      # 부모-자식 관계를 트리로 표시
 
# 프로세스 종료
kill -9 [PID]              # 강제 종료

⚠️ 프로세스 종료 시 주의

부모 프로세스를 강제로 종료하면 자식 프로세스도 함께 종료됩니다. 프로세스를 무분별하게 종료하면 좀비 프로세스가 생성될 수 있으니 주의하세요. 서비스는 가능하면 systemctl stop [서비스명]으로 정상 종료하는 것이 안전합니다.

// SHELL SCRIPT

셸 스크립트 기초

반복 작업을 자동화하는 bash 스크립트입니다. 항상 첫 줄에 #!/bin/bash를 선언합니다.

// 변수 · 입출력
#!/bin/bash
 
# 변수 대입 시 = 좌우 공백 없어야 함
name="CloudAI"
echo "Hello, $name"
 
# 사용자 입력 받기
read input_val
echo "입력값: $input_val"
 
# 파라미터 변수
# $0: 스크립트명, $1 $2: 인자
echo "첫 번째 인자: $1"
// 조건문 · 반복문
#!/bin/bash
 
# if 조건문 ([ ] 안 공백 필수)
if [ $1 -gt 10 ]; then
  echo "10 초과"
else
  echo "10 이하"
fi
 
# for 반복문
for i in {1..5}; do
  echo "$i 번째"
done
비교 연산자의미예시
-eq같으면 참[ $a -eq $b ]
-ne같지 않으면 참[ $a -ne $b ]
-gt왼쪽이 크면 참[ $a -gt 10 ]
-lt왼쪽이 작으면 참[ $a -lt 10 ]
-ge크거나 같으면 참[ $a -ge 5 ]
-le작거나 같으면 참[ $a -le 5 ]
=문자열 같으면 참[ "$str" = "yes" ]
!=문자열 다르면 참[ "$str" != "no" ]
# 스크립트 실행 방법
sh script.sh                    # sh로 직접 실행
chmod +x script.sh            # 실행 권한 부여
./script.sh                     # 권한 부여 후 직접 실행
 
# 종료 코드: 0 = 정상, 1 = 비정상
exit 0
← 메인 페이지로 돌아가기