Linux

CH.4 서버를 구축하는 데 알아야 할 필수 개념과 명령-5

낑깡꺙냥 2024. 3. 27. 10:53

4.6 파이프, 필터, 리디렉션

파이프

파이프란 2개의 프로그램을 연결하는 연결 통로의 의미다.

'|'를 사용한다.

ex. ls -l /etc | more  -> ls -l /etc 의 파일을 화면 단위로 출력

 

필터

필터란 필요한 것만 걸러주는 명령어다. grep, tail, wc, sort, awk, sed 명령어 등이 있다.

ps -ef | grep bash -> bash라는 글자가 들어간 프로세스만을 출력한다.

 

리디렉션

> 출력을 파일이나 기타 장치로 처리한다.

< 내용을 입력받는 출처를 정한다.

(덮어쓰기)

>>, << 위와 같으나 덧붙이기

 

*리디렉션 기준 앞에는 무조건 명령어가 와야 된다.

 

리디렉션은 표준 입출력 방향을 바꿔준다.

  •  ls -l > list.txt         -> ls -l 명령 결과를 화면에 출력하지 않고 list.txt 파일에 저장하도록 한다. 만약 list.txt 파일이 기존에 있다묜 덮어쓰도록한다.(overwrite)
  • ls -l 1> list.txt        -> 1: 표준 출력(에러나 기타 특정 상황이 아닌 결과값), 2: 표준 에러
  •  ls -l >> list.txt       -> 위와 같다. 단 list.txt 파일이 기존에 있다면 이어서 쓴다(append)
  • sort < list.txt         -> list.txt 파일을 정렬해서 화면에 출력한다.
  • sort < list.txt > out.txt        -> list.txt 파일을 정렬해서 out.txt 파일에 쓴다.

 

4.7 프로세스, 데몬, 서비스

4.7.1 프로세스

프로세스는 하드데스크에 저장된 실행 코드(프로그램)가 메모리에 로딩되어 활성화된 것 정도로 설명할 수 있다.

프로세스와 관련된 필수 개념 및 용어는 다음과 같다.

*cpu = 프로세서

  • 포그라운드 프로세스 - 실행하면 화면에 나타나서 사용자와 상호작용하는 프로세스를 말한다. (대부분의 응용 프로그램)
  • 백그라운드 프로세스 - 실행은 되었지만 화면에 나타나지 않고 뒤에서 실행되는 프로세스를 말한다. 예를 들어 바이러스 백신과 서버 데몬 등이 있다.
  • 프로세스 번호(PID) - 각각의 프로세스에 할당된 고유 번호. 활성화된 프로세스를 메모리에서 강제로 제거하려면 프로세스 번호를 사용해야 한다.
  • 작업 번호 - 백그라운드 프로세스의 순차 번호를 의미한다. (백그라운드 작업 확인 명령어: jobs로 확인 가능(해당 터미널에서만 가능) / [1]+처럼 +가 붙어있을 경우, 1순위)
  • 부모 프로세스와 자식 프로세스 - 모든 프로세스는 부모 프로세스의 하위에 종속되어 실행된다. 부모 프로세스를 종료하면 그와 종속된 자식 프로세스도 모두 종료된다.

다음은 프로세스와 관련된 주요 명령이다.

  • ps - 현재 프로세스의 상태를 확인하는 명령어
    • ps -ef | grep 프로세스 이름  (ps -ef = ps aux = 모든 실행 보기)
  • kill - 프로세스를 강제로 종료하는 명령어
    • kill -9 프로세스 번호 (시그널 번호 9번은 강제종료)
  • pstree - 부모 프로세스와 자식 프로세스의 관계를 트리 형태로 보여준다.

모든 명령어 뒤에 &을 붙이면 자동으로 백그라운드로 실행된다.

-> gedit 등은 별도의 창으로 실행되므로 백그라운드로 실행해도 아무 문제 없다.

-> 압축 프로그램으로 대용량 압축 파일을 만들 때 시간이 오래 걸리기 때문에 유용

-> vi 에디터와 같이 현재 터미널에서 입출력해야 하는 프로세스를 백그라운드 프로세스로 실행하는 것은 아무 의미 없다.

 

NOTE

더보기

kill signal

kill -2 PID: SIGINT = Ctrl+c

kill -9 PID: SIGKILL 강제 종료

Kill PID (-15): SIGTERM 정상 종료 (생략 가능)

kill -20 PID: Ctrl+z

 

PID 1 = systemd(이전엔 init)

 

/dev/null : null, 없다. (블랙)

 

bg %작업번호 / fg %작업번호 (백그라운드 <-> 포그라운드)

 

 

4.7.2 서비스

데몬이라고 부르는 서비스는 서버 프로세스를 말한다.

 

4.8 서비스와 소켓

서비스는 평상시에도 늘 가동하는 서버 프로세스며, 소켓은 필요할 때만 작동하는 서버 프로세스다. 서비스와 소켓은 systemd(슈퍼 데몬)라는 서비스 매니저 프로그램으로 작동시키거나 관리한다.

 

