텍스트 편집

  • 학습 개요
    vi 편집기가 제공하는 다양한 편집 기능을 사용하여 텍스트 파일을 편집하는 방법을 알아보자.
    파일의 이름이나 속성으로 파일을 찾거나 파일에서 특정 문자열을 포함하는 라인을 찾는 셸 명령을 알아보자.

  • 학습 목표

    1. vi 편집기의 커서 이동, 편집, 복사, 붙여넣기 방법.
    2. vi 편집기의 라인 모드에서 검색과 대치 명령 사용.
    3. 파일을 찾거나 문자열을 검색하는 방법.

편집기

리눅스와 텍스트 파일

  • 리눅스 시스템에서 중요한 설정 정보나 쉘 스크립트가 텍스트 파일로 존재함
  • 텍스트 파일은 공유가 쉽고, 간단하게 편집할 수 있는 장점이 있음.

리눅스 텍스트 편집기의 종류

  • gedit
    • GNOME 데스크톱에서 제공하는 작고 가벼운 편집기
  • emacs
    • 화면 단위 편집기로 다양한 기능을 제공하지만 사용하기 어려움
  • vi
    • 유닉스 계열 운영체제의 보편적인 화면 편집기
    • vi는 vim으로 alias 되어 있음
    • vim(Vi Improved)이 vi와 다른 점
      • 파일의 구조를 표시하기 위해 컬러 사용
      • 마우스 지원, 다중 undo, 화면 분할
      • 블록을 선택할 경우 비주얼 모드 지원

vi [option] [filename]

vi는 모달 편집기로 사용중에는 다른 작업을 수행할 수 없음.

vi 편집기와 세가지 모드

  • 명령 모드
    • 커서 이동, 삭제, 복사, 붙여넣기
    • 어떤 모드에서든 esc를 두번 누르면 명령 모드로 나옴.
  • 라인 모드
    • 저장, 검색, 대치
  • 입력 모드
    • i : insert
    • a : add
    • o : open a line
    • c : change

vi 종료

  • 명령 모드에서 키보드 명령 입력
    • ZZ : 변경 내용을 저장후 종료
  • 라인모드에서
    • :q : 변경 내용 없이 종료
    • :q! : 저장 없이 강제 종료
    • :w [filename] : 종료 없이 저장
    • :wq [filename] : 저장 후 종료
    • :x [filename] : 변경이 있었다면 저장후 종료
    • :x! [filename] : 같은 이름의 파일이 있다면 덮어 씀

vi로 편집하기

텍스트 입력

  • 초기 명령 모드에서 입력 모드로 이동 후 입력 가능함
  • 입력 모드일 때 화면의 하단에 -- insert --가 표시됨
  • 입력 모드에서 esc를 누르면 명령모드로 돌아감
명령 키 설명
a 현재 커서 위치의 오른쪽부터 텍스트를 추가(add)
A 현재 라인의 끝에 텍스트 추가
i 현재 커서의 위치부터 텍스트 삽입(insert)
I 현재 라인의 처음에 텍스트 삽입
o 현재 라인의 아래에 라인이 열리고(open) 텍스트 추가
O 현재 라인의 위에 라인이 열리고 텍스트를 추가

커서 이동 명령

  • 명령 모드에서 화살표 키와 page up/down 키를 사용할 수 있음
  • 그 외의 다양한 키 존재
명령 키 설명
hjkl left, down, up, right
ctrl + f / ctrl + b page up / down
w 다음 단어의 첫 자로 이동
e 다음 단어의 끝 자로 이동
b 앞 단어의 첫 자로 이동
$ 현재 라인의 마지막 칸으로 이동
20G 20번째 라인으로 이동
G 마지막 라인으로 이동
5j 현재 라인에서 아래로 5라인 이동

텍스트 삭제 명령

명령 모드에서 텍스트를 삭제하거나 변경함.
적당한 위치로 커서를 옮긴 후 삭제함

명령 키 설명
x 커서 위치의 한 문자 삭제
dw 커서의 위치부터 다음 단어 전까지 삭제
d$ 또는 D 커서의 위치부터 현재 라인의 끝까지 삭제
d0 커서의 왼쪽부터 현재 라인의 처음까지 삭제
dd 현재 라인 삭제
dG 현재 라인부터 파일의 끝까지 삭제
d20G 현재 라인부터 라인번호 20까지 삭제
3dW 커서의 위치부터 세 단어를 삭제
5dd 현재 라인부터 다섯 라인을 삭제

텍스트 변경 또는 치환 명령

일정 부분의 텍스트를 삭제하고 입력 모드로 전환됨
삭제, 변경 또는 붙여넣기를 한 후 커서를 이동하고 도트(.) 명령을 수행하면 앞서 수행한 작업을 반복할 수 있음

