본문 바로가기

부스트캠프 AI Tech 3기/이론 : U-stage

[Day18] AI 서비스 개발 3. Linux&Shell Command

Linux

server에서 자주 사용하는 OS

  • 비용
    window에서 서버를 사용하려면 라이센스비용을 내야하지만 linux는 오픈소스로 존재해서 비용이 필요하지 않다.
  • 확장 가능
  • 안정성, 신뢰성

CLI

Command Line Interface : 터미널

윈도우에서는 WSL

 

GUI

Graphic User Interface : 데스크탑

 

Linux 배포판

  • Debian
  • Ubuntu
    영국의 회사에서 만들었음
    쉽고 편한 설치로 초보자들이 사용하게 좋음
  • Redhat
    레드햇회사에서 배포
  • CentOS

Shell

사용자가 문자를 입력해 컴퓨터에 명령할 수 있도록 하는 프로그램

터미널이나 콘솔에서 쉘을 실행할 수 있는데, 문자 입력을 받아서 쉘에 보내고, 쉘에서 처리한 출력을 화면에 보여주는 역할을 한다.

 

Shell 종류

  • sh
  • bash
  • zsh

host=컴퓨터

hostname=컴퓨터이름

 

Shell을 사용하는 경우

  • 서버에 접속해서 사용하는 경우
  • Linux 내장 기능 사용하 때
  • 데이터 전처리
  • Docker
  • 서버 관리
  • notebook에서 !를 붙혀서 쉘 command를 사용할 수 있다.
  • test, 배포 실행

Shell command

wsl를 설치해서 windows terminal을 열면 shell을 실행해볼 수 있다.
명령어 wsl치고 시작할 것!!!!!! (나를 위한 조언)

 

기본 명령어

더보기
  • 파이썬 메뉴얼
    man python
    q # 메뉴얼 종료​
  • 폴더 생성하기
    mkdir directory_name​
    mkdir : MaKe DIRectory
  • 현재 폴더의 파일과 폴더 확인
    ls # 현재폴더의 파일탐색
    ls directory_name # 특정 폴더의 파일 탐색
    ls -a # .으로 시작하는 파일이나 폴더도 찾아서 보여준다
    ls -l # 소유자, 만든 날짜, 용량 등 부가 정보도 같이 출력
    ls -h # 파일 크기를 단위를 붙혀서 표현해준다.
    ls -lh # l과 h옵션을 동시에 적용​
    ls : List Segments
  • 절대 경로 출력
    pwd
    현재 나의 위치에서 절대 경로를 print
    pwd : Print Working Directory
  • 폴더 변경/이동
    cd to_this_directory
    cd .. # 하나 상위 directory로 이동
    cd : Change Directory
  • 출력
    echo "hello"
    >>>hello
    echo `pwd` #현재 위치에서 '(backtick) 안에 있는 명령어를 실행한 결과를 출력
    >>>절대 경로
  • vim 편집기로 파일 생성
    vi new_vi_file.sh # vim 편집기로 파일 생성
    # 새 창이 뜸
    i # insert 모드로 변경
    # 글을 다 작성하면 esc
    :wq # write -> quit #후에 enter
    :wq! # 강제저장

    • command mode
      vi 실행시 기본 mode
    • insert mode
      파일을 수정할 수 있는 상태
      esc를 누르면 다시 command mode로 돌아갈 수 있다.
    • last line mode
      command mode에서 :을 누르면 나오는 mode
      하단에 따로 입력할 수 있게 된다
  • bash
    bash new_vi.sh #new_vi.sh에 작성했던 내용이 실행된다.​
  • 관리자 권한으로 실행
    sudo
    sudo : superuser do
    조심해서 사용해야 한다.
  • 파일 or 폴더 복사하기
    cp new_vi.sh newest_vi.sh #cp '복사할 파일' '복사된 파일에 붙힐 이름'
    cp -r '폴더이름' '복사된 폴더에 붙힐 이름'
    cp -f ~ ~ # 강제복사
     cp : copy
    -r 를 붙히면 폴더 안에 있는 파일도 모두 복사해 준다.
  • 파일, 폴더 이동
    mv new_vi.sh change_name_vi.sh # 이름 바꾸는 용도로 사용 # mv '선택할 파일' '바꿀 파일 이름'
    mv new_vi.sh ../move_new_vi.sh # 파일 복사 + 이동 # mv '선택할 파일' '이동 주소만 혹은 바꿀 파일 이름도 함께'

    mv : move
  • 특정 파일 내용
    cat new_vi.sh newest_vi.sh # 두 파일 내용을 합쳐서 출력한다.​

    cat : concatenate
    굳이 두 내용을 합칠 때 보다는, 파일 내부 내용을 출력할 때 많이 사용하는 것 같다.
  • 창을 깨끗하게 비움
    clear
  • 최근에 입력했던 명령어 기록 출력
    history
    !24 # history의 24번째 있는 명령어를 실행한다.
     
  • 파일이나 디렉토리를 검색
    그 파일이 존재하는 폴더의 위치 반환-name : 파일 명으로 검색하겠다는 옵션
    find . -name "new_vi.sh"
     . : 현재 경로
    현재경로로 위치를 지정해서 상대경로로 위치를 반환해준다.
  • 환경변수 설정
     export pikachu="cute"
     # export pikachu = "cute" #띄어쓰기 하면 안 됌
     echo $pikachu #변수처럼 사용하되, 앞에 $를 붙혀야 내용물이 나온다.
    >>>cute
     터미널이 꺼지면 환경 변수가 사라진다.
  • 별칭 지정
    alias ll='ls -l'
    ll
    >>>출력내용들,,
    기본 명령어를 줄여서 지정할 수 있다.
    터미널이 종료되면 설정이 역시 날아간다.

