Namu | 나무 개발자 블로그입니다


[자격증] 리눅스 마스터 1급 준비하기 by namu

post image
image by 개벨로그


시험 안내

리눅스 마스터는 리눅스 기반의 Desktop 활용 및 Server 운영 능력, 리눅스 시스템의 설계 개발 및 관리 능력, 리눅스 기반의 네트워크 및 서버 구축/운영 능력을 검정하는 자격시험입니다.

그 중 1급 시험의 목적은 다음과 같습니다.

이 시험은 1차시에서 (1) 리눅스 실무의 이해(20%), (2) 리눅스 시스템 관리(40%), (3) 네트워크 및 서비스의 활용(40%) 비중의 사지선다 필기 100문항, 2차시에서 단답 및 서술식 필기 10문항, 실기(60%) 5~7문항으로 구성됩니다.

이번 글은 해당 시험을 너무 깊게 파기보다는 전체적인 이론의 맥락을 짚어보거나 몰랐던 부분을 정리하는 수준에서 작성하고자 합니다. 자격증 시험의 특성상, 이론보다는 기출문제를 통해 공부하는 것이 더 효율적이기 때문입니다.




목차

  1. 리눅스 실무의 이해
  2. 리눅스 시스템 관리
  3. 네트워크 및 서비스의 활용
  4. 기출 및 부록 정리

참조




1. 리눅스 실무의 이해

1-1. 리눅스의 개요

운영체제의 개요

운영체제컴퓨터 하드웨어와 컴퓨터 사용자 간의 매개체 역할을 하는 시스템 소프트웨어입니다.

초기 운영체제는 사용자 편의성을 고려하지 않았으나(효율적 자원 관리에 치중), 대중화가 진행되며 편리함과 친근함의 형태로 변화되었습니다. 이러한 것이 GUI 기반의 윈도우 OS 입니다.

GUI 기반 윈도우 OS 에서는 명령어 기반이 아닌 아이콘 이미지 클릭 방식을 지원합니다.

하지만 현재는 유휴 자원의 효율적 활용을 위해 가상화 기술을 OS 에서 기본적으로 내장하거나 커널 단에서 지원하고 있습니다.

또한 스마트폰이나 태블릿 전용 모바일 운영체제, 웹 브라우저 전용 OS 도 탄생되었습니다.

다음은 리눅스의 특징입니다.

스와핑(Swapping)

  • 메모리에 프로그램들이 많이 올라와 공간이 꽉 찼다고 하더라도 가상메모리를 설정하면 추가로 새로운 프로그램을 실행시킬 수 있게 됩니다. 이것은 메모리에 올라와 있지만 사용하지 않고 있는 프로그램을 하드디스크에 설정된 가상메모리 공간으로 보내고 그 빈 공간에 새로운 프로그램을 로딩하기 때문입니다. 또한 가상메모리에 있는 내용을 사용하려면 다시 메모리로 올리고, 그 대신에 메모리에 있던 다른 내용이 하드디스크에 저장됩니다. 이처럼 메모리와 하드디스크 사이의 데이터 교환을 스와핑이라고 합니다.

스왑의 확인

  • 설치 후 스왑 용량의 확인은 메모리 확인 명령어린 free 를 사용합니다. 기본 블록 단위로 출력되므로 -m 옵션을 사용하면 MB 단위로 확인합니다.
    ~$ free -m
          total   used    free    shared  buffers cached
    Mem:    1006    715     291     0       6       326
    Swap:   2047    0       2047
    

다음으로 운영체제의 종류에 대해 살펴봅시다.

현재 운영체제는 사용 환경에 따라 크게 서버, 데스크톱, 모바일 및 임베디드, 기타 분야로 분류할 수 있습니다.

특히 모바일 운영체제인 안드로이드나 iOS는 휴대폰, PDA, 스마트폰, 태블릿 뿐만아니라 스마트 TV, 가전제품, 자동차에 내장되는 IVI(In-Vehicle Infotainment)까지 영역을 확대하고 있어 임베디드 운영체제 영역과의 경계가 모호해지고 있습니다.

기타 분야에서 웹 기반 운영체제(Web-based Operation System, 이하 Web OS)로써 구글의 크롬 OS가 등장했습니다.

주요 서버 및 데스크톱 운영체제는 다음과 같습니다.

1) 유닉스(UNIX)

유닉스의 특징으로는 다중 사용자(Multi-User) 및 다중 작업(Multi-Tasking) 지원, 강력한 네트워크 지원, 뛰어난 이식성 및 확장성, 계층적 파일 구조, 가상 메모리 및 공유 라이브러리 지원 등이 있습니다.

2) 윈도(Windows)

3) Mac OS X

4) 모바일 운영체제

모바일 운영체제는 기본적으로 데스크톱용 윈도우, 맥, 리눅스와 같은 운영체제와 비슷하나 모바일 장치 및 환경적 특성에 적합하도록 설계되었습니다.

모바일 운영체제는 TV나 자동차 영역까지 확대되었습니다.

5) 리눅스 기반 모바일 운영체제

리눅스는 BSD 계열의 유닉스 수정본입니다.

6) 스마트 TV

스마트 TV 란 운영체제를 탑재하고 TV 본연의 기능인 실시간 방송 시청뿐만 아니라 인터넷 접속 기능을 기반으로 웹 검색, VOD, 게임, SNS, 앱스토어 등의 기능이 가능한 TV 를 말합니다.

스마트 TV 는 기본적으로 모바일 기기와 동일한 운영체제를 탑재합니다.

애플은 iOS, 구글은 안드로이드, 삼성전자는 바다OS 혹은 타이젠, LG 전자는 자체 넷캐스트 OS(또는 Web OS)

7) IVI(In-Vehicle Infotainment)

IVI 는 ICE(In-Car Entertainment) 라고도 하며, 자동차 내에서 다양한 편의 기능과 오락시설을 제공하는 것이 목적입니다.

8) 웹 운영체제

2000년대 초반의 웹 OS(제1세대형) 는 “인터넷 기반의 운영체제로 인터넷 접속이 가능한 곳이라면 언제 어디서나 자신의 데스크톱을 사용하는 것과 같은 환경을 제공하는 서비스”를 의미했습니다.

따라서 기존의 윈도우나 리눅스 등에서 웹 브라우저를 호출하여 인터넷 접속으로 개인 데스크톱을 활성화합니다. 이곳에 로그인 후 생성한 파일이나 애플리케이션은 유저의 하드웨어가 아닌 웹 서버에 저장됩니다.

최근의 웹 OS(제2세대형) 는 “웹 브라우저를 기반으로 동작하는 가상의 운영체제”의 개념으로 진화했습니다. 사용자는 별도 OS 설치과정 없이 경량화된 최소 크기의 커널 위에서 웹 브라우저를 통해 서비스 제공자 웹 사이트에 접속하여 다양한 서비스를 이용합니다.

최근에는 클라우드 컴퓨팅 서비스와 결합하여 더 강력해졌습니다. 대표적으로 구글의 크롬 OS가 있습니다.

리눅스 기초

리눅스의 철학은 다음과 같습니다.

자유 소프트웨어

  1. 목적에 상관없이 프로그램을 실행시킬 수 있는 자유
  2. 프로그램이 어떻게 동작하는지 학습하고, 필요에 따라서 프로그램을 개작할 수 있는 자유(실제로 소스코드 이용 가능해야 함)
  3. 무료 또는 유료로 프로그램을 재배포할 수 있는 자유
  4. 프로그램을 개선시킬 수 있는 자유와 개선된 이점을 공동체 전체가 누릴 수 있도록 발표할 수 있는 자유

