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


[방통대] UNIX 시스템 정리 by namu

unix root image
image by proofpoint.com

목차

  1. 리눅스 소개
  2. 리눅스 설치
  3. 셸 사용하기
  4. 파일과 디렉토리
  5. 리눅스 시작과 종료
  6. 사용자 관리



1. 리눅스 소개

1.1 유닉스와 리눅스

UNIX 의 특징은 다음과 같습니다.

리눅스는 UNIX 의 무료 공개 버전이며, 초기 리눅스는 PC용 운영체제로 개발되었습니다. PC용 운영체제라 하면 서버용 컴퓨터가 아닌 미니 컴퓨터 혹은 개인용(Personal) 컴퓨터를 떠올리면 됩니다.

UNIX 발전사

리눅스의 등장 (1)

GPL 은 대표적인 공개 오픈소스 라이선스입니다. 사실상 리눅스 커널을 리누스 토발즈가 만들게 됨으로써 GNU 프로젝트의 유용한 기능 및 GPL 라이선스가 이식되게 됩니다.

리눅스의 등장 (2)

커널은 하드웨어를 제어하고 응용 프로그램과의 상호작용을 제공하는 운영체제의 핵심입니다.




1.2 리눅스 개요

리눅스의 발전상

이러한 리눅스 관련 정보는 linuxcounter.net 에서 확인해볼 수 있습니다.

리눅스의 특징 (1)

리눅스의 특징 (2)

개발자 혹은 시스템 관리자에게 있어서 CLI 인 셸 커맨드를 활용한다는 것은 높은 생산성 및 효율성을 의미합니다.




1.3 오픈소스와 라이선스

오픈소스

오픈소스의 반대 개념은 proprietary(closed) 소프트웨어 라고 합니다. 폐쇄 소프트웨어 혹은 독점 소프트웨어라고도 부릅니다.

소프트웨어 라이선스

https://opensource.org/licenses

오픈소스의 장점

GNU 프로젝트와 자유 소프트웨어 운동

리눅스의 라이선스

GNU GPL

다양한 오픈소스 소프트웨어 라이선스




1.4 리눅스 배포판

리눅스 배포판의 역사

리눅스 배포판은 리눅스 커널 외에 시스템 유틸리티, 응용프로그램, 설치 프로그램을 포함한 완전한 운영체제입니다.

주요 리눅스 배포판의 종류

Debian 리눅스

데비안 프로젝트란, 자유 운영체제를 만들어가는 사람들의 독자적인 모임을 뜻하며, Ian Murdock 에 의해 1994년 비영리 조직으로 설립되었습니다.

이 프로젝트는 GNU 정신에 가장 충실한 배포판입니다.(GNU 의 공식적인 후원)

Red Hat 리눅스

레드햇은 배포판 가운데 가장 널리 알려진 리눅스입니다.

무료 버전인 Redhat Linux 는 2003년 버전 9을 끝으로 지원이 중단되었습니다. 반면 Redhat Enterprise Linux(RHEL) 는 상용 버전으로 Redhat 사에서 지원하고 있습니다.(최신 버전 7)

레드햇 계열은 무료 버전이 지원 종료된 대신 Fedora 라는 오픈소스 프로젝트를 지원합니다.

CentOS 리눅스

CentOS 리눅스는 Red Hat 리눅스로부터 파생되었습니다. RHEL 기반의 무료 버전이라고 할 수 있습니다.

따라서 엔터프라이즈 규모의 기능들을 지원하기 때문에 서버용 운영체제로 많이 사용됩니다.

다만 무료용이기 때문에 레드햇사의 공식적인 지원을 받을 수는 없고, CentOS 커뮤니티를 통해 정보를 공유합니다.

SuSE 리눅스

Slackware 리눅스

Ubuntu 리눅스

우분투 리눅스는 데비안 파생계열로써 현재 가장 대중적인 OS 입니다.



2. 리눅스 설치

본 강에서는 CentOS 를 사용합니다. 대중적인 버전으로는 데비안 계열의 Ubuntu 가 있습니다.

2.1 리눅스 실습 환경의 준비

