vi, vim

MJMM·2024년 7월 22일
1

linux

목록 보기
1/2

vi , vim

리눅스에서 사용되는 가장 대표적인 문서 편집기 (기본 지원함)
윈도우 메모장과 비슷한 기능을 하며 파일 편집이 가능

사용법

  • vi(m) 파일이름 : vi(m)로 파일을 열기
  • vi(m) + 파일이름 : 기존 파일 맨 마지막 라인에 커서를 위치 시킴
  • vi(m) +숫자(n) 파일이름 : 기존 파일의 원하는 라인(n행)부터 커서 위치 시킴
 vim /etc/sysconfig/selinux - 파일 열기
 vim + /etc/sysconfig/selinux - 커서가 맨 아래에 위치함
 vim +n /etc/sysconfig/selinux - 커서가 n번째 행에 위치함
 vim +/selinux /etc/sysconfig/selinux  - /selinux 라는 단어가 포함된 행에 위치함
 esc  :q 로 나감

VI편집기 모드(3가지)

1) 입력모드 : 글자를 입력할 수 있는 모드
2) 명령모드(default) : 파일을 편집할 수 있는 작업이 가능한 모드
3) 실행모드 : 파일 저장, 읽기, 외부 명령 실행, 종료 등을 수행할 수 있는 모드

모드간 이동

각 모드별 직접 연결된 모드간에 이동이 가능함. 하지만, 건너뛰어 이동하는 것은 불가.

입력 모드 <=> 명령모드(default) <=> 실행모드
=> "ESC"키 입력 <=
a,A,i,I,o,O <= => ":"

1. 커서의 이동

   => 방향키를 사용!!
 k : 위로 이동
 j : 아래 이동
 h : 왼쪽 이동
 l : 오른쪽 이동

2. 행단위 이동

 ^ : 행에 맨 왼쪽의 첫글자로 커서 이동
 $ : 행에 마지막 글자의 위치로 커서 이동
 G : 파일의 마지막 행
 nG : n번째 행으로 이동
 [[ : 커서를 파일의 맨 처음으로 이동
 ]] : 커서를 파일의 맨 마지막 행으로 이동

3. 입력모드(글자입력 모드) - a,A,i,I,o,O

 a(커서 바로 다음부터 편집)
 A(커서를 행의 마지막으로 이동 후 편집)
 i(커서 위치에서 편집)
 I(커서를 행의 처음으로 이동 후 편집)
 o(커서 아래에 행을 추가하고 편집)
 O(커서 위에 행을 추가하고 편집)

4. 명령모드(ESC) => 문서 편집

x : 한글자씩 삭제
b : 한단어씩 뒤로 이동
db : 한단어씩 뒤로(왼쪽) 삭제
dd : 한줄(행) 삭제
ndd : n(숫자) 만큼 행을 삭제
yy : 한줄(행) 복사
nyy : n(숫자) 만큼 행을 복사
p : 현재 커서 아래에 붙여넣기
P : 현재 커서 위치에 붙여넣기
np : n(숫자)만큼 행을 붙여넣기
dw : 커서위치 한단어 삭제
D : 커서 위치에서 라인 마지막까지 삭제
ndw : n(숫자) 단어 삭제
nx : n(숫자) 글자만큼 삭제
y$ : 커서의 위치에서 라인 마지막까지 복사
u : 마지막 변경된 내용 취소
U : 현재 행에서 변경된 내용 모두 취소

5. 단어 검색하기

/(단어) : 문서내에 단어를 위에서 아래로 검색

?(단어) : 문서내에 단어를 아래에서 위로 검색

n - 진행방향으로 다음 단어 검색
N - 진행 반대방향으로 다음 단어 검색

  1. 치환(찾아서 바꾸기) : 문서상에 특정 단어를 찾아서 새로운 단어로 변경하는 것!!

    [사용형식]
    :[n]s/old/new
    n - 라인(행)
    old - 이전단어(검색 단어)
    new - 새로운 단어(변경할 단어)

    ex)
    :39s/PASS/Word => 39줄에 있는 PASS => Word로 변경
    :34,42s/PASS/Word => 34 ~ 42줄에 있는 PASS => Word로 변경
    :%s/PASS/Word => 문서 전체에 있는 PASS => Word로 변경
    "/g"옵션 : 전부를 의미함.
    "/i" 옵션 : 대소문자 구분하지 않음.

  2. 실행모드(:)
    :w => 파일 저장
    :q => 종료
    :wq => 파일을 저장하고 종료
    :{}! => 강제 실행({} 명령) ex) q!
    :x => 저장하고 종료
    :e 파일명 => "파일명"의 파일을 불러들여서 기존 파일 대체
    :r 파일명 => "파일명"의 파일을 불러들여서 현 커서 위치에 추가
    :nr 파일명 => "파일명"의 파일을 불러들여서 n줄 이후에 추가
    :!명령어 => 외부 명령어를 실행
    ex) :!ls -l => ls -l을 터미널에서 사용한 것과 같은 출력 결과
    :e! => 현재 문서 내에서 변경한 모든 내용을 취소 (문서를 다시 불러와 준다)
    :set nu => 편집 문서에 행번호를 표기
    :set nonu => 편집 문서에 행번호를 표기 제거(비활성화)
    :set ai => 자동 들여쓰기
    :set wrap => 자동 줄바꿈 설정
    :set ts=숫자 => 탭키를 숫자만큼 공간으로 설정하기(기본 8자)
    :n => n(숫자)번째 행으로 이동
    :f => 현재 파일 정보를 확인

    추가

  • :1,$y => 파일 전체 복사
  • :1, $ => 1줄부터 마지막줄까지
  • :10,15 => 10줄부터 15줄까지...
  • :-5,+5y => 현재 커서 위치에서 5줄 이전부터 5줄 이후까지 복사
  • :3,. => 3줄부터 현재 커서 위치까지
  • :.,$ => 현재 커서 위치에서 마지막까지
  • :.,$-2 => 현재 커서 위체서 마지막 라인 2줄 이전까지

