[부스트캠프 AI tech AI서비스개발기초] week05 (2022.02.16)
03 Linux & Shell Command
Linux
- 서버에서 자주 사용하는 OS
- 오픈소스
- 안정성, 신뢰성, 유닉스(stability, reliability)
- 쉘 커맨드, 쉘 스크립트
CLI: Terminal, Command Line Interface
GUI: Desktop, Graphic User Interface
Linux 배포판(wiki)
Debian
: 온라인 커뮤니티에서 제작해 배포Ubuntu**
: 영국의 캐노니컬이라는 회사에서 만든 배포판
: 초보자들이 쉽게 접근할 수 있도록 만듦Redhat
: 레드햇이라는 회사에서 배포한 리눅스CentOS
: Redhat 버전을 가져와서 브랜드와 로고를 제거하고 배포한 버전
Linux, Shell script 학습가이드
- 처음엔 자주 사용하는 shell command, shell script 위주로 학습
- 필요한 코드가 있는 경우 검색해서 찾기
- 해당 코드에서 나오는 새로운 커맨드 학습해서 정리하기
- 왜 이렇게 되는가? 생각하기
- 배경지식이 필요한 경우 Linux, OS학습
Linux를 사용하는 방법
- VirtualBox에 Linux 설치
- Docker로 설치
- WSL 사용(윈도우)
- Notebook에서 터미널 실행
- Cloud에서 띄우는 인스턴스에서 연습
Shell의 종류
- 쉘: 사용자가 문자를 입력해 컴퓨터에 명령할 수 있도록 하는 프로그램
- 터미널 / 콘솔
: 쉘을 실행하기 위해 문자 입력을 받아 컴퓨터에 전달
: 프로그램의 출력을 화면에 작성- sh
: 최초의 쉘- bash
: Linux 표준 쉘- zsh
: Mac 카탈리나 OS 기본 쉘
Shell을 사용하는 경우
- 서버에 접속해서 사용하는 경우
- crontab 등 Linux의 내장 기능을 활용하는 경우
- 데이터 전처리를 하기 위해 shell command를 사용
- Docker를 사용하는 경우
- 수백대의 서버를 관리할 경우
- Jupyter Notebook의 cell에서 앞에 !를 붙이면 shell command가 실행됨
- 터미널에서 python3, jupyter notebook 도 shell command
- Test code 실행
- 배포 파이프라인 실행(github action 등에서 실행)
vi 편집기의 Mode
- Command Mode
: vi 실행시 기본 모드,방향키
를 통해 커서 이동
-dd
: 현재 위치한 한 줄 삭제
-i
: INSERT모드로 변경
-x
: 커서가 위치한 곳의 글자 1개 삭제(5x
: 5개 삭제)
-yy
: 현재 줄을 복사(ctrl+c)
-p
: 현재 커서가 있는 줄 바로 아래에 붙여넣기(ctrl+v)
-k
: 커서 위로
-j
: 커서 아래로
-l
: 커서 오른쪽으로
-h
: 커서 왼쪽으로
- Insert mode
: 파일을 수정할 수 있음,ESC
입력시 Command모드로 변경- Last Line Mode
:ESC
를 누른 후:
을 누르면 나오는 모드
-w
: 현재 파일명으로 저장
-q
: vi 종료(저장x)
-q!
: vi 강제종료
-wq
: 저장한 후 종료
-/문자
: 문자 탐색,n
을 누르면 계속 탐색 실행
-set nu
: vi 라인 번호 출력
기본 shell command
(일상처럼 사용할 수 있도록 연습!)
- man
: shell command의 매뉴얼 문서를 보고 싶은 경우
ex.man python
/ 종료::q
입력- mkdir
: 폴더 생성하기, make directory
ex.mkdir linux-test
- ls
: 폴더, 파일 확인, List Segments
: ls 뒤에 아무것도 작성하지 않으면 현재 폴더 기준
: ls 뒤에 폴더를 작성하면 폴더 기준에서 실행
옵션
-a
: .으로 시작하는 파일, 폴더를 포함해 전체 파일 출력
-l
: 퍼미션, 소유자, 만든날짜, 용량까지 출력
-h
: 용량을 사람이 읽기 쉽도록 GB, MB 등 표현.-l
와 같이 사용
ex.ls-al
,ls -lh
- pwd
: 현재 폴더의 절대 경로, Print Working Directory
ex.pwd
- cd
: 폴더 변경, 이동하기, Change Directory
ex.cd linux-test
- echo
:print()
처럼 터미널에 텍스트 출력
ex.echo "hi"
: echo `쉘 커맨드` 입력시 shell command의 결과를 출력
ex.echo `pwd`
- vi
: vim 편집기로 파일 생성, INSERT모드에서만 수정할 수 있음
ex.vi vi-test.sh
, 새로운 창이 뜨면i
를 눌러서 INSERT 모드로 변경. 그 후echo "hi"
를 작성
ESC :wq
: 저장하고 나가기, write and quit
ESC :wq!
: 강제로 저장하고 나오기
ESC :q
: 그냥 나가기- bash
: bash로 쉘 스크립트 실행
ex.bash vi-test.sh
, 앞에서 작성한 "hi"가 출력- sudo
: 관리자의 권한으로 실행하고 싶은 경우
: superuser do, substitute user do- cp
: 파일 또는 폴더 복사, Copy
ex.cp vi-test.sh vi-test2.sh
--r
: 디렉토리를 복사할 때 안에 파일이 있으면 재귀적으로 모두 복사
--f
: 복사할 때 문제가 있어도 강제로 실행- mv
: 파일, 폴더 이동하기 또는 이름 바꿀 때, Move
ex.mv vi-test.sh vi-test3.sh
- cat
: 특정 파일 내용 출력, concatenate
: 여러 파일을 인자로 주면 합쳐서(CONCAT) 출력
cat vi-test.sh
cat vi-test2.sh vi-test3.sh
: 파일에 저장하고(OVERWRITE) 싶은 경우(>
)
cat vi-test.sh vi-test3.sh > new_test.sh
: 파일에 추가하고(APPEND) 싶은 경우(>>
)
cat vi-test2.sh vi-test3.sh >> new_test.sh
- clear
: 터미널 창을 깨끗하게 해줌- history
: 최근에 입력한 shell command history 출력
: history 결과에서 느낌표를 붙이고 숫자 입력시 그 커맨드를 다시 활용할 수 있음
ex.!30
: 30번째 커맨드 재활용- find
: 파일 및 디렉토리를 검색할 때 사용
ex.find . -name "File"
: 현재 폴더에서File
이라는 이름을 가지는 파일 및 디렉토리 검색- export
: 환경변수 설정, 단 터미널이 꺼지면 사라짐
ex.export water="물"
,echo $water
=>물
출력
: 매번 shell을 실행할 때마다 환경변수를 저장하고 싶으면.bashrc
,.zshrc
에 저장하면 됨
ex.(Linux) vi ~/.bashrc
또는vi ~/.zshrc
제일 하단에export water="물"
을 저장하고 나옴(ESC :wq
)
그 후source ~/.bashrc
또는source ~/.zshrc
Linux 환경 설정을 재로그인하지 않고 즉시 적용하고 싶은 경우source
사용- alias
: 터미널에서 별칭으로 설정된 것을 볼 수 있음
ex.ls -l
이ll
으로 지정되어 있음
ex2.alias ll2='ls -l'
,ll2
가 새로운 alias로 동작
Shell Command
- head, tail
: 파일 앞/뒤 n행 출력
ex.head -n 3 vi-test.sh
- sort
: 행단위 정렬
-r
: 내림차순으로 정렬
-n
: Numeric Sort 아니면 String Sort
|
: 파이프
ex.vi fruit.txt
~~ESC :wq
cat fruit.txt | sort
cat fruit.txt | sort -r
- uniq
: 중복된 행이 연속으로 있는 경우 중복 제거,sort
와 함께 사용
-c
: 중복 행의 개수 출력
wc -l
: words count lines?
ex.
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
: Insesitively하게, 대소문자 구분 없이 찾기
-w
: 정확히 그 단어만 찾기
-v
: 특정 패턴 제외한 결과 출력
-E
: 정규 표현식 사용
정규표현식 패턴
^단어
: 단어로 시작하는 것 찾기
단어$
: 단어로 끝나는 것 찾기
.
: 하나의 문자 매칭- cut
: 파일에서 특정 필드 추출
-f
: 잘라낼 필드 지정
-d
: 필드를 구분하는 구분자. Default는\t
vi cut_file
~~ESC :wq
cat cut_file|cut -d : -f 1, 7
: 1번째 7번째 값을 가져옴,:
기준으로 구분
표준 스트림
Unix에서 동작하는 프로그램은 command 실행시 3개의 Stream이 생성
- stdin: 0으로 표현, 입력(비밀번호, 커맨드 등)
- stdout: 1로 표현, 출력 값(터미널에 나오는 값)
- stderr: 2로 표현, 디버깅 정보나 에러 출력
Redirection & Pipe
Redirection: 프로그램의 출력(stdout)을 다른 파일이나 스트림으로 전달
>
: 덮어쓰기(Overwrite), 파일이 없으면 생성하고 저장
>>
: 맨 아래에 추가하기(Append)
echo "hi">vi-test3.sh
: 덮어쓰기
echo "hello">>vi-test3.sh
: 추가
cat vi-test3.sh
: 출력
Pipe: 프로그램의 출력(stdout)을 다른 프로그램의 입력으로 사용하고 싶은 경우
ls | grep "vi"
: 현재 폴더에 있는 파일명 중vi
가 들어간 단어를 찾고 싶은 경우
grep "vi"
: 특정 단어 찾기
ls | grep "vi" > outout.txt
history | grep "echo"
연습문제
test.txt 파일에 "Hi!!!!"를 입력해주세요(vi 사용 금지)
test.txt 파일 맨 아래에 "kkkkk"를 입력해주세요(vi 사용 금지)
test.txt의 라인 수를 구해주세요(힌트 : wc -l를 쓰면 라인 수를 구할 수 있음
서버에서 자주 사용하는 쉘 커맨드
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=>romote
scp local_path user@ip:remote_directory
remote=>local
scp user@ip:remote_directory local_path
remote=>remote
scp user@ip:remote_directory user2@ip2:target_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)
permission
r
= read(읽기), 4
w
= write(쓰기), 2
x
= eXecute(실행하기), 1
-
= Denied
r-x
= 읽거나 실행할 수는 있지만 수정은 불가능
ex.755
,644
로 퍼미션을 주세요!(user
,group
,others
순서)
->rwx
를 더하면4+2+1=7
ex2.chmod 755 vi-test2.sh
를 실행하면 파일의 permission이 변경됨
쉘 스크립트
:
.sh
파일을 생성하고, 그 안에 쉘 커맨드를 추가
: 파이썬처럼if
,while
,case
문이 존재하며 작성시bash name.sh
로 실행가능
:쉘 스크립트
=쉘 커맨드
의 조합
: 쉘 커맨드에 익숙해진 후 스크립트로 생성(python)과 유사쉘 스크립트 예시
special mission
1) 학습한 쉘 커맨드 정리하기
2) 카카오톡 그룹 채팅방에서 옵션 - 대화 내보내기로 csv로 저장 후, 쉘 커맨드 1줄로
카카오톡 대화방에서 2021년에 제일 메세지를 많이 보낸 TOP 3명 추출하기!grep -o "^\[.*\>\] " kakaotalk.txt | \ cut -f 1 -d "]" | sort | uniq -c | \ sort -r | head -n 3
Author And Source
이 문제에 관하여([부스트캠프 AI tech AI서비스개발기초] week05 (2022.02.16)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@redgreen/부스트캠프-AI-tech-AI서비스개발기초-week05-2022.02.16저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)