적절한 버전의 iso 이미지 파일을 준비합니다.

설치 시에는 하드디스크의 비어 있는 파티션에 설치하거나(기존 운영체제에서 사용하지 않는 리눅스용 파티션, 멀티 부팅), 가상머신 소프트웨어를 이용하여 설치합니다.

가상머신 소프트웨어로는 VMware(혹은 virtual box)를 활용해 적절한 용량의 가상머신을 생성하고 그곳에 설치합니다.




2.2 저장 장치 이름과 표준 디렉토리

파티션

파티션이란 하드디스크를 논리적으로 나눈 구역을 의미합니다. 따라서 각 파티션에 독립적인 파일 시스템을 만들 수 있습니다.

윈도우의 경우 각 파티션은 드라이브로 명명됩니다.(C:\, D:)

반면에 리눅스는 오직 한 개의 루트 디렉토리(/)만을 가지게 되며, 각 파티션은 루트 파일 시스템의 특정 디렉토리에 부착됩니다.(ex. /home)

물리적 저장 장치 혹은 논리적으로 분할된 파티션을 사용하려면 /dev/sdb1 > '/home' 과 같이 해당 장치의 이름을 파일 시스템의 특정 디렉토리에 마운트시켜야 한다는 의미입니다.

리눅스에서 하드디스크나 주변 장치는 파일로 취급됩니다.

장치 이름

하드디스크 장치나 파티션의 이름에 대한 설명입니다.

리눅스 표준 디렉토리 1

리눅스 표준 디렉토리 2

리눅스 표준 디렉토리 3




2.3 리눅스 설치하기

강의 혹은 별도의 가이드를 참조하여 설치해 보세요!



3. 셸 사용하기

3.1 셸 개요

셸(shell)

GUI 로는 하기 힘든 다양한 기능을 수행할 수 있습니다.

셸 스크립트는 텍스트 파일이며 프로그래밍을 통한 셸 명령의 조합입니다. 반복 작업을 작성 가능하며, 셸이 이 파일을 읽어 처리합니다.

셸은 사용자로부터 명령을 받아 내부의 커널, 파일시스템, 프로세스 스케줄러, 디바이스 드라이버 및 메모리를 관리합니다.

셸 사용하기

셸은 명령 프롬프트와 명령 행을 제공하며, 터미널 창은 여러 개 띄울 수 있습니다.

셸의 종류

bash 셸

많은 셸 스크립트 문법이 Bourne 셸에 기반을 둡니다.

셸 션택하기

chsh 명령으로 기본 셸을 변경할 수 있습니다.

또한 로그인 셸과 비로그인 셸을 구별해야 합니다.

로그인 셸이란 초기 리눅스 터미널에 진입하면서 아이디와 비밀번호 입력으로 통해 제공되는 명령행을 의미합니다. 만약 GUI 환경에서 터미널 창을 실행하면 이는 대화형 비로그인 셸을 의미합니다.

따라서 logout 명령은 로그인 셸에서만 가능하며, ctrl+alt+F2~F6 키로 가상 콘솔을 사용할 수 있습니다. 이 다섯 개의 가상 콘솔은 GUI 를 제공하지는 않고 커맨드를 사용해 다룰 수 있습니다.




3.2 셸 명령

기본 명령의 형식은 다음과 같습니다(명령어, 옵션, 인수)

이때 옵션과 인수는 여럿일 수 있으며 선택적일수도 있고 필수적일 수도 있습니다. 또한 명령어는 프로그램의 이름이며 가장 간단하게는 명령어만으로 명령을 내릴 수 있습니다.

예를 들어 chsh 명령은 기본 셸을 바꾸는 프로그램으로, 명령어로 사용 가능합니다.

옵션과 인수 1

옵션을 지정할 때 짧은 옵션(-) 혹은 긴 옵션(–) 기호를 사용합니다.(긴 옵션에서는 완전한 단어) 또한 인수는 명령의 수행 대상을 지정하는 것이 일반적이며, 옵션 자체도 인수를 가질 수 있습니다.

명령어의 종류

