CLI (Command-Line Interface)
-CLI에 대하여
-기본적인 명령어
-절대경로와 상대경로
-관리자 권한
-npm & package.json
-추가 정보 (ls -l 입력시 와 r,f에 대하여, cat, help 옵션)
컴퓨터를 조작하기 위해서는 다양한 입력(input)과 출력(output)이 필요합니다.
리눅스의 '터미널'은 키보드의 입력과 모니터의 출력으로 모든 작업을 할 수 있습니다.
GUI(graphical user interface)가 개발되기 이전부터 컴퓨터를 조작하기 위해 사용되었기 때문에 GUI로 할 수 있는 건 CLI도 할 수 있습니다.
CLI는 GUI보다 여러가지 측면에서 유리합니다.
대량의 서버 컴퓨터를 설치해야 하는 서비스같은 경우 4천 평이 넘는 규모의 데이터센터를 29개 이상 가지고 있고, 계속해서 확장하고 하나의 데이터 센터에는 최소 5만개 이상의 서버 컴퓨터가 설치가 되어있다면 수많은 컴퓨터에 GUI를 적용하기 위해 서버 컴퓨터마다 I/O 소스(키보드, 마우스, 모니터 등)를 부착하는 일은 불가능에 가깝기 때문입니다.
CLI를 이용해 서버 컴퓨터로 접속을 요청하면, 서버 컴퓨터는 요청한 컴퓨터의 출력소스(모니터)를 이용해 서버 컴퓨터에 직접 찾아갈 필요없이, 자신의 모니터로 서버 컴퓨터와 소통한다면 이 방법은 매우 효율적입니다.
명령어를 알아보기 전 '터미널'을 실행해야 합니다.
스포트라이트(command+space)를 이용해 'Terminal'을 검색해 실행시키거나, 독바의 런치패드에서 'Terminal'을 검색해 실행시켜줍니다.
CLI는 입력하는 글자와 출력되는 글자로 컴퓨터와 소통할 수 있습니다. 컴퓨터가 출력하는 글자를 읽을 수 있어야 합니다. 무슨 뜻인지 모르더라도 읽어야 다음스텝이 가능하므로 기억하고 읽어야합니다.
키보드의 입력을 확인하고 편집할 수 있는 한 줄의 공간을 '프롬프트(Prompt)' 라고 합니다. 터미널에서 입력하는 CLI의 명령줄 대기모드 입니다.
이제 기본적인 명령어를 알아보도록 하겠습니다.
ex)
pwd
/Users/User-name/Downloads // 이런식의 경로가 출력됩니다.
ex)
mkdir 폴더이름
ex)
ls
ls -a
ls -l
ls -al // a와 l의
ls -la // 옵션의 순서는 기능에 영향을 미치지 않습니다.
ex)
open . //open과 .사이에 띄어쓰기를 해주어야 합니다.
ex)
cd
/Users/User-name/Downloads/진입한 폴더 이름
ex)
touch 생성할 파일명
ex)
cat 내용을 출력할 파일명
CLI로 생성한 폴더나 파일은 GUI로 확인할 수 있고, GUI로 작업한 내용도 CLI에서 확인할 수 있습니다.
밑의 명령어도 당연히 두 가지의 인터페이스에서 동일한 효과를 발휘합니다.
ex)
rm 삭제할 파일명 // 명령어 rm은 파일만 삭제할 수 있습니다.
폴더를 삭제하기 위해선 옵션을 이용해야 하는데,
ls에서 사용한 것 처럼 '-'를 사용해 입력합니다.
사용할 수 있는 옵션은 r(recursive)과 f(force)입니다.
r은 폴더를 지울 때 사용하고
f는 질문을 받지 않고 지울 때 사용합니다.
rm -r 삭제할 폴더명 // 이 명령어와 옵션을 이용해 폴더를 삭제할 수 있습니다.
ex)
mv [폴더나 파일의 이름] [도착 폴더의 이름] // 폴더를 이동합니다.
명령어 mv의 다른 기능 이름 변경 입니다.
mv [변경할 폴더나 파일의 이름] [변경하고자하는 파일의 이름] // 이름을 변경합니다.
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로 진입하라는 뜻입니다.
절대 경로의 기준점인 루트폴더(/)는 Linux의 관리자 영역입니다.
일반 사용자의 권한으로는 어떤 폴더나 파일도 생성, 변경, 삭제할 수 없습니다.
Linux 관리자의 가장 큰 특징은, 어떤 일이 있더라도 일반 사용자에게 관리자 권한(루트 권한)을 완전하게 넘기지 않습니다.
사용자가 관리자 권한을 필요로하는 경우는 새로운 프로그램을 설치하거나, 프로그램을 변경 또는 삭제하는 경우이기 때문에, 해당 프로그램을 설치, 변경 또는 삭제할 수 있는 관리자 권한만 전달합니다.
사용자와 관리자를 명확히 분리하여 사용자의 실수로 발생할 수 있는 시스템 에러로부터 운영체제를 보호합니다.
사용자가 새로운 프로그램을 설치하거나 변경 또는 삭제할 때에는, 관리자 권한이 필요합니다. 사용자가 관리자 권한할 때, 사용자 권한을 이용할 수 있는 명령어 sudo가 있습니다.
ex)
sudo mkdir sudoMKdir
// 이 후 나오는 password는 보이지 않아도 잘 작성되고 있습니다.
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 입력시
위의 명령어 'ls -l' 을 입력했을 때의 추가 글입니다.
drwxr-xr-x , rwxr-xr-x 이런식의 출력이 되는데 이 출력의 의미를 알아보겠습니다.
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명령어는 파일의 모든 내용이 나오는 명령어입니다.
그러나, 항상 전체 내용을 출력하기 때문에 파일이 담고 있는 내용이 너무 길 경우, 터미널 상에서 내용이 잘려서 나오는 경우가 생깁니다.
그리고 항상 전체가 출력되기 때문에 원하는 정보를 찾기 위해서 때로 시간이 오래 걸립니다.
전체를 열람하지 않고 파일 내용의 부분만 열람할 수 있게 만들어주는 명령어를 알아보겠습니다.
help 옵션