주요 라이선스는 다음과 같습니다.

GPLv1

  • 1989년 1월 발표, 사람이 이해하기 쉬운 코드를 같이 배포해야 한다는 조건 추가

GPLv2

  • 1991년 6월 발표, 특허로 인해 소스코드 공개가 불가능한 경우 실행 바이너리 프로그램까지 배포할 수 없도록 보완

GPLv3

  • 2007년 6월 발표, 소프트웨어 특허 대처법, 다른 라이선스와의 호환성, 원시 코드 구성 부분, 디지털 제한 권리 관련 내용 추가

리눅스의 역사는 다음과 같습니다.

1987년 개발된 교육용 유닉스인 미닉스를 토대로 1991년 리누스 토발즈가 POSIX 에 호환되는 운영체제 커널을 만들 목적으로 리눅스 개발했습니다. 리눅스는 0.02 버전을 10월에 공식 발표한 이후로 전 세계 개발자들의 도움으로 발전했습니다.

초기 리눅스는 운영체제의 핵심인 커널(Kernel)을 지칭하였으나, GNU 프로젝트의 라이브러리와 도구들이 포함되면서 하나의 운영체제로 발전하였습니다. 이러한 운영체제를 GNU/Linux 라고 합니다.

커널

  • 시스템 부팅 시 로드되는 커널은 운영체제의 뇌에 해당
  • 주된 역할은 시스템의 하드웨어의 효율적 제어 (메모리, CPU, 디스크, 단말기, 프린터 등)
  • 활용도를 높이기 위한 스케줄링 및 실행중인 프로그램 관리, 자료관리

또한 리눅스 배포판이란, 리눅스 커널 이외의 핵심적인 부분을 GNU 정신을 바탕으로 만들어진 다양한 자유 소프트웨어와 공개 프로그램을 모아서 하나의 운영체제로 만든 것을 말합니다.

소프트웨어 패키지 의존성을 자동으로 해결해주지 않는 보수적인 슬랙웨어에 비해 데비안은 패키지 관리 면에서 사용자친화적이기 때문에 쉽게 대중화되었습니다. 레드햇 또한 독자적인 패키지 관리 툴이 존재하여 인기가 많으며, 2003년 배포된 Red Hat Linux 9 까지만 무상 배포되었고 현재 RHEL의 유료 배포판을 지원합니다. 레드햇의 무료 배포판은 현재 fedora 오픈 소스 프로젝트로 관리되며, RHEL 의 복제판인 CentOs 도 2014년 흡수되었습니다.

임베디드 시스템(Embedded System), 클라우드 컴퓨팅(Cloud Computing), 빅 데이터(Big Data), 사물인터넷(IoT) 등 리눅스가 활용되는 다양한 분야가 존재합니다.

1-2. 리눅스 시스템의 이해

리눅스와 하드웨어

리눅스 설치 시 사용 목적에 따른 적절한 리눅스 배포판과 이에 맞는 하드웨어를 선택해야 합니다. 배포판마다 지원하는 아키텍쳐가 다르기 때문에 시스템에서 사용하는 CPU 를 지원하는 리눅스를 고려해야 합니다.

RAID(Redundant Array of Independent Disks) 는 여러 개의 하드디스크가 있을 때 동일한 데이터를 다른 위치에 중복해서 저장하는 방법입니다. 운영체제에서 하나의 RAID 는 논리적으로 하나의 디스크로 인식하여 처리합니다.

LVM(Local Volume Manager) 이란, 논리적으로 유연하게 파티션을 분할 관리하는 방법입니다.

리눅스의 구조

부트 매니저(Boot Manager) 란 부팅을 도와주는 프로그램으로, 한 컴퓨터에 여러 운영체제가 설치된 경우 선택하여 부팅할 수 있도록 합니다. 부트 매니저는 부트 로더라고도 부릅니다. 이것은 하드디스크의 맨 앞쪽 영역인 MBR(Master Boot Record) 에 설치되며, MBR 은 0번 섹터에 512 바이트 크기입니다. MBR 에는 부트 매니저가 설치됨과 함께 파티션 정보가 기록됩니다.

리눅스의 대표적인 부트 매니저 프로그램은 다음과 같습니다.

디렉토리(Directory) 란 파일을 보관하는 곳으로써 리눅스에서는 최상위 root(/) 를 중심으로 트리 형식으로 하위 디렉토리 및 파일이 계층적으로 분포됩니다.

부팅(Booting) 은 하드웨어적 단계와 프로그램 메모리 적재의 소프트웨어적 단계로 나눠집니다.

init 프로세스 관련 환경 설정 파일

  • /etc/inittab: 부팅과 관련된 실행레벨(Runlevel) 정의
  • /etc/init/rcS.conf: 시스템 초기화 관련 설정. /etc/rc.d/rc.sysinit 스크립트 실행하여 호스트명 설정, 시스템 점검, RAID 및 LVM 장치 활성화, 쿼터 설정 활성화 등 진행
  • /etc/init/rc.conf: 각 레벨별 진행되는 내용 설정 파일. /etc/rc.d/rc 스크립트 실행. 이 스크립트는 런레벨 3인 경우 /etc/rc.d/rc3.d 디렉토리의 실행 데몬 스크립트 중 S 로 시작되는 것을 찾아 부팅 시 실행함
  • /etc/rc.d/rc.local: 런레벨 2, 3, 5 에서 가장 마지막에 실행되는 파일로써, 보통 사용자가 부팅 시에 필요한 서비스 구동

0~6 까지 7개의 런레벨 외에 emergency 모드라 부르는 S 또는 s 모드는 1 과 유사하나 관련 프로세스나 데몬을 최소화하여 유지 보수나 점검에 적합합니다.

시스템 종료(Shutdown) 를 위해 터미널 환경에서 shutdown, halt, reboot, poweroff, init 등의 명령이 사용됩니다.

파일 시스템(File System) 이란, 운영체제가 파티션이나 디스크에 데이터를 저장하고, 읽고, 쓰고, 찾기 위해 구성하는 일련의 체계를 의미하는데, 운영체제가 사용자에게 제공하는 가장 직접적인 서비스 형태 중 하나입니다.

파일 시스템의 구성은 운영체제 설치 시에 일어나며, 파티션 분할 작업 후 포맷(Format)을 가장 먼저 하게 되는데, 이것은 파일을 저장하기 위해 디스크를 일정한 크기로 분할하고 주소를 설정하는 작업이라고 할 수 있습니다. 각각의 운영체제들은 포맷이라는 작업을 통해 고유한 파일 시스템을 구축하게 되고, 다양한 규칙들을 설정하게 됩니다.

대부분의 운영체제들은 파일이라는 단위로 저장하고, 파일에 이름을 부여한 뒤에 디렉토리에 저장합니다. 이 과정에서 파일명의 길이를 제한하기도 하고, 어떤 문자들이 사용될 수 있는지를 정하기도 합니다. 파일명에 확장자를 쓰도록 지정하기도 하며, 확장자의 길이도 제한할 수 있습니다. 또한 파일 시스템은 지원하는 파티션의 개수, 크기, 파일 크기 등에도 직접적인 관계가 있으며, 파일 복구와 같은 기능을 부여하기도 합니다.

