본문 바로가기
Linux/Rocky Linux

[Rocky Linux] 4. 서버를 구축하는 데 알아야 할 필수 개념과 명령어들

by 박기린 2024. 10. 23.
본 내용은 대학 강의시간에 배운 내용을 따로 정리하는 글로, 독자를 구체적으로 정하지 않고 썼습니다.
따라서 읽기에 많은 불편함이 있습니다.

다른 글을 읽으시는 것을 적극 권장드립니다.

가상 콘솔로 이동하기

Rocky Linux는 가상 콘솔을 최대 6개까지 지원합니다.

 

사진의 빨간 밑줄이 그인, tty 옆의 숫자를 통해 몇 번째 콘솔인지를 알 수 있습니다.

 

 

 

Ctrl+ Alt + [F1 ~ F6] 버튼을 통해 다른 가상 콘솔로 이동할 수 있습니다.

이때, Ctrl + Alt + F2는 X윈도우(그래픽모드)로 전환됩니다.

 

 

 

tty3로 접속한 후, root 계정으로 로그인 합니다.

 

 

그리고 

# shutdown -h +5

명령어를 통해,  셧다운 메시지를 보냅니다.

 

 

 

rocky 계정으로 다시 돌아오면,

root에서 보냈던 shutdown 메시지를 확인할 수 있습니다.

 

 

 

 


시스템에 설정된 런레벨을 변경하기

# cd /lib/systemd/system
# ls -l runlevel?.target

위 명령어로 시스템 내의 런레벨들을 조회할 수 있습니다.

 

 

 

 

런레벨 모드 이름 설명 비고
0 Power Off 종료 모드  
1 Rescue 시스템 복구 모두 단일 사용자 모드
2 Multi-User   사용하지 않음
3 Multi-User 텍스트 모드의 다중 사용자 모드  
4 Multi-User   사용하지 않음
5 Graphical 그래픽 모드의 다중 사용자 모드  
6 Reboot 재부팅 모드  

 

 

 

# ls -l /etc/systemd/system/default.target

위 명령어로 현재의 런레벨을 확인할 수 있습니다. (default.target이 graphical.target으로 연결되어 있다. = 그래픽 모드 상태이다.)

 

 

 

 

 

# ln -sf /usr/lib/systemd/system/multi-user.target /etc/systemd/system/default.target

위 명렁어로 5레벨(그래픽 모드)을 3레벨(텍스트 모드 : multi-user)로 변경합니다.

그리고 리눅스를 재실행하면,

 

 

 

 

 

텍스트모드로 켜집니다.

 

 

 

 

 

startx 명령어

# startx

위 명령어를 누르면 X윈도우(그래픽 모드)가 실행됩니다.

컴퓨터를 재부팅하면,

 

 

 

위처럼 그래픽모드로 창이 켜지기는 한데, 문제는 한국어 설정이 먹통이 됩니다.

그래서 일단, Keep Old Names 버튼을 누른 후, 터미널에서 '런레벨을 직접 그래픽모드로 수정'해주면 됩니다.

 

 

 

 

# ln -sf /usr/lib/systemd/system/graphical.target /etc/systemd/system/default.target

 

 

 

 

 


history

$ history

history 명령어를 통해, 지금까지 터미널에 입력했던 모든 명령어를 확인할 수 있습니다.

 

 

 

 

$ history -c

반대로 위 명령어를 통해, history를 전부 삭제할 수 있습니다.

 

 

 

 

 

 


에디터의 종류와 사용법

 

gedit : 그래픽모드 에디터

$ gedit

gedit 명령어를 입력하면 gedit 에디터 창이 나타납니다. 기본으로는 영어부터 입력이 됩니다.

shift+space를 누르면 한영전환이 됩니다.

 

 

 

nano : 텍스트모드 에디터

gedit과 동일하게, 한영전환은 shift+space로 합니다.

 

