[Linux] Linux 간단 정리


프로그래밍을 하다보면, 특히 서버와 관련된 직군이나 서버에서 작업을 한다면 Linux 를 많이 사용한다. Linux 에서 사용할 수 있는 명령어를 알아두면 써먹을 곳이 많다. 정리해보자.

Linux

  • 리눅스는 서버에서 자주 사용하는 OS 중 하나다. 또한 무료의 오픈소스로 여러 버전이 존재하고, 새로운 버전을 만들 수도 있다(어렵지만). 참고로 Mac OS 나 윈도우는 유료다.
  • Unix 계열로 안정성(stability), 신뢰성(reliability) 이 보장된다.
  • 쉘 커맨드나 쉘 스크립트를 동작시킬 수 있다.
    • CLI(command line interface)는 text 로 사용하고, GUI(grahpic user interface) 는 클릭으로 사용한다.
  • 리눅스 배포판은 엄청나게 많다. 따라서 개발하려는 목적에 따라서 어떤 리눅스 배포 버전이 맞을지 찾아볼 수 있다.
    • Debian : 온라인 커뮤니티에서 제작해 배포한 리눅스
    • Ubuntu : 영국의 캐노니컬이라는 회사에서 만든 배포판. 쉽고 편한 설치로 초보자들이 쉽게 접근할 수 있다.
    • Redhat : 레드햇이라는 회사에서 배포한 리눅스
    • CentOS : 레드햇이 공개한 버전을 가져와서 브랜드와 로고를 제거하고 배포한 버전
  • 보통은 ubuntu 로 처음 시작하기를 권한다.
  • 또한 리눅스, 쉘 스크립트를 학습할 때는, 처음에는 자주 사용하는 쉘 커맨드나 쉘 스크립트 위주로 학습하는 것이 좋다. 필요한 코드가 있는 경우 검색해보면 어렵지 않게 찾아볼 수 있다.
  • 배경 지식이 필요한 경우 CS 중 운영체제(OS) 를 학습해볼 수 있다.(아마도 리눅스 커널 배경지식이 필요할 수도 있다.)
  • 리눅스를 사용할 수 있는 방법은 virtualbox 에서 리눅스를 설치하거나 docker, 윈도우면 WSL 로 설치할 수 있다. notebook 에서 터미널을 통해 실행할 수 있고, vscode 에서도 터미널을 통해 실행할 수 있다.
  • OS 별로 같은 기능일지라도 명령어가 다를 수 있는데 보통은 비슷한 범주에서 이뤄진다.

Shell Command

  • 쉘 커맨드는 여러가지가 있다. 직접 타이핑 해보면서 어떤 식으로 동작하는지를 확인해보자.
  • 쉘(Shell) 이란 사용자가 문자를 입력해 컴퓨터에 명령할 수 있도록 하는 프로그램이다. 터미널 환경을 사용해서 작업을 했다면 쉘에서 동작했다고 볼 수 있다.
  • 터미널/콘솔은 쉘을 실행하기 위해 문자 입력을 받아 컴퓨터에 전달한다. 또한 프로그램의 출력을 화면에 작성한다.
  • 쉘 종류도 여러가지가 있다.
    • sh : 최초의 쉘
    • bash : Linux 표준 쉘
    • zsh : Mac 카탈리나 이후 버전부터 OS 기본 쉘
  • 쉘 UX
    • 아래 그림을 보면 username@hostname:current_folder 와 같이 나와있다.
    • hostname 은 컴퓨터 네트워크에 접속된 장치에 할당된 이름이며 IP 대신 기억하기 쉬운 글자로 저장되어 있다. 즉 host 는 내 컴퓨터를 의미한다.

      Untitled

    • 여기서 폴더를 이동하면 ~ 이 바뀌게 된다.
  • 쉘을 사용하는 경우는 아래와 같다.
    • 서버에서 접속해서 사용하는 경우
    • crontab 등 리눅스의 내장 기능을 활용하는 경우
    • 데이터 전처리를 위해 쉘 커맨드를 사용할 수 있다. 쉘 커맨드를 이용하면 좀 더 빨리 진행할 수 있고, 파일이 떨어져 있을 때 별도의 python 을 설치하지 않아도 된다.
    • docker 를 사용하는 경우
    • 수백대의 서버를 같이 관리하는 경우
    • 주피터 노트북의 cell 앞에 ! 를 붙이면 쉘 커맨드가 사용된다.
    • 터미널에서 python3, jupyter notebook 이렇게 입력한 것도 쉘 커맨드다.
    • Test code 실행
    • 배포 파이프라인를 실행

