본문 바로가기

CLI

CLI의 전반적인 개념

- CLI

→ CLI정의 : CLI(Command-Line Interface)는 명령어를 입력해 컴퓨터를 조작하는 방식

→ 대부분의 PC에서는 GUI(Graphical User Interface)를 적용하며 GUI는 윈도우즈나 macOS, 또는 Linux에서 사용자가 화면을 통해 컴퓨터와 소통하는 방식

→ 윈도우즈에서 새로운 폴더를 생성시 복잡한 과정이 필요(마우스,키보드 필요)

→ CLI에서는 단 한 줄로 해결할 수 있습니다. 만약 "codestates"라는 폴더를 새롭게 생성하려고 한다면, 터미널을 열고 다음과 같이 입력  :   mkdir codestates

----------------------------------------------------------------------------------------------------------------

→ 입력을 담당하는 키보드나 마우스를 입력소스(Input source)라고 합니다.

/  카메라나 마이크 등 컴퓨터에 새로운 명령을 전달하는 모든 소스가 입력소스

→ 입력소스에 의해 또는 작성된 프로그램에 의해 모니터에 화면을 나타내거나, 음악을 재생하면 소리를 스피커로 전달하여 사용자가 인식할 수 있도록 하는 일을 출력(Output)

 /  출력를 담당하는 모니터나 청각적 출력를 담당하는 스피커를 출력소스(Output source)  /  스마트 홈을 연결하여 전등이나 공기청정기를 조작하는 경우, 전등이나 공기청정기도 출력소스

컴퓨터를 조작하기 위한 입력과 출력을 간단하게 I/O(Input/Output)라고 표기하며, "아이오"라고 읽습니다.

→ GUI가 할 수 있는 모든 작업은 CLI로 할 수 있습니다.  /  CLI는 여전히 여러가지 측면에서 유리

→ 아마존 웹 서비스(AWS, Amazon Web Service)의 클라우드 컴퓨팅처럼, 대량의 서버 컴퓨터를 설치해야 하는 서비스  

/  최소 5만개 이상의 서버 컴퓨터가 설치되는데 이렇게 많은 컴퓨터에 GUI를 적용하기 위해 서버 컴퓨터마다 I/O 소스(키보드, 마우스, 모니터 등)를 부착하는 일은 불가능에 가깝습니다.

/  서버 컴퓨터를 다루기 위해 CLI를 이용해 서버 컴퓨터로 접속을 요청하면, 서버 컴퓨터는 요청한 컴퓨터의 출력소스(모니터)를 이용합니다. 선배 개발자들은 서버 컴퓨터에 직접 찾아갈 필요없이, 자신의 모니터로 서버 컴퓨터와 소통이 가능하다.(현재도 이 방법으로 사용)

/  대부분의 서버 컴퓨터는 무료로 이용할 수 있는 Linux 운영체제가 설치되어 있기 때문에 Linux 환경에서 CLI를 이용하는 방법은 필수적이다.

----------------------------------------------------------------------------------------------------------------

- macOS 터미널 실행하기

  • 런치패드(Launchpad)를 이용해 터미널을 실행하는 방법
    • 런치패드를 좌, 우로 넘기면서 Terminal 프로그램을 찾아 실행할 수도 있습니다.
    1. 하단의 독(dock, 설정에 따라 화면의 모서리 중 다른 곳에 위치할 수 있음)에서 런치패드를 클릭합니다.
    2. 런치패드가 열리면, 상단의 검색창에 Terminal을 입력하고 Enter(엔터 키)를 누르거나, 화면에 나타난 프로그램을 클릭합니다.
  • 스포트라이트(Spotlight search)를 이용해 터미널을 실행하는 방법
    • 단축키: command(커맨드 키, ⌘) + Space(스페이스 키)
    1. 모니터 화면 최상단의 상태바에서 돋보기모양을 클릭하여 스포트라이트를 실행합니다.
    2. Terminal을 입력하고 Enter(엔터 키)를 누르거나, 화면에 나타난 프로그램을 클릭합니다.

* Ubuntu는 작업표시줄, macOS는 독(dock)에 터미널을 고정하고 사용하길 권장합니다.

----------------------------------------------------------------------------------------------------------------

 

→ CLI에서 키보드의 입력을 확인하고 편집할 수 있는 한 줄의 공간을 프롬프트(Prompt)라고 합니다.

터미널에서 입력하는 CLI의 명령줄 대기모드는 프롬프트(prompt)입니다.

→ 프롬프트에서 입력한 명령을 실행하려면, Enter(엔터 키)를 누르면 됩니다. 

pwd: 현재 위치 확인하기

→ GUI에서는 "현재 폴더가 위치한 경로"를 확인하기 위해 탐색기의 상단을 클릭해서 확인합니다.

