본문 바로가기
Linux

Linux3

by 황밤 2023. 10. 4.
728x90
반응형

1. Process Management

1.1) systemd service

  • 개요
    • 리눅스의 시스템과 서비스 관리자
    • 이전의 Unix의 init 하던 역할을 수행
    • 다양한 서비스 데몬을 실행하고 프로세스들의 상태를 유지하며 시스템의 상태를 관리
  • systemd unit
    • systemd 는 전체 시스템을 시작하고 관리하는 역할을 수행하고 유닛이라 부르는 구성 요소를 사용
    • 관리 대상의 이름을 서비스이름(프로그램).unit 종류의 형태로 관리 
    • 종류
      • service : 시스템 서비스 유닛으로 데몬을 시작하고 종료하고 재시작하고 로드
      • target : 유닛을 그룹핑
      • automount : 디렉토리 계층 구조에서 자동 마운트 포인트를 관리
      • device : 리눅스 장치 트리에 있는 장치를 관리
      • mount : 디렉토리 계층 구조에서 마운트 포인트를 관리
      • path : 파일 시스템의 파일이나 디렉토리 등 경로를 관리
      • scope : 외부에서 생성된 프로세스를 관리
      • slice : 시스템의 프로세스를 계층적으로 관리
      • socket : 소켓을 관리하는 유닛으로 AF_INET, AF_INET6, AF_UNIX Socket Stream, Datagram, FIFO 지원
      • swap : 스왑 장치 관리
      • timer : 타이머와 관련된 기능을 관리
    • 명령 - systemctl
      • 형식 : systemctl [옵션] [명령] [유닛이름]
      • 옵션
        • -a : 상태와 관계없이 유닛 전체를 출력
        • -t : 유닛 종류 : 지정한 유닛만 출력
      • 명령
        • start
        • stop
        • reload
        • restart
        • status
        • enable
        • disable
        • is-active
        • is-enabled
        • isolate
        • kill
      • 실습
        • 현재 동작 중인 유닛 출력 : systemctl
        • 특정 유닛 종류만 출력 : systemctl -t service
        • cron (일정한 시각 또는 주기를 가지고 작업을 수행) 이라는 서비스를 시작 : sudo systemctl strat cron
        • cron 이 동작 중인지 확인 : systemctl is-active cron
        • 유닛 중지 : sudo systemctl stop cron
        • cron 이 동작 중인지 확인 : systemctl is-active cron
      • 이 명령들은 서버 관리자 - 운영자 들이 많이 수행합니다.

1.2) cgroup

  • 자원 사용(cpu, Memory, I/O 등)을 프로세스 그룹 단위로 제어할 수 있는 리눅스 커널 기능
  • cgroup
    • cgroup 이라는 가상의 파일 시스템을 수동으로 마운트해서 사용하는 것이 가능
    • libcgroup 이라는 툴을 사용해서 그룸을 생성하고 사용
    • Docker, LXC 가상화, libvert 등의 소프트웨어를 이용
  • Cloud 자체를 생성하는 직무를 하고자 할 때는 이 부분이 매우 중요
    • Cloud 이용자 입장에서는 Docker 가 자원 사용을 Image 단위로 격리해서 사용하도록 해주는 개념이라는 것만 알고 있어도 됨

 


 

2. 소프트웨어 관리

2.1) 우분투 패키지

  • 개요
    • 리눅스에서 소프트웨어는 소스 코드 형식 또는 바로 설치하여 사용할 수 있는 패키지 형태로 배포
    • 소스 코드로 배포하는 경우 대부분 하나의 아카이브 파일로 묶은 후 압축해서 배포
    • 바이너리 패키지로 배포하는 경우 리눅스에서 주로 사용하는 패키지는 RPM 과 deb 두 가지 형식인데 우분투는 대부분 deb 형태로 배포하며 레드햇 계열(redgat, fedora, cent os - rocky)은 RPM을 주로 사용
    • 최근의 우분투는 deb 대신에 스냅을 주로 이용
  • 특징
    • 바이너리 파일(실행 가능한 파일)로 되어 있어서 컴파일할 필요가 없음
    • 패키지 파일이 관련 디렉토리에 바로 설치됨
    • 패키지를 삭제할 때 관련된 파일을 일괄 삭제할 수 있음
    • 기존에 설치한 패키지를 삭제하지 않고 업그레이드 가능
    • 설치 상태 검증 가능
    • 의존성 있는 패키지도 자동 설치 : apt-get
  • 이름
    • 패키지명_버전(_데비안리비전_우분투리비전_아키텍쳐).deb
    • 아키텍쳐가 포함되는 경우가 있음 - Mac M1 프로세서 용은 linux/amd64라는 아키텍쳐를 포함
    • M1 프로세서를 가진 컴퓨터에서 docker 이미지를 다운로드 할 때 동일한 이미지가 다른 곳에서는 잘 다운로드 되고 빌드가 되는데 M1 에서 안되는 경우 --platform linux/amd64 를 추가하면 됩니다.

