DAY_6 vi편집기 활용 및 단축키 학습

2020. 12. 31. 17:39
반응형

-- 간단 리뷰 --

vi 편집기에서 3가지 모드를 적고 설명하시오.

: 명령모드 : 이동 ,삭제

 입력모드 : text 입력

 ex모드 : 저장, 종료, 옵션설정

 

vi 편집기에서 3가지 모드를 이동하는 키를 적으시오.

: 명령모드 -> 입력모드 (a,i,o)

 입력모드 -> 명령모드 (esc) 

 명령모드 -> ex모드 (:wq)

 

alias 명령어가 무엇인가?

: 명령어 재정의를 하는 것이다(별명을 붙이는 것) / 사용법 : alias 새로운 명령어 = 기존 명령어

 

환경변수란 무엇인가 ?

: 시스템에 이미 정해져 있는 변수로 운영체제가 사용하는 변수이다 / shell환경에서 사용하는 변수

 set, printenv 를 하면 설정되어 있는 환경변수를 확인할 수 있다

 

환경변수에서 $HOME 은 무엇을 의미하는 환경변수인가 ?

: 사용자의 $HOME 디렉터리가 절대경로로 저장되어 있는 변수를 의미한다

 

vi 명령어를 vim 명령어로 사용하는 alias 명령어는 무엇인가 ?

: alias vi='vim'

 -> 현재 로그인 상태에서만 사용하고 로그아웃을 하면 삭제된다

     그러므로 이 값을 유지하기 위해서는 파일에 저장해야 한다 --> .bashrc에 넣어주면 로그인할 때 다시 설정된다

 

.bashrc 파일은 무엇인가 ?

: 사용자가 시스템에 로그인할 때 실행하는 파일

 이 파일 안에는 여러가지 로그인 후 설정하는 내용이 저장되어 있다

 

vi 편집기에서 ex모드에서 사용하는 것을 설명하시오.

:q -> 종료

:w -> 저장

:wq -> 저장 후 종료

:q! -> 강제 종료

:w! -> 강제 저장 (readonly 일때 사용한다)

 

vi 편집기를 사용할 때 스왑파일이 생기는데 스왑파일은 무엇인가 ?

: swap 파일은 원본 파일의 임시 파일

 원본파일을 vi 편집기로 열면 임시파일이 생기고 수정작업이 이루어졌을때 원본파일이 아닌 임시파일이 수정된다.

 원본파일을 저장하면 임시파일에 있는 내용을 원본파일로 저장한다.

 원본파일을 저장하지 않고 빠져나가면 임시파일을 삭제한다.

 

a.txt 파일을 vi 편집기로 편집할 때 생기는 스왑파일명은 무엇인가 ?

.파일명.swp

: .a.txt.swp (파일 이름 앞에 .을 붙이는 이유는 ls로 했을때 파일을 숨기기 위해서)

 

hello.c 파일을 vi 편집기로 편집할 때 생기는 스왑파일명은 무엇인가 ?

: .hello.c.swp

 

hello2.py 파일을 vi 편집기로 편집할 때 생기는 스왑파일명은 무엇인가 ?

: .hello2.py.swp

 

hello.c 파일을 vi 편집기를 열어서 번호를 보여주는 옵션을 설정하는 것은 무엇인가 ?

: set number (set nu)

 

hello.c 파일을 vi 편집기를 열어서 번호를 보여주지 않는 옵션을 설정하는 것은 무엇인가 ?

: set nonumber (set nonu)

 

vi 편집기에서 아래 옵션을 설명하시오.

:set

-> set으로 설정한 vi 환경 설정 값을 출력한다

:set all

-> vi 환경변수를 모두 보여주고 현재 값을 출력한다

:set nu

-> 파일에 번호 붙이기

:set ts=4

-> tab 4칸 띄어쓰기

:set sw=4

-> 들여쓰기 (>> or <<)4


/etc/DIR_COLORS 파일을 현재 디렉터리(/root)에 복사한다

--실습-- 

이동키 연습 // 대소문자 구분

<명령모드에서 사용>

h : 왼쪽으로 이동키 (검지)

j : 아래쪽으로 이동키 (검지)

k : 위쪽으로 이동키 (중지)

l : 오른쪽으로 이동키 (약지)

space : 오른쪽으로 이동키 (엄지)

 

w : 다음 단어 시작으로 이동

W : 다음 단어 시작으로 이동 (특수문자를 만나도 상관없이 다음 단어로 점프)

b : 이전 단어로 이동

B : 이전 단어로 이동 (특수문자를 만나도 상관없이 이전 단어로 점프)

 

$ : 커서가 있는 라인 맨 마지막으로 이동

^ : 커서가 있는 라인 맨 앞으로 이동

0 : 커서가 있는 라인 맨 처음으로 이동

 

H :한 화면에서 가장 꼭대기

