빠른 노트 정리

김재현·2023년 7월 27일
0

Linux

목록 보기
1/12
post-thumbnail

빠른 노트 개요

이 포스트는 리눅스 시스템을 대상으로 엔지니어링을 진행했을 때, 자주 사용하거나 잘 몰랐던 해결 방법을 작성하였다.

1. iscsi initiator 서버에 등록된 target 정보 삭제

# iscsiadm -m discovery -t st -p <target ip>
위 명령어로 등록된 target 서버의 정보는 아래 디렉터리에 저장된다.

# ll /var/lib/iscsi/
drwxr-xr-x 2 root root  6 Jul  3  2020 ifaces
drwxr-xr-x 2 root root  6 Jul  3  2020 isns
drwxr-xr-x 3 root root 43 Jul 11 10:03 nodes
drwxr-xr-x 3 root root 31 Jul 11 10:03 send_targets
drwxr-xr-x 2 root root  6 Jul  3  2020 slp
drwxr-xr-x 2 root root  6 Jul  3  2020 static

nodes, send_targets 디렉터리를 삭제하여 target 정보를 reset 한다.
# rm -rf /var/lib/iscsi/nodes /var/lib/iscsi/send_targets

2. SSH를 비밀번호 인증 방식으로 로그인

# vi /etc/ssh/sshd_config

...
PasswordAuthentication NO -> Yes 로 변경
...

# systemctl restart sshd

sshd 를 재시작할 경우 ssh로 연결된 세션은 모두 끊기게 되므로
서버에 다른 작업이 진행되고 있을 경우 주의해야 한다.

3. 리눅스 모니터링 명령어

리눅스에서 설정값을 변경할 때, 변경되는 점을 실시간으로 확인하기 위해
아래와 같은 명령어를 사용하여 확인이 가능하다.
Ctrl+C 단축키로 모니터링을 종료한다.

# watch -d -n 1 "cat /proc/net/bonding/bond0"
-d: 변경되는 항목을 하이라이트함
-n: 새로고침 주기를 초 단위로 설정 (최소 0.1초까지 설정 가능)

# tail -f /var/log/messages
-f: 파일의 변화를 실시간으로 출력함

4. Ventoy VS Rufus

Ventoy / Rufus 는 Baremetal 서버에 운영체제를 설치하기 위해 부팅 가능한 USB 드라이브를 생성하는 도구로, 차이점은 다음과 같다.

  • Ventoy
    다중 부팅 USB를 만드는 데 특화되어 있다.
    단일 USB 드라이브에 여러 ISO 이미지를 복사하고 드라이브를 연결한 후 부팅을 할 경우 ISO 이미지를 선택할 수 있다.
    Linux Local Repository 설정이 불가능하다는 단점이 있다.
  • Rufus
    다중 부팅을 지원하지 않는다.
    USB 드라이브에 ISO 이미지를 복사하여 단일 운영 체제를 부팅할 수 있다.
    Linux Local Repository 설정이 가능하다.

5. Vim 단축키

Vim 은 Linux 에서 사용되는 텍스트 편집기로 명령을 입력하여 텍스트를 편집하는 도구이다.
Vim 에서 주로 사용되는 단축키는 다음과 같다.

gg - 본문의 맨 위로 이동
G - 본문의 맨 아래로 이동

/<문자> - 문자 찾기
n - 동일한 다음 문자 찾기
N - 동일한 이전 문자 찾기

V - Visual 모드(Drag 모드)
dd - 잘라내기
3yy - 현재 라인에서 아래 3라인까지 복사
p - 잘라내거나 복사한 라인을 붙여넣기
:norm i# - 각 라인의 맨 앞에 주석 넣기(#)
:norm 1x - 각 라인의 맨 앞 글자 지우기


u - undo 기능(Window 의 Ctrl+Z 와 동일)
ctrl + r - redo 기능

:.! - 쉘에 해당 명령어를 입력할 때 출력되는 결과를 파일에 입력
ex) :.!lsblk

6. Linux 메모리 정보 MB 단위로 출력

Linux 에서 메모리 정보를 확인하는 방법은 다음과 같다.
# free -h
# cat /proc/meminfo

아래 명령어를 사용하여 meminfo 결과값을 MB 단위로 출력한다.
# awk '$3=="kB"{$2=$2/1024;$3="MB"} 1' /proc/meminfo | column -t

7. Yum / Dnf

Yum / Dnf 명령어는 리눅스 배포판에서 패키지 관리를 위해 사용되는 도구이다.
RedHat, CentOS, Fedora 계열에서 사용되며 8버전 이후 Dnf 를 사용한다.
Dnf 는 간단하게 Yum 명령어의 업데이트된 명령어라고 생각하면 된다.

  • vim 패키지 설치
    # yum install vim

  • vim 패키지 삭제
    # yum remove vim

  • vim 패키지 버전 업데이트(최신 버전의 rpm 파일이나 Repository 구성이 필요)
    # yum update vim

  • 현재 Repository 에서 vim 패키지 검색
    # yum search vim

  • Repository 구성 확인
    # yum repoinfo ; yum repolist

  • iscsiadm 명령어의 패키지 명 확인
    # yum provides iscsiadm

