AWS로 서버를 시작하기 위해 필요한 Linux 지식 2-리눅스 기본조작

Jason Jaewoo Kim
jasonjaewoo
Published in
16 min readJul 29, 2019

검은 화면의 터미널?

이제 구체적인 리눅스 지식을 정리해 봅니다. 리눅스는 기본적으로 CLI(Command Line Interface)에서 동작되기 때문에 실제로 명령을 입력하면서 연습하기 좋습니다. 우선은 리눅스를 조작하는데 빠질 수 없는 터미널 프로그램에 대해서 설명합니다.

터미널 사용자가 명령을 입력하여 bash쉘을 통해 운영체제에 명령어를 내릴 수 있는 소프트웨어입니다. 이를 보통 검은화면이라고 하며 화면에 의미를 모르는 문자들이 표시되는 이미지를 생각하는 개발자가 많습니다. 그래서 보통 개발자 면접을 볼 때, 1년차이상 개발자들에게 “터미널을 사용하여 자유롭게 조작할 수 있습니까?”라고 질문을 하면, 자신있게 “예"라고 대답하는 경우를 극히 보기 힘들었습니다. GUI(Graphical User Interface)쪽 기반으로 조작하는 방법들은 대부분 익숙해 있어 쉽게 접근하할 수 있다고 생각합니다.

그러나, 서버와 클라우드서비스를 운영한다면 CLI는 필수입니다. 이전에 설명했듯이 세상에서 사용되는 운영체제 중 리눅스 점유율이 높고, 리눅스 서버는 기본적으로 CLI를 사용하여 조작할 수 있다는 것입니다. CLI에서 작업하는 장점은 GUI에 비해 작업 효율성이 높다는 것입니다. 예를 들어, 반복적인 작업을 할 때 명령은 문자정보를 위해 한번 실행한 명령을 텍스트파일로 저장하여 여러번 처리를 할 수 있습니다.

이렇게 말해도, 검은 터미널 화면이 표시하고 입력하는 화면이 어렵다고 느낄 수 있습니다. 이번에는 리눅스를 처음 사용하는 사람이 터미널에서 쉽게 접근할 수 있는 방법을 소개합니다.

명령 실행 환경

앞으로 명령을 테스트하는데 있어서 윈도우를 사용한다면, VirtualBox(무료), VMware(유료), WSL(Linux용 Windows 하위시스템)등의 가상화 소프트웨어 또는 리눅스 운영체제를 도입해서 시작해 주세요. macOS를 사용하시는 분들은 “터미널"프로그램을 이용하면 됩니다. 또한, 이번 설명에서는 Amazon Linux AMI release2018.03버전을 기준으로 실행확인을 하고 있으며, 여러분의 리눅스 배포판 버전에 따라 다를 수 있습니다.

터미널 기본키 조작방법

터미널에서 사용하는 기본적인 키조작 방법을 소개합니다. 커서를 이동시킬 때, 단순히 커서 이동키 좌측커서키(<), 우측커서키(>)를 눌러 이동할 수 있습니다.

AWS EC2 리눅스 터미널 접속 화면

여기까지는 누구나 문제없이 따라할 수 있다고 봅니다. 다음은 터미널에서 어떤 문자를 입력해 보세요. 물론 문자를 입력하고 커서를 맨 앞에 이동할 경우라면 GUI에서는 마우스를 행앞까지 가져가 클릭하면 이동할 수 있지만 터미널에서 이런 마우스조작이 허용되지 않습니다. 이런 작업을 하려면 단축키를 이용하면 대응할 수 있습니다. 예를 들어, [Ctrl]+[a]키를 누르면 라인의 처음으로 이동할 수 있습니다. 반대로 커서를 끝으로 커서를 이동시킬 경우에는 [Ctrl]+[e]키를 누릅니다. 이외에 다양한 단축키가 존재하며 기본적으로 많이 사용하는 것들을 정리한 것을 아래 정리하였습니다.

아래 단축키를 사용하면, 터미널을 쉽게 사용할 수 있기 때문에 꼭 익혀둡시다.

  • [Ctrl]+[a] : 문자열 앞으로 이동
  • [Ctrl]+[e] : 문자열 뒤로 이동
  • [Ctrl]+[u] : 행 앞까지 삭제
  • [Ctrl]+[k] : 줄 끝까지 삭제
  • [Ctrl]+[_] : 이전 실행을 취소
  • [Ctrl]+[/] : 취소한 실행을 다시 되돌림
