[AI 서비스 개발 개론] Product Serving - Linux & Shell Command

AI 서비스 개발 개론

2. Linux & Shell Command

Linux

1) Linux를 알아야 하는 이유

  • 서버에서 자주 사용하는 OS (mac, window도 서버로 활용은 가능하나 유료)
  • free, 오픈 소스 : 여러 버전이 존재 => 우리도 버전을 만들 수 있음
  • 안정성, 신뢰성 : 유닉스 기반이기 때문에 stability, reliability
  • 쉘 커맨드, 쉘 스크립트 자주 사용

2) 대표적인 Linux 배포판

  • Debian
    • 온라인 커뮤니티에서 제작하여 배포
  • Ubuntu
    • 영국의 캐노니컬이라는 회사에서 만든 배포판으로 쉽고 편한 설치
    • 초보자들이 쉽게 접근할 수 있도록 만듬
  • Redhat
    • 레드햇이라는 회사에서 배포한 리눅스
  • CentOS
    • Red Hat이 공개한 버전을 가져와서 브랜드와 로고를 제거하고 배포한 버전

3) Linux 사용 가이드

  • Linux, Shell script 사용 가이드
    • 최초엔 자주 사용하는 쉘 커맨드, 쉘 스크립트 위주로 학습
    • 필요한 코드가 있는 경우 검색해서 찾기
    • 해당 코드에서 나오는 새로운 커맨드 학습해서 정리하기
    • 왜이렇게 되는가? 생각하며 배경 지식이 필요한 경우 Linux, OS 학습
  • Linux 사용법
    • VirtualBox에 Linux설치, Docker로 설치
    • WSL 사용(윈도우)
    • Notebook에서 터미널 실행
    • 2.4 Cloud에서 띄우는 인스턴스에서 연습(추천)

Shell command

1) 쉘의 종류

    • 사용자가 문자를 입력해 컴퓨터에 명령할 수 있도록 하는 프로그램
  • 터미널, 콘솔
    • 쉘을 실행하기 위해 문자 입력을 받아 컴퓨터로 전달
    • 프로그램의 출력을 화면에 작성
  • sh
    • 최초의 쉘
  • bash
    • Linux 표준 쉘
  • zsh
    • Mac 카탈리나 OS 기본 쉘

2) 쉘 UX

  • username@hostname:current_folder
    • hostname : 컴퓨터 네크워크에 접속된 장치에 할당된 이름. IP 대신 기억하기 쉬운 글자로 저장

3) 쉘을 사용하는 경우

  • 서버에 접속해서 사용하는 경우
  • crontab 등 Linux의 내장 기능을 활용하는 경우
  • 데이터 전처리를 하기 위해 쉘 커맨드를 사용
  • Docker를 사용하는 경우
  • 수백대의 서버를 관리하는 경우
  • jupyter notebook의 cell에서 앞에 !를 붙이면 쉘 커맨드가 사용됨
  • 터미널에서 python3, jupyter notebook도 쉘 커맨드
  • Test Code를 실행하는 경우
  • 배포 파이프라인을 실행하는 경우(Github Action 등에서 실행)

