- 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 프로그램을 찾아 실행할 수도 있습니다.
- 하단의 독(dock, 설정에 따라 화면의 모서리 중 다른 곳에 위치할 수 있음)에서 런치패드를 클릭합니다.
- 런치패드가 열리면, 상단의 검색창에 Terminal을 입력하고 Enter(엔터 키)를 누르거나, 화면에 나타난 프로그램을 클릭합니다.
- 스포트라이트(Spotlight search)를 이용해 터미널을 실행하는 방법
- 단축키: command(커맨드 키, ⌘) + Space(스페이스 키)
- 모니터 화면 최상단의 상태바에서 돋보기모양을 클릭하여 스포트라이트를 실행합니다.
- 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에는 자주 사용하는 옵션 l과 a가 있습니다
→ 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명령어만 사용하여 파일삭제 불가)
→ 대쉬(-)를 사용하여 옵션을 입력 / 사용할 수 있는 옵션은 r과 f
→ 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를 입력한 경우, 나타나는 출력
→ 아래의 단축키 안내에 따라 키보드의 Y 와 N를 눌러서 저장 여부를 결정할 수 있습니다.
→ 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 |
---|