#01. 시스템 시작
1. 부팅(Bootstrap)
- 컴퓨터의 전원을 누른 직후부터 운영체제가 메모리에서 동작하기 시작할 때 까지의 과정.
2. 로그인(Login)
- 사용자가 컴퓨터 시스템이나 통신망에 대한 접근 허가 증명을 얻기 위해 위해 자신의 사용자명과 패스워드를 입력하고 컴퓨터 시스템에 접근하는 작업
- 리눅스는 여러 사용자가 동시에 사용할 수 있기 때문에 로그인 과정을 거처야만 시스템을 사용할 수 있음
- Logon, Sign-in, Sign-on 등도 같은 의미로 사용됨
1) 로그인 구분
구분 | 설명 |
---|
로컬로그인 | 시스템이 운영중인 컴퓨터를 물리적으로 직접 조작하여 로그인 한 상태 |
원격로그인 | 시스템에 원격으로 접속하여 로그인한 상태 (SSH등을 사용) |
수업 환경에서는 가상머신상에서 직접 로그인하는 것이 로컬로그인에 해당한다.
2) 시스템에 로그인 하기
- 가상머신을 부팅하고 로컬로그인을 수행하면 로그인을 수행하면 시스템의 상태에 대한 간략한 정보가 표시됨 (아래 이미지에 표시된 1~5번 참조)
번호 | 설명 |
---|
1 | 아이디와 비밀번호 입력 |
2 | 우분투 메뉴얼, 기술지원 등을 확인할 수 있는 URL |
3 | 스토리지 및 메모리 사용량, 실행중인 프로세스 수, 로그인 중인 사용자 수, 아이피 주소 등의 정보 |
4 | 업데이트 가능한 패키지 수 |
5 | 관리자로서 명령어(command)를 사용하기 위해서는 sudo 명령을 사용하라는 안내문 |
sudo 명령은 별도의 단원에서 설명합니다.
3) 리눅스 시스템에 원격으로 로그인하기
- 리눅스에 원격으로 로그인하기 위해서는 리눅스 상에서 SSH 서비스가 설치되어 있어야 함
- 운영체제 설치 과정에서 SSH도 함께 설치됨
명령 프롬프트(윈도우)나 터미널(맥)을 실행하고 아래의 명령어 입력
이후 실습은 로컬, 원격 로그인을 구분하지 않습니다.
3. 사용자 계정
1) 일반사용자
- 리눅스 설치 과정에서 생성한 사용자 아이디
- 필요에 따라 추가적으로 생성 가능
- 회사의 업무 시스템이 네트워크 기반일 경우 직원 1명당 하나의 계정을 갖게 됨
- 단순히 웹 서비스의 운영만을 목적으로 할 경우 하나의 서비스를 리눅스 사용자 한 명으로 보고 하나의 서버 안에서 여러 개의 서비스를 운영함
2) 슈퍼유저
- 리눅스에 내장되어 있는 관리자 계정으로 아이디가 root로 고정되어 있음
- root를 이용하여 로그인을 하면 리눅스 시스템의 설정 등 모든 작업을 수행할 수 있기 때문에 대부분의 시스템에서는 로컬 로그인만 허용하고 SSH 등의 원격 로그인은 허용하지 않도록 설정함
#02. 시스템 종료
1. 로그아웃(Logout)
- 사용 중인 네트워크에서 업무를 끝내고 호스트 컴퓨터와의 연결을 단절하고 나오는 작업
로그아웃 명령어
2. 셧다운
- 시스템을 종료하는 것.
- 슈퍼유저인 root 사용자의 고유 권한으로 셧다운 명령은 root 사용자만 사용할 수 있음
1) 셧다운 관련 명령어
- 일반 사용자는 셧다운 명령을 사용할 수 없고 오직 root만 가능함.
- 명령어 앞에
sudo
명령을 추가하면 일반 사용자가 root의 권한을 빌려서 해당 명령을 수행함
명령 | 설명 |
---|
shutdown | 1 분 후 시스템을 종료하도록 예약 |
shutdown 3 | 3 분 후 시스템을 종료하도록 예약(숫자는 변경 가능함) |
shutdown -c | 시스템 종료 예약을 취소함 |
shutdown -r | 시스템을 1 분 후 재부팅하도록 예약 |
shutdown -r 3 | 시스템을 3 분 후 재부팅하도록 예약 |
shutdown now | 지금 즉시 종료 |
shutdown -r now | 지금 즉시 재부팅 |
재부팅을 위해서는 reboot
명령을 사용할 수 도 있다.
3) 다른 사용자가 접속해 있는 경우
- 셧다운 명령을 내리면 현재 접속중인 사용자들에게 시스템이 몇분 내로 종료될 것이라는 메시지가 전송됨
#03. 리눅스 사용 환경
1. 콘솔
2. 터미널 (Command Line Interface)
- 리눅스의 명령어를 사용할 수 있는 명령 프롬프트 창
3. X-Window (Graphic User Interface)
- 리눅스에서의 바탕화면.
- 디스플레이 장치에 창을 표시하며 마우스와 키보드 등의 입력 장치의 상호작용 등을 관리해 GUI 환경을 구현한다.
- 리눅스에서는 X-Window도 하나의 응용 프로그램이기 때문에 다양한 버전의 X-window를 사용자가 원하는 형태로 설치할 수 있음
- Gnome, Kde 등
- 대부분 개인 사용자를 위한 데스크탑용 운영체제에서 사용하고 서버용 운영체제에서는 잘 사용하지 않음.
4. 쉘(Shell)
- 사용자로부터 명령을 입력받아 실행시켜주는 명령어 해석기
- 터미널에 의해서 실행된다.
- 종류에는 bash, ksh, csh, sh이 있다.
- 대부분의 리눅스는 bash shell을 기본으로 제공한다.
- 최근에는 여러가지 편의기능이 탑제된 zsh shell을 많이 사용하는 추세이다.
자신이 사용중인 SHELL 확인하기
명령어 자동완성 기능
- 파일, 폴더명을 입력할 때 일부만 입력한 상태에서
Tab
키를 누른다.
이전 명령어 탐색 기능
- 방향키 위,아래를 사용하여 이전에 입력했던 명령어들을 재입력할 수 있다.
history 기능
history
명령을 사용하면 최근에 사용한 명령어 목록과 일련번호가 표시된다. 이 상태에서 !일련번호
를 사용하여 이전 명령어를 재사용할 수 있다.
#04. 고급 시스템 관리
1. 부팅 과정 상세 분석
부팅 단계별 과정
- BIOS/UEFI 단계: 하드웨어 초기화 및 부트로더 찾기
- GRUB 단계: 커널 로드 및 초기 옵션 설정
- 커널 초기화: 하드웨어 드라이버 로드 및 시스템 초기화
- systemd 시작: 시스템 서비스 관리자 실행
- 사용자 로그인: 로그인 매니저 실행
부팅 시간 분석
1
2
3
4
5
6
7
8
9
10
11
| # 전체 부팅 시간 확인
$ systemd-analyze
# 서비스별 부팅 시간 확인
$ systemd-analyze blame
# 부팅 과정 시각화
$ systemd-analyze plot > boot-analysis.svg
# 중요한 서비스 체인 확인
$ systemd-analyze critical-chain
|
GRUB 부트로더 설정
1
2
3
4
5
6
7
8
9
10
11
12
13
| # GRUB 설정 파일 편집
$ sudo vi /etc/default/grub
# 주요 설정 옵션
GRUB_DEFAULT=0 # 기본 부팅 항목
GRUB_TIMEOUT=10 # 부팅 메뉴 대기 시간
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" # 커널 매개변수
# GRUB 설정 적용
$ sudo update-grub
# GRUB 재설치 (MBR 복구 시)
$ sudo grub-install /dev/sda
|
2. 사용자 계정 고급 관리
사용자 계정 생성 및 관리
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| # 새 사용자 생성
$ sudo adduser newuser
# 사용자 정보 수정
$ sudo usermod -c "Full Name" -s /bin/zsh newuser
# 사용자 그룹 추가
$ sudo usermod -a -G sudo,docker newuser
# 사용자 계정 잠금/해제
$ sudo usermod -L newuser # 잠금
$ sudo usermod -U newuser # 해제
# 사용자 삭제
$ sudo deluser --remove-home newuser
|
그룹 관리
1
2
3
4
5
6
7
8
9
10
11
12
| # 그룹 생성
$ sudo groupadd developers
# 그룹에 사용자 추가
$ sudo gpasswd -a username developers
# 그룹에서 사용자 제거
$ sudo gpasswd -d username developers
# 사용자의 그룹 확인
$ groups username
$ id username
|
비밀번호 정책 설정
1
2
3
4
5
6
7
8
| # 비밀번호 만료 정책 설정
$ sudo chage -M 90 -m 7 -W 7 username
# 계정 정보 확인
$ sudo chage -l username
# 비밀번호 복잡성 설정
$ sudo vi /etc/pam.d/common-password
|
3. 고급 셧다운 및 재부팅 관리
systemd를 이용한 전원 관리
1
2
3
4
5
6
7
8
9
10
11
12
13
| # 시스템 상태 확인
$ systemctl status
# 다양한 전원 명령
$ sudo systemctl poweroff # 완전 종료
$ sudo systemctl reboot # 재부팅
$ sudo systemctl suspend # 절전 모드
$ sudo systemctl hibernate # 최대 절전 모드
$ sudo systemctl hybrid-sleep # 하이브리드 절전
# 특정 시간에 종료 예약
$ sudo shutdown -h 22:30 "System maintenance"
$ sudo shutdown -r +60 "System will reboot in 1 hour"
|
응급 상황 대응
1
2
3
4
5
6
7
8
| # 강제 종료 (모든 프로세스 즉시 종료)
$ sudo systemctl --force poweroff
# 커널 패닉 시 자동 재부팅 설정
$ echo 'kernel.panic = 10' | sudo tee -a /etc/sysctl.conf
# SysRq 키 활성화 (키보드로 응급 명령 실행)
$ echo 'kernel.sysrq = 1' | sudo tee -a /etc/sysctl.conf
|
4. 시스템 로그 및 모니터링
systemd 저널 관리
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| # 실시간 로그 확인
$ sudo journalctl -f
# 부팅 로그 확인
$ sudo journalctl -b
# 특정 서비스 로그 확인
$ sudo journalctl -u ssh.service
# 시간 범위로 로그 필터링
$ sudo journalctl --since "2024-01-01" --until "2024-01-02"
# 로그 우선순위별 필터링
$ sudo journalctl -p err
# 저널 크기 관리
$ sudo journalctl --disk-usage
$ sudo journalctl --vacuum-size=100M
$ sudo journalctl --vacuum-time=7d
|
시스템 리소스 모니터링
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| # 실시간 시스템 모니터링
$ top
$ htop
$ iotop
# 메모리 사용량 확인
$ free -h
$ cat /proc/meminfo
# 디스크 사용량 확인
$ df -h
$ du -sh /*
# 프로세스 트리 확인
$ pstree
$ ps aux --forest
# 네트워크 연결 상태
$ ss -tuln
$ netstat -tuln
|
5. 보안 관리
SSH 보안 강화
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| # SSH 설정 파일 편집
$ sudo vi /etc/ssh/sshd_config
# 권장 보안 설정
Port 2222 # 기본 포트 변경
PermitRootLogin no # root 로그인 차단
PasswordAuthentication no # 패스워드 인증 비활성화
PubkeyAuthentication yes # 공개키 인증 활성화
MaxAuthTries 3 # 최대 인증 시도 횟수
ClientAliveInterval 300 # 연결 유지 시간
ClientAliveCountMax 2 # 무응답 허용 횟수
# SSH 서비스 재시작
$ sudo systemctl restart ssh
|
방화벽 설정
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| # UFW 방화벽 활성화
$ sudo ufw enable
# 기본 정책 설정
$ sudo ufw default deny incoming
$ sudo ufw default allow outgoing
# 특정 포트 허용
$ sudo ufw allow 2222/tcp # SSH
$ sudo ufw allow 80/tcp # HTTP
$ sudo ufw allow 443/tcp # HTTPS
# IP 범위 제한
$ sudo ufw allow from 192.168.1.0/24 to any port 2222
# 방화벽 상태 확인
$ sudo ufw status verbose
|
시스템 보안 감사
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| # 로그인 시도 기록 확인
$ sudo last
$ sudo lastb
# 현재 로그인된 사용자 확인
$ who
$ w
# 의심스러운 프로세스 확인
$ ps aux | grep -v "^\[.*\]$"
# 열린 포트 확인
$ sudo netstat -tuln
$ sudo ss -tuln
# 파일 시스템 무결성 검사
$ sudo aide --check
|
6. 성능 최적화
시스템 튜닝
1
2
3
4
5
6
7
8
9
10
11
12
13
| # 스왑 사용률 조정
$ echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf
# 파일 핸들 제한 증가
$ echo '* soft nofile 65535' | sudo tee -a /etc/security/limits.conf
$ echo '* hard nofile 65535' | sudo tee -a /etc/security/limits.conf
# 커널 매개변수 최적화
$ echo 'net.core.rmem_max = 16777216' | sudo tee -a /etc/sysctl.conf
$ echo 'net.core.wmem_max = 16777216' | sudo tee -a /etc/sysctl.conf
# 설정 적용
$ sudo sysctl -p
|
서비스 최적화
1
2
3
4
5
6
7
8
9
| # 불필요한 서비스 비활성화
$ sudo systemctl list-unit-files --type=service | grep enabled
$ sudo systemctl disable bluetooth
$ sudo systemctl disable cups
# 부팅 시간 단축을 위한 병렬 시작 설정
$ sudo vi /etc/systemd/system.conf
# DefaultTimeoutStartSec=10s
# DefaultTimeoutStopSec=10s
|
7. 백업 및 복구
시스템 백업 스크립트
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
| #!/bin/bash
# /usr/local/bin/system-backup.sh
BACKUP_DIR="/backup"
DATE=$(date +%Y%m%d_%H%M%S)
HOSTNAME=$(hostname)
# 백업 디렉토리 생성
mkdir -p ${BACKUP_DIR}/${DATE}
# 중요 설정 파일 백업
cp -r /etc ${BACKUP_DIR}/${DATE}/
cp -r /home ${BACKUP_DIR}/${DATE}/
cp -r /var/log ${BACKUP_DIR}/${DATE}/
# 패키지 목록 백업
dpkg --get-selections > ${BACKUP_DIR}/${DATE}/package-list.txt
apt-mark showmanual > ${BACKUP_DIR}/${DATE}/manual-packages.txt
# 서비스 상태 백업
systemctl list-unit-files > ${BACKUP_DIR}/${DATE}/services.txt
# 압축
tar -czf ${BACKUP_DIR}/system-backup-${HOSTNAME}-${DATE}.tar.gz -C ${BACKUP_DIR} ${DATE}
# 정리
rm -rf ${BACKUP_DIR}/${DATE}
echo "Backup completed: system-backup-${HOSTNAME}-${DATE}.tar.gz"
|
복구 절차
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| # 1. 부팅 가능한 USB/CD로 부팅
# 2. 루트 파티션 마운트
mount /dev/sda1 /mnt
# 3. 백업에서 설정 복구
tar -xzf system-backup-hostname-date.tar.gz
cp -r backup-date/etc/* /mnt/etc/
# 4. chroot 환경 진입
sudo chroot /mnt
# 5. GRUB 재설치
grub-install /dev/sda
update-grub
# 6. 시스템 재부팅
exit
umount /mnt
reboot
|
이제 Ubuntu 시스템 시작과 종료에 대한 포괄적인 가이드가 완성되었습니다. 기본적인 시스템 관리부터 고급 보안 설정, 성능 최적화, 백업/복구까지 실무에서 필요한 모든 내용을 포함했습니다.