YUM(Yellow dog Update Modified) Repository

우리가 리눅스(RHEL 계열)에서 프로그램의 설치/삭제를 도와주는 패키지 관리 도구이다.

여기서 '도와주는' 이라고 표현을 했는데, 그 이유는 저 수준(Low Level) 패키지 관리 도구인

'RPM(Redhat Package Manager)'의 경우 패키지 종속성의 문제로 인해

내가 만약 "Game" 이라는 패키지를 설치하겠다고 하면,

"Game" 이라는 패키지 하나만 설치하면 되는 것이 아닌

종속되어 있는 패키지들을 전부 설치해야 하는 것이다.

 

.. 이게 맞는 비유일지는 모르겠으나 "책상" 이라는 물체를 이루려면

"책상다리", "못", "받침대" 등이 서로 연결되어 책상을 이루는 것과 비슷하다.

 

이렇듯 우리가 하나의 패키지를 손수 설치하려면 그 과정이 짧을 수도 있겠지만 

대부분의 패키지는 갖가지 다른 패키지(요소)들로 이루어져 매뉴얼로 

설치하기는 굉장히 귀찮고 어려울 수도 있는 일이다.

 

이런 점을 보완해 원하는 패키지만 설치를 요청하면 그에 종속된 패키지까지 

전부 설치를 도와주는 "YUM" 이라는 패키지 관리 툴이다.

 

▼ yum 명령어의 사용 방식으로는 아래 코드블럭을 참고하자

yum
# Yellow dog Update Modified

yum ~ install         
# 패키지를 설치

yum ~ check-update    
# 설치된 패키지 중에서 업데이트 가능한 패키지를 출력

yum update ~          
# 패키지를 업데이트 해주는 명령어
# 전체 업데이트도 가능하나, yum update -x [package] 처럼 
# 특정 패키지를 제외하고 나머지를 업데이트 하는 것도 가능

yum search ~          
# Repository 에서 설치될 수 있는 가용한 패키지를 검색

yum list ~            
# 패키지의 설치 여부 등을 학인할 때 사용

 

 

● YUM Repository

yum에 패키지 연결경로를 추가시킬 때 소스 패키지와 이와 관련된 패키지들을 모아놓은 곳을

"리포지터리(Repository)" 라고 칭한다, "저장소"의 의미를 가지고 있다.  

몇 가지 대표적인 방법으로 리포지터리를 사용해서 필요한 패키지를 설치할 수 있다.

 

1. CentOS 설치 시 자동으로 생성되는 "BASE"와 같은 리포지터리를 사용

2. CentOS 설치 시 DVD 등을 리포지터리로 사용

3. "EPEL"이나 "REMI"와 같은 별도의 리포지터리 설치해서 사용

 

 

ls /run/media/centos/~

'CentOS-7-x86_64-DVD-2009' 이미지를 가상머신에 마운트 후

Packages 디렉토리 안의 내용을 확인해보면 약 4070개의 rpm 패키지가 있는 것을 확인할 수 있다.

 

 

(sudo) yum install -y ftp createrepo

내부 저장소 설정을 위해 필요한 패키지 ftp, createrepo를 다운로드

 

 

