[Boostcamp 5주차] Linux & Shell Command

yoonene·2022년 2월 18일
0

Boostcamp AI Tech

목록 보기
21/27

Linux

  • 서버에서 자주 사용하는 OS
  • Mac, Windows는 유료지만 Linux는 무료
  • 안정성, 신뢰성이 있음
  • 오픈소스 - 여러 버전 존재
    • Debian: 온라인 커뮤니티에서 배포
    • Ubuntu: 영국의 캐노니컬이라는 회사에서 배포, 쉽고 편함
    • Redhat: 레드햇이라는 회사에서 배포
    • CentOS: 레드햇이 공개한 버전을 브랜드와 로고를 제거하고 배포

Linux 사용하는 법

  • VirtualBox에 설치
  • Docker에 설치
  • WSL 사용 (윈도우)
  • Terminal 사용

Shell Command

  • Shell: 사용자가 문자를 입력해 컴퓨터에 명령할 수 있도록 하는 프로그램
  • Terminal/Console: 쉘 실행을 위해 문자를 입력 받고 컴퓨터에 전달함, 프로그램의 출력을 화면에 보여줌
  • sh: 최초의 shell
  • bash: Linux 표준 shell
  • zsh: MacOS 기본 shell

기본 Shell Command

  • man
    매뉴얼 문서 보기
    ex) man python

  • mkdir
    폴더 생성하기 (make directory)
    ex) mkdir my-directory

  • ls
    현재 접근한 위치의 폴더 및 파일 확인 (list segments)
    옵션
    ex) ls ~ / ls / ls -al / ls -lh ...

    • -a : 전체 폴더,파일 출력
    • -l : 퍼미션, 소유자, 생성 날짜, 용량도 같이 출력
    • -h : 사람이 읽기 쉽도록 용량에 GB, MB를 붙여서 출력
  • pwd
    현재 폴더의 절대 경로 보기 (print working directory)

  • cd
    폴더 변경, 해당 폴더로 이동하기 (change directory)
    ex) cd my-directory

  • echo
    터미널에 텍스트 출력
    echo "hi" -> hi 출력
    터미널에 쉘 커맨드 결과 출력 (backtick ` 사용)
    echo `pwd` -> 현재 폴더의 절대 경로 출력

  • vi
    vi 편집기 파일 생성

    • Command Mode
      • dd : 현재 줄 삭제
      • i : insert 모드로 변경
      • x : 현재 줄에서 문자 1개 삭제 (3x : 문자 3개 삭제)
      • yy : 현재 줄 복사
      • p : 현재 줄 바로 아래 붙여넣기
      • k : 커서 위로 / j: 커서 아래로 / l : 커서 오른쪽으로 / h : 커서 왼쪽으로 이동
    • Insert Mode
      파일을 수정할 수 있음. 문자 입력 가능
      esc -> command mode로 돌아가기
    • last Line Mode
      esc -> : (콜론)
      • w : 저장
      • q : vi 종료
      • q! : vi 강제 종료
      • wq : 저장하고 종료
      • /문자 : 문자 탐색 (n 누르면 다음 탐색 결과로 넘어감)
      • set nu : vi 라인 번호 보여줌
  • bash
    쉘 스크립트 실행
    ex) bash test.sh -> test.sh 실행

  • sudo
    관리자 권한으로 실행
    'superuser do'(최고 권한을 가진 슈퍼 유저로 프로그램을 실행)에서 유래 -> 최근엔 'subtitute user do'(다른 사용자의 권한으로 프로그램을 실행)로 해석
    커맨드 앞에 sudo를 붙임
    조심해서 써야 함

  • cp
    파일 또는 폴더 복사하기 (copy)
    ex) cp test.sh test2.sh -> 복사
    -r : directory 안의 파일까지 recursive(재귀적)하게 모두 복사
    -f : 강제 복사 실행

  • mv
    파일 이동 또는 이름 변경 (move)
    ex) mv test.sh test2.sh -> test에서 test2로 이름 변경
    폴더(directory)는 mvdir 사용

  • cat
    특정 파일 내용 출력 (concatenate)
    ex) cat test.sh -> 파일 내용 터미널에 출력

  • 여러 개의 파일을 인자로 주면 함께 합쳐서 출력됨 (CONCAT)
    cat test.sh test2.sh

  • OVERWRITE
    cat test.sh test2.sh > test2.sh
    -> test.sh와 test2.sh가 합쳐진 내용이 test2.sh 파일에 덮어씌워짐

  • APPEND
    cat test.sh test2.sh > test2.sh
    -> test.sh와 test2.sh가 합쳐진 내용이 test2.sh 파일의 밑에 추가됨

  • clear
    터미널 창 깨끗하게 지우기

  • history
    과거 입력한 쉘 커맨드 history 출력
    느낌표와 해당 커맨드 숫자 입력시 다시 활용 가능
    ex) !30 -> 30번 커맨드 현재 입력에 사용

  • find
    파일 및 폴더 검색에 사용
    ex) find . -name "my-file" -> 현재 폴더에서 my-file이라는 파일 검색

  • export
    환경 변수 저장
    ex) export water="물"
    echo $water -> 물 출력

    • 변수와 값을 =으로 지정할 때 띄어쓰기 사용하면 안됨
    • 변수 활용할 때 앞에 $ 써줘야 저장된 값 사용
    • 그냥 커맨드 덜렁 쓰면 터미널이 꺼질 때 환경 변수를 설정했던 게 사라짐
    • 쉘 실행마다 환경 변수가 설정되어야 한다면 .bashrc나 .zshrc 안에 입력하여 저장하면 됨
      (재접속하지 않고 바로 적용하고 싶다면 source ~/.bashrc나 source ~/.zshrc 사용)
  • alias
    별칭으로 설정, 기본으로 설정되어 있는 별칭 확인 가능
    기본 명령어를 간단히 줄여 사용할 수 있도록 함.
    ex) alias jupyter notebook='jn'

그외 shell command

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

Redirection & Pipe

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

  • Pipe
    프로그램의 출력을 다른 프로그램의 입력으로 사용
    ex) ls | grep "sh" -> 현재 폴더에 있는 파일 중 이름에 sh가 들어간 파일 찾기

  • Redirection & Pipe
    ls | grep "sh" > output.txt
    -> 현재 폴더의 sh라는 문자가 들어간 파일 이름을 output.txt라는 파일에 overwrite

서버에서 자주 사용되는 shell command

  • ps : 현재 실행되고 있는 프로세스 출력
    -e : 모든 프로세스
    -f : full format으로 자세히 보기
  • curl : request를 테스트할 수 있음
  • df : 현재 사용 중인 디스크 용량 확인
    -h : 사람이 읽기 좋게 출력
  • scp : ssh를 이용해 네트워크로 연결된 호스트 간 파일을 주고 받기
    -r : 재귀적으로 복사
    -P : ssh 포트 지정
    -i : ssh 설정을 활용해 실행
  • nohup : 터미널이 종료되어도 계속 작업이 유지되도록 실행 (백그라운드 실행)
    종료: ps ef | grep app.py -> kii -9 pid
    이외에 screen이라는 도구도 있음
  • chmod : 파일의 권한 변경

shell script

.sh 파일에 쉘 커맨드를 추가 (쉘 커맨드의 조합)
bash로 파일 내 쉘 커맨드 모조리 실행 가능

+) Special Mission

특정 카카오톡 그룹 채팅방에서 2021년에 제일 메시지를 많이 보낸 3명 추출하기
cat moon.csv | awk -F, '/2021/ {print $2}' | sort | uniq -c | sort -r | head -n 3

cf. 사람별 보낸 개수 집계할 때 awk로 표현하는 방법도 있음
cat KakaoTalk.csv | awk -F, '{print $2}' | awk '{arr[$1] += 1} END {for (i in arr) {print i "\t",arr[i]}}’

profile
NLP Researcher / Information Retrieval / Search

0개의 댓글