[그림] 윈도우즈에서 탐색기 상단을 클릭해 현재 폴더가 위치한 경로를 확인할 수 있습니다.

→ CLI인 터미널에서는 간단하게 pwd를 프롬프트에 입력하고, Enter(엔터 키)를 누르면 현재 경로가 나타납니다.

pwd

[커맨드] 현재 위치를 확인할 수 있는 명령어 pwd

→ pwd는 print working directory의 약자  /  디렉토리(directory)는 폴더

→ 명령어 pwd를 입력하고 Enter(엔터 키)를 누르면, 컴퓨터는 현재 작업중인 폴더의 위치를 출력

mkdir: 새로운 폴더 생성하기

→ CLI에서 폴더를 생성하기 위해 사용하는 명령어인 mkdir은 make directories의 약자로, 폴더를 만들라는 명령을 컴퓨터에 전달

→ 명령어 mkdir은 생성할 폴더의 이름을 함께 입력해야 합니다  /  CLI에서는 명령어와 폴더의 이름을 Space(스페이스 키)로 구분합니다.

mkdir helloWorld

[커맨드] "helloWorld"라는 이름의 폴더를 생성하라는 명령을 컴퓨터에 전달합니다.

ls: 특정 폴더에 포함된 파일이나 폴더 확인하기

→ 명령어 ls는 list의 약자로, 특정 폴더에 포함된 파일이나 하위 폴더의 리스트를 출력

ls

[커맨드] ls 명령어의 기본형은 ls입니다.

→ 명령어 ls를 입력해 현재 폴더에 어떤 폴더나 파일이 있는지 확인(변경사항 확인용)

→ 명령어 ls에는 자주 사용하는 옵션 la가 있습니다

→ CLI에서 특정 명령어의 옵션을 사용하는 경우에는 -를 이용해 옵션을 입력했다고 컴퓨터에 전달

→ ls -l  /  ls -a  /  ls -al 또는 ls -la  

/  세 번째 예시에서, 옵션을 뜻하는 대쉬(dash, -) 뒤에 오는 옵션의 순서는 기능에 영향을 미치지 않습니다.

→ 명령어 ls의 옵션 a는 "all"이라는 의미  /  숨어있는 폴더나 파일을 포함한 모든 항목을 터미널에 출력

→ 옵션 l은 폴더나 파일의 포맷을 전부 표현하라는 의미

/  출력되는 폴더나 파일의 포맷 중에서 가장 먼저 등장하는 d 또는 -로 시작하는 부분

→ 명령어 ls와 함께 옵션 l을 사용하면, 가장 왼쪽에 출력되는 두 글자 d-를 확인할 수 있습니다. 여기서 d로 출력된 경우는 폴더를, -로 출력된 경우는 파일을 나타냅니다.

→ 폴더는 다음 명령어 cd를 통해 진입할 수 있지만, 파일이라면 진입할 수 없습니다.

/  나머지 rwxr-xr-x 또는 rw-r--r--에 대한 부분(Self-Guided Lesson 챕터를 확인)

명령어를 이용해 폴더를 GUI의 탐색기로 실행하기

→ 터미널의 현재 위치를 GUI의 탐색기(파인더)로 열 수 있습니다.

open .

[커맨드] macOS에서 현재 위치를 GUI로 실행하는 명령어 open

cd: 폴더에 진입하기

→ 명령어 cd는 change directory의 약자로, 프롬프트로 상호작용하는 폴더를 다른 폴더로 변경한다는 의미입니다.

→ 상대경로를 통해 하위 폴더 이동시 ‘./’생략 가능

→  명령어 pwd를 사용해 현재 위치를 확인하고, 명령어 ls를 이용해 helloWorld 폴더를 확인하세요. 그 다음, 명령어 cd를 이용해 helloWorld 폴더로 진입합니다. 명령어 pwd를 이용해 현재 위치를 확인

# '#' 기호는 설명을 위해 사용되었습니다.

# pwd를 이용해 현재 위치를 확인합니다.

pwd

# [사용자명]은 처음 OS를 설치할 때 입력한 사용자 이름입니다.

# (Ubuntu) /home/[사용자명]

# (macOS) /Users/[사용자명]

# ls를 이용해 현재 위치의 모든 폴더와 파일을 확인합니다.

ls

# cd를 이용해 폴더 helloWorld로 진입합니다. 

cd helloWorld

# pwd를 이용해 현재 위치를 확인합니다.

pwd

[커맨드] cd 명령어를 이용해 helloWorld 폴더로 진입합니다.

cd ~/helloWorld/hello와 같이 명령어 cd 뒤에 경로를 입력하면, 현재 진행중인 폴더로 한 번에 이동할 수 있습니다.

폴더를 대상으로 할 때에는 마지막 슬래시를 생략할 수 있습니다.

