728x90
반응형

CAPEX: Capital Expenditures, 자본적 지출

- 미래의 이윤 창출, 가치의 취득을 위해 지출된 투자 과정에서의 비용

- 설비 투자 비용

 

OPEX: Operating Expenditure, 업무지출/운영비용

- 갖춰진 설비를 운영하는 데 드는 제반 비용

- 운영 및 유지보수 비용

 

GRE(Generic Routing Encapsulation)

라우팅이 불가능한 패킷을 라우팅 가능한 패킷의 내부에 넣어서 전송할 때 사용하는 터널링 프로토콜


시스템 점검

방법1) 작업 관리자의 성능 > 리소스 모니터 열기

방법2) cmd > resmon

 

Windows CPU 사용률 확인

cmd > wmic cpu get loadpercentage

cmd > tasklist (작업 목록: 실행 중인 프로세스 및 관련 CPU 사용량 목록)

 

Windows Mem 확인

cmd > wmic os get FreePhysicalMemory

cmd > systeminfo | find "사용 가능한 실제 메모리"

 

Windows Disk 확인

cmd > wmic diskdrive get deviceid, model, size

[윈도우키 + R] diskmgmt.msc

 

Windows 시스템 정보

cmd > msinfo32

 

Linux CPU 사용량 확인

top

glance

 

Linux Mem 확인

vmstat

 

Linux Disk 용량 확인

df (disk free): 파일 시스템의 사용 가능 공간 표시, FileSystem / Mounted on

df . : 현재 디렉토리가 포함된 파티션의 남은 용량 확인

du (disk usage): 해당 디렉토리(파일)의 디스크 크기확인 명령어

* 파일 시스템: 컴퓨터에서 파일이나 자료를 쉽게 발견 및 접근할 수 있도록 보관 또는 조직하는 체제

* 마운트: 디스크와 같은 물리적인 장치를 특정 위치, 즉 디렉터리에 연결시켜 주는 것

- 보조기억장치나 파일 시스템이 다른 디스크를 /의 하위 디렉터리로 연결하여 사용 가능하게 해주는 명령어

 

crontab

특정 작업을 주기적으로 실행하기 위해 사용(cron table)

시스템에 동작하는 crontab 전체 목록 조회: /etc/crontab 파일 확인

 

