텍스트 편집
편집기
리눅스와 텍스트 파일
- 리눅스 시스템에서 중요한 설정 정보나 쉘 스크립트가 텍스트 파일로 존재함
- 텍스트 파일은 공유가 쉽고, 간단하게 편집할 수 있는 장점이 있음.
리눅스 텍스트 편집기의 종류
- 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 종료
- 명령 모드에서 키보드 명령 입력
- 라인모드에서
: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
-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인 경우.
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