이것이 리눅스다(13) - 필수 개념과 명령어(파이프 필터 리디렉션, 프로세스, 서비스와 소켓)
파이프, 필터, 리디렉션
파이프(pipe)
두 개의 프로그램을 연결해 주는 연결통로의 의미로 |
를 사용한다. ex. ls -l /etc | more
필터(filter)
필요한 것만 걸러 주는 명령어. grep, tail, wc, sort, grep, awk, sed 등 주로 파이프와 같이 사용 ex. ps -ef | grep bash
리다이렉션(redirection)
표준 입출력의 방향을 바꿔 줌.
ex. ls -l > list.txt
soft < list.txt > out.txt
꺾쇠가 하나이면 overwrite, 두 개이면 append이다.
프로세스, 데몬
하드디스크에 저장된 실행코드(프로그램)가 메모리에 로딩되어 활성화된 것. 예를 들어 워드는 프로그램이고 그 워드를 실행시켜 메모리에 로딩되면 프로세스가 되는 것이다.
포그라운드 프로세스
실행하면 화면에 나타나서 사용자와 상호작용을 하는 프로세스로 눈에 보이는 대부분의 응용 프로그램을 말한다.
백그라운드 프로세스
실행은 되었지만, 화면에는 나타나지 않고 실행되는 프로세스를 말한다. 백신 프로그램 등이 있다.
프로세스 번호
각각의 프로세스에 할당된 고유번호. 프로그램은 하나이지만 프로세스는 여러번 실행될 수 있기 때문이다.
작업 번호
현재 실행되고 있는 백그라운드 프로세스의 순차번호.
부모 프로세스와 자식 프로세스
모든 프로세스는 부모 프로세스를 가지고 있다. 부모 프로세스를 kill하면, 자식 프로세스도 자동으로 kill 된다.
프로세스 관련 명령
ps
: 현재 프로세스의 상태를 확인하는 명령어.ps -ef | grep <프로세스 이름>
을 주로 사용한다.kill
: 프로세스를 강제로 종료하는 명령어.kill -9 <프로세스 번호>
는 강제 종료이다.pstree
: 부모 프로세스와 자식 프로세스의 관계를 트리 형태로 보여준다.
프로세스 실습
ps -ef | grep bash
를 통해 bash 관련 프로세스를 검색한다. 그러면 다음과 같은 출력이 나온다.
root 2556 2479 0 10:26 pts/1 00:00:00 bash
숫자가 두 개가 나오는데 앞의 숫자는 해당 프로세스의 번호이고, 두 번째는 부모 프로세스의 프로세스 번호이다.
yes > /dev/null
을 통해 무한루프를 도는 명령을 해보자. 이 명령어는 y를 계속해서 블랙홀 속에 넣어주는 명령어라고 생각하면 된다. 해당 프로세스를 중지하려면 ps -ef | grep yes
로 프로세스 번호를 알아내고, kill -9 <프로세스 번호>
로 종료하면 된다.
이 명령어는 포그라운드에서 우리가 보는 앞에서 실행되고 있었다. 이를 백그라운드로 실행시켜보자. 우선 yes > /dev/null
를 하고, Ctrl+z
로 잠시 프로세스를 중지한다. 그리고 bg
를 입력하면 프로세스가 백그라운드에서 돌게된다.
[root@localhost ~]# yes > /dev/null
Killed
[root@localhost ~]# yes > /dev/null
^Z
[1]+ Stopped yes > /dev/null
[root@localhost ~]# bg
[1]+ yes > /dev/null &
이를 다시 포그라운드로 실행시키려면 fg <번호>
를 입력하면 된다.
하지만 실제로 fg
, bg
와 같은 명령어는 잘 쓰지 않는데, 백그라운드 명령어로 가장 많이 쓰는 것은 &
이다. 만약 백그라운드로 실행하고 싶은 명령어가 있다면 명령어 뒤에 &
를 붙이면 된다.
예를 들어 gedit &
을 입력하면 터미널은 터미널대로 gedit은 gedit대로 사용할 수 있는 것이다. 보통 큰 파일을 압축할 때 많이 사용한다.
서비스와 소켓
서비스=데몬
시스템과 독자적으로 구동되어 제공하는 프로세스를 말한다. 예로 웹 서버(httpd), DB 서버(mysqld), FTP 서버(vsftpd) 등이 있다.
systemctl start/stop/restart 서비스이름
: 서비스를 실행 및 종료할 수 있는 명령어이다./usr/lib/systemd/system/
: 서비스 실행 스크립트 파일은 대게(모두는 아니다) 이 디렉토리에 서비스이름.service라는 이름으로 확인할 수 있다.
소켓
서비스는 항상 가동되지만, 소켓은 외부에서 특정 서비스를 요청할 경우에 systemd가 구동시킨다. 그리고 요청이 끝나면 소켓도 종료된다.
/usr/lib/systemd/system/
: 소켓과 관련도니 스크립트 파일은 이 디렉토리에 소켓이름.socket이라는 이름으로 존재한다.
Leave a comment