M : 한 화면에서 중간

L : 한 화면에서 가장 끝으로 이동

 

Pgdn : L+zt

Pgup : H+zb

zt : 현재 커서의 위치를 화면 가장 꼭대기로 화면을 변경한다.

zz : 현재 커서의 위치를 화면 중간으로 이동

zb : 현재 커서의 위치를 화면 가장 아래로 화면을 변경한다.

 

G : 문서의 끝으로 이동

gg : 문서의 처음으로 이동

번호G : 번호로 이동 ex)14G

번호gg : 번호로 이동 ex)13gg

 

번호+이동키 : 번호만큼 이동 ex)3h, 6l

 

숫자와 d는 바로 반응하는 키가 아니라 입력받는 키이다

 

숫자 : 입력받는 키

 

삭제 키

d : 입력받는 키

dd : 한줄 삭제

번호dd : 번호만큼 줄을 삭제 ex) 2dd, 3dd, d2d

dj : 현재줄과 아랫줄 삭제

d + 이동키 : 이동키 만큼 삭제 ex) dw

dw : 한 단어 삭제

d2w : 두 단어 삭제

2dw : 두 단어 삭제

x : Del

X : 백스페이스 키

D : 커서가 있는 위치에서 오른쪽을 모두 삭제

d$ : 커서가 있는 위치에서 오른쪽을 모두 삭제 (D와 동일)

d0 : 커서가 있는 위치에서 왼쪽을 모두 삭제 (탭키에 따라서 다르다)

d^ : 커서가 있는 위치에서 왼쪽을 모두 삭제 (탭키에 따라서 다르다)

C : 커서가 있는 위치에서 오른쪽을 모두 삭제하고 입력모드로 변경

S : 커서가 있는 라인을 모두 삭제하고 입력모드로 변경

cc : 커서가 있는 라인을 모두 삭제하고 입력모드로 변경

 

u : undo로 실행취소

Ctrl + r : redo 

 

실습 > 현재 열고 있는 문서 모두 삭제

gg -> dG

G -> dgg

dG ->dgg

1G ->1000dj (1000번 이동하면서 지운다)

 

복사키

y 도 입력받는 키

yy : 한줄 복사

단, 복사하고자 하는 것에 enter키가 들어가 있다면 p, P는 커서 위 아래로

     enter키가 없다면

 

p : 붙여넣기 ('\n' 이 있으면 커서 아래로 붙여넣기)

P : 붙여넣기 ('\n' 이 있으면 커서 위로 붙여넣기)

p : 붙여넣기 ('\n' 이 없으면 커서 오른쪽으로 붙여넣기)

P : 붙여넣기 ('\n' 이 있으면 커서 왼쪽으로 붙여넣기)

 

. : 이전 실행 반복

 

라인 잘라내서 이동시키기 : dd -> p

 

블럭잡기

V : 한줄 단위 블럭잡기

v : 한글자 단위 블럭

ESC : 블럭 잡은 뒤 블럭 해제

Ctrl + v : 세로 단위 블럭

V + 라인번호 : 라인번호까지 블럭 

블럭을 잡고 d를 누르면 블럭을 잡은 라인은 모두 삭제된다.

 

찾기
f : 현재 줄에서 오른쪽으로 문자 찾기 ex) fH, ft
; : 커서 오른쪽으로 다음 문자 찾기 
, : 커서 왼쪽으로 다음 문자 찾기 

F : 현재 줄에서 왼쪽으로 문자 찾기  ex) FH, Fa
; : 커서 왼쪽으로 다음 문자 찾기 
, : 커서 오른쪽으로 다음 문자 찾기 

/ : 문서 전체에서 커서가 있는 위치의 아래쪽으로  찾기  ex) /TERM
n : 커서 아래로 다음 단어 찾기  (문서의 끝으로 가면 다시 처음으로 이동 : 순환한다)
N : 커서 위로   이전 단어 찾기  (문서의 처음으로 가면 다시 끝으로 이동 : 순환한다)

? : 문서 전체에서 커서가 있는 위치의 윗쪽으로 찾기    ex) ?linux
n : 커서 위로 다음 단어 찾기  (문서의 처음으로 가면 다시 끝으로 이동 : 순환한다)
N : 커서 아래로이전 단어 찾기  (문서의 끝으로 가면 다시 처음으로 이동 : 순환한다)

 

단어 교체 

 

r : 한 문자 교체 ex) ra -> 현재 커서 있는 문자가 a로 바뀐다

 

형식 : 

: 범위 s/찾을단어/바꿀단어/옵션

 

범위 :

. : 현재 라인을 의미

시작숫자 : 시작숫자에 적힌 라인을 의미

시작숫자, 끝숫자 : 시작숫자 ~ 끝숫자

% : 문서 전체를 의미

 

옵션:

