Linux CLI

개발빼-엠·2021년 4월 14일
0

Linux

목록 보기
1/4
post-thumbnail

CLI (Command-Line Interface)

-CLI에 대하여
-기본적인 명령어
-절대경로와 상대경로
-관리자 권한
-npm & package.json
-추가 정보 (ls -l 입력시 와 r,f에 대하여, cat, help 옵션)

- CLI에 대하여

컴퓨터를 조작하기 위해서는 다양한 입력(input)과 출력(output)이 필요합니다.

  • 마우스,키보드,카메라 등 컴퓨터를 조작하기 위해 입력 하는 것
    = 입력소스(input source)
  • 모니터로 화면을 나타내거나 스피커로 소리전달 등으로 출력하는 것
    = 출력소스(outputsource)
  • 컴퓨터를 조작하기 위해 입력과 출력을 간단하게 I/O(input/output)라고 표기하며, '아이오' 라고 읽습니다.

리눅스의 '터미널'은 키보드의 입력과 모니터의 출력으로 모든 작업을 할 수 있습니다.
GUI(graphical user interface)가 개발되기 이전부터 컴퓨터를 조작하기 위해 사용되었기 때문에 GUI로 할 수 있는 건 CLI도 할 수 있습니다.

CLI는 GUI보다 여러가지 측면에서 유리합니다.
대량의 서버 컴퓨터를 설치해야 하는 서비스같은 경우 4천 평이 넘는 규모의 데이터센터를 29개 이상 가지고 있고, 계속해서 확장하고 하나의 데이터 센터에는 최소 5만개 이상의 서버 컴퓨터가 설치가 되어있다면 수많은 컴퓨터에 GUI를 적용하기 위해 서버 컴퓨터마다 I/O 소스(키보드, 마우스, 모니터 등)를 부착하는 일은 불가능에 가깝기 때문입니다.
CLI를 이용해 서버 컴퓨터로 접속을 요청하면, 서버 컴퓨터는 요청한 컴퓨터의 출력소스(모니터)를 이용해 서버 컴퓨터에 직접 찾아갈 필요없이, 자신의 모니터로 서버 컴퓨터와 소통한다면 이 방법은 매우 효율적입니다.

-기본적인 명령어

명령어를 알아보기 전 '터미널'을 실행해야 합니다.
스포트라이트(command+space)를 이용해 'Terminal'을 검색해 실행시키거나, 독바의 런치패드에서 'Terminal'을 검색해 실행시켜줍니다.

CLI는 입력하는 글자와 출력되는 글자로 컴퓨터와 소통할 수 있습니다. 컴퓨터가 출력하는 글자를 읽을 수 있어야 합니다. 무슨 뜻인지 모르더라도 읽어야 다음스텝이 가능하므로 기억하고 읽어야합니다.

키보드의 입력을 확인하고 편집할 수 있는 한 줄의 공간을 '프롬프트(Prompt)' 라고 합니다. 터미널에서 입력하는 CLI의 명령줄 대기모드 입니다.

이제 기본적인 명령어를 알아보도록 하겠습니다.

  • pwd(print working directory) : 현재 위치 확인하기
    여기서의 directory는 폴더라고도 합니다.
    CLI에서 폴더를 열거나 닫으면서 이동하면, 현재 위치가 헷갈릴때 이 명령어를 입력하고 엔터를 누르면 컴퓨터는 현재 작업중인 폴더의 위치를 출력합니다.
ex)
pwd
/Users/User-name/Downloads // 이런식의 경로가 출력됩니다.
  • mkdir(make directories) : 새로운 폴더 생성하기
    CLI에서는 명령어와 폴더의 이름을 스페이스로 구분합니다.
ex)
mkdir 폴더이름
  • ls(list) : 특정 폴더에 포함된 파일이나 폴더 확인하기
    mkdir 명령어를 사용해 생성된 폴더를 확인하기 위해서는, 현재 폴더에 포함된 파일이나 폴더의 이름을 출력하는 명령어가 필요합니다.
    ls의 옵션으로는 a(all)과 l이 있습니다.
    a는 숨어있는 폴더나 파일을 포함한 모든 항목을 터미널에 출력합니다.
    l은 폴더나 파일의 포맷을 전부 표현하라는 의미입니다.
    명령어로 ls -l을 입력하면 가장 왼쪽에 'd' 와 '-' 를 확인할 수 있습니다.
    여기서 d로 출력된 경우는 폴더를, -로 출력된 경우는 파일을 나타냅니다. 폴더는 다음 명령어 cd를 통해 진입할 수 있지만, 파일이라면 진입할 수 없습니다.
