CLI 환경과 리눅스 나노(nano) 텍스트 에디터 사용방법

1

 서버 관리를 하면서 CLI 환경에 익숙하지 않다면 여러가지 애로사항이 꽃피우는데요. 리눅스 명령어를 알아가는 것도 그렇지만 각종 설정파일을 수정해야할일이 많은 서버관리자로서는 텍스트편집기를 잘 사용하는 것 또한 필요합니다. 언제까지나 파일의 권한을 변경해가면서 FTP 프로그램을 통해 의지할 순 없는 노릇이니까요. CLI용 텍스트에디터에 익숙해지면 오히려 FTP를 통한 파일편집이 권한변경 때문에라도 더 번거롭게 느껴질겁니다.

 이번 글에서는 CLI 환경이란 무엇인지 간단히 알아보고 CLI 환경에서 초보자가 사용할 수 있는 텍스트 에디터(편집기)인 nano의 사용법을 알아봅니다. 텍스트 에디터는 서버의 설정파일만 수정할 수 있는 게 아니라 CLI에서 프로그래밍 코드를 작성하는데 사용할 수도 있습니다. 아래와 같은 내용을 알아보도록 합시다. 

CLI 환경에대해 – 안읽고 건너뛰어도되는 인트로덕션 잡설 

 때는 2018년, 21세기가 벌써 17년이나 지나버린 지금, 컴퓨터 프로그램을 사용하는 방법은 마우스 클릭(GUI)을 넘어서, 이제는 인공지능에게 말만하면 전화도 걸어주고 알람도 맞춰주는 그런 UI(유저 인터페이스)가 익숙해져가려는 이 시대. 여기 아직 진보하지 않은, 진보할 이유가 없어서, 진보해서 좋을 게 별로 없기에 여전히 사용자 인터페이스(UI)의 구시대 유물을 끌어앉고 살아가고 있는 이들이 있습니다.

 그들의 이름은 서버관리자, DevOps, 시스템 어드미니스트레이터 등으로 불리우는데, 그들은 마우스 클릭이나 말로 컴퓨터를 제어하지 않고 일일히 정.확.한. 문자를 적어서 컴퓨터에 명령을 내리고 있습니다. 그들이 슈팅 게임을 한다면 마치 이런 느낌이죠.

시스템메시지: 전방에 미확인 적 출현!!
시스템메시지: 비상! 미확인 적이 스커드 미사일을 발사했습니다!
$ 이동 오른쪽으로 10칸
$ 발사 패트리어트-미사일
시스템메시지: 패트리어트-미사일이 부족합니다.
$ 재장선 페트리어트-미사일 10기
시스템메시지: '재장선'이라는 명령어를 찾을 수 없습니다.
$ 재장전 페트리어트-미사일 10기
시스템메시지: 남은 미사일이 10기가 되지 않습니다.
$ 재장전 페트리어트 -보유수량만큼
시스템메시지:  적의 스커드 미사일에의해 격추당했습니다.게임오버.

 심지어 어순은 영어와 비슷하고 영어로만 적지만 영어는 아니고, 시스템 메시지도 영어로만 나옵니다. 한글화에 대한 노력은 전.혀. 없다고 봐도 무방합니다. 아니, 한글화된 서버를 주면 서버관리자는 오히려 화를 낼겁니다. 오류메시지 인터넷에서 검색하기 힘들다는 이유로 말이죠.

소름주의: 위의 게임예는 실제로 옛시대에 횡횡했던 게임 방식. 요즘도 어디선가 즐길 수 있다.

  올해 애플이라는 회사의 광고 중에 아이패드 프로를 가지고 노는 꼬마에게 엄마가 “컴퓨터 하는 중이니?”라고 묻자 꼬마가 대답하길, “컴퓨터가 뭔데?” 라며 눈길도 안주는 광고를 내보내더군요. 

 그런 친구들이 서버관리자가 된다고 한다면 CLI에 대한 이해를 시키기도 갑갑하지만, 그들이 CLI가 무엇인지 마침내 깨닿게 될 때, 제가 처음 서버관리영역에 들어서면서 CLI를 주로 사용한다는 사실에 경악한 그 느낌을 똑같이 받을 까요? 어쩌면 그냥 새로워서 신기해 할지도 모르겠습니다. 과거의 도스OS 컴퓨터를 사용하던 그 시대를 떠올리고 그것이 얼마나 아득한 과거인지 헤아릴 수 있는 사람들 만이 이 CLI라는 게 얼마나 구시대적 유물인지 알테니까요. (컴퓨터한테 허락받고 전원을 끄던 시대.)

