[환경정보]
# OS 확인
$> grep . /etc/*-release
# CPU 코어전체개수
$> grep -c processor /proc/cpuinfo
# 물리 CPU 수
$> grep ^processor /proc/cpuinfo | wc -l
# bit 확인
$> getconf LONG_BIT
# 메모리
$> cat /proc/meminfo | grep MemTotal
[기타]
# 현재 경로
$> pwd
$> pwd -P
# ls로 날짜 포맷 (연도 표시)
$> ls -al --time-style=long-iso
[yum]
# 설치
$> yum install 패키지명
# 삭제
$> yum remove 패키지명
# 설치된 목록
$> yum list installed
$> yum list installed 패키지명
# yum 설치, 변경, 삭제 이력
$> yum history list
$> yum history list 패키지명
# cache clean
$> yum clean all
# yum 패키지 업데이트
$> yum -y update
# yum 업데이트
$> yum update yum
[apt]
# 설치
$> apt install 패키지명
# 삭제
$> apt remove 패키지명
# 설치된 목록
$> apt list --installed
# 사용가능한 패키지 목록 저장소 업데이트
$> apt update
# 설치된 패키지 업그레이드
$> apt upgrade
# 설치된 패키지 업그레이드 (의존성 검사)
$> apt dist-upgrade
[용량]
* 디스크 확인
$> fdisk -l
* 디스크 확인 (해당 디스크)
$> fdisk -l [장치명]
$> fdisk -l /dev/sda
* 파디션 용량 확인
$> df -h
* 파티션 용량 전체 합계
$> df -P | awk '{sum += $2} END {print sum " KB"}'
$> df -P | awk '{sum += $2} END {print sum/1024 " MB"}'
$> df -P | awk '{sum += $2} END {print sum/1024/1024 " GB"}'
* 파티션 용량 전체 합계 (NAS 제외)
$> df -P | grep -v : | awk '{sum += $2} END {print sum/1024/1024 " GB"}'
* 파티션 사용용량 전체 합계
$> df -P | awk '{sum += $3} END {print sum/1024/1024 " GB"}'
* 파티션 사용용량 전체 합계 (NAS 제외)
$> df -P | grep -v : | awk '{sum += $3} END {print sum/1024/1024 " GB"}'
* 폴더 용량 확인
$> du -hs 폴더명
* 현재폴더의 하위폴더 용량확인
$> du -hs *
* 현재폴더에 있는 폴더 및 파일 중에서 용량이 큰 것 순으로 10개 보기
$> du -hsx * | sort -rh | head -n 10
[cpu 정보]
참고 : https://zetawiki.com/wiki/%EB%A6%AC%EB%88%85%EC%8A%A4_CPU_%EC%82%AC%EC%9A%A9%EB%A5%A0_%ED%99%95%EC%9D%B8
* cpu / 메모리 정보
$> top
* cpu 정보
$> lscpu
[메모리 정보]
참고 : https://zetawiki.com/wiki/%EB%A6%AC%EB%88%85%EC%8A%A4_%EB%A9%94%EB%AA%A8%EB%A6%AC_%EC%82%AC%EC%9A%A9%EB%A5%A0_%ED%99%95%EC%9D%B8
* 메모리 정보
$> free
* 1초마다 갱신
$> sar -r 1
[장비]
* PCI 장비 목록
$> lspci
* PCI 장비 목록 자세히
$> lspci -v
* PCI 장비 목록 자세히 및 "/" 입력 시 검색
$> lspci -v | less
* 하드웨어 목록
$> lshw
$> lshw -numeric -C display
[사용중인 포트 확인]
$> netstat -anp | grep LISTEN | grep :포트번호
$> netstat -tnlp | grep :80
$> ps -ef | grep 1722
$> curl -v telnet://IP:Port
$> curl -v telnet://127.0.0.1:443
# 연결이 잘 됐을 때
* About to connect() to 127.0.0.1 port 443 (#0)
* Trying 127.0.0.1 ...
* Connected to 127.0.0.1 (127.0.0.1) port 443 (#0)
# 방화벽이 막혔을 때
* About to connect() to 127.0.0.1 port 443 (#0)
* Trying 127.0.0.1 ... (여기서 멈춤)
# 방화벽 연결이 되고 서비스가 기동 중이 아닐 때 (서비스 포트 안됨)
* About to connect() to 127.0.0.1 port 443 (#0)
* Trying 127.0.0.1 ...
* Connection refused
* Failed connect to 127.0.0.1:443; Connection refused
* Closing connection 0
curl: (7) Failed connect to 127.0.0.1:443; Connection refused
[systemctl]
참고 : systemd(system daemon) 을 관리하는 systemctl 명령어 사용법 (lesstif.com)
systemctl start service_name.service // 시작
systemctl stop service_name.service // 중지
systemctl status service_name.service // 상태
systemctl restart service_name.service // 재시작
systemctl enable service_name.service // 부팅 시 자동 실행 하기
systemctl disable service_name.service // 부팅 시 자동 실행 하지 않기
systemctl list-units --type=service // 실행 중인 모든 서비스 보기
systemctl list-units --type service --all // 모든 서비스 보기
* systemctl 등록
cd /etc/systemd/system/
vim tomcat.service
[Unit]
Description=Apache Tomcat 8 Servlet Container
After=syslog.target network.target
[Service]
User=tomcat
Group=tomcat
Type=forking
Environment=CATALINA_PID=/opt/tomcat/tomcat.pid
Environment=CATALINA_HOME=/opt/tomcat
Environment=CATALINA_BASE=/opt/tomcat
ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh
Restart=on-failure
[Install]
WantedBy=multi-user.target
systemctl daemon-reload // systemctl 리로딩
systemctl start tomcat
systemctl enable tomcat
[Apache]
$> yum install httpd-devel
$> systemctl start httpd.service
$> systemctl stop httpd.service
$> systemctl status httpd.service
[Tomcat]
$ systemctl enable tomcat
[user]
# 사용자에 그룹 추가
$> usermod -aG 사용자ID 그룹ID
$> usermod -a -G root bbur01
# root로 사용자 변경
$> sudo su
# root로 사용자 변경 (환경정보 load)
$> sudo su -
# 다른 계정으로 변경
$> sudo su - 계정ID
# sudo su - 와 비슷하게 root로 변경하지만 sudoers 정책에 따라 권한이 부여됨
$> sudo -i
# root 사용자로 변경 (환경정보 load)
$> su -
# 다른 사용자로 변경
$> su - 사용자ID
# 권한을 빌려서 명령어 실행
$> sudo -u 사용자ID command
$> sudo -u root ls
$> sudo -i -u 계정ID
# sudo로 사용할 수 있는 명령어 목록 조회
$> sudo -l
[jenkins 설치]
sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo (최신)
sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat-stable/jenkins.repo (안정)
sudo rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key
sudo yum install jenkins
[방화벽]
firewall-cmd --permanent --new-service=jenkins
firewall-cmd --permanent --service=jenkins --set-short="Jenkins Service Ports"
firewall-cmd --permanent --service=jenkins --set-description="Jenkins service firewalld port exceptions"
firewall-cmd --permanent --service=jenkins --add-port=8080/tcp
firewall-cmd --permanent --add-service=jenkins
firewall-cmd --zone=public --add-service=http --permanent
firewall-cmd --reload
[부팅 시 서비스 자동 실행 및 실행]
systemctl enable jenkins
systemctl start jenkins
sudo service jenkins start
sudo service jenkins stop
sudo service jenkins restart
[jenkins]
vi /etc/sysconfig/jenkins
JENKINS_PORT="9090"
/etc/init.d/jenkins start
/var/lib/jenkins/secrets/initialAdminPassword
[gradle]
$> sudo mkdir /opt/gradle
$> sudo unzip -d /opt/gradle gradle-3.4.1-bin.zip
$> export PATH=$PATH:/opt/gradle/gradle-3.4.1/bin
[lsof]
# -u : 사용자가 열고 있는 파일
$> lsof -u tibero | grep tbsvr
# -i : TCP/UDP, 포트로 열고 있는 파일
$> lsof -i TCP
$> lsof -i TCP:22-80
[pstack]
$> pstack ${PID} > pstack.log
[Apache 설치 경로 찾기]
$> find / -name "httpd" -exec ls -al {} \;
$> which httpd
$> whereis httpd
[JDK 설치 경로 찾기]
$> which java
$> ls -l (which java 목록에서 나온 결과값)
[Root 비밀번호 변경]
$> sudo passwd root
$> 현재 로그인된 사용자의 암호
$> 새로 생성할 root 비밀번호
$> 새로 생성할 root 비밀번호 확인
[명령어 로그]
# 로그 출력 안함
$> ./shutdown.sh >& /dev/null
# 로그 출력 안함 (1: 정상, 2: 오류)
$> ./shutdown.sh > /dev/null 2>&1
[Watch]
# ls 결과 건수 (1초마다 갱신)
$> watch -n 1 'ls | wc -l'
[파티션 구성]
참고 : https://kimhyun2017.tistory.com/21
[wget]
# 다운받은 stream을 화면에 그대로 출력
$> wget -q -O - 웹주소
$> wget -qO- 웹주소
# 외부IP (인터넷) IP 확인
$> wget -qO- http://api.ipify.org
[curl]
# Response를 화면에 그대로 출력
$> curl -fsSL 웹주소
# 외부IP (인터넷) IP 확인
$> curl -kLs http://api.ipify.org
[IP]
# 인터넷망 IP 조회
$> ip route get 8.8.8.8 | awk '{gsub(".*src", ""); print $1; exit}'
$> HOST_IP=$(ip route get 8.8.8.8 | awk '{gsub(".*src", ""); print $1; exit}')
$> echo $HOST_IP
# 랜카드 IP 조회
$> ifconfig 랜카드명 | grep 'inet ' | awk '{print $2}'
$> ifconfig 랜카드명 | awk '/inet / {print $2}'
[변수]
# 설정 (빈칸 없이)
$> HOST_IP=$(ip addr)
$> echo $HOST_IP
# 해제
$> unset HOST_IP
# 환경변수 정보
$> env
[시스템]
# 최근 기동 시간
$> uptime
# 재부팅 이력
$> last reboot
[KILL]
Kill 관련 블로그 : https://www.lesstif.com/system-admin/unix-linux-kill-12943674.html
# Kill 명령어 목록
$> kill -l
# Kill 강제 종료
# kill 이후 옵션은 "kill -l" 목록과 동일하며 숫자 또는 목록에서 "SIG" 문구를 제외한 문자열과 동일함
$> kill -9 ${PID}
$> kill -KILL ${PID}
# Kill Graceful 종료
$> kill -15 ${PID}
$> kill -TERM ${PID}
# Process의 PID 찾아서 종료
# "grep -v grep"은 grep 더미 프로세스를 제외함
$> ps -ef | grep java | grep -v grep | awk '{print "kill -TERM "$2}' | sh -x
# PID (Process ID), PPID (Parent Process ID), PGID (Process Group ID), SID (Session ID)
참고 : https://leeyh0216.github.io/posts/sid_pid_ppid_pgid/
$> ps -A -o pid,ppid,pgid,sid,command
# PGID로 Parent -> Child Process 모두 종료하기
$> kill -- -PGID
$> kill -- -827
$> pkill -g PGID
$> pkill -TERM -g 827
# SID로 종료하기 (접속하고 있는 shell 까지 종료됨)
$> pkill -15 -s SID
$> pkill -TERM -s 2748
# Parent -> Child Process 구조에서 Child Process의 PGID를 Parent Process와 다르게 할 경우
parent.sh에서 작성
#!/bin/bash
set -o monitor
./child.sh
[Replace - 치환]
# config.properties 파일 내의 /home/www => /home/apps로 변경
sed -i 's/\/home\/www/\/home\/apps/g' config.properties
# 현재 경로에서 xml 확장자 파일 내의 asd => dsg로 변경 (대소문자 구분 안함)
sed -i "s/asd/dsg/ig" $(find . -type f -name "*.xml")
# /apps 경로에서 xml 확장자 파일 내의 asd => dsg로 변경 (대소문자 구분 안함)
sed -i "s/asd/dsg/ig" $(find /apps -type f -name "*.xml")
# 치환 다른 방법
# -r : 문자열 검색 옵션
# -l : 해당 경로(파일명 포함)만 표시
grep -r -l abc * | xargs sed -i 's/abc/def/g'
grep -rl abc . | xargs sed -i 's/abc/def/g'
# xml 확장자 파일만 변경
grep -rl abc --include \*.xml | xargs sed -i 's/abc/def/g'
[VI]
# Vi 설정
~/.vimrc
/etc/vimrc
/etc/vim/vimrc
/etc/vim/vimrc.local
# 현재 파일 확인
Ctrl + G
# 현재 파일 경로 확인
1, Ctrl + G
:!realpath %
# 되돌리기 (undo)
u
# 되돌리기를 되돌리기 (redo)
Ctrl + R
# 치환 (replace)
:%s/[원본단어]/[바꿀단어]/[옵션]
:%s/foo/bar/i => foo를 bar로 변경 (대소문자 구분 없이 첫 번째 찾은 단어만 변경)
:%s/foo/bar/g =>foo를 bar로 변경 (문서 전체)
:%s/foo/bar/c => foo를 bar로 변경을 확인한다. foo에 focus가 됨, (interactive (대화형))
사용자에게 변경할 지 여부를 확인한다.
replace with bar (y/n/a/q/l/^E/^Y)?
- y: 현재 focus된 단어를 변경하고 다음 단어에 focus
- n: 현재 focus된 단어를 변경하지 않고 다음 단어에 focus
- a: 더 이상 묻지 않고 모든 단어 변경
- q: 변경하는 것을 멈춤
- l: 현재 focus된 단어를 변경하고 멈춤
:%s/foo/bar/igc => foo를 bar로 변경 (대소문자 구분 없이, 문서 전체를 변경하면서 변경 여부를 물어본다)
:%s/\/etc\file.txt/\/opt\/user\/data\/file.txt/g => 치환 문자에 경로가 포함된 경우 \/ 로 처리
:%s/\n//g => 문서 내 개행 (줄바꿈) 문자를 모두 없앰
# 멀티 주석 추가
1. esc를 눌러 명령어i 모드 진입
2. 주석 시작 위치로 이동 후 Ctrl + v를 누르고 cell 편집 모드로 변경되면 화살표 키를 이용하여 세로로 블록 지정
3. Shift + i 로 입력모드 변경하고 주석 문자인 #을 입력 (맨 첫 줄만 #이 삽입된다)
4. esc 키를 누르고 수 초를 기다리면 블록된 라인 주석 처리 됨
# 멀티 주석 추가
1. esc를 눌러 명령어 모드 진입
2. v를 누르면 visual 모드로 전환 되는데 hjkl 을 사용하여 (화살표 키 사용하면 안됨) 블록 지정
3. :를 누르면 :'<,'> 이 표시가 되는데 그 문자를 놔두고 아래처럼 입력
:'<,'>norm i원하는문자
:'<,'>norm i#
# 멀티 주석 삭제
1. esc를 눌러 명령어 모드 진입
2. 주석 시작 위치로 이동 후 Ctrl + v를 누르고 cell 편집 모드로 변경되면 화살표 키를 이용하여 세로로 블록 지정
3. x 버튼을 클릭하여 삭제
# 멀티 주석 삭제
1. esc를 눌러 명령어 모드 진입
2. v를 누르면 visual 모드로 전환 되는데 hjkl 을 사용하여 (화살표 키 사용하면 안됨) 블록 지정
3. :를 누르면 :'<,'> 이 표시가 되는데 그 문자를 놔두고 아래처럼 입력
:'<,'>norm 1x (앞쪽 1개의 문자가 삭제됨)
:'<,'>norm 2x (앞쪽 2개의 문자가 삭제됨)
# Encoding (Charset) 확인
1. esc를 눌러 명령어 모드 진입
2. :set encoding
# Encoding (Charset) 변경하여 보기
1. esc를 눌러 명령어 모드 진입
2. :e ++enc=UTF-8
:e ++enc=EUC-KR
# Encoding (Charset) 변경하여 저장
1. esc를 눌러 명령어 모드 진입
2. :set fileencoding=UTF-8
:set fileencoding=EUC-KR
# 붙여넣기 시 탭 들여쓰기 없애기
# 현재 설정 확인
# 기본으로는 paste 옵션이 없음
:set
# paste 옵션 설정 (붙여넣기 시 자동 들여쓰기 안함)
:set paste
# nopaste 옵션 설정 (붙여넣기 시 자동 들여쓰기 함)
:set nopaste
# paste / nopaste 옵션을 단축키 (F2)로 설정하기
#
$> vi ~/.vimrc
nnoremap <F2> :set invpaste paste?<CR>
set pastetoggle=<F2>
set showmode
[Profile]
vi ~/.bash_profile
#!/bin/bash
# 폴더/파일을 생성할 때 기본 퍼미션 조정
# Default : 0002
# 설정된 umask 확인 : umask
# 설정된 umask 문자열로 확인 : umask -S
# 폴더 : 777 권한에서 umask에 설정된 값을 뺀 권한이 실제 권한
# 파일 : 폴더 권한에 실행권한(1)을 뺀 권한이 실제 권한, 666에서 시작
# 예제
# 0000 : 폴더 권한(777), 파일 권한(666)
# 0001 : 폴더 권한(776), 파일 권한(665)
# 0002 : 폴더 권한(775), 파일 권한(664)
# 0022 : 폴더 권한(755), 파일 권한(644)
# 0077 : 폴더 권한(700), 파일 권한(600)
umask 022
### AIX 전용
# vi 사용하듯이 편집기 사용
# set -o vi
# back space 적용
# stty erase ^?
[폴더 삭제]
# 하위 폴더만 삭제
find 상위경로 -mindepth 1 -type d -exec rm -rf {} \;
# 하위 폴더만 삭제
ls -al | grep ^d | grep -wv "\." | awk '{print $NF}' | xargs rm -rf
# 특정 폴더에서 하위 폴더만 삭제
ls -al /경로 | grep ^d | grep -wv "\." | awk '{print $NF}' | xargs rm -rf
# .svn 파일 삭제
find . -name .svn -print0 | xargs -0 rm -rf
FOR /R %1 %%1 IN (.svn) DO RMDIR /S /Q "%%1" (Windows 버전)
[Echo Color 적용]
참고 : https://stackoverflow.com/questions/5947742/how-to-change-the-output-color-of-echo-in-linux
# 사용예제
# -e : 백슬래시 escape를 활성화하는 옵션
# 강조된 Red로 출력
$> ehco -e "\033[0;91m<TEXT>\033[0m"
# Bold & 강조된 Yellow로 출력
$> echo -e "\e[0;93m<TEXT>\e[0m"
# Color/Style 샘플
# Reset
Color_Off='\033[0m' # Text Reset
# Regular Colors
Black='\033[0;30m' # Black
Red='\033[0;31m' # Red
Green='\033[0;32m' # Green
Yellow='\033[0;33m' # Yellow
Blue='\033[0;34m' # Blue
Purple='\033[0;35m' # Purple
Cyan='\033[0;36m' # Cyan
White='\033[0;37m' # White
# Bold
BBlack='\033[1;30m' # Black
BRed='\033[1;31m' # Red
BGreen='\033[1;32m' # Green
BYellow='\033[1;33m' # Yellow
BBlue='\033[1;34m' # Blue
BPurple='\033[1;35m' # Purple
BCyan='\033[1;36m' # Cyan
BWhite='\033[1;37m' # White
# Underline
UBlack='\033[4;30m' # Black
URed='\033[4;31m' # Red
UGreen='\033[4;32m' # Green
UYellow='\033[4;33m' # Yellow
UBlue='\033[4;34m' # Blue
UPurple='\033[4;35m' # Purple
UCyan='\033[4;36m' # Cyan
UWhite='\033[4;37m' # White
# Background
On_Black='\033[40m' # Black
On_Red='\033[41m' # Red
On_Green='\033[42m' # Green
On_Yellow='\033[43m' # Yellow
On_Blue='\033[44m' # Blue
On_Purple='\033[45m' # Purple
On_Cyan='\033[46m' # Cyan
On_White='\033[47m' # White
# High Intensity
IBlack='\033[0;90m' # Black
IRed='\033[0;91m' # Red
IGreen='\033[0;92m' # Green
IYellow='\033[0;93m' # Yellow
IBlue='\033[0;94m' # Blue
IPurple='\033[0;95m' # Purple
ICyan='\033[0;96m' # Cyan
IWhite='\033[0;97m' # White
# Bold High Intensity
BIBlack='\033[1;90m' # Black
BIRed='\033[1;91m' # Red
BIGreen='\033[1;92m' # Green
BIYellow='\033[1;93m' # Yellow
BIBlue='\033[1;94m' # Blue
BIPurple='\033[1;95m' # Purple
BICyan='\033[1;96m' # Cyan
BIWhite='\033[1;97m' # White
# High Intensity backgrounds
On_IBlack='\033[0;100m' # Black
On_IRed='\033[0;101m' # Red
On_IGreen='\033[0;102m' # Green
On_IYellow='\033[0;103m' # Yellow
On_IBlue='\033[0;104m' # Blue
On_IPurple='\033[0;105m' # Purple
On_ICyan='\033[0;106m' # Cyan
On_IWhite='\033[0;107m' # White
# Escape 문자
| | bash | hex | octal | NOTE |
|-------+-------+---------+---------+------------------------------|
| start | \e | \x1b | \033 | |
| start | \E | \x1B | - | x cannot be capital |
| end | \e[0m | \x1b[0m | \033[0m | |
| end | \e[m | \x1b[m | \033[m | 0 is appended if you omit it |
| | | | | |
# 예제
| color | bash | hex | octal | NOTE |
|-------------+--------------+----------------+----------------+---------------------------------------|
| start green | \e[32m<text> | \x1b[32m<text> | \033[32m<text> | m is NOT optional |
| reset | <text>\e[0m | <text>\1xb[0m | <text>\033[om | o is optional (do it as best practice |
| | | | | |
[LVM - Logical Volume Manager]
개념 : https://tech.cloud.nongshim.co.kr/2018/11/23/lvmlogical-volume-manager-1-%EA%B0%9C%EB%85%90/
* 용어
- PV (Physical Volume) : LVM에서 물리적인 디스크를 사용하기 위해 PV로 초기화가 필요, PE의 그룹
- PE (Physical Extent) : PV를 구성하는 일정크기 블록으로 LVM2에서는 4MB, LV의 LE와 1:1 대응됨
- VG (Volume Group) : PV의 집합으로 LV를 할당 할 수 있음
- LV (Logical Volume) : 논리 스토리지로 사용자가 최종 사용하게 되는 볼륨, LE의 그룹
- LE (Logical Extent) : LV를 구성하는 블록으로 PE 사이즈와 동일
# VG 확인
$> vgs
$> vgdisplay
VG #PV #LV #SN Attr VSize PFree
ubuntu-vg 1 1 0 wz--n- <464.26g <264.26g => 500GB 디스크임, 464GB 중 200GB는 할당되어 있고 264GB가 현재 남아 있음
# PV 확인
$> pvs
$> pvdisplay
PV VG Fmt Attr PSize PFree
/dev/nvme0n1p3 ubuntu-vg lvm2 a-- <464.26g <264.26g
# LV 확인
$> lvs
$> lvdisplay
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
ubuntu-lv ubuntu-vg -wi-ao---- 200.00.g
# PV 생성
$> pvcreate /dev/sdb1 => 두번째 ssd의 첫번째 파티션을 PV로 생성
$> pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 lvm2 --- 220.0g 220.0g
/dev/nvme0n1p3 ubuntu-vg lvm2 a-- <464.26g <264.26g
# VG 확장
$> vgextend ubuntu-vg /dev/sdb1 => 500GB 중 200GB만 할당된 ubuntu-vg에 /dev/sdb1을 확장함
$> vgs
VG #PV #LV #SN Attr VSize PFree
ubuntu-vg 2 1 0 wz--n- <684.26g <484.26g
# LV 확장
$> lvextend -L+220G /dev/ubuntu-lv
# MBR / GPT
- MBR : 주 파티션 4개까지 사용, 디스크 최대 용량 2TB, BIOS가 설치된 PC에서 사용
- GPT : 주 파티션 128개까지 사용, 디스크 최대 용량 9.4ZB, UEFI가 설치된 PC에서 사용
* 파티션 툴을 사용할 때 MBR은 fdisk, GPT는 parted를 사용
# Partition 확인
$> parted -l
$> fdisk -l
# Partition 명령어
$> parted /dev/sda
$> fdisk /dev/sda (/dev/sda는 device의 sd (ssd)의 a (첫번째 디스크))
$> fdisk /dev/nvme0n1 (첫번째 nvme 디스크)
# Partition 분할 (디스크 추가로 삽입한 경우)
$> parted /dev/sdb
(parted) mklabel gpt
(parted) mkpart primary 0 3TB => 0부터 3TB를 첫번째 파티션으로 설정
(parted) mkpart primary 3TB 100% => 3TB 이후 모든 용량을 두번째 파티션으로 설정
(parted) print => 파티션 확인
(parted) quit
# Format
$> mkfs.ext4 /dev/sdb1
$> mkfs.ext4 /dev/sdb2
# Mount
$> mount /dev/sdb1 /logs
$> mount /dev/sdb2 /backup