g : 한 라인에 동일한 단어가 여러개 존재해도 모두 변경

   옵션에 g가 없다면 처음 매칭되는 단어만 변경

 

c : 물어보는 창이 뜬다.

(y/n/a/q/l/^E/^Y)

y : 변경함

n : 변경하지 않음

a : 모두 변경함

q : 종료

l : 종료

^Y : 화면을 위로 스크롤

^E : 화면을 아래로 스크롤

 

실습 > 전체 문서에서 TERM -> term 변경한다.

         한 라인에 TERM이 2개 이상 존재해도 모두 변경한다.

         옵션을 이용해서 변경사항을 사용자에게 물어보도록 한다.

 :% s/TERM/term/gc

 

실습 > 치환 연습

 TERM TERM TERM TERM TERM con80x43

 현재 라인에 TERM을 term으로 수정한다.

 :. s/TERM/term

 /g 옵션이 없으므로 처음 매칭되는 TERM 만 수정됨

 term TERM TERM TERM TERM con80x43

 

 :. s/TERM/term/g

 /g 옵션이 있으므로 현재 라인에 TERM 이 모두 수정됨

 term term term term term con80x43

 

 . 이 없으면 현재 라인을 의미한다.  
 현재 라인에 term을 TERM으로 수정한다.
 c 옵션이 있으므로 변경여부를 확인한다.
 g 옵션이 있으므로 커서 라인 전체를 대상으로 한다.


 :s/term/TERM/gc
 TERM(으)로 바꿈 (y/n/a/q/l/^E/^Y)?   
 TERM term TERM TERM TERM con80x43

 

현재 커서 라인에서 밑으로 +1 에 해당하는 라인을 변경한다

:+1 s/TERM/term/gc

 

 

멀티창

 :new : 가로로 창이 분리된다.

 :new 파일명 : 가로로 새창을 연다.

 --> Ctrl + w 누른 다음에 띄고 나머지 키를 누른다

 Ctrl + w + _ : 현재 커서에 있는 창을 최대로 키운다.

 Ctrl + w + = : 모든 창을 동일한 크기로 한다.

 Ctrl + w + w : 현재 커서가 있는 아래창으로 이동한다. (끝으로 가면 순환한다)

 Ctrl + w + - : 현재 커서가 있는 창 사이즈 1 감소

 Ctrl + w + + : 현재 커서가 있는 창 사이즈 1 증가

 :qa : 모든 열려있는 창을 종료한다. (수정되면 못 나온다)

 :qa! : 모든 열려있는 창을 종료한다. (수정한 것이 있다면 저장하지 않고 나온다)

 

실습 > 멀티창 

1.txt ~ 4.txt 까지 파일 4개를 생성한다.

 # echo 1.txt > 1.txt
 # echo 2.txt > 2.txt
 # echo 3.txt > 3.txt
 # echo 4.txt > 4.txt

 

 # vi 1.txt
 :new 2.txt
 :new 3.txt
 :new 4.txt


--실습--

코드를 작성하고 vi 키를 사용해보기

!! : 이전 명령어 바로 실행

 

순서 -> vi -> i

# vi hello.py

"""

파일명 : hello.py ESC -> j

""" Ctrl + o + k

o -> 엔터

 

i = 10

print(i)

 

for a in [1,2,3,4,5]:

print(a) <-- ESC -> F2 -> 5G -> 2w -> r3 -> F2 -> :wq

 

 

순서 -> vi -> i

# vi hello2.c

/*

* 파일명 : hello2.c

*/

#include <stdio.h>

 

int main()

{

int i = 10;

printf("%d\n", i);

return 0; // ESC -> F3 -> :q

} // Ctrl + o -> k -> tab

 

# vi hello2.c

/*

* 파일명 : hello2.c

*/

#include <stdio.h>

 

int main()

{

int i = 10;

int j = 20;

printf("%d\n", i);

return 0; // k -> O -> 소스코드 입력 -> ESC -> j -> i

} // 스페이스 %d 입력 -> Ctrl + o -> f) -> , j -> ESC -> F3 -> :q

 


--실습--

설정 파일 수정

 

 아파치 웹서버 + 프로그래밍(PHP) 

 - html + PHP

 

단계 

1. 웹서버 + PHP 설치

 패키지명 : httpd, php

 

2. 방화벽 내리기

 # iptables -F

 

3. php 설정 수정

 순서 : vi -> 4G -> 3yy (또는 3Y) -> 3j -> p -> fp -> cw -> html 입력

         -> 20G -> A(줄의 맨 끝으로 간다음 insert) -> index.html -> ESC -> :wq

 

 # vi /etc/httpd/conf.d/php.conf

 --> 설정 후에

 

4. php 설정 파일 설정 

 순서 : vi -> /short_open_tag -> n -> ff -> C -> n입력 -> ESC -> :wq 

