Skip to main content

01. 리눅스 기초

About 2 minCLILinuxcrashcoursewikidocs.netclishshelllinux

01. 리눅스 기초 관련

Bash 쉘스크립트 개발 시작하기

Bash 쉘스크립트 개발 시작하기

1. 리눅스 기초

점프 투 스프링부트 - WikiDocs

리눅스에 대해서 쉘스크립트 개발자가 알아두어야할 기본적인 내용을 살펴 보겠습니다.

CentOS 6.9 버전을 이용하여 작성되었습니다.

1. 운영체제, 유닉스, 리눅스

운영체제와 유닉스, 리눅스에 대해서 알아보겠습니다.

운영체제

운영체제란 컴퓨터 하드웨어와 소프트웨어 사이에서 소통을 도와주는 인터페이스입니다. 운영체제에는 유닉스, 리눅스, MS윈도우, OS X, 안드로이드 등이 있습니다.

유닉스

유닉스는 AT&T 벨 실험실에서 개발된 운영체제입니다. 간결하면서도 유연한 명령어 구성으로 이루어졌으며, 이식성이 강한 개방형 시스템입니다. 시분할 시스템으로 멀티유저의 접근을 허용하며, 멀티 태스킹 시스템으로 동시에 여러프로세스를 처리할 수 있습니다.

유닉스 계열 - 위키백과

유닉스 계열(Unix-like)는 '유닉스와 비슷하면서 유닉스가 아니다'는 뜻으로, 유닉스(UNIX)와는 별개의 용어이다 ...

리눅스

리눅스는 유닉스계열의 운영체제입니다. 핀란드 헬싱키 대학의 리누스 토발즈가 대형 컴퓨터에서 사용하는 유닉스 소스 코드를 수정하여 개인 PC 에서도 사용할 수 있는 오픈 소스로 개발하고 자신의 이름을 따서 리눅스로 정했습니다. 즉, 유닉스를 개인 컴퓨터에서 사용할 수 있도록 한 것이 리눅스입니다.

리눅스는 각종 회사, 커뮤니티에서 만든 배포판이 여러가지 존재합니다. 이 배포판은 리눅스 커널, 쉘, 오픈소스 소프트웨어를 통합하여 제공합니다. 대표적으로 우분투, 레드햇, CentOS, 페도라, 데비안 등이 존재합니다.

리눅스 배포판 - 위키백과

리눅스 배포판(-配布版, Linux distribution, 간단히 distro)은 리눅스 커널, GNU 소프트웨어 및 여러 가지 자유 소프트웨어로 구성된 운영 체제이다 ...

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

yumCentOS 계열에서 사용합니다.

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

aptUbuntu 계열에서 사용합니다.

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을 입력

이찬희 (MarkiiimarK)
Never Stop Learning.