Wisdom’s Cloud
[LINUX] 8. 리눅스 관리자를 위한 명령어 본문
RPM(Redhat Package Manager)
-
초창기 리눅스의 경우 새로운 프로그램을 설치하기가 꽤 어려운 문제가 있었는데, 이를 개선하여 레드햇 사에서 window의 setup.exe와 같이 프로그램 설치 후 바로 실행하 수 있는 설치 파일을 제작했다. 설치 파일의 확장명은 *.rpm이며 이를 '패키지(Package)'라고 부른다.
-
rpm 파일의 형식은 일반적으로 다음과 같다. 여기서 '릴리즈 번호'는 문제점을 개선할 때마다 붙여지는 번호를 의미하고, '아키텍처'는 이 파일을 설치할 수 있는 CPU를 뜻한다.
패키지이름 - 버전 - 릴리즈번호 . CentOS버전 . 아키텍처 . rpm
-
예전 리눅스의 프로그램 설치보다는 획기적으로 편리해졌지만, rpm 명령어의 가장 큰 문제점은 '의존성'이다. 예를 들면 CentOS의 기본 웹 브라우저인 Firefox는 당연히 X 윈도 상에서 가동된다. 그런데 X 윈도가 설치되지 않은 상태에서 Firefox를 설치하게 되면 Firefox가 X 윈도에 의존성이 있으므로 설치가 되지 않는다. 그래서 이러한 불편을 해결한 것이 바로 dnf 명령이다.
자주 사용하는 rpm 명령 옵션
rpm -Uvh 패키지파일이름.rpm | 설치 |
rpm -e 패키지 이름 | 삭제 |
rpm -qa 패키지이름 | 시스템에 패키지가 설치되었는지 확인 |
rpm -qf 파일의절대경로 | 이미 설치된 파일이 어느 패키지에 포함된 것인지 확인 |
rpm -ql 패키지이름 | 특정 패키지에 어떤 파일들이 포함되었는지 확인 |
rpm -qi 패키지이름 | 설치된 패키지의 상세 정보 |
rpm -qlp 패키지파일이름.rpm | 패키지 파일에 어떤 파일들이 포함되었는지 확인 |
rpm -qip 패키지파일이름.rpm | 패키지 파일의 상세 정보 |
[실습 1] rpm 패키지를 이용해서 프로그램을 설치해보자.
step 0 Server를 실행하고 root 사용자로 접속하자.
step 1 DVD에 있는 간단한 rpm 패키지를 설치하자. (DVD가 마운트 되어 있지 않다면 마운트 한다.)
step 2 의존성 문제가 있는 rpm 파일을 설치해보자.
* 의존성 문제를 해결하기 위해 메시지에 특정 파일명이나 패키지가 필요하다고 나오기는 했지만,
해당 파일이나 패키지를 설치하는 데 또다시 어떤 패키지가 의존성이 있을 수도 있다.
또한 어떤 rpm 파일이 필요한지 알아내더라도 해당 rpm 파일이 CentOS 8 DVD에 들어 있지 않을 수도 있다.
따라서 이러한 문제를 한 번에 해결하기 위해 CentOS에서는 'dnf'라는 명령을 제공한다.
이 외에도 강제로 패키지를 설치하는 '--force' 옵션과 의존성을 무시하고 설치하는 '--nodeps' 옵션도 사용할 수 있으나,
이러한 옵션은 정상 설치를 보장할 수 없으므로 주의해서 사용해야 한다. *
DNF(DaNdiFied yum)
-
dnf 명령은 rpm 명령의 패키지 의존성 문제를 완전히 해결해준다.
-
rpm 명령어는 설치하려는 rpm 파일이 DVD에 있거나 인터넷에서 미리 다운로드한 후 설치해야 하지만, DNF는 CentOS 프로젝트가 제공하는 rpm 파일 저장소에서 설치할 rpm 파일은 물론, 해당 파일과 의존성이 있는 다른 rpm 파일까지 인터넷을 통해 모두 알아서 다운로드한 후 자동으로 설치까지 해준다.
-
그러므로 사용자는 rpm 패키지 설치 시 의존성 문제를 고민하지 않아도 된다. 단, '인터넷을 통해' 다운로드한 후 설치하게 되므로 당연히 인터넷에 정상적으로 연결된 상태여야 한다.
-
또한 저장소의 URL은 /etc/yum.repos.d/ 디렉터리의 파일에 저장되어 있다.
DNF의 기본 사용법
dnf -y install 패키지이름 | 기본 설치 방법 |
dnf install rpm파일이름.rpm | rpm 파일 설치 방법 |
dnf check-update | 업데이트 가능한 목록 보기 |
dnf update 패키지이름 | 업데이트 |
dnf remove 패키지이름 | 삭제 |
dnf info 패키지이름 | 정보 확인 |
[실습 2] 의존성 문제가 있는 패키지를 dnf 명령으로 설치하자.
step 0 Server를 실행하고 root 사용자로 접속하자.
step 1 실습 1에서 설치에 실패한 mysql-errmsg 패키지를 설치하자. (DVD 연결은 끊는다.)
* 여기서 '패키지'는 한글로 '꾸러미'로 해석되었다.
지금 설치할 패키지의 경우, 먼저 의존성 있는 패키지가 2개고 총 3개의 패키지가 설치되어야 한다는 메시지가 나왔다.
또한 총 다운로드 크기와 설치 크기까지 나타낸다. *
* 패키지를 설치할 것이 확실하다면 "dnf -y install mysql-errmsg" 명령을 입력하여
설치가 끝날 때까지 아무것도 묻지 않고 설치를 완료할 수 있다. *
DNF 고급 사용법
dnf groupinstall "패키지그룹이름" | 패키지 그룹 설치 |
dnf list 패키지이름 | 패키지 리스트 확인 |
dnf provides 파일이름 | 특정 파일이 속한 패키지 이름 확인 |
dnf install --nogpagcheck rpm파일이름. rpm | GPG 키 검사 생략 |
dnf clean all | 기존 저장소 목록 지우기 |
[실습 3] DNF의 고급 기능을 실습해보자.
step 0 초기화한 Server를 실행하고 root 사용자로 접속하자.
step 1 dnf 명령을 실행할 때 필요한 파일을 네트워크가 아닌 DVD에 설치해보자.
[DVD-BaseOS] → 식별자를 지정한다.
name=CentOS DVD BaseOS → 식별자의 이름이다.
baseurl=file:///media/cdrom/BaseOS/ → URL을 네트워크가 아닌 DVD의 BaseOS 위치로 연결한다.
gpgcheck=0 → GPG 인증 체크를 생략한다.
[DVD-AppStream] → 추가로 식별자를 지정한다.
name=CentOS DVD AppStream
baseurl=file:///media/cdrom/AppStream/
gpgcheck=0
* 필요한 패키지를 DVD에서 다운로드하므로 순식간에 설치되었으며,
다운로드한 저장소는 만든 dvd.repo 파일의 식별자인 [dvd]로 되어 있음을 확인할 수 있다. *
* help2man 패키지는 CentOS 8의 PowerTools 저장소에서 제공하지만 DVD에는 들어 있지 않기 때문에
help2man 패키지가 없다고 나온다.
CentOS 8 DVD ISO 파일에는 BaseOS와 AppStream의 패키지 파일이 들어 있지만,
그 외 CentOS 8 패키지가 있는 것은 아니다.
이때 기존의 This.repo를 사용하면 네트워크에서 다운로드하여 설치하므로 이런 문제가 없어지지만,
DVD에 있는 패키지를 설치할 때 누릴 수 있는 빠른 다운로드라는 장점은 없어지므로
step 2에서 이 문제를 해결해보자. *
step 2 dnf 명령 실행 시 CentOS 8 DVD를 우선 사용해서 설치하고, 만약 DVD에 패키지 파일이 없을 경우 네트워크에서 다운로드하여 설치하도록 설정을 변경하자.
[Network-PowerTools]
name=CentOS-$releasever - PowerTools
baseurl=http://mirror.centos.org/centos-8/8.0.1905/PowerTools/x86_64/os/
http://vault.centos.org/8.0.1905/PowerTools/x86_64/os/
gpgcheck=0
* 저장소를 보면 help2man 패키지가 DVD에 없기 때문에 [network] 식별자에서 지정한 곳으로부터 다운로드하고,
DVD에 있는 mc 패키지는 DVD에서 다운로드하는 것을 확인할 수 있다. *
step 3 여러 개의 패키지 묶음인 '패키지 그룹'을 설치해보자.
* 하지만 X 윈도상에서는 패키지 그룹 이름이 한글로 나오기 때문에 설치할 때 불편하다.
따라서 영문 패키지 그룹 이름을 파악하기 위해 "chvt 3" 명령을 입력해
가상 콘솔 3번의 텍스트 모드로 가서 root 사용자로 접속한다. *
dnf clean all → 기존 dnf 저장소 정보 초기화
dnf grouplist hidden > glist.txt → 결과를 glist.txt 파일에 저장
chvt 2 → X 윈도(2번 콘솔)로 돌아감
* 패키지 환경 그룹과 이미 설치된 패키지 그룹 및 추가로 설치 가능한 패키지 그룹 등을 나눠서 표시된다.
먼저, 패키지 그룹은 패키지 파일(*.rpm)을 필요한 주제에 따라 묶어놓은 것으로, 1개 이상의 패키지 파일을 포함한다.
패키지 환경 그룹은 더 큰 단위로 패키지 그룹을 주제에 따라 묶어 놓은 것이라고 생각하면 된다.
즉, 패키지 파일 ⊂ 패키지 그룹 ⊂ 패키지 환경 그룹으로 포함 관계를 갖는다. *
파일 압축
-
리눅스에서 많이 볼 수 있는 압축 파일의 확장명은 xz, bz2, gz, zip, Z 등이다.
-
예전에는 주로 확장명 gz를 사용했으나, 최근에는 압축률이 더 좋은 xz나 bz2를 더 많이 사용하는 추세다.
xz: 확장명 xz로 압축하거나 풀어줌. 비교적 최신 압축 명령이며 압축률이 뛰어남
xz 파일이름 | '파일이름'을 압축 파일인 '파일이름.xz'로 만들며 기존 파일은 삭제됨 |
xz -d 파일이름.xz | '파일이름.xz' 압축 파일을 일반 파일인 '파일이름'으로 만듦 |
xz -l 파일이름.xz | '파일이름.xz' 압축 파일에 포함된 파일 목록과 압축률 등을 출력 |
xz -k 파일이름 | 압축 후에 기존 파일을 삭제하지 않고 그대로 둠 |
bzip2: 확장명 bz2로 압축하거나 풀어줌
bzip2 파일이름 | '파일이름'을 압축 파일인 '파일이름.bz2'로 만듦 |
bzip2 -d 파일이름.bz2 | '파일이름.bz2' 압축 파일을 일반 파일인 '파일이름'으로 만듦 |
bunzip2: 확장명 bz2의 압축을 풀어줌. 'bzip2 -d'와 동일한 명령
gzip: 확장명 gz로 압축하거나 풀어줌
gzip 파일이름 | '파일이름'을 압축 파일인 '파일이름.gz'로 만듦 |
gzip -d 파일이름.gz | '파일이름.gz' 압축 파일을 일반 파일인 '파일이름'으로 만듦 |
gunzip: 확장명 gz의 압축을 풀어줌. 'gzip -d'와 동일한 명령
zip: Windows용과 호환되는 확장명 zip으로 압축하거나 풀어줌
zip 생성할파일이름.zip 압축할파일이름 | 압축할 파일 이름을 '생성할파일이름.zip'으로 만듦 |
unzip: Windows용과 호환되는 zip으로 묶은 압축 파일을 풀어줌
unzip 압축파일이름.zip | '압축파일이름.zip'의 압축을 풀어줌 |
파일 묶기
-
알집이나 반디집 같은 Windows용 압축 프로그램을 생각해보면 aaa, bbb라는 2개 파일을 압축했을 때 ccc.zip이라는 1개의 압축 파일이 생긴다. 즉, aaa와 bbb라는 두 파일이 ccc라는 1개의 파일로 묶인 후 압축된 것이다. 이는 Windows 압축 프로그램이 '파일 압축'과 '파일 묶기'를 한꺼번에 하기 때문이다.
-
하지만 이와 조금 다르게 리눅스에서는 '파일 압축'과 '파일 묶기'를 원칙적으로 별개의 프로그램으로 실행하도록 되어 있다. 물론 사용자의 편의를 위해 한 번에 할 수 있는 옵션도 제공한다.
-
파일 묶기 명령어는 tar이며, 묶인 파일의 확정명도 tar다.
tar: 확장명 tar로 묶음 파일을 만들거나 묶음을 풀어줌
c (동작) | 새로운 묶음을 만듦 |
x (동작) | 묶인 파일을 풀어줌 |
t (동작) | 묶음을 풀기 전에 묶인 경로를 보여줌 |
C (동작) | 묶음을 풀 때 지정된 디렉터리에 압축을 풀어줌. 지정하지 않으면 묶을 때와 동일한 디렉터리에 묶음이 풀림 |
f (필수) | 묶음 파일 이름 지정. 생략하면 테이프로 보내짐 |
v (옵션) | 파일이 묶이거나 풀리는 과정을 보여줌 |
J (옵션) | tar + xz |
z (옵션) | tar + gzip |
j (옵션) | tar + bzip2 |
# tar cvf my.tar /etc/sysconfig/ | 묶기 |
# tar cvfJ my.tar.xz /etc/sysconfig/ | 묶기 + xz 압축 |
# tar cvfz my.tar.gz /etc/sysconfig/ | 묶기 + gzip 압축 |
# tar cvfj my.tar.bz2 /etc/sysconfig/ | 묶기 + bzip2 압축 |
# tar tvf my.tar | 파일 확인 |
# tar xvf my.tar | tar 풀기 |
# tar cxvf newdir my.tar | newdir에 tar 풀기 |
# tar xfJ my.tar.xz | xz 압축 해제 + tar 풀기 |
# tar xfz my.tar.gz | gzip 압축 해제 + tar 풀기 |
# tar xfj my.tar.bz2 | bzip2 압축 해제 + tar 풀기 |
파일 위치 검색
find 경로 옵션 조건 action | 옵션: -name, -user(소유자), -newer(전, 후), -perm(허가권), -size(크기) action: -print(기본값), -exec(외부 명령 실행) |
which 실행파일이름 | PATH에 설정된 디렉터리만 검색, 절대 경로를 포함한 위치 검색 |
whereis 실행파일이름 | 실행 파일 및 소스, man 페이지 파일까지 검색 |
locate 파일이름 | 파일 목록 데이터베이스에서 검색하기 때문에 매우 빠르고 유용하지만, updatedb 명령을 1회 실행해야 사용할 수 있음 |
시스템 설정
[설정]의 [날짜 및 시각] | 표준 시간대 변경 |
nmtui | 네트워크 설정 |
firewall-config | 방화벽 설정, 외부에 서비스하기 위해 포트를 열 때 사용 |
ntsysv | 서비스(데몬)의 시작, 중지, 재시작 및 사용 여부를 설정 |
cron
-
주기적으로 반복되는 일을 자동으로 실행할 수 있도록 시스템 작업을 예약해놓은 것을 cron이라 부른다.
-
cron과 관련된 데몬(서비스)은 crond이고, 관련 파일은 /etc/crontab이며, /etc/crontab의 형식은 다음과 같다.
분 시 일 월 요일 사용자 실행명령
-
분에는 0~59, 시에는 0~23, 일에는 1~31, 월에는 1~12, 요일에는 0~6이 올 수 있다. 요일은 0부터 일요일로 시작한다. 사용자는 명령을 실행할 사용자가, 실행 명령에는 그 시간에 실행할 명령이 올 수 있다. 간단한 예를 보면 다음과 같다.
00 05 1 * * root cp -r /home /backup
-
*으로 표시된 월과 요일은 매월과 모든 요일을 의미한다. 즉, 매월 1일 새벽 5시 00분에 실행한다는 의미이며, 사용자는 root의 권한이고, 명령은 cp -r /home /backup 명령을 실행하여 /home 디렉터리가 통째로 /backup 디렉터리에 복사된다.
-
또한 cron의 경우, 주기적으로 실행할 내용을 디렉터리에 넣어놓고 작동하기 때문에 다음과 같이 /etc/crontab 파일이 시간별, 일별, 주별, 월별로 호출하는 디렉터리를 보여준다.
at
-
cron은 주기적으로 반복되는 작업을 예약하는 것이지만, at 명령어는 일회성 작업을 예약하는 것이다. 즉, 예약해두면 한 번만 실행되고 소멸된다.
-
명령어 사용법은 예약 at 시간 -> 예약 명령어 입력 후 Enter -> 완료되면 Ctrl + D -> 확인 at -l -> 취소 atrm 작업번호 순으로 입력하면 된다.
[실습 4] 매월 15일 새벽 3시 1분에 /home 디렉터리와 그 하위 디렉터리를 /backup 디렉터리에 백업하자.
step 0 초기화한 Server를 실행하고 root 사용자로 접속하자.
step 1 cron 설정을 하자.
#! /bin/sh
set $(date)
fname="backup-$2$tar.xz"
tar cfJ /backup/$fname /home
→ 현재 날짜를 추출해서 /backup 디렉터리에 backup-현재날짜.tar.xz라는 파일로 /home 디렉터리 전체의 백업 파일을 생성하라는 의미다.
date 011503002027 → 01월 15일 03시 00분 2027년으로 날짜를 바꾼다.
systemctl restart crond → 실행 후 1~2분 기다린다.
ls -l /backup
date 021503002027 → 02월 15일 03시 00분 2027년으로 날짜를 바꾼다.
systemctl restart crond → 실행 후 1~2분 기다린다.
ls -l /backup
step 2 at 명령어로 내일 새벽 4시에 시스템을 최신 패키지로 업데이트하고, 완료되면 시스템을 재부팅하도록 예약해보자. 그리고 예약된 내용을 삭제해보자.
rdate -s time.bora.net
at 4:00am tomorrow
dnf -y update
reboot
Crtl + D 누름 → 작업 예약을 완료한다.
at -l → 제일 앞에 출력되는 번호가 작업번호다.
atrm 작업 번호 → 작업을 삭제한다.
at -l
'LINUX > Beginner' 카테고리의 다른 글
[LINUX] 10. 파이프, 필터, 리디렉션 (0) | 2021.01.30 |
---|---|
[LINUX] 9. 네트워크 관련 설정과 명령어 (0) | 2021.01.30 |
[LINUX] 7. 사용자 관리와 파일 속성 (0) | 2021.01.22 |
[LINUX] 6. 리눅스 기본 명령어 (0) | 2021.01.21 |
[LINUX] 5. 리눅스 운영에 필요한 개념 (0) | 2021.01.21 |