-e (edit user's crontab), crontab 내용 입력/수정

-l (list user's crontab), 현재 로그인한 user의 cron 목록 조회

-r (delete user's crontab), ctontab 내용 삭제

-i (prompt before deleting user's crontab), crontab 내용 삭제 전 확인 문구 띄우기

-u : 특정 user의 crontab을 설정할 때

 

적용 후 restart

service cron restart
service crond restart  // cron이 재시작되지 않을 경우

 

Server에 하드웨어 정보 확인

dmidecode(Desktip Management Interface) 사용

: 서버의 모든 하드웨어 정보를 확인할 수 있음, 시스템 정보가 모두 출력됨

 

/opt 폴더 내 서버 정보 폴더명 확인 가능 (e.g., HP, Dell)

/proc/version 파일 내 Linux version, Ubuntu/CentOS 정보 확인 가능 (혹은 uname -a)

코드명(Codename) 확인(focal, bionic, ...)

lsb_release -c

 

yum: Redhat 계열

apt-get: 레드햇 엔터프라이즈 페도라 CentOS 데비안, 우분투 계열

 

 

[참고]

dmidecode

https://blessu1201.github.io/2020/08/10/serverhw.html

HP UX 시스템 정보 및 점검 명령어

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=hymne&logNo=221260066306 

 

 

728x90
728x90

'Development > Linux' 카테고리의 다른 글

[Linux] 리눅스 기본 시스템 명령어  (0) 2023.01.10
[SSH] ping test smtp  (0) 2022.11.14
[Github] 기초 사용법  (0) 2022.11.08
[SSH] 리눅스 서버 원격 접속  (0) 2022.11.07
[리다이렉션] Linux File Descriptor  (0) 2022.11.07
728x90
반응형

[기본 명령어]

명령어 설명 위치 입력
whatis 명령어의 간단한 설명 보기 /usr/bin/whatis whatis [명령어]
man 매뉴얼 보기 /usr/bin/man man [option] [섹션] [명령어]
arch 컴퓨터 종류 알기 /bin/arch -

[시스템 명령어]

명령어 설명 위치 입력
w 접속한 사용자 정보 조회 /usr/bin/w  
ulimit 시스템 제한   ulimit [option] [제한]
ulimit [리소스] [최대치]
uname 시스템 정보 확인 /bin/uname uname [option]

w: 서버에 접속한 사용자의 접속 정보와 작업에 대한 정보 확인

arch: 시스템의 CPU에 대한 정보 확인

ulimit: 시스템 리소스에 대해 최대 한계를 지정

uname: 시스템에 대한 정보 출력(하드웨어 타입, 호스트명, 운영체제 릴리즈 번호 등의 정보 확인)


[ulimit 명령어 옵션]

option 의미 option 의미
-a 현재 시스템의 제한 사항을 모두 출력 -c 코어 파일의 최대 크기 출력
-d 프로세스의 데이터 세그먼트의 최대 크기 출력 -f 쉘이 만들 수 있는 파일의 최대 크기 출력
-m 상주 설정 최대 크기 출력 -s 최대 스택 크기 출력
-t 초 단위의 최대 CPU 시간 출력 -p 512바이트 블록 단위로 파이프의 크기
-n 열 수 있는 파일의 수 -u 단일 사용자에게 허용하는 프로세스의 최대 개수
-v 쉘에 허용하는 가상 메모리의 최대량 -S 소프트 제한 출력
-H 하드 제한 출력    

[uname 명령어 옵션]

option 의미 option 의미
-a 모든 정보 출력 -m 하드웨어 타입 출력
-n 호스트명 출력 -r 운영체제의 릴리즈 번호를 출력
-s 운영체제 이름 출력 -v 운영체제 버전 출력

 

 

728x90
728x90

'Development > Linux' 카테고리의 다른 글

[시스템 점검] Window/Linux system - CAPEX/OPEX  (0) 2023.06.23
[SSH] ping test smtp  (0) 2022.11.14
[Github] 기초 사용법  (0) 2022.11.08
[SSH] 리눅스 서버 원격 접속  (0) 2022.11.07
[리다이렉션] Linux File Descriptor  (0) 2022.11.07
728x90
반응형

3초 이내로 timeout

timeout = 3
socket.setdefaulttimeout(timeout)

 

현재 스크립트 파일이 실행되는 상태 파악

- main 함수 실행

if __name__ == "__main__":
	main()

 

strftime(): 날짜 형식을 변환하는 메서드

time = datetime.datetime.now()
strtime = self.time.strftime('%Y-%m-%d %H:%M:%S')
print("origin-time:", time, "/ string-time:", strtime)
origin-time: 2022-11-09 10:47:48.387960 / string-time: 2022-11-09 10:47:48

server information 빈 array 만들고,

server result success/fail dictionary 구조

import paramiko
import getpass
import socket
import datetime
import os
import sys

timeout = 3
socket.setdefaulttimeout(timeout)

class maintenance:
    def __init__(self, ser_info):
        self.port = 22
        self.ser = ser_info
        self.time = datetime.datetime.now()
        self.systime = self.time.strftime('%y%m%d_%H%M%S')
        print(self.systime)
        self.ssh_connection()
        
    def ssh_connection(self):
        try:
            # ssh server connected class - present pc: client
            ssh = paramiko.SSHClient()
            # ssh session key rule: paramiko.AutoAddPolicy()
            ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
            
            server = '192.168.5.132'
            user = input("Username: ")
            pwd = getpass.getpass("Password: ")
            
            # ssh server connect
            ssh.connect(server, port=22, username=user, password=pwd)
            print('--------------- SSH Connected ---------------\n')
            
            # ssh route directory/file list check
            stdin, stdout, stderr = ssh.exec_command('df -h')
            print(''.join(stdout.readlines()))
            
            self.system_check(server, user, pwd)
            
            ssh.close()
        except Exception as err:
            print(err)
    
    def system_check(self, server, user, pwd):
        
        # if server == '192.168.5.132':
        #     file_name = 'server_#1'
        try:
            ser_result_success = {}
            ser_result_fail = {}
            msg_text = ''
            
            print('--------------- ping test ---------------')
            # -n: number of packet transmissions(1)
            response = os.system("ping -n 1 " + server)
            if response == 0:
                Netstatus = "Network Active"
            else:
                Netstatus = "Network Error"
            file_name = self.save_results(server, Netstatus)
            
        except Exception as err:
            print(err)

    def save_results(self, server, ping_result):
        try:
            # realpath, abspath
            BASE_DIR = os.path.dirname(os.path.abspath(__file__))
            w_file_name = f'{self.systime}_{server}_result.log'
            print(BASE_DIR)
            with open(os.path.join(BASE_DIR, w_file_name), 'w') as f:
                # for k, v in ping_result.items():
                doc = f"{ping_result}"
                f.write(doc)
                
        except Exception as err:
            print(err)
            
    # def send_mail(self, server, ):
    #     return 0
def main():
    
    # system arguments value (default 1)
    print(sys.argv, len(sys.argv))
    
    # c:/Users/user/Desktop/sehee/system/git/sshtest.py
    ser_check_file = sys.argv[0]
    # []: Array / {}: Dictionary / (): Tuple    
    ser_info = []

    with open(ser_check_file, 'r') as file:
        lines = file.read().splitlines()
        for line in lines:
            line = line.split(",")
            ser_info.append(line)
    
    # maintenance(ser_info).ssh_connection()
    maintenance(ser_info)

# main script run
if __name__ == "__main__":
    main()

 

실행 명령어 exec_command를 입력하게 되면, 값을 tuple 형식으로 세 개를 받아옴

stdin, stdout, stderr

 

메일 전송 프로토콜

SMTP를 사용하기 위해 필요한 smtplib 모듈 import

MIME 클래스: 이메일과 함께 전송할 파일을 텍스트 형식으로 변환해주는 역할

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

 

Google 계정 관리 > 보안 > 2단계 인증 > 비밀번호 입력(로그인) > 2단계 인증 후

앱 비밀번호 > 비밀번호 입력(로그인) > 앱 선택: 메일 / 기기 선택: Windows 컴퓨터 > 생성

파일 생성하여 첨부

attachment = open(BASE_DIR+'\\'+file_name, 'rb')
part = MIMEBase('application', 'octet-stream')
part.set_payload((attachment).read())
encoders.encode_base64(part)
part.add_header('Content-Disposition', "attachment; filename= "+file_name)
msg.attach(part)

 

728x90
728x90
728x90
반응형

https://git-scm.com/download/win

 

Git - Downloading Package

Download for Windows Click here to download the latest (2.38.1) 32-bit version of Git for Windows. This is the most recent maintained build. It was released 20 days ago, on 2022-10-18. Other Git for Windows downloads Standalone Installer 32-bit Git for Win

git-scm.com

Click here to download 클릭하여 Git Bash 설치

모두 기본 설정으로 넘긴 후

기본 폴더 우클릭 > Git Bash Here 실행

깃허브에 저장소 작성 또는 복제

git init
git clone

git config --global user.name "username"
git config --global user.email email@email.com
git config --list

로컬 저장소에 sshtest.py 파일 추가

git add .: 현재 및 하위 디렉토리의 모든 파일 index 추가

git add sshtest.py
git add .

로컬 저장소에 파일 추가/변경 사항 기록

설명: ssh connection test

설명 변경(수정): change description

git commit -m "ssh connection test"
git commit --amend -m "change description"

git status

Github의 Repository 추가하여 copy 후

원격 저장소의 정보(주소) 추가

git remote add origin https://github.com/sehee1122/SystemMaintenance.git

로컬 저장소의 변경 사항을 원격 저장소에 반영

git push origin master

Sign in with a code를 선택할 경우
Sign in with your browser

Authorize

branch 생성됨, 이후

git merge <branch>
git pull <remote> <branch>

git merge master
git pull origin master

branch 변경(변경할 브랜치 작성(e.g. main, master))

git checkout <branch>

전체 과정

 

728x90
728x90
728x90
반응형

GRE Tunnel

Generic Routing Encapsulation, 패킷을 캡슐화(또는 터널링)하여 공용 네트워크를 통해 패킷을 전송할 수 있는 안전한 전용 경로 제공

 

paramiko 패키지: SSH 연결(기본 포트: 22)

실행: a i s o

Ubuntu에 해당 패키지가 깔리지 않을 경우, 패키지 조회

E: Unable to locate package

Ubuntu Packages Search

 

SSH server 설치

sudo apt-get install ssh
vi /etc/ssh/sshd_config

관리자 계정 root로 로그인이 가능하도록 다음 코드 입력

PermitRootLogin yes

이후 SSH 서버 실행

sudo service ssh start

실행 상태 및 프로세스 정보 확인

service ssh status
ps -ef | grep sshd
sudo netstat -ntlp | grep sshd

ifconfig로 내부 IP 주소 확인(192.168.5.132)

Windows에서 PuTTY로 확인했을 때, 다음과 같이 key exchange algorithm 오류

1) Ubuntu(서버)에서 putty 설치(선택)

2) UFW 방화벽 시스템의 SSH 포트 open

sudo apt install -y putty
sudo ufw allow ssh

다시 Windows에서 접속

ssh (계정명)@(서버IP)

> yes > 비밀번호 입력

코드 작성하여 실행하면 다음과 같이 파일 시스템 디스크 공간(df) 정보 확인

pip install paramiko
import paramiko
import getpass

try:
    # ssh server connected class - present pc: client
    ssh = paramiko.SSHClient()
    # ssh session key rule: paramiko.AutoAddPolicy()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    
    server = '192.168.5.132'
    user = input("Username: ")
    pwd = getpass.getpass("Password: ")
    
    # ssh server connect
    ssh.connect(server, port=22, username=user, password=pwd)
    print('ssh connected\n')
    
    # ssh route directory/file list check
    stdin, stdout, stderr = ssh.exec_command('df -h')
    print(''.join(stdout.readlines()))
    
    ssh.close()
except Exception as err:
    print(err)


참고 자료

Troubleshooting “E: Unable to locate package” Error on Ubuntu [Beginner’s Tutorial]

 

 

 

728x90
728x90
728x90
반응형

Find 결과에서 Permission denied 제거하기

find / -name "filename" 2>&1 | grep -v Permission

표준 출력: stdout

표준 에러: stderr

리다이렉션

Redirection, 방향을 변경하는 것

파일로 표준 입력을 받고, 파일로 표준 출력을 받는 등의 기능

리다이렉션 기호 형태 의미
< [명령어] < [파일] 파일의 내용을 명령어의 입력으로 사용
> [명령어] > [파일] 명령어의 결과(표준 출력)를 파일에 덮어씀
>> [명령어] >> [파일] 명령어의 결과를 파일에 추가

 기본 형태

형태 의미
[명령어] 1> [파일] [명령어] > [파일] 과 같은 의미, 표준 출력을 [파일]에 덮어씀
[명령어] 2> [파일] [명령어] 실행 시, 에러가 발생한다면 → 에러 내용을 [파일]에 덮어씀
[명령어] 1> [파일A] 2> [파일B] [명령어] 실행 시, 결과는 [파일A]에, 에러는 [파일B]에 덮어씀
[명령어] 1> [파일] 2> [파일] [명령어] 실행 시, 표준 출력과 에러를 모두 [파일]에 씀

활용 형태

형태  
[명령어] 1> [파일] 2> /dev/null [명령어] 실행 시, 결과는 [파일]에 쓰고, 에러는 출력하지 않고 버림

/dev/null: 리눅스의 휴지통(해당 파일로 이동되는 순간 완전히 삭제, Shift + Delete와 동일)

표준 에러가 표시되지 않고 삭제됨

형태  
[명령어] > [파일] 2>&1
[명령어] &> [파일] ([명령어] >& [파일])
[명령어] 실행 시, 표준 출력과 에러 모두 [파일]에 씀

표준 출력을 파일에 쓰고, 표준 에러를 &1로 보냄(>)

&1: 백그라운드(&)로 표준 출력(1)을 보내라는 의미 - 화면에 보이지 않게

→ 표준 에러(2)를 백그라운드(&)로 표준 출력(1)에 보내라(1)는 의미


참고 자료

Linux 리다이렉션(표준 출력, 표준 에러 활용)

 

 

728x90
728x90
728x90
반응형

Kali Linux 한글 설정

$ su
# apt-get update
# apt-get install fonts-nanum -y
# apt-get install fcitx-lib* -y
# apt-get install fcitx-hangul -y
# reboot

Kali Linux 영어 설정

$ export LANG=C; xdg-user-dirs-gtk-update

Update Names

재부팅

예전 이름 유지(K)


How To Uninstall ibus-hangul on Kali Linux

패키지만 제거

sudo apt-get remove ibus-hangul

종속된 내용 제거

sudo apt-get -y autoremove ibus-hangul

구성 및 데이터 제거

sudo apt-get -y purge ibus-hangul

구성, 데이터 및 모든 종속성 제거

sudo apt-get -y autoremove --purge ibus-hangul

apt-get remove fcitx-hangul -y
sudo apt-get -y autoremove --purge fcitx-hangul

home 디렉토리의 .bashrc 파일 수정

 

현재 설정된 언어 확인

echo $LANG

영어: en_US.UTF-8

한글: ko_KR.UTF-8

 

언어 설정 변경

LANG=en_US.UTF-8

언어 설정 영구 적용

/home/sehee/.bashrc 파일의 마지막에 해당 명령어 추가

export LANG=en_US.UTF-8

 

728x90
728x90

'Development > Linux' 카테고리의 다른 글

[Linux] 리눅스 기본 시스템 명령어  (0) 2023.01.10
[SSH] ping test smtp  (0) 2022.11.14
[Github] 기초 사용법  (0) 2022.11.08
[SSH] 리눅스 서버 원격 접속  (0) 2022.11.07
[리다이렉션] Linux File Descriptor  (0) 2022.11.07

+ Recent posts