touch: 파일 생성하기

→ 컴퓨터나 스마트폰 등 전자기기에서 문서의 형태로 작성된 모든 것을 파일이라고 합니다.

→ 가장 쉽게 접할 수 있는 파일은 텍스트(text) 파일

→ 파일을 만들기 위해 touch라는 명령어를 사용합니다. 아래의 명령어를 통해 빈 텍스트 파일 "hi.txt"를 생성하세요.  /  현재 있는 폴더 내부에서 생성

touch hi.txt

[커맨드] touch 명령어로 파일 hi를 생성합니다.

 

cat: 파일의 내용을 터미널에 출력하기

CLI에서는 명령어 cat으로 파일의 내용을 확인할 수 있습니다. 

cat hi.txt

[커맨드] cat을 이용해 파일의 내용을 확인합니다.

→ 파일 내용 뒤에 다른 문자가 붙어있다면, 한 줄의 끝에 Enter(엔터 키)를 누르지 않은 것 뿐입니다. 

ex) strp123456@gmail.com%   

  → 명령어 cat은 파일의 모든 내용을 터미널에 출력하는 명령어

CLI(Command-Line Interface)는 텍스트를 기반으로 소통하기때문에, GUI를 이용한 편집기가 실행되지 않습니다.

→ 원격 서버에 접속한 상태에서, 너무 큰 파일을 출력할 경우 원격 서버에 접속하는 일은 네트워크를 통해 이뤄지기 때문에, 원격으로 접속한 상태에서 큰 파일을 출력하는 일은 굉장히 비효율적이다.

→ CLI에서 텍스트를 편집할 수 있도록, CLI 전용 텍스트 편집기가 있습니다.(터미널 에디터 nano)

 

- 추가사항

CLI와 GUI는 사용자와 소통하는 방식의 차이입니다. 같은 PC를 조작하므로, 변경사항은 두 인터페이스에서 동일하게 나타납니다.

→ pwd는 print working directory의 약자로, 현재 작업 위치를 출력합니다.

→ 폴더를 생성하는 명령어는 mkdir입니다.

/  폴더 또는 파일의 이름에 공백(띄어쓰기)이나 특수문자가 있으면, 백슬래시(\)를 이용해 적용합니다.

/  폴더로 진입하는 명령어는 cd입니다.

→ 명령어 cat은 이어지는 파일을 순서대로 읽고 터미널에 출력합니다.

* 터미널에 출력될 때, 백슬래시(\)는 이어지는 특수문자를 출력하는 용도이므로, 실제 터미널에는 나타나지 않습니다.

ex) cat t1.txt t2.txt t3.txt를 입력시 해당 텍스트 파일의 모든 내용이 순서대로 모두 출력

rm: 폴더나 파일 삭제하기

명령어 rm은 폴더나 파일을 삭제할 때 사용합니다.

→ 명령어 rm으로 파일을 삭제합니다(명령어 rm의 뜻은 remove(삭제하다)입니다)

  → 명령어 rm으로 삭제한 폴더나 파일은, 휴지통을 거치지않고 삭제됩니다.

rm bye.txt

ls

# bye 폴더만 출력됩니다.

[커맨드] rm 명령어를 통해 bye.txt를 삭제합니다.

→ 명령어 rm은 단일 파일을 삭제할 수 있습니다. 만약 폴더를 삭제하려면 옵션을 이용해야 합니다. (rm명령어만 사용하여 파일삭제 불가)

→ 대쉬(-)를 사용하여 옵션을 입력  /  사용할 수 있는 옵션은 rf

rm -rf bye

ls # 아무것도 출력되지 않습니다.

→ 옵션 r은 "recursive"를 뜻하고, 옵션 f는 "force"를 뜻합니다.  /  이 옵션을 사용해야 폴더 삭제 가능

→ 옵션 r은 폴더를 지울 때 사용하고, 옵션 f는 질문을 받지 않고 지울 때 사용합니다.

→ 폴더나 파일을 삭제할 때 두 옵션을 같이 사용

mv: 폴더나 파일의 이름을 변경, 또는 폴더나 파일의 위치 옮기기

→ 명령어 mv는 move의 약자로, 폴더나 파일을 이동할 때 사용

→ GUI에서폴더나 파일을 이동시 Drag & Drop(드래그 앤 드랍)방식이 사용

ex) 1. 폴더나 파일에 마우스를 올리고, 마우스 왼쪽 버튼을 꾹 눌러 drag 상태로 만듭니다.

2. 선택된 폴더나 파일을 그대로 끌어(drag) 다른 폴더에 놓습니다(drop).

3. 폴더나 파일이 다른 폴더로 이동합니다.

→ CLI에서는 명령어 mv로 폴더나 파일을 다른 폴더로 옮길 수 있습니다.

