본문 바로가기
Code/개발지식

CLI(Command Line Interface)에 대하여

by 코드포휴먼 2019. 8. 14.

 Command Line Interface(이하 CLI)는 Graphic User Interface(이하 GUI)와는 다르게, 마우스와 각종 UI 컴포넌트 대신, 표준 입출력 시스템(Standard I/O)을 통한 입력과 그에 따른 결과를 출력하는 형태로 나타난다. 컴퓨터의 시작은 GUI가 아닌 CLI였으며, 시대를 거쳐서 우리는 마우스, 터치들을 이용한 직관적인 프로그램의 형태를 만날 수 있었다.


 그러나 여전히 CLI는 여러가지 측면에서 유리하고, 개발자라면 반드시 배워야 할 주요 스킬이다. 강력하고 빠른 배치 작업들을 수행할 수 있으며, 컴퓨터, 특히 Unix/Linux 시스템을 깊이 알기 위해서는 많은 부분을 CLI를 이용해 탐색하면서 그 작동원리 등을 파악할 수 있다. 

※ Unix란 C언어로 작성된 운영체제 중 하나로, 시분할 시스템을 위해 설계된 대화식 운영체제다. 소스가 공개된 개방형 시스템(Open System)으로 구조가 공개돼있고 라이센스 비용이 저렴하여, 제품 공급업자가 많다. C언어로 작성되어 있기 때문에 이식성이 높으며 장치, 프로세스 간의 호환성이 높다. 

 

 한편 프로그래밍에 있어서, 파일 내용의 변경은 너무나도 자주 발생하는 일이다. 코드의 잘못된 부분을 고치고 변경하다보면, 이전에 작성한 내용들을 보존해야할 필요를 느끼게 된다. 이러한 일을 해결해 주는 것이 바로 버전 관리 시스템이다.

 

 따라서 가장 많이 쓰이고 강력한 도구인 git을 배운다면 프로그래밍에 있어서의 버전 관리와 협업의 기본을 배울 수 있다. 이를 통해 실제 회사 등에서 진행하게 될 실무에서의 일을 배우게 되며, 더 나아가 앞으로  Open Source 생태계에 기여할 수 있는 멋진 개발자가 될 수 있을 것이다.

 

 CLI는 빠르고 강력하다. GUI로는 마우스로 여러번 왔다갔다 클릭해서 실행해야 하는 반면에, CLI로는 명령어 몇줄로도 여러작업을 할 수 있다. 또한 접근성이 좋다. 예를 들어 원격의 서버에 접근하고 싶을 때 마치 내 컴퓨터인 것처럼 이용할 수 있다. 

 

 

WHY *NIX (LINUX/UNIX)?

 실제로 서버시장에서의 *nix 점유율이 매우 높다. AWS 및 Azure 등에서 제공하는 서버는 대부분 *nix 계열이다.

 그리고 Open Source이기 때문에 비용적 측면에서 유리하다. 

 

 


Useful Commands

 유용한 명령어들을 적어본다. 

 Windows에서는 git bash를 이용하면 리눅스 명령어를 윈도우즈 상에서도 연습할 수 있다. (다운로드 필요)

 

 

 ls : list. 홈디렉토리라고 부르는 사용자 폴더에 있는 목록을 확인할 수 있다. 

코드스테이츠 학습자료 화면
code4human의 git bash화면


 ls -al : ls에서도 옵션을 줘서 디테일한 정보를 볼 수 있다. 

          ls -al을 사용하면 숨김파일까지 확인할 수 있다. 파일크기, 소유자, 언제 생성됐는지 나온다. 

          (1) 접근 권한(읽기/쓰기/실행 가능) 여부
              chmod명령어와 관련돼있다
              ※chmod : 파일의 사용 허가(권한)를 지정하는 명령어. 

                즉 파일의 권한모드(읽기,쓰기,실행)을 설정하여 파일접근을 제한한다. 
          (2) 링크된 파일 갯수
          (3) 소유자
          (4) 소유그룹
          (5) 파일크기
          (6) 만든 날짜
          (7) 만든 시간
          (8) 파일/디렉토리 이름

 


 cd : change directory. 디렉토리로 이동.  
 pwd : 현재 디렉토리 확인

 

 cd ~ : 홈 디렉토리 (현재 사용자의 개인화 파일들이 있는 디렉토리)

 

 cd / : 루트 디렉토리 (시스템의 최상위 디렉토리)

         다음 라인이 /$ 로 바뀌면서 루트인 것을 표시해준다.

          pwd를 쳐보면 상위폴더가 없음을 알 수 있다.

 

 cd . : 현재 디렉토리

 

 cd .. : 부모 디렉토리

 


 clear : 지저분해진 콘솔을 깨끗하게 reset한다.

 

 \ 혹은 Tab : 파일이나 폴더 이름에 공백이 있는 경우에 사용한다.

                   

                   아래와 같이 Empty Documents라는 폴더를 새로 만들어보았다. 

                   그러나 cd Empty Documents를 하면 오류가 뜬다.

 