CLI 툴(프로그램)은 어떤게 있나

 위의 텍스트 게임 예 처럼 명령줄로만 컴퓨터를 제어하는 사용자 인터페이스(UI)를 CLI(커맨드 라인 인터페이스)라고 합니다. CLI Tool(CLI 툴) 이라고도 하는 프로그램에서 볼 수 있는데 아래와 같은 통상 검은 화면으로 주로 서버 접속에 쓰이곤 합니다.

macOS의 기본 CLI 툴, 터미널(Terminal): 이상한 인사말은 신경쓰지 말도록 하자 🙂

 오늘날 사용하는 컴퓨터에도 CLI 툴이 기본으로 설치되어있는데 맥북, 아이맥의 운영체제 macOS 에서는 터미널이라는 맥앱이 있고, 윈도우즈(Windows)에서는 명령 프롬프트라는 프로그램이 있습니다. 물론 다른 CLI 툴을 설치해 사용할 수도 있습니다.

 프로그램, 응용프로그램, 애플리케이션, 앱, 어플이라는 이름들은 원론적인 관점에서는 같은말이나 마찬가지입니다만, 예나 지금이나 프로그램을 실행시킬 아이콘을 클릭해서 또는 스마트폰에서는 손으로 눌러서 실행시키고 그렇게 실행된 앱은 메뉴, 버튼,화면이 있는 GUI(그래픽 유저 인터페이스)를 가진 프로그램들일뿐 CLI 환경에서 사용되는 프로그램도 있는데요. CLI 툴에서 명령어로 실행시킬 뿐만 아니라 GUI환경의 프로그램이 백그라운드에서 CLI 환경의 프로그램을 실행시킬 수 있거나 그 반대가 성립하기도 합니다. 오늘날도 CLI 용 프로그램을 만드는 사람들이 꽤 있습니다. 

나노 에디터: CLI 초보자를 위한 CLI용 텍스트편집기

 오늘 우리가 알아볼 CLI용 프로그램은 텍스트파일을 수정하는 텍스트 에디터인 nano editor(나노 에디터) 입니다. CLI 텍스트에디터도 여러 종류가 있지만 컴퓨터에 기본으로 설치된 것이 아니라면 직접 자신이 설치해서 써야합니다. 그 중 CLI 환경 초보들이 가장 쉽게 접근 할 수 있고 기능이 단순해 사용이 쉬운것은 nano 입니다.

참고: 리눅스 뿐만 아니라 macOS에도 nano가 기본으로 설치되어 있습니다.

nano 에디터 사용방법

nano 편집기로 파일 열기 및 만들기

 nano editor의 실행 명령어는 nano 입니다. CLI 툴에서 아래와 같은 명령어를 사용해 특정 파일을 나노 에디터에서 열 수 있습니다. 

$ sudo nano /폴더경로/수정하려는_파일_또는_만들려는_파일명

 이 때 지정한 파일명이 없다면 그 이름으로 새로운 파일을 작성하도록 빈화면의 nano 편집기가 나타나고 곧바로 글이나 코드를 작성 할 수 있으며 저장하고 닫게되면 비로소 해당 파일이 생성됩니다. nano 편집기 실행

 

 아래 그림은 위 명령어를 넣어서 서버의 특정 폴더 경로에 위치한 php.ini 라는 파일을 nano 편집기로 연 화면입니다.

php.ini 파일을 나노 편집기에서 열었다
nano 에디터 구성화면

 위 그림에서 화면위에 나타나는 File:에는 현재위치의 파일이라면 파일명만 나오고, 다른 경로에 있는 파일이라면 위처럼 폴더경로까지 나옵니다. 그리고 화면 아래쪽에 나노 에디터 메뉴 단축키 안내가 나오는데 ^기호는 키보드의 control 키를 뜻합니다. ^Gcontrol + g 키를 누르란 것이죠

