[환경정보]

# 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

+ Recent posts