파일 입력을 마친 후, [컨트롤 + x]를 누르면, 만약 파일 이름이 지정되지 않았을 경우 이름을 작성하라는 알림문구가 뜹니다.

이름 작성을 마친 후 enter를 누르면, 저장이 되면서 nano가 닫힙니다.

 

기존에 작성한 파일을 수정하는 경우, [컨트롤 + o]를 누르면 변경 내용이 저장됩니다.

 

 

 

 

vi : 텍스트모드 에디터

vi는 esc를 누르면 명령 모드에 들어가집니다.

이때 IA를 누르면 입력 모드에 들어가집니다. 글을 작성합니다.

 

다시 esc를 눌러서 명령 모드에 들어갑니다.

이후 ':'를 누르면 ex모드에 들어가집니다.

여기에서, w(저장), n(종료), i(취소), wq(저장 후 종료)를 수행할 수 있습니다. 

 

 

 

 

 

vi를 비정상 종료한다면?

vi로 텍스트를 작성하던 중 비정상적인 종료가 발생한다면,

 

 

 

 

파일에 다시 접근했을 때, 위와 같은 경고문구가 뜹니다.

 

 

 

:q를 눌러서 vi를 종료한 후, 

'.파일이름.txt.swp' 확장자 파일을 확인합니다.

 

 

 

$ rm -f .(파일명).txt.swap

만약 해당 내용이 필요없다면, rm 명령어를 통해서 스왑파일을 제거합니다.

필요하다면, 안내문구를 따라서 복구를 진행한 후 작성을 이어나갑니다.

 

 

 

 

 


CD/DVD, USB 마운트

# mount

연결된 장치를 확인하기 위해 mount 명령어를 입력합니다.

 

 

 

 

# umount <-- unmount가 아닙니다!

umount 명령어를 이용해서 /dev/cdrom을 언마운트합니다.

 

 

 

 

이제 임의로 cd를 넣겠습니다.

[Player - Manage - Virtual Machine Settings]

 

 

 

 

CD/DVD에, Rocky Linux 설치 이미지를 넣습니다.

 

 

 

 

 

그러면 마운트 알림이 뜹니다.

 

 

 

 

mount 명령어를 입력하면, 리눅스 설치 이미지가 마운트된 것을 확인할 수 있습니다.

 

 

 

 

마운트된 파일로 경로를 이동한 후,

 

 

 

언마운트를 시도하면 'target is busy.'라는 문구와 함께 언마운트를 막습니다.

 

 

 

 

 


사용자와 그룹 관리

# useradd <유저이름>

 

위 명령어로 유저를 추가할 수 있습니다.

 

 

 

 

 

# tail /etc/passwd

위 명령어를 입력한 후 하단을 확인하면, 최근에 추가한 유저들을 확인할 수 있습니다.

 

 

 

 

# userdel -r <삭제할 유저 이름>

 

위 명령어를 통해 특정 유저를 삭제할 수 있습니다.

 

 

 

 

그룹 관리

# groupadd <그룹이름>
# tail -5 /etc/group

각각, 그룹을 생성하고, 생성된 그룹을 확인할 수 있는 명령어입니다.

 

 

 

 

# useradd -g <그룹이름> <유저이름>

특정 그룹에 유저를 추가하는 명령어입니다.

 

 

 

 

비밀번호

/etc/shadow에는 유저들의 비밀번호가 담겨 있습니다. 하지만 바로 확인하지 못하게 암호화처리가 되어 있습니다.

만약 유저의 비밀번호가 없는 경우, '!!'로 표시됩니다.

 

 

 

 

# passwd <비밀번호를 바꾸려는 유저 이름>

위 명령어를 통해, 해당 유저의 비밀번호를 수정합니다.

 

 

 

 

 

홈 디렉토리

/home/<유저이름>

root 계정일 경우, 해당 경로를 통해 각 유저의 home 폴더를 확인할 수 있습니다.

 

 

/etc/skel