페이지 넘김 및 텍스트 편집 커서 이동 방법

  이 때, 내용이 짧은 파일은 한 화면에 다 담기지만,  내용이 길면 화면 전체에 나오지 않는데요. 위 파일은 사실 보이는게 전부가 아닌 약 2천 줄의 내용이 들어있습니다. 화면 아래쪽에 [Read 1918 lines](1918줄)이라고 표시하고 있죠. 추가라인이 표시 안되는 경우도 있으니 커서를 아래로 이동시켜봐야 알 수 있는 경우도 있습니다.

  게다가 CLI 툴의 화면 폭이 좁다면 파일내용이 줄바꿈이 되는게 아니라 오른쪽 텍스트가 짤려보이기도 합니다. 특정 줄의 글자가 오른쪽 화면끝까지 닿았다면 현재 화면에 보이지 않는 부분에 텍스트가 더 있을 수 있다는 걸 염두에 둬야합니다.

 nano 편집기 화면안에서 아래의 키보드 키를 이용해서 상,하,좌,우, 끝으로 옮겨 다닐 수 있습니다.

  • ,,, 화살표 키
  • Home키, End
  • PageUp키 또는 PageDown
  • 마우스 스크롤

나노 에디터 종료와 저장 또는 다른이름으로 저장

 파일 내용을 수정 중에도 중간중간 저장은 control + o 키를 누르고 엔터키를 눌러 저장할 수 있기도 하지만,  nano 에디터 종료시도를 먼저 거치면서 할 수도 있습니다. GUI 프로그램에서의 경우 에서의 경우 응용프로그램 창 한구석의 x 모양 버튼를 클릭한 뒤 아직 저장하지 않은 내용을 저장하고 닫을 건지 묻는 것과 같은 절차라고 보면 됩니다.

nano 편집기 종료 – Exit

 작성, 수정을 마치고 편집기를 닫으려고 할 때는 단축키 Control + x 를 누르면 되는데요. 파일에대해 수정내용이 있다면 아래처럼 그 내용을 저장할 것인지 묻습니다.

nano 편집기 끝내기
저장여부 질문: Save modified buffer ?

종료할때 파일 저장: Save

 위처럼 Save modified buffer? 질문이 나오면  y키를 눌러줌으로써 Yes를 선택하면 저장하는 것으로 선택하세요. 그러면 마지막으로 아래처럼 파일이름을 수정할 건지 묻는데 File Name to Write:, 파일이름을 수정하지 않고 그대로 엔터키(리턴키)를 눌러주면 해당 파일 그대로 내용을 저장하고 nano 편집기가 종료되어 다시 CLI 명령어를 입력할 수 있는 상태가 됩니다.파일 이름 수정 확인여부

다른 이름으로 저장하기

다른 이름으로 저장하기는 기존에 있던 파일을 열어서 수정했을 때만 할 수 있습니다. nano 편집기로 없던 파일명을 입력해 열었고 내용을 작성한, 한번도 저장한 적 없던 파일일 경우 위 화면의 질문에서 이름을 바꾸게 되면 아래와 같은 절차는 거치겠지만 파일이 전혀 생성되지 않고 애써 작성한 내용이 날아가므로 주의하세요.

위의 화면에서 처럼 파일이름 변경여부를 묻는 질문에서 파일이름(.htaccess)을 변경하고 엔터키를 누르면 아래처럼 또다른 질문을 던집니다.

nano - save file under different name

화면 아래쪽에 위 그림처럼 Save file under DIFFERENT NAME? 이라는 질문이 나오면 다른 이름으로 저장할 것인지 묻는 질문입니다. 여기에서 y 키를 눌러 yes를 선택할 수 있습니다. 그러면 해당경로에서 ls 또는 ls -al  명령어를 입력해 확인해보면 기존파일과 다름이름으로 저장한 새로운 파일까지 총 두개가 보이게 될 겁니다.

취소 단축키

각 단계에서 control + c 키를 누르면 한 단계씩 취소됩니다.

단어 찾기 – Where Is

 내용이 긴 파일을 수정해야 한다면 단어 찾기 단축키인 control + w 키가 유용합니다. 이 단축키를 누르면 아래처럼 화면 아래 Search:라고 나옵니다.

검색 입력란에 ;date.timezone = 을 입력했다

 이렇게 Search: 입력 상자가 나오면 위 처럼 찾으려는 글자를 입력후 엔터키를 눌러주면 아래 그림 처럼 해당 텍스트가 위치한 곳으로 커서가 이동합니다.

;date.timezone = 이라고 써진 라인으로 이동된 모습