따라서 파일 시스템의 성능은 운영체제의 성능에도 밀접한 관계가 있다고 볼 수 있습니다.

각 파일 시스템의 특징을 교재에서 참조할 것

아이노드(Inode)

  • 일종의 자료구조로 각각의 파일은 하나의 아이노드를 할당받아 관리
  • 파일 정보 저장 (아이노드 넘버, 접근 모드, 파일 형식, 소유자 정보, 파일 크기, 타임 스탬프 등)
  • 파일 시스템 생성 시 전체의 약 1% 공간을 아이노드에 할당하므로, 생성 가능 파일의 최대 개수도 한정되어 있음

저널링 기술과 저널링 파일 시스템

  • 기존의 fsck 에 걸리는 시간을 단축하기 위해 데이터를 디스크에 쓰기 전에 로그에 남겨 비정상적 종료에도 보다 빠르고 안정적인 복구기능 제공
  • fsck 로 복구시 슈퍼 블록, 비트맵, 아이노드 등을 모두 검사하므로 많은 시간이 걸렸지만,
  • 저널링 파일 시스템은 수정 내역을 블록에 적용 전 로그에 수정된 내용을 저장하므로 복구시 단지 로그만 검사하면 됨
  • 로그 기록 중 중지되었다면 아직 실제 적용 전이므로 문제가 되지 않고, 블록에 적용 중 중지되었다면 로그만 살펴보면 되니 안정성이 높음
  • ext3, ext4, XFS, JFS, ReiserFS 등

X 윈도

(생략)

셸(Shell)

은 커널과 사용자간 다리 역할을 하는 것으로 사용자로부터 명령을 받아 그것을 해석하고 프로그램을 실행시키는 역할을 합니다.

여러 개의 셸이 있는데, 사용자가 로그인을 하면 사용자에게 설정된 셸이 부여됩니다. 따라서 사용자에게 셸을 부여하지 않으면 시스템에 로그인 하더라도 명령 수행이 불가능하여 로그인을 막는 효과와 동일하다고 볼 수 있습니다.

현재 가장 많이 사용되는 표준 셸은 ksh 과 csh 의 장점을 결합한 bash 셸입니다.

~$ grep daesungra /etc/passwd
daesungra:x:500:500::/home/daesungra:/bin/bash

셸 변수변수명=값 형태로 지정하며, $ echo $[변수명] 로 값을 확인합니다.

환경 변수는 프롬프트 변경, PATH 변경 등과 같이 셸의 환경을 정의하는 중요한 역할을 수행하는 변수입니다. 환경 변수는 env 명령으로 확인할 수 있습니다.

환경 변수의 사용 예는 다음과 같습니다.

주요 프롬프트 형식

  • \d: ‘요일 월 일’ 형태로 날짜를 표시 (ex. “Wed Jan 15”)
  • \h: 호스트 이름 표시
  • \s: 사용중인 셸의 이름 표시
  • \t: 24시 형태의 현재 시간 표시 (HH:MM:SS)
  • \T: 12시 형태의 현재 시간 표시 (HH:MM:SS)
  • \@ 12시 형태의 현재 시간에 AM/PM 을 추가로 표시
  • \u: 현재 사용자의 이름 표시
  • \w: 현재 작업 디렉토리를 절대 경로로 표시
  • \W: 현재 작업 디렉토리의 전체 경로 중 마지막 디렉토리만 표시
  • !: 현재 명령의 히스토리 넘버 표시
  • \: \ 표시 (백슬래시)

가장 빈번하게 사용되는 bash 셸의 주요 기능을 살펴봅니다.

!와 히스토리 명령문

  • !!: 마지막에 사용한 명령 실행
  • !n, !-n: n번째 사용한 명령 실행, 역으로 n번째 사용한 명령 실행
  • !문자열: 가장 최근에 사용한 명령 중 ‘문자열’로 시작하는 명령을 찾아서 실행
  • !?문자열?: 가장 최근에 사용한 명령 중 ‘문자열’을 포함하는 명령을 찾아서 실행
  • ^문자열1^문자열2: 마지막에 사용한 명령문의 ‘문자열1’ 을 ‘문자열2’로 대체한 후 실행

히스토리 관련 환경 변수

  • HISTSIZE: 히스토리 스택의 크기가 지정되어 있는 변수
  • HISTFILESIZE: 실질적인 히스토리 파일의 크기
  • HISTFILE: 히스토리 파일의 경로
  • HISTCONTROL: 중복되어지는 명령에 대한 기록 유무를 지정하는 변수
    • $ export HISTOCONTROL=ignoreboth > 연속적으로 중복된 명령은 저장하지 않음
  • HISTTIMEFORMAT: history 명령 실행 시 출력되는 시간 형식 지정할때 사용

alias 를 재로그인 혹은 시스템 재부팅 시에도 유지하려면, .bashrc 파일에 설정하면 됩니다.

리다이렉션 응용 예

  • $ find / -name '*.txt': 결과값, 에러 모두 표준 출력
  • $ find / -name '*.txt' 2>/dev/null: 에러는 버림
  • $ find / -name '*.txt' >list.txt: 결과값(1)은 파일에 저장, 에러는 화면에 출력
  • $ find / -name '*.txt' 2>/dev/null > list.txt: 결과값 파일 저장, 에러는 버림
  • $ find / -name '*.txt' 2>error.txt: 결과값 화면 출력, 에러는 파일에 저장
  • $ find / -name '*.txt' 2>error.txt > result.txt: 결과와 에러 각각 파일에 저장
  • $ find / -name '*.txt' > data.txt 2>&1: 결과값과 에러값을 모두 data.txt 파일에 저장. $ find / -name '*.txt' &> data.txt 와 같음
  • $ find / -name '*.bak' 2>>error.txt: 결과값은 화면에 출력, 에러는 파일에 추가하여 저장

tee 명령

  • 파이프 연결 출력을 두 갈래로 나눌 때 사용
  • $ tee [option] [파일]
  • -i: 인터럽트를 무시하도록 한다
  • -a: 지정된 파일로 출력을 덮어쓰지 않고, 파일 내용 뒤에 추가한다
  • ex. $ ls -l | tee list.txt | more: 파일의 목록을 list.txt 에 기록함과 동시에 more 를 사용하여 화면에도 출력
  • ex. $ ls -l /etc | tee etc.txt | tee /tmp/etc.txt | more: /etc 하위 목록을 etc.txt 와 /tmp/etc.txt 에 저장하고 화면에소 한 페이지씩 출력
  • ex. $ ls -l /etc | tee etc.txt | tee /dev/pts/0 | more: /dev/pts/0 터미널은 해당 사용자가 권한이 있어야 하고 /dev/ 는 생략 가능하나, 콘솔 창인 /dev/tty2 등은 버전에 따라 생략하면 안될 수도 있음

bash 셸 관련 파일 및 디렉토리는 해당 설정 파일을 사용하는 사용자의 배시 셸에서 지속적으로 적용됩니다. 일시적인 환경 변수나 alias 는 로그아웃 시 사라집니다.

셸에서 사용하는 특수문자(메타문자, Meta Character) 는 다음과 같습니다.

대망의 셸 프로그래밍(Shell Programming) 입니다.
셸 프로그래밍이란 셸에서 사용되는 여러 명령어들을 모아 하나의 파일로 만드는 과정을 말하며, 그 결과 만들어지는 파일 또는 프로그램을 셸 스크립트(Shell Script) 라고 합니다.