4.8.1 서비스 (stand-alone)

서비스의 특징은 다음과 같다. (상시구동)

  • 시스템과 독자적으로 구동 및 제공되는 프로세스를 말한다. 웹 서버, DB 서버, FTP 서버 등을 예로 들 수 있다.
  • 실행 및 종료는 대개 systemed start/stop/restart /enable/disable 서비스이름 명령으로 사용된다.
  • 서비스의 실행 스크립트 파일은 /usr/lib/systemd/system 디렉터리에 '서비스이름.service'라는 이름으로 확인할 수 있다. 
  • 부팅과 동시에 서비스의 자동 실행 여부를 지정할 수 있다. 커미널에서 systemctl list-unit-files 명령을 실행하면 현재 사용과 사용 안 함을 확인할 수 있다.
  • 메모리 자원 더 소모

4.8.2 소켓 (inetd, xinetd)

소켓의 특징은 다음과 같다. (필요할 때 구동)

  • 외부에서 특정 서비스를 요청할 경우 systemd가 구동시킨다. 그리고 요청이 끝나면 소켓도 종료된다.
  • systemd가 서비스를 새로 구동하는 데 시간이 소요되기 때문에 소켓이 소비스에 비해 처음 연결되는 시간이 약간 더 걸릴 수 있다.
  • 소켓과 관련된 스크립트 파일은 /usr/lib/systemd/system 디렉터리에 '소켓이름.socket'이라는 이름으로 존재한다.
  • 메모리 자원 덜 소모

4.9 응급 복구

시스템이 복구되지 않는 이유는 무척 다양하다.(ex. 사용자가 비밀번호를 잊어버리는 경우) 이때 해야 하는 작업이 '응급 복구'다.

시스템을 보호하려면 처음 부팅할 때 나오는 GRUB 자체를 편집할 수 없도록 설정할 필요가 있다.

 

4.10 GRUB 부트로더

GRUB 부트로더란 Rocky Linux를 부팅할 때 처음 나오는 선택 화면을 말한다.

GRUB의 기본적인 특징은 다음과 같다.

  • 부트 정보를 사용자가 임의로 변경해 부팅할 수 있다.
  • 다른 여러가지 운영체제와 멀티부팅을 할 수 있다.
  • 대화형 설정을 제공하므로 커널 경로와 파일 이름만 알면 부팅이 가능하다.

 

Rocky Linux에서는 GRUB보다 더 향상된 GRUB 2를 사용한다. GRUB 2의 장점은 다음과 같다.

  • 셸 스크립트를 지원함으로써 조건식과 함수를 사용할 수 있다.
  • 동적 모듈을 로드할 수 있다.
  • 그래픽 부트 메뉴를 지원하요 부트 스플래시 성능이 개선되었다.
  • ISO 이미지를 이용해서 바로 부팅할 수 있다.
  • 설정 파일의 형식이 변경되었지만 더 향상된 냐용을 포함할 수 있다.

GRUB 2의 설정 파일은 /boot/grub2/grub2.cfg 파일(직접 편집해서는 안 된다.)이며 /etc/grub2.cfg는 링크 파일이다.

설정된 내용을 변경하려면 /etc.default/grub 파일 혹은 /etc/grub.d/ 디렉터리의 파일을 수정한 후 grub2-mkconfig 명령을 적용한다.

GRUB 2와 관련된 내용은 방대하므로 상세 내용은 GNU GRUB Manual 2.06을 참조하자.

 

더보기

[COMMAND] << DELIMETER

HERE-DOCUMENT

DELIMETER

 

DELIMETER -> EOF

 

4.11 간단한 커널 컴파일

4.11.1 모듈의 개념과 커널 컴파일의 중요성

커널의 가장 큰 역할은 '하드웨어 지원'이다.

초창기 커널에는 하드웨어를 지원하는 코드를 전부 넣어놓았지만, 시간이 지날수록 지원해야 할 하드웨어가 많아져 커널에 넣어야 할 코드가 많아졌고 커널이 점점 커졌다. 커널이 커지면 컴퓨터의 자원을 많이 차지해 결국 운영체제를 무겁게 만드는 결과를 낳으므로 자주 사용하지 않고 가끔 사용하는 코드는 커널에 넣지 않고 별도로 보관했다가 필요할 때 호출하게 됐고 이러한 코드를 '모듈'이라고 한다.

커널 컴파일 또는 커널 업그레이드는 주로 하드웨어 지원  또는 보안 문제 때문에 하게 된다.

더보기

uname -r: 커널버전

uname -a: 모든 정보

uname -n: 노드 이름

uanme -s: 커널 이름

 

4.11.2 커널 컴파일

커널 업그레이드 순서

  1. 현 커널 버전 확인
  2. 커널 소스 다운로드
  3. 커널 소스 압축 풀기
  4. 커널 설정 초기화
  5. 커널 환경 설정
  6. .config 편집 및 이전 정보 삭제
  7. 커널 컴파일 및 설치
  8. 부트로더 확인