ex) 명령어 mv를 통해 파일 "bye.txt"를 폴더 "bye"로 옮깁니다. 다음과 같이 명령어를 입력하세요.

# '#' 기호는 설명을 위해 사용하였습니다.

mv bye.txt bye/

ls

# bye 폴더만 출력됩니다.

→ 명령어 mv 뒤에는 순서대로 [폴더나 파일의 이름] [도착 폴더의 이름]를 입력합니다.

→ 명령어 mv를 이용하면, 폴더나 파일의 이름을 변경할 수 있습니다.

/   명령어 mv를 사용하기 위해 필요한 [폴더나 파일의 이름]에는, 변경할 폴더나 파일의 이름을 입력합니다.

[도착 폴더의 이름]을 대신해, 변경하고자하는 파일의 이름을 입력합니다. 

ex) 폴더 "bye"에 있는 파일 "bye.txt"의 이름을 "helloWorld.txt"로 변경하세요.

# '#' 기호는 설명을 위해 사용하였습니다.

ls # 현재 폴더에 있는 폴더나 파일을 출력합니다.

# bye.txt 파일이 출력됩니다.

mv bye.txt helloWorld.txt

ls

# helloWorld.txt 파일이 출력됩니다.

컴퓨터가 파일을 옮기거나 복사하는 방법

* 컴퓨터가 파일을 옮기는 방법은 가볍게 읽고 지나가세요.

→ 0과 1로 이뤄진 데이터 덩어리를 관리하는 컴퓨터는, 구조적 한계로 인해 내용물을 꺼내어 옮기는 개념이 없습니다.

→ 컴퓨터는 옮기려고 하는 폴더나 파일을 잠시 저장해두고 원래 위치에 있는 폴더나 파일을 삭제합니다. 그 다음, 이동하려는 도착 폴더에 저장해둔 내용으로 새로운 파일을 생성합니다.

 

→ 컴퓨터가 파일을 옮기는 방법

1. 파일의 내용을 잠시 저장한다  /  2. 원래 위치의 파일을 삭제한다  /  3. 도착 폴더에 1에서 저장한 내용으로 새로운 파일을 생성한다.

→ 명령어 mv에 입력하는 폴더나 파일의 원래 위치와 도착 폴더의 위치가 같은 경우 컴퓨터는 폴더나 파일을 삭제하고 새롭게 작성하는 대신, 폴더나 파일의 이름만 변경

→ 컴퓨터가 파일을 옮기는 방법에서 언급한 것처럼, 컴퓨터는 파일을 옮기기 위해 잠시 저장해둡니다. 파일을 복사하는 경우에는 파일을 옮기는 아래의 과정 중에서, 원래 위치의 파일을 삭제하는 과정이 제외됩니다.

cp: 폴더나 파일을 복사하기

→ 명령어 cp는 copy의 약자로, 폴더나 파일을 복사할 때 사용합니다.

→ 파일을 복사하기 위해 명령어 cp를 사용하는 경우에는, cp [원본 파일 이름] [복사할 파일 이름]을 프롬프트에 입력합니다.

ex) # '#' 기호는 설명을 위해 사용하였습니다.

ls

# helloWorld.txt 가 출력됩니다.

cp helloWorld.txt hiComputer.txt

ls

# helloWorld.txt hiComputer.txt 가 출력됩니다.

→ CLI에서 .은 현재 폴더를 나타냅니다. ..은 현재 폴더(.)을 기준으로, 앞에 .이 하나 더 붙습니다. 이렇게 만들어진 ..은 현재 폴더보다 앞에 있는 폴더를 가리킵니다.

ex) 상위폴더 이동시 명령어 : cd ..

→ 폴더를 복사를 위해 명령어 cp를 그냥 사용하면, 명령어 rm으로 폴더를 삭제할 때 처럼 메시지가 출력됩니다.  /  옵션없이 cp명령어 단독으로 폴더를 복사할 수 없음

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

ex) 폴더 복사

# '#' 기호는 설명을 위해 사용하였습니다.

cp -rf bye hi

ls

# bye hi 가 출력됩니다.

→ 폴더를 상위 폴더에 복사할 경우 1) 상대경로 2) 절대경로 두가지 경우를 사용할 수 

있음  /  cp -rf 복사폴더명 상대경로  또는 cp -rf 복사폴더명 절대경로(‘~/상위폴더/’ 이런 형태)

* 각 명령어에 포함된 옵션은 명령어 이름만 입력하거나 -h 또는 --help와 같은 옵션을 통해 확인할 수 있습니다. 

 

- 컴퓨터의 운영체제에는 사용자와 관리자가 있음

→ 사용자는 우리가 일상적으로 PC를 켜서 바탕화면에 진입하기 위해 로그인하는 계정