셸은 조건문, 반복문, 변수, 함수 등 기본적인 언어적 특성을 가지고 있어 프로그래밍이 가능합니다.

셸 스크립트 실행 시..

  1. 해당 스크립트 파일의 절대 혹은 상대 경로를 포함하지 않으면 PATH 변수에서 찾으므로, ‘./’ 혹은 절대경로가 아닌 자유롭게 사용하고자 한다면 파일이 위치한 경로를 PATH 에 등록해 두어야 합니다.
  2. 실행 권한을 부여하지 않고 실행하려면,
    • 앞부분에 sh 명령 붙이기
    • 앞부분에 source 명령 붙이기
    • 앞부분에 . 붙이기 (source 와 동일)

프로세스

이번 파트에서는 프로세스에 대해 살펴보고, 프로세스 시그널, 데몬런레벨 별 데몬 실행에 대해 정리합니다.

리눅스가 부팅을 시작하면 커널이 init 이란 최초의 프로세스를 발생시키고 PID 1번을 할당받습니다. 이후 시스템 운영에 필요한 데몬을 비롯한 다른 프로세스들은 자식 프로세스 fork 방식으로 생성됩니다.

pstree 명령으로 확인해 보면 부모-자식 구조로 나타납니다.

보통 명령어는 fork 형태로 수행됩니다. 사용자가 로그인하면 bash 프로세스가 할당되고, 명령어를 내리면 fork 형태로 수행됩니다.

반면 명령어 앞에 exec 를 붙이면 기본 프로세스가 교체되면서 새 프로세스가 할당됩니다.

포그라운드 프로세스와 백그라운드 프로세스 간 전환하기

  • CTRL + z 로 메모리에 적재된 포그라운드 프로세스를 대기(suspend)시킨 후,
  • bg 명령을 입력하여 백그라운드 프로세스로 전환!
  • jobs 명령으로 현재 상태 확인 가능 (Stopped, Running, …)
  • 이와 유사한 방식으로 백그라운드를 포그라운드로 전환하기 위해서는, 먼저 jobs 로 작업 번호를 확인하고, fg %작업번호 명령을 입력!
  • jobs 확인시 ‘+’ 표시가 붙어있는 프로세스가 주로 처리되는 프로세스, 보통은 마지막에 실행한 프로세스인데, 작업번호 없이 fg 명령을 입력하면 이 작업이 포그라운드로 전환됨
  • ’-‘ 가 붙은 작업은 ‘+’ 다음 우선순위 작업임

데몬(Daemon) 이란 주기적이고 지속적인 서비스 요청을 처리하기 위한 프로세스로, 백그라운드로 실행됩니다. 리눅스에서는 보통 서버 역할을 하는 프로그램들이 이에 해당합니다. (이름 뒤에 ‘d’ 를 붙임. httpd, systemd 등등)

이러한 데몬 프로세스를 실행하는 방법에는 standalone 방식과 inet 방식이 있습니다.

데몬 프로세스는 System V 계열에서 사용하는 각 실행 레벨(런레벨)에 따른 제어 방식을 사용합니다. 부팅 관련 정보는 /etc/rc.d 디렉토리에 모아두고, 관련 데몬들은 /etc/rc.d/init.d 디렉토리와 rc0.d ~ rc6.d 디렉토리를 이용하여 데몬의 실행을 조절합니다.

데몬 실행 관련 명령어: service

  • /etc/rc.d/init.d 디렉토리에 존재하는 스크립트를 쉽게 시작/중지시키는 명령
  • 프로그램의 절대 경로 대신 간단히 서비스명과 인자값을 지정해서 실행 가능
  • ex. # service sendmail start

경로 단축을 위한 심볼릭 링크 설정

  • /etc/rc.d 디렉토리 하위의 부팅 관련 프로그램에 /etc 바로 하위로 심볼릭 링크를 지정
  • 따라서 절대 경로 입력시 중간의 rc.d 디렉토리명 생략 가능
  • ex. # /etc/init.d/https start

데몬 관련 유틸리티는 다음과 같습니다.

  1. ntsysv
    • 부팅 중 자동으로 실행되는 서비스를 설정하는 유틸리티
    • 텍스트 환경에서 커서로 이동하여 스페이스로 선택
    • 명령행에서 ntsysv 실행시 현 런레벨 설정 가능
    • 혹은 setup 커맨드 후 나타나는 메뉴 항목에서 ‘System services’ 를 선택하는 방식으로도 가능
    • # ntsysv [option]
      • –level 실행레벨: 특정 실행레벨을 편집
  2. chkconfig
    • cli 명령형 프로그램으로 런레벨에 따른 서비스의 on/off 설정 리스트를 출력하거나 설정함
    • # chkconfig [option] [service]
      • –list: 각 런레벨에서의 서비스 설정 상태 목록
      • –add [service]: 서비스 추가
      • –del [service]: 서비스 삭제
      • –level [level] [service] [on/off/reset]: 해당 런레벨에서 서비스 상태를 설정
    • ex.
      • # chkconfig --list: 레벨별 목록 출력
      • # chkconfig named: named 서비스의 상태 체크
      • # chkconfig --level 35 named on: 3, 5 런레벨에서 named 서비스 on
      • # chkconfig --level 5 --del adsl: 5 런레벨에서 adsl 서비스 삭제
      • # chkconfig sendmail off: sendmail 서비스를 부팅 시 시작하지 않도록 함. 런레벨 지정이 없으므로, 2, 3, 4, 5 레벨에서 적용됨
      • # chkconfig telnet on: telnet 서비스를 on. telnet 은 xinetd 기반으로 동작하기 때문에 /etc/xinetd.d/telnet 파일 항목의 disable 값을 no 로 설정함
      • # chkconfig --list telnet: xinetd 기반 서비스는 레벨을 보여주지 않고 사용 가능 여부만 확인할 수 있음. 따라서 런레벨별 telnet 실행 여부는 # chkconfig --list xinetd 로 확인해야 함

1-3. 네트워크의 이해

네트워크의 기초

이번 파트에서는 OSI 7 계층을 살펴보고, 네트워크 장비의 종류이더넷/LAN 통신망, TCP/IP 프로토콜에 대해 정리합니다.

