몇년 전에 리눅스를 사용하면서 vi 에디터 명령어를 조금 외웠었다.

그런데 오랜만에 다시 하려니까 기억나는 건 :q!... :wq.... i.... 딱 이 세가지.

Putty로 원격지 서버에 접속해서 편집할 땐 저거만 알아도 별 무리가 없었는데,

직접 Ubuntu OS를 깔고 vi 에디터를 사용하려니 저걸론 부족해서 조금 더 찾아봤다.

전부 다 정리하긴 무리가 있고, 자주 사용하게 되는 것들만 정리해봤다.


vi Tutorial Editor Modes

출처: http://www.livefirelabs.com/unix_tip_trick_shell_script/unix_operating_system_fundamentals/vi-tutorial-part-1.htm

먼저, 사용법을 간략하게 표현한 표부터 첨부하겠다.


라인 명령 모드(Last line Mode)로 바꾸기 위해선 먼저 :를 눌러야한다.

Enter키를 누르면 다시 명령 모드로 돌아올 수 있다.

입력 모드로 바꾸기 위해선 i, a 등이 사용되는데 밑에 정리하겠다.


라인 명령 모드에서,

w는 저장, q는 종료키라고 생각하면 된다.

:w를 누르면 편집한 내용이 저장 되고 :q를 누르면 종료된다.

:wq를 누르면 저장 후 종료, :q!를 누르면 편집 내용을 무시하고 종료할 수 있다.

vi 에디터를 열 때, 파일명을 지정하지 않았다면 :w 뒤에 원하는 파일명을 입력하면 된다.


다음은 명령 모드에서 입력 모드로 전환하는 키다.

i

 현재 커서의 위치부터 입력

I

 현재 커서 줄의 맨 앞에서부터 입력 

a

 현재 커서의 위치 다음 칸부터 입력 

A

 현재 커서 줄의 맨 마지막부터 입력 

o

 현재 커서의 다음 줄에 입력

O

 현재 커서의 이전 줄에 입력 

 현재 커서 위치의 한 글자를 지우고 입력 

S

 현재 커서의 한 줄을 지우고 입력


명령 모드에서 커서를 이동할 때 사용하는 키다.

h

 커서를 왼쪽으로 한 칸 이동

j

 커서를 아래로 한 칸 이동

k

 커서를 위로 한칸 이동

l

커서를 오른쪽으로 한 칸 이동 

ctrl+F

 다음 화면으로 이동 

ctrl+B

 이전 화면으로 이동 

^

 현재 행의 처음으로 이동 

$

 현재 행의 마지막으로 이동 

gg

 제일 첫 행으로 이동 

G

 제일 끝 행으로 이동 

[n]G

 해당 숫자(n)의 행으로 이동 

:[n]+Enter

 해당 숫자(n)의 행으로 이동 


명령 모드에서 삭제, 복사, 붙여넣기와 관련된 키다.

 현재 커서가 위치한 글자 삭제

X

 현재 커서가 위치한 앞 글자 삭제 

dd

 현재 커서의 행 삭제 

[n]dd

 현재 커서부터 숫자(n)만큼의 행 삭제 

yy

 현재 커서가 있는 행을 복사 

[n]yy

 현재 커서부터 숫자(n)만큼의 행을 복사

p

 복사한 내용을 현재 행 이후에 붙여넣기

P

 복사한 내용을 현재 행 이전에 붙여넣기


명령 모드에서 문자열을 찾는 키다.

 /[문자열]+Enter

 해당 문자열을 찾음(현재 커서 이후)

n

 찾은 문자 중에서 다음 문자로 이동


이 외에도 라인 명령 모드에서

:%s/[기존문자열]/[새문자열] 을 사용하면 문자열을 치환할 수 있고,

:set number 를 입력하면 vi 에디터의 앞에 행 번호가 표시된다.



Ubuntu에서 소스 패키지로 Samba를 빌드하여 설치했다.


1. # apt-get install acl attr autoconf bison build-essential \

  debhelper dnsutils docbook-xml docbook-xsl flex gdb krb5-user \

  libacl1-dev libaio-dev libattr1-dev libblkid-dev libbsd-dev \

  libcap-dev libcups2-dev libgnutls-dev libjson-perl \

  libldap2-dev libncurses5-dev libpam0g-dev libparse-yapp-perl \

  libpopt-dev libreadline-dev perl perl-modules pkg-config \

  python-all-dev python-dev python-dnspython python-crypto \

  xsltproc zlib1g-dev

먼저 위 명령어를 통해, 의존성이 있는 패키지들을 설치해준다.

Ubuntu 14.04 이상의 버전에선 libgnutls-dev가 libgnutls28-dev으로 대체되었다고 하는데..

깜빡하고 그냥 돌렸는데 별다른 문제는 없었다.


2. samba.org에서 소스를 다운 받는다. (Releases에서, Current stable relase에 Samba x.y.z (gzipped)를 다운)


3. tar -xvzf [다운 받은 압축 파일명] 

위 명령어를 사용해 압축을 푼다.


4. ./configure -> make -> sudo make install

압축이 풀리고 생긴 디렉터리 안으로 이동해 위 명령어를 차례로 사용하면 설치가 완료된다.

./configure 명령을 치니, no와 not found가 떠서 걱정했는데 'configure' finished successfully라고 무사히 나왔다.