→ 관리자는 사용자가 접근할 수 없는 영역에 접근할 수 있는 높은 권한을 가지고 있습니다

→ MS(MicroSoft)사에서 개발한 운영체제, 윈도우즈(Windows)의 초기 버전에서는 사용자가 없이, 항상 관리자 권한으로 프로그램을 설치, 변경, 삭제할 수 있었습니다.(관리자 권한이 없음)

[문제점1]

→ PC가 항상 관리자 권한으로 실행되다보니, 개발에 대한 지식이 없는 일반 사용자가 정보를 탈취당하는 일이 발생 (해킹위험에 노출)

→ 공격자가 좋지 않은 의도로 작성한 코드는, 사용자가 입력하는 내용을 공격자에게 전달하도록 작성  /   좋지 않은 의도로 작성된 코드를 악성코드(Malicious Code)라고 합니다.

→ 항상 관리자 권한으로 실행되는 PC에서는, 악성코드가 삽입된 프로그램이 어떤 안전장치도 없이 설치  /  사용자는 어떤 프로그램에 악성코드가 심어져 있는지 파악할 수 없습니다.

[문제점2]

→ 악성코드가 아니라도, 시스템의 설정을 변경하는 몇몇 프로그램들이 존재하는데 

둘 이상의 프로그램이 시스템(운영체제)의 설정 변경에 참여하는 과정에서, 기존의 설정에서만 동작하도록 만들어진 프로그램이 강제로 종료되는 일이 발생

→ 두 개프로그램끼리 하나의 시스템(운영체제)을 놓고 다투는 과정을 프로그램 충돌(Conflict)이라고 합니다.  /  프로그램의 충돌 발생

[해결방안]

→ MS사는 윈도우즈 Vista에 "사용자 계정 컨트롤"을 탑재했습니다.

→ 사용자 계정 컨트롤(UAC, User Account Control)은 시스템을 관리하는 관리자와, 일상적으로 PC를 사용하는 사용자를 구분

→ 관리자는 프로그램을 설치하거나 변경 또는 삭제하는 권한

→ 사용자는 프로그램을 실행할 수 있지만, 변경할 수 없도록 제한된 권한

→ 사용자 계정 컨트롤은 사용자가 모르는 사이에 시스템 설정을 변경하는 악성코드가 실행될 때, 접근 권한을 막아 사용자를 보호

→ 리눅스 기반의 운영체제에서도 사용자와 관리자를 구분하였습니다. 

/  macOS 기반의 PC를 구매한 직후 처음으로 전원을 켤 때, 사용자를 등록해야 합니다. 

→  윈도우즈처럼 관리자 권한을 이용하면, 사용자를 추가, 변경, 삭제할 수 있습니다.

→ 리눅스 기반의 운영체제 중 Ubuntu에서는, 사용자가 절대 관리자 권한에 접근할 수 없도록 구분

→ 새로운 프로그램을 설치하거나 변경 또는 삭제할 때에 관리자 권한이 반드시 필요하기 때문에, 특정 명령어를 입력하는 것으로 잠시 관리자 권한을 빌려올 수 있습니다. (CLI이용)

 

- CLI로 관리자 권한을 획득하고 사용하는 방법

 

절대 경로와 상대 경로

 

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

→ 절대 경로는 기준점으로부터의 절대적인 위치를 나타내는데, 이 기준점을 루트폴더(/)라고 합니다.

→ 절대 경로는 특정 폴더나 파일이 루트폴더로부터 어떤 폴더로 진입하는 경우 만날 수 있는지 나타냅니다.

ex) macOS경우

/Users/[username]/helloWorld/hello/라는 경로를 예시로 살펴보겠습니다. 

→ 루트폴더(/)에는 폴더 Users가 있습니다. 

→ 폴더 Users로 진입하면, 폴더 [username]을 확인할 수 있습니다. 폴더 [username]에 진입하면, 폴더 helloWorld가 있고, 폴더 helloWorld에 진입하면 폴더 hello를 발견할 수 있습니다. 

→ 이 과정을 한 줄로 줄여놓은 구문(/Users/[username]/helloWorld/hello/)이 절대 경로입니다.

→ 상대 경로는 특정 폴더 또는 파일의 위치를 현재 위치를 기준점으로 나타냅니다. 

/  현재 위치한 폴더는 점(.)으로 표현하고, 상위 폴더는 두 개의 점(..)으로 표현합니다. 

→ 명령어 ls를 통해 확인되는 폴더나 파일은, 상대 경로로써 ./을 붙여 표현할 수 있습니다. 

→ 현재 폴더 아래의 폴더 hi로 진입하려고 한다면, 명령어 cd를 이용할 수 있습니다. 

→ 점(.)은 현재 폴더를, 슬래시(/)는 폴더 내부를 나타냅니다. 따라서 다음 표현에 포함된 ./는 "현재 폴더 아래의"라는 뜻입니다.