먼저 OSI 7 계층을 살펴봅니다.

  1. 물리 계층(Physical Layer): 허브(Hub)나 리피터(Repeater)
    • 실제 장치 간 연결을 위한 케이블 및 연결장치
    • 그러한 기계적인 항목과 전압, 신호 방식 등의 전기적인 항목에 대한 특성 규정
    • 역할: 상위 계층에서 전송된 데이터를 물리적인 전송 매체를 통해 비트(bit) 형태로 전송. 통신 채널을 통해 전송되는 사용자 장치의 디지털 데이터를 이에 상응하는 신호로 변환하는 역할
  2. 데이터링크 계층(Data Link Layer): 브릿지(Bridge)나 스위치(Switch)
    • 상위 계층인 네트워크 계층에서 받은 데이터를 프레임(Frame) 이라는 논리적 단위로 구성
    • 제어에 필요한 여러 정보를 덧붙여 물리 계층으로 전달
    • 역할(제어)
      • MAC 주소 포함
      • 전송 제어: 데이터의 정확한 송수신을 위한 규정이나 통신회선 접속의 확인 등
      • 오류 제어: 물리 계층에서 발생할 수 있는 오류를 검출 및 복구
      • 순서 제어: 전송 단위의 순서 제어
      • 에러 제어 기능
      • 흐름 제어: 송신측과 수신측의 처리 속도 차이로 인한 데이터 손실을 막기 위해 데이터량 조절
  3. 네트워크 계층(Network Layer): 라우터(Router)
    • 데이터를 패킷(Packet) 단위로 분할하여 전송
    • 데이터 전송과 경로 선택에 관한 서비스 제공
    • 데이터링크 계층이 인접한 두 시스템 간의 전송을 담당한다면, 네트워크 계층은 패킷을 최종 수신측까지 정확하게 전송하도록 경로를 담당
    • 인접한 두 시스템 외에 목적지까지 여러 노드가 존재하기 때문에 올바른 경로 설정이 중요
    • 역할
      • 라우팅, 혼잡 제어(Congestion Control, 트래픽 제어), 패킷의 분할(Segmentation), 병합(Desegmentation, Reassembly), 인터네트워킹(Internetworking) 등
  4. 전송 계층(Transport Layer)
    • 데이터 전송에 관한 서비스를 제공하는 계층
    • 송수신측 간 실제적인 연결 설정 및 유지, 오류 복구와 흐름 제어 > 투명하고 신뢰성 있는 통신 가능
    • 네트워크에서 패킷을 담당한다면, 전송 계층에서는 전체 메시지의 전송을 책임짐
    • 데이터 교환 주체는 호스트가 아닌 실행 프로세스, 송수신 프로세스 간의 연결(Connection)기능 제공
    • 안전한 데이터 전송을 지원
  5. 세션 계층(Session Layer)
    • 응용 프로그램 간의 통신을 관리하기 위한 방법과 동기화를 유지하는 서비스 제공
    • 응용 프로그램 간의 접속설정 및 유지, 종료에 관한 세션 관리, 데이터의 전송순서 및 동기점의 위치 제공
    • 데이터 전송 중 오류가 발생할 경우 재전송하거나 데이터를 복구
  6. 표현 계층(Presentation Layer)
    • 전송하는 데이터의 표현 방식에 관한 서비스 제공
    • 예를 들어, EBCDIC 로 인코딩된 문서 파일은 ASCII 로 인코딩된 파일로 바꿔주는 역할 수행
    • 데이터의 암호화 및 해독, 압축, 압축 해제 등을 수행
  7. 응용 계층(Application Layer)
    • 응용 프로그램과 연계하여 사용자에게 편리한 환경을 제공
    • 일반적인 서비스들이 응용 계층에 속함 > SMTP, HTTP, FTP, TELNET 등

OSI 모델의 전송단위 및 역할, 프로토콜

  • 응용 계층
    • 전송 단위: data
    • 역할: 사용자에게 직접 제공하는 서비스 및 응용 프로그램 간의 정보 교환
    • 프로토콜: HTTP, SMTP, POP3, IMAP, DNS, NFS, FTP, TELNET, SSH 등
  • 표현 계층
    • 전송 단위: data
    • 역할: 송수신할 정보의 표현에 차이가 있는 응용 프로그램들에게 연결 제공
    • 프로토콜: SMB, AFP, ASN.1 등
  • 세션 계층
    • 전송 단위: data
    • 역할: 응용 프로그램 간의 통신을 관리하기 위한 방법과 동기화를 유지하는 서비스 제공
    • 프로토콜: SSL, TLS, NetBIOS 등
  • 전송 계층
    • 전송 단위: segments
    • 역할: 정보의 신뢰성 있고 투명한 데이터 전송에 관한 서비스 제공
    • 프로토콜: TCP, UDP, RTP 등
  • 네트워크 계층
    • 전송 단위: packets
    • 역할: 정보의 전송을 위한 경로 선택
    • 프로토콜: IP, ICMP, ARP, RARP, IGMP, BGP, RIP, IPX 등
  • 데이터링크 계층
    • 전송 단위: frames
    • 역할: 물리적인 링크를 통하여 신뢰성 있는 정보의 전송을 위한 통신로 설정
    • 프로토콜: 이더넷(Ethernet), 토큰 링(Token Ring), FDDI, ATM 등
  • 물리 계층
    • 전송 단위: bits
    • 역할: 전송 매체를 통해 전송
    • 프로토콜: RS-232, 10BASE-T, 100BASE-TX, DSL 등

네트워크 장비를 살펴봅니다.

게이트웨이(Gateway)

  • 서로 다른 통신망과 프로토콜을 사용하는 네트워크 간에 통신 기능을 가능하게 해주는 장치(리피터, 브리지, 라우터 등)

Ethernet/LAN 의 기본 이해입니다. 통신망의 종류는 규모에 따라 분류됩니다.

이더넷 매체 종류와 배선 방식

  • [전송속도][Baseband][케이블]
  • 10BASE-2: 10Mbps 전송속도의 동축 케이블, 100M 전송 거리
  • 10BASE-5: 10Mbps 전송속도의 동축 케이블, 500M 전송 거리
  • 10BASE-T: 10Mbps 전송속도의 절연된 Twisted 케이블
  • 100BASE-TX: 100Mbps 전송속도의 UTP-5 또는 STP
  • 100BASE-FX: 100Mbps 전송속도의 광케이블
  • 1000BASE-T: 1000Mbps 전송속도의 UTP-5
  • 1000BASE-SX: 단파장의 광섬유 사용, 220~550M 까지 전송
  • 1000BASE-LX: 장파장의 광섬유 사용, 다중모드시 550M, 단일 모드시 5KM

패킷(Packet): 전달하고자 하는 정보를 일정 크기로 분할하고 각각에 송수신 주소를 비롯한 관련 정보를 추가하여 만든 데이터 블록

  • 데이터그램 방식(Datagram)
    • 비연결형 서비스를 지원. 패킷들이 독립적으로 전송되며 연결을 설정하기 위한 과정이 없음
    • 경로를 미리 할당하지 않으므로 목적지 도착 순서를 예측할 수 없음
    • 전송 정보의 양이 적거나, 상대적으로 신뢰성이 중요하지 않은 환경에서 사용
  • 가상 회선 방식(Virtual Circuit)
    • 연결형 서비스를 지원. 송수신 호스트 사이의 가상 단일 파이프를 통해 패킷을 주고받음
    • 패킷이 도착하는 순서는 전송한 순서와 같음
    • 회선 교환 방식을 이용하나 데이터 단위가 패킷이라는 차이가 존재함

TCP/IP 프로토콜에 대해 살펴봅니다.

프로토콜(Protocol)

  • 컴퓨터 간 통신을 위해 미리 정해놓은 특별한 규칙, 통신 규약 (대표적으로 TCP/IP)
  • 규약에서는 접속이나 전달 방식, 주고받을 자료의 형식, 오류 검출 방식, 코드 변환 방식, 전송속도 등을 정함

전송 계층 프로토콜

  • TCP(Transmission Control Protocol)
    • 연결지향 전송 프로토콜. 세그먼트가 수신자에게 제대로 전달되었는지 응답(Ack)을 주고받음으로써 점검
    • 즉, IP 에 의해 전달되는 패킷의 오류를 검사하고 재전송을 요구하는 등 보다 정교한 제어를 담당
    • 두 지점의 네트워크 상 최단 경로를 찾아 1:1로 직접 연결하므로 전송과 오류 수정의 신뢰도가 높음 > 대용량 데이터 전송에 이용됨
    • 다만 상대적으로 많은 전송 시간이 필요함
  • UDP(User Datagram Protocol)
    • 비연결 전송 프로토콜로 세그먼트를 보내기만 하고 응답(Ack)을 주고받지 않음
    • 따라서 제대로 전달되었는지 확인하지 않으며 오류 수정도 없음
    • 속도가 빠르고 직접 연결에 따른 네트워크 부하를 줄일 수 있음
    • 시스템 내부 메시지 및 데이터 전달, 소규모 데이터 전송, DNS 에 이용됨