명령 키 설명
r 커서 위치의 한 문자를 대치
R 커서의 위치부터 계속 대치할 수 있음. 입력 모드로 전환 됨(수정)
s 또는 cl 커서 위치의 문자가 삭제되고 입력 모드로 전환됨 (삽입)
S 또는 cc 현재 라인에 존재하는 문자가 삭제되고 현재 라인에서 입력 모드로 전환
cw 커서 위치부터 단어의 끝까지 삭제되고 입력 모드로 전환
cb 커서 위치부터 단어의 앞까지 "
c) 커서 위치부터 문장의 끝까지 "
c} 커서 위치부터 문잔의 끝까지 "

텍스트 복사

  • 삭제나 변경을 위한 명령 키를 사용할 때 텍스트가 복사 됨
  • 또는 커서를 적당한 위치로 이동한 후 y 명령을 사용하여 복사

텍스트 붙여 넣기

  • P 또는 p
  • 커서의 왼편/위 라인 또는 오른편 아래 라인에 붙여넣기 할 수 있음
명령 키 설명
yy 현재 라인 복사
5yy 현재 라인부터 다섯 라인 복사
yw 커서의 위치부터 다음 단어의 앞 까지 복사
y$ 커서의 위치부터 라인의 끝까지 복사
y0 커서의 왼쪽 부터 라인의 앞까지 복사
y^ 커서의 왼쪽 부터 라인 앞의 빈칸은 무시 하고 복사
yG 현재 라인부터 파일의 끝까지 복사
y) 커서의 위치부터 한 문장을 복사
y} 커서의 위치부터 한 문단을 복사

블록 지정하기

  • v 또는 V 명령을 사용하여 문자 또는 라인 단위로 지정함
    • 블록을 지정하고 싶은 곳에 커서를 이동하고 화살표를 이용해서 블록을 지정하고 삭제(x) 또는 복사(y) 함.
  • 커서를 이동한 후 p 또는 P 명령을 사용하여 붙여 넣기 할 수 있음
명령 키 설명
v 비주얼 모드에서 한 번에 한 문자씩 선택
V 비주얼 모드에서 한 번에 한 라인씩 선택

명령 취소와 기타 명령

명령 모드에서 다음 명령들을 수행 가능

명령 키 설명
u 이전 변경 작업 취소(undo)
ctrl + r 취소를 취소
:e! 마지막 저장을 취소하고 다시 작업
:n n번 라인으로 이동
J 또는 :j 현재 라인과 아래 라인을 합침
!:command vi 를 사용중에 쉘 명령 command를 수행
:sh vi를 빠져나가 쉘 사용 후 exit 할 시 vi로 돌아옴
:se nu 화면 좌측에 라인 번호 표시
ctrl + g 화면 하단에 파일 이름, 전체 라인 수, 현재 라인의 상대 적인 퍼센티지 표시
:r filename 지정된 파일의 내용을 읽어 현재 커서의 아래 줄에 삽입

검색 명령

  • 한 라인에서 검색 할 때 명령 모드에서 f 사용
    • fa 명령은 커서 다음 위치부터 a를 찾음
    • ;을 사용하여 검색 반복
  • 파일 전체를 대상으로 검색 할 때 다음 명령 사용
명령 키 설명
/pattern 순 방향으로 pattern을 검색하여 커서 이동
/pattern/+num pattern 검색 후 그 뒤 + num 번째 라인으로 이동
?pattern 역방향으로 pattern 검색하여 커서 이동
?pattern? -num pattern을 검색하고 그 앞 - num 번째 라인으로 이동
n 이전 검색을 같은 방향으로 반복
N 이전 검색을 반대 방향으로 반복
.* RegExp 사용
?[pP]rint [] 안의 문자 중 하나와 매치

검색 대치

  • 문자열을 검색하여 대치 가능
  • :[g][address]s/pattern/replacement[/option]
명령 키 설명
:s/pattern/replacement 커서가 위치한 라인에서 첫 번째 등장하는 pattern을 replacement에 해당하는 문자열로 대치
:%s/pattern/replacement 전체 범위의 라인에서 위와 같은 것을 수행. % 대신 1,$를 넣어도 됨
:%s/pattern/replacement/g 위와 같으나 등장하는 모든 pattern을 대치
:1,10s/pattern/replacemant/g 위와 같으나 1 ~ 10 라인에서 수행 됨

파일 찾기와 문자열 검색

locate

  • 문자열 패턴이 파일 이름에 포함될 때, 해당 파일의 이름을 출력
    • 절대 경로 상의 디렉토리나 파일 이름에 문자열이 포함되면 출력
  • locate [options] pattern
    • updated 명령에서 만들어진 데이터베이스에서 검색함
    • 접근할 수 없는 파일은 출력 안됨
    • 옵션 -b를 사용하면 마지막 이름만 검색함
  [ec2-user@ip-aws ~]$ locate -b xml
  /etc/amazon/ssm/seelog.xml.template
  /usr/bin/iptables-xml
  /usr/bin/rst2pseudoxml
  /usr/bin/rst2xml
  /usr/bin/xmlcatalog
  /usr/bin/xmllint
  /usr/bin/xmlwf
  ...