위 폴더는, 유저들의 홈 디렉토리가 생성될 때 뼈대가 되어주는 파일들이 담겨 있습니다.

root가 직접 커스터마이징해서, 유저가 새로 추가되면서 home 생성될 때마다 일괄적으로 커스터마이징한 home이 생성됩니다.

 

 

 

 

 


파일 권한

# chmod <권한> <파일이름>

위 명령어를 통해, 파일에 권한을 할당할 수 있습니다.

 

 

 

사용자 유형

각 파일 또는 디렉토리에는 세 가지 유형의 사용자가 각각의 권한을 가집니다. 소유자(u), 그룹(g), 그리고 기타(o)입니다.

 

권한의 종류

읽기(Read, r): 파일의 내용을 읽을 수 있는 권한이나 디렉토리 내의 파일 목록을 볼 수 있는 권한

쓰기(Write, w): 파일의 내용을 변경하거나 삭제할 수 있는 권한이나 디렉토리 내에 파일을 생성하거나 삭제할 수 있는 권한

실행(Execute, x): 파일을 프로그램으로서 실행할 수 있는 권한이나 디렉토리에 접근하여 그 내용을 탐색할 수 있는 권한

 

 

숫자로 권한 설정하기

읽기: 4

쓰기: 2

실행: 1

권한을 합산하여 8진수(0~7)로 표현합니다.

chmod 700: 소유자에게 모든 권한을 주고, 그룹과 기타에게는 권한을 주지 않음.
chmod 770: 소유자와 그룹에게 모든 권한을 주고, 기타에게는 권한을 주지 않음.
chmod 777: 모든 사용자에게 모든 권한을 줌.

 

 

문자로 권한 설정하기

u: user(소유자)

g: group(그룹)

o: others(기타 사용자)

a: all(모든 사용자)

chmod u=rwx,g=rx-,o=rx-: 소유자는 모든 권한, 그룹과 기타 사용자는 읽기와 실행 권한만 부여.
chmod u+w: 현재 설정에 소유자의 쓰기 권한만 추가.
# 소유자에게 읽기, 쓰기 권한 부여, 그룹과 기타 사용자에게는 읽기 권한만 부여
chmod 644 <파일>

# 소유자에게 모든 권한 부여, 그룹과 기타 사용자에게는 아무 권한도 부여하지 않음
chmod 700 <파일>

 

 

 

다시 위 사진을 살펴보면, 

소유자는 읽기, 쓰기, 실행 권한 모두 갖고 있고, 그 외에는 읽기와 실행 권한만 주어진 것을 확인할 수 있습니다.

 

 

 

소유자, 그룹 부여하기

chown <유저이름> <파일이름>
chgrp <그룹이름> <파일이름>

각각, 파일에 소유자나 그룹을 할당하는 명령어입니다.

 

 

 

 

허가 거부

권한이 없는 계정으로 파일에 접근하면 허가 거부됩니다.

또, 비록 해당 파일의 소유자더라도 'root' 폴더 내의 파일일 경우, root 계정 외에는 모두 허가 거부됩니다.

 

 

 

 


하드 링크와 심볼릭 링크

basefile이라는 임시 파일을 생성한 후, 여기에 하드 링크와 심볼릭 링크를 생성하겠습니다.

 

 

 

 

$ ln <원본파일> <하드링크 이름>
$ ln -s <원본파일> <심볼릭링크 이름>

위 명령어들을 통해, 각각 하드링크와 심볼릭링크 파일을 생성할 수 있습니다.

 

 

 

심볼릭링크는 '->'로 원본파일이 연결된 지점을 알려줍니다.

 

 

 

mv 명령어로 basefile의 경로를 바꾸니, 심볼릭링크인 softlink 파일이 깨진 것을 확인할 수 있습니다.

반면에, 하드링크는 그대로입니다.

 

 

 

다시 basefile의 경로를 원상복구하니, softlink가 살아났습니다.

 

 

 

 

 


rpm으로 패키지 설치