2.2) 우분투 패키지 관리

  • 이 명령을 알아야 하는 경우는 리눅스 시스템을 직접 핸들링하는 경우 - 리눅스를 직접 설치하거나 IaaS를 이용하는 경우
  • apt-cache
    • APT 캐시에 질의하여 여러 가지 정보를 검색
    • 형식 : apt-cache [옵션] 서브 명령
    • 옵션
      • -f : 검색 결과로 패키지에 대한 전체 기록을 출력
      • -h :간단한 도움말을 출력
    • 서브 명령
      • stats : 통계 정보
      • dump : 현재 설치된 패키지를 업그레이드
      • search 키워드 : 캐시에서 키워드를 검색
      • showpkg 패키지 이름 : 패키지에 대한 의존성 정보와 역의존성 정보를 검색해서 출력
      • show 패키지 이름 : 패키지에 대한 정보를 간단하게 출력
      • pkgnames : 사용 가능한 모든 패키지 이름을 출력
    • 실습
      • 캐시 정보 확인 : apt-cache stats
svng@svng-VMware-Virtual-Platform:~$ apt-cache stats
전체 패키지 이름 : 132640 (3,714 k)
전체 패키지 구조: 119181 (5,244 k)
  일반 패키지: 72412
  순수 가상 패키지: 1472
  단일 가상 패키지: 34225
  혼합 가상 패키지: 458
  빠짐: 10614
개별 버전 전체: 79720 (7,015 k)
개별 설명 전체: 163603 (3,926 k)
전체 의존성: 483521/125746 (11.7 M)
전체 버전/파일 관계: 23064 (554 k)
전체 설명/파일 관계: 32531 (781 k)
전체 제공 매핑: 45536 (1,093 k)
전체 패턴 문자열: 237950 (5,720 k)
전체 빈 용량: 90.8 k
차지하는 전체 용량: 41.4 M
Total buckets in PkgHashTable: 196613
  Unused: 107365
  Used: 89248
  Utilization: 45.3927%
  Average entries: 1.33539
  Longest: 19
  Shortest: 1
Total buckets in GrpHashTable: 196613
  Unused: 100101
  Used: 96512
  Utilization: 49.0873%
  Average entries: 1.37434
  Longest: 7
  Shortest: 1
  • apt-get
    • 형식 : apt-get [옵션] 서브명령
    • 옵션 :
      • -d : 패키지를 내려받기만 수행
      • -f : 의존성이 깨진 패키지를 수정하려고 시도
      • -h : 도움말을 출력
    • 서브 명령
      • update : 패키지 저장소에서 새로운 패키지 정보를 가져옴 - ubuntu에서는 패키지를 설치할 때 필수 항목
      • upgrade : 현재 설치된 패키지를 업그레이드
      • install 패키지 이름 : 패키지 설치하는 명령인데 -y 옵션을 주면 무조건 설치
        • Docker 이미지를 생성할 때 우분투에서 새로운 패키지를 설치해야 할 때 필수
      • remove 패키지 이름 : 
      • download 패키지 이름
      • autoclean : 불안전하게 받았거나 오래된 패키지를 삭제
      • clean : 캐싱된 모든 패키지를 삭제해서 디스크 공간을 늘림
      • check : 의존성이 깨진 패키지를 확인
  • apt-get update
    • /etc/apt/sources.list 에 명시한 저장소로부터 패키지 정보를 읽어서 동기화를 수행
    • 관리자 명령으로 수행(sudo)
  • apt-get upgrade
    • 현재 설치된 패키지 중에서 새로운 버전이 나온 패키지를 전부 업그레이드
    • 관리자 명령으로 수행
    • 중간에 업그레이드 여부를 묻는데 자동으로 수행하고자 하면 -y 옵션을 추가해주면 됩니다.
  • apt-get install 패키지 이름
    • 피키지를 설치할 때 사용하는 명령
    • xterm 패키지를 설치 : sudo apt-get install xterm
    • 대화형으로 동작하므로 Dockerfile 작성 시에는 -y 옵션을 추가해야 합니다.
  • 패키지 삭제
    • apt-get remove 패키지 이름 으로 수행할 수 있는데 이 경우는 패키지에 대한 설정 파일은 남겨두고 apt-get purge 패키지 이름으로 수행하는 경우는 설정 파일도 제거합니다.
  • 자동 정리
    • apt-get autoremove
  • 디스크 공간 정리
    • apt-get clean
  • 패키지만 다운로드
    • apt-get download : 패키지
  • 소스 관련 명령
    • 소스 코드를 내려받기만 수행 : apt-get --download-only source 패키지이름
    • 소스 코드를 내려받고 압축 해제 : apt-get source 패키지이름
    • 소스 코드를 내려받고 압축 해제 후 컴파일 수행 : apt-get --compile source 패키지 이름