인터넷 계층 프로토콜

  • IP(Internet Protocol)
    • OSI 의 네트워크 계층에서 호스트의 주소 지정과 패킷 분할 및 조립 기능 담당
    • 데이터 세그먼트를 패킷으로 만들어 전송하는 역할 수행
    • 비신뢰성, 비연결형
  • ICMP(Internet Control Message Protocol)
    • 메시지에 대한 오류 보고와 이에 대한 피드백을 원래 호스트에 보고하는 역할 수행
    • ICMP 제어 메시지는 IP 패킷의 형태로 전달되고, ping 명령이 사용하는 프로토콜
  • ARP(Address Resolution Protocol)
    • IP 프로토콜은 MAC 주소와 논리적인 할당에 의한 IP 주소를 가짐
    • 실제의 데이터 전달은 하드웨어 주소를 알아야 함
    • 동적으로 특정 프로토콜에 의해서 필요할 때마다 목적지 호스트의 하드웨어 주소를 찾는 역할 수행

포트 번호와 주요 프로토콜

  • 20번: FTP 전송
  • 21번: FTP 제어
  • 22번: SSH(Secure Shell)
  • 23번: TELNET
  • 25번: SMTP(Simple Mail Transfer Protocol)
  • 53번: DNS(Domain Name System)
  • 80번: WWW(World Wide Web) 프로토콜인 HTTP
  • 110번: POP3(Post Office Protocol 3)
  • 143번: IMAP(Internet Mail Access Protocol)
  • 161번: SNMP(Simple Network Management Protocol)
  • 443번: HTTPS(HTTP protocol over TLS/SSL)

클래스별 IP 주소 범위와 호스트 개수

  • A 클래스: 0.0.0.0 ~ 127.255.255.255 / 128개 네트워크, 각 16,777,216개 호스트
  • B 클래스: 128.0.0.0 ~ 191.255.255.255 / 16,384개 네트워크, 각 65,536개 호스트
  • C 클래스: 192.0.0.0 ~ 223.255.255.255 / 2,097,152개 네트워크, 각 256개 호스트
  • D 클래스: 224.0.0.0 ~ 239.255.255.255
  • E 클래스: 240.0.0.0 ~ 255.255.255.255

특수 목적 IP 주소

  • A~C 클래스 중에서 인터넷 연결을 위한 일반 목적이 아닌 특수 목적으로 사용되는 주소가 있음
  • 루프백 IP 주소(Loopback IP Address): 자기 자신을 가리킴. A 클래스의 127 대역(127.0.0.0 ~ 127.255.255.255) 사용
  • 사설 IP 주소(Private IP Address): 내부 네트워크 구축용. 퍼블릭이 아니기 때문에 각 호스트마다 중복으로 존재 가능
    • A 클래스: 10.0.0.0 ~ 10.255.255.255 로, A 클래스 영역 10 의 1개 네트워크 대역 할당
    • B 클래스: 172.16.0.0 ~ 172.31.255.255 로, B 클래스 영역 172.16 ~ 172.31 의 16개 네트워크 대역 할당
    • C 클래스: 192.168.0.0 ~ 192.168.255.255 로, C 클래스 영역 192.168.0 ~ 192.168.255 의 총 256개 네트워크 대역 할당

주요 최상위 도메인

  • com: 영리 목적의 기업이나 회사
  • net: 네트워크와 관련된 기관
  • org: 비영리 목적 기관이나 단체
  • edu: 학위를 수여하는 교육기관
  • gov: 미국 연방정부기관
  • mil: 미국 연방군사기관
  • int: 유엔 등과 같은 국제기관

IPv6(Internet Protocol version 6)

  • IPv4 주소 고갈 문제를 해결하기 위해 제안된 차세대 인터넷 프로토콜
  • 주소 범위는 128bit 이고, 주소 표현은 16bit 단위로 하여 8개 영역으로 나타내며 각 자리는 콜론(:)으로 구분함. 숫자는 16진수로 표현
  • 특징
    • IP 주소의 확장: 거의 무한에 가까운 주소 제공
    • 패킷 크기의 확장: 기존 64KB 로 제한된 패킷에서 IPv6 의 점보그램 옵션을 사용하면 특정 호스트 사이의 임의의 큰 패킷 구성 가능
    • 호스트 주소 자동설정: IPv6 네트워크에 접속하는 순간 자동적으로 네트워크 주소를 할당받음
    • 헤더 구조 단순화: 불필요 필드가 제외되거나 확장 헤더로 변경되어 과도한 오류 제어와 같은 오버헤드를 줄여 전송 효율 증대
    • 흐름 제어기능 지원: 흐름 제어 지원 가능한 필드인 Flow Label 을 도입, 특정 트래픽은 실시간 통신 등 특별 처리하여 품질 높은 서비스 제공
    • 인증 및 보안 기능: 패킷 출처 인증, 데이터 무결성 및 비밀 보장 기능을 IPv6 확장 헤더를 통해 적용 가능
    • 이동성: IPv6 호스트는 네트워크의 물리적 위치에 제한받지 않고 같은 주소를 유지하면서 자유롭게 이동 가능
  • IPv4 와 비교
    • 32bit vs 128bit > 약 42억 9천만 개 vs 약 340간 2823구 … 6337경 4607조 …

네트워크 설정

리눅스에서의 네트워크 환경 설정을 위해 네트워크 하드웨어를 설치해야 하고, 다음으로 네트워크 프로토콜, 네트워크 서비스 프로그램 순으로 설치 해야 합니다.

네트워크 하드웨어: 이더넷 카드, 모뎀, ISDN, AX.25, ATM 등 (+ Xen, KVM, VirtualBox, docker 등 가상화 기술도 지원)

  • lo: 로컬 루프백. 127.0.0.1 주소가 설정되고 자체적인 PING 테스트 등 네트워크 디버깅에 사용
  • ethx: 이더넷 카드 인터페이스 장치(eth0, eth1 등)

인터넷 접속 위해서 IP 주소 관련설정이 필요합니다.

넷마스크와 서브넷마스크

  • A, B, C 클래스의 네트워크를 나누는 8bit, 16bit, 24bit 짜리 마스크를 넷마스크라 함
  • 이보다 잘게 쪼개지는 마스크를 서브넷마스크라 함
  • 하지만 오늘날 CIDR 표기법을 사용하면서 사실상 구분이 무의미하게 됨
  • 예를 들어, 255.255.255.0 의 C 클래스 넷마스크를 가진 네트워크의 192.168.1.1 호스트의 주소는 192.168.1.1/24 로 표현 가능하고, 절반으로 쪼개진 255.255.255.128 서브넷의 동일 호스트 주소는 192.168.1.1/25 로써 표현되어 사실상 넷마스크와 서브넷마스크 간의 구분이 의미가 없게됨 (그냥 CIDR 로 쓰면됨)
  • 이러한 서브넷마스크 개념은 서브네팅(Subnetting)에 사용됨