find

  • 검색 위치에서 조건에 맞는 파일을 찾고, 검색된 파일을 대상으로 명령을 수행할 수 있음.
    • 파일의 이름, 소유자, 접근 권함, 크기, 수정시간 등의 속성을 조건으로 사용 가능.
  • find [pathnames] [expression]
    • pathname(경로)을 지정하지 않으면 현재 디렉토리( 및 하위 디렉토리)을 기준으로 함.
    • expression(조건이나 액션)이 주어지지 않으면 -print가 기본으로 주어짐
  • EX)
    • 단순히 find 명령을 수행하면 현재 디렉토리와 서브 디렉토리에 존재하는 모든 파일과 디렉토리의 이름을 라인 단위로 출력
    • find /etc -iname '*passwd*'는 이름에 passwd를 포함하는 파일을 찾음
    • find ~ | wc -l은 사용자가 가지고 있는 파일의 총 개수를 출력함

find 명령에서 조건의 지정

  • -cmin n
    • 파일 또는 디렉토리 내용이나 파일 속성의 마지막 수정 시간이 정확히 n분인 경우.
    • n분 보다 작다면 -n 크다면 +n
  • -cnewer file
    • 파일 또는 디렉토리의 내용이나 파일 속성의 마지막 수정 시간이 지전된 file 보다 죄근 것임을 의미
  • -empty
    • 파일 또는 디렉토리가 비어 있는 경우
  • -name pattern
    • 파일 또는 디렉토리의 이름이 pattern과 매칭 되는 경우
  • -iname pattern
    • -name과 같으나 대소문자 구분 X
  • -nouser
    • 파일 또는 디렉토리가 유효한 사용자에 속하지 않은 경우
  • -perm mode
    • 파일 또는 디렉토리의 접근 권한이 mode와 같은 경우.(mode는 8진수 표기나 기호 표기법)
  • -size n
    • 파일 또는 디렉토리의 크기가 n인 경우.
    • 단위로 b(512바이트 블록), c(바이트), k, M, G가 있음
  • -type c
    • 파일의 타입이 c인 경우
    • 파일 타입
      • b : 블록 디바이스
      • c : 문자 디바이스
      • d : 디렉토리
      • f : 정규 파일
      • l : 심볼릭 링크
  • -user name
    • 파일 또는 디렉토리의 소유자가 name인 경우.
      • name또는 UID 사용 가능

find 명령에서 사용되는 액션

  • 검색 된 각 파일에 특별한 액션을 수행할 수 있음
    • 이미 정의 된 액션 또는 사용자 액션을 적용
명령 키 설명
-delete 파일 삭제
-ls 파일 또는 디렉토리의 정보를 자세히 보여줌
-print 경로를 포함하여 파일 이름을 화면에 출력함. 기본 옵션
-quit 매칭 되는 것이 있다면 종료
-exec command {} ; 사용자 정의 액션으로 임의의 command를 수행

find 명령 사용의 예

  • find /user/share -siae +10M
  • find /data -size +500M -size -5G -exec du '{}' ;
  • find . -type f -exec file '[]' ;
  • find /home -user jeaha -ls
  • find /home -user jeaha -or -group staff -ls
  • find /bin -perm 755
  • find /home/jeaha -perm -444 -type d -ls
  • find /bin /usr/bin /sbin /usr/sbin -ctim -3
  • find ~ (-type f -not -perm 0600 ) -or (-type d -not -perm 0700)

grep

  • 파일에서 지정된 문자열 패턴을 포함한 라인을 찾아서 출력
    • 파이프(|)를 사용하여 앞 명령의 결과(검색된 파일)를 입력으로 받아 검색할 때 grep을 자주 사용함
  • grep [options] pattern [files]
    • pattern은 찾으려는 문자열이며 정규식 표현 가능
  • option
    • -r : 디렉토리가 지정될 때, 포함된 모든 파일을 대상으로 검색
    • -i : 대소문자를 구분하지 않음
    • -v : 매칭이 일어나지 않은 라인 출력
  • EX
    • grep root /etc/passwd
    • grep -n unix ~/*.txt
    • ip addr show | grep inet
728x90
반응형

'OS > Linux' 카테고리의 다른 글

[Linux] 프로세스 관리  (0) 2020.11.01
[Linux] 파일 시스템 관리  (0) 2020.10.25
[Linux] 사용자 관리  (0) 2020.10.25
[Linux] 시작과 종료  (0) 2020.10.24
[Linux] 파일과 디렉토리  (0) 2020.10.24

+ Recent posts