2.3) 압축

  • 개요
    • tar(tape archive) 명령은 다른 시스템과 파일을 주고 받거나 백업을 하기 위해 여러 파일이나 디렉토리를 하나의 아카이브 파일로 생성하거나 추출하는 명령
  • 형식
    • tar 기능 옵션 아카이브 파일 파일이름
  • 기능
    • c : 새로운 압축 파일 생성
    • t : 내용을 출력
    • x : 원본 파일을 추출
    • r : 새로운 파일을 추가
    • u : 수정된 파일을 업데이트
  • 옵션
    • f : 아카이브 파일이나 테이프 장치를 지정하는데 파일명을 -로 지정하면 tar 대신 표준 입력에서 읽어들임
    • v : 처리 중인 파일의 정보를 출력
    • h : 심볼릭 링크의 원본 파일을 포함
    • p : 파일 복구시 원래의 접근 권한을 유지
    • j : bzip2 로 압축하거나 해제
    • z : gzip으로 압축하거나 해제
  • 자주 사용되는 옵션
    • 아카이브 생성 : cvf
    • 아카이브 내용 확인 : tvf
    • 아카이브 업데이트 : uvf
    • 아카이브 압축해제 : xvf
    • 파일 추가 : rvf

2.4) vim 설치 - 많이 사용되던 Editor

  • apt-get install -y vim

3. Programming

3.1) git 설치

  • sudo apt-get install git

3.2) C programming

  • gcc 컴파일러를 이용해서 compile 및 build
  • gcc 컴파일러 설치 여부 확인
  • 설치 : sudo apt-get install gcc
  • 작업 과정
    • 소스 코드 작성
    • 소스 코드 컴파일(Compile) - 컴파일러가 문법에 맞게 작성되었는지 확인하고 운영체제가 인식 할 수 있는 코드(대부분은 어셈블리어로 변환) 로 변환하는 과정
    • 빌드(Build) - 운영체제에서 실행 가능한 파일을 만드는 과정
    • 실행 (run)
  • 컴파일 및 빌드 명령 : gcc -o 바이너리파일경로 소스파일경로
  • 하나의 파일로 구성된 프로그램을 생성하고 실행
    • vim 소스코드 파일명을 입력 - vim hello.c
    • i 를 눌러 편집 모드를 만든 후 작성
    • 다 작성하면 esc를 눌러서 명령 모드로 만든 후 :wq! 를 입력해서 저장하고 종료
  • 컴파일 및 빌드 : gcc -o hello hello.c
  • 실행 : ./hello
svng@svng-VMware-Virtual-Platform:~$ gcc -o hello hello.c
svng@svng-VMware-Virtual-Platform:~$ ls
hello    snap  temp.ln  test      testtemp  공개      문서      비디오  서식
hello.c  temp  temp.sn  test.bak  text33    다운로드  바탕화면  사진    음악

svng@svng-VMware-Virtual-Platform:~$ hello
안녕하세요, 여러분!
svng@svng-VMware-Virtual-Platform:~$ ./hello
Hello, World

 