./hi는 현재 폴더 아래의 폴더 hi를 나타냅니다. 

ex) # '#' 기호는 설명을 위해 사용하였습니다.

cd ./hi # 현재 폴더 아래의 hi 폴더로 진입하는 명령

pwd

# (Ubuntu) /home/[username]/helloWorld/hello/hi

# (macOS) /Users/[username]/helloWorld/hello/hi

ls

# helloWorld.txt hiComputer.txt

→ 대부분의 CLI 명령어는 경로를 인식합니다. 현재 폴더 아래에 있는 파일 helloWorld.txt를 폴더 helloWorld로 이동해보겠습니다. 폴더나 파일을 이동하는 명령어는 mv입니다.

ex)

# '#' 기호는 설명을 위해 사용하였습니다.

mv helloWorld.txt ../../

ls

# hiComputer.txt

cd ../../

pwd

# (Ubuntu) /home/[username]/helloWorld/

# (macOS) /Users/[username]/helloWorld/

ls

# hello helloWorld.txt hi.txt

→ ../ 은 현재 폴더의 상위 폴더를 상대경로로 나타낸것, 2번 연속 사용시 현재 폴더보다 상위 -> 상위 폴더 이동을 의미

 

관리자(root) 권한

→ 절대 경로의 기준점인 루트폴더(/)는 Linux의 관리자 영역입니다.

→ 일반 사용자의 권한으로는 어떤 폴더나 파일도 생성, 변경, 삭제할 수 없습니다. 

→ Linux 관리자의 가장 큰 특징은, 어떤 일이 있더라도 일반 사용자에게 관리자 권한(루트 권한)을 완전하게 넘기지 않습니다.

→ 현재 로그인된 사용자를 확인하는 명령어 : 프롬프트에 명령어 whoami를 입력하세요.

→ 사용자와 관리자를 명확히 분리하여 사용자의 실수로 발생할 수 있는 시스템 에러로부터 운영체제를 보호

→ 사용자가 관리자 권한을 필요로하는 경우는 새로운 프로그램을 설치하거나, 프로그램을 변경 또는 삭제하는 경우이기 때문에, 해당 프로그램을 설치, 변경 또는 삭제할 수 있는 관리자 권한만 전달한다.

→ macOS를 처음 설치할 때 입력했던 username이 폴더의 형태로 생성되어 있습니다.

/  사용자는 폴더형태로 존재한다.

→ 사용자 권한은 username 폴더 내에서만 자유롭게 사용할 수 있습니다. (권한 제한)

→ 관리자 권한을 이용하면, 다른 사용자 폴더에도 영향을 끼칠 수 있습니다  

/  시스템 자체에도 접근이 가능합니다  /  관리자 권한으로 변경한 내용은, 사용자 권한으로 해결할 수 없습니다.

* 사용자 폴더의 경로(Path)는 ~/로 표시됩니다. 물결기호(~)는 루트폴더(/)로부터 사용자 폴더(username)까지의 경로를 축약한 형태입니다.

sudo: 관리자 권한을 획득하는 명령어

→ 명령어 sudo는 사용자 환경에서, 관리자 권한을 획득하는 명령어 

→ 명령어 sudo는 한시적으로나마 관리자 권한을 가지기때문에 항상 비밀번호와 함께 사용합니다.

→ 명령어 ls -l을 통해 특정 폴더나 파일이 사용자 또는 관리자의 소유로 생성되었는지 확인할 수 있습니다. 

→ 명령어 sudo를 이용해 생성한 폴더의 소유자는 루트입니다. (관리자 권한으로 생성)

→ 명령어 sudo를 사용하지 않고 생성한 폴더 justMkdir은 사용자 소유의 폴더

→ ls -l 명령어 사용시 소유자가 username과 root로 구분이 된다.

 

- 결론

→ 관리자 권한은 사용자가 프로그램을 설치, 변경 또는 삭제하는 권한을 차단하여 시스템을 안전하게 보호

→ 사용자는 주어진 권한만 사용할 수 있으며, 프로그램을 설치, 변경 또는 삭제하기 위해서는 관리자 권한을 획득하여야 합니다  /  일시적으로 sudo명령어를 사용해 관리자 권한 획득 가능

 

- 텍스트 에디터 nano

→ CLI에서 환경에서 유명한 에디터는 vim(vi), emacs이 있음 (+ nano에디터)

→ AWS(Amazon Web Service)와 같은 원격 서버 환경에서 원격으로 텍스트 파일을 편집해야 하는 경우에 터미널에서 자유자재로 다룰 수 있는 에디터가 필요하다.

→ 터미널에서 nano 클릭시 nano실행  

/  js파일을 nano에서 실행하려는 경우 nano 파일명.js

