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 주소
- 설치 : apache2
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