Post

Linux 기초 (上)

Linux 기초 (上)

리눅스 기초


리눅스

개요

운영체제(Operating System; OS)란 컴퓨터의 핵심 소프트웨어로서, 하드웨어와 응용프로그램을 제어하는 역할을 한다.
운영체제의 종류로는 윈도우, 유닉스, 리눅스, Mac OS 등이 있다. 아래와 같은 다이어그램을 통해 컴퓨터 작동 방식을 확인 할 수 있다.
OS는 프로세스, 기억장치, 주변장치, 파일 등 자원을 관리하고 사용자에게 편리한 인터페이스를 제공하며 각종 네트워크와 하드웨어를 제어한다.

다이어그램

커널이란

커널이란 이러한 운영체제에서 핵심 서비스를 담당하는 부분을 뜻한다.
운영체제 중 항상 필요한 부분만 메모리에 상주하게 되는데, 이 때 해당 부분을 커널이라고도 한다. 따라서 커널은 좁은 의미의 운영체제라고 볼 수 있다.

리눅스 종류

  • 리눅스 배포판
    • Debian: Ubuntu, Finnix 등
    • Redhat: RHEL, Fedora
    • Slackware: Suse, Slax 등

리눅스 환경설정

준비 사항

  • 가상 머신 : vmware workstation pro 17.7.x
  • linux cd/dvd : centos 8 stream

가상머신 다운로드는 vmware workstation 사이트에 가서 다운을 받으면 된다.아래 링크 참조.
vmwareworkstation download
참고로 다운을 받으면 키를 생성하라고 나올텐데 그거는 “vmware workstation pro 17 key”라고 구글에 치면 깃헙에 나온다.
참고로 vmware workstation은 운영체제(OS)를 가상화한 것인데, 이는 타사에 비해 느리지만 제한이 없어 개인용으로 적합하다. 회사용으로는 제한이 많지만 빠른 hyper-v(kvm,ESXi)이 더욱 적합하다.
 
~~ 간단한 리눅스의 역사 ~~~

redhat 6.x 7.x 8.x 9.x -> RHEL 2.x 3.x 4.x 5.x 6.x
                                 ↓                    ↓ 무료로 풀림
                      Fedora project      CentOS 3.x

이전에는 Fedora -> (오픈소스) -> Redhat(오픈소스) -> Centos였는데 Redhat이 인수를 하면서 Fedora -> centos(fedora의 beta ver) -> Redhat으로 바뀌었다. 동시에 centos도 centos stream으로 8.x부터 이름이 바뀌었고 새로 나온 로키 리눅스는 centos의 원래 주인이 끌고 갔다. 약간 mysql과 mariadb같다…

Xwindow가 없는 경우

GUI 환경이 세팅이 안 되어 있는 경우,

1
2
systemctl isolate graphical.target # 지금 당장 GUI 환경
systemctl set-default graphical.target # 기본 설정을 GUI 환경(부팅시 적용)

라고 쳐주면 되고 반대로 CLI 환경으로 가고 싶다면 다음과 같이 하면 된다.

1
2
systemctl isolate multi-user.target # 지금 당장 TUI 환경
systemctl set-default multi-user.target # 기본 설정을 TUI 환경(부팅시 적용)

런레벨(Run Level)

개요

런레벨이란 유닉스나 유닉스 기반 OS 즉, Linux의 시스템 작동 모드를 뜻한다. 예를들어 꺼져있는지, 그래픽 툴을 쓸 수 있는지, 커맨드 형식인지, 다시 시작을 하는지 등이 될 수 있다.
리눅스의 런레벨은 0~6 단계까지로 총 7 단계가 있다.

런레벨 단계

init은 런레벨을 바꿀 때 사용하는 명령어이다.

  • init 0
    • 전원
  • init 1
    • 시스템 복원 모드
  • init 2
    • NFS 지원하지 않는 TUI 방식
    • 네트워크를 사용하지 않음
  • init 3
    • TUI 방식
  • init 4
    • X
    • 임의로 정해서 쓸 수 있음
  • init 5
    • GUI 방식
  • init 6
    • 시스템 재부팅
1
2
who -r # 현재 런레벨 확인
systemctl get-default # 부팅시 런레벨 확인

CentOS 7 이후

하지만 이 런레벨은 CentOs 7이후 systemd 체계로 바뀌면서 target으로 이름이 바뀌었고 위와 같이 graphical.target(기존 런레벨 5), multi-user.target(기존 init 6) 등으로 이름이 불린다.
init은 시스템의 부팅이 완료된 후 동작하는 최초의 프로세스이다. 다른 모든 프로세스의 부모이며 조상격이다. init 프로세스는 /etc/inittab에 저장된 내용을 부팅시 실행하고 init의 위치는 /sbin/init이다. init의 경우 자식 프로세스(서비스)를 차례로 부팅을 시켜 느린 면이 있다. 이처럼 순서대로 부팅시키는 것을 직렬적이라고 한다.

반면 systemd의 경우, 런레벨을 순서대로 실행시키지 않고 의존성 문제를 만들지 않으면서 동시에 필요한 서비스를 부팅시킨다. 그리고 동작한 서비스에서 가지를 만들어 다른 서비스를 동작시킨다. 이러한 방법을 병렬적이라고 한다. 병렬적 동작은 시간 절약에 좋은 방법이라 현재와 같은 유닉스, 레드햇 등에서 많이 쓰인다.