오류명 No such file or directory

                   

                   띄어쓰기가 시작되기 전에 \(역슬래시)를 넣어주면 이동할 수 있다.

             

                    혹은 띄어쓰기가 시작되기 전에 Tab버튼을 눌러주면 자동으로 남은 디렉토리명이 입력된다.

                    (Tab키는 이름이 긴 폴더를 자동완성 입력하기에도 용이하다.)

 


 touch [file_name] : 빈 파일 생성

 

 mkdir [dir_name] : 디렉토리 생성

 

 mv [file_or_dir] [target_dir] : 파일 및 디렉토리 옮기기


 mv [file_or_dir] [new_name] : 파일 및 디렉토리 이름 바꾸기

                                       여기서, mv newdir/newfile.txt newname.txt로 바꿔버리면 

                                       기존의 Empty Documents>newdir폴더에 있는 newfile.txt파일은 사라지고

                                       Empty Documents폴더에 newname.txt가 생성된다.

newname.txt가 Empty Document폴더에 생성됨

 


 code [file] : 파일 수정

                 명령어를 입력하면 편집기(필자의 경우 vscode)가 오픈된다. 

파일을 수정한 뒤 저장한다

 

 

 cat [file] : 텍스트 형태의 파일 확인

 


 cp [file] [target_dir] : 파일복사

홈디렉토리의 Downloads폴더로 복사

 

                             복사된 파일을 cat으로 표시해보면 원본과 동일한 내용이다. 

 

 

 cp -r [dir] : 폴더복사

 

 rm [file] : 파일삭제  

              rm명령어는 정말 삭제할 것인지 확인하지 않으며, 심지어 한번 삭제된 파일은 휴지통에 들어가지 않는다.

 rm -r [dir] : 폴더삭제

 


 sudo : super user do. 관리자 권한으로 실행할 때 입력

 

          예를 들어 패스워드가 담긴 파일(관리자만 읽을 수 있는 파일)을 읽고 싶을 때 cat명령어로 표시한다.

          그러면 패스워드를 물어보고 그 후 내용이 출력된다.

코드스테이츠 학습자료 화면

           

          한편 새로운 프로그램을 설치하려고 할 때 패키지 매니저(Package Manager)를 이용하게 된다.

          예를 들어 Ubuntu Linux에서는 apt라는 유명한 패키지 매니저가 있다.

          새로운 프로그램을 설치할 때에도 관리자 권한을 요구하기 때문에 

         sudo명령어와 같이 install명령어를 쳐줘야 프로그램들이 설치과정을 진행한다. 

 

          그러나 sudo가 권한 문제를 해결하는 솔루션이 아니다. 

          필요에 따라 현명하게 사용하되 최소한으로 사용하는 것이 좋고, 가능한 user권한으로 해결할 수 있어야 한다. 

           sudo는 매번 패스워드를 입력하는 게 아니라 한번만 인증하면 그 이후는 생략한다.

 

           ls -al명령어로 폴더의 목록을 확인할 수 있었다.

 

           sudo를 이용해서 관리자 권한으로 testfile.txt를 만들어보겠다.(암호를 물어본 뒤 생성을 해준다) 

           이때 파일 소유자는 관리자 root가 된다. 

           이렇게 되면 code testfile.txt 명령으로 파일을 수정할 수 없다.('Retry as Admin'이라는 오류창 뜬다) 

 

 

 chown owner:group [file] : 소유자 변경

                                     이 경우엔 파일 소유자를 바꿔봄으로써 문제를 해결할 수 있다.

                                     확인해보면 testfile.txt의 소유자가 myuser가 되었다.

myuser : 코드스테이츠 학습자료 상의 user이름

                                     소유자를 관리자root에서 사용자myuser로 변경함에 따라

                                     파일을 수정하고 cat명령어로 표시까지 할 수 있다.

 

 


<GUI 프로그램의 실행을 더 간편하게 이용할 수 있는 명령어들>

 

code . : 폴더 수정

            code [file] 명령은 파일단위로 편집기가 오픈되지만 code . 명령은 폴더단위로 오픈된다.

 

 

explorer . : 현재 폴더를 Windows 파일 관리자에서 보기

                현재 폴더 기준으로 파일 관리자가 뜬다.

 


<자주 사용하는 CLI 프로그램>


1. 버전 관리 시스템 git

https://git-scm.com/

(mac에서는 git을 바로 사용할 수 있지만 Windows는 다운로드가 필요) 


2. Package Manager (프로그램 추가/삭제)
- Ubuntu : apt  https://help.ubuntu.com/lts/serverguide/apt.html
- macOS : Homebrew  https://brew.sh/index_ko
- Windows : chocolatey  https://chocolatey.org/

3. 텍스트 에디터 vim

https://www.vim.org/

GUI를 전혀 이용할 수 없는 환경(ex. 서버관리자의 경우 원격에 있는 서버)에서 작업을 하게 된다면 텍스트파일을 서버 상에서 수정해야될 일이 생길 때가 있다. 그럴 때 유용한 것이 텍스트 에디터 vim이다. 특정 에디터를 열지 않고도 command line에서도 파일을 수정할 수 있다.

 

4. 클라우드 서비스 관리 CLI

https://aws.amazon.com/ko/cli/
클라우드 서비스를 이용할 때도 CLI를 제공하는 경우가 많다. (ex. AWS CLI) 

댓글