📝 파이프, 필터, 리다이렉션
- 파이프(pipe)
- 두 개의 프로그램을 연결해주는 연결 통로를 의미
|
문자를 사용함- ex)
# ls -l /etc | more
more
는 출력 결과를 페이지 단위로 보여주는 명령어- 즉, 위 명령은
/etc
디렉터리 안에 있는 모든 파일을 페이지 단위로 출력하는 명령
- 필터(filter)
- 필요한 것만 걸러주는 명령어
grep
,tail
,wc
,sort
,awk
,sed
등- 주로 파이프와 같이 사용
- ex)
# ps -ef | grep bash
# ps -ef
는 현재 작동되는 프로세스를 출력하는 명령- 즉, 위 명령은
bash
가 포함된 프로세스만 골라서 출력하는 명령
- 리다이렉션(Redirection)
- 표준 입출력의 방향을 바꿔줌
>
일 경우에는 덮어쓰기(overwrite),>>
일 경우에는 덧붙이기(append)를 의미- ex)
ls -l > list.txt
# ls -l
은 현재 디렉터리에 있는 모든 파일을 출력하는 명령- 즉, 위 명령은
# ls -l
의 출력 결과를list.txt
파일로 저장하는 명령
📝 프로세스와 데몬
📜 프로세스
- 하드디스크에 저장된 실행코드(프로그램)가 메모리에 로딩되어 활성화 된 것
- 포그라운드 프로세스(Foreground Process)
- 실행하면 화면에 나타나서 사용자와 상호작용하는 프로세스
- 대부분의 응용프로그램이 여기에 속함
- 백그라운드 프로세스(Background Process)
- 실행은 되었지만 화면에는 나타나지 않고 실행되는 프로세스
- 백신 프로그램, 서버 데몬 등
- 프로세스 번호: 각각의 프로세스에 할당된 고유번호
- 작업 번호: 현재 실행되고 있는 백그라운드 프로세스의 순차번호
- 부모 프로세스와 자식 프로세스
- 모든 프로세스는 부모 프로세스를 가지고 있음
- 부모 프로세스를 kill하면 자식 프로세스도 자동으로 kill 됨
- 프로세스 관련 명령
ps
- 현재 프로세스의 상태를 확인하는 명령어
ps -ef | grep [프로세스 이름]
을 주로 사용함
kill
- 프로세스를 종료하는 명령어
kill -9 [프로세스 번호]
는 강제 종료
pstree
: 부모 프로세스와 자식 프로세스의 관계를 트리 형태로 보여줌&
- 특정 명령어 뒤에
&
를 붙이면 해당 명령이 백그라운드 프로세스로 실행됨 - 예로, 아주 큰 파일에 대해 압축을 풀거나 묶을 때 이를 백그라운드 프로세스로 실행시키면 압축 시간을 기다릴 필요 없이 다른 작업을 병행 수행할 수 있음
- ex)
# gedit &
- 특정 명령어 뒤에
📜 서비스(= 데몬)
- 시스템과 독자적으로 구동되어 제공하는 프로세스를 말함
- 예로 웹 서버(httpd), DB 서버(mysqld), FTP 서버(vsftpd) 등이 있음
- 실행 및 종료는 대개
systemctl [start/stop/restart] [서비스 이름]
으로 사용 - 서비스의 실행 스크립트 파일은
/usr/lib/systemd/system/
디렉터리에[서비스 이름].service
라는 이름으로 확인할 수 있음. 예를 들어 Cron 서비스는crond.service
라는 이름의 파일로 존재함
📜 소켓
- 서비스는 항상 가동되지만, 소켓은 외부에서 특정 서비스를 요청할 경우에만 systemd가 구동시키며, 요청이 끝나면 소켓도 종료됨
- 따라서 systemd가 서비스를 새로 구동하는 시간이 소요되기 때문에, 소켓으로 설정된 서비스를 요청할 때에는 처음 연결되는 시간이 서비스(데몬)와 비교했을 때 약간 더 걸릴 수 있음
- 소켓과 관련된 스크립트 파일은
/usr/lib/systemd/system/
디렉터리의[소켓 이름].socket
이라는 이름으로 존재함 - 이와 같은 소켓의 대표적인 예로 텔넷 서버를 들 수 있음
오랫동안 사용된 원격 접속 방법으로, 보안이 취약하나 가장 기본적인 원격 접속방법으로 여전히 쓰이고 있다고 함
📝 응급 복구
- 응급 복구는 시스템이 부팅되지 않을 경우에 수행한다.
- 간단하게 root 사용자의 비밀번호를 분실했을 경우를 가정하고, 이를 응급 복구하는 방법에 대해 알아보자
- 우선 부팅을 수행하고, 아래와 같은 GRUB 부팅 화면에서
e
키를 눌러 편집창으로 접속한다.
- 이후 6번째 줄에 있는
rhgb quiet
를 지우고vga=773
뒤에init=/bin/sh
를 적어준다. - 이는 복잡한 부팅 과정없이 로그인만 자동으로 수행되도록 하는 응급 복구 방법이다.
- 위와 같이 수정하고
Ctrl + x
키를 통해 부팅을 수행한다. - 이후의 화면에서 보면, 루트의 권한(#)으로 프롬프트가 실행되고 있는 것을 확인할 수 있다.
- 즉, 루트의 아이디와 비밀번호를 입력하지 않고도 루트 프롬프트를 실행시킨 것이다.
- 이제 위 상태에서 루트 사용자의 비밀번호를 변경하면 된다.
- 다만 현재 루트(/) 파티션이 읽기 전용으로 마운트되어 있기 때문에, 비밀번호 변경 요청시 아래와 같은 오류를 뱉어낸다.
- 실제로
mount
명령어를 통해 확인해보면 아래와 같이/dev/sda2 on / type xfs (ro, ...)
와 같은 구문을 볼 수 있다./
: 루트 파티션(슬래쉬 파티션)ro
: read only
- 이를 수정하고 비밀번호 변경을 가능하게 하기 위해서는
rw
옵션으로 루트 파티션을 다시 마운트해야 한다. - 따라서 아래와 같은 명령어를 수행해주었다.
- 이제 다시 비밀번호를 변경해보면 성공적으로 변경되는 것을 확인할 수 있다.
- 다시 시스템을 재부팅하여 루트 사용자로 로그인해보면 변경된 비밀번호로 잘 접속되는 것을 확인할 수 있다.
- 다만 이렇게 되면 루트 사용자의 비밀번호를 모르는 사람이더라도 위와 같은 과정만 다룰 수 있다면 마음대로 루트 사용자로 접속할 수 있다는 뜻인 것이다.
- 이를 방지하기 위해서는 GRUB 부팅 화면에서부터 암호화를 걸어, 마음대로 루트 사용자의 비밀번호를 변경할 수 없도록 해야한다.
- 때문에, 관련 파일이 들어있는
/etc/grub.d/
디렉터리로 이동한 뒤 에디터로00_header
파일을 열고, 끝에 cat ~ EOF 구문을 추가해주었다.- 루트 사용자 이름은 'thisislinux', 비밀번호는 '1234'로 설정
- 이후 위 설정을 적용하기 위해 아래와 같은 명령어를 수행해주었다.
- 다시 재부팅하여 GRUB 부팅 화면에서 편집창으로 접속해보면 아래와 같이 먼저 비밀번호를 입력하도록 하는 것을 확인할 수 있다.
📜 GRUB 부트로더
- 특징
- 부트 정보를 사용자가 임의로 변경해 부팅할 수 있다. 즉, 부트 정보가 올바르지 않더라도 수정하여 부팅할 수 있다.
- 다른 여러가지 운영체제와 멀티부팅을 할 수 있다.
- 대화형 설정을 제공하므로 커널 경로와 파일 이름만 알면 부팅이 가능하다.
- GRUB2
- 셸 스크립트를 지원함으로써 조건식과 함수를 사용할 수 있다.
- 동적 모듈을 로드할 수 있다.
- 그래픽 부트 메뉴를 지원하며 부트 스플래시 성능이 개선되었다.
- ISO 이미지를 이용해서 바로 부팅할 수 있다.
- 설정 파일의 형식이 변경되었지만 더 향상된 내용을 포함할 수 있다.
- GRUB2 설정 방법
/boot/grub2/grub.cfg
설정파일은 직접 변경하면 안됨/etc/default/grub
파일과/etc/grub.d/
디렉터리의 파일을 수정한 후grub2-mkconfig
명령어를 실행해 설정
📝 모듈과 커널 컴파일
📜 모듈
- 필요할 때마다 호출하여 사용하는 코드
📜 커널 컴파일(업그레이드)
- 커널 컴파일은 특정 코드를 모듈로 사용하고자 하거나, 반대로 커널에 포함시키고 싶을 때 사용할 수 있음
'🐧 Linux > 이것이 리눅스다(CentOS 8)' 카테고리의 다른 글
[이것이 리눅스다(CentOS 8)] 06장. 하드디스크 관리와 사용자별 공간 할당(2) (0) | 2023.03.31 |
---|---|
[이것이 리눅스다(CentOS 8)] 06장. 하드디스크 관리와 사용자별 공간 할당(1) (0) | 2023.03.31 |
[이것이 리눅스다(CentOS 8)] 04장. 필수개념과 명령어(3) (0) | 2023.03.27 |
[이것이 리눅스다(CentOS 8)] 04장. 필수개념과 명령어(2) (0) | 2023.03.26 |
[이것이 리눅스다(CentOS 8)] 04장. 필수개념과 명령어(1) (0) | 2023.03.25 |