리눅스 파일시스템 계층 표준

[루트디렉토리 하위 디렉토리 내역]

  • /boot : 시스템을 시작하는데 필요한 파일이 저장되어 있음
  • /dev : 장치파일이 저장되어 있음
  • /etc : 시스템 및 미들웨어에 대한 설정파일이 저장되어 있음
  • /home : 사용자별 홈디렉토리가 저장되어 있음
  • /root : root사용자 홈디렉토리
  • /bin : 기본명령이 포함
  • /sbin : 시스템 관리자의 명령(시작/정지/재부팅 등)이 포함
  • /lib : /bin과 /sbin에 있는 명령을 실행하는데 필요한 라이브러리가 포함
  • /tmp : 가상메모리에 임시파일 저장
  • /usr : 사용자가 공통으로 사용하는 프로그램이나 라이브러리가 포함
  • /var : 로그파일등이 포함
  • /proc : 프로세스 실행상태 (CPU, 메모리, 파일시스템 사용 등)을 기재한 파일이 저장
  • /opt : 패키지 관리 시스템에 설치된 프로그램이 저장
  • /mnt : 임시 마운트된 파일시스템을 위한 디렉토리

디렉토리 이동에 대해

리눅스의 디렉토리 구조를 이해하셨습니까? 개념적인 내용으로 다소 어려웠습니까? 앞에서 살짝 이야기했지만, 디렉토리들이 많이 존재하기 때문에 우선 변경 또는 참조 가능성 /home이나 /etc/var디렉토리만으로도 기억하면 좋습니다. 여기서는 /home이나 /etc/var등의 디렉토리로 이동하는 방법을 설명합니다. CLI는 GUI와 다르게 마우스를 사용하여 디렉토리 아래로 이동할 수 없습니다. CLI에서 디렉토리 이동하려면 뒷부분에서 설명하는 “cd(change directory)”명령을 사용합니다. 여기서는 디렉토리 이동시 이해해야 하는 절대경로와 상대경로에 대해 설명합니다.

절대경로와 상대경로

경로(path)는 디렉토리와 파일 위치를 나타내는 것으로 표기방법으로 “절대경로(absolute path)와 상대경로(relative path)라는 2가지 종류가 있습니다. 절대경로는 앞에서 이야기한 파일시스템 구조의 루트디렉토리를 기점으로 원하는 위치를 만드는 방법입니다. 그에 반해 상대경로는 현재 디렉토리)를 기점으로 원하는 위치를 만드는 방법입니다. 상대경로는 현재 디렉토리 위치를 “.”로 현재 디렉토리에서 한 계층에 있는 디렉토리 (상위 디렉토리: parent directory)를 “..”라고 표현합니다. 절대경로와 상대경로의 차이점은 아래 그림으로 설명합니다.

절대경로를 사용하는 장점으로 현재 디렉토리 위치를 몰라도 원하는 위치까지의 경로를 만들수 있습니다. 또한, 루트 디렉토리를 기점으로 하기 있어 원하는 위치까지의 경로를 설명하고 있어 기술에 필요한 정보량이 많을 수 있습니다. 절대 경로로 작성하는 것이 어렵다면, 현재 디렉토리를 기점으로 기술하는 상대경로를 사용하는 것으로 설명량을 줄일 수 있습니다. 또한, 홈페이지를 만들고 HTML에서 CSS파일이나 이미지파일등을 볼때 상대경로로 사용하는 경우가 대부분입니다. 이유는 상대경로로 지정하여 웹서버에 파일 업로드하지 않고도 사용할 수 있는 폭이 넓어지기 때문입니다.

절대경로와 상대경로의 차이점

디렉토리 이동 배우기

CLI에서 리눅스를 사용하는데 있어서 절대경로와 상대경로는 디렉토리 이동을 할 때 사용되는 경우가 많습니다. 디렉토리 이동명령으로 앞에서 사용한 cd명령을 사용하여 현재 디렉토리 위치를 변경할 수 있습니다. 또한, 현재 디렉토리까지의 경로를 표시하는 명령으로 “pwd(print working directory)”명령이 있습니다.

리눅스 pwd명령 사용

우선 cd명령을 이용하여 “/var/www/html”경로로 이동합니다. 다음 상대경로(..)를 사용하여 상위디렉토리 www디렉토리로 이동합니다. 마지막으로 상대경로를 사용하여 현재 디렉토리(.)에서 html디렉토리로 이동하는 방법을 보여줍니다.