8. root 유저 비밀번호를 분실했을 경우

Linux 시스템을 운영하다 보면 root 유저의 비밀번호를 분실하는 경우가 있다.
비밀번호를 재설정하는 방법은 다음과 같다.

  1. 시스템 Reboot 후 Menuentry 화면에서 GRUB edit mode 로 진입
    (e 키)

  2. linux 행 끝에 rd.break 매개변수 추가

linux16 /vmlinux-3.10... rd.break
  1. 파일 시스템을 쓰기 가능으로 Remount
    # mount -o remount,rw /sysroot

  2. 파일 시스템 root 변경
    # chroot /sysroot

  3. passwd 명령어로 비밀번호 변경
    # echo 'p@ssw0rd' | passwd root --stdin

  4. 파일 레이블 재지정(SELinux 활성화 상태에서 진행 - 비활성화일 경우 필요하지 않음)
    # touch /.autorelabel

  5. 파일 시스템일 읽기 전용으로 Remount
    # mount -o remount,ro /

  6. exit 하여 시스템 재부팅
    # exit

  • 아래 가이드는 SELinux 레이블 재지정하는 시간을 생략하는 방법이다.
  1. SELinux 레이블 재지정 시간 생략
    9-1. enforcing=0 매개변수 추가
    linux16 /vmlinux-3.10... rd.break enforcing=0
    9-2. SELinux 보안 컨텍스트 복원
    # restorecon /etc/shadow
    9-3. SELinux 정책을 켜고 확인
    # setenforce 1
    # getenforce
    Enforcing
    // enforcing=0 옵션을 추가할 경우 # touch /.autorelabel 단계를 생략할 수 있다.

9. 시스템 시간 설정

date 명령어를 사용하여 시간을 설정한 후 시스템이 재시작될 경우 시간 설정이 초기화된다.
하드웨어 시간을 같이 설정할 경우 초기화되지 않는다.
# date -s "2023-07-27 13:50:00"
# hwclock --localtime --systohc
# hwclock -r

10. iscsi 공유 disk

iscsi 를 사용하여 두 개의 노드에서 하나의 디스크를 공유하는 방식으로 시스템이 구축될 경우
한쪽 노드에서 설정한 값이 반대쪽 노드에서 확인이 안되는 경우가 있다.
아래 가이드에 따라 반대쪽 노드에서 변경된 값 확인이 가능하다.

  1. pv 재감지
    # pvscan --cache

  2. 파티션 정보 새로 불러오기
    # partprobe

  3. lvmetad 재시작
    # systemctl restart lvm2-lvmetad

  • 또한 iscsi 디스크를 증설했을 경우, 디스크 정보를 rescan 하는 방법은 다음과 같다.
  1. Initiator 노드에서 rescan
    # iscsiadm -m session --rescan
  2. multipath 로 구성될 경우 multipath resize 진행
    # multipathd resize map mpatha

11. 좀비 프로세스 감지 및 삭제

좀비 프로세스는 프로세스가 종료된 이후에도 부모 프로세스가 해당 프로세스의 상태를 확인하고 있는 상태를 말한다.
좀비 프로세스가 적으면 큰 문제는 없겠지만, 많아질 경우 제한된 PID 개수를 좀비 프로세스가 차지하여 새로운 프로세스 생성이 불가능한 경우가 발생할 수 있다.

  • 좀비 프로세스 확인
    # ps -ef | grep defunct | grep -v "grep"

  • 좀비 프로세스 제거
    서비스중인 서버에서 진행할 경우 서비스에 영향이 없는지 확인 후 진행해야 한다.
    # kill -9 <Zombie PID>

  • 모든 좀비 프로세스 제거
    # ps -ef | grep defunct | awk '{print $3}' | xargs kill -9

  • 시스템 PID 최대값 확인
    #sysctl -a | grep pid_max

12. 모든 tar 파일 압축해제

tar 명령어는 와일드 마스크를 사용할 수 없다.
따라서 exec 명령어를 사용하여 모든 tar 파일을 압축해제 할 수 있다.
# find . -name "*.tar*" -exec tar xvf {} \;

13. GUI 환경에서 virbr0 인터페이스 제거

Linux 를 GUI 환경으로 설치할 경우 가상화 환경 구성에 필요한 virbr0 및 virbr0-nic 장치가 기본적으로 생성되는 것을 확인할 수 있다.
libvirt 패키지를 설치할 경우 생성되는 가상 인터페이스로, 불필요한 경우 수동으로 제거하거나 패키지를 삭제한다.

  1. libvirtd 비활성화
    # systemctl disable --now libvirtd
  2. link down 설정
    # ip link set virbr0 down
  3. bridge device 제거
    # brctl delbr virbr0
  4. link delete 설정
    # ip link del virbr0-nic