서브네팅(Subnetting): C 클래스 기준으로 설명

  • 네트워크를 보다 잘게 쪼개는 것을 서브네팅이라고 함
  • C 클래스의 네트워크는 총 256개의 호스트를 가지며, 이를 두 개의 네트워크로 서브네팅하면 각각 128개의 호스트를 가지는 서브넷으로 나뉨

다음으로 리눅스 환경에서 네트워크 인터페이스 설정 방법을 알아보겠습니다.

리눅스에서 사용되는 네트워크 관련 명령어입니다.

traceroute 동작 원리

  • 출발지에서는 순차적으로 TTL=1, TTL=2, TTL=3, … TTL=n 인 ICMP echo request 를 보내고, TTL=0 이 되는 노드의 네트워크 장비가 ICMP time exceed 를 발생시키고 되돌려보내 n번째 장비까지의 delay 를 알아내는 방식으로 동작
  • 종종 중간 단계 장비에서 timeout 현상(*로 표기)이 나타나는 경우가 있는데, 이는 ICMP time exceed 를 생성하여 되돌려보내지 않도록 설계되거나 설정된 경우일 수 있음. 또는 ICMP 프로토콜 자체를 차단하기도 함

정적 라우팅 파일 등록

  • **# vim /etc/sysconfig/network-scripts/route-eth0
  • 10.10.12.0/24 via 192.168.5.1 dev eth0

마지막으로 네트워크 관련 파일을 살펴보겠습니다.

1-4. 기출 예상문제 오답노트



2. 리눅스 시스템 관리

2-1. 일반 운영 관리

사용자 관리

리눅스에서 root 계정은 자동으로 존재하는 Super User 로써 최고관리자 역할을 합니다.

먼저 사용자(User) 개요에 대해 살펴보겠습니다.

일반 사용자를 수퍼유저로 전환

  • 리눅스에서 UID 와 GID 가 0이 되면 계정에 관계없이 수퍼유저가 됨
  • 이러한 방식은 적절한 권한할당 방식이 아니므로, 특정 계정에 sudo 권한을 임시로 부여하는 방식으로 활용함

다음으로 사용자 계정 관리에 대해 살펴봅니다.

adduser

  • useradd 명령은 아주 기본적인 계정 생성 정보만 제공하므로 세세한 옵션 지정에 유용힘
  • adduser 명령은 지정한 계정명에 해당하는 홈 디렉토리를 옵션지정 없이 자동으로 생성하여 간편하게 일반 계정 생성이 가능함
  • adduser 명령은 대화형으로 암호, FULLNAME 등 부가적인 정보를 입력받아 계정을 생성하며, 이에 적용되는 기본 정보는 /etc/adduser.conf 에 기록되어 있음

다음으로 사용자 관련 파일을 살펴보겠습니다.

리눅스에서 대부분의 시스템 정보는 텍스트 파일에 저장해서 관리됩니다. 따라서 사용자 계정관련 모든 정보도 텍스트 파일로 관리됩니다.

useradd 명령으로 사용자 생성 시 사용자 기본 정보는 /etc/default/useradd 파일에서 차용하여 /etc/passwd, /etc/group, /etc/shadow 등의 파일에 기록되고, 기본 홈 디렉토리 생성 정보는 /etc/skel 디렉토리에서 기본적으로 차용하여 보통 /home/[계정명] 방식으로 생성됩니다.

pwconv, pwunconv

  • 패스워드를 /etc/shadow 가 아닌 /etc/passwd 에서 직접 관리하려면 pwconv 입력, 다시 되돌리려면 pwunconv 입력
  • 효율성과 보안성 면에서 /etc/shadow 활용이 좋음

pwch

  • Password Check 의 약자로 /etc/passwd/etc/shadow 파일을 점검
  • 각 사용자의 필드 개수 검사, 아이디 중복유무 검사, 유효한 사용자 여부 검사, 유효한 UID 및 GID 여부 검사, 사용자의 Primary 그룹 존재유무 검사, 홈 디렉토리 존재유무 검사, 로그인 셸 검사 등 수행

이번에는 생성된 사용자 계정을 관리하거나 삭제하는 방식에 대해 살펴봅니다.

아이디 변경 시 고려할 점

  • -l 로 계정명이 바뀌며 홈 디렉토리도 변경되어야 하므로 미리 생성해두어야 하고,
  • -d, -m 옵션을 함께 사용해 지정해줘야 함

사용자 계정 삭제시 고려할 점

  • userdel 명령만 실행시 /etc/passwd, /etc/shadow 등록정보만 삭제됨
  • 사용자 홈 디렉토리, 메일관련 파일들이 함께 제거하기 위해 -r 옵션을 명령에 포함시켜야 함
  • 홈 디렉토리 삭제: # rm -rf /home/rdsuser
  • 메일관련 삭제: # rm -rf /var/spool/mail/rdsuser

다음은 사용자 패스워드 관리방법입니다.

패스워드 관리 툴 비교

  last may must warn expire disable
chage -d -m -M -W -I -E
passwd   -n -x -w -i  
usermod         -f -e

그룹 계정 관리에 대해 살펴보겠습니다.

서버 운영체제인 리눅스 시스템에는 다수의 사용자가 접속할 수 있는데, 특정 그룹의 사용자 간 파일 공유가 필요한 상황이 있을 수 있습니다. 이를 위해 그룹(Group) 으로 사용자들을 묶어 특정 파일 및 디렉토리에 대한 허가권(Permission) 설정을 할 수 있습니다. 리눅스에서 모든 사용자는 하나 이상의 그룹에 속하도록 되어 있습니다.

레드햇 계열 리눅스에서는 사용자간의 불필요한 공유를 막기 위해 사용자의 아이디와 동일한 그룹을 생성해서 단독으로 그룹에 포함되도록 설정되어 있으며, 그룹 변경을 위해서는 usermod 명령을 활용해야 합니다.

관련 명령어

  • grpconv, grpunconv: 후자의 명령을 사용하면 패스워드를 /etc/group 에서 관리하게 됨. 전자를 사용하면 다시 /etc/gshadow 에서 관리함
  • grpck: /etc/group/etc/gshadow 파일을 점검. 하는 일은 필드 개수 검사, 그룹 중복유무 검사, 유효한 그룹여부 검사, 유효한 GID여부 검사, 그룹 멤버와 관리자 검사 등

사용자 계정 관리와 연관된 추가적인 명령어들을 살펴보겠습니다.

파일 시스템 관리

먼저 소유권(Ownership)허가권(Permission)에 대해서 살펴봅니다.

리눅스는 다중 사용자 시스템이기 때문에 파일과 디렉토리에 대해 소유권 및 권한에 따라 접근 제어를 할 필요가 있습니다. 허가권은 소유권을 가진 사용자가 설정하고, 소유권은 사용자 소유권과 그룹 소유권이 있습니다. 허가권은 읽기(4, r), 쓰기(w, 2), 실행(x, 1)의 권한이 있으며, 사용자(User), 그룹(Group), 다른 사용자(Other)로 나누어 각각설정이 가능합니다. 허가권 10자리에서 맨 앞자리는 파일 혹은 디렉토리의 타입을 나타냅니다.

‘ls -l’ 을 이용한 파일타입 확인

  • -: 일반 타입
  • d: 디렉토리
  • l: 링크 파일
  • b: 블록 디바이스(디스크 드라이버)
  • c: 캐릭터 디바이스(입출력 관련 특수파일)
  • p: named pipe(FIFO)
  • s: 소켓