ex)
ls
ls -a
ls -l
ls -al  //  a와 l의
ls -la  //  옵션의 순서는 기능에 영향을 미치지 않습니다.
  • open . : macOS에서 현재 위치를 GUI로 실행하는 명령어 open
ex)
open .  //open과 .사이에 띄어쓰기를 해주어야 합니다.
  • cd(change directory) : 폴더에 진입하기
ex)
cd
/Users/User-name/Downloads/진입한 폴더 이름
  • touch : 파일 생성하기
ex)
touch 생성할 파일명
  • cat : 파일의 내용을 터미널에 출력하기
    touch로 .txt 파일을 생성했다면 텍스트파일 안에 적힌 내용을 터미널에 출력할 수 있는 명령어 입니다.
ex)
cat 내용을 출력할 파일명

CLI로 생성한 폴더나 파일은 GUI로 확인할 수 있고, GUI로 작업한 내용도 CLI에서 확인할 수 있습니다.
밑의 명령어도 당연히 두 가지의 인터페이스에서 동일한 효과를 발휘합니다.

  • rm(remove) : 폴더나 파일 삭제하기
    rm으로 삭제한 폴더나 파일은, 휴지통을 거치지않고 삭제됩니다.
 ex)
 rm 삭제할 파일명 // 명령어 rm은 파일만 삭제할 수 있습니다.
 
 폴더를 삭제하기 위해선 옵션을 이용해야 하는데, 
 ls에서 사용한 것 처럼 '-'를 사용해 입력합니다.
 사용할 수 있는 옵션은 r(recursive)과 f(force)입니다.
 r은 폴더를 지울 때 사용하고
 f는 질문을 받지 않고 지울 때 사용합니다.
 
 rm -r 삭제할 폴더명 // 이 명령어와 옵션을 이용해 폴더를 삭제할 수 있습니다.
  • mv(move) : 폴더나 파일의 이름을 변경, 또는 폴더나 파일의 위치 옮기기
ex)
mv [폴더나 파일의 이름] [도착 폴더의 이름] // 폴더를 이동합니다.

명령어 mv의 다른 기능 이름 변경 입니다.
mv [변경할 폴더나 파일의 이름] [변경하고자하는 파일의 이름] // 이름을 변경합니다.
  • cp(copy) : 폴더나 파일을 복사하기
    CLI에서 .은 현재 폴더를 나타냅니다.
    ..은 현재 폴더(.)을 기준으로, 앞에 .이 하나 더 붙습니다.
    ..은 현재 폴더보다 앞에 있는 폴더를 가리킵니다.
ex)
cp [원본 파일 이름] [복사할 파일 이름] // 새로운 파일을 복사합니다.

명령어 cp에 사용하는 옵션은, 명령어 rm에 사용하는 옵션(r,f)과 동일합니다.

cp -rf [원본 폴더 이름] [복사할 폴더 이름] // 새로운 폴더를 복사합니다.

-절대경로와 상대경로

경로는 명령어 pwd로 확인할 수 있는 절대 경로와, 현재 위치로부터 상대적인 위치를 나타내는 상대 경로로 나뉩니다.

  • 절대경로
    절대 경로는 기준점으로부터의 절대적인 위치를 나타내는데, 이 기준점을 루트폴더(/)라고 합니다.
    정리하면, 절대 경로는 특정 폴더나 파일이 루트폴더로부터 어떤 폴더로 진입하는 경우 만날 수 있는지 나타냅니다.

ex) / Users / username / helloWorld / hello /
루트폴더에는 Users가 있고, 폴더Users로 진입하면 Usersname이 있고 Usersname폴더로 진입하면 helloWorld가, helloWorld폴더로 진입하면 hello가 있는 걸 알 수 있습니다.
이 과정을 한 줄로 줄여놓은 구문이 '절대경로' 입니다.

  • 상대경로
    상대 경로는 특정 폴더 또는 파일의 위치를 현재 위치를 기준점으로 나타냅니다.
    현재 위치한 폴더는 점(.)으로 표현하고,
    상위 폴더는 두 개의 점(..)으로 표현합니다.
    슬래시(/)는 폴더 내부를 나타내고
    ./는 '현재 폴더 아래의' 라는 뜻입니다.