3.3) make

  • 설정된 정보를 읽어서 여러 소스 파일을 컴파일하고 링크를 만들어서 최종 실행 파일을 만드는 명령
  • 소스로 배포되는 많은 오픈 소스 프로젝트는 소스 코드와 함께 makefile이 같이 배포가 됩니다.
  • 이 파일을 이용해서 실행 파일을 만듭니다.

 

 

  • 현재 디렉토리에 Makefile 을 생성 - vim makefile

TARGET=one #실행 파일명을 TARGET 이라는 변수에 저장

OBJECTS=one.o two.o # 목적 파일명을 OBJECTS 이라는 변수에 저장

${TARGET} : ${OBJECTS}

    gcc -o ${TARGET} ${OBJECTS}

#objects 파일을 가지고 target 이라는 실행 파일을 실행

 

one.o : one.c

    gcc -c one.c

two.o : two.c

    gcc -c two.c

#소스 파일을 가지고 목적 프로그램을 만드는 부분

 

- make 명령 수행

- 프로그램 실행 : ./one

 

 

3.4) java 설치와 프로그래밍

  • java 는 여러 jvm 기반의 언어를 사용할 때와 빅데이터 에코 시스템을 사용할 때 필수
    • python 이나 r을 할 때 자연어 처리 등을 하고자 하는 경우 필요
  • java 설치 확인
    • 자바 실행 환경(JRE : Java Runtime Environment - JVM:Java Virtual Machine) 확인 : java -version
    • 자바 개발 환경(JDK : Java Development Kit) 확인 : javac -version
    • 패키지 : openjdk-8-jdk
  • 자바 코드 작성 및 실행
    • 자바는 파일명이 클래스 이름과 같아야 합니다.
    • 하나의 파일에 여러 개의 클래스가 있다면 public 클래스의 이름과 같아야 합니다.
    • public 클래스가 없다면 main 메서드를 가진 클래스 이름을 사용하고 main 메서드를 가진 클래스가 없다면 아무 클래스 이름이나 상관없습니다.
    • 컴파일 : javac hellojava.java
    • 실행 : java hellojava

 

3.5) 파이썬 설치 및 프로그래밍

  • 파이썬 설치 : python3 로 확인
    • 명령을 수행하면 설치가 되어 있는 경우 python 인터프리터가 동작
  • 파이썬 업그레이드 : sudo apt-get upgrade python3
  • 파이썬은 실행할 때 python3 파일명

3.6) Shell Programming

  • Linux 명령어나 코드를 텍스트 파일 형태로 만들어서 바로 실행하도록 하는 프로그래밍
  • 일반적으로 확장자는 sh
  • 스크립트 파일을 실행할 때는 sh 파일경로 또는 파일경로를 이용해서 실행
  • vim name.sh 를 실행해서 name.sh를 작성
  • # #!은 shebang 이라고 하는데 주석이 아니고 bash 를 사용하겠다는 의미입니다.
  • 실행은 sh name.sh 또는 chmod +x name.sh 후 ./name.sh
  • 변수를 만들고 외부에서 사용할 수 있도록 하고자 할 때는 변수를 만들 때 export를 앞에 붙이면 됩니다.
    • 지역 변수를 환경 변수로 만들고자 할 때도 export 명령을 사용
    • exp1.sh 파일을 생성하고 작성
    • sh exp1.sh 실행시 출력이 되지 않음.
    • sh exp2.sh 를 실행
    • 쉘 프로그래밍의 확장자 sh를 가진 파일은 리눅스나 맥에서 실행 파일처럼 사용됩니다.

 

4. Server

  • 서비스를 제공하는 컴퓨터 또는 운영체제

