- 학습 내용
컴퓨터를 조작하기 위한 입력과 출력을 I/O(input/output, '아이오')라고 한다. 우리가 사용하는 컴퓨터에서 input을 해주는 장치에는 키보드, 마우스, 카메라, 마이크 등이 있다. 모두 컴퓨터에 명령을 전달해주는 장치이다. 반대로 output을 해주는 장치는 모니터, 스피커 등을 들 수 있다. 오늘 살펴볼 리눅스의 터미널은 키보드의 입력과 모니터의 출력으로 컴퓨터의 모든 작업을 할 수 있는 인터페이스다.
GUI란 graphical user interface로 그래픽 화면을 통해 아이오를 하는 우리가 흔히 사용하는 윈도우나 리눅스의 우분투이다. GUI를 사용하여 드래그 앤 드래그를 통해 폴더를 이동시키거나 클릭을 통해 파일을 실행시키는 등의 명령을 할 수 있다. CLI라는 인터페이스도 있는데 command-line interface의 약자로 오늘 우리가 학습할 터미널이 이에 해당한다. 보통 가상 터미널 또는 텍스트 터미널을 통해 아이오를 하는 방식이다. 중요한 것은 GUI로 할 수 있는 모든 작업을 CLI로 할 수 있다는 것이다.
그렇다면 개발자가 되기 위하여 CLI를 왜 배워야 할까? 여러가지 이유가 있겠지만 크게 2가지를 살펴보자. 첫째로 GUI에서 할 수 없는 강력한 기능을 사용할 수 있고 월등히 빠른 처리를 할 수 있기 때문이다. 예를 들어 폴더를 지우기 위해 GUI는 폴더를 찾고 마우스 오른쪽 버튼을 클릭하여 휴지통에 파일을 보낸다. 그리고 휴지통을 찾고 휴지통을 비우는 작업을 해야 한다. 그러나 CLI는 단순한 명령어를 입력하여 순식간에 파일을 제거할 수 있다. 둘째로 우리가 서버를 사용할 때 대부분 대여해서 사용하기 때문이다. 서버를 대여해주는 기업들의 서버 컴퓨터는 상상할 수 없을 정도의 대규모를 가지고 있다. 그렇기 때문에 각 서버 컴퓨터마다 키보드나 마우스 또 모니터를 설치하는 것은 불가능하다. 또 우리가 대여한 서버를 조작하기 위해서는 그 서버에 원격으로 접속하여 조작해야 한다. 그때 우리가 마주할 환경이 대부분 CLI이다. 그래서 개발자는 CLI에 대한 어느 정도의 숙련이 필요하다.
일단 CLI란 무엇인지와 왜 배워야하는 지 알았으니 이제 기본적인 명령어에 대해 살펴보겠다. 그리고 지금 우리가 다루는 것은 Linux환경이지만 내가 가진 컴퓨터가 MacOS이기 때문에 MacOs 터미널을 기준으로 알아볼 것이다. 그전에 주의할 사항은 터미널은 입력하는 글자와 출력되는 글자로 소통하는 방식이기 때문에 컴퓨터가 출력하는 글자를 읽을 수 있어야 한다. 반드시 출력된 글자를 읽고 넘어가는 습관을 들이는 게 중요하다.
- pwd
pwd는 print working directory의 약자로 현재 위치를 확인하는 명령어이다. CLI의 경우 GUI와 다르게 현재의 경로를 즉각적으로 인지하기가 어렵기 때문에 자신이 작업하고 있는 경로가 어디인지 아는 것이 매우 중요하다.
- mkdir
폴더를 생성할때 사용하는 명령어이다. mkdir은 make directories의 약자로 디렉터리를 만들어라라는 뜻이다.
mkdir HelloWorld
이렇게 사용하면 HelloWorld라는 폴더를 지금의 경로에 만들어 준다.
- ls
list의 약자로 특정 폴더에 포함된 파일이나 하위 폴더의 리스트를 출력한다. ls에는 l과 a 옵션이 있는데, a는 'all'을 의미한다. 숨어있는 폴더나 파일을 포함한 모든 항목을 터미널에 출력해준다. l은 폴더나 파일의 포맷 전부를 출력하라는 명령이다.
ls -l
ls -a
ls -al // ls -la 옵션의 순서는 상관 없음
이렇게 사용한다. 그리고 ls -l을 사용하면 폴더나 파일의 포맷 전부를 출력하는데 출력에서 첫글자가 d인 경우는 폴더를 -인 경우에는 파일을 의미한다. 그리고 뒤이어 rwx가 3번 반복되는데 순서대로 읽기 권한, 쓰기 권한, 실행 권한을 의미하고 권한이 없는 경우에는 -로 권한 없음을 나타낸다. 같은 형태가 3번 반복되는 이유는 첫 번째의 경우 파일 및 폴더를 소유하고 있는 유저가 가지는 접근 권한을 보여주고 두 번째는 그룹이 가진 권한, 셋째는 다른 유저가 가진 그파일에 대한 권한을 보여주는 것이기 때문이다.
- open
폴더나 파일을 GUI에서 열어주는 명령어이다.
open .
이렇게 사용하면 현재 경로의 폴더를 GUI로 열어준다.
- cd
change directory의 약자로 현재 사용하고 있는 위치의 폴더에서 다른 폴더로 변경해주는 명령어이다. 사용법은 먼저 pwd로 현재 위치를 확인한 후 ls를 이용해 하위폴더를 확인한다. 그리고 cd [폴더명] 으로 하위 폴더로 진입할 수 있다.
cd bye #현재경로가 /Users/abraham/helloWorld/인 경우
cd /Users/abraham/helloWorld/bye/
상대 경로뿐만 아니라 절대 경로를 사용하여 위치를 바꿀 수도 있다. 절대 경로란 기준점부터의 절대적인 위치를 나타내는 것이다. 기준점은 루트 폴더(/)이다. 예를 들어 내 컴퓨터의 경우에는 맨 처음 루터폴더(/)부터 내가 지금 있는 bye라는 폴더까지의 경로인 /Users/abraham/helloWorld/bye/을 의미한다. pwd 명령어를 통해 확인할 수 있다. 반대로 상대경로란 특정 폴더 또는 파일의 위치 즉, 현재 위치를 기준점으로 하는 경로를 말한다. 현재 위치한 폴더를 점(.)으로 나타내고 상위 폴더를 두 개의 점(..)으로 나타낸다. 만약 cd ../라는 명령어를 사용하면 지금 경로 폴더의 상위 폴더로 이동하는 것이다.
또 알아둘만한 내용은 루트 폴더(/)와 사용자 폴더의 경로 차이이다. 사용자 폴더의 경로는 루트부터 해서 본인 컴퓨터의 이름 폴더까지의 경로이고 이 경로는 생략되어 ~로 표현한다. 예를 들어 내 컴퓨터의 경우 사용자 폴더의 경로는 /Users/abraham/이다.
- touch
touch라는 명령어를 사용하여 파일을 생성할 수 있다. 사실 touch는 파일의 날짜와 시간을 수정하는 명령어이다. 그러나 0바이트의 파일을 생성하기 위해 자주 사용된다.
touch hi.txt #hi.txt파일을 생성한다
- cat
cat명령어는 파일의 내용을 확인 할 때 사용하는 명령어이다. 만약 좀 전에 생성한 hi.txt 파일에 HelloWorld라는 문구를 GUI로 입력하고 저장했다고 하자. 그리고 이와 같이 입력하면
cat hi.txt
HelloWorld을 출력해준다.
그런데 cat명령어의 경우 파일의 모든 내용을 출력해주기 때문에 때때로 이 작업이 부담스러울 수 있다. 만약 아주 큰 용량을 가진 파일 중 일부의 내용을 확인하고자 한다면 cat명령어는 적합하지 않다. 그때 사용하는 명령어에 head, tail, more, less가 있다.
1)head
head [-n lines | -c bytes] [파일명]
이렇게 사용한다. 만약 어떤 옵션도 없다면 처음부터 10행까지 만의 내용을 보여준다. -n 옵션은 처음부터 원하는 행까지의 내용을 -c 옵션은 처음부터 원하는 바이트까지의 내용을 출력한다.
2)tail
사용방법은 head와 동일하지만 head와 반대로 마지막부터 출력하는 특징을 가졌다.
3)more
more 명령어는 파일을 읽어 화면에 화면 단위로 끊어서 출력해주는 명령어이다. 문제는 지나간 내용을 다시 볼 수없다는 단점이다.
more [-n | +n] [파일명]
-n 옵션은 n에 입력한 값만큼 끊어서 출력해주고, +n 옵션은 n에 입력한 행부터 읽어서 출력하는 명령어이다.
4) less
less는 한 번에 보이는 만큼만 읽어서 출력하는 명령어이다.
- rm
rm은 폴더나 파일을 삭제할 때 사용하는 명령어이다. 예를 들어 bye.txt 파일을 삭제하고자 할 때 먼저 그 경로에 접근하고
rm hi.txt
이렇게 파일을 삭제한다.
폴더를 지우는 경우는 조금 다른데 rm 뒤에 -r이나 -rf를 입력하여 삭제할 수 있다. r은 recursive의 약자이고 f는 force의 약자이다. 즉 -rf는 반복적으로 강제로 라는 뜻을 가진다.
- mv
mv명령어는 move의 약자로, 폴더나 파일을 이동할 때 사용하는 명령어이다. 예를 들어 bye.txt를 이동시킨다면
mv bye.txt [경로 | 하위폴더]
이렇게 명령어를 사용하여 이동시킬 수 있다.
mv명령어는 파일을 이동시키는 기능뿐만 아니라 파일의 이름을 변경시키는 기능 역시 수행할 수 있다.
mv bye.txt helloworld.txt #bye.txt를 helloworld.txt로 변경한다
- cp
cp는 copy의 약자로 폴더나 파일을 복사할 때 사용하는 명령어이다.
cp [원본파일이름] [복사할파일이름]
이렇게 사용한다.
폴더를 복사하는 경우 rm명령어와 마찬가지로 -rf옵션을 사용하여 복사할 수 있다.
- sudo
컴퓨터의 운영체제에는 사용자와 관리자가 있다. 일상적으로 pc를 켜서 로그인하는 계정은 보통 사용자이다. 이러한 구분의 이유는 보안 때문인데 항상 관리자 권한으로 실행되는 pc는 악성코드가 삽입된 프로그램이 어떤 안전장치도 없이 설치되는 문제가 있다. 그래서 구분하여 사용자가 접근할 수 없는 영역에 접근할 수 있는 높은 권한을 관리자에게 따로 지정하는 것이다. 아까 살펴봤던 루트 폴더(/)의 경우가 관리자의 영역이다. 루트폴더(/)의 경우 잘못된 설치, 변경, 삭제가 일어나면 시스템 에러가 촉발해 운영체제가 먹통이 될 수도 있다. 그래서 일반 사용자의 권한으로는 루트폴더(/)의 어떤 폴더나 파일도 생성, 변경, 삭제할 수 없는 것이다. 만약 루트 폴더(/)에서 mkdir을 사용하면 "Read-only file sysyem"이라는 에러를 만나게 된다.
그러나 우리는 때때로 관리자 권한이 필요한 경우가 있다. 그럴 때 사용할 수 있는 명령어가 sudo이다. sudo명령어를 사용하면 일시적으로 관리자의 권한을 사용할 수 있게 된다. (현재 로그인된 사용자를 확인하는 명령어는 whoami이다)
- nano
nano는 CLI환경의 에디터이다. CLI에서 유명한 에디터에는 vim(vi), emacs 등이 있지만 초보자가 사용하기엔 진입장벽이 아주 높다. 그러나 nano는 아주 쉽게 사용할 수 있다. nano명령어를 입력하면 곧장 nano에디터가 켜진다. nano와 함께 스크립트 파일 이름을 입력하면 스크립트 파일이 nano에디터에서 켜지고 파일이 없는 경우에는 입력한 파일명으로 스크립트파일이 생성되며 nano에디터로 켜진다.
nano [스크립트파일]
nano에디터에서 파일을 열 때는 ^R(ctrl + R)로 열 수 있다. ^T를 사용하여 화살표 키를 이용해 파일 및 디렉터리를 탐색한 후 파일을 불러 올 수도 있다. 파일을 여는 가장 쉬운 방법은 그냥 터미널에 nano 명령어와 함께 파일 이름을 입력하는 방법이다. 종료를 할 때는 ^X를 입력하면 저장여부를 묻고 답하면 종료하고 저장하고 싶을 때는 ^O를 사용하여 저장할 수 있다.
'인증,보안' 카테고리의 다른 글
[인증/보안] 기초2 (0) | 2022.06.24 |
---|---|
[인증/보안] 기초1 (0) | 2022.06.23 |
[Linux] 권한과 환경변수 (0) | 2021.12.22 |
Git 기초1 (0) | 2021.07.06 |
Linux 기초2 패키지(package)와 런타임(runtime) (0) | 2021.07.05 |