11/12 보충학습
인생 시작
어제 하루 그냥 날림
009 콘서트 보고왓는데 라이브 생각보다 절고 별로였음. 걍 공부할껄
오늘 목표치
-
강의 다듣기
-
과제 하기
7강 Linux & Shell command
linux : 무료(오픈소스), 안정성, 신뢰성, 유닉스라 stability, reliability
CLI : command line intercae (터미널)
GUI: graphic user interface (vscode)
- 대표적인 linux 배포판
Debian
Ubuntu : 초보자 접근 쉽게 만듬 -> 많이 씀
Redhat
CentOS
- linux 사용하는 방법 VirtualBox에 Linux 설치, Docker로 설치
WSL 사용(윈도우)
Notebook에서 터미널 진행
-
- 쉘
- 사용자가 문자를 입력해 컴퓨터에 명령할 수 있도록 하는 프로그램
터미널/콘솔 : 쉘을 실행하기 위해 문자입력을 받아 컴퓨터에 전달 / 출력을 화면에 작성
종류 : sh (최초의 쉘) , bash (Linux 표준), zsh (Mac, Os 기본)
쉘 커맨드
-
man : 매뉴얼 문서 보고 싶은 경우 (종료 -> :q)
- mkdir : 폴더 생성
- ls : 현재 폴더 파일 확인 옵션:
-a : .으로 시작하는 파일, 폴더를 포함해 전체 파일 출력
-l : 퍼미션, 소유자, 만든 날짜, 용량
-h : 용량 (-lh 처럼 l 과 같이 사용)
- pwd : 현재 폴더 경로를 절대 경로로
- cd: 폴더 변경하기
-
echo : 터미널에 텍스트 출력(파이선 print 느낌) backtick + 쉘 커맨드 입력시 쉘 커맨드의 결과를 출력
- vi : vim 편집기로 파일 생성
1) Command mode (기본 모드)
- Insert Mode
창이 뜨면 i 눌러서 INSERT 모드 진입
ESC 눌러서 Command Mode 로 다시 이동
- Last Line Mode
ESC 누르며 : 누르면 나오는 모드
-
- bash
- bash 로 쉘 스크립트 실행
- sudo 관리자 권한으로 실행하고 싶은 경우
굉장히 조심해야 함. 왠만하면 pip 쓰자
- cp 파일 또는 폴더 복사하기
옵션 : -r(디렉토리 안에 파일도 모두 복사) / -f(복사할 때 강제로 실행 이슈무시)
-
mv 파일, 폴더 이동 / 이름 바꾸기
-
cat 특정 파일 내용 출력 / 여러 파일 합쳐서 출력
- clear
터미널 창 깨끗하게
-
history 결과에서 !숫자 입력시 그 커맨드 다시 활용 가능
-
find
find . -name “File” : 현재 폴더에서 File 이란 이름 가지는 파일, 디렉토리 검색
- export
환경 변수 설정
export water = “물”
echo $water
-> 터미널이 꺼지면 사라지게 됨
-> 제대로 저장하고 싶으면 .bashrc, .zshrc 에 저장하면 됨
- alias
별칭을 지정, 기본 명령어 줄여서 쓸 때 사용
- head, tail
파일 앞/뒤 n행 출력
- sort 행 단위 정렬
-r : 정렬을 내림차순으로 (reverse) -n : Numeric sort
ex) cat fruits.txt | sort -r |
- uniq 중복된 것들 제거
-c : 중복 행의 개수 출력
ex) cat fruits.txt | sort | uniq |
- grep 파일에 주어진 패턴 목록과 매칭되는 라인 검색
ex) ls | grep “vi” : 현재 폴더에 있는 파일 명중 vi 가 들어간 단어 찾기 |
- cut 파일에서 특정 필드 추출
-f : 잘라낼 필드 지정 -d : 필드를 구분하는 구분자
ex) cat cut_file | cut -d : -f 1,7 |
표준 스트림
Unix 동작 프로그램은 커맨드 실행시 3개의 stream 생성됨
- Redirection & Pipe (매우 중요) 프로그램의 출력을 다른 파일이나 스트림으로 전달
Redirection : 프로그램의 출력(stdout) 을 다른 파일이나 스트림으로 전달
1) > : 덮어쓰기(overwrite) 파일이 없으면 생성하고 저장
2) » : 맨 아래에 추가하기 (append)
Pipe : 프로그램의 출력을 다른 프로그램의 입력으로 사용하고 싶은 경우
ex)
ls | grep “vi” : 현재 폴더에 있는 파일 명중 vi 가 들어간 단어 찾기 |
history | grep “echo” |
서버에서 자주 사용하는 쉘 커맨드
- ps (process status) 현재 실행되고 있는 프로세스 출력하기
-e :모든 프로세스
-f : Full Format
-
curl Request 를 테스트 할 수 있는 명령어
-
df 현재 사용중인 디스크 용량 확인 (disk free)
-h : 사람이 읽기 쉬운 형태로 출력
- scp ssh를 이용해 네트워크로 연결된 호스트 간 파일을 주고 받는 명령어 (secure copy)
-r : 재귀적 복사 -P : ssh 포트 지정 -i : SSH 설정을 활용해 실행
- nohup
터미널 종료 후에도 계속 작업이 유지되도록 실행 (백그라운드 실행)
마지막에 & 붙여야함
ex) nohup python3 app.py &
종료 :
ps ef | grep app.py 하여 |
pip 찾고
kill -9 pid 로 프로세스 Kill
이외에도 screen이라는 도구도 있음
- chmod 파일의 권한을 변경하는 경우
ls -al 으로 퍼미션 확인해보자
-
- 쉘 스크립트
- 쉘 커맨드의 조합
.sh 파일을 생성하고 그 안에 쉘 스크립트 추가
작성시 bash name.sh 로 실행 가능
https://github.com/zzsza/shell-scripts
https://github.com/denysdovhan/bash-handbook
https://github.com/epety/100-shell-script-examples
- special mission : 카카오톡 그룹 채팅방에서 옵션 - 대화 내보내기로 csv로 저장 후, 쉘 커맨드 1줄로 카카오톡 대화방에서 2021년에 제일 메세지를 많이 보낸 TOP 3명 추출하기!
-> cat KakaoTalk_Chat.csv | cut -d , -f 2 | sort | uniq -c | sort | tail -n 3 |
8강 Docker
- 가상화
개발할 때 Local 환경에서 하고 이를 Product 서버에 배포한다
이때 Local 과 Product 환경이 다를 수 있다.
운영하고 있는 server 가 100대 라면? 업데이트 관리 필요
-> 특정 소프트웨어 환경을 만들고 local, Production 서버에서 그대로 활용
- Docker 등장 전
VM(virtual machine) 사용
OS 위에 OS 를 하나 더 실행 시켜서 무거웟음
-> 이를 해결하기 위해 나온 Container : 경량화된 가상화 프로세스 기술
- Docker Container 기술 쉽게 사용할 수 있도록 나온 도구
-> 다른 사람이 만든 소프트웨어(Docker Image)를 가져와서 바로 사용 가능
주요 개념 2개
- 1) Docker Image
-
컨테이너를 실행할 때 사용하는 탬플릿 (Read only)
-> OS, 설정을 포함한 개발 환경
- 2) Docker Container
-
Docker image를 활용해 실행된 인스턴스 (write 가능)
실습
이미지 다운받아 사용하기
-
docker pull
-
docker images
-
docker run “이미지이름:태그”
-d -> 데몬(백그라운드) 모드, 이거 안하면 컨테이너 나가면 실행 종료됨
-p 로컬호스트포트:컨테이너포트 -> 포트 지정
-v -> Volume Mount
ex) docker run -it -p 8888:8888 -v /some/host/folder/for/work:/home/jovyan/workspacejupyter/minial-notebook
- docker ps
-a : 작동을 멈춘 컨테이너 확인
-
docker exec -it “컨테이너 이름(혹은 ID)” /bin/bash
-
docker rm “컨테이너 이름”
- dockerhub에서도 공개된 image들 다운받아 쓸 수 있음
Docker Image 만들기
- Fast api 패키지 설치, 코드 작성
- 사용한 라이브러리 명시 pip freeze : 설치한 라이브러리를 모두 보여줌
pip list –not-required –format=freeze : 의존성에 따라 설치된 라이브러리는 보이지 않음
- Dockerfile 작성
댓글남기기