4.1) 종류

  • File Server : 파일을 제공하는 서버
    • FTP가 대표적인 File Server Service 의 종류
  • Data Server : 데이터 베이스를 설치하고 외부에서 접속해서 데이터를 사용할 수 있도록 해주는 서버
  • Remote Server : 외부에서 접속해서 사용할 수 있도록 해주는 서버
    • Telnet 과 SSH 를 많이 사용
  • Application Server : 외부에서 요청을 전송하면 처리하고 결과를 넘겨주는 서버
  • Web Server : URL로 접속해서 요청을 전송하면 처리하고 결과를 넘겨주는 서버
  • Web Application Server(WAS) : 요청을 URL 형태로 하고 결과를 HTML 이나 JSON 형태로 전송하는 서버
  • API Server : 요청을 받아서 처리한 후 데이터를 전송해주는 서버
    • 출력물을 만들어주는 것이 아니고 응답을 받은 쪽에서 재가공해서 사용할 수 있는 데이터를 제공하는 서버
  • Proxy Server : 내부의 요청을 받아서 외부에 접속해서 결과를 가져온 후 내부에 다시 전달해주는 서버 보안 때문에 주로 작성
    • Client - URL 형태의 요청 - Web Server - Application Server - API Server - Data Server - API Server - API Server -  Application Server - Web Server - Client
  • 파일을 업로드하고 다운로드 할 때는 Application Server 에서 File Server 쪽으로 요청을 전송해서 다운로드 하거나 업로드
  • 우리나라 대기업이 금융 기관에서 많이 구현하는 Proxy Server는 외부에 요청을 할 때 직접 나가지 않고 Proxy Server 에게 요청하도록 해서 Proxy Server 가 외부에 요청해서 응답을 받은 후 결과를 전송하도록 해주는 서버입니다.
    • Remote Server 는 외부에서 내부의 컴퓨터를 관리하기 위한 목적으로 사용
    • public cloud에 애플리케이션을 배포하고 관리를 할 때는 Remote Server를 이용하는 것 입니다.
    • public cloud를 공부할 때 제일 먼저 학습하는 것 중의 하나가 원격 접속이 가능하도록 만드는 것입니다.

4.2) open ssh server 설치 및 접속

  • 기존의 telnet은 데이터를 암호화해서 전송하지 않아서 보안상의 위험이 있어서 최근에는 데이터를 암호화해서 전송하는 ssh를 주로 사용합니다.
  • 설치
    • sudo apt-get update
    • sudo apt-get install openssh-server
  • 서비스 실행
    • sudo systemctl status ssh
  • 방화벽에서 포트 개방 - 기본은 22
    • sudo ufw allow ssh
  • 자신의 IP 확인
    • hostname -I
  • 외부에서는 hostname 명령으로 나온 IP의 22번 포트로 접속 가능
  • virtual box 는 NAT 설정을 해주어야 합니다.
    • 이미지를 선택하고 마우스 오른쪽을 눌러서 설정을 선택한 후 네트워크 탭에서 어댑터1에서 advanced 를 선택한 후 포트 포워딩을 누르고 호스트 IP에 사용하고자 하는 IP를 포트는 22번으로 통일하고 게스트 IP에 hostname에서 나왔던 IP를 작성해주면 호스트 Ip를 이용해서 접속이 가능합니다.

4.3) Maria DB Server 생성

  • 패키지 이름은 mariadb-server
  • 실습
    • 패키지 설치
      • sudo apt-get update
      • sudo apt-get install mariadb-server
    • 마리아 데이텁이스는 서비스를 활성화 해주어야 합니다.
    • 서비스 활성화
      • systemctl status 서비스이름.service
  • Web Server 를 만들어주는 패키지는 nginx 와 apache가 있습니다.
    • 예전에는 apache 가 많이 사용되었는데 최근에는 nginx 도 많이 사용됩니다.
  • Apache 웹 서버 생성 및 접속
    • 설치 : apache2
      • sudo apt-get install apache2
    • 서비스 실행 : apache2
      • systemctl status apache2.service
    • 서비스 실행 확인 :
      • 브라우저에서 확인 : http://IP주소
      • 리눅스 명령어로 확인 : curl http://IP 주소

 


5. Crontab 작업

crontab [-u 사용자ID] [옵션] [파일명]

  • 기본적인 사용 : crontab -l
  • 작성 방법은 하나의 행에 하나의 명령어
    • 분, 시, 일, 월, 요일, 작업내용
    • 요일
      • 0이 일요일이고 6이 토요일
      • * 을 사용하면 모든 시간
      • - 을 이용하면 범위
      • , 를 이용하면 목록
      • / 를 이용하면 단계값 (1-10/2 -> 1, 3, 5, 7, 9      */20 -> 20분 마다)
    • 하나의 명령어를 작성할 때는 crontab -e

6. 수행할 작업

  • vb 에 ubuntu linux 설치
  • gui 설치
  • 원격 접속이 가능하게 하고 접속
  • crontab을 이용해서 파이썬 파일이나 shell script 파일을 일정한 시간에 실행하기

 

 

 

 

 

 

 

 

반응형
LIST

'Linux' 카테고리의 다른 글

Linux  (0) 2023.09.25