728x90

1. 셸 개요

 

✅ 셸(shell)

  • 명령어 해석기 또는 명령 행 인터페이스
    • 사용자와 커널 사이에서 명령어를 해석하여 처리
    • 셸 명령을 사용하면 GUI로는 하기 힘든 다양한 기능을 수행할 수 있음
  • 셸 명령을 프로그램으로 작성하여 처리할 수도 있음
    • 셸 스크립트는 텍스트 파일로, 프로그래밍을 통한 셸 명령의 조합
    • 반복적으로 수행되는 작업을 셸 스크립트로 작성할 수 있음
    • 셸이 쉘 스크립트 파일을 읽어 처리할 수 있음
  • 로그인을 하면 기본 셸이 주어짐
  • 종류
    • 많은 리눅스 배포판에서 bash를 기본 셸로 사용함 → 명령 프롬프트로 일반 사용자는 $, root 사용자는 #을 사용함
    • 셸의 종류에 따라 alias 설정, 초기화 파일, 스크립트 작성, 명령 행 완성 기능, 명령 행 편집 기능 등에 차이가 있음

 

 

 

✅ bash 셸

  • Bourne Again Shell로 Bourne 셸의 개선된 버전 (많은 셸 스크립트의 문법이 Bourne 셸에 기반을 둠)
  • C 셸과 Korn 셸의 유용한 기능을 가져옴
  • 실행 명령은 /bin/bash
    • /etc/passwd 파일에 아래와 같은 라인이 있음

사용자ID: x: 사용자ID: 그룹ID: 사용자 설명: 해당 계정의 홈 디렉터리: 기본셸

 

  • 기본 셸을 변경할 수 있으며 터미널 창은 대화형 셸임
chsh -s /bin/tcsh 기본 셸 변경
 exit (ctrl + d) 셸 종료
  • 로그인 셸과 비로그인 셸을 구별해야 함
    • logout 명령은 로그인 셸에서만 가능
    • 참고로 ctrl + alt + F2~6으로 가상 콘솔을 사용할 수 있음. 실제 콘솔이 하나만 있더라도 가상 콘솔을 여러 개 띄워서 사용 가능 (콘솔: 서버 컴퓨터에 직접 물려있는 터미널, ctrl + alt + F1)
    •  셸 프롬프트에서 셸 프로그램을 실행하면 '서브 셸'이 실행됨

 

 

 

 

 

2. 셸 명령

 

✅ 셸 명령의 형식

명령어 [options] [인수]
  • 명령어는 대게 프로그램으로 존재(그래서 실제로 해당 명령어의 실행 파일이 어딘가 존재)
  • 가장 간단한 형태의 실행은 명령어만 사용 (예: who, date, ls, pwd)
who 로그인한 모든 사용자의 정보 출력
date 현재 요일과 날짜 및 시간 출력
ls 디렉터리가 가지고 있는 파일이나 서브 디렉터리 목록 출력
pwd 현재 작업 디렉터리 경로 출력
  • 옵션인수는 여럿일 수 있으며 선택적 또는 필수적
    • 대괄호는 생략 가능, 이탤릭체는 적당한 내용으로 대체해야 함. 복수는 여러 개가 가능하다는 의미

 

 

 

옵션과 인수

  • 짧은 옵션 (-) : Unix 스타일
    • ls -l
    • ls -lat == ls -l-a-t
  • 긴옵션(--) : GNU 스타일, 이중 대시 뒤에는 약어가 아닌 단어가 붙음
    • ls --all
  • 인수는 명령의 수행 대상을 지정하는 것
    • cat -n /etc/passwd
    • grep "KilDong Hong" /etc/passwd → 수가 2개인 경우도 있음
  • 옵션도 인수를 가질 수 있음
    • chsh -s /bin/sh kdhong
    • chsh --shell=/bin/bash kdhong → 옵션에 인수가 필요할 경우에 옵션과 인수 사이에 '=' 기호 붙여야 하고 그 사이에 공백 없어야 함

 

 

 