환경변수인 PATH 에 설정된 경로 중에 실행 파일이 존재하면 이름만으로 실행이 가능합니다. (echo $PATH 로 확인) 만약 설정되어 있지 않다면 절대 경로를 사용해야 합니다.

alias, type

alias 명령은 단축 명령을 만듭니다.

alias, alias la='ls -A', alias rm='rm -l' 과 같이 별칭 지정 가능하며, 이러한 설정들을 계속 유지하려면 셸의 환경 설정 파일에 기록해두어야 합니다.

한편 type 명령은 명령이 어떻게 해석되는지 알려 줍니다.

type cd, type -a ls 등과 같이 사용합니다.

which, man

which 명령은 실행 프로그램을 환경변수 PATH 를 기초로 검색해 경로를 출력합니다.(whereis 명령어 와 유사)

man 명령은 지정된 명령의 사용법이나 설정 파일 등에 관한 온라인 도움말을 제공하는 매뉴얼 페이지를 보여줍니다. man passwd 혹은 man 5 passwd 와 같이 사용되며, 명령어의 간단한 도움말을 보려면 명령 –help 사용합니다.




3.3 명령 히스토리

history 명령은 최근 수행 커맨드의 목록을 최대 1000개까지 보여줍니다.

만약 history 10 이라고 입력한다면 최근 10개의 수행했던 명령 행을 불러옵니다.

히스토리 기능을 이용해 명령을 실행하는 방법은 다음과 같습니다.

또한 명령 행 완성 기능도 존재합니다. 이것은 명령의 일부만 입력하고 나머지를 자동으로 완성하는 기능입니다.




3.4 명령의 연결과 확장

특수 문자

셸에서 특별한 의미를 가지는 문자가 존재합니다.

파이프

파이프(|) 는 명령 1 | 명령 2 와 같이 앞 명령 1의 출력 결과를 다음 명령 2의 입력으로 연결합니다.

입출력 리다이렉션

명령 치환

$ ls -l $(which passwd)
-rwsr-xr-x. 1 root root 25980 2021-11-24 01:28 /usr/bin/passwd

인용 부호

인용 부호는 빈 칸을 포함하는 문자열을 1개의 인수로 사용할 때 필요합니다.

이때 쉘 스크립트를 위해 사용되는 몇몇 특수문자들이 있는데, 작은따옴표(‘ ‘) 를 인용부호로 활용하면 이러한 특수문자의 의미를 제거하고 단순 문자로 취급하게 됩니다.