실습

사전작업

root로 작업(#)
mkdir -p /test/viTest -> /test/viTest 디렉터리를 생성
cd /test/viTest
cp /etc/login.defs /test/viTest/login.defs

실습할 파일 : /test/viTest/login.defs
테스트 조건 : 절대로 vi(m)나와서 작업하지 않습니다. 오직 vi(m) 내에서 모든 작업 진행!!!

루트 권한으로 전환:
sudo su -

디렉토리 생성:
mkdir -p /test/viTest

디렉토리로 이동:
cd /test/viTest

파일 복사:
cp /etc/login.defs /test/viTest/login.defs

파일 열기 :
vi(m) /test/viTest/login.defs

1) /test/viTest/ 디렉터리 하위에 파일 A, B, C를 생성!

:!touch /test/viTest/A /test/viTest/B /test/viTest/C

2) 치환 작업 : 'PASS(->word)', 'number(->PASS)' 단어를 치환...

:%s/PASS/word/g
:%s/number/PASS/g

3) 5 ~ 12번째 라인을 2번째 라인 밑에 복사

:5,12t2

4) 14번째 라인으로 이동 후에 ls -l /var/log/의 명령어 결과를 문서 내용으로 추가!!

:14
:r !ls -l /var/log/

5) 편집한 내용을 저장[종료는 하지 않음]

:w

6) 현재 열려있는 파일의 내용을 비어 있는 /test/viTest/B 파일에 입력 후에 B파일을 열어 내용 입력이 되었는 확인

:w /test/viTest/B
:e /test/viTest/B

7) 현재 열려있는 B파일의 내용을 수정![치환 작업X] UID 단어를 찾아 UID를 수동으로 지워준 다음,
Xwindow라는 내용으로 변경 후에 저장(UID -> Xwindow로)

/UID로 UID 검색
cw로 단어 변경 모드 진입
Xwindow 입력 후 <Esc>

/backup 디렉터리를 생성 END 이름으로 파일을 추가 저장

:!mkdir /backup
:w /backup/END

8) 현재 vi 화면에서 새로운 문서를 불러온 후에

:enew

"안녕하세요!" 내용을 입력한 후에

i -> 안녕하세요 -> Esc

/backup/END 파일을 불러오기. 단, 현재 새로만들기로 이용해서 불러온 문서는 별도로 저장하지 않습니다.

:r /backup/END

사용자 생성 및 전환

사용자 생성

root에서
useradd testuser1
혹은 일반사용자에서
sudo useradd testuser1
비밀번호 설정
passwd testuser1

> Changing password for user testuser1.
> New password: 1111
> BAD PASSWORD: The password is a palindrome
> Retype new password: 1111
> passwd: all authentication tokens updated successfully.
사용자 전환
su testuser1

whoami 
>testuser1 
로 바뀐것을 확인할 수 있다

exit -> 나가기

루트 -> 일반 계정 전환은 인증이 불필요함
일반 -> 루트 전환은 인증이 필요함

sudo

제한적 관리자 권한 사용 명령어. 관리자 권한으로 실행해야 하는 경우.

sudo [옵션] or [관리자 권한으로 실행 할 명령어] 

-i : 해당 터미널에서 관리자 권한 세션으로 처리
$ gpasswd -a testuser1 wheel
> gpasswd: Permission denied.

$ sudo gpasswd -a testuser1 wheel
> Adding user testuser1 to group wheel

sudo 는 관리자 권한을 사용할 수 있는 설정이 되어 있는 경우에만 사용이 가능함.

sudo 설정 변경은 "visudo"를 통해서 변경이 가능함.
설정파일의 위치 : /etc/sudoers

0개의 댓글