가이드라인을 작성하다 보니 리눅스 기초에 대한 지식도 아주 짧고 간단하게 설명하면 좋겠다(설명해야 되겠다) 생각이 들었습니다. 그래서 이번 포스팅을 통해 아주 간략하게 설명드리려고 합니다.
리눅스 기초와 활용 등등에 대해 제가 전부 설명드리긴 어려울 것 같습니다.
관심이 있으시다면, 동영상으로 알려주는 생활코딩 리눅스 페이지에서 하나씩 배워나가세요!
제가 쓰는 이 포스팅에서는 NAS 구축을 위한 기본적인 설명만 할 예정입니다.
어떤 책에서 읽은 말인데, 리눅스는 모든 게 파일이라는 말만 기억하고 넘어갑시다.
윈도우에선 .exe 실행 파일로 프로그램을 설치/실행하지만, 리눅스에선 .deb, .rpm 등과 같은 설치/실행에 필요한 패키지(어떤 묶음)를 다운 받아 설치합니다. 패키지에는 빌드된 실행 파일과 함께 실행을 도와주는 문서나 설정 파일들이 포함되구요.
리눅스는 윈도우와 달리 오픈 소스이기 때문에, 여러 다른 사람들이 공통된 리눅스 커널을 기반으로 각기 다른 환경을 만들어냈어요. 그래서 내 리눅스에서 빌드한 파일이 다른 리눅스에서 실행이 안 될 수도 있습니다. 실행 환경에서 프로그램 실행에 필요한 라이브러리가 없거나, 컴파일 환경의 아키텍처와 실행 환경의 아키텍처가 다르단 이유 등으로요.
이런 문제를 겪지 않도록 도와주는 게 패키지 매니저입니다.
1) 패키지 매니저
패키지 매니저는 인터넷을 통해 여러 리눅스 프로그램들을 쉽게 설치/관리할 수 있도록 해주는 도구입니다. 어떤 프로그램이 없을 때, 패키지 매니저를 통해 다운 받으시면 돼요. 위의 라이브러리나 아키텍처 문제도 패키지 매니저가 알아서 걸러주기 때문에 사용자는 프로그램 이름만으로 설치하시면 됩니다. 사용하고 싶은 프로그램이 어떤 라이브러리가 필요할 때 그 의존성 라이브러리들을 패키지 매니저가 자동으로 설치해줘 대부분의 경우 별 걱정 없어요. 심지어 업그레이드(판올림)도 편합니다.
오드로이드 기반 NAS는 우분투를 사용하기 때문에 apt 라고 불리는 패키지 매니저를 사용합니다. 라즈베리파이의 라즈비안도 동일해요.
2) 저장소
패키지 매니저가 패키지들을 구할 장소입니다. 인터넷으로 연결되구요. 패키지 저장소는 Repository라고 불리고, 우분투에선 우분투 공식이 아닌 개인용 패키지 저장소로 PPA가 제공됩니다. 누구나 PPA를 통해 저장소를 제공할 수 있어 내가 만든 프로그램을 다른 사람들이 쉽게 설치/관리할 수 있어요.
대부분의 필요한 패키지들은 저장소에 있겠지만, 없을 경우 새로운 저장소를 추가한다던가, 직접 프로그램 사이트로 가서 내 환경에 맞는 패키지를 다운 받아 실행해야 합니다. 환경에 맞는 게 없을 경우 소스 파일을 다운 받아 직접 컴파일.. 이렇게 귀찮아지기 때문에 보통 프로그램 개발자들도 자신들의 저장소를 사용자에게 제공합니다. 쉽게 필요한 프로그램을 받아 쓰라구요.
리눅스 시스템에선 사용자, 그룹과 권한이 굉장히 중요합니다. "나" 라는 사용자가 하드디스크에 접근할 권한이 없으면 그 하드디스크에 관한 어떤 것도 못해요. 다만 내가 "HDD 관리자" 라는 그룹에 속해 있고, 그 그룹이 하드디스크에 완전히 접근 가능하다면 그룹 권한으로 하드디스크를 다룰 수 있겠죠.
1) 권한
권한은 크게 3가지입니다. Read, Write, Execute인데, 얘네를 그냥 rwx 라고 불러요. 단어 느낌으로 아시다시피 읽기, 쓰기(수정, 생성, 삭제), 실행으로 그냥 받아들이시면 됩니다.
-rw-r--r-- 1 root root 2213 Jul 31 16:40 passwd
권한을 볼 수 있는 명령어로 어떤 파일을 조회했습니다. 맨 앞에 -rw-r--r-- 이 권한 정보구요.
- rwx rwx rwx 형식으로 나눌 수 있는데, 맨 앞 - 는 아직 신경 쓰실 필요는 없고 뒤에 각각 소유자/그룹/타인 의 권한입니다.
소유자에 대한 권한이 rw- 잖아요? 소유자는 이 파일을 읽고, 수정하거나 지울 수 있어요. 소유자도, 같은 그룹도 아닌 다른 사람들은 읽기밖에 못하네요.
제 가이드라인을 보면서 NAS 구축하실 때 가끔 제가 chmod a+x 이런 걸 하라고 할 겁니다. chmod는 권한을 변경하는 명령어고, a+x는 모든 대상(all)에 대해 실행(execute) 권한을 주라는 말이에요.
보통 rwx가 숫자로 표기되는데, 2진수로 000(---), 001(--x), 111(rwx) 이런 식으로 표기됩니다. 그래서 0~7이고, rw- 의 경우 6 이겠네요. 따라서 755 라면 rwx r-x r-x 와 같은 말이며, chmod 로 이런 숫자를 쓰실 때도 있어요.
그리고 root root 라는 말이 있는데요, 그건 소유자(해당 파일을 생성한 사람)가 root고 그룹도 root라는 말입니다. 물론 이것도 chown 명령어를 통해 바꿀 수 있어요. 여기선 root가 쓰기 권한이 있으니 root만 가능하겠네요.
2) 사용자
사용자는 해당 리눅스에 포함되는 사람(프로그램)들을 말합니다. 사용자라고 해서 모두 사람인 건 아니고, 그냥 계정입니다. 실제로 그 시스템에 접속하게끔 다른 사람에게 사용자 계정을 만들어 줄 수 있겠지만, 보통 권한 등의 문제로 임시로 프로그램에서 자기만의 사용자를 만들어 사용합니다. OpenMediaVault도 Web 때문인 지 openmediavault-webgui 라는 계정이 있어요.
/etc/passwd 파일을 통해 내 리눅스에 어떤 사용자가 있는 지 알 수 있어요.
3) 그룹
그룹은 사용자들을 묶어놓은 것입니다. 권한 때문이죠. 위의 예시처럼, HDD 관리자 계정 하나만 HDD를 관리한다면 실제로 여러 사용자가 그 계정을 공유해야 합니다. 그럴 필요 없이, HDD 관리를 위한 그룹을 만들어 그 그룹을 운용하면 쉽죠.
4) root
root 는 시스템 관리자입니다. (최상위 경로 root(/)를 말할 수도 있습니다) 해당 리눅스 시스템에서 모든 걸 할 수 있어요. 모든 파일에 대해 모든 권한이 있습니다. 심지어 모든 파일을 지울 수도 있습니다.(rm -rf /*) 그렇기 때문에 root 계정에 대한 철저한 관리는 꼭 필요합니다. 남들한테 함부로 root 패스워드를 알려주지 마세요.
스마트폰에서도 제조사에서 제공하지 않는 이것 저것 하기 위한 안드로이드의 루팅이나 iOS의 탈옥도 이런 root 사용자 권한을 가로채는 느낌입니다.
여러 커널 취약점이다 뭐다 해서 뉴스에도 나오는 시스템 해킹 소식은, 이런 root 권한을 얻기 위한 겁니다.
참고로 제 가이드라인을 따라 하시는 분들은, 특히 OMV에선 root로만 접속할 겁니다. 초보자의 경우 알려드리는 명령어 사용 외에 다른 행동은 시스템에 큰 영향을 미칠 수 있으니 주의해주세요.
터미널은 사람과 컴퓨터가 소통을 할 수 있도록 해주는 어떤 인터페이스입니다. 단말기 라고도 한다는데요, 단말기는 사실 말단, 끝에 있는 기계라는 말이죠. 전화 단말기도 사실 말단의 단말기 사용자들 끼리 통화를 하기 위해 있는 말이구요. 컴퓨터도 마찬가지입니다, 키보드와 모니터는 단말기에요. 키보드가 사용자로부터의 첫 입력장치고, 모니터는 사용자에게 보여지는 마지막 출력장치입니다. 하지만 사실 보통 "터미널" 을 "쉘" 과 거의 동일하게 부르는 느낌이 있습니다. "터미널좀 띄워봐" 라는 말도 맞는 말이에요.
1) 쉘(Shell)
리눅스에선 사용자와 컴퓨터 간 통신을 위해 쉘(셸, Command line)을 제공합니다. 전 쉘 이라는 말을 좋아하기 때문에 쉘이라고 할게요.
키보드, 모니터라는 단말기가 있어봐야 컴퓨터는 아무 것도 못 알아듣고, 알려줄 수 없습니다. 컴퓨터가 알아 듣게 해야 하고, 컴퓨터가 하는 말을 저희가 알아볼 수 있어야 해요. 그 중재자가 쉘입니다.
리눅스는 크게, "사용자-커널-하드웨어" 로 나뉘어집니다. 커널은 하드웨어에 직접 연결되는 부분이라고 보시면 돼요. CPU나 메모리 등 각 하드웨어를 이어주기도 하고, 하드웨어를 어떻게 잘 사용할 지 입력되어있는 부분이기도 하죠. 사용자는 하드웨어를 뭐 11011110001 하면서 직접 다룰 순 없기 때문에(1, 0 입력도 드라이버, 커널이 필요하지만), 커널을 통해 하드웨어에 연락해야 합니다. 근데 커널한테 뭘 어떻게 시킬까요?
쉘이 바로 사용자와 커널 간 중재자, 인터페이스입니다. 인간의 말(사실 영어)을 약속된 만큼만 알아요. "하드디스크 어딘가에 영화가 저장되어 있다, 그 곳으로 갈래" 하고 쉘에 적절하게 명령어를 치면, 쉘은 커널을 통해 하드디스크 그 어딘가의 영화를 찾아 사용자에게 모니터로 보여줍니다. 이런 느낌이에요. 항상 명령어로 쉘한테 명령해서 커널을 통해 하드웨어를 다루는 겁니다.
쉘도 프로그램이라 여러 가지 종류가 있습니다. bash, csh, .. 저도 bash말곤 안 써봤지만, bash만 아셔도 됩니다. 보게 될 쉘은 보통 bash에요.
참고로 리눅스 뿐 아니라 윈도우나 맥 OS도 다 같은 시스템 기반이라 대략 이런 구조입니다. 마우스 클릭이 가능한 GUI여도 커널은 다 있고, 커널에 접근하는 방법만 다를 뿐이죠.
2) 디렉토리 구조
리눅스의 디렉토리는 트리 구조입니다. / (root) 로부터 가지쳐 뻗어 나가요.
ls -al /
total 92
drwxr-xr-x 23 root root 4096 Aug 1 13:44 .
drwxr-xr-x 23 root root 4096 Aug 1 13:44 ..
drwxr-xr-x 2 root root 4096 Jul 26 14:34 bin
drwxr-xr-x 3 root root 4096 Jul 27 10:09 boot
drwxr-xr-x 17 root root 14820 Jul 28 18:51 dev
drwxr-xr-x 113 root root 4096 Aug 1 09:57 etc
drwxr-xr-x 2 root root 4096 May 12 07:36 export
drwxr-xr-x 2 root root 4096 May 1 12:13 home
drwxr-xr-x 19 root root 4096 Jul 26 14:37 lib
drwx------ 2 root root 16384 May 19 16:59 lost+found
drwxr-xr-x 2 root root 4096 May 15 22:00 media
drwxr-xr-x 2 root root 4096 May 15 22:00 mnt
drwxr-xr-x 2 root root 4096 May 15 22:00 opt
dr-xr-xr-x 230 root root 0 Jan 1 1970 proc
drwx------ 4 root root 4096 Jul 31 16:24 root
drwxr-xr-x 27 root root 1280 Aug 1 10:16 run
drwxr-xr-x 2 root root 12288 Jul 26 14:37 sbin
drwxr-xr-x 2 root root 4096 May 19 16:29 selinux
drwxr-xr-x 5 root root 4096 Jul 26 14:51 srv
dr-xr-xr-x 12 root root 0 Aug 1 13:43 sys
drwxrwxrwt 7 root root 1200 Aug 1 13:44 tmp
drwxr-xr-x 10 root root 4096 May 15 22:00 usr
drwxr-xr-x 14 root root 4096 May 19 16:29 var
/ 의 파일 목록을 조회했습니다. 권한 부분에 rwxrwxrwx 외에 앞에 d 가 더 있는 걸 보실 수 있는데, 해당 파일은 디렉토리라는 의미입니다. 안으로 들어갈 수가 있어요.
bin, etc, home, lib, media, var, root, usr, tmp, sys, proc... 다 필요한 디렉토리고, 다 역할이 있는 디렉토리들입니다. 관심있으시면 찾아보셔도 좋을 것 같아요. 사실 여기선 OMV라 그런가 구버전과 신버전이 공존해 조금 특이하긴 하지만 다 알아두시면 좋습니다.
3) 절대경로와 상대경로
위의 경로에서 var에 들어가 어떤 파일들이 있는 지 조회해 보겠습니다.
root@odroidxu4:/# cd var
root@odroidxu4:/var# ls -al
total 131116
drwxr-xr-x 14 root root 4096 May 19 16:29 .
drwxr-xr-x 23 root root 4096 Aug 1 13:44 ..
drwx------ 2 root root 4096 Jul 28 18:51 agentx
drwxr-xr-x 2 root root 4096 Aug 1 07:44 backups
drwxr-xr-x 11 root root 4096 Jul 26 16:39 cache
drwxr-xr-x 3 root root 4096 May 19 16:29 folder2ram
drwxr-xr-x 50 root root 4096 Jul 31 12:07 lib
drwxrwsr-x 2 root staff 4096 May 1 12:13 local
lrwxrwxrwx 1 root root 9 May 15 22:00 lock -> /run/lock
drwxr-xr-x 16 root root 1420 Aug 1 07:44 log
drwxrwsr-x 2 root mail 4096 May 15 22:00 mail
drwxr-xr-x 2 root root 4096 May 15 22:00 opt
lrwxrwxrwx 1 root root 4 May 15 22:00 run -> /run
drwxr-xr-x 7 root root 160 May 19 16:39 spool
-rw------- 1 root root 134217728 May 19 16:29 swap
drwxrwxrwt 2 root root 40 Aug 1 12:59 tmp
drwxr-xr-x 9 root root 4096 Jul 31 16:40 www
역시 여러 디렉토리들이 있고, 이번엔 어떤 파일들도 있네요. 위의 두 줄을 잘 보시면, "odroidxu4:" 뒤에 "/" 에서 "/var" 로 바뀌었습니다. 이 곳이 제가 있는 현재 위치를 알려주는 부분이에요. 이번엔 어떤 깊숙한 곳으로 들어가보겠습니다.
root@odroidxu4:/var# cd www/seafile
root@odroidxu4:/var/www/seafile#
이번엔 "/var" 가 "/var/www/seafile" 로 더 길어졌네요. 여기서 제 위치는 "/var/www/seafile" 이란 걸 알 수 있죠. 이런 걸 경로라고 합니다.
이렇게 "/"(root) 로부터 시작하는 경로를 "절대 경로"라고 해요. 모든 건 "/"로부터 뻗어나오기 때문에 어디서나 쓸 수 있는 정확한 위치입니다. 반면, "상대 경로"란 것도 있어요.
root@odroidxu4:/var/www/seafile# ls -al ../../
total 131116
drwxr-xr-x 14 root root 4096 May 19 16:29 .
drwxr-xr-x 23 root root 4096 Aug 1 13:44 ..
drwx------ 2 root root 4096 Jul 28 18:51 agentx
drwxr-xr-x 2 root root 4096 Aug 1 07:44 backups
drwxr-xr-x 11 root root 4096 Jul 26 16:39 cache
drwxr-xr-x 3 root root 4096 May 19 16:29 folder2ram
drwxr-xr-x 50 root root 4096 Jul 31 12:07 lib
drwxrwsr-x 2 root staff 4096 May 1 12:13 local
lrwxrwxrwx 1 root root 9 May 15 22:00 lock -> /run/lock
drwxr-xr-x 16 root root 1420 Aug 1 07:44 log
drwxrwsr-x 2 root mail 4096 May 15 22:00 mail
drwxr-xr-x 2 root root 4096 May 15 22:00 opt
lrwxrwxrwx 1 root root 4 May 15 22:00 run -> /run
drwxr-xr-x 7 root root 160 May 19 16:39 spool
-rw------- 1 root root 134217728 May 19 16:29 swap
drwxrwxrwt 2 root root 40 Aug 1 12:59 tmp
drwxr-xr-x 9 root root 4096 Jul 31 16:40 www
위치를 변경시키지 않고도 아까 봤던 /var 에 있는 파일 목록을 볼 수 있습니다. /var은 /var/www/seafile 로부터 상대적으로 ../../ 한 위치에 있어요. ../ 은 바로 상위의 디렉토리를 가리킵니다. 두 번 했으니 두 단계 위의 디렉토리죠. ".."를 사용하는 게 "상대 경로" 입니다.
".." 은 바로 위의 디렉토리 위치, 그 후 "/" 은 여기! 이런 말입니다. 그래서 "../" 은 상위 디렉토리! 라는 말이죠. 그리고 "." 은 현재 디렉토리 위치를 의미합니다. "./" 은 현재 디렉토리! 라는 말이 됩니다.
현재 디렉토리의 파일을 가리킬 땐 바로 파일 이름을 적어주셔도 됩니다. 디렉토리의 경우 아까 "cd var" 처럼 바로 쓰시면 돼요. 근데 파일을 실행할 땐 "./" 나 명령어 "source"를 쓰셔야 합니다. 리눅스가 이미 존재하는 명령어들(cd, chmod 등등)과 헷갈려하거든요.
root@odroidxu4:/var/www/seafile# pwd
/var/www/seafile
현재 제 위치의 절대 경로를 아시고 싶으시면 pwd 명령어를 쓰시면 됩니다. 지금 제공되는 쉘이 절대 경로를 항상 표시해주지만, 안 그런 쉘들도 있기 때문에 알아두셔야 할 명령어입니다.
4) SSH 클라이언트
쉘을 네트워크로 접속할 수 없을까요? 항상 서버에 유선으로 꼽혀 있는 키보드와 모니터만을 사용해야 한다면 굉장히 불편할 겁니다. 그래서 네트워크로 쉘에 접속하기 위해 태어난 게 Telnet과 SSH입니다.
Telnet과 SSH는 어떤 약속입니다. 클라이언트가 "내가 서버에 이렇게 접속하고 싶은데, 로그인할테니 쉘 줘" 하면 서버가 "아 SSH? 로그인 정보가 맞으면 쉘을 이런 형식으로 제공해줄게" 하는 약속이요.
Telnet이 과거에는 자주 쓰였습니다. 하지만, 서버에 직접 로그인을 해 명령어를 사용할 때, 계정부터 사용하는 명령어까지 모든 게 암호화가 되어있지 않아 보안에 취약했습니다. 그래서 SSH로 바뀌었어요. 그리고 SSH는 거의 모든 리눅스 배포판에 기본적으로 설치/실행되어 있습니다. 오드로이드 기반 NAS도 포함됩니다.
오드로이드에 어떻게 SSH 로 접속할까요? SSH 클라이언트 프로그램을 쓰시면 됩니다. PuTTY나 XShell 등이 유명해요. 오드로이드의 위치(IP)와 계정 정보만 있다면 이런 프로그램을 통해 인터넷으로, SSH로 접속이 가능합니다. 쉘을 얻게 되어, 여러 가지 작업을 할 수 있게 돼요.
5) 명령어
쉘에 접속은 해도 뭘 어떻게 해야 할 지 모르실겁니다. 쉘은 명령을 해야 일을 해요. 저희가 몇 번 쓸 아주 기본적인 명령어들은 다음과 같습니다.
참고)
[ ] 은 비어있어도 됨
{ } 은 비어있으면 안 됨
옵션 생략, 몇몇 명령어는 다른 인자를 줄 수 있음에도 해당 사항 생략cd [경로] : 명시된 경로로 이동. 경로가 명시되지 않을 경우 자신의 홈 디렉토리로 이동
ls [경로] : 경로가 명시되지 않을 경우 현재 디렉토리의 파일 목록 출력, 경로가 명시될 경우 경로에 해당하는 파일 목록 출력
pwd : 현재 위치의 절대 경로 출력
echo {문자열|$변수명} : 지정한 문자열이나 환경변수의 내용 출력
chmod {새로운권한} [경로/]{파일명} : 파일이나 디렉토리에 대해 새로운 권한 부여
chown {새로운소유자:새로운그룹} [경로/]{파일명} : 파일이나 디렉토리에 대해 새로운 소유자 부여
df [마운트지점] : 마운트 지점이 없을 경우 모든 파일 시스템의 사용량과 마운트 지점 출력, 있을 경우 해당 파일시스템의 사용량 출력
ifconfig : 현재 네트워크 인터페이스 정보 출력
각 명령어마다 자세한 사용법을 알고 싶으시면,
man {명령어이름}
을 입력해보세요. man 은 Manual의 약자입니다.
그리고 각 명령어마다 여러가지 옵션이 있습니다. - 나 -- 로 시작해요. ls -al 에서 -al 은 옵션입니다. 각 명령어마다 모든 옵션을 보시고 싶으시면 명령어 뒤에 --help 를 입력해보세요.
참고로 명령어들도 모두 실행 파일이에요. OMV의 경우 "ls -al /bin" 을 입력해보세요. cd, ls, chmod.. 다 들어있습니다.
마운트는 장착된 하드디스크 등 저장 장소를 지금 사용 중인 파일 시스템 "/" 아래 경로 어딘가에 장착시키는 겁니다. 말이 굉장해 보이는데, 그냥 하드디스크를 디렉토리 하나에 물리는 거에요, 그럼 그 디렉토리가 곧 하드디스크가 됩니다. 편리합니다.
1) Hot Swapping
리눅스는 Disk Hot Swapping을 지원합니다. 하드디스크가 맛이 갔을 때 윈도우라면 시스템을 종료하고 디스크를 갈아줘야 하는데, 리눅스는 마운트만 해제하고 디스크를 갈아주면 됩니다. 갈아주고 다시 마운트하면 돼요. 그래서 NAS 등 서버에 리눅스가 적절한 거고, 많이 사용하고 있는 겁니다.
2) 마운트 지점
하드디스크를 물리는 경로를 마운트 지점(Mount Point)이라고 합니다. 마운트 지점을 알고 있으면, 새로운 저장 장소를 사용하는 건 굉장히 쉬워요. 호환성을 위해 여러가지 설정이 완료되었다고 할 때,
1. 새로운 하드디스크를 시스템에 장착한다.
2. 디렉토리 /media/external/hdd 를 생성한다.
3. mount -t /dev/sdb1 /media/external/hdd
가 끝입니다. /media/external/hdd 이 새로운 하드디스크에 대한 마운트 지점입니다.
개발자들도 마운트를 매번 명령어를 통해 해야만 한다는 건 말이 안 된다고 생각해서, 시스템이 부팅될 때 자동으로 마운트가 될 수 있는 여러 가지 장치들을 마련했습니다. /etc/fstab 이 가장 보편적이에요. 제 경우는 우분투로 자작 NAS 구축할 때 autofs 라는 걸 사용하죠, 외장하드를 쉽게 뺏다 꼽았다 하기 위해서 :)
NAS 등 서버용 리눅스는 마우스 클릭이 없습니다. OMV도 웹을 통해서만 마우스로 간단한 시스템 조작, 사용자 추가 등등만 하지 파일을 직접 편집하진 못해요. 쉘과 같은 환경을 CLI라고 하는데, CLI 환경에서도 간단한 문서나 설정 파일을 편집할 일이 많습니다. 그래서 필요한 텍스트 에디터로는 유명한 걸로 크게 두 가지가 있습니다. nano 와 vi 입니다. 영 CLI가 불편하시면 GUI를 따로 설치하셔서 접속하셔도 됩니다.
1) nano 에디터
nano는 좀 더 사용자 친화적인 텍스트 에디터입니다. 화면 아래에 조작을 위한 모든 단축키가 쓰여 있고, 메모장처럼 그대로 쓰시면 됩니다. 접하기도, 다루기도 쉬워 대부분의 리눅스 초보자들은 nano부터 사용합니다.
CLI에서 코딩을 한다던가 하시는 게 아니라면 NAS 구축에는 nano로 충분합니다.
2) vi 에디터
vi는 좀 더 다가가기 어려운 텍스트 에디터입니다. 일단, 명령 모드와 편집 모드가 존재합니다. 모드가 2개인 것부터 초보자들은 환장해요. 하지만 화면 분할, 복잡한 명령어 조합 가능, 세션 복구 기능 등 단순하지 않은 기능들이 존재하기 때문에, 리눅스를 좀 쓴다 하시는 분들은 이런 기능들을 위해 vi 에디터를 사용합니다. 진짜진짜 고수들은 vi가 그 어떤 텍스트 에디터보다 코딩하기 편하다고도 하구요. 저도 사용하지만, 그 정도는 아니고 아주 초보적으로만 vi를 사용하는 편입니다 :) nano 써도 될 정도..
참고로 vi는 Vim이라는 기능 확장판이 존재합니다. vi를 쓰시려면, vim을 사용하세요.
사진 출처: Wikipedia
'NAS & ODROID > NAS, ODROID' 카테고리의 다른 글
Seafile 에 업로드 한 파일 찾기 - Seaf-fuse (7) | 2017.08.07 |
---|---|
NAS에 DDNS 적용하기 - DuckDNS (11) | 2017.08.02 |
NAS 필수 지식 - 포트포워딩 이란? (0) | 2017.07.21 |
오드로이드 XU4 UAS 해제하기 (2) | 2017.07.19 |