위 화면과는 다르게 찾는 글자가 없다면 화면 아래쪽에 “찾는 단어” not found 메시지가 나올 겁니다. 만일 같은글자가 다른 위치에도 여럿 있는지 확인하려면 두 번째 찾기 부터는 control + w > 엔터키 를 연속 해 눌러가면서 다음찾기를 수행할 수 있습니다. 두번째 찾기 단축키부터는 아래그림 처럼 나옵니다.

Search 입력상자의 [] 사이에 단어가 현재 찾고 있는 단어이고 그대로 엔터키를 누르면 현재 커서위치 밑으로 그 단어를 다시 찾아보게 되는 것이고, 위의 입력상자에 새로운 단어를 입력하고 엔터키를 누르면 그 단어로 다시 찾게 됩니다.

M- 메타키를 포함하는 nano 에디터 메뉴 단축키

그리고 위 화면의 아래쪽 단축키 안내가 바뀐걸 볼 수 있는데요. Search 입력상자가 나왔을 때 사용할 수 있는 단축키들이 새로 생긴걸 볼 수 있습니다. 특히 M-C 처럼 M-가 붙은 단축키가 있죠? 여기서 M 은 control 키같은 modify 키인데 메타키(meta key)라고 합니다. 위 그림에 나타난 메뉴 단축키에서 M-B 는 메타키를 누른다음 B키를 누르라는 단축키인데요. 안타깝게 현시대 우리가 가진 일반적인 키보드상에는 메타키를 찾아 볼 수 없습니다. 

sun 키보드의 일부분
Sun의 키보드에 있는 메타키. 스페이스바와 Compose 키사이에 다이아몬드 기호가 붙은게 meta key이다

그래서 보통 윈도우 컴퓨터에서는 Alt 키가 위의 메타키를 대신하고, macOS(맥북, 아이맥)에서는 Alt키에 해당되는게 Option 키이지만 Option키는 이미 다른 용도로 쓰이므로 ESC키가 메타키를 대신합니다.

그래서 M-C 는 윈도우에서는 Alt, C를 순서대로 눌러주면 되고, 맥에서는 ESC, C를 순서대로 눌러주면 Case Sens(대소문자 구분)이라는 검색 메뉴를 사용할 수 있는 것이죠. 아래처럼 표현됩니다

나노 에디터에 검색어 입력

이렇게 Search에 대소문자 구분해서 검색하는 옵션이 붙었으니 새롭게 찾을 단어인 The phprc는 파일에서 찾을 수 없게 되겠죠.

Search 상태에서 메뉴 옵션

  • M-C: Case Sensitive 대소문자구분
  • M-B: 커서 위치상 위로 거슬러 역순으로 검색
  • M-R: Regexp – 정규식으로 규칙을 작성하여 검색(고급사용자)
  • control + \(백슬래시키) : 찾아서 바꾸기.

찾아서 바꾸기 ^\

위의 옵션중에 찾아서 바꾸기는 꼭 Search 입력상태에 먼저 들어서야 쓸 수 있는 건 아니며 대소문자 구분같은 옵션을 덧붙여서도 사용 가능합니다. control + \ 키를 누르고 아래처럼 Searrch (to replace): 입력상자가 나타나면 검색할 글자를 입력해주고 엔터키를 눌러주세요.nano editor 찾아 바꾸기 입력창

아래처럼 Replace with: 입력칸이 나타나면 찾을 글자를 입력한 뒤 엔터키를 누릅니다.

나노 에디터 검색 후 찾기

그럼 아래처럼 첫번째로 찾은 곳을 하이라이트 해주고 Replace this instance? 질문이 나옵니다. 여기에서 A키를 누르면 현재 문서에서 찾을 수 있는  모든 글자를 바로 바꿔버립니다. 혹은 하나하나  확인하고 싶다면 하이라이트 된 글자를 보면서 바꿀거라면 y키, 건너뛰려면 n키를 누릅니다.

찾은 텍스트가 블록처리 되어있다

모두 종료되면 끝으로 Replaced 2 occurrence 라는 상태메시지가 나타나는데 2군데를 찾아 변경했다는 뜻입니다.

텍스트 일부 선택, 잘라내기, 복사 후 붙여넣기

