CLI Commands

개요

개인적으로 개발을 진행했을 때 CLI라는 용어를 많이 듣게 되고, 클라우드 플랫폼(e.g. AWS) 공식문서에서 CLI에서 어떤 입력을 통해 어떤 작업을 수행할 수 있다는 것을 상세하게 설명한 것을 보았습니다.

그리고, git push origin main git add . 등을 통해 CLI라는 용어를 몰랐더라도 그동안 자연스럽게 CLI를 사용했던 나를 발견할 수 있습니다.

수학을 공부할 때 본격적으로 수학을 학습하기 이전에 이해하기 위해 필요한 숫자를 학습하는 것처럼, 개발을 공부할 때 shell에 대한 내용에 대해 학습하면 좋을 것 같아 학습한 내용을 정리해보려고 합니다. 개인적으로 학습한 내용을 기반으로 작성된 것이기 때문에 잘못된 내용이 있거나 개선해야 될 점등을 말씀해주시면 참고하고 수정하겠습니다.

용어

CLI

Command Line Interface (명령줄 기반 인터페이스)

CLI란 Command Line(명령줄) 기반으로 명령을 내리고, 응답을 받는다는 의미입니다. 대표적으로 위의 이미지와 같이 윈도우에서 명령프롬프트가 있습니다.

GUI

Grapic User Interface

GUI는 Grapic User Interface의 줄임말이고, 마우스와 같은 그래픽 요소를 이용해서 명령을 내리고 응답을 받는다는 의미입니다. 대표적으로 위의 이미지와 같이 윈도우에서의 탐색기가 있습니다.

알아두면 좋은 용어

  • delete: 삭제라고 부르며, 물리적인 삭제를 의미합니다.
  • remove: 제거라고 부르며, 논리적인 삭제를 의미합니다(실제 하드디스크에는 존재하지만, 접근할수 있는 주소를 차단하여 없는 것처럼 동작합니다. 이후 하드디스크에서 큰 용량의 파일을 저장해야 되는 등의 상황이 올 때 해당 공간에 다른 값이 할당될 수 있습니다. 즉 덮여쓰기 될 수 있습니다)

Commands

shell

개발 공부를 학습할 때 주로 unix-like 명령어를 접하고, 최근에는 윈도우에서도 관련된 명령어를 사용할 수 있도록 지원해주기 때문에 여기에서는 unix-like shell 기반을 기준으로 설명하겠습니다.

  • ~

    Tilde

    틸드(물결표시)라고 부르며, shell에서는 최상위 디렉토리(유저 디렉토리)를 의미합니다.

  • /

    Delimiter

    슬래시라고 부르며, shell에서는 디렉토리(경로)를 구분하기 위해 사용합니다.

  • $
    현재 shell에서 입력을 받을 준비가 되었다는 의미입니다.

  • *
    별표(asterisk, 에스터리스크)라고 부르며, shell에서는 '모든'이라는 의미로 사용됩니다.

위를 종합하면 shell에서 command line의 왼쪽에 보이는 devryan@ubuntu-bionic:~$ 은 " 내가 사용하고 있는 서버이름(컴퓨터 이름)ubuntu-bionic이고 유저이름devryan이다. 그리고, 현재 경로해당 서버(컴퓨터)의 최상단(유저)디렉토리이며, 입력을 받을 준비가 되어있다($) "라는 의미입니다.

Shell Commands

  • pwd

    Print Working Directory

    현재 경로를 절대경로로 보여줍니다.

  • ls

    List Segment

    • 지금 위치(경로)에서 하위로 접근할 수 있는 디렉토리나 파일을 리스트로 출력해 줍니다.
    • shell에서 디렉토리 단위에서의 . 은 현재 디렉토리, .. 은 상위디렉토리를 의미합니다.
  • cd

    Change Directory

    directory 단위로 경로를 변경할 수 있습니다. ( cd .. 상위 디렉토리로 이동)

  • mkdir

    Make Directory

    새 폴더를 생성합니다.

  • touch
    파일을 생성합니다.

  • mv

    move

    • command
      $ mv {이동할 파일경로} {이동시킬 파일경로}
      ( $ mv ../style.css . )
    • 기능
      • 파일을 이동시킵니다.
      • 이름을 변경합니다.
        mv app.js main.js mv 내부적인 동작으로 인해 이동 시키는 기능 뿐 아니라 app.js를 main.js라는 이름으로 변경이 가능합니다.
  • cp

    copy

    • command
      cp {원본 파일경로} {복사할 파일경로}
      ( cp app.js ../ )
    • 기능
      • 파일을 복사합니다(사본 생성).
      • 이름을 지정하지 않을 경우 원본파일의 이름을 그대로 사용합니다.
  • rm

    remove

    • command
      rm {파일경로}
    • 기능
      • 파일을 제거합니다
      • 별도의 옵션(플래그)없이 파일이 아닌 디렉토리(폴더)를 삭제하려고 하면 에러가 발생합니다. (파일은 실제로 존재하지만, 디렉토리는 논리적으로 존재하기 때문입니다)
      • *를 활용하면 조건에 맞는 파일을 매치해서 삭제할 수도 있습니다.
        ( rm server.* 현재 경로에서 server라는 이름을 가진 모든 파일을 지움 )
    • 옵션
      • -r

        recursive

        • command
          rm -r {디렉토리 이름}
        • 디렉토리를 삭제하기 위한 옵션입니다.
        • 재귀적으로 순회하면서 타겟이 되는 디렉토리 하위의 모든 디렉토리, 파일들을 지우고, 이후 타겟이 되는 디렉토리도 지웁니다.
      • -rf
        • command
          rm -rf
        • -r 만으로도 충분히 동작하지만, -r에서 지울 때 경우에 따라 지울지 물어보고 진행할수 있으며, 물어보지 않고 강제로 모두 삭제하기를 원할 때 -rf 를 사용합니다.
  • cat

    • command
      cat {파일 경로}

  • 텍스트 라인을 병합해서 화면에 출력합니다.
  • shell에서 파일의 텍스트(소스코드)가 올바르게 작성되었는지 확인하고자 할 때 사용할 수도 있습니다.

Vim commands

  • vim은 CLI에서 사용할 수 있는 대표적인 텍스트 에디터이며, 소스코드 작성으로도 활용할 수 있습니다.

  • mode를 기반으로 동작합니다.
    그래서, 해당 기능을 사용하기 위해서는 해당하는 mode로 진입 후 사용해야 합니다.

  • commands

    • vi {파일 경로}
      해당 파일을 vim으로 open합니다.

    • vim 에디터

      • esc

        escape

        normal 모드로 진입합니다.

      • normal 모드

        • :
          • command 모드로 진입합니다.
          • 하단에 표시되는 : 를 통해 command모드에 진입한 것을 확인할 수 있습니다.
        • i

          insert

          • 수정 모드로 진입합니다.
          • 하단에 표시되는 -- INSERT -- 를 통해 insert 모드에 진입한 것을 확인할 수 있습니다.
      • command 모드

        • w
          작성한 내용을 저장합니다.
        • wq
          작성한 내용을 저장하고 나갑니다(shell로 복귀).
        • q!
          내용을 저장하지 않고 처음 상태를 유지합니다(override).
profile
$ npm run dev:ryan

0개의 댓글