✅ 명령어의 종류

alias - 자주 사용되는 명령의 단축 명령을 만드는 명령

- alias : 현재 설정 되어있는 alias 확인
- alias la='ls -A'
- alias rm='rm -i'

- 계속 유지하려면 셸의 환경 설정 파일에 기록해두어야 함
셸 예약어 예약된 단어로 do, while, case 등
함수 셸에서 수행되는 함수의 정의
내장 명령 - 셸 내부에 존재하는 명령으로 cd, echo, pwd 등 → 별도의 실행 파일이 존재하지 않고 셸 프로그램 안에 존재

- help 내장 명령 : 해당 내장 명령어 사용법 안내
일반 명령 - 실행 파일이 존재하는 명령(환경 변수 PATH에 설정된 경로 중에 실행파일이 존재하면 이름만으로 실행 가능)

-  PATH에 경로가 없는 프로그램을 실행할 때는 절대 경로를 사용해야 함

- 현재 디렉터리를 의미하는 '.'은 보통 PATH에 포함되어있지 않기 때문에 현재 디렉토리에 있는 프로그램을 실행시킬 때 이름만 주고 실행시키면 셸이 그 명령을 이행하지 못할 수 있음! ./실행프로그램명을 쓰거나 PATH에 현재 디렉토리를 추가해줘야 함


- echo $PATH로 저장된 경로를 확인할 수 있음

- 일반 명령 --help : 해당 일반 명령어 사용법 안내

 

 

 

✅ 기타 셸 명령 & 명령 히스토리

 type 명령 - 해당 명령어가 어떻게 해석되는지 알려주는 명령
- type cd, type -a ls
which 명령 - 실행 프로그램을 환경변수 PATH를 기초로 찾아 경로를 출력함
- which rm → /usr/bin/rm
whereis 명령 - 실행 프로그램 경로뿐만 아니라 소스 프로그램 경로와 매뉴얼 페이지 경로 출력
- whereis rm → /usr/bin/ rm /usr/share/man/man1/rm.1.gz /usr/share/man/man1p/rm.1p.gz
man 명령 - 매뉴얼 페이지를 보여줌
- 명령의 사용법이나 설정 파일 등에 관한 온라인 도움말 제공
- man passwd 또는 man 5 passwd (섹션 5 내용을 출력하라는 뜻. 페이지가 8가지 섹션으로 나뉘어져 있음)
history 명령 - 이전에 수행했던 명령 행의 목록을 불러옴
- history (최대 1000개까지 출력) 또는 history 10

✔️ 히스토리 기능을 이용하여 명령을 실행하는 방법
(이전에 수행했던 명령을 이용하여 명령을 수행할 수 있음)


- !!: 직전명령을 불러옴
- !숫자: 히스토리 목록에서 입력한 숫자값에 해당하는 명령 불러옴
- !문자: 지정된 문자열로 시작하는 최근 명령을 불러옴
 - [↑] 또는 [↓] : 누를 때마다 직전 또는 직후 명령을 불러옴


✔️명령 행 완성 기능
- 일부만 입력하고 나머지를 자동 완성으로 하는 기능
- 처음 몇 자만 입력한 후, [tab]키를 누르면 실행! 명령어, 변수($), 파일, 디렉터리(~ 또는 -) 등을 구분하여 결정함
- 정보가 충분하지 않은 경우, [tab]키를 한번 더 누르면 가능한 모든 경우를 보여주고 원래의 명령행 유지 

 

 

 

 

 

3. 명령의 연결과 확장

 

🔸특수문자

: 셸에서 특별한 의미를 가지는 문자