→ (A) 파일 이름 안내  /  (B) 파일 편집 화면, 실제로 여기서 텍스트 파일을 편집할 수 있습니다.  /  (C) 사용에 필요한 각종 단축키

→ 사실상 여기에 대부분의 기능에 대한 도움을 얻을 수 있습니다. 화면에 표시된 ^X 와 같은 내용은 Ctrl + X 키 조합을 의미합니다.

→ nano를 이용한 파일 열기 : nano 파일이름

→ 파일을 편집하고 종료시에 변동사항이 있을경우 저장여부를 물어봄

→ 파일 내용을 편집하고 난 후, 아래와 같이 ^X Ctrl + X를 누르면 다음과 같은 프롬프트가 등장합니다.

Save modified buffer (ANSWERIG "No" WILL DESTROY CHANGES) ?

[메시지] 텍스트 에디터 nano에서 ^X를 입력한 경우, 나타나는 출력

→ 아래의 단축키 안내에 따라 키보드의 YN를 눌러서 저장 여부를 결정할 수 있습니다.

→ nano를 종료하지 않고 파일 저장 : control + o


리눅스 권한(Permission)

ls -l 명령어를 입력시 drwxr-xr-x 출력되는 경우

[d] 1번 부분

[rwxr-xr-x] 2번 부분

→ 1번 부분의 -는 파일을 의미하고, 'd'는 폴더를 의미

    2번 부분에 존재하는 r, w, x, - 글자는 특정 파일 및 폴더의 접근 권한에 대한 정보

-> 'r'은 read의 약자로 읽기 권한을 의미합니다. 파일 및 폴더안에 있는 데이터, 속성, 서브 폴더 등에 접근이 가능합니다.

-> 'w'는 write의 약자로 쓰기 권한을 의미합니다. 파일 및 폴더의 속성과 데이터를 변경할 수 있습니다.

-> 'x'는 execute의 약자로 실행 권한을 의미합니다. 해당 파일을 실행하여 사용할 수 있습니다.

-> '-'는 권한 없음을 나타낼 때 쓰입니다.

ex) rwx는 해당 파일에 읽기, 쓰기, 실행 권한이 있음을 의미합니다. 

   r-x는 읽기, 실행 권한은 있으나 쓰기 권한은 부여되지 않았음을 의미합니다. 

   r--는 오직 읽기 권한만 존재함을 의미합니다.

[rwx] 1번 부분

  [r-x] 2번 부분

  [r-x] 3번 부분

-> 상단의 2번 부분은 다시 세 부분으로 나눌 수 있습니다.

-> 하단의 1번 부분은 파일 및 폴더를 소유하고 있는 유저가 가지는 접근 권한

-> 하단의 2번 부분은 그룹을, 3번 부분은 다른 유저를 특정

명령어 옵션 -r 과 -f

cp, rm 같은 명령어의 -r, -f 와 같은 명령어 옵션의 정확한 역활 파악

1) -r은 recursive의 약자로 특정 행동을 순환적으로 반복

2) -f는 force의 약자로 어떤 행위를 강제

→ 일반적으로 -r 옵션을 추가하면 파일을 저장하고 있는 폴더도 삭제 가능(rm)

-f 명령어를 사용하면 보호되거나 존재하지 않는 파일도 강제로 삭제 가능(주의요구)

rm -rf 명령어를 사용하면 민감한 정보를 가진 파일도 무차별적으로 삭제하여 심각한 문제를 일으키는 경우가 발생할 수 있기 때문에 주의 할 것

cat 명령어 대신 쓰는 명령어 (head, tail, more, less)

cat 명령어를 이용하면 터미널에서 파일 안에 담긴 내용을 확인

→ 항상 전체 내용을 출력하기 때문에 파일이 담고 있는 내용이 너무 길 경우, 터미널 상에서 내용이 잘려서 나오는 경우가 발생

 head 명령어는 텍스트로된 파일의 앞부분을 지정한 만큼 출력

->head 명령어는 text기반의 내용을 보여주며 binary로 된 파일의 내용도 명령어는 실행이 되지만 알아볼 수 없는 문자로 출력된다.

->기본 사용법은 다음과 같다.

 $ head [-n lines | -c bytes] [file ...]

-> $ head 파일명

아무 옵션없이 "head 파일명" 이라고 하면 앞에서 부터 10행까지만의 내용을 보여준다.

-> $ head -n 100 파일명

 "head -n 100 파일명"이라고 하면 앞에서 부터 100행(라인)까지를 보여준다.

/   -n 옵션은 생략이 가능하며 -100과 같이 사용하여도 된다.

$ head -c 100

이 경우에는 100byte의 내용만큼 파일의 내용을 보내주고 명령어가 종료