반면 큰따옴표(“ “) 로 문자열을 감싼다면 문자열이 포함하고 있는 특수문자 $, `, \, ! 등이 해석되어 확장됩니다.

$ echo "$(date)"
2021. 02. 23. (목) 01:25:47 KST
$ echo "\$(date)"
$(date)
$ echo 'Today is $(date)'
Today is $(date)

수식과 변수의 확장

수식에 의해 계산된 결과를 명령의 수행 전에 전달합니다.

혹은 변수의 값을 추출하여 명령 수행 전에 전달합니다.

$ echo "I am $[2021-1991] years old."
I am 30 years old.




3.5 셸 변수

셸 변수와 환경변수

셸 변수는 현재 셸에 한해서 환경을 설정하기 위한 특정 값을 저장하고(지역변수), 환경 변수는 현재 셸 뿐만 아니라 서브 셸로도 값을 전달합니다.(전역변수)

최초 셸을 시작하면 이미 많은 환경 변수가 설정되어 있으며, 모든 환경 변수를 출력하기 위해 printenv 명령을 사용합니다.

변수 설정과 환경 변수로 만들고 확인하기

$ FOO=bar
$ export FOO
$ sh
sh-4.1$ echo $FOO
bar
sh-4.1$ printenv FOO
bar
sh-4.1$ exit
$ unset FOO

자주 사용되는 환경 변수

로그인과 셸의 환경설정 파일

위와 같이 자주 사용되는 환경 변수 혹은 실행 명령들은 환경설정 파일 형태로 관리되어 로그인할 때 또는 셸을 시작할 때 자동으로 지정되거나 실행됩니다.

환경설정 파일은 시스템 환경 설정 파일사용자 환경 설정 파일이 있습니다. 이러한 것들은 셸의 종류에 따라 다른 이름으로 관리됩니다.

다음은 bash 셸의 경우입니다.



4. 파일과 디렉토리

4.1 파일 시스템 탐색

파일시스템이란 운영체제가 디스크(파티션) 상에 파일들을 구성하는 방식을 말합니다. 보통 파일과 디렉토리의 집합의 구조적 체계로 관리됩니다.

리눅스는 전체 파일 시스템을 한 개의 트리 구조로 관리합니다.(루트 / 디렉토리 하위) 앞서 2강에서 살펴봤듯이, 루트 파일 시스템의 가지로써(디렉토리) 여러 하드디스크 및 파티션이 부착됩니다.

파일시스템의 종류는 8강에서 자세히 다룰 예정이고, 본 강에서는 파일과 디렉토리, 이것들을 탐색하거나 살펴보는 명령을 다룹니다.

ls 명령

ls 명령은 파일과 서브 디렉토리 목록을 나열(list)하는 명령입니다.

$ ls . 하면 현위치(현 디렉토리)의 파일 정보를 출력합니다. (이름만)

$ ls date.txt 하면 현위치의 date.txt 파일의 정보를 출력합니다.

$ ls -l date.txt 는 파일의 상세 정보(권한, 소유자, 그룹, 크기, 수정시간, 파일명)를 출력합니다.

ls 의 옵션은 다음과 같습니다.

파일의 종류

리눅스에서는 디렉토리도 일종의 파일로 취급됩니다.

ls 명령으로 확인 시 디렉토리 파일은 d, 심볼릭 링크는 l, 블록 디바이스는 b, 문자 디바이스는 c 로 구분됩니다.

관련 명령어들




4.2 파일과 디렉토리 관리

파일과 디렉토리를 관리하기 위한 명령어들입니다.

파일의 접근권한

권한이 없는 사용자의 접근을 막기 위해 접근 권한을 설정합니다. 사용자의 부류에 따라 읽기/쓰기/실행 세 가지 권한을 각각 설정합니다.

$ ls -l
-rw-rw-r--. 1 kdhong kdhong 109 2020-12-02 18:43 cat2.txt

디렉토리의 접근권한

디렉토리의 접근권한은 파일의 접근권한과 다른 점이 있습니다.

따라서 특정 사용자가 디렉토리를 자유롭게 사용하려면 읽기/쓰기/실행 권한을 모두 가지고 있어야 합니다. (적어도 읽기/실행)

$ ls -ld /home ~jjpark
drwxr-xr-x. 8  root   root   4096 2020-12-03 16:27 /home
drwx------. 26 jjpark jjpark 4096 2020-12-03 16:27 /home/jjpark

위에 나타나는 사용자 부류 별 지정된 권한에 따라 디렉토리 관리가 가능합니다.

chmod

chmod 명령은 소유자가 자신 파일 혹은 디렉토리의 접근권한을 변경하는 명령입니다.

umask

umask 명령은 접근권한의 기본값을 출력하거나 설정하는 명령으로 기본값은 보통 /etc/bashrc 에 설정되어 있습니다.

만약 새로운 umask 값을 지정하고 싶다면, 앞선 3강의 셸 환경설정 파일의 실행 순서에 따라서 시스템 환경설정 파일인 /etc/bashrc 가 아니라 ~/.bashrc 에 자신만의 값을 설정하면 됩니다.

umask 의 값은 지정된 특정 권한을 마스킹할 때 사용됩니다. 만약 umask=002 라면 8진수 모드 777 에서 775 가 기본 접근권한이 되는데, 이것의 의미는 other 사용자의 2, 즉 쓰기 권한을 기본적으로 제한한다(마스킹한다)는 의미입니다.

특히 파일의 경우 실행 권한이 부여되지 않으므로 775에서 1씩 빠진 664가 됨을 알아야 합니다.

touch [file] 명령은 파일의 접근/수정 시간을 현재 시간으로 변경하며 파일이 존재하지 않으면 새로 생성합니다.

chown

chown 명령은 root 사용자가 파일이나 디렉토리의 소유자를 변경하는 명령입니다.

특정 사용자가 새 파일 혹은 새 디렉토리를 생성하면 그 사용자의 이름과 그룹 소유로 만들어지는데, chown 명령으로 소유자나 소유 그룹을 변경할 수 있습니다.

ln

파일을 다른 이름으로 연결(link)하는 ln 연결입니다.

링크에는 하나의 파일에 다른 이름을 부여하는 하드링크와 바로가기와 같은 심볼릭링크가 있습니다.

하드링크(hard link)하나의 파일에 다른 이름을 부여하는 효과입니다. 따라서 원본 파일의 링크 카운트가 증가하며, 다른 파일 시스템에는 링크가 불가합니다.

심볼릭링크(symbolic link)는 윈도우의 바로가기와 같아 다른 파일 시스템에서도 생성할 수 있는 독립적인 파일입니다. 하지만 원본에 의미적으로 연결되어 있기 때문에 원본이 삭제되면 이것의 의미도 없어집니다.

디렉토리의 경우, 심볼릭링크만 생성할 수 있습니다.

$ ls file1
file1
$ ln file1 file1.hl
$ ln -s file1 file1.sl
$ ls -li file1*
284496 -rw-rw-r--. 2 kdhong kdhong 588 2020-11-27 20:27 file1
284496 -rw-rw-r--. 2 kdhong kdhong 588 2020-11-27 20:27 file1.hl
284718 lrwxrwxrwx. 1 kdhong kdhong 5 2020-12-05 00:23 file1.sl -> file1

위처럼 하드링크로 생성된 링크는 원본과 완전히 같은 파일이지만 이름만 다르고, 심볼릭링크로 생성된 링크는 원본과 완전히 다른 파일이면서 상징적인 연결 기능만 수행하므로 파일 내용이 없습니다.

만약 하드링크 파일을 삭제하면 원본을 삭제해도 링크 카운트만 1이 줄어듭니다. 이는 하드링크가 남아있다면 원본이었던 이름만 없어진 효과가 됩니다.

반면 심볼릭링크는 원본이 삭제되면 의미 자체가 사라집니다.




4.3 파일의 내용 확인

다음은 파일의 내용을 확인하기 위한 명령들입니다.



5. 리눅스 시작과 종료

5.1 운영체제의 부팅

(1) 부팅 과정 1

전원을 켜고 로그인 프롬프트가 나올 때까지 과정입니다.

(2) 부팅 과정 2

커널의 실행




5.2 초기화 데몬

(1) 초기화 init 데몬

(2) init 프로세스 1

(3) init 프로세스 2

(4) 환경설정 파일과 스크립트

(5) init 프로세스와 런레벨

(6) 런레벨




5.3 시스템 종료




5.4 데스크톱

일반적인 서버용 리눅스는 명령행 인터페이스만 제공합니다.



6. 사용자 관리

6.1 사용자 계정

(1) su: 사용자를 전환시키는 명령

(2) sudo: root 또는 다른 사용자가 되어 명령을 실행




6.2 사용자 계정 만들기

(1) useradd: 사용자 계정 생성 관리자 명령

(2) 사용자 계정 생성 절차

(3) 명령어

(4) 사용자 계정의 기본 설정




6.3 사용자 계정 수정

(1) usermod: 사용자 계정 정보 수정 관리자 명령

(2) 사용자 계정 삭제 시 고려사항




6.4 그룹 계정과 관리

일반 사용자는 bin, mail, sys 등의 시스템 정의 그룹에 포함될 수 없습니다.

또한 사용자 계정은 주 그룹이 지정되며, 0개 이상의 부 그룹에 속할 수 있습니다.

(1) groupadd: 그룹 계정을 만드는 관리자 명령

(2) 사용자 계저와 그룹 및 파일의 접근권한

(3) 명령어




6.5 사용자 관리를 위한 GUI



7. 텍스트 편집

vi 에디터 사용 방법에 대해 살펴봅니다.

7.1 편집기

(1) 리눅스 텍스트 편집기

(2) vi




7.2 vi 로 편집하기

강의 참조




7.3 파일 찾기와 문자열 검색



8.

8.1


8.2