(작가주: html경로가 없으면 apache httpd을 설치합니다.)

또한, 디렉토리 이동을 효율적으로 하는 방법은 Tab을 사용하는 방법이 있습니다. cd를 입력한 한칸의 빈칸을 입력하고 k키를 두번 누르면 현재 디렉토리에 있는 디렉토리명이 출력됩니다. 그리고 디렉토리명이 일부나온 상태에서 k키를 한번 더 누르면 자동으로 풀네임이 입력됩니다.

또한, 자주 이동하는 디렉토리라면 “ln(link)”명령을 사용하여 심볼릭링크를 생성하면 즐겨찾기와 같은 형태로 편리하게 이용할 수 있습니다.

그럼, “/var/www/html”경로를 심볼릭링크로 html을 만들어봅시다.

심볼릭 링크는 ln명령어 뒤에 “-s”옵션을 추가해서 생성이 가능합니다. -s옵션을 사용하지 않고 ln명령을 실행하면 하드링크가 생성됩니다. 하드링크는 특성상 대상 디렉토리를 지정할 수 없기 때문에 주의해야 합니다.

리눅스 ln명령어

디렉토리 내용정보 확인하기

디렉토리 이동방법에 대해 이해하셨습니까? 이제 디렉토리를 이동하면서 현재 디렉토리에 어떤 파일이 있고, 어떤 하위 디렉토리가 있는지 알고 싶어질것입니다. 파일 및 디렉토리 정보를 조회하는 명령은 “ls(list segments)”명령이라는 것이 있고, 리눅스 서버를 다루는데 가장 많이 사용되는 명령중 하나입니다.

ls명령에는 다양한 옵션이 있고 이를 이용하다보면 상세정보를 출력하고 출력형식을 변경할 수 있습니다. 예로, ls -a를 입력하면 아래와 같습니다.

리눅스 ls -a 명령

-a옵션은 파일명 앞에 .를 가진 파일을 표시하는 옵션입니다. 파일명 앞에 .를 가진 파일은 숨김파일로 평소 변경하지 않도록 사용하는 설정파일로 사용합니다. 그렇다면 -al옵션을 사용하여 실행해보면 어떻게 나오는지 확인해 봅시다.

리눅스 ls -al 명령