프로세서

개요

  • 프로세서 = CPU
  • 프로세스 = program
  • PID (프로세서 식별번호)
  • PPID (부모 프로세서 식별번호)
  • bash쉘에 bash를 하나 더 가져올 수 있다. 그러면 두 개의 bash shell은 부모관계를 가진다
  • PID는 컴퓨터 마다 다르다
  • systemd(모든 프로세서의 부모 프로세서)
  • pstree (프로세서의 구조를 볼 수 있는 명령어)
    • /proc/PID/*에는 프로세서의 정보들을 모두 저장해두고 있다
    • 데몬 : 시스템을 위해 백그라운드에서 동작하는 프로세서
  • 프로세서 관리
    • IT에서 관리 : 생성, 확인, 변경, 삭제를 포함하고 있다
    • 명령어 뒤에 & 하나를 붙이면 백그라운드 형태로 할 수 있다(명령어를 계속 쓸 수 있다)
    • ~&를 두개 쓰면 커맨드 여러개를 실행할 수 있다~
    • /root/bin/gather.sh/root/bin/backup.sh 혹은 gedit, gnome-tweaks 등등 - gui프로그램을 사용시 쓸 수 있다

커맨드 정리

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#실행
fg CMD
bg CMD & # 오랜시간 가동해야하는 프로그램이나 gui환경 프로그램이 있을 때 사용함
#확인
ps
ps -l / ps -f 
ps -f # 뒤에 옵션값을 다 보여줌 벗 -l옵션은 보여주지 않음
ps -e #실행되는 모든 프로세스를 보여주나 정보는 간략하게 보여줌
#보통 ps -ef를 많이 씀
ps aux
ps a # 가상 콘솔을 보여줌
	 #가상 콘솔은 보통 6개정도 제공됨 
tty # 콘솔 번호
pts # 터미널 번호 ?????
ps a
#사용자가 로그인을 했을 때 실행되는 프로세서
ps u
#간략히
ps x
#모든 프로세서(데몬)
----> ps aux
ps -t pts/5
#종료

#**job 관리(실행중인거)
#fg vs bg >> bg jobs를 fg로 보내는 법 fg (number) 
CMD or CMD & # * job 실행 : 
jobs         # * job 확인 : 
 kill %1 ( or ctrl C) # job 종료 :
##zombie processor
###닫았으나 닫히지 않은 프로세스
###검색시 defunct라고 나옴 == zombie processor
###프로세서 종료시 kill PIDnum을 쓴다
kill -15(-TERM) == kill PID ==정상종료
kill -9 # 강제종료
kill -l # kill 시그널 리스트 보기
kill PID (kill PIDnum)
killall httpd (killall name)
pkill httpd (pkill name)

프로세서 모니터링

  • top 명령 (ps와 같은 명령어)
    • 자원 모니터링과 로그 모니터링
    • 자원 모니터링의 밑바탕 네가지(CPU, MEMORY, DISK, NETWORK) 기본적으로 모니터링해야하는것
    • 하지만 top은 cpu와 memory만 한다.
  • top = gnome-system-monitor

    top -u username(사용자)
    top -p PID1,PID2,PID3

  • tail -f /var/log/messages == gnome-logs
top -d sec -n max -uU

top 명령어의 정렬을 할 때 사용하는 기본 sort : cPu, Memory =» 네트워크가 IO같은 건 다른 툴을 사용하여 봐야한다.
메모리가 증가추이에 있으면 언젠가 꽉찬다는 소리이기 때문에 좋지 않은 신호이다.
메모리가 늘어나면 swap 공간 사용량이 늘어난다.
최소 일주일간의 증가추이를 판단해야 이것이 위험한지 안 위험한지 알 수 있다.
어떤 프로세서가 범인인지 알려줌

  • lscpu -e 현재 코어 개수
  • sleep 상태 : 대기 상태
    ps -elfawk ‘$2 == “Z” {print $0}’

80%이상 사용량이 감지되면 cpu 사용량이 부족한 것임

  • free vs buff/cache // 캐싱되어있는 공간
    • 캐싱
      • ex. 검색이력
      • 얘도 남는 공간 중 하나임(캐싱공간이 많을수록 성능이 우수해짐)

atop은 네가지 모두 다 보여주고 수집가능( = 그래프로 보여줌) atop 가이드 보기

btop cpu나 메모리, 디스크, 네트워크나 프로세서에 관한 정보가 나온다.
[참고]
https://www.digitalocean.com/community/tutorials/atop-command-in-linux https://m.blog.naver.com/godjaeseung/221094002995

서버에 프로그램 설치하는 건 어렵기 때문에 최대한 있는 툴을 가지고 커버를 하는 것이 좋음 top -u oracle(계정)
정렬은 top 들어가서 S누르고 P M
종료 k -> PID -> signal -> 기타 모니터링 툴(CPU/MEM/DISK/NET I/O)

  • top/htop
  • iotop
  • atop(수집용도)
  • btop(모니터링 용도)

참고» atop Guide 꼭 보기

어떤 it든 자원 모니터링이든 로그 모니터링이 잇다 이를 잘 알아두길!

This post is licensed under CC BY 4.0 by the author.