안녕하세요 마무입니다~
오늘은 누군가는 고대했을 "vi vim 차이", "gedit", "vi 명령모드", "vi 입력모드", "vi 마지막 행 모드, 라인 모드" 라는 것에 대해서 포스팅 하려합니다.
사실 리눅스에서 "vi"라는 것은 필수라고도 할 수 있는 명령어이자 프로그램 인데요.
리눅스를 배우는 입장에선 처음으로 부딪히는 난관이기도 합니다!
하지만 쓸데없는 옵션들을 외워야 한다는 강박때문에 어려운 것이지 필요한 내용만 보면 그리 어렵지 않으니!! 제가 쉽게 설명할테니 마음 가볍게 먹고 시작해보자구요!
**이 포스트를 이해하기 위해 필요한 지식**
CLI, TUI, GUI 차이 : https://mamu2830.blogspot.com/2019/07/vmware.html
--목차--
1. vi와 vim 그리고 gedit의 차이
2. "vi"의 명령 모드(command mode), 입력 모드(insert mode), 마지막 행 모드(Last line mode)란?
3. 중간 압축 정리
4. 이것만 알면 "vi"사용 가능!
5. 알아두면 좋은 "vi" 명령키와 명령어들
6. vim을 vi로 쓰는 법, vi 행번호 자동으로 출력되게 세팅하기
입니다.
--------
1. vi와 vim 그리고 gedit의 차이
vi(visual editor)는 파일의 내용을 보여줌과 동시에 파일의 내용을 편집할 수 있게 해주는 프로그램(텍스트 에디터)입니다.
vim(vi improved)이란 영어의 줄임말로 말 그대로 vi의 업그레이드 버젼입니다. 실제로 사용해보면 가장 많이 눈에 띄는 특징은 기존에 vi는 글자가 모두 같은 색인 것에 비해, "vim"은 설정파일의 특정 위치에 있는 단어나, 의미있는 특별한 단어를 다른 색으로 표시해줘서 저희들이 더욱 보기 쉽게 해주는 것이라고 할 수 있습니다.
gedit(GNOME Editor) 은 현재 리눅스 GUI환경에서 사용하는 텍스트 에디터(글들을 수정할 때 쓰는 프로그램)입니다. 그냥 "윈도우의 메모장"과 같은 거에요.
그럼 "gedit"과 "vi"는 차이가 뭐냐? "vi,vim"은 TUI, GUI, CLI 환경 모두에서 사용이 가능한 것이고 이 "gedit"은 GUI환경에서만 사용이 가능한 프로그램입니다.
"vi, vim, gedit"에 대해서 말로만 들으면 별로 차이가 안느껴질테니 사진으로 보여드리며
설명해 드리겠습니다.
--vi--
이 /etc/named.conf라는 파일은 나중에 여러분들이 리눅스 마스터 1급 범위를 공부하실 때 초반에 배우실 DNS(Domain Name server)설정을 할 때 쓰이는 파일인데요 이 파일을
"vi"로 열어서 확인해보시면
이렇게 뭔가 전부 똑같은 검은색이라서 뭔가 특징적인게 눈에 안띄고 구분하기 힘들죠.. 또 눈에 확 안들어오구요.
파일의 페이지를 밑으로 내리면 나오는 특징적 단어들도 어떠한 표시가 없습니다.
하지만
--vim--
vi와 vim 사용 방법은 동일합니다, vi의 업그레이드 버젼 "vim"으로 열면
vi와는 다르게 주석인 글들은 파란색으로 표시돼 쉽게 구분이 되고
이렇게 어떤 의미를 갖는 특정 위치의 글들은 다른 색깔로 표현해, 잘못된 위치에 글을 적거나 하면 바로 알 수 있게 해줍니다.
당연하게도 "vim"이 더 좋기 때문에 대부분 유저들은 "vim"을 사용합니다. 그런데 "vim"으로 쓰기보단 "alias" 명령어로 "etc/bashrc"나 ".bashrc"에 "vi"로 등록해 사용하기 때문에, vim이든 vi든 걍 통틀어서 "vi"라고 부르곤 합니다.
--gedit--
"gedit"도 쓰는 방법은 vi와 동일하기 때문에 , 터미널에서 파일명을 적고 엔터를 누르면
이렇게 "vim"처럼 나옵니다.
밑으로 좀 내리면 vim보단 색이 좀 덜 다채롭습니다. "vim"이 좀 더 좋다는 걸 알 수 있죠.
여기서 "gedit"은 "GUI환경용 프로그램"이라 vi처럼 esc를 누른 뒤 ":wq" 로 못 끄기에,
직접 마우스로 오른쪽 상단 X를 눌러줘서 꺼야합니다.(CLI, TUI환경에 익숙한 사람은 마우스를 움직여야 한다는게 너무 귀찮죠 으어.)
여기서 리눅스를 배운지 얼마 안되신 분들은 GUI환경에 익숙하기 때문에 분명
"에...그냥 GUI환경 gedit을 vi대신 쓰면 안되나? vi배우기 귀찮은데..." 이럴 분들
있을텐데... 그럼 안됩니다 ㅡ.ㅡ
왜냐하면 저희들이 배우는 "리눅스"는 주로 서버를 운영하기 위해 배우는 지식으로서
"서버"는 실제로 사용할 땐 자원을 많이 잡아먹는 "GUI환경"에서 사용하지 않고 "CLI", "TUI"환경에서 사용을 할 것이란 말이죠...
그리고 가장 큰 "gedit" 단점은 말했다시피 GUI환경용이라 "CLI환경"에서 작동이 안된다는 겁니다. 다시 말해서 원래 CLI 터미널 환경에서 사용을 못 한단 이야기죠.
"gedit" 외에도 GUI환경에서 작동되는 프로그램들은 CLI환경에서 전부 구동이 안되기 때문에 GUI환경에서 사용되는 명령어나 프로그램에 익숙해지면 안됩니다.(물론 알아두긴 해야겠죠?)
물론 현재 저희가 하는 방식인 리눅스 바탕화면에서 터미널을 켜서 하는 경우는 이미 리눅스 자체가 부팅이 "GUI"환경으로 부팅이 되어 있기에 터미널에 "gedit 파일이름" 이렇게
사용이 가능합니다만
위 사진이 진짜 "CLI환경"인 "ssh 원격접속"에서 "gedit"을 사용해보려한 흔적입니다. 위 사진을 보시면 경고가 뜨며 사용이 안되죠? 이처럼 GUI환경 프로그램은 CLI환경에서 저런 경고가 뜨며 실행이 안됩니다.
여기까지 내용을 간단히 정리하자면, "vim"은 "vi"의 업그레이드 버젼, "gedit"은 윈도우의 메모장과 같은 "리눅스 GUI환경 메모장"이라고 알아두시면 됩니다.
2. "vi"의 명령 모드(command mode), 입력 모드(insert mode), 마지막 행 모드(Last line mode)란?
vi를 배울 때 사실 이 3가지 용어 때문에 더 어렵게 느껴지는 것 같습니다.
솔직히 알고나면 별 것도 아닌데 괜히 구분해서 더 헷갈리게 만들죠..
저는 솔직히 왜 "명령 모드"랑 "라인 모드"를 구분하는 지 모르겠습니다만... 시험에선
굳이 "마지막 라인 모드에서", "명령 모드에서" 이렇게 나오니 저도 그냥 그렇게 설명하겠습니다.
"명령모드(command mode)" 란 말 그대로 저희들이 vi에서 키보드로 입력하는 것이 모두문자가 아닌, 어떤 기능을 가진 단축기로서 실행되는 모드라고 보시면 됩니다.
명령모드에선 키보드 "i" 를 눌렀을 때 실제 저희가 아는 문자 'i'가 적히는게 아니라 vi의 "입력모드로 바뀌는 단축키 i(inset mode)"가 실행된다는 거죠.
단축키를 사용해 입력모드로 갔을 때, 다시 명령모드로 돌아오는 방법은 키보드의 ESC(Escape)키를 누르면 명령모드로 돌아옵니다.
"입력모드(insert mode)"란 저희들이 글을 insert, 즉 글을 적을 수 있는 "편집 모드"라고 보시면 됩니다.
이 때는 말 그대로 입력모드이기 때문에 저희가 어떤 문자가 있는 키보드 키를 눌러도 모두 글자로 취급됩니다. 물론 "ESC"키나 "Backspace ←"키 같이 문자의미가 없는 키는 빼고요
명령모드에서 키보드의 "insert" 키를 누르거나 "i(insert)"키를 누르면 입력모드가 됩니다.
"마지막 행 모드(Last line mode) 또는 ex 명령모드"란 마지막 라인, 즉 CLI환경처럼 화면 맨 밑(마지막 행에) 명령어를 칠 수 있는 줄이 나오는 모드라고 보시면 됩니다.
기억 나실진 모르겠지만 제가 "리눅스 설치편"에서 GUI, TUI, CLI개념을 설명 드릴 때, "vi"는 키보드만 사용할 수 있는 "TUI"환경이라고 했었죠? 그래서 명령어를 칠 수 있는 공간이 애초에 없습니다.
그런데 문자가 아닌 명령어로 해석되는 명령모드에서 ":"를 누르면 화면 마지막인 맨 밑에 명령어를 칠 수 있는 줄이 나옵니다. 그래서 "마지막 행 모드(라인 모드)" 라고 부르는 겁니다.
3. 중간 압축 정리
어우.. 글이 너무 길어서 헷갈리시죠... 그냥 그림과 함께 다시 간단히 정리하자면
"명령모드"는 저희가 어떤 키보드 키를 누르던 문자가 아닌 "어떤 의미를 가진 단축키"로 해석되는 모드이고, 왼쪽하단에 아무것도 없으면 명령모드 입니다.
위 사진은 "vi(vim)"을 쓴 모습입니다.
왼쪽 하단에 아무것도 없죠? 이런 모습이면 막 vi로 들어왔거나, ESC단축키를 눌러서 온
"명령모드"다~
"입력모드"는 저희가 누르는 "문자가 있는 모든 키보드 키가 문자로 인식되는 모드"이고, 왼쪽 하단에 --insert-- 또는 --끼워넣기-- 가 뜨면 입력모드 입니다.
자 이렇게 왼쪽 하단에 "INSERT" 또는 "끼워넣기"가 뜬다는 건
지금 저희가 명령모드에서 "i"또는 "insert"키를 눌러 "입력모드"에 왔다는 겁니다.
"마지막 행 모드" 또는 "라인 모드, ex 명령모드"는 CLI환경처럼 화면 맨 밑에(마지막에) 명령어를 칠 수 있는 라인이 하나 생기는 모드입니다.
이렇게 말이죠.
자 그림을 다시보고 각 모드의 상관관계를 보자면
저희가 "마지막 라인 모드" 로 가려면 ":"를 눌러야 하는데 "입력모드"에서 ':'를 누르면
그냥 문자 ':' 로 인식이 되겠죠?
그래서 일반 문자가 아닌 "마지막 라인 모드"로 가는 ":"로 쓰기 위해 ESC를 눌러 명령모드로 간 뒤, ":"를 눌러서 마지막 라인 모드로 가는 겁니다.
그럼 "입력모드"로 갈 땐 어떨까요? 내용을 적어야 하는데 "마지막 라인 모드"에선
키보드 타이핑을 하면 마지막 라인, 즉 명령어 줄에 적힐 거 아닙니까?
그래서 "ESC"를 눌러 명령모드로 간 뒤에 insert키나 i를 눌러 입력모드로 바꾸고 파일의 내용을 적는 겁니다.
4. 이것만 알면 "vi"사용 가능!
"vi"를 사용할 땐 많이 알 필요가 없습니다. 학원 같은 곳을 가면 별의 별 옵션을 전부다 배워서 헷갈리고 안 외워지는데, 그런 시험용 잡다한 옵션 및 vi 명령어는 나중에 리눅스 실력이 좋아졌을 때 나중에 외우는게 더 잘 외워집니다.
그리고 그런 옵션들은 제가 독학 포스팅을 다 한뒤 시험에 초점을 둔 포스트로 따로 정리 할 겁니다.
1. "vi(vim) [옵션] [파일]" : 기존에 있는 파일이름이면 파일을 열고, 없는 파일이면 뒤에 적은 위치에 적은 이름으로 파일을 하나 생성하고 연다.
/*[옵션]은 거의 쓸 일이 없으므로 나중에 시험에 초점을 둔 포스트에 정리하겠습니다.*/
ex) vi /etc/named.conf(있는 파일) --> /etc/named.conf파일을 vi로 염
vi /etc/akbb(없는 파일) --> /etc/에 akbb라는 파일을 만들고 vi로 염
/etc/akbb 라는 파일을 vi로 만든 모습(현재는 명령모드)
2. 키보드 방향키 "←↑↓→ " : 방향키 방향으로 커서가 움직입니다. (모든 모드에서 다 됨)
3. PgUp(Page Up) , PgDn(Page Down) 키를 누르면 한 페이지 위 또는 아래로 이동(라인모드 제외)
4. 명령모드에서 쓸만한 명령어 키
"insert" 또는 "i" : 명령 모드에서 현재 커서로 입력모드로 바뀌는 명령어 입니다.
":" : 명령모드에서 마지막 라인 모드(라인 모드)로 바뀌는 명령어 입니다.
어떤 모드에서든 ESC(Escape) 키를 누르면 오는 명령모드는
이렇게 왼쪽 하단에 아~무것도 없습니다. 왼쪽 하단에 아무것도 없으면 명령모드라고
생각하시면 돼요.
4. 입력모드에서 쓸만한 키
명령모드에서 "insert" 또는 "i" 키로 들어오는 입력모드는 정말 쉽습니다.
입력모드로 들어오면 왼쪽 하단에
이렇게 --INSERT--라고 뜨거나
이렇게 --끼워넣기--라고 뜹니다.
입력모드를 쓰는 법은 저희들이 윈도우에서 메모장을 쓰듯이 똑같이 쓰면 됩니다.
그냥 방향키 "←↑↓→"으로 원하는 장소로 이동한 다음 쓸 내용을 타이핑하거나 "backspace ←"로 지우거나 "스페이스바"로 띄어쓰기 하면 된다는 겁니다.
ESC(Escape) : 누르면 명령모드로 돌아가는 키보드 키입니다.
5. 마지막 라인 모드에서 쓸만한 키
":" : 명령모드에서 "라인 모드로 바뀌는 명령 단축기"로 누르면
이렇게 왼쪽 하단에 ":" 가 생기면서 그 옆으로 명령어를 적을 수 있는 공간(라인)이 생깁니다. 그러니 라인모드는 모두 ":"으로 시작하겠죠?
":w(write)" : 내용을 저장하겠다는 뜻인데, 그냥 write 뜻대로 "나 다 썼어~" 이렇게 기억하시면 좋습니다.
원래는 파일을 바꿀 수 있는 "w"권한이 없을 경우 저장을 못하는 게 정상인데도 가끔 "읽기 전용 파일입니다. 강제로 저장하려면 !를 붙이세요" 와 같은 글이 나오면서 !를 붙여 파일을 강제로 바꿀 수 있는 경우가 있거든요? , 이건 파일이 속한 디렉토리에 "w"권한이 있어서 이렇게 할 수 있는 겁니다. "파일의 권한 rwx" 부분에서 다뤘던 내용인데 자세히 모를 경우
https://mamu2830.blogspot.com/2019/09/rwx.html
이 곳을 다시 보고오시면 될 것 같습니다 ㅎㅎ
":q(quit)" : 나가겠다는 뜻의 quit의 "q"로 ":q"하고 엔터를 누르면 파일에서 나가집니다.
그러나 파일의 내용이 바뀌었으면
저장한 뒤 나가거나 "!"를 추가해 :q!하지 않으면 나가지 못 합니다.
":!" : "w"나 "q"와 함께 쓰이면 "강제로 하겠다" 는 뜻이고 , 단독으로 쓰이면 뒤에 적은 "터미널 명령"을 수행하라는 기호입니다.
":! [터미널 명령어]" 를 하면 현재 저희가 수행하던 "vi"를 백그라운드(눈에서 보이지 않게 실행되는 프로세스)로 넘겨버리고 터미널 명령어를 수행합니다 물론 명령을 수행한 뒤
"enter"나 아무 키를 누르면 다시 vi로 돌아옵니다
예로들어서 vi를 하던 중 ":! ls"나 ":!ls" 하면 현재 유저가 위치한 디렉토리 내 파일들을 보여주고 "enter"를 누르거나 아무 키나 누르면 다시 vi로 돌아오는 거죠
이렇게 ":! ls"를 하면
이렇게 되고 엔터나 아무 키를 누르면 다시 vi로 돌아옵니다.
라인모드 명령어는 ":" 하나만 쓰면 되고 그 옆에 나머지 명령어들은 붙여 쓸 수 있습니다. ":wq!" 이렇게 말이죠
":set nu(set number)" : 행에 번호를 붙입니다 .
이렇게 치면
이렇게 행 번호가 생깁니다.
"set nonu(set no number)" : 행에 번호를 제거합니다.
이렇게 :set nonu하면
이렇게 다시 행 번호가 사라집니다.
솔직히 여기까지만 알아도 vi를 쓰는 데 전~~혀 문제가 없습니다.
바로 다음에 알아두면 좋은 명령모드의 단축키와 마지막 행 모드 명령어를 알려드릴 건데,
별로 쓰이진 않지만 시험에 나올 수 있는 옵션들은 나중에 리눅스 마스터 시험용 정리 포스트를 쓸 때 정리하겠습니다.
5. 알아두면 좋은 "vi" 단축키와 명령어들
--명령모드에서--
"yy(yank yank)" : 키보드 "y"키를 두번 누르는 것으로 현재 커서가 있는 한 줄을
복사(버퍼에 저장) 합니다. yank의 뜻은 "a quick forceful pull of someting" 대로 "재빠르게 한 줄을 버퍼로 가져온다 = 복사" 라고 생각하시면 됩니다.
버퍼라는게 뭔지 궁금하신 분들을 위해 잠깐 설명을 하자면 버퍼란 "임시저장 공간"이라고
보시면 됩니다 .그래서 "yy"로 버퍼(임시저장 공간)에 한 줄의 내용을 저장한 뒤
붙여넣기를 하면 그 공간에 저장된 내용을 가져와서 붙이는거죠.
"p(paste)" : paste대로 커서 다음 줄에 "yy"로 복사한 내용을 "붙여"넣습니다.
"dd(delete delete)" : 키보드 "d"를 더블 누르는 것으로, 커서가 있는 한 줄을 제거합니다.
왜 d를 두번이나 누르냐고요? 그냥 "d" 하나에도 기능이 있기 때문에요. "d"를 누르고
"←→"를 누르면 그 방향의 글자를 하나 지우고 "↑↓"를 누르면 커서가 있는 현재 줄과
그 방향 한 줄을 지워버립니다. 솔직히 너무 헷갈리고 위험해서 "d"하나는 쓰지 않고
"dd"만 씁니다. "d"쓸 바엔 입력모드로 가서 Backspace로 하나하나 지우는게 낫죠
"u(undo)" : 전에 했던 행위를 복구합니다. 윈도우에서 "ctrl + z"라고 생각하시면 돼요~
"[번호] + shift + g" : 입력한 번호의 행 시작부분으로 커서가 이동합니다 , 만약 앞에 아무런 번호를 입력하지 않았으면 페이지 맨 끝 행으로 이동합니다.
--마지막 라인 모드에서--
"/[찾고 싶은 문자]" : 파일 내 찾고싶은 문자를 모두 찾아줍니다. "n"을 누르면 한 개씩 아래로 커서가, 찾은 문자로 이동합니다.
"?[찾고 싶은 문자]" : "/[문자]"와 기능이 동일한데 "n"을 눌렀을 때 "/"와 다르게 현재 커서 위로 한 개씩 이동합니다.
"입력모드"는 더 알 게 없습니다.
6. vim을 vi로 쓰는 법, vi 행번호 자동으로 출력되게 세팅하기
일단 당연하게도 vim을 치는 것보단 vi를 치는게 훨씬 편해서 다들 "alias"로 등록해둔다고
말했었죠?
이 "alias"를 설정하는 부분은
https://mamu2830.blogspot.com/2019/07/3.html#index%202 의
ii).bashrc에 있으므로 이 곳에서 보고 오시면 되겠습니다.
"vi"의 행 번호 자동 출력같은 경우, 나중에 저희가 리눅스 2(리눅스 마스터 1급 범위)를 다루면 여러 파일들의 설정파일을 엄청 다룰텐데 그 때마다 설정파일의 옵션위치를 행 번호를 통해 많이 참조하거든요.
그래서 파일을 vi로 열 때마다 행 번호를 알기 위해 ":set nu" 를 일일이 쳐야하는데 이게 너무 귀찮기 때문에 그냥 vi로 열자마자 ":set nu"가 되게 바꿀 겁니다.
어떻게 해야할 까요? 당연하게도 "vim"도 프로그램이기 때문에 설정파일이 있습니다.
바로 "vimrc(vim run commands)"라는 파일이죠 보통 파일 뒤에 "rc"가 붙은 파일은
run commands 라는 뜻대로 "그 파일이 실행될 때 자동으로 실행되는 명령어"들이 적혀있다고 보시면 됩니다.
같은 예시론 /etc/bashrc와 .bashrc등등이 있죠
자 그럼 "vim설정파일 vimrc"는 어디에 있을까요? 저희가 리눅스전체에서 쓰이는 프로그램의 설정파일은 어떤 디렉토리에 있다고 "상위 디렉토리" 포스트에서 다뤘었는데
기억이 안나신다면 한 번 보고오시는 것도 좋을 것 같습니다 ㅎㅎ
https://mamu2830.blogspot.com/search/label/%EC%83%81%EC%9C%84%20%EB%94%94%EB%A0%89%ED%86%A0%EB%A6%AC%20%EC%9D%B4%EB%A6%84%EA%B3%BC%20%EC%9A%A9%EB%8F%84
하지만 저 긴 포스트를 다 읽긴 귀찮으실테니 바로 정답을 알려드리자면,
리눅스 전체에서 쓰이는 프로그램의 설정파일은 /etc/에 있습니다.
그럼 cd로 /etc/에 이동하여 "vimrc"란 설정파일이 있나 볼까요?
네 저기에 vim 설정파일 "vimrc"와 vi 설정파일 "virc"가 보이네요
참고로 아까 말했다 싶이 /etc/에 있는 설정파일은 "모든 시스템에 쓰이는 프로그램 설정파일"이기 때문에, 여기에서 설정을 바꾸면 리눅스 전체시스템에 영향이 갑니다.
그래서 저희가 여기 "/etc/vimrc"에 ":set nu" 를 지정하면 root뿐만 아니라
모든 유저가 전부 자동으로 vim쓸 때마다 :set nu이 설정이 됩니다.
이렇게 /etc/로 이동한 다음 vim(vi)로 vimrc를 열어준 다음 보시면
뭐 이렇게 행 번호 없이 여러 기본 세팅 명령어들이 있습니다.
여기서 딴 거 건들지 마시고 "shift + g" 를 눌러 맨 끝으로 이동합니다. 그리고 "i"나 "insert"키로 입력모드로 바꾼 후 엔터를 눌러 다음 행으로 이동해
이렇게 ":set nu"라고 써주고, "ESC"를 눌러 입력모드를 나간 뒤(명령모드로 간 뒤)
":"를 눌러 라인모드로 들어가 ":wq(write and quit)"을 타이핑해서 저장하고 나가줍니다.
그리고 이제 적용이 됐나 확인하기 위해 다시 "vim"으로 아무 파일이나 열어봅니다.
전 귀찮으니 다시 "vim vimrc"하겠습니다.
그러면
이렇게 행 번호가 자동으로 세팅 돼 있는 걸 확인 할 수 있습니다~
이야 오늘도 화장실 가는 시간 제외하고 풀 집중해서 6시간 30분만에 포스팅을 끝냈네요..
꼭 도움이 됐으면 좋겠네요 ㅠㅠ
도움이 되셨으면 구글 블로그 팔로우, 네이버 블로그 공감 클릭 해주시면
정말 큰 도움이 됩니다!!
혹시나 오타나 잘못된 내용이 있으면 댓글로 알려주세요, 바로 수정하겠습니다.
이상 마무였습니다~
오늘은 누군가는 고대했을 "vi vim 차이", "gedit", "vi 명령모드", "vi 입력모드", "vi 마지막 행 모드, 라인 모드" 라는 것에 대해서 포스팅 하려합니다.
사실 리눅스에서 "vi"라는 것은 필수라고도 할 수 있는 명령어이자 프로그램 인데요.
리눅스를 배우는 입장에선 처음으로 부딪히는 난관이기도 합니다!
하지만 쓸데없는 옵션들을 외워야 한다는 강박때문에 어려운 것이지 필요한 내용만 보면 그리 어렵지 않으니!! 제가 쉽게 설명할테니 마음 가볍게 먹고 시작해보자구요!
**이 포스트를 이해하기 위해 필요한 지식**
CLI, TUI, GUI 차이 : https://mamu2830.blogspot.com/2019/07/vmware.html
--목차--
1. vi와 vim 그리고 gedit의 차이
2. "vi"의 명령 모드(command mode), 입력 모드(insert mode), 마지막 행 모드(Last line mode)란?
3. 중간 압축 정리
4. 이것만 알면 "vi"사용 가능!
5. 알아두면 좋은 "vi" 명령키와 명령어들
6. vim을 vi로 쓰는 법, vi 행번호 자동으로 출력되게 세팅하기
입니다.
--------
1. vi와 vim 그리고 gedit의 차이
vi(visual editor)는 파일의 내용을 보여줌과 동시에 파일의 내용을 편집할 수 있게 해주는 프로그램(텍스트 에디터)입니다.
vim(vi improved)이란 영어의 줄임말로 말 그대로 vi의 업그레이드 버젼입니다. 실제로 사용해보면 가장 많이 눈에 띄는 특징은 기존에 vi는 글자가 모두 같은 색인 것에 비해, "vim"은 설정파일의 특정 위치에 있는 단어나, 의미있는 특별한 단어를 다른 색으로 표시해줘서 저희들이 더욱 보기 쉽게 해주는 것이라고 할 수 있습니다.
gedit(GNOME Editor) 은 현재 리눅스 GUI환경에서 사용하는 텍스트 에디터(글들을 수정할 때 쓰는 프로그램)입니다. 그냥 "윈도우의 메모장"과 같은 거에요.
그럼 "gedit"과 "vi"는 차이가 뭐냐? "vi,vim"은 TUI, GUI, CLI 환경 모두에서 사용이 가능한 것이고 이 "gedit"은 GUI환경에서만 사용이 가능한 프로그램입니다.
"vi, vim, gedit"에 대해서 말로만 들으면 별로 차이가 안느껴질테니 사진으로 보여드리며
설명해 드리겠습니다.
--vi--
이 /etc/named.conf라는 파일은 나중에 여러분들이 리눅스 마스터 1급 범위를 공부하실 때 초반에 배우실 DNS(Domain Name server)설정을 할 때 쓰이는 파일인데요 이 파일을
"vi"로 열어서 확인해보시면
이렇게 뭔가 전부 똑같은 검은색이라서 뭔가 특징적인게 눈에 안띄고 구분하기 힘들죠.. 또 눈에 확 안들어오구요.
파일의 페이지를 밑으로 내리면 나오는 특징적 단어들도 어떠한 표시가 없습니다.
하지만
--vim--
vi와 vim 사용 방법은 동일합니다, vi의 업그레이드 버젼 "vim"으로 열면
vi와는 다르게 주석인 글들은 파란색으로 표시돼 쉽게 구분이 되고
이렇게 어떤 의미를 갖는 특정 위치의 글들은 다른 색깔로 표현해, 잘못된 위치에 글을 적거나 하면 바로 알 수 있게 해줍니다.
당연하게도 "vim"이 더 좋기 때문에 대부분 유저들은 "vim"을 사용합니다. 그런데 "vim"으로 쓰기보단 "alias" 명령어로 "etc/bashrc"나 ".bashrc"에 "vi"로 등록해 사용하기 때문에, vim이든 vi든 걍 통틀어서 "vi"라고 부르곤 합니다.
--gedit--
"gedit"도 쓰는 방법은 vi와 동일하기 때문에 , 터미널에서 파일명을 적고 엔터를 누르면
이렇게 "vim"처럼 나옵니다.
밑으로 좀 내리면 vim보단 색이 좀 덜 다채롭습니다. "vim"이 좀 더 좋다는 걸 알 수 있죠.
여기서 "gedit"은 "GUI환경용 프로그램"이라 vi처럼 esc를 누른 뒤 ":wq" 로 못 끄기에,
직접 마우스로 오른쪽 상단 X를 눌러줘서 꺼야합니다.(CLI, TUI환경에 익숙한 사람은 마우스를 움직여야 한다는게 너무 귀찮죠 으어.)
여기서 리눅스를 배운지 얼마 안되신 분들은 GUI환경에 익숙하기 때문에 분명
"에...그냥 GUI환경 gedit을 vi대신 쓰면 안되나? vi배우기 귀찮은데..." 이럴 분들
있을텐데... 그럼 안됩니다 ㅡ.ㅡ
왜냐하면 저희들이 배우는 "리눅스"는 주로 서버를 운영하기 위해 배우는 지식으로서
"서버"는 실제로 사용할 땐 자원을 많이 잡아먹는 "GUI환경"에서 사용하지 않고 "CLI", "TUI"환경에서 사용을 할 것이란 말이죠...
그리고 가장 큰 "gedit" 단점은 말했다시피 GUI환경용이라 "CLI환경"에서 작동이 안된다는 겁니다. 다시 말해서 원래 CLI 터미널 환경에서 사용을 못 한단 이야기죠.
"gedit" 외에도 GUI환경에서 작동되는 프로그램들은 CLI환경에서 전부 구동이 안되기 때문에 GUI환경에서 사용되는 명령어나 프로그램에 익숙해지면 안됩니다.(물론 알아두긴 해야겠죠?)
물론 현재 저희가 하는 방식인 리눅스 바탕화면에서 터미널을 켜서 하는 경우는 이미 리눅스 자체가 부팅이 "GUI"환경으로 부팅이 되어 있기에 터미널에 "gedit 파일이름" 이렇게
사용이 가능합니다만
위 사진이 진짜 "CLI환경"인 "ssh 원격접속"에서 "gedit"을 사용해보려한 흔적입니다. 위 사진을 보시면 경고가 뜨며 사용이 안되죠? 이처럼 GUI환경 프로그램은 CLI환경에서 저런 경고가 뜨며 실행이 안됩니다.
여기까지 내용을 간단히 정리하자면, "vim"은 "vi"의 업그레이드 버젼, "gedit"은 윈도우의 메모장과 같은 "리눅스 GUI환경 메모장"이라고 알아두시면 됩니다.
2. "vi"의 명령 모드(command mode), 입력 모드(insert mode), 마지막 행 모드(Last line mode)란?
vi를 배울 때 사실 이 3가지 용어 때문에 더 어렵게 느껴지는 것 같습니다.
솔직히 알고나면 별 것도 아닌데 괜히 구분해서 더 헷갈리게 만들죠..
저는 솔직히 왜 "명령 모드"랑 "라인 모드"를 구분하는 지 모르겠습니다만... 시험에선
굳이 "마지막 라인 모드에서", "명령 모드에서" 이렇게 나오니 저도 그냥 그렇게 설명하겠습니다.
"명령모드(command mode)" 란 말 그대로 저희들이 vi에서 키보드로 입력하는 것이 모두문자가 아닌, 어떤 기능을 가진 단축기로서 실행되는 모드라고 보시면 됩니다.
명령모드에선 키보드 "i" 를 눌렀을 때 실제 저희가 아는 문자 'i'가 적히는게 아니라 vi의 "입력모드로 바뀌는 단축키 i(inset mode)"가 실행된다는 거죠.
단축키를 사용해 입력모드로 갔을 때, 다시 명령모드로 돌아오는 방법은 키보드의 ESC(Escape)키를 누르면 명령모드로 돌아옵니다.
"입력모드(insert mode)"란 저희들이 글을 insert, 즉 글을 적을 수 있는 "편집 모드"라고 보시면 됩니다.
이 때는 말 그대로 입력모드이기 때문에 저희가 어떤 문자가 있는 키보드 키를 눌러도 모두 글자로 취급됩니다. 물론 "ESC"키나 "Backspace ←"키 같이 문자의미가 없는 키는 빼고요
명령모드에서 키보드의 "insert" 키를 누르거나 "i(insert)"키를 누르면 입력모드가 됩니다.
"마지막 행 모드(Last line mode) 또는 ex 명령모드"란 마지막 라인, 즉 CLI환경처럼 화면 맨 밑(마지막 행에) 명령어를 칠 수 있는 줄이 나오는 모드라고 보시면 됩니다.
기억 나실진 모르겠지만 제가 "리눅스 설치편"에서 GUI, TUI, CLI개념을 설명 드릴 때, "vi"는 키보드만 사용할 수 있는 "TUI"환경이라고 했었죠? 그래서 명령어를 칠 수 있는 공간이 애초에 없습니다.
그런데 문자가 아닌 명령어로 해석되는 명령모드에서 ":"를 누르면 화면 마지막인 맨 밑에 명령어를 칠 수 있는 줄이 나옵니다. 그래서 "마지막 행 모드(라인 모드)" 라고 부르는 겁니다.
3. 중간 압축 정리
어우.. 글이 너무 길어서 헷갈리시죠... 그냥 그림과 함께 다시 간단히 정리하자면
"명령모드"는 저희가 어떤 키보드 키를 누르던 문자가 아닌 "어떤 의미를 가진 단축키"로 해석되는 모드이고, 왼쪽하단에 아무것도 없으면 명령모드 입니다.
위 사진은 "vi(vim)"을 쓴 모습입니다.
왼쪽 하단에 아무것도 없죠? 이런 모습이면 막 vi로 들어왔거나, ESC단축키를 눌러서 온
"명령모드"다~
"입력모드"는 저희가 누르는 "문자가 있는 모든 키보드 키가 문자로 인식되는 모드"이고, 왼쪽 하단에 --insert-- 또는 --끼워넣기-- 가 뜨면 입력모드 입니다.
자 이렇게 왼쪽 하단에 "INSERT" 또는 "끼워넣기"가 뜬다는 건
지금 저희가 명령모드에서 "i"또는 "insert"키를 눌러 "입력모드"에 왔다는 겁니다.
"마지막 행 모드" 또는 "라인 모드, ex 명령모드"는 CLI환경처럼 화면 맨 밑에(마지막에) 명령어를 칠 수 있는 라인이 하나 생기는 모드입니다.
이렇게 말이죠.
자 그림을 다시보고 각 모드의 상관관계를 보자면
저희가 "마지막 라인 모드" 로 가려면 ":"를 눌러야 하는데 "입력모드"에서 ':'를 누르면
그냥 문자 ':' 로 인식이 되겠죠?
그래서 일반 문자가 아닌 "마지막 라인 모드"로 가는 ":"로 쓰기 위해 ESC를 눌러 명령모드로 간 뒤, ":"를 눌러서 마지막 라인 모드로 가는 겁니다.
그럼 "입력모드"로 갈 땐 어떨까요? 내용을 적어야 하는데 "마지막 라인 모드"에선
키보드 타이핑을 하면 마지막 라인, 즉 명령어 줄에 적힐 거 아닙니까?
그래서 "ESC"를 눌러 명령모드로 간 뒤에 insert키나 i를 눌러 입력모드로 바꾸고 파일의 내용을 적는 겁니다.
4. 이것만 알면 "vi"사용 가능!
"vi"를 사용할 땐 많이 알 필요가 없습니다. 학원 같은 곳을 가면 별의 별 옵션을 전부다 배워서 헷갈리고 안 외워지는데, 그런 시험용 잡다한 옵션 및 vi 명령어는 나중에 리눅스 실력이 좋아졌을 때 나중에 외우는게 더 잘 외워집니다.
그리고 그런 옵션들은 제가 독학 포스팅을 다 한뒤 시험에 초점을 둔 포스트로 따로 정리 할 겁니다.
1. "vi(vim) [옵션] [파일]" : 기존에 있는 파일이름이면 파일을 열고, 없는 파일이면 뒤에 적은 위치에 적은 이름으로 파일을 하나 생성하고 연다.
/*[옵션]은 거의 쓸 일이 없으므로 나중에 시험에 초점을 둔 포스트에 정리하겠습니다.*/
ex) vi /etc/named.conf(있는 파일) --> /etc/named.conf파일을 vi로 염
vi /etc/akbb(없는 파일) --> /etc/에 akbb라는 파일을 만들고 vi로 염
/etc/akbb 라는 파일을 vi로 만든 모습(현재는 명령모드)
2. 키보드 방향키 "←↑↓→ " : 방향키 방향으로 커서가 움직입니다. (모든 모드에서 다 됨)
3. PgUp(Page Up) , PgDn(Page Down) 키를 누르면 한 페이지 위 또는 아래로 이동(라인모드 제외)
4. 명령모드에서 쓸만한 명령어 키
"insert" 또는 "i" : 명령 모드에서 현재 커서로 입력모드로 바뀌는 명령어 입니다.
":" : 명령모드에서 마지막 라인 모드(라인 모드)로 바뀌는 명령어 입니다.
어떤 모드에서든 ESC(Escape) 키를 누르면 오는 명령모드는
이렇게 왼쪽 하단에 아~무것도 없습니다. 왼쪽 하단에 아무것도 없으면 명령모드라고
생각하시면 돼요.
4. 입력모드에서 쓸만한 키
명령모드에서 "insert" 또는 "i" 키로 들어오는 입력모드는 정말 쉽습니다.
입력모드로 들어오면 왼쪽 하단에
이렇게 --INSERT--라고 뜨거나
이렇게 --끼워넣기--라고 뜹니다.
입력모드를 쓰는 법은 저희들이 윈도우에서 메모장을 쓰듯이 똑같이 쓰면 됩니다.
그냥 방향키 "←↑↓→"으로 원하는 장소로 이동한 다음 쓸 내용을 타이핑하거나 "backspace ←"로 지우거나 "스페이스바"로 띄어쓰기 하면 된다는 겁니다.
ESC(Escape) : 누르면 명령모드로 돌아가는 키보드 키입니다.
5. 마지막 라인 모드에서 쓸만한 키
":" : 명령모드에서 "라인 모드로 바뀌는 명령 단축기"로 누르면
이렇게 왼쪽 하단에 ":" 가 생기면서 그 옆으로 명령어를 적을 수 있는 공간(라인)이 생깁니다. 그러니 라인모드는 모두 ":"으로 시작하겠죠?
":w(write)" : 내용을 저장하겠다는 뜻인데, 그냥 write 뜻대로 "나 다 썼어~" 이렇게 기억하시면 좋습니다.
원래는 파일을 바꿀 수 있는 "w"권한이 없을 경우 저장을 못하는 게 정상인데도 가끔 "읽기 전용 파일입니다. 강제로 저장하려면 !를 붙이세요" 와 같은 글이 나오면서 !를 붙여 파일을 강제로 바꿀 수 있는 경우가 있거든요? , 이건 파일이 속한 디렉토리에 "w"권한이 있어서 이렇게 할 수 있는 겁니다. "파일의 권한 rwx" 부분에서 다뤘던 내용인데 자세히 모를 경우
https://mamu2830.blogspot.com/2019/09/rwx.html
이 곳을 다시 보고오시면 될 것 같습니다 ㅎㅎ
":q(quit)" : 나가겠다는 뜻의 quit의 "q"로 ":q"하고 엔터를 누르면 파일에서 나가집니다.
그러나 파일의 내용이 바뀌었으면
저장한 뒤 나가거나 "!"를 추가해 :q!하지 않으면 나가지 못 합니다.
":!" : "w"나 "q"와 함께 쓰이면 "강제로 하겠다" 는 뜻이고 , 단독으로 쓰이면 뒤에 적은 "터미널 명령"을 수행하라는 기호입니다.
":! [터미널 명령어]" 를 하면 현재 저희가 수행하던 "vi"를 백그라운드(눈에서 보이지 않게 실행되는 프로세스)로 넘겨버리고 터미널 명령어를 수행합니다 물론 명령을 수행한 뒤
"enter"나 아무 키를 누르면 다시 vi로 돌아옵니다
예로들어서 vi를 하던 중 ":! ls"나 ":!ls" 하면 현재 유저가 위치한 디렉토리 내 파일들을 보여주고 "enter"를 누르거나 아무 키나 누르면 다시 vi로 돌아오는 거죠
이렇게 ":! ls"를 하면
이렇게 되고 엔터나 아무 키를 누르면 다시 vi로 돌아옵니다.
라인모드 명령어는 ":" 하나만 쓰면 되고 그 옆에 나머지 명령어들은 붙여 쓸 수 있습니다. ":wq!" 이렇게 말이죠
":set nu(set number)" : 행에 번호를 붙입니다 .
이렇게 치면
이렇게 행 번호가 생깁니다.
"set nonu(set no number)" : 행에 번호를 제거합니다.
이렇게 :set nonu하면
이렇게 다시 행 번호가 사라집니다.
솔직히 여기까지만 알아도 vi를 쓰는 데 전~~혀 문제가 없습니다.
바로 다음에 알아두면 좋은 명령모드의 단축키와 마지막 행 모드 명령어를 알려드릴 건데,
별로 쓰이진 않지만 시험에 나올 수 있는 옵션들은 나중에 리눅스 마스터 시험용 정리 포스트를 쓸 때 정리하겠습니다.
5. 알아두면 좋은 "vi" 단축키와 명령어들
--명령모드에서--
"yy(yank yank)" : 키보드 "y"키를 두번 누르는 것으로 현재 커서가 있는 한 줄을
복사(버퍼에 저장) 합니다. yank의 뜻은 "a quick forceful pull of someting" 대로 "재빠르게 한 줄을 버퍼로 가져온다 = 복사" 라고 생각하시면 됩니다.
버퍼라는게 뭔지 궁금하신 분들을 위해 잠깐 설명을 하자면 버퍼란 "임시저장 공간"이라고
보시면 됩니다 .그래서 "yy"로 버퍼(임시저장 공간)에 한 줄의 내용을 저장한 뒤
붙여넣기를 하면 그 공간에 저장된 내용을 가져와서 붙이는거죠.
"p(paste)" : paste대로 커서 다음 줄에 "yy"로 복사한 내용을 "붙여"넣습니다.
"dd(delete delete)" : 키보드 "d"를 더블 누르는 것으로, 커서가 있는 한 줄을 제거합니다.
왜 d를 두번이나 누르냐고요? 그냥 "d" 하나에도 기능이 있기 때문에요. "d"를 누르고
"←→"를 누르면 그 방향의 글자를 하나 지우고 "↑↓"를 누르면 커서가 있는 현재 줄과
그 방향 한 줄을 지워버립니다. 솔직히 너무 헷갈리고 위험해서 "d"하나는 쓰지 않고
"dd"만 씁니다. "d"쓸 바엔 입력모드로 가서 Backspace로 하나하나 지우는게 낫죠
"u(undo)" : 전에 했던 행위를 복구합니다. 윈도우에서 "ctrl + z"라고 생각하시면 돼요~
"[번호] + shift + g" : 입력한 번호의 행 시작부분으로 커서가 이동합니다 , 만약 앞에 아무런 번호를 입력하지 않았으면 페이지 맨 끝 행으로 이동합니다.
--마지막 라인 모드에서--
"/[찾고 싶은 문자]" : 파일 내 찾고싶은 문자를 모두 찾아줍니다. "n"을 누르면 한 개씩 아래로 커서가, 찾은 문자로 이동합니다.
"?[찾고 싶은 문자]" : "/[문자]"와 기능이 동일한데 "n"을 눌렀을 때 "/"와 다르게 현재 커서 위로 한 개씩 이동합니다.
"입력모드"는 더 알 게 없습니다.
6. vim을 vi로 쓰는 법, vi 행번호 자동으로 출력되게 세팅하기
일단 당연하게도 vim을 치는 것보단 vi를 치는게 훨씬 편해서 다들 "alias"로 등록해둔다고
말했었죠?
이 "alias"를 설정하는 부분은
https://mamu2830.blogspot.com/2019/07/3.html#index%202 의
ii).bashrc에 있으므로 이 곳에서 보고 오시면 되겠습니다.
"vi"의 행 번호 자동 출력같은 경우, 나중에 저희가 리눅스 2(리눅스 마스터 1급 범위)를 다루면 여러 파일들의 설정파일을 엄청 다룰텐데 그 때마다 설정파일의 옵션위치를 행 번호를 통해 많이 참조하거든요.
그래서 파일을 vi로 열 때마다 행 번호를 알기 위해 ":set nu" 를 일일이 쳐야하는데 이게 너무 귀찮기 때문에 그냥 vi로 열자마자 ":set nu"가 되게 바꿀 겁니다.
어떻게 해야할 까요? 당연하게도 "vim"도 프로그램이기 때문에 설정파일이 있습니다.
바로 "vimrc(vim run commands)"라는 파일이죠 보통 파일 뒤에 "rc"가 붙은 파일은
run commands 라는 뜻대로 "그 파일이 실행될 때 자동으로 실행되는 명령어"들이 적혀있다고 보시면 됩니다.
같은 예시론 /etc/bashrc와 .bashrc등등이 있죠
자 그럼 "vim설정파일 vimrc"는 어디에 있을까요? 저희가 리눅스전체에서 쓰이는 프로그램의 설정파일은 어떤 디렉토리에 있다고 "상위 디렉토리" 포스트에서 다뤘었는데
기억이 안나신다면 한 번 보고오시는 것도 좋을 것 같습니다 ㅎㅎ
https://mamu2830.blogspot.com/search/label/%EC%83%81%EC%9C%84%20%EB%94%94%EB%A0%89%ED%86%A0%EB%A6%AC%20%EC%9D%B4%EB%A6%84%EA%B3%BC%20%EC%9A%A9%EB%8F%84
하지만 저 긴 포스트를 다 읽긴 귀찮으실테니 바로 정답을 알려드리자면,
리눅스 전체에서 쓰이는 프로그램의 설정파일은 /etc/에 있습니다.
그럼 cd로 /etc/에 이동하여 "vimrc"란 설정파일이 있나 볼까요?
네 저기에 vim 설정파일 "vimrc"와 vi 설정파일 "virc"가 보이네요
참고로 아까 말했다 싶이 /etc/에 있는 설정파일은 "모든 시스템에 쓰이는 프로그램 설정파일"이기 때문에, 여기에서 설정을 바꾸면 리눅스 전체시스템에 영향이 갑니다.
그래서 저희가 여기 "/etc/vimrc"에 ":set nu" 를 지정하면 root뿐만 아니라
모든 유저가 전부 자동으로 vim쓸 때마다 :set nu이 설정이 됩니다.
이렇게 /etc/로 이동한 다음 vim(vi)로 vimrc를 열어준 다음 보시면
뭐 이렇게 행 번호 없이 여러 기본 세팅 명령어들이 있습니다.
여기서 딴 거 건들지 마시고 "shift + g" 를 눌러 맨 끝으로 이동합니다. 그리고 "i"나 "insert"키로 입력모드로 바꾼 후 엔터를 눌러 다음 행으로 이동해
이렇게 ":set nu"라고 써주고, "ESC"를 눌러 입력모드를 나간 뒤(명령모드로 간 뒤)
":"를 눌러 라인모드로 들어가 ":wq(write and quit)"을 타이핑해서 저장하고 나가줍니다.
그리고 이제 적용이 됐나 확인하기 위해 다시 "vim"으로 아무 파일이나 열어봅니다.
전 귀찮으니 다시 "vim vimrc"하겠습니다.
그러면
이렇게 행 번호가 자동으로 세팅 돼 있는 걸 확인 할 수 있습니다~
이야 오늘도 화장실 가는 시간 제외하고 풀 집중해서 6시간 30분만에 포스팅을 끝냈네요..
꼭 도움이 됐으면 좋겠네요 ㅠㅠ
도움이 되셨으면 구글 블로그 팔로우, 네이버 블로그 공감 클릭 해주시면
정말 큰 도움이 됩니다!!
혹시나 오타나 잘못된 내용이 있으면 댓글로 알려주세요, 바로 수정하겠습니다.
이상 마무였습니다~
글 잘 읽었습니다! 술술 잘 읽히더군요:)
답글삭제하핫 감사합니다 ;)
삭제이해 쉽게 설명해주셔서 너무 감사드립니다. ^^
답글삭제도움이 돼 다행입니다!! 따뜻한 댓글 감사해요 ^^
삭제