RPM(Redhat Package Manager)로 Windows의 'setup.exe'과 비슷한 설치 파일입니다.

확장명은 '.rpm'이며, 패키지라고 부릅니다.

 

rpm 명령어는, 다운받아진 rpm 파일들을 설치해주는 명령어 도구입니다.

 

 

 

 

 

vmware 머신 설정에서, CD/DVD에 Rocky 리눅스 설치 이미지를 연결합니다.

 

 

 

패키지 이름 확인

# rpm -qi <패키지 이름>

위 명령어를 통해, 해당 패키지가 이미 설치됐는지 확인합니다.

 

 

 

Rocky 리눅스 설치 iso 파일에서 m(패키지)폴더로 이동합니다. 그리고 mc 패키지가 있는지 확인합니다.

 

 

 

 

패키지 설치

rpm -Uvh <패키지파일이름.rpm>

U(대문자) →  패키지 설치/업그레이드
v → 설치과정 확인
h → 설치진행과정을 "#"마크로 화면에 출력

위 명령어를 통해, mc.rpm 패키지를 설치합니다.

 

 

 

설치가 완료된 후, 터미널에 'mc'를 입력하면,

mc 패키지가 정상 실행된 것을 확인할 수 있습니다.

 

 

 

패키지 제거

# rpm -e <제거할 패키지 이름>

위 명령어로 설치된 패키지를 제거합니다.

 

 

 

 

 

의존성 문제

mc패키지는 설치에 문제가 없었지만, 다른 패키지는 '의존성 문제'를 겪을 수 있습니다.

사전 설치가 필요한 패키지들이 있는데, rpm 설치는 사전 패키지들을 설치하지 않습니다.

그래서 온라인을 통해 자동으로 필요한 패키지들을 찾아서 설치해주는 dnf 패키지 설치 방식이 있습니다.

 

 

 

 


DNF 패키지 설치 - 제거

dnf <설치할 패키지 이름>
dnf -y <설치할 패키지 이름>

위 명령어를 통해 패키지를 설치할 수 있습니다.

사진의 'mysql-errmsg' 패키지는 사전 설치가 필요한 다른 패키지가 존재하는데, dnf는 이를 자동으로 찾아서 설치해줍니다.

 

설치할 때 항상 '진행할까요? [y/N]' 문구가 뜨는데, '-y'를 추가로 입력해서 사전에 문구가 뜨는 것을 방지할 수 있습니다.

 

 

 

 

 

종속패키지까지 함께 설치가 완료된 모습입니다.

 

 

 

 

 

dnf remove <제거할 패키지 이름>
dnf -y remove <제거할 패키지 이름>

 

위 명령어로 패키지를 제거합니다.

 

 

 

DNF groupinstall

자주 함께 설치되는 패키지들을 모아서, 사전에 그룹을 지정해놓은 리스트가 있습니다.

# dnf -v groupinstall "<그룹이름>"

 

 

 

Java Platform이라는 그룹을 groupinstall하니, 각종 패키지들이 한 번에 설치됐습니다.

 

 

 

 

 


cron, at

crontab

실습에 사용될 패키지인 'openrdate'를 설치합니다.

 

 

 

 

# gedit /etc/crontab

crontab 파일로 가서

 

 

01 3 15 * * root run-parts /etc/cron.monthly

코드를 입력합니다.

위 코드의 뜻은, '매월 15일 새벽 3시 1분에 root 계정으로 '/etc/cron.monthly' 디렉토리 안의 모든 파일을 실행한다'는 의미입니다.

 

 

 

 

이제 /etc/cron.monthly 폴더로 이동한 후,

 

# touch myBackup.sh       <-- 파일 생성
# chmod 755 myBackup.sh   <-- 권한 부여

myBackup.sh라는 파일을 생성합니다.

 

 

 

 

 

# gedit myBackup.sh

 

#!/bin/sh

set ${date}
fname="backup-$2$3tar.xz"