14. RHEL8 Faillock 설정

RHEL 8버전 이후부터 /etc/pam.d/ 디렉터리 내 파일을 직접 수정하는 방법은 권장되지 않는다.
따라서 faillock 을 이용하여 계정 잠금 임계값을 설정할 수 있다.

  1. sssd 정책을 선택
    # authselect select sssd

  2. 현재 정책에 faillock 적용
    # authselect enable-feature with-faillock

  3. faillock 설정
    # vi /etc/security/faillock.conf

dir=/var/run/faillock
audit
silent
deny=3
unlock_time=600
  1. 변경사항 적용
    # authselect apply-changes

  2. 현재 선택된 정책 확인
    # authselect current

15. Web Repository 서버 구축

Linux 를 사용할 때 외부에 있는 Repository 를 사용하지만 보통은 폐쇄망에서 서비스가 운영된다.
이 경우 Local Repository 를 구성하여 패키지를 설치하지만 여러 운영 체제에서 같은 Repository 를 바라보도록 구성해야 한다면 내부 Web Repository 를 구축하는 방법이 있다.

내부 Web Repository 를 구성할 경우 80/tcp 포트가 Open 상태이거나, 방화벽을 비활성화 해야한다.

Repository Master 서버 구축

  1. http 패키지 설치
    # yum install httpd

  2. 마운트 디렉터리 생성
    # mkdir /rhel79

  3. ISO 파일 마운트
    # mount /dev/sr0 /rhel79

  4. 심볼릭 링크 생성
    # ln -s /rhel79 /var/www/html/rhel79
    # ls -al /var/www/html/rhel79

Client 서버에서 확인

  1. web-local.repo 파일 생성
    # vi /etc/yum.repos.d/web-local.repo
[web-local]
name=web-local
baseurl=http://Master-IP/rhel79
gpgcheck=0
enabled=1
  1. Yum Cache 초기화 및 리스트 조회
    # yum clean all ; yum repoinfo

16. Swap 메모리 파일 형식으로 증설

Swap 메모리는 컴퓨터의 물리적인 RAM 용량을 보완하기 위해 사용되는 가상 메모리이다.
시스템의 RAM이 부족할 때 Swap 메모리를 사용하여 추가 메모리 공간을 확보한다.
추가 메모리 공간을 확보함으로써 다중 프로세스를 동시에 처리하고 대규모 프로그램을 실행한다.

  1. Swap 파일로 생성할 디렉터리 생성
    # mkdir /root/ex_swap

  2. 특정 크기의 파일 생성
    # dd if=/dev/zero of=/root/ex_swap/<swapfile_name> bs=1M count=<MB>

  3. 파일 권한 변경 및 Swap 파일 변환
    # chmod 600 /root/ex_swap/ex_swap
    # mkswap /root/ex_swap/ex_swap

  4. Swap 활성화
    # swapon /root/ex_swap/ex_swap

  5. Swap 용량 확인
    # free -h
    # swapon -v

  6. fstab 등록(Reboot 이후에도 유지해야 할 경우)
    # vi /etc/fstab

/root/ex_swap/ex_swap	swap	swap	defaults	0 0
  1. 증설된 Swap 비활성화 및 삭제
    # swapoff /root/ex_swap/ex_swap
    # rm /root/ex_swap/ex_swap

17. RHEL App core dump

시스템 운영 중 응용 프로그램이 비정상적으로 종료되거나 크래시가 발생했을 때,
해당 응용 프로그램의 상태와 메모리 덤프를 생성할 수 있다.
core dump 는 개발자와 시스템 관리자가 크래시 원인을 분석하고 디버깅하는데
큰 도움을 준다.

  1. 쉘 스크립트 생성
    # vi App\coredump.sh
#! /bin/bash
sed -i 's/#DefaultLimitCORE=/DefaultLimitCORE=infinity/g'/etc/systemd/system.conf
systemctl daemon-reexec
	
cat << EOF >> /etc/sysctl.conf
kernel.core_pattern=/var/crash/core_%e_%p_%h_%t
kernel.core_uses_pid=1
fs.suid_dumpable=1
EOF
sysctl -p
	
cat <<EOF>> /etc/security/limits.d/00-default-limits.conf
* soft core unlimited
* hard core unlimited
EOF
  1. 쉘 스크립트 실행 및 시스템 재시작
    # sh Appcoredump.sh
    # shutdown -r now

  2. core dump 생성 테스트
    # sleep 600 &
    // 테스트용 프로세스 생성
    # ps aux | grep sleep
    // 프로세스 확인
    # kill -SIGABRT <sleep PID>
    // 프로세스에 비정상적인 종료 시그널을 보냄
    # ls -al /var/crash
    // core dump 파일 확인

profile
Linux/Cluster/Infra Engineer

2개의 댓글

comment-user-thumbnail
2023년 7월 27일

유익한 글이었습니다.

1개의 답글

관련 채용 정보