make와 make install에는 다소 시간이 걸린다. make를 할 시에도 warning이 조금 뜨나 error는 뜨지 않아 성공적으로 완료되었다.


5. vi /usr/local/samba/etc/smb.conf

[testuser]

comment = samba directory

path = /home/testuser/samba

valid user = testuser

public = yes

writable = yes

위 내용을 configuration 파일에 추가한다.


6. ./smbpassword -a testuser

Samba를 설치 했던 디렉터리 안의 bin 디렉터리로 이동하여

위 명령어로 valid user에 입력해둔 Samba 유저를 생성한다.


7. ./smbd

위 명령어로 데몬 실행 후 445, 139 포트가 열렸는지 확인한다.



윈도우에서 테스트할 때, 실행창에 \\[Samba Server IP] 를 입력 하면 된다.

(path에 입력한 디렉터리의 소유권, 허가권에 유의)


참고: https://wiki.samba.org/index.php/Build_Samba_from_Source

Ubuntu 운영체제에서 /etc/securetty 파일은

사용자가 root user로 로그인할 수 있는 터미널(tty) 장치들을 지정할 수 있게 한다.

이 파일은 보통 로그인 프로그램인 /bin/login 에 의해 읽어들여진다.


/etc/securetty 파일엔 root 로그인이 허용된 터미널 장치들의 이름이 나열되어 있다.

'#'으로 주석 처리 되어있거나 이름이 파일에 없는 터미널 장치에선 root 로그인이 허용되지 않는다.



/etc/securetty 파일에 대해 찾다보니, tty와 pts의 차이점이 궁금해져 찾아봤다.


tty : TeleTYpewriter - 콘솔이나 터미널을 의미함

pts : Pseudo TTY Slave -  네트워크를 통해 시스템에 원격접속 했을 때 열리는 터미널


/etc/securetty 파일에서 tty0는 모니터, 키보드로 직접 본체에 연결되어 있을 때의 콘솔을 의미하며 tty1 이상은 가상콘솔이다.

* telnet에 root로 로그인 하기 위해선 적당한 수의 pts를 /etc/securetty에 추가해주면 된다. (나는 pts/10까지 추가했다.)

'Ubuntu > Etc' 카테고리의 다른 글

리눅스 주요 디렉토리의 종류와 특징  (0) 2017.10.25

Windows와 달리 Linux에서는 파일 압축과 파일 묶기가 원칙적으론 별개의 프로그램으로 실행되지만,

파일 묶기 명령어인 tar 명령어를 사용하면 옵션을 사용해 파일 압축을 한 번에 할 수 있다.


tar 사용법

tar [옵션] [압축된 파일명 혹은 압축할 파일이나 폴더명]


옵션

c(소문자): 새로운 묶음을 만든다.

x: 묶인 파일을 푼다.

t: 묶음을 풀기 전에 묶인 경로를 보여준다.

C(대문자): 묶음을 지정된 디렉터리에 푼다.


f(필수): 파일 이름 지정

v: 파일이 묶이거나 풀리는 과정을 보여준다.(생략 가능)

J(대문자): tar + xz (xz 압축 혹은 압축 해제)

z: tar + gzip (gzip 압축 혹은 압축 해제)

j(소문자): tar + bzip2 (bzip2 압축 혹은 압축 해제)


ex)

압축 + 파일 묶기 : tar -czvf filename.tar.gz /etc/systemd/

압축 해제 + 파일 풀기 : tar -xzvf filename.tar.gz / tar -xjvf filename.tar.bz2

apt-get 명령어 Ubuntu 운영체제의 패키지 관리 명령어로써,

Ubuntu에서 제공하는 deb 파일 Repository에서 설치할 deb 파일은 물론이고 해당 파일과 의존성이 있는 

다른 deb 파일까지 인터넷을 통해 모두 설치해준다.

(Repository의 URL은 /etc/apt/sources.list 파일에 저장되어 있음)


* Package란?

데비안 리눅스에서 Windows의 setup.exe와 비슷하게 프로그램 설치 후 바로 실행할 수 있게 제작한 실행 파일로, 확장명은 *.deb이다.



apt-get의 기본 사용법


패키지 설치

apt-get [옵션] install [패키지이름]

'-y' 옵션: 사용자에게 yes/no를 묻는 부분에서 무조건 yes를 입력한 것으로 간주함

'--reinstall' 옵션: 재설치


패키지 리스트의 업데이트

apt-get update

실제로 새로운 버전의 소프트웨어를 설치하는 것이 아니라,

업그레이드가 필요한 패키지와 Repository에 새로 추가된 리스트를 업데이트 해준다.


설치된 패키지 업그레이드

apt-get [옵션] upgrade

설치되어 있는 패키지를 모두 최신 버전으로 업그레이드

(의존성 검사하며 업그레이드: apt-get dist-upgrade)


패키지 삭제

apt-get [옵션] remove [패키지이름]

'--purge' 옵션: 설정파일까지 함께 제거


패키지 소스코드 다운로드

apt-get source [패키지이름]


패키지 소스코드 빌드

apt-get build-dep [패키지이름]

소스코드를 의존성있게 빌드

'Ubuntu > 명령어' 카테고리의 다른 글

Ubuntu 파일 및 디렉터리의 허가권과 소유권  (0) 2017.10.25
vi 에디터 명령어 정리  (0) 2017.10.25
Ubuntu 압축 풀기 - tar 명령어  (0) 2017.10.16

+ Recent posts