4) 기본 쉘 커맨드

  • man : 매뉴얼 문서 (종료 -> ':q')
  • mkdir : 폴더 생성(make directory)
  • ls : 현재 위치에 있는 폴더, 파일 확인 (list segments)
    • 옵션
      • -a : .으로 시작하는 파일, 폴더 포함 전체 출력
      • -l : 퍼미션, 소유자, 만든 날짜, 용량까지 출력
      • -h : 용량을 사람이 읽기 쉽게 GB, MB 등 으로 표현. -l과 같이 사용
    • ls ~
    • ls
    • ls -al
    • ls -lh
  • pwd : 현재 폴더 경로를 절대 경로로 보여줌
  • cd : 폴더 변경, 폴더로 이동
  • echo : 터미널에 텍스트 출력( python print와 유사)
    • 1왼쪽에 있는 backtick사이에 쉘커맨드 입력 시 쉘 커맨드 결과 출력
      echo `pwd`
  • vi : vim 편집기로 파일 생성
    • vi vi-test.sh
    • 새로운 창이 뜨면 i를 눌러서 INSERT 모드로 변경
    • Command Mode
      • vi 실행 직후 기본 모드
      • dd : 현재 위치한 한 줄 삭제
      • i : INSERT 모드로 변경
      • x : 커서가 위치한 곳의 글자 1개 삭제(5x : 글자 5개 삭제)
      • yy : 현재 줄을 복사
      • p : 현재 커서가 있는 줄 바로 아래 붙여넣기
      • k/j : 커서 위로 / 아래로
      • l/h : 커서 오른쪽으로 / 왼쪽으로
    • Insert Mode
      • 파일을 수정할 수 있는 모드
      • 다시 Command Mode로 가고 싶다면 ESC 입력
    • Last Line Mode
      • Insert Mode에서 ESC를 누른 후 콜론(:)을 누르면 나오는 Mode
      • w : 현재 파일명으로 저장
      • q : vi종료(저장되지 않음)
      • q!: vi 강제 종료(!는 강제를 의미)
      • wq : 저장한 후 종료
      • \문자 : 문자 탐색 - 탐색 후 n을 무르면 계속 탐색 실행
      • set nu : vi 라인 번호 출력
  • bash : 쉘 스크립트 실행
  • sudo : 관리자 권한으로 실행
    • 관리자 권한 실행은 조심해서 사용
    • 프로그램이 꼬일 수 있으므로 설치 할 때 sudo 대신 --user 사용 권장
  • cp : 파일 또는 폴더 복사
    • -r : 디렉토리를 복사할 때 디렉토리 안에 파일이 있으면 recursive하게 모두 복사
    • -f : 복사할 때 강제로 실행
  • mv : 파일, 폴더 이동하기(또는 이름 바꿀 때 활용)
  • cat: 특정 파일 내용 출력(concatenate)
    • 여러 파일을 인자로 주면 합쳐서 출력
  • clear : 터미널 창을 깨끗하게
  • history : 최근에 입력한 쉘 커맨드 history 출력
    • history 결과에서 숫자가 나오는데 !붙이고 숫자 입력 시 그 커맨드를 다시 활용할 수 있음
  • find: 파일 및 디렉토리를 검색할 때 사용
    • find . -name 'File' : 현재 폴더에서 File이란 이름을 가진 파일 및 디렉토리 검색
  • export : 환경 변수 설정
    • export water='물'
    • echo $water => 물
    • export로 환경변수 설정한 경우, 터미널이 꺼지면서 사라지게 됨
    • 매번 쉘을 실행할 때마다 환경변수를 저장하고 싶으면 .bashrc, .zshrc에 저장하면 됨
      • (Linux) vi ~/.bashrc 또는 vi ~/.zshrc
      • 파일 제일 하단에 export water='물'을 저장하고 나옴(ESC:wq)
      • 그 후 source ~/.bashrc 또는 source ~/.zshrc 입력
      • Linux 환경 설정을 재로그인 하지 않고 즉시 적용하고 싶을 때 source 사용
  • alias : 기본 명령어를 간단히 줄일 수 있음
    • 터미널에 alias라고 치면 현재 별칭으로 설정된 것을 볼 수 있음

5) 추가 쉘 커맨드

  • head/tail -n : 파일의 앞/뒤 n행 출력
  • sort : 행 단위 정렬
    • -r : 정렬을 내림차순으로 정렬(default는 오름차순)
    • -n : numeric sort
    • 사용 예 ) cat fruits.txt | sort
  • uniq : 중복된 행이 연속으로 있는 경우 중복 제거
    • 자주 sort와 함께 사용
    • -c : 중복 행의 개수 출력
    • 사용 예) cat fruits.txt | sort | uniq
  • grep : 파일에 주어진 패턴 목록과 매칭되는 라인 검색
    • -i: insensitively하게, 대소문자 구분 없이 찾기
    • -w : 정확히 그 단어만 찾기
    • -v : 특정 패턴 제외한 결과 출력
    • -E : 정규 표현식 사용
      • 정규 표현식 패턴
        • ^단어 : 단어로 시작하는 것 찾기
        • 단어$ : 단어로 끝나는 것 찾기
        • . : 하나의 문자 매칭
  • cut : 파일에서 특정 필드 추출
    • -f : 잘라낼 필드 지정
    • -d : 필드를 구분하는 구분자. default는 \t

