1. Linux
1.1 Linux
1.2 Linux를 알아야 하는 이유
1.3 CLI, GUI
1.4 대표적인 Linux 배포판
리눅스 배포판 https://ko.wikipedia.org/wiki/%ED%8C%8C%EC%9D%BC:Linux_Distribution_Timeline.svg
Debian
- 온라인 커뮤니티에서 제작해 배포
Ubuntu
- 영국의 캐노니컬이라는 회사에서 만든 배포판으로 쉽고 편한 설치
- 초보자들이 쉽게 접근할 수 있도록 만듬
Redhat
- 레드햇이라는 회사에서 배포한 리눅스
CentOS
- Red Hat이 공개한 버전을 가져와서 브랜드와 로고를 제거하고 배포한 버전
1.5 Linux, Shell Script 학습 가이드
2. Shell Command
2.1 쉘의 종류
쉘
- 사용자가 문자를 입력해 컴퓨터에 명령할 수 있도록 하는 프로그램
터미널/콘솔
- 쉘을 실행하기 위해 문자 입력을 받아 컴퓨터에 전달
- 프로그램의 출력을 화면에 작성
sh
- 최초의 쉘
bash
- Linux 표준 쉘
zsh
- Mac 카탈리나 OS 기본 쉘
2.2 쉘을 사용하는 경우
- 서버에서 접속해서 사용하는 경우
- crontab 등 Linux의 내장 기능을 활용하는 경우
- 데이터 전처리를 하기 위해 쉘 커맨드를 사용
- Docker를 사용하는 경우
- 수백대의 서버를 관리할 경우
- Jupyter Notebook의 Cell에서 앞에 !를 붙이면 쉘 커맨드가 사용됨
- 터미널에서 python3, jupyter notebook 도 쉘 커맨드
- Test Code 실행
- 배포 파이프라인 실행(Github Action 등에서 실행)
2.3 기본 쉘 커맨드
man
쉘 커맨드의 매뉴얼 문서를 보고 싶은 경우
man python
종료 : `:q` 입력
mkdir
폴더생성
ls
- list segments의 약자
-a : .으로 시작하는 파일, 폴더를 포함해 전체 파일 출력
-l : 퍼미션, 소유자, 만든 날짜, 용량까지 출력
-h : 용량을 사람이 읽기 쉽도록 GB, MB 등 표현. `-l`과 같이 사용
ls -al
ls -lh
pwd
- print Working Directory
cd
- change directory
echo
- 터미널에 텍스트 출력하는 print
- echo "hi"
vi
vim editor를 사용할 수 있음
vi 편집기 모드
1) Command Mode
- 방향키를 통해 커서를 이동할 수 있음
dd : 현재 위치한 한 줄 삭제
i : INSERT 모드로 변경
x : 커서가 위치한 곳의 글자 1개 삭제(5x : 문자 5개 삭제)
yy : 현재 줄을 복사(1줄을 ctrl + c)
p : 현재 커서가 있는 줄 바로 아래에 붙여넣기
k : 커서 위로
j : 커서 아래로
l : 커서 오른쪽으로
h : 커서 왼쪽으로
2) Insert Mode
파일을 수정할 수 있는 Mode
만약 Command Mode로 다시 이동하고 싶다면 ESC 입력
3) Last Line Mode
w : 현재 파일명으로 저장
q : vi 종료(저장되지 않음)
q! : vi 강제 종료(!는 강제를 의미)
wq : 저장한 후 종료
/문자 : 문자 탐색 -> 탐색한 후 n을 누르면 계속 탐색 실행 set
nu : vi 라인 번호 출력
bash
bash로 쉘 스크립트 실행
bash vi-test.sh
앞에서 작성한 “hi”가 출력
터미널에서 Tab을 누르면 자동완성(지원하지 않는 쉘도 존재)
sudo
관리자 권한으로 실행하고 싶은 경우 커맨드 앞에 sudo를 붙임
sudo 명령어 : 최고 권한을 가진 슈퍼 유저로 프로그램을 실행
cp
파일,폴더 복사
cp vi-test.sh vi-test2.sh
-r : 디렉토리를 복사할 때 디렉토리 안에 파일이 있으면 recursive(재귀적)으로 모두 복사
-f : 복사할 때 강제로 실행
mv
move (또는 파일명변경)
mv vi-test.sh vi-test3.sh
cat
concatenate
cat vi-test.sh
여러 파일을 인자로 주면 합쳐서(CONCAT) 출력
cat vi-test2.sh vi-test3.sh
파일에 저장하고(OVERWRITE) 싶은 경우
cat vi-test2.sh vi-test3.sh > new_test.sh
파일에 추가(APPEND) 싶은 경우
cat vi-test2.sh vi-test3.sh >> new_test.sh
clear
터미널창 깨끗하게 날림
history
최근 입력한 쉘 커맨드 history 출력
history 결과에서 느낌표를 붙이고 숫자입력시 그 커맨드 다시 활용 가능
ex) !20
find
파일 및 디렉토리를 검색할 때 사용
find . -name “File” : 현재 폴더에서 File이란 이름을 가지는 파일 및 디렉토리 검색
export
export로 환경변수 설정
export water="물"
echo $water
터미널 창이 꺼지면 사라짐
쉘 실행할때마다 환경변수를 넣어주고싶으면
.bashrc 혹은 .zshrc에 저장하면됨
그후 source .bashrc 혹은 source .zshrc
alias
터미널에서 alias라고 치면 현재 별칭으로 설정된 것을 볼 수 있음
alias는 기본 명령어를 간단히 줄일 수 있는 것
예) ll는 ls -l로 별칭이 지정되어 있음
alias ll2=’ls -l’
ll2를 입력하면 ls -l이 동작됨
head, tail
파일의 앞/뒤 n행 출력
head -n 3 vi-test.sh
sort
행 단위 정렬
-r : 정렬을 내림차순으로 정렬(Default 옵션 : 오름차순)
-n : Numeric Sort
cat fruits.txt | sort -r
uniq
중복된 행이 연속으로 있는 경우 중복 제거
sort와 함께 사용
-c : 중복 행의 개수 출력
cat fruits.txt | uniq
cat fruits.txt | sort | uniq
cat fruits.txt | uniq | wc -l
cat fruits.txt | sort | uniq | wc -l
grep
파일에 주어진 패턴 목록과 매칭되는 라인 검색
grep 옵션 패턴 파일명
옵션
-i : Insensitively하게, 대소문자 구분 없이 찾기
-w : 정확히 그 단어만 찾기
-v: 특정 패턴 제외한 결과 출력
-E : 정규 표현식 사용 정규 표현식 패턴
^단어 : 단어로 시작하는 것 찾기
단어$ : 단어로 끝나는 것 찾기
. : 하나의 문자 매칭
cut
파일에서 특정 필드 추출
-f : 잘라낼 필드 지정
-d : 필드를 구분하는 구분자. Default는 \t
vi cut_file
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
ESC :wq
cat cut_file | cut -d : -f 1,7
# 1번째, 7번째 값을 가져옴
Stream
Unix에서 동작하는 프로그램은 커맨드 실행시 3개의 Stream이 생성
stdin : 0으로 표현, 입력(비밀번호, 커맨드 등)
stdout : 1로 표현, 출력 값(터미널에 나오는 값)
stderr : 2로 표현, 디버깅 정보나 에러 출력
2.4 Redirection & Pipe
Redirection & Pipe
Redirection : 프로그램의 출력(stdout)을 다른 파일이나 스트림으로 전달
> : 덮어쓰기(Overwrite) 파일이 없으면 생성하고 저장
>> : 맨 아래에 추가하기(Append)
echo “hi” > vi-test3.sh
echo “hello” >> vi-test3.sh
cat vi-test3.sh
Pipe : 프로그램의 출력(stdout)을 다른 프로그램의 입력으로 사용하고 싶은 경우
A의 Output을 B의 Input으로 사용(다양한 커맨드를 조합)
현재 폴더에 있는 파일명 중 vi가 들어간 단어를 찾고 싶은 경우
ls | grep “vi”
grep “vi” : 특정 단어 찾기
ls | grep “vi”
위 결과를 다시 output.txt에 저장하고 싶은 경우
ls | grep “vi” > output.txt
최근 입력한 커맨드 중 echo가 들어간 명령어를 찾고 싶은 경우
history | grep “echo”
2.5 서버에서 자주 사용하는 쉘 커맨드
ps
현재 실행되고 있는 프로세스 출력하기 : Process Status
-e : 모든 프로세스
-f : Full Format으로 자세히 보여줌
curl
Command Line 기반의 Data Transfer 커맨드 : Client URL
Request를 테스트할 수 있는 명령어
웹 서버를 작성한 후 요청이 제대로 실행되는지 확인할 수 있음
curl -X localhost:5000/ {data}
curl 외에 httpie 등도 있음(더 가독성있게 출력)
df
현재 사용 중인 디스크 용량 확인 : Disk Free
-h : 사람이 읽기 쉬운 형태로 출력
scp
SSH을 이용해 네트워크로 연결된 호스트 간 파일을 주고 받는 명령어 : Secure Copy(Remote file copy program)
-r : 재귀적으로 복사
-P : ssh 포트 지정
-i : SSH 설정을 활용해 실행
local => remote
scp local_path user@ip:remote_directory
nohup
터미널 종료 후에도 계속 작업이 유지하도록 실행(백그라운드 실행)
nohup python3 app.py &
nohup으로 실행될 파일은 Permission이 755여야 함
종료는 ps ef | grep app.py 한 후, pid(Process ID) 찾은 후 kill -9 pid 로 프로세스를 Kill
로그는 nohup.out에 저장됨
nohup 외에도 screen이란 도구도 있음
chmod
파일의 권한을 변경하는 경우 사용 : Change Mode
유닉스에서 파일이나 디렉토리의 시스템 모드를 변경함
ls -al(혹은 ll)을 입력하면 다음과 같이 나옴
r = Read(읽기), 4
w = Write(쓰기), 2
x = eXecute(실행하기), 1
- = Denied
r-x : 읽거나 실행할 수는 있지만 수정은 불가능
2.6 쉘 스크립트
- 쉘 스크립트 = 쉘 커맨드의 조합
- 쉘 커맨드에 익숙해진 후, 스크립트로 생성(Python과 유사)
https://github.com/zzsza/shell-scripts
https://github.com/denysdovhan/bash-handbook
https://github.com/epety/100-shell-script-examples
#!/bin/bash
- 이 스크립트를 Bash 쉘로 해석
$(date +%s) : date를 %s(unix timestamp)로 변형 START=$(date +%s) : 변수 저장
'부스트캠프 AI Tech 2기 > 2기 Product Serving' 카테고리의 다른 글
BentoML (0) | 2021.12.13 |
---|---|
Cloud (0) | 2021.12.10 |
웹 서비스 형태 - Streamlit (0) | 2021.12.09 |
Notebook 베이스 - Voila (0) | 2021.12.09 |
머신러닝 프로젝트 라이프 사이클 (0) | 2021.12.07 |