출처 : https://www.youtube.com/watch?v=yeiQ5sSjodU&list=PLVsNizTWUw7FqN2gq79Cb3R6qkS7mqOJk&index=26
파이프, 필터, 리디렉션
파이프 (Pipe)
- 2개의 프로그램을 연결하는 통로
- 명령에 '|' 를 추가해 파이프를 표현한다.
ls -l /etc | more -> ls -l /etc를 입력하면 파일이 너무 많이 출력되어 한 페이지에
모두 담을 수 없으므로 페이지를 나눠서 보겠다는 의미
필터 (Filter)
- 필요한 것만 걸러주는 기능
- grep, tail, wc, sort, awk, sed 등
- 주로 파이프와 같이 사용
ps -ef | grep bash -> ps -ef 명령을 입력하면 모든 프로세스 번호를 출력하므로
bash라는 글자가 들어간 프로세스만 출력
rpm -qa | grep dnf -> 설치된 패키지 중에서 dnf라는 글자가 들어간 패키지를 출력.
그냥 rpm -qa dnf 명령을 실행하면 dnf-data 등은 출력되지 않음
리디렉션 (Redirection)
- 표준 입출력의 방향을 바꾸는 기능
- 입출력을 파일로 처리하고 싶을 때 주로 사용
ls -l > list.txt -> ls -l 명령의 결과를 화면에 출력하지 않고 list.txt 파일에 저장.
만약 list.txt 파일이 기존에 있으면 덮어 씀(overwrite)
ls -l >> list.txt -> 위와 동일. 단 list.txt 파일이 기존에 있으면 기존의 내용에 이어서 씀(append)
sort < list.txt -> list.txt 파일을 정렬해서 화면에 출력
sort < list.txt > out.ktxt -> list.txt 파일을 정렬해서 out.txt 파일에 씀
프로세스, 데몬(서비스)
프로세스
- 프로세스란 하드디스크에 저장된 프로그램이 메모리에 적재되어 활성화 된 것. 자세한 내용은 운영체제 항목 참조
포그라운드 프로세스 (Foreground Process)
- 실행하면 화면에 나타나서 사용자와 상호작용을 하는 프로세스
- 대부분의 응용프로그램
백그라운드 프로세스 (Background Process)
- 실행은 되었지만, 화면에는 나타나지 않고 실행되는 프로세스
- 백신 프로그램, 서버 데몬 등
프로세스 번호
- 각 프로세스에 할당된 고유 번호
- 메모리에서 활성화된 특정 프로세스를 찾고 강제로 제거하기 위해 사용함
작업 번호
- 현재 실행되고 있는 백그라운드 프로세스의 순차번호
부모 프로세스와 자식 프로세스
- 모든 프로세스는 부모 프로세스를 가지고 있다.
- 부모 프로세스를 kill 하면, 자식 프로세스도 자동으로 kill 된다.
- X Window 환경에서 Firefox를 실행하면, X window가 Firefox의 부모 프로세스가 되고 Firefox는 X window의 자식 프로세스가 된다. 만약 Firefox는 그냥 두고 X window만 종료하면 Firefox도 종료가 된다.
ps -> 현재 프로세스의 상태를 확인하는 명령어
ps -ef | grep 프로세스이름 을 주로 사용함 (프로세스의 번호 및 상태를 확인)
kill -> 프로세스를 강제로 종료하는 명령어
-9 옵션을 함께 사용하면 프로세스가 무조건 종료됨
"kill -9 프로세스번호" 를 실행해서 강제 종료 가능
pstree -> 부모 프로세스와 자식 프로세스의 관계를 트리 형태로 보여줌
프로세스 실습
실습 목표
- 포그라운드 프로세스와 백그라운드 프로세스의 상호 전환 연습을 한다.
실습
server 가상머신에서 터미널을 실행하고 yes > /dev/null 명령을 입력한다. 백그라운드에서 yes라는 글자를 무한 출력한다.
백그라운드에서 동작하므로 화면에는 출력되지 않는다.
좌측 상단에 + 아이콘을 눌러서 새로운 터미널을 하나 더 연다.
새로운 터미널 창에 ps -ef | grep yes 명령을 입력하면 yes와 관련된 프로세스의 번호와 상태가 출력된다. 2494가 해당 프로세스의 번호, 2468이 부모 프로세스 번호이다.
kill -9 2494(프로세스 번호) 명령을 입력해서 yes 프로세스를 죽인다. 그러면 처음 터미널에서 죽었음 이 출력되고 해당 프로세스가 종료된다.
혹은 그냥 ctrl + c 를 누르면 종료가 된다.
이번에는 포그라운드에서 백그라운드로 바꾸고 다시 포그라운드로 바꿔보자.
yes > /dev/null 명령을 입력한 다음 ctrl + z 를 누르면 멈춤 상태가 된다.(종료가 아니라 멈춤 상태이다.) bg 명령을 입력해 잠시 중지된 프로세스를 백그라운드로 실행한다.
jobs 명령을 입력하면 현재 백그라운드에서 동작하는 프로세스를 확인할 수 있다. 제일 앞에 있는 숫자 [1] 이 작업 번호이다.
fg 작업번호 (여기서는 1) 명령을 입력해 해당 프로세스를 다시 포그라운드로 실행할 수 있다. ctrl + c를 눌러서 프로세스를 종료시킨다.
이번에는 포그라운드와 백그라운드를 동시에 사용하는 법을 알아보자.
우리가 gedit 명령을 입력하면 gedit 에디터가 실행되는데 이때 터미널에는 명령을 할 수가 없게된다.
하지만 gedit & 명령을 사용하면 gedit 에디터를 사용하면서도 터미널에 명령을 내릴 수 있다. 즉, 백그라운드로 프로세스를 실행할 수가 있게 된다.
서비스와 소켓
서비스
- 시스템과 독자적으로 구동되어 제공하는 프로세스를 의미한다.
- 항상 작동하는 서버 프로세스이다.
- 웹 서버(httpd), DB 서버(mysqld), FTP 서버(vsftpd) 등이 있다.
- 실행 및 종료는 대개 'systemctl start / stop / restart 서비스이름' 으로 사용된다. 예를 들어, 웹 서버 서비스는 systemctl start httpd 명령으로 구동한다.
- 서비스의 실행 스크립트 파일은 /usr/lib/systemd/system/ 디렉토리에 '서비스이름.service' 라는 이름으로 확인할 수 있다. 예를 들어, Cron 서비스는 crond.service 라는 이름의 파일로 존재한다.
- systemctl start / stop / restart 서비스이름 명령을 실행해 이 디렉토리에 있는 대부분의 파일을 실행 / 중지 / 재시작 할 수 있다.
소켓
- 필요할 때만 작동하는 서버 프로세스이다.
- 외부에서 특정 서비스를 요청할 경우에 systemd가 구동시키고, 요청이 끝나면 소켓도 종료된다.
- 소켓으로 설정된 서비스를 요청할 때는 처음 연결되는 시간이 앞에서 설명한 서비스에 비교했을 때 약간 더 걸릴 수 있다. 왜냐하면 systemd가 서비스를 새로 구동하는 데 시간이 소요되기 때문이다.
- 소켓의 대표적인 예로 텔넷 서버가 있다.
- 소켓과 관련된 스크립트 파일은 /usr/lib/systemd/system/ 디렉토리에 '소켓이름.socket' 이라는 이름으로 존재한다.
'Study > 이것이 리눅스다 with Rocky Linux 9' 카테고리의 다른 글
4장. 서버를 구축하는 데 알아야 할 필수 개념과 명령 (16) - 커널 컴파일 (4) | 2023.12.22 |
---|---|
4장. 서버를 구축하는 데 알아야 할 필수 개념과 명령 (15) - 응급 복구와 GRUB 부트로더 (0) | 2023.12.22 |
4장. 서버를 구축하는 데 알아야 할 필수 개념과 명령 (13) - 네트워크 관련 설정과 명령어와 SELinux (1) | 2023.12.21 |
4장. 서버를 구축하는 데 알아야 할 필수 개념과 명령 (12) - CRON과 AT (1) | 2023.12.21 |
4장. 서버를 구축하는 데 알아야 할 필수 개념과 명령 (11) - 파일의 압축과 검색, 시스템 설정 (1) | 2023.12.20 |