ex) / Users / username / helloWorld / hello / hi
현재 폴더 위치가 hello이고 만약 현재 폴더 아래의 폴더 hi로 진입하려고 한다면
cd ./hi -> 현재 폴더 아래의 폴더 hi로 진입하라는 뜻입니다.

-관리자(root) 권한

절대 경로의 기준점인 루트폴더(/)는 Linux의 관리자 영역입니다.
일반 사용자의 권한으로는 어떤 폴더나 파일도 생성, 변경, 삭제할 수 없습니다.
Linux 관리자의 가장 큰 특징은, 어떤 일이 있더라도 일반 사용자에게 관리자 권한(루트 권한)을 완전하게 넘기지 않습니다.

사용자가 관리자 권한을 필요로하는 경우는 새로운 프로그램을 설치하거나, 프로그램을 변경 또는 삭제하는 경우이기 때문에, 해당 프로그램을 설치, 변경 또는 삭제할 수 있는 관리자 권한만 전달합니다.
사용자와 관리자를 명확히 분리하여 사용자의 실수로 발생할 수 있는 시스템 에러로부터 운영체제를 보호합니다.

사용자가 새로운 프로그램을 설치하거나 변경 또는 삭제할 때에는, 관리자 권한이 필요합니다. 사용자가 관리자 권한할 때, 사용자 권한을 이용할 수 있는 명령어 sudo가 있습니다.

  • sudo : 관리자 권한을 획득하는 명령어
    사용자가 관리자 권한을 일시적으로 획득하는 명령어는 sudo입니다.
ex)
sudo mkdir sudoMKdir 
// 이 후 나오는 password는 보이지 않아도 잘 작성되고 있습니다.

-npm & package.json

  • npm
    우리는 잘하는 사람들이 만들어 놓은 검증된 코드(모듈)을 가져다가 사용합니다.
    node.js에서는 npm모듈이라는 이름으로 불립니다.
    이에 대한 정보를 담은 곳이 package.json 입니다.
    즉, 이 프로젝트(패키지) 전반에 관한 정보가 들어가 있다고 볼 수 있습니다.

    npm(node package manager)이란?
    일종의 앱스토어라고 생각하시면 됩니다.
    필요한 모듈을 다운로드 할 수 있는 모듈들이 모여 있는 모듈스토어 입니다.
    npm 패키지 = npm 모듈 = npm dependency 이 세개는 동일한 대상을 가르킵니다.관점에 따라 다른 용어를 선택합니다.

    -dependency : 이 프로젝트가 돌아가기 위해 반드시 필요한 모듈들이 무엇인지 적혀 있습니다. 직접 실행과 관련 있는 dependency. ex)react
    -devDependencies : 프로그램 실행과 관계없이 오로지 개발을 위해 필요한 dependency 입니다.

  • package.json
    package.json에는 이 프로그램을 실행시키기 위해 필요한 모듈들이 무엇인지, 프로그램을 실행시키는 방법, 프로그램을 테스트하는 방법 등이 명시되어 있습니다.
    이 프로그램을 실행시키기 위해 필요한 실제 모듈은 따로 node_modules이라는 폴더에 저장된다는 것입니다. package.json에는 어떤 모듈인지만 적혀 있습니다.

    package.json이 주는 또 하나의 이점은 프로젝트 코드를 전달할 때, 포함하고 있는 모든 모듈을 다 전달하지 않아도 된다는 점 입니다.
    프로젝트 코드를 넘겨줄 때, "우리 코드는 여기 있고, 필요한 모듈은 package.json에 적어놨으니 네가 직접 다운받아서 쓰면 돼" 라고 하면 됩니다.
    필요한 모듈까지 모두 넘겨주는 것은 전달해야 하는 파일도 너무 많거니와 필요없는 일입니다. 사용하는 사람이 직접 다운받으라고 하면 됩니다. 우리는 무엇이 필요한지만 알려주면 됩니다.

    우리가 흔히 하는 npm install은 package.json에 있는 dependency (의존성 모듈)를 바탕으로 설치합니다.