tail 명령어는 파일의 마지막 행을 기준으로 지정한 행까지의 파일내용 일부를 출력

tail은 리눅스에서 오류나 파일 로그를 실시간으로 확인할 때 매우 유용하게 사용

$ tail [옵션] [파일]

명령어를 사용 시 옵션없이 사용할 경우, 파일의 끝부터 디폴트 값인 10개 행을 표준출력

$ tail -n 20 test.txt

지정한 행까지 출력을 할 경우 -n 옵션을 이용하여 아래와 같이 옵션 값을 입력한다.

$ tail +20 test.txt

파일의 특정 행부터 마지막 행까지 출력하고 싶은 경우에는 '+'를 이용한다.

$ tail -c 200 test.txt

행 단위 대신 byte를 기준으로 입력

$ tail -f /var/log/messages.log

/  오류나 파일 로그를 실시간으로 모니터링할 경우에는 -f 옵션을 사용

/  -f 옵션을 사용할 경우 파일의 마지막부터 10줄을 출력하며, 종료되지 않은채 표준입력을 읽어 출력

/  출력을 종료하고 싶은 경우에는 Ctrl + c 를 사용

more명령어는 파일을 읽어 화면에 화면 단위로 끊어서 출력하는 명령어 

명령어는 위에서 아래 방향으로만 출력 되기 때문에, 지나간 내용을 다시 볼 수 없는 단점이 있음

$ more [파일명]

왼쪽 하단에 화면에 출력된 내용이 전체의 몇 % 인지를 표시하며, Enter 키를 입력하면 한 줄씩 출력되고, Space bar를 입력하면 한 화면씩 출력된다.

$ more -n [파일명]

-n 옵션을 사용할 경우, n에 입력한 값만큼 끊어서 화면에 출력해준다. 

/  Space bar를 입력하면 입력한 값 만큼씩 끊어서 화면에 출력된다.

$ more +n [파일명]

+n 옵션을 사용할 경우, n에 입력한 행부터 화면에 출력해준다.

less명령어는 파일을 읽어 화면에 출력하며 한 번에 보여지는 만큼만 읽어서 출력하기 때문에 대용량의 파일을 열어 볼 때 빠르게 사용된다.

$ less [파일명]

Enter키를 입력하면 한줄씩 출력되고, Space bar를 입력하면 한 화면씩 출력된다. 

$ less [행번호] [파일명]

방향키로 페이지 이동 가능하며 vi 텍스트 에디터와 유사하여 vi의 단축키가 대부분 동일하게 적용되지만, 파일 수정은 불가능

[그외 사용가능한 옵션]

$ less -?

  $ less --help

  $ less -V

  $ less --version

[cat 명령어와 같이 사용]

$ cat sample.txt | less

확인하고자 하는 파일의 내용이 너무 길 경우 한 화면에 다 출력할 수 없으므로 파이프(|)를 이용해서 less 명령어를 사용한다.

헬프 옵션 사용하기

→ 터미널에서 '도움말' 역할을 하는 명령어 옵션

→ 명령어의 도움말을 출력하는 방법은 크게 3가지가 있습니다.

-> 1) 아무런 인자없이 명령어를 실행한다. 

    2) -h 옵션을 붙여서 실행한다.

    3) --help 옵션을 붙여서 실행한다(가끔은 -help인 경우도 있습니다).

→ 단 명령어 마다 헬프 옵션이 다를 수 있기 때문에 주의

ls-h 옵션의 의미가 용량 표시법을 바꾸는 옵션

tail -h옵션이 사용할 수 없는 옵션

 

- 추가사항

→ nano 에디터를 이용하여 자바스크립트 파일 생성 가능

-> nano 파일명.js  -> 내부 작성 이후 저장 -> 파일명 확인 -> 생성됨

-> nano 에디터를 이용하여 자바스크립트 파일내 함수를 작성하고 함수를 호출하지 않으면 함수가 실행하지 않음

ex) function aaa(~){~~}   aaa(~~);   // 이렇게 써야 nodeJS로 js파일 실행시 함수 실행

→ sudo는 권한의 차이이므로 명령어의 기능차이는 없으며 더 많은 종류의 명령어를 사용할 수 있다는 차이이다.

→ 폴더명 자동완성 : tab키 작성시 현재 폴더 내부에 있는 폴더 이름 자동 완성

/  같은 문자로 구성된 폴더가 여러개인 경우 tab키 2번 연속 누르면 여러개중 선택가능

→ sudo su 명령어는 사용자 계정이 관리자 계정으로 되겠다는 의미 (매우 위험!)

→ 상대 경로에서 경로를 여러개 이동하려면 ‘/’를 사용하여 ‘.’을 구분해야 한다.

 

'CLI' 카테고리의 다른 글

패키지와 패키지 매니저  (0) 2021.05.07