tar cfJ /backup/$fname /home

myBackup.sh안에 위 코드를 입력하고 저장합니다.

 

위 코드는 /backup이라는 디렉토리 안에, /home 디렉토리를 압축한 파일을 저장한다는 의미를 가집니다.

즉, 아까 crontab으로 지정한 시간마다, /home 디렉토리가 자동으로 압축되어서 /backup 디렉토리 안에 저장됩니다.

 

 

 

 

# mkdir /backup
# systemctl restart crond

잘 적용되도록 /backup 디렉토리를 생성한 후, crond 모듈을 재시작합니다.

 

 

 

매월 15일 새벽 3시 1분에 백업파일을 생성한다고 했으므로,

 

 

# date [month + day + hour + minute + year]

date 명령어로 아무 달의 15일 새벽 3시로 만듭니다.

 

 

 

백업 압축 파일이 생성된 것을 확인할 수 있습니다.

 

 

 

 

현재 시간으로 복귀하기

# rdate -s time.bora.net

위 명령어를 통해 현재 시간으로 변경할 수 있습니다.

 

 

 

 

at 명령어

# at <시간>
at> 예약 명렁어 입력 [enter]
at> 예약 명렁어 입력 [enter]

at> <EOT> 완료되면 컨트롤 + D

at 명령어를 통해서, 지정된 시간이 지정된 명령어가 작동하게 만들 수 있습니다.

 

 

 

at 예약 명령어 제거하기

# at -l
# atrm 1

at -l로 at로 예약된 명령어 목록을 확인하고,

atrm <숫자>로 해당 순서의 명령어를 제거할 수 있습니다.

 

 

 

 


nmtui

Nmtui (Network Manager Text User Interface)는 네트워크와 관련된 대부분의 작업을 수행할 수 있습니다.

- 자동 IP 주소 또는 고정 IP 주소 사용 결정

- IP주소, 서브넷 마스크, 게이트웨이 정보 입력

- DNS 정보 입력

- 네트워크 카드 드라이버 설정

- 네트워크 장치 (enst 160) 설정

 

 

 

# systemctl start/stop/restart/status NetworkManager

만약 설정을 변경했다면, 꼭 위 명령어를 사용해서 시스템을 재설정/적용해줘야 합니다

 

 

 

 

터미널에 nmtui를 입력하면, 위처럼 실행됩니다.

 

[tab] : 다음으로 이동

[enter] : 선택

 

 

 

 

주소, 게이트웨이, dns 서버 변경이 가능합니다.

 

[q]를 누르면 이전으로 돌아갈 수 있습니다.

 

 

 

 

dns 서버 주소 변경

nmtui 말고, 직접 설정파일의 내용을 수정해서 dns 서버 주소를 변경할 수 있습니다.

# nano /etc/resolv.conf

/etc/resolov.conf에 dns 서버 주소가 담겨 있습니다.

 

 

 

 

nameserver 뒤에 붙는 숫자가 바로 DNS의 주소입니다.

 

 

 

 

 


프로세스 알아보기

프로세스 kill

# yes > /dev/null

 

위 명령어를 통해 무한루프를 생성한 후, 터미널 프로그램 좌측 상단의 + 버튼을 눌러서 새 탭 또는 새 창을 킵니다.

 

 

 

 

ps -ef | grep yes

위 명령어를 통해 , 목적없이 무한으로 돌고 있는 '35263 (2행-2열 확인)' 프로세스를 확인합니다.

 

 

 

 

# kill -9 <제거할 프로세스 넘버>

위 명령어를 통해서 프로세스를 중단할 수 있습니다.

 

 

 

 

프로세스 일시 정지 & 백그라운드 프로세스

무한루프 중에 [컨트롤 + z]를 누르면 일시중지됩니다.

 

 

 

# bg
# jobs
# fg <백그라운드 실행 프로그램의 순서>

bg는 '백그라운드 프로세스'가 무엇이 있는지를 '&'표시와 함께 출력합니다.