-l 옵션은 긴형식의 파일이나 디렉토 내용을 표시할 수 있는 옵션입니다. 출력결과는 여러가지가 있는데 우선 한가지를 소개하면 하드링크수는 디렉토리의 경우 해당 디렉토리의 하위디렉토리 갯수(현재 디렉토리".”, 상위디렉토리 “..”도 포함)입니다.

-F 옵션을 선택하면 아래와 같은 형태로 나옵니다.

리눅스 ls -F 명령

-F 옵션은 디렉토리의 디렉토리명 뒤에 /가 포함된 실행파일이면 파일이름뒤에 “*”가 추가된 명령입니다. 그외에도 다양한 옵션들이 존재하며 아래 옵션표를 참고하면 작업효율이 높아집니다.

리눅스 ls -alF 옵션 복잡적용

[ls명령 옵션]

  • -a : 숨겨진 파일을 포함하여 출력
  • -l : 긴형식으로 출력
  • -F : 파일종류를 알 수 있도록 출력
  • -u : -l옵션과 같이 사용하면 타임스탬프 대신 마지막 접근날짜를 출력
  • -t : 타임스탬프 순으로 정렬하여 출력
  • -R : 디렉토리 내용을 재귀적으로 출력
  • -h : -l옶견과 같이 사용하면 파일크기가 읽기 쉬운 단위로 출력

입력 간소화하는 history기능

과거 입력한 명령을 다시 실행하려는 경우, history기능을 사용하면 편리합니다. 커서 이동키 중 위쪽 화살표와 아래쪽 화살표를 누르면 직전에 입력한 명령이 표시됩니다. 또한, history명령을 사용하여 과거에 입력한 명령 목록을 표시해 줍니다.

History 기능 활용하기

익숙해지면 편리한 기능으로 터미널에서 [Ctrl]+[r]키를 누르면 이력검색모드를 사용할 수 있습니다.

히스토리 검색

이력 검색 모드에서 문자를 입력하면 과거에 입력된 명령이 자동으로 완성됩니다. 원하지 않는 명령이면 [Ctrl]+[r]키를 다시 눌러 다음 명령을 볼 수 있습니다. 실행하면 엔터키를 눌러 명령을 일부 수정하면서 커서키를 이동해서 선택할 수 있습니다. 또한 history기능이 편리하지만 리눅스를 처음 접하는 사람이라면 직접 명령을 직접 익히는 것이 좋습니다.

리눅스서버 운영시 자주 사용하는 명령

cd, pwd, ln, ls, history명령을 소개했지만, 리눅스에는 이외에도 다양한 명령이 존재합니다. 이번에는 서버운용시 자주 사용하는 명령을 소개합니다.

mkdir(make directory)명령

mkdir명령을 입력하면 새 디렉토리를 만들 수 있습니다. 예로 “korea”디렉토리를 만들었습니다. 다음은 “parent1”이라는 디렉토리를 만들고 그 안에 “sub1”하위 디렉토리를 만듭니다.

리눅스 mkdir 명령

다만, mkdir명령어에 parent1는 상위디렉토리가 존재하지 않는다는 오류가 표시되어 생성하지 못하는데 이런 경우 상위디렉토리를 포함하여 생성하려면 -p 옵션을 이용하면 편리하게 해결됩니다.

cp(copy)명령

cp명령은 파일이나 디렉토리를 복사할 때 사용하는 명령입니다. 예로 “a.txt”복사본을 만드는 것을 보여드립니다. 또한 cp명령은 다른 디렉토리를 대상으로 지정할 수 있습니다. 앞으로 만든 parent1디렉토리에 복사를 시도해봅시다.

리눅스 cp 명령

cp명령에는 다양한 옵션이 존재하며, 그중 자주 사용하는 옵션으로 -r, -p옵션을 소개합니다.

우선 디렉토리를 복사시, -r옵션을 지정합니다. 이 옵션을 사용하면 디렉토리와 그 안의 내용까지 모두 복사합니다.

다음으로 -p옵션으로 이 옵션을 사용하면 원래파일속성이나 디렉토리 구성을 그대로 유지하면서 복사가 가능한 옵션입니다. 즉, -p옵션을 사용하면 원본속성과 권한을 유지하면서 복사할 수 있어 리눅스서버 운영시 복사기능을 이용하여 기존 속성/권한 유지하면서 복사하는 것이 많아 -p옵션을 사용하여 복사에 유용합니다.

rm(remove) 명령

rm명령은 파일이나 디렉토리를 삭제하는 명령이다. 예로, “a.txt”파일을 삭제하려면 아래와 같이 실행한다.

리눅스 rm 명령

디렉토리까지 모두 삭제하려면 -r옵션을 사용합니다. 또한, 특정 문자열을 가진 파일들을 모두 삭제하려면 “a_*.txt”를 지정하면 a_로 시작하는 모든 파일이 모두 삭제됩니다. 그외 ?라는 것을 사용하면 단일문자가 포함된 파일을 삭제합니다. “a_?.txt”로 하면, a_1.txt, a_2.txt, a_3.txt가 삭제됩니다. 단, a_11.txt인 경우 삭제되지 않습니다. 와일드카드는 편리하지만 필요한 파일까지 삭제될 수있어 주의합시다. 또한, 이런 문제를 방지하기 위해 -i옵션을 붙여서 삭제전에 확인할 수 있습니다.

mv(move) 명령

mv명령은 파일이나 디렉토리를 이동하는 명령이다. 실제로 mv명령을 사용하여 “a1.txt”파일을 “parent1”디렉토리로 이동하는 예입니다.

또한, mv명령은 파일이나 디렉토리명을 변경하는데도 사용됩니다.

cat(catenate)명령

cat명령은 파일내용을 검색시 사용합니다. 이 명령을 사용하면 여러 파일을 연결하여 출력하는 기능도 있다.

리눅스 cat 명령

cat명령은 파일내용을 표시하는데 사용하는 명령이지만, 행수가 많은 파일을 볼 때 한번에 파일내용 모두를 출력해 버리기 때문에 못볼수도 있습니다. 이련 경우, less명령을 사용하면 편리합니다. 또한, 파일 내용 선두부분만 표시할 경우 head명령을 사용하고 마지막줄만 거슬러 올라가면 tail명령도 존재합니다.

find 명령

find명령은 파일이나 디렉토리를 검색하는 명령입니다. 옵션으로 -name을 사용하면 앞에서 설명했던 와일드카드를 사용하여 파일 및 디렉토리를 검색할 수 있습니다.

grep(global regular expression print)명령

grep명령은 파일에 있는 문자열을 검색하는 명령입니다. 아래 grep명령을 사용하여 “a.txt”파일안에 있는 “나나나나나"단어를 검색하는 경우를 보여줍니다.

리눅스 grep명령

또한 다양한 옵션이 존재하지만, 그중에서 몇가지 옵션을 소개합니다.

-i옵션은 대소문자 구분없이 같은 문자열을 검색에 사용합니다. “a”, “b”포함한 문자열을 찾으려면 -e옵션을 사용합니다. 만약, 검색과 일치하지 않는 것을 찾으려면 -v옵션이 있습니다.

이 grep명령은 리눅스 서버 운용하는데 로그파일등의 검색이 자주 사용되기 때문에 사용법이 익숙해지면 좋습니다.

파이프라인

명령과 명령 사이에 “|”(파이프라인)을 사이에 두는 것으로 명령을 여러가지 조합하여 사용할 수 있습니다. 예를 들어, “ls -al | less”를 입력하면 많은 디렉토리 목록을 조금씩 표시할 수 있습니다.

꼭 여러개의 명령을 조합하여 사용해 보시기 바랍니다.

리디렉션

명령의 실행결과를 파일로 출력시 리디렉션(>)을 사용합니다. 이때 “echo”명령을 사용합니다. echo “안녕하세요" > hi.txt로 실행합니다.

참고로 “>”은 항상 덮어쓰기 때문에 다른 문자열을 사용하여 명령을 실행하면 파일내용을 모두 변경해 버립니다. 이미 존재하는 파일에 추가하는 경우 “>>”를 사용합니다.

권한

이제 마지막으로 리눅스에서 사용하는 권한 부분을 설명합니다.

권한에 대해

권한은 사용자파일이나 디렉토리에 대한 접근권한을 의미합니다. 이 접근권한은 3가지가 존재하며 “읽기", “쓰기", “실행"에 대한 권한 설정이 가능합니다. 예를 들어, 파일의 읽기전용 권한을 부여하여 가능합니다. 또한 이런 권한은 파일이나 디렉토리의 “소유자”, “그룹"등에 각각 부여할 수 있습니다.

이런 사양에 따라 파일 소유자와 그룹에만 실행권한을 주고, 다른 사용자는 실행하지 못하게 설정이 가능합니다.

왜 권한이 필요할까요?

그렇다면 왜 권한을 설정할 필요가 있을까요? 이는 권한을 설정하여 서버 보안을 강화할 수 있기 때문입니다. 일반적으로 리눅스 서버에 로그인할 수 있는 모든 사용자에게 시스템 전체 쓰기 권한을 부여하는 것이 아니라, 강한 권한은 시스템 관리자에게만 부여됩니다. 이렇게 권한을 나누어 설명하면 관리자가 아닌 사용자가 제품 환경에 있는 중요한 파일을 실수로 변경하거나 삭제하는 위험방지를 할 수 있습니다. 권한을 알맞게 부여하여 안전하고 강력한 서버를 구축할 수 있습니다.

권한변경 방법

권한을 변경하려면 “chmod(change mode)”명령을 사용합니다. 또한 이 명령을 사용시 소유자, 그룹, 기타권한을 각각 0에서 7까지 숫자를 사용하여 설정하는 것이 일반적이며, 이런 값은 아래 표를 참고하여 사용할 수 있습니다.

[플래그 의미]

  • r : 읽기권한 = 1
  • w : 쓰기권한 = 2
  • x : 실행권한 = 4

[접근권한 설정과 부여된 권한의 관계]

  • 0 =- - -
  • 1 = --x
  • 2 = -w-
  • 3 = -wx
  • 4 = r- -
  • 5 = r-x
  • 6 = rw-
  • 7 = rwx

다음으로 파일이나 디렉토리 소유자를 변경하려면 “chown(change owner)”명령과 그룹을 변경하려면 “chgrp(change group)”명령을 각각 사용합니다.

권한이 어색할 수 있지만 리눅스서버에서는 필수로 사용하는 경우가 많기 때문에 기억하기 바랍니다.

2회를 마치며

두번째 리눅스 기본사용법을 소개하면서 최소한의 조작방법을 익히게 되었을 것이라고 생각됩니다. 다음에는 리눅스 서버 구축을 위한 패키지 설치 방법과 git등의 개발 및 운영에 도움이 되는 프로그램들을 소개합니다.

--

--