sudo mkdir /var/ftp/pub/local-repo
sudo cp -arp /[Mount Point]/Packages/* /var/ftp/pub/local-repo

ll /var/ftp/pub/local-repo
total 4000996
-rw-rw-r--. 1 root root  1818404 Oct 15  2020 389-ds-base-1.3.10.2-6.el7.x86_64.rpm
-rw-rw-r--. 1 root root   730568 Oct 15  2020 389-ds-base-libs-1.3.10.2-6.el7.x86_64.rpm
-rw-rw-r--. 1 root root   152952 Aug 10  2017 abattis-cantarell-fonts-0.0.25-1.el7.noarch.rpm
-rw-rw-r--. 1 root root   550448 Oct 15  2020 abrt-2.1.11-60.el7.centos.x86_64.rpm
-rw-rw-r--. 1 root root   199288 Oct 15  2020 abrt-addon-ccpp-2.1.11-60.el7.centos.x86_64.rpm
.
.
.

위의 명령어를 참조하여 DVD에 들어있는 약 4070개의 ~.rpm 패키지를

내부 저장소로 사용할 디렉토리에 복사해준 뒤 내용을 확인해본다.

** 패키지 파일의 개수는 CentOS 이미지 파일의 버전에 따라 상이할 수 있다.

 

 

grep -v '^#' /etc/yum.repos.d/CentOS-Base.repo

주석을 제외한 후 해당 파일을 확인해보면

전부 웹 사이트로 연결되는 것을 확인할 수 있다. 즉 yum을 이용하여 패키지를 다운 받으려면

인터넷에 필히 연결이 되어있어야 한다는 뜻. 이 때, ftp나 http의 경우에는 '://' 로 사용되지만,

웹 상에서 파일을 지정할 때에는 ':///' 식으로 사용된다는 차이점이 존재한다.

 

외부망(웹 사이트)으로 접근하는 것이 아닌 내부 저장소(Local Repository)를 통해

패키지 다운로드를 관리하는 실습을 진행

** 실습을 위해 CentOS7 머신(1) 과 머신(2)를 이용하였다.

 

 

'createrepo -v(verbose)' 명령어를 이용해 repository 메타데이터를 생성, 과정을 보인다.

 

 

방화벽 설정

sudo firewall-cmd --permanent --zone=public --add-sercive=ftp
sudo firewall-cmd --reload
sudo firewall-cmd --list-services

sudo systemctl restart vsftpd && sudo systemctl status vsftpd

 

 원활한 실습을 위해 Selinux = Permissive로 진행

setenforce 0   
# SELinux의 보안 설정을 임시적으로 비활성화

getenforce     
# 현재 SELinux의 상태를 출력

Permissive     
# 해당 상태로 표시되면 비활성화 되었음을 확인할 수 있다.

** 여기서 한 가지 빼먹은 부분이 있었는데 현재 상태로는 아마 클라이언트 PC에서 패키지 

다운로드를 시도하면 Mirror Site를 찾을 수 없다 등의 오류가 발생할 수 있다.

'SELinux' 보안설정에 의한 차단 같은데, 이 부분도 SELinux의 정책을 변경하면

굳이 비활성화를 하지 않더라도 연결에  지장이 없을 것으로 예상된다.

 

현재는 정확한 매커니즘을 이해하지 못 하고 있으므로,

** 추후에 SELinux에 대해서 학습할 때 추가적인 방안을 포스팅

 

이제 내부 저장소 서버에서의 설정은 거의 끝났다. 

 

 

 클라이언트 머신(2)에 접속하여 실습을 마무리 해본다.

sudo yum install -y ftp

내부 저장소 연결을 위한 ftp 패키지를 설치

 

 

Local Repository 설정 전 "nmap" 패키지 설치를 통해 현재 설정된 경로를 확인

Local Repository 설정이 완료되기 전 yum 명령어를 통해 패키지 다운로드를 시도했을 때, 

시스템 디폴트 설정인 "base" 리포지터리를 통해서 패키지를 다운하는 것을 확인해볼 수 있다.

 

 

서버와 반대로 "client.repo"라는 이름의 저장소 경로 파일을 생성

'baseurl'의 경우 서버의 입장인 머신(1) 에서는 "/var/vsftpd/pub/server"라는 경로에 설정되어 있지만,

클라이언트 입장의 머신(2)에서는 머신(1)의 IP주소 연결될 디렉토리의 경로까지 설정을 해줘야한다.

 

** 'gpgcheck'란 외부에서 받아오는 파일의 무결성을 인증해주는 키로 인증하는 것을 의미,

기본 값으로는 각종 패키지들을 외부의 ftp 서버에서 파일을 받아오는 형식이기에

인증을 활성화 시켜줬지만, 현재는 내부 저장소에서 패키지를 받아올 것이기에

굳이 활성화시키지 않은 것이다. 

 

 

이건 편법이다. 원래 이렇게 하면 안된다.

리포지터리의 동작여부를 직관적으로 느낄 수 있도록 임의로 디폴트 리포지터리를

전부 옮기고 해당 디렉토리에 새로 생성하여 설정해 둔 "client.repo"파일만 남겨 놓았다.

 

** 이 부분도 원래는 각각의 리포지터리에 우선순위(Priority) 값을 줘서 우선순위 지정이 가능함

 

 

sudo yum erase -y nmap
# remove가 아닌 erase로 종속파일 제외 앞에서 설치한 'nmap'만을 삭제

sudo yum clean all
# yum 캐시 데이터를 삭제(오류를 피하기 위함)

sudo yum repolist all
# Repository 목록을 출력

 

"yum repolist all" 명령어를 이용해 현재 활성화 된 리포지터리를 확인

이 외의 것들을 모조리 다른 디렉터리에 옮겨뒀으니 당연히 한 가지만 활성화가 되어있다.

 

 

패키지 설치 시 리포지터리가 본인이 임의로 설정한 "client"를 참조하는 것을 확인

ftp를 통해 내부 서버에 있는 패키지를 받아오는 과정이다.

'Linux_System' 카테고리의 다른 글

[Linux]Process(1)_ps  (0) 2022.11.05
[Linux]Software_Compile  (0) 2022.10.31
[Linux]Basic_Command(2)  (0) 2022.10.10
[Linux]Basic_Command(1)  (0) 2022.10.06
[Linux]LVM  (1) 2022.09.22

리눅스 명령어(Linux Command)

저번 포스트에서는 리눅스를 처음 접하게 되어 콘솔에서의 

작업을 익숙하게 해주기 위한 기본적인 명령어를 알아보았다.

저번에도 서술했듯이 우리가 그래픽이 아닌 단순 콘솔창에서 작업을 하는 이유는

빠르고 가볍고 단순하기 때문이다. 예를 들어서 시스템에서 

사용자의 계정을 추가한다는 예시를 들었을 때, 그래픽 환경에서의 작업

제어판 -> 사용자계정 -> 사용자 추가 및 비밀번호 설정 ... 등의 과정을 거쳐서

이루어지지만, 콘솔창에서는 useradd, adduser [password] ... 등의 간단한 명령어와 함께 

원한다면 생성과 동시에 사용자의 비밀번호를 설정해줄 수도 있다.

이번 포스트에서는 전반적으로 서비스에 관련된 명령어에 대해 알아보려 한다.

 

** 당연히 운영체제마다 명령어는 상이할 수 있다..

(필자는 리눅스 CentOS7 / Ubuntu18.04 기준)

 

 

● 명령어 netstat(network statistics) / ss(socket statistics)

네트워크의 소켓상태 및 라우팅 테이블 등을 모니터링할 때 사용되는 명령어로

각종 서비스 시작 및 방화벽 설정 .. 등 네트워크 관련된 작업을 실행할 때 주로 사용된다.

'netstat'의 경우 'net-tools' 패키지에 포함된 명령어이고, 'ss'의 경우 'iproute2' 패키지에 포함 되어있는데

버전마다 다르겠지만, 운영체제 설치 시 비교적 최신버전의 배포판에서

명령어 'ss'는 추가적인 패키지 설치 없이 사용이 가능한걸로 알고있다.

사용법으로는 netstat / ss [옵션] 식의 구성으로 사용된다.

 

** 현재는 'netstat'보다는 'ss'의 사용을 권장한다고 한다.

 

[centos@localhost centos]$ ss -nltp   # ss 명령어로 네트워크 상태를 모니터링
State       Recv-Q Send-Q       Local Address:Port            Peer Address:Port              
LISTEN      0      128          *:111                         *:*                   users:(("rpcbind",pid=746,fd=8))
LISTEN      0      128          *:20048                       *:*                   users:(("rpc.mountd",pid=1251,fd=8))
LISTEN      0      5            192.168.122.1:53              *:*                   users:(("dnsmasq",pid=1558,fd=6))
LISTEN      0      128          *:36597                       *:*                   users:(("rpc.statd",pid=1231,fd=9))
LISTEN      0      128          *:22                          *:*                   users:(("sshd",pid=1225,fd=3))
LISTEN      0      128          127.0.0.1:631                 *:*                   users:(("cupsd",pid=1229,fd=11))
[centos@localhost centos]$ netstat -nltp   # netstat 명령어로 네트워크 상태를 모니터링
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      746/rpcbind         
tcp        0      0 0.0.0.0:20048           0.0.0.0:*               LISTEN      1251/rpc.mountd     
tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN      1558/dnsmasq        
tcp        0      0 0.0.0.0:36597           0.0.0.0:*               LISTEN      1231/rpc.statd      
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1225/sshd

필자 기준으로 많이 사용되는 '-nltp(LISTEN 상태의 소켓, 포트의 상태와 프레세스 정보)'옵션으로

두 명령어의 출력 내용을 비교해보았다. 이렇게만 보면 차이점이 크게 있어보이지는 않는다. 

대표적인 장점으로는 'netstat' 보다는 'ss"가 정보를 불러오는 속도가 빠르다는 점이 있다고 한다.

 

** 추가적인 정보를 알게되면 수정하여 포스팅하겠읍니다..

 

 

● 명령어 head  / tail

단어에서 의미하는 바와 같이 어느 파일의 head(머리 부분, 위 부분), tail(꼬리 부분, 아래 부분)

의 일부분(기본 값 : 10 줄)을 출력해주는 역할을 해주는 명령어이다. 

기본 값이 아닌 옵션을 이용해 원하는 만큼의 라인 출력도 가능하다.

주로 무거운 파일이나 실시간으로 로그(log)를 확인하려 할 때 사용된다.

사용방법으로는 head / tail [옵션] [파일] 식의 구성으로 사용된다.

 

[centos@localhost centos]$ head Line.txt   # 옵션없이 Default 값으로 앞에서부터 10줄 까지 출력됨을 확인
Line 1
Line 2
Line 3
Line 4
Line 5
Line 6
Line 7
Line 8
Line 9
Line 10

[centos@localhost centos]$ tail -5 Line.txt   # -5 옵션으로 뒤에서부터 5줄 까지만 출력
Line 16
Line 17
Line 18 
Line 19
Line 20

' tail -f ' 옵션으로 secure log를 실시간으로 출력됨을 확인

 

 

● 명령어 systemctl ~ / service ~

리눅스 시스템에서 각종 서비스들을 관리할 수 있게 해주는 중요한 명령어이다.

~ CentOS6 까지는 service ~ 로 시작하는 명령어가 주로 사용되었지만,

CentOS7 부터는 시스템 부팅 프로세스가 init이 아닌 systemd로 넘어오게 되면서

systemctl ~ 명령어로 변경되었다. 동작방식은 거의 동일하며 현재 CentOS7 에서도 

service ~ 명령어가 작동하지 않는 건 아니다.

 

'systemctl status [서비스]' 명령어를 이용한 각종 서비스의 현재상태(status)를 확인

systemctl start [Service]   # 서비스를 시작
systemctl stop [Service]    # 서비스를 중지
systemctl restart [Service] # 서비스 재시작
systemctl enable [Service]  # 부팅 시 서비스 시작
systemctl disable [Service] # 부팅 시 서비스 자동시작 x

### systemctl enable / disable의 경우 ~CentOS6.x에서의  chkconfig와 호환되는 명령어이다.

 

 

● 명령어 ps / pstree / top(process status)

명령어 ps / pstree / top의 경우 각기 다른 정보와 형식으로 실행중인 프로세스의 상태를 보여준다.

우리가 주로 사용하는 Winodws System에서의 "작업 관리자"에서 프로세스의 상태를

확인할 수 있듯이 Linux System에서는 위에 해당하는 명령어로 프로세스의 상태를 확인할 수 있다

'ps' 명령어에서 주로 사용되는 '-ef' 옵션을 이용한모습 (BSD, System V 계열의 옵션이 별도로 지정되어 있음)

UID : 해당 프로세스의 소유자 USER의 ID를 표시

PID : 해당 프로세스의 번호를 표시

PPID : 해당 프로세스의 Parents(부모) PID를 표시

C : 정의는 짧은 기간 동안의 CPU 사용률이라고 되어있지만, 쓰임새를 자세히는 모르겠다..(아는 분께서는 댓글을..)

STIME : 프로세스가 시작된 시간을 표시

TTY : 프로세스와 연결된 터미널을 표시

TIME : 해당 프로세으의 총 CPU 사용시간을 표시

CMD : 해당 프로세스의 실행 명령행을 표시

 

전개도 형식으로 프로세스를 보여주는 'pstree'명령어에 '-p' 옵션을 사용해 프로세스의 PID를 확인가능

** 모든 프로세스를 관리하는 최초의 프로세스 "systemd"로 부터 다른 프로세스들이 생성됨을 직관적으로 확인할 수 있다.

 

명령어 'top'으로 프로세스와 CPU, RAM의 상태를 한 눈에 확인가능

** 실행을 원치않는 프로세스를 'kill'할 수도 있고 몇 가지 키 조합을 통해서 표시를 원하는 

정보를 변경할 수도 있다.

 

 

너무 한 번에 정리를 하려다보니 각 명령어에 대한 설명이 많이 모자란 것 같다..

추후에 리눅스에 대한 이해도가 깊어졌을 때 주관적으로 많이 중요하다 싶은

명령어에 대해서는 개별적으로 다시 한 번 정리를 해두어야겠다.

'Linux_System' 카테고리의 다른 글

[Linux]Software_Compile  (0) 2022.10.31
[Linux]YUM_LocalRepository  (0) 2022.10.26
[Linux]Basic_Command(1)  (0) 2022.10.06
[Linux]LVM  (1) 2022.09.22
[Linux]RAID  (0) 2022.09.20

리눅스 명령어(Linux Command)

우리가 Linux 시스템을 사용함에 있어서 다양하고 많은 명령어의 사용법을 익혀둔다면
보다 편리하고 빠른 작업이 가능하게 해준다. 특히나 우리가 흔하게 접해볼 수 있는 운영체제인
MacOS, Windows ... 등의 운영체제들은 사용자의 편의성을 고려GUI(Graphic User Interface)
주로 사용하기 때문에 마우스와 함께 작업을 진행할 수 있지만,
실제 서버를 운영하거나 관리할 때에는 CUI/CLI(Command User Interface / Comman Line Interface)
리소스의 소모가 적고 반응이 빠르다는 대표적인 이유로인해 사용하고 있기 때문에 Linux 시스템에서
자주 사용되는 명령어들에 관해서는 알아둘 필요가 있겠다.

(물론 다른 운영체제들도 검은색 배경의 Console에서 명령어 기반의 작업이 가능하다.)
** 필자는 아직 서버운영에 대한 경력이 전무하기에 실무에서는 어떤방식의 작업이 이뤄지는지
정확하게 서술은 할 수 없다...

● 명령어 ls(list segments)

리눅스에서 가장 많이 쓰이는 명령어로 해당하는 디렉터리나 파일의 정보를
표준출력으로 출력해주는 명령어이다. 코드럭에 기재된 옵션들의 조합 외에도
좀 더 다양한 조합으로 명령어의 시너지를 볼 수도 있다.

** Asterisk : 문자 * 를 이용하면 ls *.txt, a* ... 등의 와일드카드 또한 활용이 가능하다.

ls   #list segments

### <Option> ### 
ls -a   # 디렉터리 내의 숨김파일/디렉터리까지 출력해주는 옵션
ls -l   # 파일의 정보를 "자세히" 출력, 권한, 소유자, 파일명 ...등
ls -h   # 숫자로만 표기가 아닌, K,M,G 등의 단위로 파일의 크기를 출력

### <Option> ### 
ls -la   # 숨김파일과 함께 자세히 출력
ls -ld   # 디렉토리만 지정하여 자세히 출력

 

● 명령어 mv(move)

파일명의 변경과 파일의 위치를 변경해줄 수 있는 명령어이다.
mv의 경우 같은 mv [옵션] [대상파일] [목적파일] 식의 구성으로 사용되는데,
코드블럭을 보며 이해해보자
** 명령어 "rename"의 경우 파일의 확장자를 일괄적으로 변경할 때 사용된다.

mv # move

### <Example> ###
# $PATH = /home/user/
mv ./A_file ./B_file   # 같은 미디어/볼륨 안에서의 mv 명령어는 이름을 변경해주는 기능


### <Example> ###
mv /home/user_1/A_file /home/user_2/B_file   # 식의 이용은 위치를 변경, 이름 또한 변경이 가능하게 해준다

 

 

● 명령어 cp(copy)

파일이나 디렉토리를 복사할 때 사용되는 명령어로
우리가 Windows에서 흔히 사용하는 "복사, 붙여넣기"의 기능과
동일하게 생각하면 될 것 같다.
cp의 경우 cp [옵션] [대상 파일/디렉토리] [목적지] 식의 구성으로 사용된다.

cp   # copy

### <Example> ###
cp -R [A_Directory / File] [B_Directory]   # 하위 디렉토리의 파일, 디렉토리를 전부복사
cp -a [A_Directory / File] [B_Directory/"file_name"]   # 원본파일의 속성과 링크를 포함하여 복사를 하는 경우이며, 저장될 위치에서의 이름지정도 가능
cp -v [A_Directory / File] [B_Directory]   # 복사가 진행되는 과정을 표시해주는 옵션

### <Example> ###
cp -arp [A_Directory / File] [B_Directory]   # 속성, 소유자, 권한 등 원본파일의 모든 부분을 동일하게 복사하는 경우에 사용

 

● 명령어 cd(change directory) / pwd(print working directory)

우리가 검은색 배경의 콘솔창에서 작업을 하면서 많이 사용하게 되는,
작업 위치에 관련된 명령어이다. 대부분의 실무자들은 우리가 워드나 엑셀파일을
작업하면서 "Ctrl + S" 를 누르며 수시로 파일을 저장하는 행위와 비슷하게
수행하는 일종의 습관(?)이라고 말 하기도 한다. cd 의 경우 cd [디렉토리] 식의 구성으로 사용된다.
절대경로 위치지정 외에도 상대경로 위치지정도 가능한데 몇 가지 예시를 확인해보자

. : 현재 디렉토리를 의미
.. : 한 단계(?) 상위 디렉토리를 의미
~ : "user"의 홈 디렉토리를 의미
---> 식의 표현으로 상대경로 지정이 가능하다. 하지만 예외의 경우는 언제나 존재하기 때문에
중요한 작업을 수행한다면 안정성의 이유로 절대경로의 사용을 지향한다고 한다.

cd   # change directory
pwd  # print working directory

### <Example> ###
# $PATH = /home/user

~$ pwd   # 현재 작업 위치를 확인
/home/user   # /home/user 디렉토리에서 작업하고 있음을 확인가능

~$ cd /home   # 절대경로를 지정하여 현재위치 /home/user 위치에서 상위 디렉토리인 /home 디렉토리로 위치를 변경
~$ pwd        # 현재 작업위치를 확인
/home        # cd 명령어로 위치가 변경되어 /home 으로 위치가 변경되었음을 확인

 

 

● 명령어 cat(concatenate)

명령어 "cat"은 인터넷 사전에 정의되어 있는 바에 의하면,
표준 입력표준 출력으로 이어주는(concatenate) 역할을 하는 명령어라고 서술 되어있다.
주로 길이가 짧은 파일의 내용을 간편하게 보고싶을 때 사용되거나,
재지정(Redirect)을 활용하여 파일을 파일을 복사해주거나 합쳐주는 등의 작업을 수행할 때 사용된다.
** Redirect == <, <<, >, >> 등의 부호를 이용
** Pipe == "|" 부호를 이용
cat 의 사용법으로는 cat [옵션] [파일] 식의 구성으로 사용되며,
주 사용방식은 코드블럭에 표현 해보았다.

cat   # concatenate

### <Example> ###
cat File.txt   # 단일 파일의 내용을 출력
cat File1.txt File2.txt File3.txt   # 복수 개의 파일의 내용을 한 번에 출력
cat -n File.txt   # 행 번호를 표시하여 파일의 내용을 출력
cat File1.txt File2.txt File3.txt > New_File.txt   # 복수 개의 파일의 내용을 새로운 파일의 내용으로 출력 후 저장




이번 포스트에는 리눅스를 사용하며 거의 필수적으로 많이 사용되는 명령어 몇 가지를
간단하게 알아보았다. 다음 포스트에서는 서버를 운영할 때 주로 사용되는 명령어와
다중 명령어에 대하여 글을 써보도록 하겠다.

'Linux_System' 카테고리의 다른 글

[Linux]YUM_LocalRepository  (0) 2022.10.26
[Linux]Basic_Command(2)  (0) 2022.10.10
[Linux]LVM  (1) 2022.09.22
[Linux]RAID  (0) 2022.09.20
[Linux]Disk_Quota  (1) 2022.09.19

LVM(Logical Volume Manager)

"LVM"의 구성도

LVM 기법은 즉석에서 파티션 사이즈를 늘리거나 디스크를 추가 및 삭제할 수 있는 기능으로

전통적인 디스크 관리의 큰 장벽을 없애주었다. CentOS를 설치하면 Default로 LVM을 사용하는데,

CentOS7 메인 HDD의 LVM

작은 용량의 '/boot' 부트 파티션 영역만 놔두고 나머지 '/(Root Directory)' 영역을 모두 LVM으로 할당해서

CentOS가 임의로 관리하게 함으로써 나중에 메인 HDD의 '/' 공간이  부족할 때 HDD 추가하여

'/' 공간을 확장할 수 있게 해주며, 필요하다면 디스크를 재분할 또한 가능하다.

 

LVM의 핵심VGs(볼륨그룹)이다. VGs는 PV(물리적 볼륨)과 LV(논리적 볼륨)이 통합된 개념인데,

예를 들어 CentOS에 로컬 디스크만 연결이 된다면 파일시스템 인식에 문제가 없지만 SAN(Storage Area Network)이

연결된다면 해당 시스템은 SAN이 가지고 있는 디스크 타입도 인식해야 할 필요가 있기 때문에  

이 볼륨그룹을 통해서 디스크들을 관리한다. 한 시스템에서 여러 개의 디스크 타입을 사용 할 예정이라면

볼륨그룹도 여러 개 만들어 두어야 한다.

 

LVM을 설정하는 순서는 물리적 볼륨(PVs) -> 볼륨그룹(VG) -> 논리적 볼륨(LV) 생성하는 순이다.
리눅스의 가장 큰 특징이자 장점이 되는 기술중 하나이다.

---> Windows 시스템에서는 이런 방식의 디스크 설정은 어렵다...
   (하지만 Partition Magic, Partition Wizard ...등의 도구로 설정이 가능하다고 한다.)

 

 

● LVM 실습

'LVM' 구성을 실습해 볼 HDD를 가상머신에 추가
새롭게 HDD를 확인 후 'Linux LVM' 형식으로 파티션 진행

 

파티션 후 PV(Physical Volume) 과 "MyVG"라는 이름의 VG(Volume Group)을 생성

- PE(Physical Extant) : /dev/sda, /dev/sdb실제 데이터가 저장되는 공간을 의미, 블럭의 디폴트 단위는 4MB

- PV(Physical Volume) : /dev/sda1, /dev/sdb1 ... 등의 파티션이 된 디스크를 의미

** 일반적인 디스크로 가정하면 섹터(Sector)와 비슷한 성질

- VG(Volume Group) : PV 끼리 합쳐진 1개의 물리 그룹을 의미

** 이름 설정은 임의대로 가능

 

명령어 'vgdisplay -옵션' 을 통해서 현재까지 설정된 Volume Group을 확인할 수 있음

 

VG의 용량 3GB를 각각 2.5G, 0.4G로 LV를 할당

** 파일시스템 특성 상 추가된 디스크를 온전히 3GB 전부는 사용할 수 없기에 여유공간을 감수하여 할당 하였습니다. 

생성된 LV "MyLV-1", "MyLV-2" 포맷
'lvscan' 명령으로 사전에 할당 시킨대로 LVM이 설정 되었음을 확인

- LV(Logical Volume) : 볼륨 그룹을 1개 이상으로 나눠서 논리 그룹으로 나눈 것을 의미

 

미리 생성해 놓은 마운트 포인트 "/MyLVM-01", "/MyLVM-02"에 LVM 디스크를 마운트

 

RAID와 마찬가지로 '/etc/fstab'에 설정 추가 시 부팅 시 자동마운트가 가능

 

LV Extend를 위한 HDD를 가상머신에 추가 후, 이전에 설정된 디스크와 동일한 구성으로 포맷을 실시

 

기존 존재하는 VG(볼륨그룹)에 2GB 용량의 PV(물리적 볼륨)를 추가

 

확장 시키고 싶은 LV(논리 볼륨)에 추가용량을 할당

 

확장 반영을 위한 'resize2fs' 명령어를 실행

 

'lvscan' 명령어로, 기존 412MB에서 2.4GB로 확장이 되었음을 확인

 

 

● 마치며

디스크 관련 설정이 변경되었을 때에는, 안정성 검증을 위한 'fsck'를 이용한 배드블럭 검사를 수행.. 이 부분은 추가적으로 공부가 필요하다.

 

명령어 'lsblk'

실습내용과 관련있는 스냅샷 이미지는 아니지만, 이렇게 리눅스 시스템의 디바이스 정보를

트리형식으로 보고싶다면 'lsblk'를 활용할 수 있다.

'Linux_System' 카테고리의 다른 글

[Linux]Basic_Command(2)  (0) 2022.10.10
[Linux]Basic_Command(1)  (0) 2022.10.06
[Linux]RAID  (0) 2022.09.20
[Linux]Disk_Quota  (1) 2022.09.19
[Linux]DNS_Basic  (1) 2022.09.09

RAID(Redundant Array of Independent / Inexpensive Disks)

비휘발성 저장장치(HDD) 여러대를 병렬, 직렬형태로 연결하여 손실된 데이터의
복구를 가능하게끔 설계하는 구성 방식이다.
RAID 구성 방식으로는 몇 가지 다양한 방식이 있지만,
주로 사용되는 방식은 RAID 0, RAID 1, RAID 5, RAID 1 + 0 방식이 있다.

 

● RAID 0 (Disk Striping)

자료출처 : https://commons.wikimedia.org

RAID 0 방식의 경우 데이터 복원은 되지 않지만,
디스크의 헤드와 암(arm)이 늘어나게 되는 것이니 데이터 처리의 속도가 빨라진다는 장점이 존재한다.
이렇게 하나의 데이터를 분산시켜 처리하는 Disk Striping이라고 한다.

● RAID 1 (Mirroring and Duplexing)

자료출처 : https://commons.wikimedia.org

데이터 복원이 가능한 방식의 RAID 구성으로, 두 개의 디스크를 사용한다고 했을 때
Disk 0에 데이터를 저장하게 되면 Disk 1 에도 동일한 데이터가 저장되어 백업이 되는 방식이다.
추가가 된 디스크에는 같은 용량의 정보가 저장되기 때문에 용량 증가의 효과는 없다.
주로 중/소 조직에서 사용되며, 이를 Mirroring 이라고 한다.

● RAID 5 (Stripe with Parity)

자료출처 : https://commons.wikimedia.org

데이터 복원이 가능한 RAID 구성으로, 세 개 이상의 디스크를 필요로 하며,
Parity bit 를 사용해서 데이터를 복구할 수 있다는 특징이 있는 구성방식이다.
Odd Parity(홀수), Even Parity(짝수)로 설정(Default == Odd Parity)할 수 있으며 비트를 계산하여
오류의 여부를 확인해서 복원 시켜주는 것(사진첨부)

Even Parity bit로 오류를 식별

 

● RAID 1 + 0 (Striping + Mirroring)

자료출처 : https://commons.wikimedia.org

RAID 1(Striping)RAID 0(Miroring) 을 합친 구성방식으로
데이터의 신뢰성과 처리속도의 향상을 목적으로 사용된다.

● RAID 5 실습

RAID 5를 구성할 하드디스크 3개를 추가

 

fdisk 명령어로 추가된 3개의 디스크를 "Linux raid auto" 형식으로 파티션 진행

 

파티션 후 바로 포맷이 아닌, 파티션된 디스크를 "mdadm" 명령어로 RAID로 묶어준 후 포맷을 진행

 

ext3 형식으로 파일 시스템 포맷을 진행

 

저장공간이 3GB가 아닌 2GB로 표시되는 것을 보아, RAID 5 구성이 되었음을 확인

 

마운트포인트에 RAID 구성이 된 하드디스크를 마운트

 

RAID 디스크 삭제 전 마운트 포인트에 파일을 생성(** 사진 우측하단 확인)

 

디스크 하나가 유실 되었음에도 저장된 파일이 손상되지 않음을 확인(** 사진 우측하단 확인)



'Linux_System' 카테고리의 다른 글

[Linux]Basic_Command(1)  (0) 2022.10.06
[Linux]LVM  (1) 2022.09.22
[Linux]Disk_Quota  (1) 2022.09.19
[Linux]DNS_Basic  (1) 2022.09.09
[Linux]Remote_access  (0) 2022.08.26

디스크 쿼터(Disk Quota)

리눅스는 멀티 유저 시스템으로, 여러 사용자들이 동시에 하나의 리눅스 시스템에 

접속해서 작업을 하게 되는데, 특정 사용자 혹은 그룹이 과도하게 고정된 HDD 공간을 

사용하게 되면 다른 사용자들의 디스크 사용에 영향을 미칠 수 있다.

이럴 때, 관리자는 Disk Quota를 사용해서 사용자나 그룹별로 HDD의 사용량이나 

저장할 수 있는 파일의 개수를 지정해서 리소스를 제한해주어야 한다.

 

디스크 쿼터를 적용할 HDD 추가

 

추가된 default 설정으로 HDD 파티셔닝

 

마운트포인트 '/quotaHome' 디렉토리에 '/dev/sdb1' 마운트 진행

 

/etc/fstab 수정으로 부팅 시 자동 마운트를 설정

 

/etc/fstab 설정 후 remount 옵션으로 재마운트를 실행

 

quota초기 설정의 순서

 

쿼터설정 시 예기치 못한 오류가 발생할 수 있으므로 quotaoff 상태로 진행하며,

기존에 쿼터가 설정 되어있지 않은 디스크의 경우 'quotacheck -augmn' 명령어 입력 시

'aquota.user' 파일이 생성됨을 알 수 있다.

 

'edquota -u test01' 명령어로 사용자별 디스크 사용량을 제한

 

상단에 보이는 soft, hard의 의미로는 각각 'soft limit', 'hard limit' 이며,

Soft Limit :  일정 유예기간을 두고 파일을 정리할 수 있게끔 경고를 발생시키는 한계를 의미

---> grace(유예기간)과 관련있다, CentOS7 기준 default 값은 7days 이다.

Hard Limit : 최대 한계치를 의미하며, 이 이상의 파일저장을 실행 시 오류 에러메시지와 함께 파일 저장이 불가함 

 

test1 사용자에게 hard limit 12MB 설정 후, 용량을 초과하는 파일 저장을 시도 및 에러 메시지 확인

 

동일한 파일을 복사했음에도 불구, 쿼터 설정으로 인해 일부분이 손실된 상태로 복사됨을 확인

참고자료 상에서는 생략 되었지만, soft limit으로 설정한 10MB를 도달하게 되면 

경고메시지가 출력된다.

 

 

** root(관리자)는 쿼터에 구애를 받지않고 제한없이 HDD를 이용할 수 있다.

** CentOS 7 이후부터는 새로운 저널링 기법을 사용하여 쿼터를 설정하도록 권장하지만,

오류가 발생하는 경우가 많다고 하여 기존의 방식대로 설정해보도록 하겠다.

(첨부 사진 중 분홍색 강조표시 된 부분이 저널링 기법이 적용된 디스크 쿼터설정)

 

 

 

'Linux_System' 카테고리의 다른 글

[Linux]LVM  (1) 2022.09.22
[Linux]RAID  (0) 2022.09.20
[Linux]DNS_Basic  (1) 2022.09.09
[Linux]Remote_access  (0) 2022.08.26
[Linux]Boot_basic  (0) 2022.08.26

DNS(Domain Name System)

우리가 흔히 구글링을 하러 구글 웹 사이트에 접속할 때, 123.123.123.123 ... 식의 ip주소를 입력해 

웹 사이트에 접근하는 경우는 거의 없다. 이렇듯 복잡한 ip주소 대신 사람이 이용하기 편하게 변환을 해주는 시스템을 말한다.

** 주소변환은 단방향이 아닌 양방향

 

ip 주소로 google.com에 접속하는 모습

 

우리가 '네이버'에 접속한다고 가정했을 때에는 DNS 서버가 www.naver.com 의 ip주소를 찾아서 연결시켜주어야 하는데,

이름풀이(name resolution)의 순서는 local hosts file -> domain DNS server -> global DNS server 순으로 진행된다.

이 때, 주소 검색창에 입력한 www.naver.com  <--- 처럼 도메인에 포함된 호스트가 표시된 주소를

FQDN(Fully Qualified Domain Name)이라고 한다.

 

우분투 게스트머신의 hosts 파일

DNS 점검도구로는 nslookup, dig, /etc/network, /etc/resolv.conf ... 등이 필요하다.

 

nslookp 실행화면
dig 실행화면

'Linux_System' 카테고리의 다른 글

[Linux]RAID  (0) 2022.09.20
[Linux]Disk_Quota  (1) 2022.09.19
[Linux]Remote_access  (0) 2022.08.26
[Linux]Boot_basic  (0) 2022.08.26
[Linux]System_basic  (2) 2022.08.24

부트로더(Boot Loader)

Linux에서는 부팅 과정을 핸들링하는 boot loader가 있는데, GRUB / GRUB2를 이용한다.

이는 리눅스 초기의 부트로더 LILO(LInux LOader)의 단점을 보완하여 개발된 것.

LILO : 하드디스크의 물리적인 위치를 기점으로 부팅 

GRUB : 파일명과 커널이 위치하고 있는 파티션을 기점으로 부팅

CentOS7의 GRUB2 부트로더의 모습

** kernel version(3.x)부터는 GRUB2 를 사용한다.

 

 

사용자 전환(Shift User)

일반 사용자에서 root사용자로의 사용자전환 시 사용하는 명령어 'su'의 의미이다.

일반 사용자의 홈 디렉토리는 /home/%username% 이고,

관리자 root의 홈 디렉토리는 /root 이다.

 

[사용자전환 시 옵션에 따른 특이사항]

su (root) : 현재 작업위치가 /home/%username% 이라고 가정 시, 현재 경로에서 사용자만 root로 전환

su - (root) : 현재 작업위치 /home/%username% 에서, 사용자도 root로 전환 및  작업위치 또한 root의 홈 디렉토리로 변경

 

** 홈 디렉토리는 해당 사용자가 작업할 때 모든 파일 등이 저장되는 장소이다.

외부에서 %username% 호스트로 vnc, telnet, ssh 등의 방법으로 Credential(Username + Password)

입력 후 원격 접속 시, 해당 %username%의 홈 디렉토리로 연결된다.

 

 

원격접속(Remote Access)

 원격에서 Linux 서버에 접속하는 방법으로는

telnet : 평문장

ssh : 암호화 문으로 전송

vnc : 그래픽모드

rlogin : 텍스트로 전송 (보안상의 이유로 근래의 시스템에서는 r~ 접속을 금지한다)

등이 존재한다.

 

이 때, 암호화를 사용한 원격 접속은 주고받은 데이터들이 hash함수로 인해 암호화되어서

패킷분석 툴, 일반적인 분석 소프트웨어로는 문장을 해석할 수 없다.

telnet을 이용한 원격접속 패킷을 wireshark로 캡처

 

위와 같은 조건으로 ssh를 이용한 원격접속 패킷을 wireshark로 캡처

이처럼 평문장과 암호화의 차이를 직접 확인해볼 수 있다.

 

 

<<추가적인 정보>>

** 서버 프로그램에 ~d가 붙으면, daemon이라는 서버에서 백그라운드로 실행되는 서비스(프로세스)이다.

'Linux_System' 카테고리의 다른 글

[Linux]Disk_Quota  (1) 2022.09.19
[Linux]DNS_Basic  (1) 2022.09.09
[Linux]Boot_basic  (0) 2022.08.26
[Linux]System_basic  (2) 2022.08.24
[Linux]Virtual_Machine  (0) 2022.08.23

MBR(Master Boot Record)

부트로더(Boot Loader)와 파티션 정보가 저장되는 HDD의 첫 번째 섹터

여기서 '부트로더'란 사용자가 컴퓨터의 전원을 켜고 부팅을 시도할 때, 

디스크나 플래시에 저장된 운영체제를 읽어 RAM(메모리)에 적재해 주는 프로그램.

MBR은 FAT(File Allocation Table)로써 HDD에 저장된 모든 주소를 가지고 있는 Index 기능을 한다.

Virus에 의해서 가장 취약한 곳, 컴퓨터가 전원이 없어도 이러한 기본 정보들이 저장되어 있어야 하는데,

이전 글에서 잠시 설명됐던 CMOS 배터리가 그 역할을 해준다.

리눅스 서버에서는 이런 MBR 정보를 백업해 둔다.

사진 출처 https://news.tandoanh.vn

리눅스에서는 시스템 초기 설정 시 MBR 외부 저장장치 혹은 추가적인 HDD에 따로 백업해둔다.

명령어 dd를 이용한 디스크 백업

명령어 dd는 디스크 전체를 복제(백업)할 때 사용되는 명령어이다.

InputFile 과 OutputFile, 블럭사이즈를 지정하여 복사가 가능하다라는 특징이 있다.

(블럭에 관련해서는 공부가 더 필요하다)

 

/dev/sdb1 하드디스크에 /MTT 라는 마운트포인트를 사용해 데이터를 저장한 상태

새로운 하드웨어를 시스템에 연결하게 되면, 파티셔닝이 되어있지 않은 상태이다.

이 상테는 포맷이 되지않은 상태이며, 데이터를 저장 할 수 없는 상태를 뜻한다.

ex) /dev/sda1 ... /dev/sdb1... <-- 1~4 숫자가 해당 하드디스크의 n번 째 Primary Patition임을 알려주고,

/dev/sdc ... <-- 상태는 파티션이 되어있지 않은 상태이다.

 

 

** '마운트포인트'란 리눅스에서 사용하기 위한 특정 하드웨어를 인식 시키기 위해 필요한 디렉토리(마운트포인트)이다.

** Primary Patition이 아닌 Extended Patition을 이용한 Logical Patition 설정 시 5~n 까지의 숫자가 나타날 수 있다.

 

 

DHCP(Dynamic Host Configuration Protocol)

DHCP란 '동적 호스트 구성 프로토콜'로 IP 주소 및 게이트웨이, 네임서버 등등

통신에 필요한 주소들의 정보를 자동으로 할당해주는 프로토콜.

고정적인 IP를 사용해야하는 서버를 제외하면

많은 편리함을 얻을 수 있는 방식이다.

 

(관리자는 hostname과 workgroup 만 별도로 설정을 진행하면 된다)

CentOS GUI 환경에서의 네트워크 설정

시스템 부팅과정 중에 PXE ... DHCP ... 서버를 찾는 과정을 볼 수 있는데, 

이는 무인설치(Unattended Installation)을 통해서 OS를 설치하고자 하는 것.

** PXE는 DHCP를 의존한다.

** 이 부분도 아직은 완벽한 서술이 가능한 이해도가 없다.

 

우리는 Free-DOS 컴퓨터에 운영체제를 설치하려면

많이 사용하는 USB등의 플래시 메모리에 이미지 파일,

부팅 디스크를 만들어 운영체제를 설치하곤 한다.

물론, 일상생활에서는 이렇게 물리적인 설치방법이 문제가 되지 않지만,

기업이나 단체, 극단적으로 100대의 컴퓨터에 같은 설정 값을 가진 운영체제를 동시에 설치한다고 생각해보자.

윈도우 운영체제를 예로들면  WDS(Windows Deployment Server)를 구축해서 설치를 자동화 할 수 있다.

WDS 서버를 찾아가기 위해 PXE 에서 DHCP를 찾는 것이고 DHCP에서 IP를 할당받아 

WDS서버에 접근 시, 미리 저장해둔 설치파일을 TFTP를 통해 설치를 시작하게 되는 것.

 

 

Linux의 실행모드(Run level)

리눅스에는 부팅 시 작동하는 모드들이 존재, 런레벨에 따라 모드 조정이 가능하다.

모든 프로세스의 부모 프로세스인 init이 부팅시에 참조하며, 0 ~ 6까지 총 7가지의 런레벨이 존재한다.

기존에는 이런 설정 파일이 /etc/inittab에 설정되어져 있었지만 현재는 사용하지 않는다.

/etc/rc.d/ 에 위치한 run level 관련 스크립트들 (CentOS7 기준)

- 0 : shutdown (시스템 종료, init 0... 으로 사용)

- 1 : administrative manage mode, 단일 사용자 모드 (root 패스워드 변경, 파일 시스템 점검 등..)

- 2 : 네트워크가 없는 다중 사용자 모드 (Reserved, 미사용)

- 3 : 텍스트 다중 사용자 모드 (CLI mode, 명령어로 실행)

- 4 : 미사용 (Reserved)

- 5 : 그래픽 다중 사용자 모드 (GUI mode, 그래픽 인터페이스 제공)

- 6 : reboot, 시스템 재시작 (reboot, init 6 .. 명령어로 실행) 

<<추가적인 정보>>

** Widows의 실행파일 *.exefmf Linux에서 실행한다고 하면,

wine 이라는 패키지(소프트웨어)를 설치하여 활용이 가능하다.

wine은 기본적으로 제공되는 패키지가 아니기 때문에 각 Linux 배포판의 패키지 툴을 이용하여

wine을 별도로 설치해주면 사용이 가능하다.

'Linux_System' 카테고리의 다른 글

[Linux]Disk_Quota  (1) 2022.09.19
[Linux]DNS_Basic  (1) 2022.09.09
[Linux]Remote_access  (0) 2022.08.26
[Linux]System_basic  (2) 2022.08.24
[Linux]Virtual_Machine  (0) 2022.08.23

펌웨어(Firmware)

펌웨어란 하드웨어(Hardware)에 소프트웨어(Software)가 포함되어 있는 것이라고 정의한다.

프린터를 예시로 들자면 프린터(Printer)라는 하드웨어와 프린터 드라이버(Driver)라는 소프트웨어가 통합된 것.

** 드라이버는 OS별로 해당 장치를 인식시키는 소프트웨어 프로그램(Module) **

VMware 게스트머신의 BIOS 화면

보통 펌웨어는 기기(Machine) 내부에 작은 저장공간을 두어 비휘발성(Non-volatile) 메모리에 올려둔다.

대표적으로 컴퓨터 부팅 시 확인할 수 있는 BIOS/UEFI 등이 펌웨어에 해당한다.

컴퓨터에서는 이런 BIOS정보를 전원이 없을 때에도 저장 해야하기 때문에 CMOS 배터리를 이용해서

정보들을 저장해두어 매 부팅시에 추가적인 설정을 거치지 않고 평소처럼 PC를 사용할 수 있게 해 준다.

 

ps. 실생활에 예를 들어보면 핸드폰이나 모바일 기기 등의 소프트웨어(펌웨어) 업데이트를 적용해 볼 수 있겠다.

뭐,, 아이폰 12에서 13으로 넘어갈 때 소프트웨어 한해서 새로운 기능을 신규기기에서만 지원해주는 경우는 거의 없으니

이런 부분에서 호환이 가능하게끔 만들어주는 장치가 '펌웨어 업데이트' 이지 않을까 개인적으로 생각해본다.

 

 

네트워크(Network)

두 가지 실행 모드가 존재

Server-clients : 한쪽은 반드시 서버가 되고 다른 쪽들은 클라이언트가 되는 구조

Peer-2-peer : 서로가 서버가 되기도 하고 클라이언트가 되기도 하는 구조

 

 

- 우분투 리눅스에서의 네트워크 관련 설정파일

nano editor를 이용한 우분투 시스템의 네트워크 설정파일 진입

현 위치에서 네트워크의 전반적인 설정이 가능하다.

네트워크 통신의 방법으로는 

 

Static : manual, 수동, 관리자가 직접 관리 및 설정을 진행

Dynamic : automatic, 자동, 관리자 관여없이 시스템 자체에서 설정을 진행

 

 

- DNS Server 설정 (도메인 네임서버)

DNS 서버를 지정해주는 우분투 시스템의 파일

이곳에만 DNS 서버를 설정하게 되면 재부팅시에는 Default 값으로 돌아가게 된다.

아직까지 정확한 이유를 뚜렷하게 서술 할 수 없으니 추후 수정을 통해 알아보도록 하겠다.

 

 

- 컴파일(Compile)의 종류

Kernel Compile : Module 조절, patch, upgrade, update ... 

Software Compile : ./configure => make install 과정을 거친다.

APM(Apache Web Server) + PHP Web Programming Language) + MySQL(Database)

** 컴파일 관련해서는 필자가 아직 이해를 완벽히 하지 못해 추후 수정토록 하겠음 **

 

<<간단한 용어정리>>

* host : 일반적인 컴퓨터

* workstation : 도메인에 가입된 호스트를 말한다 => abc.def@aaa.com

* node : NIC(Network Interface Card)를 통해서 인터워킹 되어져 있는 모든 장비들(라우터, 스위치, 호스트 ...등)

* computer : 일반적인 용어로 machine, can 이라고 부른다.

'Linux_System' 카테고리의 다른 글

[Linux]Disk_Quota  (1) 2022.09.19
[Linux]DNS_Basic  (1) 2022.09.09
[Linux]Remote_access  (0) 2022.08.26
[Linux]Boot_basic  (0) 2022.08.26
[Linux]Virtual_Machine  (0) 2022.08.23

+ Recent posts