추가 명령어

더보기
  • sort
    cat file.txt|sort
    cat file.txt|sort -r # reverse 순으로 출력​
     알파벳 순으로 정렬한다.
  • uniq
    cat filename.txt|uniq
    >>>중복제거한 내용
    cat filename.txt|sort|uniq|wc -l # wc: word count
    >>>3

    유일한 값 출력, 중복된 행 제거
    연속으로 중복되야지만 제거하기 때문에 sort를 하고 uniq를 다음에 많이 사용한다
  • grep
    cat filename.txt|grep -E ^a # 정규표현식 사용, a로 시작하는 것 찾기
    -i 대소문자 없이 찾기 : insensitively  
    -w 정확히 해당 단어만 찾기  
    -v 특정패턴을 제외한 결과 출력  
    -E 정규표현식 사용 ^a : a로 시작하는 것 찾기
    cd$ : cd로 끝나는 것 찾기
    .a : a가 들어가는 것 찾기
    파일에 주어진 파턴 목록과 매칭되는 라인 검색
  • cut
     cat filename.txt|cut -d" " -f1 # 공백으로 잘라서 첫번째 도막난 것을 사용하겠다

    파일에서 특정 부분 추출

서버 기본 명령어

더보기
  • 현재 실행 중인 process 출력
    ps -e # 모든 프로세스 출력
    ps -f # time,ppid 등 자세히 full format으로 출력​
    ps : Process Status
  • request를 테스트
    curl -X localhost:5000/ data

    curl : Client URL
    웹 서버 요청이 제대로 실행되었는지 확인
  •  디스크 용량 확인
    df
    df -h # 그냥 df보다 읽기 쉬운 형태로 출력​
    df : Disk Free웹 서버 요청이 제대로 실행되었는지 확인
  • SSH를 이용해 파일을 호스트간 주고 받음
    scp local_path user@ip:remote_directory # local의 파일이 remote로
    scp user@ip:remote_directory local path # remote파일이 local로 다운
    scp user@ip:remote_directory user@ip:destination_remote_directory #서버(remote)에서 서버(다른 remote로)
    scp : Secure CoPy
  • 백그라운드 실행
    nohup python3 app.py & # 유지
    
    #종료
    ps ef|grep app.py #로 pid를 찾고
    kill -9 app_pid_num #그 pid를 죽인다

    터미널 종료 후에도 계속 작업 유지
    파일의 permission 755이어야한다.
    nohup을 종료하고 싶다면 ps로 pid를 찾아서 kill시켜야 한다.
    로그가 nohup.out에 저장된다.
  • 파일의 권한을 변경
    ls -l
    >>>-rwxrwxrwx 1 user user   282 Feb 18  2021
    #에서 "-rwxrwxrwx"가 permission을 나타낸다.
    
    chmod 755 new_vi.sh
    # 7=4+2+1 : 3개의 permission(권한)을 user에게 다 준다.
    chmod : CHange MODe
    753면 순서대로 7은 user permission, 5는 group permission, 3은 기타 permission을 의미한다.
    Permission 종류

    • r : read : 4
    • w : write : 2
    • x : execute : 1
    • - : denied

 

표준스트림 : stream

command를 실행시에 3개의 stream이 생성된다.

  • stdin : standard in
    0으로 표현
    사용자의 입력
  • stdout : standard out
    1로 표현
    터미널의 출력
  • stderr : standard error
    2로 표현
    디버깅이나 에러 출력

Redirection

stdout을 다른 파일이나 stream으로 전달

  • >
    덮어쓰기 = overwrite
    파일이 없을 경우에는 파일을 새로 생성하고 저장한다
    echo 'overwrite'>filename.txt​
  • >>
    맨 아래에 추가하기 = append
    echo 'banana'>>filename.txt​

Pipe

stdout을 다른 프로그램의 입력으로 사용하고 싶은 경우

ls|grep "txt" # 현재 폴더에 있는 파일들 중 txt가 들어가는 파일명을 찾는다
#ls의 출력을 grep의 입력으로 사용

Shell script

shell 명령어들을 하나의 파일로 연결

if, while등을 사용해서 sh파일로 작성해서 bash로 사용할 수 있다.