01. 리눅스 기초
01. 리눅스 기초 관련
리눅스에 대해서 쉘스크립트 개발자가 알아두어야할 기본적인 내용을 살펴 보겠습니다.
CentOS 6.9 버전을 이용하여 작성되었습니다.1. 운영체제, 유닉스, 리눅스
운영체제와 유닉스, 리눅스에 대해서 알아보겠습니다.
운영체제
운영체제란 컴퓨터 하드웨어와 소프트웨어 사이에서 소통을 도와주는 인터페이스입니다. 운영체제에는 유닉스, 리눅스, MS윈도우, OS X, 안드로이드 등이 있습니다.
유닉스
유닉스는 AT&T 벨 실험실에서 개발된 운영체제입니다. 간결하면서도 유연한 명령어 구성으로 이루어졌으며, 이식성이 강한 개방형 시스템입니다. 시분할 시스템으로 멀티유저의 접근을 허용하며, 멀티 태스킹 시스템으로 동시에 여러프로세스를 처리할 수 있습니다.
리눅스
리눅스는 유닉스계열의 운영체제입니다. 핀란드 헬싱키 대학의 리누스 토발즈가 대형 컴퓨터에서 사용하는 유닉스 소스 코드를 수정하여 개인 PC 에서도 사용할 수 있는 오픈 소스로 개발하고 자신의 이름을 따서 리눅스로 정했습니다. 즉, 유닉스를 개인 컴퓨터에서 사용할 수 있도록 한 것이 리눅스입니다.
리눅스는 각종 회사, 커뮤니티에서 만든 배포판이 여러가지 존재합니다. 이 배포판은 리눅스 커널, 쉘, 오픈소스 소프트웨어를 통합하여 제공합니다. 대표적으로 우분투, 레드햇, CentOS, 페도라, 데비안 등이 존재합니다.
2. 커널, 쉘
커널(Kernel)과 쉘(Shell)에 대해서 알아보겠습니다.
커널
커널은 하드웨어와 애플리케이션 간에 상호 작용을 도와주는 OS의 핵심 구성요소입니다. 자신이 사용하는 리눅스에서 커널의 버전을 확인하는 방법은 다음과 같습니다.
uname -r
#
# 2.6.32-573.22.1.el6.x86_64
쉘
유닉스 계열의 시스템에서 사용하는 대화형 인터페이스입니다. 사용자의 커널 사이에서 사용자의 입력을 받아서 명령을 해석하여 커널에 전달하고 결과를 사용자에게 반환합니다.
여러가지 쉘 중에서 가장 인기있는 5가지 쉘은 Bash(배쉬), Tcsh(C쉘), Ksh(콘쉘), Zsh(Z쉘), Fish(Friendly Interactive SHell) 입니다. 이 쉘중에서 자신에게 맞는 쉘을 선택하면 됩니다.
# 현재 사용중인 쉘 확인
echo $SHELL
#
# /bin/bash
# 사용가능한 쉘 확인
cat /etc/shells
#
# /bin/sh
# /bin/bash
# /sbin/nologin
# /bin/dash
3. 프로세스
일반적으로 프로세스(Process)는 실행중인 프로그램을 말합니다. 여러 개의 프로그램을 동시에 실행하는 것을 멀티태스킹이라고 하고, 이 프로세스를 관리하는 것은 운영체제의 주요 역할 중 하나입니다.
프로세스 실행 방식
리눅스의 프로세스는 포그라운드(foreground)와 백그라운드(background)방식으로 동작합니다. 포그라운드 방식은 키보드 입력을 받아서 동작하는 방식으로 실행되면 다른 작업을 처리할 수 없습니다. 백그라운드 방식은 사용자와의 대화 없이 실행되는 작업 방식입니다.
리눅스에서 포그라운드 방식으로 작업을 실행하면 다른 작업을 실행할 수 없고, 작업이 끝날때까지 대기합니다. 백그라운드 방식은 명령어 뒤에 &
를 붙여서 실행하고, 다른 명령어를 추가적으로 입력할 수 있습니다.
백그라운드 방식으로 실행해도 사용자의 터미널 세션이 종료되면 실행중인 프로세스도 종료됩니다. 작업시간이 오래 걸리는 작업인 경우
nohup
명령어를 이용하여 백그라운드로 실행하면 사용자의 터미널 세션이 종료되어도 작업이 종료될 때까지 프로세스를 실행합니다.
# 포그라운드 방식
sample.sh
# 백그라운드 방식 -- &추가
sample.sh &
# nohup 커맨드(no hang up)
nohup sample.sh &
4. 리눅스
리눅스 관련 기본 정보를 알아보겠습니다.
패키지 설치
리눅스의 주요 모듈은 패키지 매니저를 이용해서 설치할 수 있습니다.
yum
은 레드햇 계열, apt-get
은 데비안 계열에서 사용하는 패키지 설치 명령입니다. 이 명령은 패키지간의 의존성을 확인해서 자동으로 설치해 주기 때문에 사용이 편리합니다.
- 패키지 매니저
yum
- 레드햇 계열
- CentOS
apt-get
- 데비안 계열
- 우분투
yum
yum
은 CentOS 계열에서 사용합니다.
yum
명령
yum
에 설정된 기본 리파지토리의 정보를 이용하여 파일을 설치 합니다. 사용자가 리파지토리를 추가할 수도 있습니다.
yum -h # 설명을 출력
yum list <PACKAGE_NAME> # 설치할 수 있는 프로그램의 버전을 출력
yum install <PACKAGE_NAME> # 프로그램을 설치
yum search <PACKAGE_NAME> # 프로그램 검색
yum update # 설치된 프로그램을 업데이트
yum update <PACKAGE_NAME> # 프로그램을 업데이트
yum upgrade # 설치된 프로그램을 업그레이드.
# update는 사용하지 않는 패키지를 유지하고,
# upgrade는 삭제
yum remove <PACKAGE_NAME> # 프로그램 삭제
yum
주요 옵션
옵션 | 설명 |
---|---|
-y | 모든 옵션에 yes를 입력 |
# 설치 여부를 물어보는 y/n 선택 화면없이 설치
yum install -y mysql
apt
apt
은 Ubuntu 계열에서 사용합니다.
apt
명령
apt
에 설정된 기본 리파지토리의 정보를 이용하여 파일을 설치 합니다. 사용자가 리파지토리를 추가할 수도 있습니다.
apt -h # 설명을 출력
apt list <PACKAGE_NAME> # 설치할 수 있는 프로그램의 버전을 출력
apt install <PACKAGE_NAME> # 프로그램을 설치
apt search <PACKAGE_NAME> # 프로그램 검색
apt update # 설치된 프로그램을 업데이트
apt update <PACKAGE_NAME> # 프로그램을 업데이트
apt upgrade # 설치된 프로그램을 업그레이드.
# update는 사용하지 않는 패키지를 유지하고,
# upgrade는 삭제
apt remove <PACKAGE_NAME> # 프로그램 삭제
apt
주요 옵션
옵션 | 설명 |
---|---|
-y | 모든 옵션에 yes를 입력 |
# 설치 여부를 물어보는 y/n 선택 화면없이 설치
apt install -y mysql-server
참고
apt
를 사용하다 보면 lock이 걸려서 설치가 안되는 경우 가 있습니다. 다음과 같이 lock 파일을 삭제하여 오류를 해결할 수 있습니다.
# lock 이 걸리는 경우
# Reading package lists... Done
# E: Could not open lock file /var/lib/dpkg/lock-frontend - open (13: Permission denied)
# E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), are you root?
# lock 파일 삭제
sudo rm /var/lib/apt/lists/lock
sudo rm /var/cache/apt/archives/lock
sudo rm /var/lib/dpkg/lock*
conflict 오류
라이브러리를 동시에 설치 할 때 여러개의 라이브러리에서 같은 라이브러리를 설치 하려고 하면 다음과 같이 conflict 오류가 발생합니다.
이 때는 라이브러리를 동시에 설치 하지 말고, 하나씩 설치 하면 오류 없이 설치 할 수 있습니다.
#
# The following packages have unmet dependencies:
# libsasl2-modules-gssapi-heimdal : Conflicts: libsasl2-modules-gssapi-mit but 2.1.27~101-g0780600+dfsg-3ubuntu2.3 is to be installed
# libsasl2-modules-gssapi-mit : Conflicts: libsasl2-modules-gssapi-heimdal but 2.1.27~101-g0780600+dfsg-3ubuntu2.3 is to be installed
# E: Unable to correct problems, you have held broken packages.
dpkg
dpkg
는 Ubuntu 계열에서 사용합니다.
dpkg
명령
dpkg
는 파일로 패키지를 설치할 때 사용합니다.
dpkg -i <FILE_NAME> # 파일을 설치
dpkg -r <PACKAGE_NAME> # 패키지를 삭제
dpkg -l # 설치된 패키지를 확인
dpkg
주요 옵션
옵션 | 설명 |
---|---|
-i | 패키지 설치 |
-l | 설치된 패키지 확인 |
주요 디렉토리
리눅스의 주요 디렉토리를 알아보겠습니다.
디렉토리
/📁bin # 기본 명령어 바이너리 저장
/📁dev # 장치 파일 저장
/📁etc # 설정 파일
/📁home # 사용자의 홈 디렉토리
/📁lib # 라이브러리 디렉토리
/📁lib64 # 64bit용 라이브러리 디렉토리
/📁mnt # 디스크 마운트 디렉토리
/📁opt # 사용자 응용 프로그램 설치 디렉토리
/📁proc # CPU, 메모리 등 시스템 정보 특수 파일 저장
/📁sbin # 필수 시스템 바이너리 파일 저장
/📁tmp # 임시 파일 저장
# 주기적으로 지워지기 때문에 오래 저장할 파일을 보관하면 안됨
5. 기타
리눅스 시스템을 운영하면서 알아두면 좋은 내용에 대해서 알아보겠습니다.
한글 설정
리눅스 시스템에서 한글이 깨지는 경우가 있습니다. 인터넷에서 다운로드 받은 파일을 cat
으로 열어보면 한글이 정상적으로 보이지만 vi
로 열거나, python
등 다른 프로그램으로 열어보면 한글이 깨지는 경우가 있습니다.
이런 경우는 OS의 언어 설정이 UTF-8로 되어 있지 않을 때 발생합니다. OS의 설정을 변경하거나, vi의 설정을 변경하면 처리할 수 있습니다.
언어 설정
locale
명령으로 현재 언어 설정을 확인합니다. LANG 가 eu_US
로 되어 있으면 영어 설정입니다. 이 부분을 en_US..UTF-8
로 수정하면 됩니다. /etc/default/locale
파일을 vi
로 수정하면 됩니다.
locale
#
# LANG=en_US
# LANGUAGE=en_US:
# LC_CTYPE="en_US"
# LC_NUMERIC="en_US"
# LC_TIME="en_US"
# LC_COLLATE="en_US"
# LC_MONETARY="en_US"
# LC_MESSAGES="en_US"
# LC_PAPER="en_US"
# LC_NAME="en_US"
# LC_ADDRESS="en_US"
# LC_TELEPHONE="en_US"
# LC_MEASUREMENT="en_US"
# LC_IDENTIFICATION="en_US"
# LC_ALL=
vi
설정
vi
에서만 한글이 깨진다면 encoding 설정을 이용해서 수정할 수 있습니다. 다음과 같은 방법이 있습니다.
- EX 모드(
:
으로 들어감)에서set encoding=utf-8
을 입력 - 기본 설정 변경
- .
~/.vimrc
파일에set encoding=utf-8
을 입력 - .
/etc/vim/vimrc
파일에set encoding=utf-8
을 입력
- .