기본 명령어

  • man
    • mannual 의 약자
    • 쉘 커맨드에서 어떤 키워드에 대해서 궁금할 때, 즉 쉘 커맨드의 매뉴얼 문서를 보고싶은 경우에 사용한다.
    • man brew

      Untitled

    • :q 를 입력하면 종료된다.
    • —help 를 뒤에 붙히는 것과 비슷한 기능을 한다.
  • mkdir
    • Make Directory 준말로, 폴더를 생성하는 명령어다.
    • mkdir linux-test
  • ls
    • List Segments 의 준말로 현재 접근한 폴더 내의 파일을 확인한다.
    • ls 뒤에 아무것도 작성하지 않으면 현재 폴더를 기준으로 실행한다. 만약 폴더를 작성하면 해당 폴더 기준에서 실행한다.
    • 옵션은 아래와 같다.
      • -a : .으로 시작하는 파일, 폴더를 포함해서 전체 파일 출력 (all)
      • -l : Permission, 소유자, 만든 날짜, 용량까지 출력
      • -h : 용량을 사람이 알기 쉽도록 GB, MB 등 표현. -l 과 같이 사용
    • ex. ls ~ ls ls -al ls -lh

      Untitled

  • pwd
    • Print Working Directory 의 준말로 현재의 폴더 경로를 절대 경로로 보여준다.

      Untitled

    • 현재 이 코드가 어디서 실행되는가를 확인할 때 사용한다.

  • cd
    • Change Directory 의 준말로 폴더 변경하기, 특정 폴더로 이동하기의 기능을 한다.
    • cd linux-test
  • echo
    • Python 의 print 처럼 터미널에 텍스트를 출력한다. ex. echo “hi”
    • echo (backtick)쉘 커맨드(backtick) 을 입력 시 backtick(`) 으로 감싸진 쉘 커맨드의 결과를 출력한다.
    • 아래 그림을 보면 backtick 으로 감쌌기 때문에 문자열 pwd 로 인식하는 것이 아니라 pwd 를 쉘에서 입력하고 그 결과가 반환된다.

      Untitled

  • cp
    • 파일 또는 폴더를 복사한다.
    • cp vi-test.sh vi-test2.sh 에서 앞에 있는 파일이 뒤 이름의 파일로 복사된다.
    • 옵션은 아래와 같다.
      • -r : 디렉토리를 복사할 때 디렉토리 안에 파일이 있으면 recursive(재귀적)으로 모두 복사한다. 이 옵션을 주지 않으면 디렉토리 안에 파일이 있다고 에러를 뱉는다.
      • -f : 복사할 때 강제로 실행한다.
  • vi
    • vim 편집기로 파일을 생성한다. INSERT 모드에서만 수정할 수 있다.
    • vi vi-test.sh 와 같이 실행하면, 새로운 창이 뜨고 i 를 눌러서 INSERT 모드로 변경할 수 있다. 그 후 echo “hi” 를 작성해보자.
    • ESC 를 누른 후 :wq 를 입력하는 것은 write and quit 을 의미하며 저장하고 나가기 명령어이다.
    • 만약 ESC :wq!! 를 같이 입력하면 강제로 저장하고 나오게 된다.
    • ESC :q 는 저장하지 않고 그냥 나간다.
    • 이렇게 만들어진 .sh 파일을 sh vi-test.sh 로 실행할 수 있다.
    • vi 편집기의 Mode 는 아래와 같다.
      • command mode 는 vi 실행시 기본 모드다. 방향키를 통해 커서를 이동할 수 있다. 아래는 해당 모드에서 사용할 수 있는 명령어다.
        • dd : 현재 위치한 한 줄 삭제
        • i : INSERT 모드로 변경
        • x : 커서가 위치한 곳의 글자 1개 삭제. 5x 는 문자 5개 삭제, 7x 는 문자 7개 삭제
        • yy : 현재 줄을 복사(1 줄을 ctrl c 한 것과 같다.)
        • p : 현재 커서가 있는 줄 바로 아래에 붙여넣기
        • k : 커서 위로
        • j : 커서 아래로
        • l : 커서 오른쪽으로
        • h : 커서 왼쪽으로
        • vi 편집기로 들어가서 수정해야 하는 경우도 현업에서 종종 있다. 따라서 이 커맨드 모드에 대해서 알게 되면 좋다.
      • insert mode 는 문자를 추가하거나 입력할 수 있는 모드다. 즉 파일을 수정할 수 있는 모드다.
        • INSERT 모드 상태에서 커맨드 모드로 이동하고 싶다면 ESC 를 입력하면 된다.
      • last line mode
        • ESC 를 누른 후 콜론(:) 을 누르면 나오는 모드다. 아래의 명령어를 입력할 수 있다.
        • w : 현재 파일명으로 저장
        • q : vi 종료 (저장되지 않음)
        • q! : vi 강제 종료 (! 는 강제를 의미)
        • wq : 저장후 종료
        • /문자 : 문자 탐색 → 탐색한 후 n 을 누르면 계속 탐색 실행
        • set nu : vi 라인 번호 출력

      Untitled

  • bash
    • 쉘 스크립트(.sh)를 실행하는 명령어다. 그냥 sh 도 가능하지만 bash 쉘로 실행하는 차이가 있다.
    • bash vi-test.sh
    • 앞에서 작성한 “hi” 가 출력된다.

      Untitled

    • 참고로 터미널에서 Tab 을 누르면 자동완성된다. 그러나 지원하지 않는 쉘도 존재한다. zsh 나 bash 는 지원한다.
  • sudo
    • 관리자 권한으로 실행하고 싶은 경우 커맨드 앞에 sudo 를 붙이면 된다.
    • sudo 명령어 는 최고 권한을 가진 슈퍼 유저로 프로그램을 실행하는 것이다.
    • superuser do 에서 유래했지만 최근에는 substitute user do (다른 사용자의 권한으로 실행) 의 줄임말로 해석한다.
    • 이 때 문제점은 sudo rm-rf / 와 같이 root 를 모두 삭제하겠다는 명령어가 무의식적으로 실행될 수도 있다는 점이다. 따라서 sudo 는 함부로 사용하면 안된다. 특히 삭제를 의미하는 rm 과 같은 명령어랑 같이 쓸 때는 매우 주의해야 한다.
  • mv
    • Move 를 뜻하며 파일, 폴더 이동 명령어다. 또는 이름을 바꿀 때도 활용한다.
    • mv vi-test.sh vi-test3.sh
    • 앞에 이름에서 뒤의 이름으로 변경된다.
  • cat
    • concatenate 를 뜻하며 특정 파일의 내용을 출력한다.
    • cat vi-test.sh
    • cat vi-test2.sh vi-test3.sh 처럼 특정 파일의 내용 출력을 넘어서 여러 파일을 인자로 주면 합쳐서(CONCAT) 출력한다.
    • 또한 여러 합쳐진 파일을 덮어쓰기로 새로운 파일에 저장하고(OVERWRITE, >) 싶은 경우에는 cat vi-test2.sh vi-test3.sh > new_test.sh 이와 같이 사용할 수 있다.
    • 파일에 추가(APPEND) 하고 싶은 경우는 cat vi-test.sh vi-test3.sh >> new_test.sh 로 할 수 있다. 만약 존재하지 않는 파일에 APPEND(>>) 하면 새로 파일이 생김.
    • >>> 를 헷갈리면 또 큰일날 수 있다. 덮어쓰기가 될 수 있기 때문이다.
  • clear
    • 터미널 창을 깨끗하게 만든다.
  • history
    • 최근에 입력한 쉘 커맨드 history 를 출력한다.
    • history 결과에서 느낌표를 붙이고 숫자를 입력하면, 그 커맨드를 다시 활용할 수 있다. 즉 긴 명령어인 경우 다시 커맨드를 칠 필요가 없다는 것이다.
  • find
    • 파일 및 디렉토리를 검색할 때 사용한다.
    • find . -name “File” 는 현재 폴더(.) 에서 File 이란 이름을 가지는 파일 및 디렉토리 검색한다.
    • 어떤 파일이 있는지 확인하고 싶을 때 GUI 에서 검색하는데, 서버에서 검색한다면 find 명령어 혹은 grep 명령어를 사용하면 편하다.
  • export
    • 환경 변수를 설정하는 명령어다. export water=”물” 와 같이 입력하고 echo $water 를 입력하면 “물” 이 나온다.

      Untitled

    • 쉘에서 띄어쓰기는 쓰지 않는다. 즉 붙여서 써야 한다.
    • export 로 환경 변수를 설정한 경우, 터미널이 꺼지면 사라지게 된다. 만약 매번 쉘을 실행할 때마다 사용할 수 있는 환경 변수를 저장하고 싶으면 사용하는 쉘에 따라 .bashrc 또는 .zshrc 에 저장하면 된다.
    • Linux 에서는 vi ~/.bashrc 또는 vi ~/.zshrc 로 vim 편집기를 켜 환경 변수를 입력하고 저장한다. 즉 제일 하단에 export water=”물” 을 입력하고 ESC + :wq 로 저장할 수 있다.
    • 그 후 최초에는 source ~/.bashrc 또는 source ~/.zshrc 를 통해 Linux 환경 설정을 재로그인하지 않고 즉시 적용하고 싶은 경우 source 사용한다.
    • 터미널, 쉘을 닫은 후에 다시 켜도 ~/.bashrc 또는 ~/.zshrc 가 실행되기 때문에 export 를 기억한다. 말하자면 source 로 설정파일에 넣는 것이다.
  • alias
    • 터미널에서 alias 라고 치면 현재 별칭으로 설정된 것을 볼 수 있다.

      Untitled

    • alias 는 기본 명령어를 간단히 줄일 수 있는 기능을 한다. 예시로, llls -l 의 별칭으로 지정되어 있다.
    • alias ll2=”ls -l” 하면 alias 가 설정된다. 즉 ll2 를 입력하면 ls -l 이 동작되는 것으로, 잘 활용하면 효율적인 퍼포먼스가 가능하다.
  • 여기까지 커맨드들은 일반적인 커맨드들이다. 일상처럼 사용할 수 있도록 연습하면 좋다! 이후 아래의 명령어들은 선택적이지만 아는 것이 현업에서 전제되어 있다.
  • tree
    • Linux 의 특정 버전에서는 설치가 안되어 있을 수 있다.
    • tree 를 설치하면 좋은 점은 폴더의 하위 구조를 계층적으로 표현해준다. 이는 프로젝트를 소개할 때 구조를 설명하기에 유용하다.
    • tree -L 레벨
      • tree -L 1 : 1단계까지 보여주기
      • tree -L 2 : 2단계까지 보여주기
    • tree -o “file name” 하면 stdout 이 아니라 파일로 저장된다.
      • stdout 은 표준 출력으로, stdin, stdout, stderr 에 대해 잘 정리된 이 글을 참고하자.
  • head, tail
    • 파일의 앞/뒤 n 행을 출력한다.
    • head -n 3 vi-test.sh
    • cat 의 단점은 전체를 프린트해서 보여준다는 점이다. 즉 엄청 긴 파일이 있으면 문제된다.
    • 그럴 때는 앞에 몇 개만 확인하고 싶을 수 있는데, 그럴 때 head 혹은 tail 을 쓴다.
  • sort
    • 행 단위로 정렬하는 명령어다. 옵션은 아래와 같다.
    • -r : 정렬을 내림차순으로 정렬(Default 옵션 : 오름차순)
    • -n : Numeric Sort
    • 아래와 같이 vi fruits.txt:wq 로 저장하고 입력해보자.

      Untitled

    • cat fruits.txt | sortcat fruits.txt | sort -r 와 같이 사용할 수 있다.
  • uniq
    • 중복된 행이 연속으로 있는 경우 중복을 제거한다. 보통 sort 와 함께 사용한다. 왜냐하면 “연속”으로 있어야 하기 때문에 그냥 쓰면 중복 제거가 안되고 정렬 후 중복을 제거해야 하기 때문이다.
    • -c 옵션은 중복 행의 개수를 출력한다.
    • cat fruits.txt | uniq 는 연속으로 있는 경우에만 중복이 제거 되기 때문에 진정한 중복 제거가 안된다.
    • cat fruits.txt | sort | uniq 와 같이 sort 를 파이프(|) 와 함께 주고 uniq 를 주면 중복이 제거된다.

      Untitled

    • 중복을 제거했을 때 몇 개가 나오는지를 보기 위해 cat fruits.txt | uniq | wc -l 와 같이 입력할 수 있다. wc -l 은 라인이 몇 개 있는지 카운트 하는 명령어다.
    • cat fruits. txt | sort | uniq | wc -l 와 같이 입력하면 아래와 같다.

      Untitled

  • grep
    • 파일에 주어진 패턴 목록과 매칭되는 라인을 검색하는 명령어다. 파일 안에 무엇이 있는지 확인하고 싶을 때 사용한다.
    • 또한 ls, find 등과 같이 stdout 을 대상으로도 사용할 수 있다. 즉, grep 은 정말 많이 사용하는 명령어다.
    • 또한 grep 은 뒤에서 나올 pipe (|) 와 같이 많이 사용한다.
    • grep 옵션 패턴 파일명 과 같은 형태로 사용한다. 옵션은 아래와 같다.
      • -i : insensitively 하게, 대소문자 구별 없이 찾기
      • -w : 정확히 그 단어만 찾기
      • -v : 특정 패턴 제외한 결과 출력
      • -E : 정규 표현식 사용
    • 정규 표현식 패턴
      • ^단어 : 단어로 시작하는 것 찾기
      • 단어$ : 단어로 끝나는 것 찾기
      • . : 하나의 문자 매칭

      Untitled

  • cut
    • 파일에서 특정 필드를 추출한다. csv 파일은 쉼표 단위로 파일이 나타나는데, 이것을 잘라내고 싶을 때 사용할 수 있다.
    • 옵션은 아래와 같다.
      • -f : 잘라낼 필드 지정
      • -d : 필드를 구분하는 구분자. Default는 ₩t (탭)
    • cat cut_file | cut -d : -f 1,7

      Untitled

  • 표준 스트림(stream)
    • unix 에서 동작하는 프로그램은 커맨드 실행 시 3 개의 stream 이 생성된다.
    • stdin : 0 으로 표현. 입력(비밀번호, 커맨드 등)
    • stdout : 1 로 표현. 출력 값(터미널에 나오는 값)
    • stderr : 2 로 표현. 디버깅 정보나 에러 출력

      Untitled

  • Redirection
    • 프로그램의 출력(stdout)을 다른 파일이나 스트림으로 전달하는 것을 의미한다.
    • > 는 덮어쓰기(Overwrite)를 의미한다. 파일이 없으면 생성하고 저장하게 된다.
    • >> 는 맨 아래에 추가하기(Append)를 의미한다.
    • echo “hi” > vi-test3.sh
    • echo “hello” >> vi-test3.sh
  • Pipe(|)
    • 프로그램의 출력(stdout)을 다른 프로그램의 입력으로 사용하고 싶은 경우에 사용한다.
    • A 의 output 을 B 의 input 으로 사용하는 것처럼, 파이프를 이용해서 다양한 커맨드 조합이 가능하다.
    • 현재 폴더에 있는 파일 명 중 vi 가 들어간 단어를 찾고 싶은 경우는 ls | grep “vi” 와 같이 입력할 수 있다. 즉 grep “vi” 으로 vi 와 같은 특정 단어를 찾는 것이다.
    • 찾은 결과를 ouput.txt 에 저장하고 싶은 경우는 ls | grep “vi” > ouput.txt 와 같이 입력할 수 있다.
    • 최근 입력한 커맨드 중 echo 가 들어간 명령어를 찾고 싶은 경우는 history | grep “echo” 로 찾을 수 있다. 이후 !숫자 를 입력하면 그 커맨드를 또 사용 가능하다.

서버에서 자주 사용하는 쉘 커맨드

  • ps
    • Process Status 의 준말로 현재 실행되고 있는 프로세스를 출력한다.
    • 자주 사용하는 옵션은 아래와 같다.
      • -e : 모든 프로세스
      • -f : Full Format 으로 자세히 보여준다.
      • ps -ef 와 같이 옵션을 붙여 쓴다.
    • 출력 중 PID 는 process id 를 뜻한다.
  • curl
    • Client URL 의 준말로 command line 기반의 data transfer 커맨드다.
    • request 를 테스트할 수 있는 명령어다. 즉 웹 서버를 작성한 후 요청이 제대로 실행되는지 확인할 수 있다.
    • curl -X localhost:5000/ {data} 와 같이 입력하면 localhost:5000 에서 반응이 올 것이다.
    • 이 테스트를 통해서 어떤 request 에서 어떤 response 가 오는지를 확인할 수 있다.
    • curl 외에 더 가독성있게 출력되는 httpie 도 있다. 회사에서는 서버에 쉘 커맨드로 요청을 날리고 싶을 때 Postman 이라는 것도 활용한다.
  • df
    • Disk Free 의 준말로 현재 사용중인 디스크 용량을 확인하는 명령어다.
    • -h 옵션을 통해 아래와 같이 사람이 읽기 쉬운 형태로 출력할 수 있다.

      Untitled

  • scp
    • Secure Copy 의 준말로 SSH 를 이용해 네트워크로 연결된 호스트 간 파일을 주고 받는 명령어다. 즉 remote file copy program 이다.
    • 옵션은 아래와 같다.
      • -r : 재귀적으로 복사
      • -P : ssh 포트 지정
      • -i : SSH 설정을 활용해서 실행
    • 만약 local 에서 remote 로 파일을 보낼 때는 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 은 프로그램을 데몬의 형태로 실행시키는 것이기 때문에 로그아웃으로 세션이 종료되더라도 프로그램이 종료되지 않는다.
      • 그러나 & 실행은 단지 프로그램을 사용자 눈에 보이지 않는 백그라운드 형태로 돌리고 있는 것이기 때문에 로그아웃으로 세션과 연결이 끊어지면 실행되고 있던 프로그램도 함께 종료된다.
      • 언젠가부터 & 로 돌리더라도 nohup 과 동일하게 세션이 끊어져도 프로그램이 종료되지 않는 옵션이 디폴트로 적용되었기 때문에, 두 명령어의 동작이 유사하게 보인다. 만약 어떤 프로그램을 종료 없이 백그라운드에서 실행시키고 싶다면 그냥 위와 같이 조합해서 쓰는게 제일 확실하고 안전한 방법이다.
    • 주의할 점은 nohup 으로 실행될 파일은 Permission 이 755 여야 한다.
      • 755 에 대해서는 아래의 chmod 를 참고하자.
    • 종료는 ps ef | grep app.py 를 통해 PID(process ID)를 찾은 후 kill -9 PID 로 프로세스를 kill 해줘야 한다.
    • 로그는 nohup 을 실행시킨 경로에 nohup.out 에 저장된다. nohup 외에 screen 이란 도구도 있다.
      • 만약 nohup 의 표준출력을 다른 파일에 쓰고 싶다면 nohup python3 app.py > nohup_script.out & 과 같이 Redirection 을 통해 가능하다.
      • 표준출력(1)과 표준에러(2)를 다른 파일에 쓰고 싶다면, nohup python3 app.py 1 > nohup_script.out 2 > nohup_script.err & 를 실행시키면 된다.
  • chmod
    • Change mode 의 준말로 파일의 권한(Permission)을 변경하는 경우 사용한다. Unix 에서 파일이나 디렉토리의 시스템 모드를 변경하는데 사용하기도 한다.
    • ls -al (혹은 ll) 을 입력하면 아래와 같이 나온다.

      Untitled

    • 여기서 맨 왼쪽이 Permission 에 해당한다.
      • r = Read(읽기), 4
      • w = Write(쓰기), 2
      • x = eXecute(실행하기), 1
      • - = Denied
      • r-x : 읽거나 실행할 수는 있지만 수정은 불가능

      Untitled

    • 만약 “755, 644 로 퍼미션 주세요” 라고 하는 경우는 어떻게 되는걸까?
      • rwx 를 다 더하면 7 이 나온다.
      • 그리고 위 그림을 보면 rw-rw-r—- 은 3 개씩 나뉜다. 맨 앞의 rw- 가 소유자, 두번째 rw- 가 그룹 사용자, r—- 이 기타 사용자를 의미한다.
    • chmod 755 vi-test2.sh 를 실행하면 파일의 Permission 이 755 로 변경된다.
    • 파일과 폴더의 permission 은 사용하다 보면 필요한 경우가 많다. 잘 알아두자.

쉘 스크립트

  • 쉘 스크립트는 .sh 파일을 생성하고, 그 안에 쉘 커맨드를 추가하여 생성할 수 있다.
  • Python 처럼 if, while, case 문이 존재하고, 작성 시 bash name.sh 혹은 sh name.sh 로 실행 가능하다. 즉 쉘 스크립트는 쉘 커맨드의 조합이다.
  • 쉘 커맨드에 익숙해진 후 스크립트로 생성하면 편해지는 점이 많다. 백그라운드로 모델 학습을 돌리거나, 데이터 전처리를 진행할 수 있다.
  • 쉘 스크립트 예시는 아래와 같다. 맨 위에 #!/bin/bash 와 같은 SheBang(#!) 이 추가된다. 이 스크립트를 Bash 쉘로 해석하겠다는 것을 의미한다.
    • 즉 SheBang(#!) 문법은 스크립트 파일에서 어떤 프로그램으로 해당 파일을 실행시킬 지 결정한다. #!/usr/bin/env 를 사용하면 인터프리터의 절대 경로를 지정하지 않아도 알아서 경로를 찾아주기 때문에 여러 시스템 환경에서 사용할 때 유용하다.

      Untitled

  • $(date + %s)data%s(unix timestamp) 로 변형하는 쉘 커맨드다.
  • START=$(date+%s) 는 변수를 저장하는 커맨드다. 즉 변수 저장에는 = 이 사용된다.
맨 위로 이동 ↑

댓글 남기기