카테고리 없음

리눅스 5주차

joonkong1 2024. 12. 12. 03:15

1. 리눅스 쉘

 

1) 쉘 기능

사용자로부터 키보드 입력을 받거나 파일로부터 입력을 받으면 해당 내용을 분석하여 커널에게 전달한다.

늑수 문자 및 기호를 메타케릭터로 처리하여 커널에게 전달한다.

 

 

2) 쉘 유형

CentOS 9 Stream 에서는 sh, bash 쉘을 제공한다. 그 외 나머지 쉘은 별도로 설치해야한다.

 

 

 

 

 

3) 쉘 관련 사용자 환경 파일

관리자가 일반 사용자의 환경을 설정시켜 주는 경우 읽혀지는 파일은 다음과 같다.

/etc/profile -> 로그인 할 때만 읽혀진다.

/etc/profile.d/*.sh -> 쉘이 실행될 때만다 읽혀진다.

/etc/bashrc -> 쉘이 실행될 때마다 읽혀진다.

 

그리고 일반 사용자가 자신의 한경을 설정 하는 경우 읽혀지는 파일은 다음과 같다.

$HOME/.bash_profile -> 로그인할 때만 읽혀진다.

$HOME/.bashrc -> 쉘이 실행될 때마다 읽혀진다.

 

 

그렇다면 계정 로그인 관련 쉘 파일의 실행 순서는 어떻게 될까.

 

 

  1. 시스템에 필요한 환경 변수 내용들이 설정되어 있다.
  2. 로그인한 계정에 필요한 환경 변수 내용들이 설정되어 있다.
  3. 로그인한 계정에 필요한 명령을 자동으로 실행하기 위한 내용들이 설정되어 있다.
  4. 모든 계정에게 적용되는 전역 변수 내용들이 설정되어 있다.

 

계정 로그아웃을 실시할 경우 읽혀지는 파일은 다음과 같다.

$HOME/.bash_logout -> 로그아웃 할 때만 읽혀진다.

$HOME/.bash_history -> 로그인해서 사용했던 명령들이 저장된다.

 

 

 

쉘 관련 파일 실행 순서를 확인해 보기 위해 실행될 때마다 알림이 뜨도록 설정해 보았다.

 

 

root계정으로 SSH 접속을 실시하여 로그인했을 경우,

bash쉘을 실행했을 경우,

SSH 로그아웃을 실시했을 경우.

 

 

 

 

user1으로 실행했을 경우 몇 가지 알림이 뜨지 않는다.

  • .bash_profile
  • .bashrc
  • .bash_logout

해당 파일들은 사용자 자시의 환경을 설정하는 경우 읽혀지기 때문에 root계정에 해둔 설정이 적용되지 않는다.

 

 

 

 

 

4) 리눅스 변수

변수는 파일로 동작하는 것이 아니라, 메모리에서 저장되어 동작한다. 그렇기 때문에 재부팅되거나 로그아웃 하면 변수는 사라진다. 리눅스에서 선언할 수 있는 변수는 다음과 같다.

 

 

  • 쉘 변수(지역 변수)
    사용자가 임의로 만들어서 사용하는 변수이며, 현재 사용하고 있는 쉘에서만 사용할 수 있고 서브쉘에서는 사용할 수 없다. 또한, 메모리에 저장되어 사용되기 때문에 로그아웃 또는 재부팅되면 변수는 존재하지 않는다.
  • 환경 변수
    자주 사용하는 쉘 변수를 환경 변수에 저장하면, 서브쉘에서도 사용이 가능하다. 또한, 쉘 변수를 '.bash_profile' 또는 '.bashrc' 파일에 환경 변수로 등록하는 설정을 추가하면 로그인 및 재부팅시 사용할 수 있다. 변수 이름은 대문자를 사용하는 것을 권장하며, 'env' 명령을 이용하여 확인할 수 있다.

쉘 변수에 export 변수를 사용하면 환경 변수로 등록할 수 있다.

 

또한 .bashrc나 .bash_profile 파일에 변수를 환경변수로 등록하는 설정을 추가하고

source명령어를 통해 파일을 실행시키면 쉘을 실행시킬 때마다 변수가 환경변수로 지정되기 때문에

재접속을 해도 변수를 사용할 수 있다.

 

 

재접속 후에도 변수가 유지된다.

 

 

 

5) 스크립트 파일 실행

'$HOME/.bash_profile', '$HOME/.bashrc' 파일에 환경 변수, 앨리어스를 설정하면 해당 내용이 바로 적용되지 않기 때문에 재접속을 실시해야 한다. 재접속 없이 설정 내용을 적용하려면 '.(점)', 'sh', 'source', 'bash' 명령을 이용하여 '$HOME/.bashrc' 파일을 다시 실행해야지만 변경된 내용이 적용된다. 또는 로그아웃을 실시하고 로그인을 하면 쉘이 다시 실행되면서 변경된 '$HOME/.bashrc' 파일 내용을 적용한다.

 

 

2. 프로세스 정보 확인

 

 

프로세스란 어떠한 일을 연속적으로 처리하기 위해서 메모리에 올라갂 프로그램 단위이며 각각의 프로세스는 고유의 PID 번호를 할당 받는다.

 

 

1) 프로세스 정보 확인

ps

실행된 프로세스의 정보를 확인한다.

- ps 옵션

  • -f
    실행된 프로세스의 상세정보를 확인한다.
  • -e
    실행되어있는 모든 프로세스의 정보를 확인한다.
  • -U
    해당 계정으로 실행된 프로세스의 정보를 확인한다.
  • -t
    해당 터미널로 접속하여 실행된 프로세스 정보를 확인한다.

 

 

2) 프로세스 관리

FG(Foreground)

Foreground 는 실행한 프로세스가 종료될때까지 다른 프로세스를 사용할 수 없는 상태를 의미한다. 예를 들어 터미널을 실행하여 쉘 프롬프트에서 'gedit' 프로세스를 실행하면, 'gedit' 프로세스가 종료되기 젂까지 쉘 프롬프트를 사용할 수 없다.

 

 

 

 

BG(Background)

 

Background 는 실행한 프로세스의 종료를 대기하지 않고 다른 프로세스를 사용할 수 있는 상태를 의미한다. 예를 들어 터미널을 실행하여 쉘 프롬프트에서 'gedit' 프로세스를 실행하면, 'gedit'와 쉘 프롬프트를 동시에 사용할 수 있다. 그렇기 때문에 여러개의 프로세스를 실행하여 동시 작업을 진행할 경우 효율적이다.

프로세스를 Background 로 실행할 경우, 다음과 같이 프로그램 이름 뒤에 '&'를 추가하여 실행하면 된다.

 

/proc 디렉토리

프로세스가 실행되면 '/proc' 디렉토리에 PID 번호를 디렉토리 이름으로 생성하여 프로세스를 관리한다.

 

 

 

 

3) 프로세스 종료

'kill' 명령어를 이용하여 동작 중인 프로세스를 종료할 수 있다.

대표적인 프로세스 종료 신호 유형 :

1) SIGHUP  -  프로세스 재시작

2) SIGINT  -  현재 프로세스 강제 종료

9) SIGKILL  -  프로세스 강제 종료

15) SIGTERM  -  프로세스 정상 종료

20) SIGTSTP  -  현재 프로세스 강제 중지

 

 

 

 

 

4) 프로세스 실시간 확인

 

  • top
    'top' 애플리케이션은 리눅스에 기본적으로 설치되어 있기 때문에 별도로 설치할 필요 없다
  • htop
    'htop' 애플리케이션은 CentOS Stream 9 에는 설치가 안되어 있기 별도로 설치해야 한다. 그리고 'htop'은 RPM 에서 제공하지 않기 때문에 EPEL(Extra Packages for Enterprise Linux)을 먼저 설치한 다음에 설치해야 한다.

yum 명령어를 이용해서 epel-release를 다운받은 후 htop 명령어를 설치한다.

 

 

 

  • gnome-system-monitor
    리눅스 윈도우에서 사용할 수 있는 GUI 기반 프로세스 정보 확인 도구이다.

 

 

 

 

3. 디스크 파티션 작업

 

1) 파티션

시스템의 하드 디스크 영역을 논리적으로 분할하는 것을 의미하고, 파티션 작업 목적은 다음과 같다.

 - 루트 파티션 손상시 다중 파티션를 이용하여 데이터 보호, 백업, 복원이 가능하다.

 - 서로 다른 파티션에 다른 운영 체제를 설치하여 사용할 수 있다.

 - 파일 시스템 점검 시간 및 부팅 시간 단축

 

 

2) 파티션 구성

물리적인 디스크는 주 파티션 4 개까지 구성이 가능하다. 만약, 파티션 5 개 이상이 필요한 경우에는 파티션 1 개를 확장 파티션으로 구성하여 논리 파티션으로 분할하면 최대 15 개까지 가능하다. 확장 파티션은 마지막 파티션으로 생성하는 것을 권장한다.

 

 

  • 주 파티션
    주 파티션은 총 4 개까지만 생성할 수 있으며, 확장 파티션까지 포함하여 총 4 개까지만 생성할 수 있다.
  • 확장 파티션
    파티션 5 개 이상 필요한 경우 사용하는 파티션이다. 확장 파티션을 생성한 다음에 이 공간을 논리 파티션으로 분리하여 사용한다. 확장 파티션은 1 개만 생성할 수 있으며, 마지막 파티션을 확장 파티션으로 사용하는 것을 권장한다.
  • 논리 파티션
    확장 파티션 공간을 분리해서 사용하는 논리적인 파티션이다.

 

3. 디스크 추가 및 디스크 장치 파일 확인

실습을 하기 위해서 조건에 맞게 VMware 하드 디스크 6개를 추가했다.

 

추가한 6 개의 하드 디스크는 파일 시스템 생성 및 마운트를 하지 않았기 때문에 디스크 정보 확인에는 출력되지 않는다.

 

4) 파티션 작업

 

  • fdisk
    fdisk 도구를 이용하여 파티션을 생성하고 수정하고 삭제할 수 있다.

 

fdisk를 통해 sdb로 진입했다.

m을 입력하면 fdisk에서 쓸 수 있는 명령어들을 확인할 수 있다.

 

 

  • d
    파티션 삭제
  • n
    파티션 분할
  • p
    파티션 정보 확인
  • t
    파티션 타입 변경
  • w
    저장하고 나가기
  • q
    저장하지 않고 나가기

 

주 파티션 1에게 50M를 할당하고 주 파티션 2에게 나머지 용량을 할당하도록 파티션을 분할해 보았다.

 

 

별다른 명령을 입력하지 않으면 초기 설정은

파티션 타입은 주 파티션으로

파티션 넘버는 오름차순으로

퍼스트 섹터는 예약된 섹터를 제외한 가장 작은 섹터로

라스트 섹터는 마지막 섹터로 지정된다.

 

하지만 주 파티션이 이미 세 개가 생성되었을 때는 고정값이 확장 파티션으로 변경된다.

이 점에 유의하면서 

50M 용량을 가진 주 파티션 네 개를 분할해보았다.

 

 

 

 

이번에는 50M 주 파티션 세 개와 확장 파티션 하나, 그리고 그 안에 각각 20M와 30M의 용량을 가진 논리 파티션 두 개를 생성해보았다.

 

 

 

 

 

 

4. 파일 시스템 생성 및 다운로드

 

1) 파일 시스템 생성

파일 시스템이란 파일을 저장하고 관리하는 구조 체계(디스크)를 의미하며, 파일 시스템 생성은 이러한 구조 체계를 생성하는 과정을 의미한다.

 

다음과 같이 '/dev/sdb' 장치 파일을 이용하여 40M 주 파티션 4 개를 생성한다

 

 

w를 이용하여 저장하고 나가기

 

 

이렇게 되면 파티션 작업은 완료되었지만, 사용할 수 있는 하드 디스크로 인식되어 있지 않다.

 

 

2) 파일 시스템 생성

 

'mkfs' 도구를 이용하여 파일 시스템을 생성할 수 있으며, 리눅스에서 파일 시스템 유형으로 ext2, ext3(CentOS 5.x), ext4(CentOS 6.x 부터 지원), xfs(CentOS 7 부터 지원)를 제공한다.

 

 

 

3) 파일 시스템 생성

마운트는 디스크를 사용하기 위해서 디렉토리를 연결하는 것을 의미한다. 파티션 작업 이후 파일 시스템 생성을 하였다면, 해당 파티션를 사용하기 위해서는 마운트 작업을 해야 한다. 'mount' 도구를 이용하여 마운트를 할수 있으며, 반대로 마운트를 해지할 경우에는 'umount' 명령어를 사용한다. 단, 마운트가 된 디렉토리에 파일이 사용중이거나, 마운트가 된 디렉토리 안에서는 마운트 해지가 안된다. 또한, 'mount' 명령어로 마운트하면, 재부팅 이후 마운트된 정보는 초기화된다.

 

마운트를 실시하기 위해 디렉토리를 생성하고 mount명령어를 이용하여 각각의 파티션을 디렉토리에 마운트한다.

 

 

파일 및 디렉토리를 생성하거나 저장할 경우에는 마운트된 디렉토리를 이용한다.

 

 

 

umount명령을 이용하여 마운트를 해지한다.

 

 

umount 명령어를 사용할 때는 파티션을 대상으로 해도 되고 디렉토리를 대상으로 해도 무관하다.

 

-a 옵션을 사용하면 마운트된 디렉토리 전체를 해지한다. ( 단, 사용중인 디렉토리는 마운트 해지가 불가능하다)

 

 

 

 

4) /etc/fstab 파일을 이용한 마운트

 

'mount' 명령을 이용하여 마운트한 디렉토리는 재부팅되면 마운트 정보가 초기화된다. 그렇기 때문에 재부팅 이후에도 마운트 정보가 유지되려면 '/etc/fstab' 파일에 마운트 설정을 실시해야 한다.

 

vi /etc/fstab

 

이렇게 설정을 하고 나면 umount -a , mount -a 를 실행하고 나서도 sdb{1..4}가 마운트된다.

 

 

 

UUID를 이용한 마운트

 

장치 파일 대신에 UUID 장치 식별자를 이용하여 마운트 할 수 있다.