권한 설명

  • r: 파일 혹은 디렉토리의 내용을 볼 수 있는 권한
  • w: 파일 수정 혹은 디렉토리 내 파일 생성 및 삭제할 수 있는 권한
  • x: 실행 파일을 실행 혹은 디렉토리 내부로 접근할 수 있는 권한

특수 권한에 대해서 살펴봅니다.

이러한 특수 권한은 보안상의 위험을 초래할 수 있으므로 정확한 이해와 제한된 적용이 필요합니다.

관련 명령어들을 살펴보겠습니다.

다음으로 파일 링크에 대해 살펴봅니다.

하드 링크란?

  • 동일한 I-node 파일을 다른 이름으로 여러개 생성하여 관리. 파일에만 사용 가능
  • Stick-Bit 가 설정되지 않은 공유 디렉토리에 있는 파일의 하드링크를 사용자 디렉토리 내에 생성하여, 다른 사용자에 의해 공유 디렉토리 내 파일이 삭제되어도 복제본을 보존할 수 있도록 하기 위해 사용됨
  • 특징
    • I-node 번호가 동일
    • 원본과 링크파일의 내용과 크기가 동일함
    • 하드링크 생성 시 ‘ls -l’ 명령 결과 파일의 링크 카운트가 올라가는 것을 볼 수 있음
    • 어느 파일의 내용을 수정해도 동일하게 반영됨
    • 원본이 삭제되어도 링크파일은 영향을 받지 않음
    • 하드링크는 파일에만 설정 가능하며, 동일한 파일시스템에서만 사용 가능
    • 파티션이나 디스크 드라이브를 가로질러 사용할 수 없음

심볼릭 링크란?

  • 하나의 파일을 여러 이름으로 가리키게 하는 링크로 원본과 링크는 서로 다른 파일로 취급됨
  • 일반적으로 디렉토리 경로 단축을 위해 사용됨 (=바로가기)
  • 특징
    • I-node 변호가 다름
    • 원본을 가리키기만 하므로 링크파일의 크기가 매우 작음
    • ‘ls -l’ 결과 파일정보의 맨 앞의 타입을 나타내는 부분에 ‘l’ 표시
    • 원본이나 링크 중 어느 파일을 수정해도 같이 반영됨
    • 원본이 삭제되면 링크는 아무 구실을 못함
    • 윈도우의 바로가기나 단축 아이콘과 같은기능
    • 777 허가권으로 생성되나, 원본의 허가권과는 무관함

다음으로 파일 시스템 관리 및 복구방법에 대해 살펴보겠습니다.

다음은 관련 명령어를 살펴보겠습니다.

fdisk 명령으로 디스크의 파티션 분할 작업을 진행했다면, 분할된 파티션에 적절한 파일 시스템을 생성해야 합니다.

파일 시스템 생성 명령

  • 최근 리눅스 배포판에서는 명령어 사용법을 간소화하여 mkfs.extn 방식으로 곧바로 사용
  • ex. # mkfs.ext4 /dev/sdb1

다음으로 파일 시스템 관련 파일을 살펴보겠습니다.

UUID(Universally Unique Identifier)

  • 범용 고유 식별자로써 여러 개체들이 존재하는 환경에서 식별하기 위해서 사용되는 고유한 이름을 통칭
  • 최근 리눅스에서는 새 파티션을 생성하면 고유한 UUID 를 부여하고, 이 정보는 blkid 커맨드로 확인함 ```shell script [rdsuser@www ~]$ blkid /dev/sda1: UUID=”71c8104b-3f5d…f18e” TYPE=”ext4” /dev/sda2: UUID=”4073e4da-5444…ced0” TYPE=”swap”

[rdsuser@www ~]$ ```

[퀵스타트] 새 디스크 추가 후 /data 사용하기

  1. # fdisk -l: 장치 확인
  2. # fdisk /dev/sdb: 파티션 분할 및 생성
    • n(new partition)
    • p(primary)
    • 1(partition number)
    • [엔터치면 전체할당, 혹은 할당량 지정]
    • w(저장 후 종료) or q(저장하지 않고 종료)
  3. # mkfs.ext4 /dev/sdb1: 파일 시스템 생성
  4. # mount -t ext4 /dev/sdb1 /data: 디렉토리에 마운트
  5. /etc/fstab 에 등록
    • /dev/sdb1 /data ext4 defaults 0 0

다음으로 파일 시스템 점검 관련 명령어를 살펴봅니다.

다음으로 스왑(Swap)에 대해 살펴봅니다.

스왑(Swap) 이란 하드디스크의 일부를 마치 메모리처럼 사용하는 기술로, 일반적으로 리눅스 설치 시 설정합니다. 설치 후에도 디스크나 파티션 여유공간이 있다면 추가 설정할 수 있습니다.

스왑 관련 명령들을 살펴보겠습니다.

할당된 buff/cache 영역을 모두 반환한 경우는?

  • 프로그램 구동을 위해 필요한 메모리를 확보하기 위해 buff/cache 영역을 모두 반환한 경우, swap 영역을 할당함
  • 이는 성능 저하를 야기하며, 이것마저 부족하게 된다면 OOM(Out of Memory) Killer 에 의해 프로세스들이 강제 종료됨

메모리의 비정상적인 사용 모니터링 방법

  • free 명령으로 자세한 메모리 사용현황을 알 수 없으므로 /proc/meminfo 파일의 상세 내용을 참조하여야 함 (필요시 더 찾아볼 것)

다음으로 스왑 영역 만들기를 진행해 보겠습니다.

다음으로 디스크 쿼터에 대해 살펴보겠습니다.

다음은 디스크 쿼터 관련 명령어입니다.

[퀵스타트] 사용자 쿼터 설정하기

  1. /etc/fstab 설정
    • 파일의 4번째 필드에 사용자쿼터 옵션인 usrquota 추가 기입(콤마로 구분)
    • 만약 /home 파티션이 분리되어 있다면 그곳에, 아니라면 / 영역에 설정
  2. /home 영역 다시 마운트
    • # mount -o remount /home
  3. 쿼터파일 생성 및 쿼터 체크
    • # quotacheck -mf /home
  4. 사용자에 대한 쿼터 설정
    • # edquota rdsuser
  5. 쿼터 시작
    • # quotaon /home
  6. 쿼터 설정 확인
    • # repquota /home

[퀵스타트] 그룹 쿼터 설정하기

  1. /etc/fstab 설정
    • 파일의 4번째 필드에 그룹쿼터 옵션인 grpquota 추가 기입(콤마로 구분)
    • 만약 /home 파티션이 분리되어 있다면 그곳에, 아니라면 / 영역에 설정
  2. /home 영역 다시 마운트
    • # mount -o remount /home
  3. 쿼터파일 생성 및 쿼터 체크
    • # quotacheck -gm /home
  4. 그룹에 대한 쿼터 설정
    • # edquota -g terran
  5. 쿼터 시작
    • # quotaon /home
  6. 쿼터 설정 확인
    • # repquota -g /home

프로세스 관리

소프트웨어 설치 및 관리

2-2. 장치 관리

장치의 설치 및 관리

주변장치 관리

2-3. 시스템 및 보안 관리

시스템 분석

시스템 보안 및 관리

시스템 백업

2-4. 기출 예상문제 오답노트



3. 네트워크 및 서비스의 활용



4. 기출 및 부록 정리