나노 편집기에서 파일 내용 중 텍스트 일부를 선택하고 복사, 붙여넣는 건 아래의 3개 단축키로 가능합니다.

  • M-A: 선택 블록 시작점 지정(Mark Set)
    • 윈도우: Alt + a, ESC, a
    • 그 후에 방향키나 Home, End, 마우스 스크롤등으로 텍스트 블록 선택영역을 지정. 
  • M-^: 선택영역 클립보드에 복사
    •  윈도우: Alt+또는 Shift 포함. 맥북: ESC, 6 또는 Shift 포함)
  • Ctrl k: 선택한 텍스트 잘라내기. 선택블록이 없으면 한줄 전체 잘라내기
  • Ctrl+u: 클립보드 내용을 붙여넣기 

먼저 글자 선택을 시작하려는 위치에 커서를 놓고 M-A 단축키(윈도우에서는 Alt + a, 맥에서는 ESC, a)를 누르면 화면아래 상태창에 Mark Set 이라는 상태가 나타납니다. 이 때부터는 커서를 이동해서 텍스트 블록을 지정할 수 있습니다.

나노 에디터 텍스트 선택 시작mark set 후 텍스트 블록 선택

 위처럼 텍스트 블록이 선택된 상태에서 다시 한번 M-A 단축키를 누르면 Mark Set이 취소되는 것이고 M-^ 단축키 (윈도우에서는 Alt+또는 Shift 포함. 맥에서는 ESC, 6 또는 Shift 포함)을 누르면 클립보드에 복사되면서 Mark Set상태가 해제됩니다. 그런다음 붙여넣을 위치에 커서를 놓고 control + u 를 누르면 글자가 붙여넣어 집니다.

Delete: 한 줄 삭제 또는 선택된 텍스트 삭제

위처럼 Mark Set으로 텍스트 블록이 선택된 상태에서 control + k 를 누르면 선택한 블록이 삭제되고, 텍스트 블록이 선택되지 않았다면 커서가 위치한 줄 전체가 삭제됩니다.

Undo 와 Redo

나노 에디터 2.3.5버전 부터는 실행취소(undo,언두)와 재실행(redo,리두)이 생겼다고 합니다. 단축키는 아래와 같습니다.

  • M-U: Undo. 윈도우에서는 Alt + u, 맥에서는 ESC + u
  • M-E: Redo. 윈도우에서는 Alt + e, 맥에서는 ESC + e

다음단계

 nano에 익숙해진 뒤 CLI에 적응이 완료되면 기능이 많고 커스터마이징이 가능한 vim, emacs 처럼 속칭, 고오오급지다는 것들을 찾게됩니다. 누군가가 임베디드 프로그래밍에도 관심있으면 처음부터 vi 쓰라더군요. 서버관리자 뿐만 아니라 그쪽도 고전적인가 봐요. vi 에디터가 1976년에 만들어졌다고 하는데 위에 잡설에서 얘기한 CLI가 얼마나 구시대 유물인지 감을 잡을 수 있는 대목입니다.(스타크래프트 1 보다도 22년 빠름 ?)

참고: vim은 텍스트 에디팅의 기본 기능만 있는 vi의 상위버전으로 커스터마이징 가능한 각종 기능이 있습니다. 현대시대 리눅스에는 vim만 설치되어있으며 vi , vim 명령어 어느것을 쓰든 vim이 실행됩니다.

 기초 사용자로서 이글에 기술한 정도만 자유롭게 익히면 nano editor를 사용해서 파일을 수정하는데 큰 어려움이 없을 것이고, 이미 훌륭합니다. 이 이상의 기능을 원한다면  vim이나 emacs 같은 더 많은 기능이 있는 상급 에디터로 갈아타는걸 추천하는데, CLI 상에서 코딩할 게 아니라면 그 조차도 딱히 필요는 없다고 생각합니다. 솔직히, vim과 emacs는 어렵거든요. 커서이동키가 h,j,k,l 인것부터 이해불가. 꼬여가는 손가락.

연결된 글

1 개의 댓글

  1. 운영자님 홈페이지 머시씀

    메뉴~ 썸네일 동영상도 잡히네 ㅎㄷㄷ

    검색할 때 미리 검색되는것도 좋고

    그건 어케하는걸깡

    브러워서 댓글저꾸 감

댓글은 익명이나 SNS, wordpress.com 로그인 지원). 마크다운 문법 사용가능(Shift+~ 키로 특정문구 혹은 위아래 ~~~으로감싸서 여러줄을 코드블락으로 작성)