6) 표준 스트림(Stream)

  • Unix 내에서 동작하는 프로그램은 커맨드 실행시 3개의 stream 이 생성
  • stdin : 0으로 표현, 입력
  • stdout : 1로 표현, 출력
  • stderr : 2로 표현, 디버깅 정보나 에러 출력

7) Redirection & Pipe

  • Redirection : 프로그램의 출력(stdout)을 다른 파일이나 스트림으로 전달

    • > : 덮어 쓰기. 파일이 없으면 생성하고 저장
    • >> : 이어서 쓰기(맨 아래에 추가하기)
    • 예) echo 'hi' > vi-test.sh
    • 예) echo 'hi' >> vi-test.sh
  • Pipe(|) : 프로그램의 출력(stdout)을 다른 프로그램의 입력으로 사용하고 싶은 경우

    • A의 output을 B의 input으로 사용(다양한 커맨드를 조합)
    • 예) 현재 폴더에 있는 파일 명 중 vi가 들어간 단어를 찾고 싶은 경우
      • ls | grep "vi"
  • 연습 문제

    • test.txt 파일에 'hi!!!'를 입력(vi 사용 금지)
    • test.txt 파일 맨 아래에 'kkkkk'를 입력(vi 사용 금지)
    • test.txt 파일의 라인 수를 구하라.(hint : wc -l)
      echo 'hi!!!' > test.txt
      echo 'kkkkk' >> test.txt
      cat test.txt | wc -l

8) 서버에서 자주 사용되는 쉘 커맨드

  • ps : 현재 실행되고 있는 프로세스 출력하기
    • -e : 모든 프로세스
    • -f : full format으로 자세히 보여줌
  • curl : request를 할 수 있는 명령어, 웹서버를 작성한 후 요청이 제대로 실행하는지 확인 가능(client url)
    • curl외에 httpie도 있음(더 가독성 있게 출력)
  • df : 현재 사용중인 디스크 용량 확인
    • -h: 사람이 읽기 쉬운 형태로 출력
  • scp : SSH를 이용해 네트워크로 연결된 호스트 간 파일을 주고 받는 명령어 (secure copy)
    • -r : 재귀적으로 복사
    • -P : ssh포트 지정
    • -i : ssh 설정을 활용해 실행
    • 예) scp local_path user@ip:remote_directory user2@ip:target_remote_directory (local=> remote)
  • nohup : 터미널 종료 후에도 게속 작업이 유지되도록 실행(백그라운드 실행)
    • 예 ) nuhup python3 app.py &
    • nohup으로 실행된 파일은 permission이 755이어야 함
    • 종료는 ps ef|grep app.py한 후, pid(Process ID) 찾은 후 kill -9 pid로 프로세스 종료
    • 로그는 nohup.out에 저장됨
    • nohup 외에도 screen 이라는 도구도 존재
  • chmod : 파일의 권한을 변경하는 경우 사용
    • 유닉스에서 파일이나 디렉토리의 시스템 모드를 변경
    • Permission
      • r = Read(읽기), 4
      • w = Write(쓰기), 2
      • x = eXecute(실행하기), 1
      • - = Denied
      • ex) r-x : 읽거나 실행할 수 있지만 수정은 불가능
      • ex) 755로 퍼미션 주세요!
        -> (user=7, group=5, 기타 사용자=5) = (rwx =4+2+1 = 7, rx = 5, rx = 5)

9) 쉘 스크립트

과제

카카오톡 그룹 채팅방 내용을 csv로 저장 후, 쉘 커맨드 한 줄로 카카오톡 대화방에서 2021년에 제일 메세지를 많이 보낸 top 3명 추출하기!

좋은 웹페이지 즐겨찾기