백슬래시( \ ) 특수 문자의 기능을 제거하는 이스케이프(escape) 문자
또는 긴 명령 행을 분리할 때 사용 => [ \ ] + [ enter ] 키를 누르면 다음 명령 행에 명령을 이어쓸 수 있음
틸드( ~ ) ~ 또는 ~username은 사용자의 홈디렉터리를 의미
도트( . ) 현재 작업 디렉터리를 표시
또는 명령 행의 맨 앞에서 쉘 스크립트를 실행하는 source 명령
더블도트( .. ) 현재 디렉터리의 부모 디렉터리
파운드( # ) 주석 처리
달러( $ ) $변수는 변수 값을 추출
 앰퍼샌드( & ) 명령&는 명령을 백그라운드로 실행시킴
↔ &를 붙이지 않으면 포그라운드로 실행. 해당 명령이 끝나야만 명령 프롬프트가 등장
애스터리스크
( * ) 
파일 이름에서 사용할 때 0개 이상의 임의 문자열과 대응됨
 물음표( ? ) 파일 이름에서 사용할 때 1개 문자와 대응됨
 파이프( | ) - 앞 명령의 출력 결과를 다음 명령의 입력으로 연결시킴
- 명령1 | 명령2 => cat /etc/passwd | sort | more
 ( < ), ( > )
*입출력 리다이렉션

- 입력 리다이렉션: 명령 수행에 필요한 표준 입력(키보드 입력) 대신에 파일로부터 데이터를 얻는 방법
- 명령<파일
예) sort</etc/passwd

(sort만 입력한 다음 엔터키 치면 라인 단위로 사용자의 입력을 받아서 그 입력 값을 정렬함)