jobs는 실행중인 프로세스를 확인합니다.

fg는 백그라운드로 실행되는 프로세스를 포그라운드로 변경합니다.

 

 

 

gedit도 뒤에 '&'를 붙여서 백그라운드로 실행할 수는 있습니다.

백그라운드로 실해앟면 에디터 창이 안 뜨지만, 프로그램은 실행 중입니다.

 

vi, nano는 터미널  자체 출력이라 백그라운드, 포그라운드의 의미가 없습니다.

 

 

 

 


root 비밀번호 분실 시

맨 처음 리눅스를 키고, 부트로더가 켜질 때 e를 누르면 edit 모드가 됩니다.

사진의 6째 줄에 있는 'rhgb quiet' 부분을 삭제하고, 바로 그 자리에 'init=bin/sh' 문구를 삽입합니다.

그리고 [컨트롤 + X]로 재부팅합니다.

 

 

 

 

그러면 이런 창이 켜집니다.

 

 

 

 

root 계정으로 로그인한 후,

passwd 명령어를 통해 비밀번호를 재설정하려고 합니다.

근데, root 파티션이 Read Only (ro) 상태라 변경이 안 됩니다.

 

 

 

 

# mount -o remount,rw /

위 명령어로 root 파티션을 rw 상태로 바꿉니다.

 

 

 

 

이제 변경이 됩니다.

 

 

 

 


부트로더 변경하기

/etc/default/grub

grub 파일을 수정하면 부트로더의 설정을 바꿀 수 있습니다.

 

 

 

부트로더의 설정을 바꾸고 나면, 꼭!

# grub2-mkconfig -o /boot/grub2/grub.cfg

위 명령어를 입력해서 grub 설정 변경사항을 적용해야 합니다.

 

 

 

 

계정락 설정하기

# gedit /etc/grub.d/00_header

 

위 파일을 수정해서 계정락 설정도 할 수 있습니다.

 

 

 

해당 파일 맨 밑에, 위 코드를 작성합니다.

 

 

 

 

이후, grub 파일을 재설정하고 reboot하면,

부트로더가 실행될 때 위 계정을 입력하라는 문구가 뜹니다.

 

 

 


커널 업그레이드

# uname -r

현재 커널 버전을 확인합니다.

 

 

 

 

 

www.kernel.org

위 링크로 가면, 최신 리눅스 커널들을 설치할 수 있습니다.

최신 stabe 버전을 다운받습니다.

 

 

 

 

 

# cd /root/다운로드
# mv linux-커널버전.tar.xz /usr/src/
# cd /usr/src/
# tar xfJ linux-커널버전.tar.xz

'/다운로드'로 이동한 후, 커널 파일을 /usr/src/로 옮깁니다.

그리고 압축해제합니다.

 

 

 

 

# dnf -y install gcc gcc-c++ make bison flex elfutils-libelf-devel openssl-devel dwarves
# dnf -y install qt5*

컴파일에 쓰일 패키지들을 다운받습니다.

 

 

 

 

# make mrproper   <-- 커널 설정 초기화
# make xconfig    <-- 커널 환경 설정 진입

 

 

[Processor type and features -> Generic x86-64]

[DOS/FAT/EXFAT/NT Filesystems -> NTFS write support]

두 항목을 추가합니다.

 

 

 

이후,

# gedit .config

설정파일에 들어간 다음,

 

 

 

 

 

CONFIG_SYSTEM_TRUSTED_KEYRING

CONFIG_SYSTEM_TRUSTED_KEYS

두 부분을 주석처리합니다.

 

 

 

 

# make; make modules_install; make install

마지막으로, 위 코드로 커널을 컴파일합니다.

 

 

 

# ls -l /lib/modules
# ls -l /boot

위 두 명령어를 통해, 현재 커널이 최신 버전으로 설치됐는지를 확인할 수 있습니다.

 

 

 

 

반응형