# vi /etc/php.ini

 

5. 웹 서버 시작

 # service httpd start

 

6. 웹페이지 생성

 /var/www/html : 웹문서가 저장된 디렉터리

 순서 : vi -> i -> 소스코드 입력 -> Ctrl+o -> 7G -> 소스코드 입력 ->

 Ctrl+o -> O -> 소스코드 입력 -> ESC -> :wq

 # cd /var/www/html 

 # vi index.html

 

<html>

<head>

<meta charset="utf-8">

<title> 정보보안 웹사이트 </title>

</head>

<body>

<?

$i = 1;

while($i <= 5)

{

echo "테스트 웹사이트<br>";

$i++;

}

?>

</body>

</html>

 

 

7. IP주소 확인

 # ip a

 

8. 웹서버 접속

 웹브라우저로 http://192.168.8.3 으로 접속한다.

 


 

사용자는 하나 이상의 그룹에 포함되어 있다.

root : 관리자 (root 그룹에 포함되어 있다.)

 

/etc/passwd : 사용자의 정보가 저장된 파일

/etc/shadow : 사용자의 비밀번호가 저장된 파일

/etc/group : 그룹의 정보가 저장된 파일

/etc/gshadow : 그룹의 비밀번호가 저장된 파일

 

--실습--

사용자 생성/삭제

 

 사용자 생성 : useradd

 사용자 삭제 : userdel

 

형식 :

Usage: useradd [options] LOGIN

useradd -D

useradd -D [options]

 

- etc/passwd 필드 정보 알아보기

  root:x:0:0:root:/root:/bin/bash

   1   :2 :3 :4: 5   :  6    : 7 

 

각 필드를 구분하는 구분자는? :

/etc/passwd 파일은 단순 텍스트 파일로 되어있다.

권한 : -rw-r--r--. (0644) root root

  1 : 사용자명

  2 : 비밀번호 (현재는 사용하지 않고 /etc/shadow 이동했다.)

  3 : UID (유저 아이디 : 시스템에서 사용자에게 부여한 번호)

  4 : GID (그룹 아이디 : 시스템에서 그룹에게 부여한 번호 (기본그룹))

  5 : 설명문 (코멘트로 설명을 달 때 사용한다.)

  6 : 홈디렉터리 (사용자마다 시스템에서 할당된 공간)

  7 : 로그인 쉘 (로그인할 때 사용되는 프로그램)

 

- /etc/shadow 필드 정보 알아보기  

  [root@localhost ~]# head -1 /etc/shadow
  root:$6$O0NXHqbUmWSV92DD$GSXo/bFZwGSXd....생략....W.::0:99999:7:::

    1                                    2                                      

 

    각 필드를 구분하는 구분자는? :

  /etc/shadow 파일은 단순 텍스트 파일로 되어있다.

  권한 : -rw-r--r--. (0644) root root

 

   1 : 사용자

   2 : 비밀번호

   $6$의 의미 : sha512 알고리즘을 사용

  $O0NXHqbUmWSV92DD$ 의 의미 : salt (암호화 할때 사용하는것) 

   

 


--실습--

사용자가 웹 페이지를 사용할 수 있도록 설정

 

순서 : vi -> 17G -> i -> # -> ESC -> 24G -> x -> :wq

 

1. 웹 서버 설정파일 수정

 # vi /etc/httpd/conf.d/userdir.conf

 17번째 UserDir ~~ 주석 

 24번째 UserDir ~~ 주석 해제

 저장 후 종료

 

2. 웹 서버 재시작

 # service httpd restart

 

3. 웹 페이지 생성

 # su - user1

 $ mkdir public_html

 $ ls -ld 

drwx------. 3 user1 user1 81 12월 31 17:29 .

  ---> 권한이 없기 때문에 apache 사용자가 접근하지 못한다 --> 권한 바꿔주기

$ chmod 711 .

$ ls -ld
drwx--x--x. 3 user1 user1 81 12월 31 17:29 .

 

$cd public_html

$alias vi='vim'

$vi index.html을 하여서 코딩 후 

 

일반 유저를 빠져나간다.

$ exit

 

일반 유저의 디렉터리로 접근시 SELinux(보안 관련 내용) 때문에

Forbidden (접근 금지)가 발생하므로 chcon 명령어로

context를 변경하면 일반 유저의 디렉터리로 접근이 가능해진다.

(*만약 setenforce 0으로 바꿨다면 다시 1로 바꿔주기) --> # setenforce 1

# chcon -R -t httpd_sys_content_t /home/user1/public_html/

# ls -Z

drwxrwxr-x. user1 user1 unconfined_u:object_r:httpd_sys_content_t:s0 public_html

 

 

http://192.168.8.3/~user1 을 들어가서 확인해보기

 

 

 

반응형

BELATED ARTICLES

more