- 출력 리다이렉션: 명령 수행의 결과를 표준 출력으로 보내지 않고 파일에 기록함
- 명령>파일
예) grep typedef /usr/include/*>typedef.out
>>  - 표준 출력을 파일의 끝에 덧붙일 때 사용

- 명령 수행 중 표준 오류 출력을 파일에 덧붙임
- 명령 2>>파일
예) ls 2>>error.txt
느낌표( ! ) 명령 히스토리 기능을 이용할 때 사용

 

 

 

🔸인용 부호

  • 빈칸을 포함하는 문자열을 1개의 인수로 사용할 때 인용 부호가 필요함
echo I am a student → 인수 갯수: 4
echo "I am a student" → 인수 갯수: 1
  • 작은따옴표(' ')는 특수 문자의 의미를 제거함
  • 큰따옴표(" ")$, ` `, \, ! 를 해석하여 확장함
    • \ : escape 문자로서  echo "\ $(date)" 이 경우 \뒤의 $의미가 없어지기 때문에 명령어로 해석되지 않고 문자로 출력됨

 

 

🔸명령 치환

  • 명령을 수행할 때, 명령의 인수에 다른 명령의 결과를 사용
  • $(명령어) 또는 ` 명령어`
    • ls -l $(which passwd) : /usr/bin/passwd 파일의 정보 출력

 

 

 

🔸수식 확장

  • 수식 결과를 명령 수행 전에 전달
  • $[수식] 또는 $((수식))

 

 

 

🔸변수 확장

  • 변수 값을 추출하여 명령 수행 전에 전달
  • $변수

 

 

 

 

 

4. 셸 변수

 

✅ 셸 변수

  • 셸의 환경 설정을 하기 위한 값을 저장 → 모든 변수와 값을 출력하기 위해 set 명령을 사용
  • 현재 셸에서만 사용 가능하고 서브 셸로는 전달되지 않음(지역변수)

 

환경 변수

  • 현재 셸 뿐만 아니라 서브 셸로도 전달(전역변수)
  • 보통 변수 이름으로 대문자를 사용
  • 터미널 창을 열어 쉘을 시작하면 이미 많은 환경변수가 설정되어 있음
  • 모든 환경 변수와 값을 출력하기 위해 printenv 명령을 사용

 

변수= 변수 설정
※이콜 사인 사이에는 공백이 들어가면 안 됨!
export 변수 환경 변수 설정
printenv 환경변수 해당 환경 변수의 값을 확인
echo $변수 모든 종류(셸 변수, 환경 변수..)의 변수 값을 확인

 

 

 

 

🔸자주 사용되는 환경 변수

 

HISTSIZE 1개 셸에서 저장되는 명령 히스토리 목록의 최대 갯수(기본 값: 1000)
HOME 홈 디렉터리
MAIL 사용자의 메일박스에 해당하는 파일로 보통 /var/spool/mail/username
PATH 명령을 수행할 때 실행 파일을 찾기 위한 디렉터리 목록
PS1 쉘 프롬프트 모양을 표시하기 위한 문자열
SHELL 사용 중인 기본 셸
PWD 현재 작업 디렉터리
USER 현재 사용자 계정

 

 

 

🔸로그인/셸 환경 설정 파일

  • 로그인할 때 또는 셸을 시작할 때 자동으로 실행되는 명령을 저장한 파일
    • 시스템 환경 설정 파일과 사용자 환경 설정 파일이 있음
    • 셸의 종류에 따라 다른 이름의 파일을 사용함

 

bash 셸의 경우 아래와 같음

실행순서 파일 설명
1 /etc/profile - 모든 사용자에게 적용되고 로그인할 때 가장 먼저 수행됨
- PATH, MAIL, HISTSIZE 등 전역의 환경 변수가 설정됨
2 ~/.bash_profile - 로그인할 때 수행되며 개별 사용자에게 적용됨
- 보통 내부에서 ~/.bashrc를 실행
3 ~/.bashrc - 쉘을 시작할 때마다 수행되며 개별 사용자에게 적용됨
- 보통 내부에서 /etc/bashrc를 수행
4 /etc/bashrc - 모든 사용자에게 적용되며 쉘을 시작할 때마다 수행됨
- PS1, alias 설정, umask를 사용한 접근권한의 초기 값, 함수 등을 설정
5 ~/.bash_logout - 로그아웃을 수행할 때 실행되는 스크립트 파일
  • 로그인할 때 1,2번 반드시 실행되고 쉘을 시작할 때 3,4번이 반드시 실행됨
  • 3번이 먼저 실행되지만 4번이 먼저 끝남

 

 

728x90

'KNOU > UNIX시스템' 카테고리의 다른 글

[UNIX 시스템] 2. 리눅스 설치  (1) 2022.09.11
[UNIX 시스템] 1. 리눅스 소개  (0) 2022.09.06
728x90

1. 리눅스 실습 환경의 준비

 

  •  CentOS
    • RHEL의 소스코드를 이용해 만들어진 무료 배포판
    • 상용 RHEL과 호환되나 운영상의 문제가 생길 때 스스로 해결해야 함
    • 웹 서버나 데이터베이스 서버용 컴퓨터에 널리 사용됨

 

✅ CenstOS 설치 방법

1. 하드디스크의 비어있는 파티션에 설치

  • 기존 운영체제에서 사용하지 않는 파티션이 있는지 확인(리눅스용 파티션을 준비하는 것)
  • 리눅스 설치 공간은 기존의 운영 체제공간과 구분됨
  • 부팅 시 윈도우와 리눅스 중 선택할 수 있음(멀티 부팅)

 

2. 가상머신 소프트웨어를 이용하여 설치 

(교수님 피셜 virtual box가 버전 업그레이드 되면서 문제가 좀 있어서 Vmware 추천)

  • 가상머신 소프트웨어 설치 후 가상머신에 리눅스 설치
  • 게스트 운영체제로 설치됨 <-> 물리적 컴퓨터 운영체제: 호스트 운영체제

 

⭐ VMware에 CentOS 7 설치하기

https://dev-waterparsley.tistory.com/52

 

[가상머신] VMware에 CentOS 설치하기

가상머신(Virtual Machine) 컴퓨터 환경을 소프트웨어로 구현한 것 한 대의 물리적 컴퓨터에 가상 컴퓨터 공간을 만들어서 그곳에 새로운 운영체제를 설치할 수 있도록 지원해주는 소프트웨어 물리

dev-waterparsley.tistory.com

 

 

 

 

2. 저장 장치와 이름과 표준 디렉터리

 

✅ 파티션

  • 하드디스크를 논리적으로 나눈 구역(디스크에서 고정 크기의 영역)
  • 디스크 전체가 하나의 파티션으로 만들어질 수도 있고, 여러 개의 파티션으로 분할되어 만들어질 수도  있음
  • 파티션 별로 파일 시스템을 만들 수 있음
    • 윈도우에서는 각 파티션마다 각각의 드라이브로 지정, 루트 디렉터리가 1개 이상 → C:\, D:\
    • 리눅스는 오직 1개의 루트 디렉터리(/)만 가짐 ← 루트 파일 시스템의 특정 디렉터리에 다른 파티션들이 부착되는 형태
      • 저장 장치를 사용하려면 해당 저장 장치 이름을 파일 시스템의 특정 디렉터리에 마운트시켜야 함 
      • 예) 장치 이름/dev/sdb1를 /home에 부착
  • 리눅스는 하드디스크나 주변 장치를 파일로 취급함

 

 

 

🔸장치 이름

  • 리눅스에서 사용하는 하드디스크 장치 또는 파티션의 이름
    • IDE 디스크: 이름에 'hd'를 붙임 → /dev/hda, /dev/hdb, ... *물리적인 하드디스크가 추가될 때 알파벳 순서대로 붙임
    • SCSI 디스크: 이름에 'sd'를 붙임 → /dev/sda, /dev/sdb, ...
    • 파티션 번호는 숫자를 1부터 순서대로 붙임 → /dev/hda1, /dev/hdb2, ...
    • CD/DVD → /dev/sr0, dev/sr1, ...

 

 

 

✅ 리눅스 표준 디렉터리

/ 루트 디렉터리 - 파일 시스템의 바탕을 이루는 중요 디렉터리
- 모든 파일과 디렉터리의 최상위 디렉터리
/bin
/sbin
바이너리 디렉터리 - 기본적인 명령 실행 파일 포함(/bin)
- 시스템 관리와 관련된 명령 실행 파일 포함(/sbin)
/boot 부트 디렉터리 - 커널 이미지(vmlinuz)와 *부트 로더 설정 파일 포함

*부트 로더: 리눅스가 부팅될 때 커널 이미지를 메모리상에 로드하는 작업이 필요한데 이때 사용되는게 부트 로더
/dev 디바이스 디렉터리 - 장치를 접근하는데 사용되는 '디바이스 파일'이 위치함
/etc 시스템 설정 파일 디렉터리 - 시스템의 중요한 환경 설정 파일 위치

🔸환경 설정 파일
1. 부팅할 때 실행되는 초기화 스크립트
2. 메일 서버나 웹 서버 같은 프로그램 설정 파일
3. 사용자 계정 정보를 가지는 패스워드 파일
4. 리눅스 부팅 시 어떤 파일 시스템을 마운트 될 것인지에 대한 파일 시스템 목록 파일...
/home 사용자 계정 디렉터리 - 사용자 계정의 홈 디렉터리가 만들어지는 디렉터리
예: /home/kdhong
사용자의 홈 디렉터리는 해당 사용자만 사용할 수 있는 독립적인 공간
/lib 공유 라이브러리 디렉터리 - 프로그램들이 사용하는 시스템 라이브러리 파일이 위치함
/media 미디어 디렉터리 - 이동식 저장 장치가 마운트될 때 마운트 지점을 제공하는 디렉터리
/proc 시스템 정보 디렉터리 - 커널이 사용하는 가상의 파일 시스템
- 실제 하드 디스크 공간을 차지하는 것이 아니라 메모리에 위치
/root 루트 계정 디렉터리 - root 계정의 홈 디렉터리
/usr 사용자 디렉터리 - /usr/bin, /usr/sbin : 여러 가지 실행 파일
- /usr/include : C프로그램 컴파일에 필요한 중요한 라이브러리 헤더 파일 (예: stdio.h)
- /usr/lib : 실행 파일을 위한 사용자 라이브러리
/var 가변 자료 저장 디렉터리 - 시스템 운영 중에 필요한 가변 자료가 저장되는 디렉터리
- 시스템 작동 로그, 인쇄, 메일

 

 

 

728x90

'KNOU > UNIX시스템' 카테고리의 다른 글

[UNIX 시스템] 3. 셸 사용하기  (0) 2022.09.15
[UNIX 시스템] 1. 리눅스 소개  (0) 2022.09.06
728x90

1. 유닉스와 리눅스

 

  • Unix
    • 다중 사용자(multi user), 다중 작업(multitasking)을 지원하는 신뢰성 높은 시분할 방식의 운영체제
    • C언어로 작성되어서 이식성이 좋고 네트워크 기능이 강력함(UNIX 시스템의 발전이 인터넷, 네트워크 발전에 대단한 공헌을 했다고 알려짐)
    • 매우 단순하고 모듈화된 설계가 특징인 운영체제이며 강력한 쉘 스크립트를 제공함
    • 파일 시스템 트리가 하나로 통합되어 있음
  • Linux: Unix의 무료 공개 버전으로 초기에는 PC용 운영체제로 개발되었음

 

🔸Unix 발전사

출처: 방송통신대학교

  • Multics : 유닉스의 기원으로 1969년 assembly 언어로 작성된 최초의 시분할 운영체제
  • Unics → Unix : 작고 심플한 운영체제로 다시 작성되었으며 1973년 대부분이 C언어로 다시 작성됨

 

🔸대표적인 Unix 시스템

  • BSD 계열 : Free BSD, SunOS => 자유롭고 공개된 방식으로 운영체제 개발이 진행
  • System V 계열 : HP-UX, IBM AIX, Solaris => 상업적인 목적으로 제공
  • 리눅스

 

🔸리눅스 등장 과정

  • 1983년 GNU 프로젝트
    • 리처드 스톨만이 Unix와 유사한 공개 운영체제를 개발하기 위해 GNU 프로젝트를 시작소프트웨어 상업화에 반대하고 소스코드의 공유, 자유로운 사용과 배포를 주장
    • Linux 발전에 큰 영향을 줌
    • 1989년 GPL(General Public License) 발표
      • 공개 소프트웨어 라이센스의 대표적인 이름
      • GNU 프로젝트의 가장 큰 산물 
    • GNU 프로젝트는 현재 Free Software Foundation(FSF) 이름으로 계속 진행 중

 

  • 1991년 리눅스 커널(kernel)
    • 리누스 토발즈는 리눅스 커널을 작성하여 발표 - 개발자인 Linus와 Unix의 이름을 따서 Linux
    • 커널: 하드웨어를 제어하고(CPU 스케줄링, 메모리 관리..) 응용 프로그램과의 상호작용을 제공하는 운영체제의 핵심 구성 요소 

 

  • 1992년 최초 Linux 배포판(MCC Interim 리눅스) 발표 
    • 리눅스 배포판 = 리눅스 커널 + 다양한 시스템 유틸리티, 사용자 프로그램을 합쳐서 만들어진 완전한 운영체제
    • 보통 일반적으로 말하는 리눅스란 리눅스 배포판을 의미하는데 정확히 따지면 리눅스라는 명칭은 리눅스 커널만을 의미함!

 

  • 1998년 IBM과 Oracle과 같은 대기업들이 리눅스 지원을 발표

 

 

 

2. 리눅스 개요

 

🔸리눅스 발전상

  • 전 세계 리눅스 사용자는 9160만명 정도로 추산되며 유수의 100만 도메인 중 95% 이상이 리눅스를 사용
  • 스마트폰의 80% 이상이 리눅스 커널 기반의 안드로이드에서 동작
  • 슈퍼 컴퓨터의 95%가 리눅스에서 운영됨
  • 주요 증권거래소, Google, Twitter, Facebook, Amazon 등에서 리눅스 서버를 사용
  • 대다수 전자장비(폰, TV 등)에서 리눅스를 사용

 

✅ 리눅스의 특징

  • 다중 사용자와 다중 작업을 지원
  • 뛰어난 이식성을 제공
  • 모듈화되어 있어 업그레이드 또는 업데이트가 용이함
  • CUIGUI를 지원
    • Character UI(=CLI, Command Line Interface): 셸(Shell)을 통해 커맨드를 입력
    • Graphical UI: X Window와 GNOME, KDE 등의 데스크톱
  • 오픈 소스라서 빠르게 발전하고 보완됨
  • 여러 종류의 파일 시스템을 지원: Minx, ext 계열, FAT, FAT32, NTFS, NFS, ISO-9660 등
  • 효율적 하드웨어의 활용
  • 다양한 응용 프로그램과 소프트웨어 개발 환경을 제공

 

 

 

3. 오픈소스와 라이선스

 

✅ 오픈소스

: 개발자(저작권자)가 소스코드를 공개하여 누구나 사용, 수정, 공유할 수 있도록 허가한 소프트웨어

open source software(OSS) <=> proprietary(closed) 소프트웨어소

 

🔸소프트웨어 라이선스

  • 컴퓨터 프로그램은 지식재산권으로 보호받는 저작물로서 원칙적으로 저작자가 공표, 복제, 배포, 개작할 권한을 가짐
  • 타인에게 일정한 대가나 조건을 전제로 권한을 부여할 수 있음 → 라이선스 예) GPL

 

🔸오픈 소스의 장점

  • 누구나 잘못된 점을 발견하고, 알리거나 고칠 수 있음
  • 배울 수 있고, 효율적 프로그램 개발에 적용할 수 있음
  • 오픈 소스는 여러 사람에 의해 테스트되어 안전함
  • 오픈소스 운동의 철학: 커뮤니티를 통한 협력, 공유, 개방이 발전을 위해 효율적이다

 

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

  • 목적에 상관없이 프로그램을 실행할 수 있는 자유
  • 프로그램을 복제하고 공유할 수 있는 자유
  • 소스코드를 개작(수정)할 수 있는 자유
  • 개작된 프로그램을 배포할 수 있는 자유(소프트웨어의 소스코드는 공개)

 

🔸리눅스 라이선스

  • 리눅스는 독점되거나 배타되지 않는 자유 소프트웨어 ∴ 공개 라이선스에 따라 자유롭게 고치고 배포 가능
  • 주로 GPL(GNU General Public License)를 따르고 일부는 LGPL(Gnu Lesser General Public License)를 따름
  • X Window는 MIT 라이선스

 

🔸GNU GPL

  • 자유롭게 사용, 복제, 배포
  • 필요에 따라 자유롭게 수정하고 배포 가능하고 이러한 경우 소스코드를 공개해야 함
  • 수정된 소프트웨어에 저작권을 표시하고 똑같이 GPL 조건으로 배포해야 함

 

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

  • GPL, LGPL, MPL
    • 소스코드를 공개해야 하는 카피레프트 라이선스(기본적으로 코드를 공개하도록 함→ GPL이 가장 강력하게 적용)
      • LGPL
        • 주로 오픈소스 라이브러리에 적용됨
        • 프로그램 전체 코드를 공개하지 않아도 되고, 오픈소스 라이브러리 소스 코드만 수정해서 쓸 수가 있어서 해당 오픈 소스 라이브러리 코드만 공개하면 됨
      • MPL: 코드와 결합하여 프로그램을 만들 때 MPL 코드를 포함하지 않은 파일은 공개 의무가 없음
    • 소스코드의 공개 범위는 다르게 정의됨(전체/파일/모듈 단위 등)
  • BSD, Apache, MIT 라이선스(=Permissive 라이선스)
    • 배포 시 소스코드의 비공개가 허용
    • 코드의 재사용을 높이려는 목적

 

 

 

4. 리눅스 배포판

 

🔸리눅스 배포판의 역사

  • 리눅스 배포판: 리눅스 커널 외에 시스템 유틸리티, 응용프로그램, 설치 프로그램을 포함한 완전한 운영체제
  • 1991년 리눅스 커널이 처음 개발됨 (1994년 커널 1.0 발표, 최신 안정 버전은 4.12)
  • 1992년 최초의 배포판 MCC Interim과 SLS(Softlanding Linux System) 배포판이 발표됨
  • 1993년부터 주요 배포판이 나오기 시작함

 

✅ 주요 리눅스 배포판의 종류

  • Debian 계열: Debian, Ubuntu 등
  • Slackware 계열: Slackware, SUSE 등
  • Red Hat 계열: Redhat, Fedora, CentOS 등

 

✅ Debian 리눅스

  • Debian 프로젝트
    • 자유 운영 체제를 만들어가는 사람들의 독자적인 모임
    • Ian Murdock에 의해 1994년에 비영리 조직으로 설립
  • GNU 정신에 가장 충실한 배포판 → GNU의 공식적인 후원을 받는 유일한 배포판
  • 새로운 배포판이 나왔을 때 숫자 버전 외에 버전마다 코드명을 붙임 
    • 코드명은 크게 세가지(stable, testing, unstable)로 분류되고  unstable 버전은 항상 코드명이 sid (토이스토리에 나온 장난감 이름)
  • 설치 시간이 굉장히 오래 걸리며 패키지 관리를 위해서 데비안 패키지(dpkg) 사용하고, 패키지 install은 apt advanced 패키지 툴을 사용

 

✅ Ubuntu 리눅스

  • 인기 있는 리눅스 배포판 중 하나로 Debian 리눅스로부터 파생
  • 데스크톱 Unity를 제공하여 초보자도 리눅스를 쉽게 사용할 수 있도록 함
  • Debian 리눅스에 비하여 사용 편리성에 중점을 둠

 

✅ Slackware 리눅스

  • SLS 리눅스로부터 파생되어 가장 먼저 대중화된, 현존하는 가장 오래된 배포판
  • 1992년 Patrick Volkerding에 의해 시작됨
  • 간결함을 설계 철학으로 함 (the KISS principle) → 현재 GNOME desktop이 제외되어 있음
  • 유닉스를 공부하려는 목적이라면 슬랙웨어 리눅스를 사용하는 것이 적합

 

✅ SUSE 리눅스 (Software und System Entwicklug ) 

  • Slackware 리눅스로부터 파생
  • 독일에서 만든 배포판으로 유럽에서 많이 사용
  • 풍부한 기능, 안정성, 보안 기능을 포함
  • SUSE Linux Enterprise(유료) / openSUSE(무료)

 

✅ Red Hat 리눅스

  • 1994년에 처음 배포된, 배포판 가운데 가장 널리 알려진 리눅스
  • Red Hat Linux : 무료 배포판으로 2003년 지원 중단됨(마지막 버전은 9) → 무료 배포판 유지 개발을 위해 Fedora라는 오픈소스 프로젝트를 지원 (RHEL의 테스트 베드로 사용됨)
  • Red Hat Enterprise Linux(RHEL) : 유료 배포판으로 최신 버전은 7
  • 패키지 관리 : RPM(Red Hat Package Manager)

 

✅ CentOS 리눅스

  • Red Hat 리눅스로부터 파생
  • Red Hat Enterprise Linux(RHEL)의 소스코드를 기반으로 만들어지는 무료 배포판이며 상당히 안정된 버전
  • 서버용으로 많이 사용되며 최신 버전은 7.3

 

728x90

'KNOU > UNIX시스템' 카테고리의 다른 글

[UNIX 시스템] 3. 셸 사용하기  (0) 2022.09.15
[UNIX 시스템] 2. 리눅스 설치  (1) 2022.09.11

+ Recent posts