-추가 정보 (ls -l 입력시 와 r,f에 대하여)

  • ls -l 입력시

    위의 명령어 'ls -l' 을 입력했을 때의 추가 글입니다.
    drwxr-xr-x , rwxr-xr-x 이런식의 출력이 되는데 이 출력의 의미를 알아보겠습니다.

    • r
      read의 약자인 읽기권한으로 파일 및 폴더안에 있는 데이터, 속성, 서브 폴더 등에 접근이 가능합니다.
    • w
      write의 약자인 쓰기권한으로 파일 및 폴더의 속성과 데이터를 변경할 수 있습니다.
    • x
      execute의 약자인 실행권한으로 해당 파일을 실행하여 사용할 수 있습니다.
    • '-'
      권한없음을 나타낼 때 쓰입니다.

    rwxr-xr--가 출력되었다고 가정해 보겠습니다.
    3자리씩 끊어서 '사용자' , '그룹' , '기타 를 뜻합니다.
    rwx : 해당 파일에 읽기,쓰기,실행권한이 있다는 것을 뜻합니다.
    r-x : 읽기,실행원한은 있지만 쓰기 권한은 없다는 것을 뜻합니다.
    r-- : 오직 읽기 권한만 존재한다는 것을 뜻합니다.

  • r,f 에 대하여
    r과 f는 폴더,파일 삭제가 가능한 명령어 rm과 폴더,파일의 복사가 가능한 명령어 cp의 옵션으로 사용됩니다.
    여기서 r은 recursive의 약자로 특정 행동을 순환적으로 반복합니다.
    f는 force의 약자로 어떤 행위를 강제합니다.

    rm을 사용하여 파일을 삭제할 수 있고, rm -r 을 사용하여 폴더를 삭제할 수 있습니다.
    -f 명령어 사용시 보호되거나 존재하지 않는 파일도 강제로 삭제할 수 있습니다.
    그런 이유로 -f 명령어를 사용하실 때는 각별히 주의하셔야 합니다.
    -r과 -f 를 합쳐 -rf 형태로 쓸 수도 있는데,문제를 일으키는 경우가 생깁니다.
    이에 대해 주의하셔야 합니다.

  • cat
    cat명령어는 파일의 모든 내용이 나오는 명령어입니다.
    그러나, 항상 전체 내용을 출력하기 때문에 파일이 담고 있는 내용이 너무 길 경우, 터미널 상에서 내용이 잘려서 나오는 경우가 생깁니다.
    그리고 항상 전체가 출력되기 때문에 원하는 정보를 찾기 위해서 때로 시간이 오래 걸립니다.
    전체를 열람하지 않고 파일 내용의 부분만 열람할 수 있게 만들어주는 명령어를 알아보겠습니다.

    • head (맨 위부터 출력)
      head 파일명 = 맨 위부터 10줄만 출력됩니다.
      head -n 100 파일명 = 100행이 출력됩니다. (-n은 생략가능합니다.)
    • tail (맨 밑부터 출력)
      tail 파일명 = 끝부터 10줄만 출력됩니다.
      tail -n 20 파일명 = 지정한 행까지 출력하는 경우로 끝부터 20줄만 출력됩니다.
      tail +n 20 파일명 = 파일의 특정 행부터 마지막 행 까지 출력됩니다.
    • more (파일을 읽어 화면에 화면 단위로 끊어서 출력합니다.)
      위에서 아래로만 출력되기 때문에 지나간 내용을 다시볼 수 없는 단점이 있습니다.
      more 파일명
      왼쪽하단 = 출력된 내용이 몇 %인지 나옵니다.
      enter = 한줄씩 출력됩니다.
      space bar = 한 화면씩 출력됩니다.
      more -n 파일명 = n에 입력된만큼 끊어서 출력합니다.
      more +n 파일명 = n에서 입력한 행부터 화면에 출력합니다.
    • less
      more과 반대되는 의미로 한 번에 보여지는 만큼만 읽어서 출력합니다.
      대용량 파일을 열어볼 때 빠르게 사용 가능합니다.
  • help 옵션

    1. 아무런 인자 없이 명령어를 실행합니다.
    2. -h옵션을 붙여서 실행합니다.
    3. --help를 붙여서 실행합니다. (-help의 경우도 가능합니다.)

0개의 댓글