'OS/리눅스 & 유닉스'에 해당되는 글 130건

  1. 2010.07.26 chmod 파일 권한 변경
  2. 2010.06.30 tar 압축
  3. 2010.05.18 crontab(3)
  4. 2010.05.18 crontab(2)
  5. 2010.05.18 crontab(1)
  6. 2010.05.07 vi 에디터
  7. 2010.04.22 vi 메뉴얼
  8. 2010.04.20 grep 명령어
  9. 2010.04.20 리눅스 명령어
  10. 2010.04.20 vi 명령어

chmod 파일 권한 변경

OS/리눅스 & 유닉스 2010. 7. 26. 13:57

chmod [mode] [files]


리눅스 시스템의 파일은 사용자에 따라 접근 권한을 달리 설절할 수 있다.

사용자는 소유자, 그룹, 기타 사용자로 나뉘며, 파일에 대한 접근 권한은 읽기, 쓰기, 실행이 있다.

소유자의 읽기 권한은 0400, 쓰기 권한은 0200, 실행 권한은 0100, 그룹에 대한 읽기, 쓰기, 실행 권한은 각각 040, 020, 010, 그리고 기타 사용자에 대한 읽기, 쓰기, 실행 권한은 04, 02, 01로 나타낸다.

0644는 0400, 0200, 040, 04를 더한 값이므로 특정 파일에 대한 권한이 0644라는 의미는 이 파일에 대한 소유자는 읽기와 쓰기, 그룹과 기타 사용자는 읽기 권한이 있음을 의미한다

'OS > 리눅스 & 유닉스' 카테고리의 다른 글

rm  (0) 2010.07.30
크론, crontab  (0) 2010.07.26
tar 압축  (0) 2010.06.30
crontab(3)  (0) 2010.05.18
crontab(2)  (0) 2010.05.18
:

tar 압축

OS/리눅스 & 유닉스 2010. 6. 30. 11:31

묶기

1. Creating an archive 
$ tar cvf archive_name.tar dirname/
압축없이 묶기
- c : create a new archive
- v : verbosely list files which are processed.
- f : following is the archive file name

2. Creating a gzipped tar archive
$ tar cvzf archive_name.tar.gz dirname/
- z : filter the archive through gzip

3. Creating a bzipped tar archive 
$ tar cvjf archive_name.tar.bz2 dirname/
- j : filter the archive through bzip2

gzip VS bzip2
bzip2  은 압축하고 압축을 푸는데 gzip 보다 시간이 더 걸린다. 
bzip2 로 묶은 크기는 gizp 보다 작다.

풀기

1. Extract a *.tar
$ tar xvf archive_name.tar
- x : extract files from archive

2. Extract a gzipped tar archive (*.tar.gz)
$ tar xvzf archive_name.tar.gz

3. Extract a bzipped tar archive (*.tar.bz2)
$ tar xvjf archive_name.tar.bz2

리스트 보기

1. View the tar archive file content without extracting 
$ tar tvf archive_name.tar

2. View a gzipped tar (*.tar.gz)
$ tar tvzf archive_name.tar.gz

3. View a bzipped tar (*.tar.bz2)
$ tar tvjf archive_name.tar.bz2

출처 - http://seoeun25.tistory.com/478

'OS > 리눅스 & 유닉스' 카테고리의 다른 글

크론, crontab  (0) 2010.07.26
chmod 파일 권한 변경  (0) 2010.07.26
crontab(3)  (0) 2010.05.18
crontab(2)  (0) 2010.05.18
crontab(1)  (0) 2010.05.18
:

crontab(3)

OS/리눅스 & 유닉스 2010. 5. 18. 18:02

crontab 

 

  - 시스템의 주기적인  cron 작업의 설정, 수정등을 하는 명령어
  - 시스템에서 가장 중요한 데몬중의 하나인 crond 와 직접적인 관련이 있는 명령어
  - crond 데몬은  /etc/rc.d/init.d/crond 의 스크립트에 의해 시작, 종료, 재시작될수 있음

  - crond 데몬
     - /etc/crontab 파일
     - /etc/rc.d/init.d/crond 스크립트
     - /var/spool/cron 디렉토리내의 크론설정파일들

 

 

명령어 위치 : /usr/bin/crontab
사용형식     : crontab [ -u 사용자id ] 파일
                   crontab [ -u 사용자id ] { -l | -r | -e }

 

cat /etc/crontab
매시 1회 자동실행하기 위한 시스템 크론 설정

01 * * * * root run-parts /etc/cron.hourly
  - 매일 매시 01분마다 /etc/cron.hourly 디렉토리내에 존재하는 파일들을 실행


매일 1회 자동실행하기 위한 시스템 크론설정

02 4 * * * root run-parts /etc/cron.daily
 - 매일 새벽 4시 02분마다 /etc/cron.daily  디렉토리내에 존재하는 파일들을 실행

 

매주 1회 자동실행하기 위한 시스템 크론설정

22 4 * * 0 root run-parts /etc/cron.weekly
 - 매주 일요일 새벽 4시 22분마다 /etc/cron.weekly 디렉토리내에 존재하는 파일들을 실행

 

매월 1회 자동실행하기 위한 시스템 크론설정

42 4 1 * * root run-parts /etc/cron.monthly
 ->매월 1일 새벽 4시 42분마다 /etc/cron.monthly 디렉토리내에 존재하는 파일들을 실행


* root 이외의 사용자에게 crontab 명령어를 이용할 수 있게 하는 방법

  - /etc/cron.allow 파일에 사용자의 id를 등록


* 일반사용자의 crontab 명령어사용을 제안하고자 한다면
  - /etc/cron.deny 파일에 사용자의 id 를 등록


 

* cron 설정하는 방법

 40 3 * * * root /home/mysql/mysql_backup.sh

 

 맨 앞의 40은 40분을 의미함 (분을 의미:0~59)

 그 뒤의 3은 03시를 의미함 (시를 의미:0~23)

 그 뒤의 * 은 매일을 의미함 (일을 의미:1~31)

 그 뒤의 * 은 매월을 의미함 (월을 의미:1~12)

 그 뒤의 * 은 매주를 의미함(요일을 의미 1:월요일~7:일용일)

 그 뒤의 root /home/mysql/mysql_backup.sh 는 root  계정으로 mysql_backup.sh을 실행하라는

 의미

 

 * 문자 : 각 필드에 해당하는 모든 숫자를 의미

 - 문자 : 각 필드자리에 하이픈 문자가 올수 있음

   ex) 일 필드자리에 11-15 (11,12,13,14,15일을 의미)

 ,문자 : 각 필드자리에 콤마문자가 올수 있음

   ex) 일 필드자리에 1,11,21 (1일,11일 21일을 의미)

'OS > 리눅스 & 유닉스' 카테고리의 다른 글

chmod 파일 권한 변경  (0) 2010.07.26
tar 압축  (0) 2010.06.30
crontab(2)  (0) 2010.05.18
crontab(1)  (0) 2010.05.18
vi 에디터  (0) 2010.05.07
:

crontab(2)

OS/리눅스 & 유닉스 2010. 5. 18. 18:01

crontab 이란?
서버 스스로 정해둔 명령을 일정 기간마다 실행하도록 하는 것입니다.

사용형식

crontab [ -u 사용자 id] 파일
crontab [-u 사용자 id] { -l | -r | -e}

# crontab -l : 예약된 작업리스트
# crontab -e : 예약된 작업 수정
# crontab -r : 예약된 작업 삭제

cron 실행 확인
# ps -ef | grep crond

cron 시작
# /etc/init.d/cron start{restart | stop}

일반사용자에게 crontab 명령어 사용하도록 설정 허가
/etc/cron.allow 여기에 ID 등록

일반사용자의 crontab 명령어사용을 제한
/etc/cron.deny  에 ID를 등록

등록 내용 설정
"분,시,일,월,요일, 실행명령" 순으로 설정

crontab 파일 형식
------    --------  ---------------------------------------------------
필  드    의  미    범  위
------    --------  ---------------------------------------------------
첫번째    분        0-59
두번째    시        0-23
세번째    일        0-31
네번째    월        1-12
다섯번째  요일      0-7 (0 또는 7=일요일, 1=월, 2=화,...)
여섯번째  명령어    실행할 명령을 한줄로 쓴다.
------    --------  ---------------------------------------------------

- 한 줄당 하나의 명령 (두줄로 나눠서 표시할 수 없음)
- # 으로 시작하는 줄은 실행하지 않는다 (주석)


/etc 에 아래 특정 폴더를 등록해 놓으면 그 폴더안의 실행 파일을 crontab의 설정 시간 마다 실행 
특정폴더: /etc/cron.hourly   /etc/cron.daily   /etc/cron.weekly   /etc/cron.monthly 


$ crontab -e
# /home 디렉토리를 /BACKUP/home 으로 백업해둠
# 30분, 새벽 4시와 낮 12시, 모든 일, 모든 월, 모든 요일
30 4,12 * * *  /usr/bin/rsync -avxH --delete /home /BACKUP/home > /dev/null 2>&1

 # 파일/디렉토리 퍼미션 설정
 # 40분, 새벽 1시, 매주 일요일
40 1    * * 0  /root/bin/perm_set.sh   > /dev/null 2>&1

 # 20분마다 실행

 */20 * * * * /shell/mrtg

위는 매일 4:30분과 12:30분에 rsync 명령을, 매주 일요일 1:40분에 perm_set.sh를 실행함을 의미한다.


설정 예

시간 설정에서 몇가지 의미있는 것들을 알아보자.

- '*'표시는 해당 필드의 모든 시간을 의미한다.
- 3,5,7 와 같이 콤마(,)로 구분하여 여러 시간대를 지정할 수 있다.
- 2-10와 같이 하이픈(-)으로 시간 범위도 지정할 수 있다.
- 2-10/3와 같이 하이픈(-)으로 시간 범위를 슬래쉬(/)로 시간 간격을 지정할 수 있다.
  (2~10까지 3간격으로. 즉, 3,6,9를 의미함)

=>  > /dev/null  2>&1 이 무슨 뜻입니까?
  지정한 명령어 처리 결과와 발생할지 모르는 에러메시지를 출력하지 않고 모두 버린다는(/dev/null)는
  뜻입니다. 만약 결과와 에러를 파일로 저장하려면 /dev/null 대신 파일명을 적어주면 됩니다.

예)
20 2 * * 6 명령어 => 매주 토요일 새벽 2:20
0 4-6 * * * 명령어 => 매일 오후 4,5,6시
5 */2 * * * 명령어 => 매일 2시간간격으로 5분대에
15 1 1 * * 명령어 => 매월 1일 새벽 1:15
30 0 1 1,7 * 명령어 => 1,7월 1일 새벽 0:30

10 2 * * * /app11/minsang/APP/ldap/run.sh > /app11/minsang/APP/ldap/cron_error.log
55 13 * * * /run.sh > /mail_cron_error.log
0,30 8-19 * * * /sendAdmin.sh > /cron_admin_error.log

'OS > 리눅스 & 유닉스' 카테고리의 다른 글

tar 압축  (0) 2010.06.30
crontab(3)  (0) 2010.05.18
crontab(1)  (0) 2010.05.18
vi 에디터  (0) 2010.05.07
vi 메뉴얼  (0) 2010.04.22
:

crontab(1)

OS/리눅스 & 유닉스 2010. 5. 18. 18:00

1. crontab

1) crontab이란?

- crontab은 시스템의 주기적인 cron작업의 설정, 수정 등을 하는 명령어입니다. 시스템에서 가장 중요한 데몬중의 하나인 crond와 직접적인 관련이 있는 명령어로서 시스템 최고관리자 또는 일반사용자들의 주기적이고 반복적인 특정 작업의 자동실행을 위하여 지원하는 명령어입니다.

 

2) 사용형식

사용형식 : crontab [ -u 사용자 ID] 파일

          crontab [ -u 사용자 ID ] { -l | -r | -e}

 

3) 시스템 크론데몬 crond 실행, 중지, 재시작하기

실행

#/etc/rc.d/init.d/crond start

중지

#/etc/rc.d/init.d/crond stop

재시작

#/etc/rc.d/init.d/crond restart

그림 1)crond 중지와 시작화면


  - ps –ef | grep crond로 현재 crond데몬이 실행중인가를 확인했습니다.

 

4) /etc/crontab

 - 시스템 크론데몬인 crond /etc/cronrab파일의 설정을 읽어 들여서 설정되어 있는 대로 실행을 합니다.

그림 2)/etc/crontab 출력화면


  - 크론설정은 위에서도 언급했듯이 주기적인 작업을 등록해 놓고 일정한 시간에 자동적으로 실행되기 위하여 쓰여진다 하였습니다. 그렇다면 우선 실행될 시간을 등록해 줘야 합니다. 그림2가 그런 시간과 실행될 디렉토리를 지정한 파일입니다.

    시간지정은 위 그림을 보시면 이해가 되실거라 생각하고 생략하고 요일은 0이 일요일부터 1이 월요일 6이 토요일 순으로 진행됩니다. 그리고 각 파트는 /etc/cron.#의 디렉토리를 참조 하여 그 디렉토리안의 파일들을 실행하게 됩니다. 예를 들어 매일 실행되는 크론은 /etc/cron.daily 디렉토리를 참조합니다. cron.daily디렉토리는 그림3에서 확인하실 수 있습니다.

그림 3)/etc/cron.daily 디렉토리


5) 일반사용자의 crontab명령어 사용허가 및 제한

 a) 리눅스 초기설정은 crontab명령어를 일반사용자에게 허락하지 않고 오직 최고관리자(root)에게만 그 권한을 부여합니다. 하지만 /etc/cron.allow /etc/cron.deny파일을 생성해 줌으로써 일반사용자도 crontab명령어를 이용할 수 있습니다.

* 만약 cron.allow 파일이 존재 한다면 root라하더라고 이 파일에 등록을 해야먄 crontab설정이 가능해집니다.

b) 사용자허가 파일만들기.

  ) /etc/cron.allow 파일을 생성해준다.

  ) /etc/cron.deny 파일을 생성해준다.

  ) 각 파일에 crontab명령어를 사용허가 및 제한 할 사용자 id를 기입한다.

* 위의 두 파일을 생성해 주었다면 꼭 allow파일에 root를 기입해주시길 바랍니다.

그림 4) /etc/cron.allow파일내용


) 설정이 끝났다면 #crontab –e로 한 번 확인을 해보시길 바랍니다. 만약 허가된 사용자라면 cron설정창으로 들어갈 것이고  제한된 사용자는 “you a not allowed to use this program”이라는 메시지를 출력하며 명령어가 허용되지 않습니다.

 

6) 개별사용자의 cron설정

* 혹시라도 혼돈할 수 있으니 정확히 설명하고 넘어가겠습니다. 위의 crontab설정들은 시스템전체에 해당하는 cron설정들 이였습니다. 예를 들자면 윈도우 업데이트 및 로그파일 관리등을 담당하며 지금부터 설명드리는 개별사용자의 cron파일은 자신의 디렉토리를 백업받는등 개별사용자가 자신에 맞게 자동적으로 실행되는 cron파일등을 저장 실행하는 설정입니다.

 

   a) 사용자의 cron설정방법

cron 설정

#crontab –e

cron 확인

# crontab –l

cron 삭제

# crontab –r

root로 일반사용자cron 설정

# crontab –u [ID] –e

 ex) crontab –u eunsu –e (eunsu란 계정의 cron을 설정한다.)

그림 5)cron 적용 출력


) crontab –e로 현재 루트의 cron설정을 입력했습니다.

   ) 입력한 결과를 crontab -l로 출력했습니다.

    - 출력결과 중 1-59부분은 cron시간 설정 시 “-“의 사용은 “~부터 ~까지라고 생각하시면 됩니다 즉 위의 결과는 1분부터 59분까지 계속적으로 왼편의 명령행을 실행하라는 의미가 됩니다.

    - 1,10,20의 의미는 1그리고 10그리고 20입니다. 즉 위의 경우 날짜란에 들어 갔으니 1 10 20일입니다.

   ) crontab –r로 현재 사용자(root) cron을 다 삭제했습니다.

   ) 다시확인 해 본 결과 crontab이 없을 음 확인 할 수 있습니다. 

 

* 개별사용자의 cron파일은 /var/spool/cron 디렉토리에서 확인 하실 수 있습니다.

'OS > 리눅스 & 유닉스' 카테고리의 다른 글

crontab(3)  (0) 2010.05.18
crontab(2)  (0) 2010.05.18
vi 에디터  (0) 2010.05.07
vi 메뉴얼  (0) 2010.04.22
grep 명령어  (0) 2010.04.20
:

vi 에디터

OS/리눅스 & 유닉스 2010. 5. 7. 13:01

파일 관련

:e <file> 파일 열기 (open)

:e 현재 편집 중인 파일 열기

:w 파일 저장 (save)

:w <file> 다른 이름으로 저장 (save as)

:w >> <file> 덧붙여 저장

ZZ 저장 후 종료

 

 이동키

 분류 키와 설명  VS(MS Visual Studio)키 
 문자 이동 hjkl  ←↑↓→
 단어 이동

wW

bB

eE 

Ctrl + →

Ctrl + ←

 

 행내 이동

0 또는 ^

Home

End 

 화면내 수직 이동

H   커서를 맨 윗행으로

M  커서를 중간 행으로

L    커서를 맨 아래 행으로

Ctrl + Home

 

 

 행간 이동

+  다음 행의 첫 글자로

- 위 행의 첫 글자로

 
 문단 이동 (){}   
 화면 이동

Ctrl+f   한 화면 아래로

Ctrl+b   한 화면 위로

Ctrl+d   반 화면 아래로

Ctrl+u   반 화면 위로

PgDn

PdUp

 

 

 Go

nG 또는 :n   n행으로

gg (vim)

G 맨 마지막 행으로 

Ctrl+g 

Ctrl + Home

Ctrl + End 

 현재행 자체 이동

z<CR>  현재 행을 화면 맨 위로

z.         현재 행을 화면 중앙으로

z-         현재 행을 화면 맨 아래로

 

 

 입력

aAiIoO

s 현재 글자 지우고 입력 (x i와 동일 효과)

cc 한 행을 지우고 입력 (dd O와 동일 효과)

 

 삭제

문자 삭제

    x 또는 dl

    X 또는 dh

단어 삭제

    dw 단어 삭제

행내 삭제

    d0  행 앞까지 삭제

    D 또는 d$   행 끝까지 삭제

행삭제

    dd 현재 행 삭제

    dj 현재 행+아래 행 2행 삭제

    dk 현재 행+위 행 2행 삭제

 

 vi 레지스터

  vi는 총 17개의 레지스터를 가지고 있는데 편집 중 내용을 지우면 그 내용은 "1 레지스터에 저장된다. 그리고 다시 삭제를 하면 "1 레지스터는 "2 레지스터로 이동하고 "1 레지스터에 새로 지운 내용이 저장된다. 이런 레지스터는 "1 ~ "9 이며 9개 공간을 가진 Queue와 같은 역할을 하는 셈이다. 레지스터를 보려면 :reg 를 실행한다.

 

    :reg  (vim 명령)

 

  그리고 특수 레지스터 8개를 포함해 총 17개의 레지스터를 가진다. 레지스터 이름은 "뒤에 한 문자가 오는 형식을 가지며 모든 레지스터의 역할은 아래와 같다.

 

"" 바로 이전에 삭제되거나 복사된 내용이 저장된다. "0 이나 "1 레지스터와 내용물이 동일하다.

"0 복사(yank)한 내용이 저장된다.

"1 ~ "9 삭제된 내용이 저장된다.

". 이제까지 타이핑한 내용

"% 현재 편집하는 파일이름

"/ 가장 최근에 검색한 문자열

"-

": 가장 최근의 ex 명령 (:를 누르고 내린 명령)

"#

 

 블록 설정 

v 키를 누른 후 커서 이동: 역상으로 블록이 설정된다.(vim)

Ctrl + v 키를 누른 후 커서 이동: 직사각 형태로 블록이 설정된다.(vim)

 

<블록 명령>

~   대소문자 전환             d   삭제             y    복사              c     치환

>   행 앞에 탭 삽입           <   행 앞에 탭 삭제                        J     라인 합침

n> n개의 탭 삽입             n<  n개의 탭 삭제                          

:    선택된 영역에 대한 ex명령                    U    대문자로       u     소문자로

 

 되돌리기

u        방금한 작업 취소

Ctrl+R  작업 되돌리기 (윈도의 Ctrl+Z)

 

 문자열 검색

/[패턴]    아래로 검색

?[패턴]    위로 검색

특정 '단어' 위에서 *     /'단어' 검색 수행  (vim)

특정 '단어' 위에서 #     ?'단어' 검색 수행  (vim)

 

 문자열 바꾸기

:[범위]/[매칭 문자열][치환 문자열]/[행 범위]

 

[범위]

  s       현재 행

  %s    문서 전체

  n,ms  n행과 m행 사이

  -n,+m 현재 행의 위로 n행, 아래로 m행 사이

 

[매칭 문자열]

  vi의 정규표현식 

일반 정규식과 약간 차이가 있으며 grep에서도 사용가능하다.

 

^  행의 첫문자        $ 행의 끝      [ ]  []사이의 문자중 하나    \+ 1번 이상 반복   *  0번 이상 반복

\{min,max\}  min이상 max이하 반복                                .  임의 한 문자       \|  OR

\< 단어 시작        \> 단어 끝    \n 개행 문자                     \t  탭 문자

 

  POSIX 문자 클래스 (VIM)

[:문자클래스명:]으로 표시하고 vim에서 사용할 때는 [[:문자클래스명:]]으로 표현한다.

 

    alnum   알파벳과 숫자[A-Za-z0-9]    alpha  알파벳[A-Za-z0-9]    cntrl    제어문자

    blank    탭과 공백 문자                     digit    숫자[0-9]                 xdigit   16진수

    graph   제어 문자와 공백 문자를 제외한 문자  

    lower    소문자                                upper  대문자                     print     출력가능한 문자

    punct    graph 문자중 alnum을 제외한 문자                                  

    space  화이트 스페이스  (공백, 리턴, 탭, 수직 탭,..)

 

  vim의 확장 정규 표현식

    \한 문자 로 표시하며 편집기에 보다 충실한 표현식이다. POSIX 문자 클래스보다 간단하게 표현할 수 있다.

 

    i    변수명에 사용되는 문자들[_0-9A-Za-z]          I    i와 같으나 숫자 제외

    k    키워드로 사용하는 문자[_\.\-0-9A-Za-z]    K    k와 같으나 숫자 제외

    f    파일 이름으로 사용하는 문자                         F    f와 같으나 숫자 제외

    p    프린트 가능한 문자                                     P    p와 같으나 숫자 제외

    s    whitespace  문자 (공백과 탭)                      S    non-whitespace

    d    숫자[0-9]                                                 D    숫자가 아닌 문자[^0-9]

    x    16진수 숫자                                               X    16진수가 아닌 문자

    o    8진수 숫자                                                O    8진수가 아닌 문자

    w   숫자와 알파벳                                            W    w제외한 문자

    h    알파벳과 -                                                H    h제외한 문자

    a    알파벳                                                      A     a제외한 문자

    l    소문자                                                       L     l제외한 문자

    u    대문자                                                      U     u제외한 문자

    e    ESC키    t     탭키    r    리턴    b    백스페이스    n    개행

 

[행 범위]

  g    행 전체에 걸쳐 바꾸기 실행

  c    사용자 확인(confirm)하면서 문자열 바꾸기

 

 여러 파일 동시 편집

vi file1 file2 file3

 

  파일 버퍼 명령(vim)

:buffers, :files, :ls    버퍼의 각 파일명 표시

:bN      N번 버퍼로 이동(다른 파일로 전환)

:bd[N]    N번 파일 삭제(N이 없으면 현재 버퍼)

:bw[N]    N번 파일 완전 삭제(N이 없으면 현재 버퍼)

:bp[N]    이전 버퍼로 이동(N이 있으면 N만큼 이동)

:bn[N]    다음 버퍼로 이동(N이 있으면 N만큼 이동)

:sb[N]:   창을 수평 분할하여 N번 버퍼 로드

:bf          첫 번째 버퍼로 이동

:bl          마지막 버퍼로 이동

:al          현재 열려 있는 모든 버퍼를 수평 분할 창에 로드

 

  다중 창 사용

새로운 가로분할 창 만들기: Ctrl+w n (컨트롤키를 누른채 w키를 누르고, 컨트롤키를 뗀 후 n키)

파일을 열면서 창 만들기: 커서를 헤더파일 등에 놓고 Ctrl+w f

창간 이동: Ctrl+ww (컨트롤키를 누른채 w키 두 번)

창 닫기: Ctrl+w q (또는 vi커맨드로 종료)

현재의 파일을 두 개의 창으로 보기: Ctrl+w s (서로 다른 행을 비교할 때 편리하다.) 

수직 분할: Ctrl+w v

창 크기 변경(현재 창을 최대로): Ctrl+w _(수평 분할시), Ctrl+w |(수직 분할시)

창 크기 변경(균등 분할 상태로): Ctrl+w =

 

  키 매핑

:map 명령을 실행하거나 .vimrc 파일 내 일련의 명령키를 단축 키로 매핑할 수 있다.

 

.vimrc파일 작성 방법 (map명령 구조)

map `1        :!clear;ls -l<cr>         "현재 디렉토리내 파일 출력

     단축키   매핑 내용   엔터표시              주석

 

위 파일을 사용자 디레토리에 두고 vim을 실행 후 `1을 입력하면 현재 디렉토리내 파일을 표시한다. 매핑내용 중 "<cr>" 문자열은 엔터키를 표시한다.

 

  멀티 클립보드(네임 레지스터)

윈도는 하나의 클립보드로 Ctrl+C, Ctrl+V를 수행하는데 vim은 name register라는 것으로 a~z까지의 버퍼를 사용해서 26개의 문자열을 저장 후 붙여넣기할 수 있다.

 

- 네임 레지스터에 복사: "[a-z][yank 명령]   ex) 현재부터 5행을 a레지스터에 복사: "a5yy

- 네임 레지스터를 붙여넣기: "[a-z][paste 명령] ex) a레지스터를 붙여넣기: "ap

 

  매크로

매크로는 네임 레지스터를 이용한다. 일련의 키보드 입력을 네임 레지스터에 저장 후 호출 사용한다.

 

- 매크로 작성 시작: q[a-z]  아래 명령줄에 recording이라는 표시가 생긴다.

     ex) f 레지스터에 매크로 작성 시작: qf

- 매크로 작성 완료: q

- 매크로 실행: n@[a-z]  n은 반복 횟수를 나타낸다.

     ex) f레지스터의 매크로 실행: @f

     ex) f레지스터의 매크로를 3번 실행: 3@f

 

예제) C 주석문 매크로 설정

  vi에디터로 C언어를 편집할 때 특히 불편할 때가 주석을 입력할 때다.

/* */를 입력하려면 ESC + I + /* + ESC + A + */ + ESC 키를 입력해야 하므로 무려 9번을 입력해야 한다. Visual Studio에서는 단지 Ctrl+K,C 입력하므로 상대적으로 매우 불편하다. 이 점을 개선하기 위해 매크로를 사용하면 된다. 주석(Comment)이므로 qc를 입력하여 c레지스터에 저장하면 기억이 편할 것이다.

 

  마킹

Visual Studio를 사용한 적이 있다면 Ctrl+K,K로 현재 위치를 기억하고, 다른 부분 편집 중 Ctrl+K,N으로 마킹 위치로 곧바로 가본 경험이 있을 것이다. vim은 이를 넘어 다른 파일에도 마킹할 수 있는 기능을 제공한다.

 

마킹하기: m[a-zA-Z]   소문자:현재 파일 내 마킹.   대문자: 다른 파일간 마킹 가능   ex) ma, mB

마킹된 행의 커서 위치로 가기: '[a-zA-Z]    ex) 'a

마킹된 행의 맨 앞 위치로 가기: `[a-zA-Z]    ex) `a

바로 전에 커서가 있던 행의 맨 앞으로 가기: ''

바로 전에 커서가 있던 행의 위치로 가기: ``

vim이 현재 파일을 닫기 전 커서가 있던 행의 맨 앞으로 가기: '"

vim이 현재 파일을 닫기 전 커서가 있던 행의 위치로 가기: `"

 

  기타 (vim)

- 매칭되는 괄호 찾기: '{' 또는 '}' 기호위체 커서를 두고 %키를 누른다.

- 함수 폴딩

   함수 접기: 함수의 '{'에서 '}'까지 블럭을 잡고 zf

   함수 펼치기: 커서를 블럭위에 두고 zo

   ※ '{'위에서 v]} 키를 누르면 자동으로 상대 '}'까지 블럭을 잡는다. 보통 .vimrc 파일내 키 매핑을

       지정해 단축키로 많이 사용한다.

- 함수 참조

  함수 선언 보기: 함수가 사용된 부분에 커서를 두고 [i 를 누르면 하단에 프로토타입이 출력된다.

  함수 정의 부분으로 이동: 커서를 위치하고 gd 를 누른다. 파일내 내부 함수만 가능하다.

- auto indent

  블럭 설정 후 = 키. 인터넷 등에서 소스파일을 복사해 붙였을 경우 유용하다.

- 코드 자동 완성

  함수나 변수의 일부분 타이핑 후 Ctrl+p 또는 Ctrl+n

  p또는 n은 자동 완성을 결정할 단어를 찾는 방향이다. 보통 p가 많이 사용된다.

[출처] VI 에디터|작성자 괄목상대

'OS > 리눅스 & 유닉스' 카테고리의 다른 글

crontab(2)  (0) 2010.05.18
crontab(1)  (0) 2010.05.18
vi 메뉴얼  (0) 2010.04.22
grep 명령어  (0) 2010.04.20
리눅스 명령어  (0) 2010.04.20
:

vi 메뉴얼

OS/리눅스 & 유닉스 2010. 4. 22. 17:12

커서의 위치를 움직이는 명령(Move commands)

N에 *가 있는 경우 숫자를 사용할 수 있고, -의 경우 사용할 수 없다.

N 명령어 기능
* h or ^H or <erase> 커서를 한칸(N칸) 왼쪽으로 이동시킨다.
* j 커서를 한행(N행) 아래로 이동시킨다.
* l or <sp> 커서를 한칸(N칸) 오른쪽으로 이동시킨다.
* k or ^P 커서를 한행(N행) 위로 이동시킨다.
* $ 커서가 위치한 행(N번째 행)의 끝으로 이동한다.
- ^ 커서가 위치한 행의 처음으로 이동한다.
* + or <enter> 다음행(N행 아래)의 처음으로 이동한다.
- 0 커서가 위치한 행의 처음으로 이동한다.
* | N번째 column으로 이동한다.
* f<char> 오른쪽으로 N번째 char를 찾는다.
* F<char> 왼쪽으로 N번째 char를 찾는다.
* w 커서부터 오른쪽 N번째 단어의 첫부분.
* W 커서부터 오른쪽 N번째 WORD(tab,space,linefeed 뒤에 있는 단어)의 첫부분.
* b 커서부터 왼쪽 N번째 단어의 첫부분.
* B 커서부터 왼쪽 N번째 WORD의 첫부분.
* e 커서부터 오른쪽 N번째 단어의 끝부분.
* E 커서부터 오른쪽 N번째 WORD의 끝부분.
* G 커서부터 N번째 라인으로.(default 화일의 끝).
* H Screen의 위에서부터 N번째 라인으로.
* L Screen의 아래에서부터 N번째 라인으로.
- M Screen의 중간으로.
* ) N개의 문장 뒤로.
* ( N개의 문장 앞으로.
* } N개의 paragraphs 뒤로.
* { N개의 paragraphs 앞으로.
- ]] 뒤의 N번째 section으로(default 화일의 끝).
- [[ 앞의 N번째 section (default 화일의 처음).
- `<a-z> Mark한 곳으로.
- '<a-z> Mark가 있는 라인의 첫번째 CHAR로.
- `` 가장 최근의 jump(예를 들어 `/'나 `G'를 사용한 jump)를 하기 직전의 위치로.
- '' 가장 최근의 jump(예를 들어 `/'나 `G'를 사용한 jump)를 하기 직전의 라인의 첫 CHAR로.
- /<문자열> 다음으로 <문자열>이 나오는 위치로.
- ?<문자열> /를 반대방향으로 수행.
- n 가장 최근의 `/'|`?' 를 반복한다.
- N n을 반대방향으로의 수행.
- % Braket( { } or [ ] or ( ) )을 찾고 그것의 match를(괄호가 닫힌 쌍)찾는다.


찾기(Searching)

/<문자열> 다음으로 <문자열>이 나오는 위치로.
?<문자열> /를 반대방향으로 수행.
:[x,y]g/<문자열>/<명령어> x에서 y까지 <문자열>을 찾고(globally) <명령어>를 실행한다.
:[x,y]v/<문자열>/<명령어> x에서 y까지 문자열과 match되지 않는 라인에 <명령어>를 실행한다.


취소(Undoing changes)

u 가장 최근에 한 작업을 취소한다.
U 만약 작업을 한 라인에서 벗어나지 않았다면, 그 라인에서 한 작업들을 모두 취소한다.
:q! Save하지 않고 vi를 끝낸다.
:e! 현재 편집중인 화일을 버리고 다시 편집한다.


문자열 삽입(Appending text)

1. <esc>를 누르면 삽입 작업이 끝난다.
2. N에 *가 있는 경우 숫자를 사용할 수 있고, -의 경우 사용할 수 없다.

* a 커서의 오른쪽에 쓰기 시작한다.
* A 커서가 위치한 라인의 맨 끝에 쓰기 시작한다.
* i 커서의 위치부터 쓰기 시작한다.
* I 커서가 위치한 라인의 맨 처음부터 쓰기 시작한다.
* o 커서가 위치한 라인 밑에 새로운 라인을 만들고 거기에 쓰기 시작한다.
* O 커서가 위치한 라인 위에 새로운 라인을 만들고 거기에 쓰기 시작한다.
* . 앞에 실행했던 명령을 N번 반복한다.


문자열 삭제(Deleting text)

지운 것은 모두 buffer에 저장할 수 있다. 일단 지우는 명령을 실행하기 전에 "를 치고 a-z 중간의 한 문자를 치면 지운 것이 그 문자에 해당하는 buffer에 저장되게 된다. 참고로 Undo buffer는 가장 최근에 바꾼 것만 저장하게 되고, 1-9에 해당하는 buffer는 가장 최근의 9라인을 지운 것을 저장하게 된다.

* x 커서 오른쪽의 N개의 문자를 지운다.
* X 커서 왼쪽의 N개의 문자를 지운다.
* d<move> 커서가 위치한 곳에서부터 <move>로 인해 움직인 위치까지 지운다.
* dd 커서의 위치로부터 밑으로 N개의 라인을 지운다.
- D 커서의 위치로부터 오른쪽의 문자를 모두 지운다.
* . 최근에 실행했던 명령을 N번 반복한다.


문자열 수정(Changing text)

<esc>를 누르면 바꾸는 작업이 끝난다.

* r<char> 커서의 위치로부터 N개의 문자를 <char>로 바꾼다.
* R 라인의 나머지를 덮어쓴다.
* s N개의 문자를 교체한다.
* S N개의 라인을 교체한다.
* c<move> 커서의 위치로부터 <move>의 위치까지 바꾼다. 예를 들어 cw는 한 단어를 바꾸는 명령이다.
* cc N개의 라인을 바꾼다.
* C 라인의 나머지 부분을 바꾼다.
- ~ 대문자와 소문자를 각각 소문자와 대문자로 바꾼다.
* J N개의 라인을 연결한다.
* . 가장 최근의 명령을 N번 반복한다.
- & 가장 최근의 `ex'의 교체명령을 반복한다.
- :[x,y]s/<p>/<r>/<f> x번째 라인에서 y번째 라인까지 <p>의 문자열을 <r>이라는 문자열로 교체한다. <f>는 여러가지 옵션인데, c는 확인을 요하는 옵션이고 g는 무조건 교체하라는 옵션이다.


문자열 기억(yanking)

Yanking하기 전에 a-z, A-Z 까지의 문자중 하나를 친 후 yanking하는 경우 기억된 문자열이 각 문자에 해당하는 buffer에 저장된다. 그렇지 않은 경우 단순히 undo를 위한 buffer에 저장된다.

* y<move> 커서의 위치로부터 <*><move>후 움직인 위치까지 저장한다.
* yy N개의 라인을 저장한다.
* Y yy와 같은 역할.
- m<a-z> 커서의 위치를 문자로 마크한다.


저장, 다른 화일의 편집, vi를 끝내기.

:q Buffer가 변하지 않은 경우 vi를 끝낸다.
:q! 강제로 vi를 종료한다.
^Z vi를 종료한다.
:w 화일에 저장한다.
:w <화일명> <화일명>으로 저장한다.
:w >> <화일명> Buffer의 내용을 <화일명>에 붙인다.
:w! <화일명> 편집하고 있는 화일을 <화일명>에 강제로 저장한다.
:x,y w <화일명> x부터 y번째 라인의 내용을 <name>에 저장한다.
:wq 화일에 저장하고 vi를 끝낸다. 어떤 version에서는 저장이 제대로 되지 않는 경우도 있으므로 그 경우는 ZZ를 사용하면 된다.
ZZ Buffer의 내용이 변한 경우 화일에 저장하고 vi를 끝낸다.
:x [<file>] ZZ와 같지만, <file>에 저장하고 끝낸다.
:x! [<file>] `:w![<file>]' + `:q'.
:f <화일명> 현재 편집하고 있는 화일명을 <화일명>으로 바꾼다.
:cd [<dir>] 현재 작업하고 있는 디렉토리에서 <dir>로 바꾼다. (default는 홈 디렉토리이다.)
:cd! [<dir>] cd와 같지만, 변화를 저장하지 않는다.
:e<화일명> <화일명>으로 지정한 화일을 편집한다.
:e!<화일명> 현재 편집중인 변경된 화일을 버리고 <화일명>으로 지정한 화일을 편집한다.
:rew 최초의 화일로 돌아간다.
:rew! 현재 편집중인 변경된 화일을 버리고 최초의 화일로 돌아간다.
:n [<files>] 다음의 화일을 편집한다.
:n! [<files>] 현재 편집중인 변경된 화일을 버리고 다음의 화일을 편집한다.iting the current buffer.


Display 명령어

^G 화일명, 현재 라인의 위치, 전체 화일에 대한 상대적인 위치 등을 나타낸다.
^L 스크린을 새롭게 한다.(refresh)
[*]^E 커서는 자기 자리에 그대로 있고(화면의 바깥으로 나가지 않는 이상) 화면 전체가 밑에서 N라인 위로 이동한다.
[*]^Y 커서는 자기 자리에 그대로 있고 화면 전체가 위에서 N라인 밑으로 내려온다.
[*]^D N라인 밑으로 scroll한다.(default: page의 반)
[*]^U N라인 위로 scroll한다.(default : page의 반)
[*]^F N 페이지 밑으로 간다.
[*]^B N 페이지 위로 간다.


명령어와 문자열의 간단한 지정.(Mapping and abbreviation)

:map <생략형> <문자형> <생략형>에 해당하는 문자(키보드의 키)에 대해 <문자형>에 해당하는 기능으로 변경한다. 예를 들어 :map V 'ap 라고 쓴다면 앞으로 명령모드에서 P라고 칠때마다 a에 해당하는 buffer를 붙이게 된다.(paste) 한가지 중요한 점은 만약 기존의 명령을 mapping하는 경우 기존의 명령보다 mapping한 것을 우선으로 취급하게 되므로 주의해야 한다.
:map 모든 mapping을 보여준다.
:unmap <문자열> 문자열에 해당하는 mapping을 취소한다.
:map! <생략형> <문자형> Append 모드에서 <생략>을 입력하면 무조건 <문자형>으로 치환된다.
:map! 모든 append 모드에서의 mapping을 보여준다.
:unmap! <string> Deprive <string> of its mapping (see `:unmap').
:ab <생략형> <문자형> Append 모드에서 <생략형>을 입력한 후 ESC나 space, return키를 입력하면 <문자형>으로 전개된다.
:ab 모든 생략형을 보여준다.
:unab <string> 생략형을 취소한다.


다른 명령계통으로의 전환 및 shell 명령어의 사용.
(Switch and shell commands)

Q vi에서 ex 명령으로 전환한다.
: ex명령어를 vi상에서 사용할 수 있게 한다.
:vi ex 에서 vi로 전환한다.
:sh 잠시 shell환경으로 나간다. 다시 vi로 돌아오려면 exit를 치면 된다.
:[x,y]!<명령어> x에서 y까지의 라인을 input으로 해서 shell의 <cmd>를 수행하여 그 output으로 대체한다.
:[x,y]!! [<args>] 가장 최근의 shell명령어를 수행하고 <args>를 붙인다.
[*]!<move><cmd> <move>까지의 라인을 input으로 하여 shell의 <cmd>를 수행하고 그 output으로 대체한다.
[*]!<move>!<args> <args>를 가장 최근의 <cmd> and execute it, using the lines described by the current <*><move>.
[*]!!<cmd> N 라인을 shell의 <cmd>명령어의 input으로 하여 그 output으로 그 라인들을 대체한다.
:x,y w !<cmd> x에서 y까지의 라인을 <cmd>의 input으로 한다. (w와 !사이에 space가 있는것에 주의.)
:r!<cmd> <cmd>의 output을 새로운 라인에 붙인다.
:r <화일명> <화일명>의 화일을 buffer에서 읽어들인다.


vi를 시작할 때.(option)

vi [<files>] file의 첫 페이지에서부터 edit하기 시작한다.

앞서 설명했던 `:set'이나 `:map', `:ab' 등의 설정은 일단 vi를 종료하면 없어진다. 만약 이 설정이 매회 사용하는 것이라면 vi를 가동할 때 마다 이들 명령어를 입력하지 않으면 안된다. vi는 이들 설정을 홈 디렉토리의 `.exrc'라는 화일에 기술해 놓으면 가동시에 자동적으로 `.exrc'를 참조하여 set이나 map, ab등을 설정해 준다. .exrc에는 :이 필요없다. 다음의 예를 살펴보자.

 set ai aw nu 자동 인덴트, 자동쓰기, 행 번호의 지정. set ts=4 탭 정지를 4로 지정. map! PO POSTECH PO라고 입력하면 자동적으로 POSTECH으로 변환. 

이런 식으로 .exrc 화일을 만들면 된다. 만약 .exrc가 아닌 새로운 설정화일을 사용하려면, vi를 실행시킨 상태에서

 :so file 

이라고 쓰면 된다. 간단한 설정의 경우라면 `vi +<cmd> file', 의 형태로 vi를 시작할 수 있다.

vi +x file 

커서가 x번째 라인으로 위치한 상태에서 vi가 시작된다.

vi +/<문자열> file 

<문자열>이 처음 나타나는 위치에서 vi가 시작된다.

vi -t <tag> 

지정한 tag를 사용하여 vi가 시작된다.

가끔씩 시스템의 에러로 vi가 비정상적으로 종료할 경우가 있는데, 이때에는 `vi -r file'의 명령을 사용하여 잃어버린 데이타를 찾을 수 있다. 그냥 `vi -r'을 치면 복구할 수 있는 화일의 리스트가 나타난다. 그리고 text를 단순히 보기만 할 경우(no change) `view'를 사용하거나 `vi -R'을 사용해서 text를 볼 수 있다.


중요한 옵션들(The most important options)

ai autoindent - Indent(단락구분)을 한다. 되돌가갈 때는 <Ctrl>+<d>
aw autowrite - 자동적으로 화일을 쓰기 시작한다.
dir=<string> directory - 임시 화일을 만들 디렉토리.(default /tmp)
eb errorbells - 실수를 한 경우 Beeps 음을 울린다.(모든 터미날에서 되는 것은 아니다.
handtabs vi의 단말 탭수를 설정한다.
ic ignorecase - 정규표현에서 대문자, 소문자의 구별을 하지 않는다.
list 탭(<lf>), 행말(`$')을 표시한다.
mesg vi가 발생하는 이외의 메시지도 화면에 표시한다.
nu number - 행 번호를 표시한다.
readonly 편집 화일을 write 금지 상테에서 read한다. 예외로서, `w!'를 실행했을 경우는 강제적으로 write된다.
redraw 편집에서의 삭제, 삽입시에 적극적으로 화면을 재표시한다. noredraw(초기설정값)일 때에 삭제, 삽입을 하면 공백분은 @표 표시되며 재표시되지 않는다. redreaw로 설정할 때는 통신 속도가 빠른 상태가 아니면 재표시를 하기 위하여 반응이 둔해지므로 주의해야 한다.
remap :map으로 치환된 문자/명령어를 :map에서 다시 다른 문자/명령어로 등록하는 것을 허가한다.
report 변경/삭제/대피에 의해 영향받았던 행수가 지정차를 초과하였을 경우, 화면 한단에 그 행수를 표시한다.
showmatch 대응하는 괄호끼리 커서를 뛰어넘는 `match 기능'을 ON으로 한다.
showmode 화면 우측 아래에 현재의 vi mode를 표시한다.
terse 에러 메시지를 약식 표시로 한다.
warm 편집에서 변경한 내용을 기록하지 않은 상태에서 `:!'로 시작되는 명령을 실행하였을 때에 `NO write since last change'라는 경고 메시지를 표시하도록 한다.
wrapscan 커서 위치에 관계 없이 버퍼 내 모두를 문자열 검색 대상으로 한다. now로 하였을 경우 문자열 검색은 현재의 커서 위치에서 최후의 문자까지 종료한다.
writeany 편집한 내용을 화일에 기록할 때의 vi에 의한 안전 체크를 해제한다.
scroll <Ctrl>+<Ctrl> <Ctrl>+<u>로 스크롤할 행수를 설정한다.
tabstop 화면에 표시되는 외관상의 탭수를 설정한다.
wrapmargin 오른쪽 마진을 설정한다. 설정한 마진수를 초과하면 화면이 옆으로 밀리지 않고 리턴으로 개행된다. 0(초기설정치)를 설정하면 이 기능을 OFF로 한다.
paragraphs 편집 텍스트 중 단락의 구분을 나타내는 문자조를 설정한다. vi는 이것에 의해 설정된 문자로 둘러싸인 블록을 하나의 단락으로 인식하여 문자조의 사이를 }과 {으로 이동시킬 수 있다. 이 이동에서는 섹션으로 설정된 문자조도 단락으로 간주한다. Default의 설정에서는 .IP, .LP, .PP, .P, .LI, .pp, .lp, .ip, .bp 10개의 문자조가 설정되어 있다.
ections paragraphs의 단락에 대해서 섹션은 절을 구획짓는 문자를 설정한다. 절 사이의 이동에는 [과 ]을 사용한다. 이 때 paragraph로 설정된 문자조를 단락으로 간주하지 않는다. Default로는 NH, .SH, .H, .HU, .us, .sh, .+c 의 7문자조가 설정되어 있다.


옵션의 세팅과 확인.

:set <option> <option>을 사용함.
:set no<option> <option>을 사용하지 않는다.
:set <option>=<value> <option>을 <value>값으로 지정한다.
:set Default가 아닌 모든 옵션들의 값들을 보여준다.
:set <option>? <option>에 해당하는 값을 보여준다.
:set all 모든 option과 각각의 값들을 보여준다.


이 문서는 vi를 사용해 작성했습니다. 이 문서의 원 저자는
Author: Maarten Litmaath <maart@nat.vu.nl> 입니다.

'OS > 리눅스 & 유닉스' 카테고리의 다른 글

crontab(1)  (0) 2010.05.18
vi 에디터  (0) 2010.05.07
grep 명령어  (0) 2010.04.20
리눅스 명령어  (0) 2010.04.20
vi 명령어  (0) 2010.04.20
:

grep 명령어

OS/리눅스 & 유닉스 2010. 4. 20. 11:21


grep 명령어 사용법 출처 : 유닉스 쉘 바이블 (엘리 퀴클리 지음)에서 발췌.
3.1 grep 명령어

grep : 파일 전체를 뒤져 정규표현식에 대응하는 모든 행들을 출력한다. -r : 하위 폴더 포함
egrep : grep의 확장판으로, 추가 정규표현식 메타문자들을 지원한다.
fgrep : fixed grep 이나 fast grep으로 불리며, 모든 문자를 문자 그래도 취급한다. 즉, 정규표현식의 메타문자도 일반 문자로 취급한다.

3.2 정규표현식을 사용하는 grep의 예제
# grep NW datafile
# grep NW d* (d로 시작하는 모든 파일에서 NW를 포함하는 모든 행을 찾는다.)
# grep '^n' datafile (n으로 시작하는 모든 행을 출력한다.)
# grep '4$' datafile (4로 끝나는 모든 행을 출력한다.)
# grep TB Savage datafile (TB만 인자이고 Savage와 datafile은 파일 이름이다.)
# grep 'TB Savage' datafile (TB Savage를 포함하는 모든 행을 출력한다.)
# grep '5.' datafile (숫자 5, 마침표, 임의의 한 문자가 순서대로 나타나는 문자열이 포함된 행을 출력한다.)
# grep '.5' datafile (.5가 나오는 모든 행을 출력한다.)
# grep '^[we]' datafile (w나 e로 시작하는 모든 행을 출력한다.)
# grep '[^0-9]' datafile (숫자가 아닌 문자를 하나라도 포함하는 모든 행을 출력한다.)
# grep '[A-Z][A-Z] [A-Z]' datafile (대문자 2개와 공백 1개, 그리고 대문자 하나가 연이어 나오는 문자열이 포함된 행을 출력한다.)
# grep 'ss* ' datafile (s가 한 번 나오고, 다시 s가 0번 또는 여러번 나온 후에 공백이 연이어 등장하는 문자열을 포함한 모든 행을 출력한다.)
# grep '[a-z]{9}' datafile (소문자가 9번 이상 반복되는 문자열을 포함하는 모든 행을 출력한다.)
# grep '(3).[0-9].*1 *1' datafile (숫자 3,마침표,임의의 한 숫자,임의 개수의 문자,숫자 3(태그),임의 개수의 탭 문자,숫자 3의 순서를 갖는 문자열이 포한된 모든 행을 출력한다.)
# grep '(north로 시작하는 단어가 포함된 모든 행을 출력한다.)
# grep '' datafile (north라는 단어가 포함된 모든 행을 출력한다.)
# grep '<[a-z].*n>' datafile (소문자 하나로 시작하고, 이어서 임의 개수의 여러 문자가 나오며, n으로 끝나는 단어가 포함된 모든 행을 출력한다. 여기서 .*는 공백을 포함한 임의의 문자들을 의미한다.)

3.3 grep에 옵션 사용
# grep -n '^south' datafile (행번호를 함께 출력한다.)
# grep -i 'pat' datafile (대소문자를 구별하지 않게 한다.)
# grep -v 'Suan Chin' datafile (문자열 Suan Chin이 포함되지 않은 모든 행을 출력하게 한다. 이 옵션은 입력 파일에서 특정 내용의 입력을 삭제하는데 쓰인다.
# grep -v 'Suan Chin' datafile > black
# mv black datafile
# grep -l 'SE' * (패턴이 찾아진 파일의 행 번호 대신 단지 파일이름만 출력한다.)
# grep -w 'north' datafile (패턴이 다른 단어의 일부가 아닌 하나의 단어가 되는 경우만 찾는다. northwest나 northeast 등의 단어가 아니라, north라는 단어가 포함된 행만 출력한다.)
# grep -i "$LOGNAME" datafile (환경변수인 LOGNAME의 값을 가진 모든 행을 출력한다. 변수가 큰따옴표로 둘러싸여 있는 경우, 쉘은 변수의 값으로 치환한다. 작은따옴표로 둘러싸여 있으면 변수 치환이 일어나지 않고 그냥 $LOGNAME 이라는 문자로 출력된다.)

3.4 egrep
egrep(extended grep) : grep에서 제공하지 않는 확장된 정규표현식 메타문자를 지원  한다. grep와 동일한 명령행 옵션을 지원한다.

3.4.1 egrep 예제
# egrep 'NW|EA' datafile (NW나 EA가 포함된 행을 출력한다.)
# egrep '3+' datafile (숫자 3이 한 번 이상 등장하는 행을 출력한다.)
# egrep '2.?[0-9]' datafile (숫자 2 다음에 마침표가 없거나 한 번 나오고, 다시 숫자가 오는 행을 출력한다.)
# egrep ' (no)+' datafile (패턴 no가 한 번 이상 연속해서 나오는 행을 출력한다.)
# egrep 'S(h|u)' datafile (문자 S 다음에 h나 u가 나오는 행을 출력한다.)
# egrep 'Sh|u' datafile (패턴 Sh나 u를 포함한 행을 출력한다.)

3.5 고정 grep 과 빠른 grep
fgrep : grep 명령어와 동일하게 동작한다. 다만 정규표현식 메타문자들을 특별하게 취급하지 않는다.
# fgrep '[A-Z]****[0-9]..$5.00' file ([A-Z]****[0-9]..$5.00 이 포함된 행을 출력한다. 모든 문자들을 문자 자체로만 취급한다.)

출처 : empas blog 시스템 뽀사불기 ~~^=,.=^~~ (syk1000)



/////////// 추가 /////////////////////////////////////////////////////////////////////////////
grep:

주어진 패턴을 포함하는 파일의 라인을 출력.

- n 매칭된 라인 줄수를 넣어줌.

- i 대소문자를 구분하지 않음.

- v 리버스의 뜻. 해당 패턴을 제외한 나머지.

- c 일치하는 라인의 개수.

- l 매칭된 라인을 가진 파일의 이름을 보여주는 옵션.



특정 문자열 찾기:

grep copying help

- help 파일에서 copying 이라는 문자열을 포함하는 각줄을 보여준다.



정규식을 사용한 예:

grep -n '[dD]on\'t' tasks

- tasks 파일에서 don't나 Don't 문자열을 포함하는 각 줄을 그 줄 번호와 함께(-n 옵션) 보여준다.

- 이 예제에서 사용된 패턴은 [,] 같은 쉘에서 특별한 의미로 쓰이는 문자들을 포함하며, 하나 이상의 정규식이 사용되었기에 따옴표로 묶어준 경우이다. 큰 따옴표를 사용한다면, 작은 따옴표도 하나의 패턴임을 지시한다. 즉, on't 문자열을 on\'t 로 표시할 필요가 없다.



파이프를 이용한 예:

ls -l | grep '^d........x'

- 현재 디렉토리 내용 중에 다른 사용자에게 실행 권한이 부여된 하위 디렉토리가 어떤 것이 있는지를 알아보는 경우이다.

This lists all the directories in the current directory for which other users have execute permission.

- 정규식에서 ^ 문자는 그 줄의 처음을 뜻한다. 즉, 윗 경우는 각 줄의 첫칸에 d로 시작해서, 10번째 칸에 있는 문자가 x인 임의의 문자열을 찾는 경우이다.



결과를 방향 전환해서 파일로 저장하는 경우:

grep Smith /etc/passwd > smurffs

- passwd 파일에서 Smith 문자열을 포함하는 줄을 찾아, 그 결과를 smurffs 파일에 기록 하는 경우이다. 이것은 결국 현재 시스템에서 사용하고 있는 사람 중에 그 username이 Smith 이거나, 실재 이름이 Smith인 모든 사람을 찾아 볼 수 있다.



원하는 파일 삭제하는 예:

rm -f $(grep -l "패턴")

출처 - http://www.wwww7.com/

'OS > 리눅스 & 유닉스' 카테고리의 다른 글

crontab(1)  (0) 2010.05.18
vi 에디터  (0) 2010.05.07
vi 메뉴얼  (0) 2010.04.22
리눅스 명령어  (0) 2010.04.20
vi 명령어  (0) 2010.04.20
:

리눅스 명령어

OS/리눅스 & 유닉스 2010. 4. 20. 11:00

 퍼미션(권한)이란?

Owner

Group

Other

Owner와 Group은 파일소유자자신과 자신이 속한그룹. Other은 제3자,
웹사이트 방문객은 제3자로 nobody로 취급.

r

w

x

r

w

x

r

w

x

r은 파일 읽기(4), w는 파일 쓰기(2), x는 파일 실행(1)

7

5

5

파일소유자는 그것을 읽고 쓰고 실행시킬 수 있지만, 제3자는 읽고 실행만 시킬 수 있다.

7

7

7

제3자도 쓰기 권한이 주어진다.

*.html  *.cgi, *.pl *.txt등의 파일은 업로드시 반드시 ascii로 하고
나머지 그림(*.gif *.jpg)이나 자바 애플릿(*.class), 실행파일(*.exe *.zip *.rar)등은
binary mode로 업로드 할 것.

  리눅스 기본명령어

명령어

사 용 법

login

사용자 인증과정

리눅스 시스템은 기본적으로 multi-user 개념에서 시작하였기 때문에 시스템을 이용하기 위해서는
반드시 로그인을 하여야 합니다. 로그인은 PC 통신에서도 많이 사용되어져 왔기 때문에
그 개 념  설정에 그다지 어려움이 없을 것입니다. 흔히 말하는 ID를 입력하는 과정입니다. 

passwd

패스워드 변경

리눅스, 특히 인터넷의 세계에서는 일반 컴퓨팅 상황에 비하여 훨씬 해킹에 대한 위험이 높습니다.
패스워드는 완성된 단어 보다는 단어 중간에 숫자나 키보드의 ^, #, ' 등과 같은
쉽게 연상 할 수 없는 기호를 삽입하여 만들어 주는 것이 좋습니다

du

하드사용량 체크(chkdsk)

자신의 하드공간을 알려면
# du
특정 디렉토리의 사용량을 알려면
# du -s diretory_name

ls

파일 리스트 보기(dir)

F : 파일 유형을 나타내는 기호를 파일명 끝에 표시
    (디렉토리는 '/', 실행파일은 '*', 심볼릭 링크는 '@'가 나타남).
l  : 파일에 관한 상세 정보를 나타냅니다.
a : dot 파일(.access 등)을 포함한 모든 파일 표시.
t  : 파일이 생성된 시간별로 표시
C : 도스의 dir/w명령과 같 이 한줄에 여러개의 정보를 표시
R : 도스의 dir/s 명령과 같이 서브디렉토리 내용까지.

(예)
# ls -al  
# ls -aC
# ls -R

cd

디렉토리를 변경

# cd cgi-bin     : 하부 디렉토리인 cgi-bin으로 들어감.
# cd  ..             : 상위디렉토리로 이동
# cd 또는 cd ~  : 어느곳에서든지 자기 홈디렉토리로 바로 이동
# cd /webker     : 현재 작업중인 디렉토리의 하위나 상위 디렉토리가
                          아닌 다른 디렉토리(webker)로 이동하려면 /로
                          시작해서 경로이름을 입력하면 된다.

cp

화일 복사(copy)

# cp index.html index.old
     : index.html 화일을 index.old 란 이름으로 복사.

# cp /home/test/*.*  .
     : test 디렉토리내의 모든 화일을 현 디렉토리로 복사.

mv

파일이름(rename) / 위치(move)변경

# mv index.htm index.html
     : index.htm 화일을 index.html 로 이름 변경

$ mv file  ../main/new_file
     : 파일의 위치변경

mkdir

디렉토리 생성

# mkdir download  : download 디렉토리 생성

rm

화일삭제

# rm test.html : test.html 화일 삭제
# rm -r <디렉토리> : 디렉토리 전체를 삭제
# rm -i a.*
     : a로 시작하는 모든 파일을 일일이 삭제할 것인지 확인하면서 삭제 

rmdir

디렉토리 삭제

# rmdir cgi-bin : cgi-bin 디렉토리 삭제

pwd

현재의 디렉토리 경로를 보여주기

pico

리눅스용 에디터

put

ftp 상태에서 화일 업로드

> put  guestbook.tar.gz

get

ftp 상태에서 화일 다운로드

> get  guestbook.tar.gz

mput 또는 mget

여러개의 화일을 올리고 내릴때 (put,get과 사용법동일)

chmod

화일 permission 변경

리눅스에서는 각 화일과 디렉토리에 사용권한을 부여.

예) -rwxr-xr-x   guestbookt.html
rwx  :처음 3개 문자 = 사용자 자신의 사용 권한
r-x  :그다음 3개 문자 = 그룹 사용자의 사용 권한
r-x  :마지막 3개 문자 = 전체 사용자의 사용 권한

읽기(read)---------- 화일 읽기 권한
쓰기(write)---------- 화일 쓰기 권한
실행(execution)---------- 화일 실행 권한
없음(-)---------- 사용권한 없음

명령어 사용법
chmod [변경모드] [파일]

# chmod 666  guestbook.html
     : test.html 화일을 자신에게만 r,w,x 권한을 줌

# chmod 766  guestbook.html
     : 자신은 모든 권한을 그룹사용자와,전체사용자에게는
       읽기와 쓰기 권한만 줌

alias

" doskey alias" 와 비슷하게 이용할 수 있는 쉘 명령어 alias는 말그대로 별명입니다. 사용자는 alias를 이용하여 긴 유 닉스 명령어를 간단하게 줄여서 사용할 수도 있습니다.
이들 앨리어스는 [alias ls 'ls -al'] 같이 사용하시면 되는데, 한 번 지정한 alias를 계속해서 이용하시려면, 자신의 홈디렉토리에 있는
.cshrc(Hidden 속성)을 pico등의 에디터를 이용하여 변경시 키면 됩니다.

cat

파일의 내용을 화면에 출력하거나 파일을 만드는 명령( 도스의 TYPE명령)

# cat filename

more

cat 명령어는 실행을 시키면 한 화면을 넘기는 파일일 경우 그 내용을 모두 볼수가 없다. 하지만 more 명령어를 사용하면 한 화면 단위로 보여줄 수 있어 유용.

# more <옵션>
옵션은 다음과 같습니다.

Space bar : 다음 페이지
Return(enter) key : 다음 줄
v : vi 편집기로 전환
/str : str 문자를 찾음
b : 이전 페이지
q : more 상태를 빠져나감
h : 도움말
= : 현재 line number를 보여줌

who

현재 시스템에 login 하고 있는 사용자의 리스트를 보여줍니다.

# who

whereis

소스, 실행파일, 메뉴얼 등의 위치를 알려줍니다

# whereis perl : perl의 위치를 알려준다

vi,
touch,
cat

새로운 파일을 만드는 방법

# vi newfile :  vi 편집기 상태로 들어감
# touch newfile : 빈 파일만 생성됨
# cat > newfile  : vi 편집기 상태로 들어감, 문서 작성후 Ctrl+D로 빠져나옴

cat,
head,
tail

파일 내용만 보기

# cat filename         : 파일의 내용을 모두 보여줌
# head -n filename : n줄 만큼 위세서부터 보여줌
# tail -n filename     : n줄 만큼 아래에서부터 보여줌

 

   압축명령어 사용법

압축 명령어

사 용 법

tar .tar, _tar로 된 파일을 묶거나 풀때 사용하는 명령어
(압축파일이 아님)

# tar cvf [파일명(.tar, _tar)] 압축할 파일(또는 디렉토리): 묶을때
# tar xvf [파일명(.tar, _tar)]  :  풀 때
   (cf) cvfp/xvfp 로 하면 퍼미션 부동 
compress 확장자 .Z 형태의 압축파일 생성

# compress    [파일명]     : 압축시
# uncompress [파일명]    : 해제시
gzip 확장자  .gz, .z 형태의 압축파일 생성

#  gzip     [파일명]    : 압축시
#  gzip -d [파일명]   : 해제시
기타 .tar.Z
이것은 tar로 묶은 후에 compress를 사용하여 압축한 것으로 uncompress를 사용해서
압축을 푼 다음, 다시 tar를 사용해서 원래의 파일들을 만들어내면 됩니다.
아니면 다음과 같이 한 번에 풀 수도 있다.
# zcat  [파일명].tar.Z  : 해제시

.tar.gz또는 .tar.z
# gzip -cd [파일명]    : 해제시

.tar.gz 또는 .tar.z .tgz
gzip을 사용해서 푼 다음 다시 tar를 사용해서 원래 파일을 만들어 낼 수 있으나,
하지만 다음과 같이 하면 한 번에 처리를 할 수 있다.

# gzip -cd 파일.tar.gz | tar xvf -  또는
# tar xvzf 파일.tar.gz
# tar xvzf 파일.tgz

 

 리눅스 필수명령어

Linux/Unix 명령어

설 명

MS-DOS 비교

./x

x 프로그램 실행
(현재 디렉토리에 있는 것)

x

/

이전에(↑) / 다음에(↓) 입력했던 명령어

doskey

cd x (또는 cd /x)

디렉토리 X로 가기

cd

cd .. (또는 cd ../ 또는 cd /..)

한 디렉토리 위로 가기

cd..

x 다음 [tab] [tab]

x 로 시작하는 모든 명령어 보기

-

adduser

시스템에 사용자 추가

/

ls (또는 dir)

디렉토리 내부 보여주기

dir

cat

터미널 상의 텍스트 파일 보기

type

mv x y

파일 x를 파일 y로 바꾸거나 옮기기

move

cp x y

파일 x를 파일 y로 복사하기

copy

rm x

파일 지우기

del

mkdir x

디렉토리 만들기

md

rmdir x

디렉토리 지우기

rd

rm -r x

디렉토리 x를 지우고 하위도 다 지우기

deltree

rm p

패키지 지우기

-

df (또는 df x)

장치 x의 남은 공간 보여주기

chkdsk ?

top

메모리 상태 보여주기(q는 종료)

mem

man x

명령어 x에 관한 매뉴얼 페이지 얻기

/

less x

 텍스트 파일 x 보기
(리눅스에서는 더 많은 필터 적용 가능)

type x | more

echo

어떤 것을  echo 화면에 인쇄한다.

echo

mc

UNIX를 위한 노턴 커맨더

nc

mount

장치 연결(예: CD-ROM, 연결을 해제하려면 umount)

-

halt

시스템 종료

-

reboot ([ctrl] + [alt] +[del])

시스템  다시 시작하기

[ctrl] + [del] + [del]

    고급명령어

 고급 명령어

 

chmod <권한> <파일>

파일 권한(permissions) 변경

ls -l x

파일 x의 자세한 상황을 보여줌

ln -s x y

 x에서 y로 심볼릭 링크를 만들어 줌

find x -name y -print

디렉토리 x안에서 파일 y를 찾아서 화면에 그 결과를 보여줌

ps

지금 작동중인 모든 프로세스들을 보여줌

kill x

 프로세스 x를 종료 (x는 ps 명령으로 알 게 된 PID)

[alt] + F1 - F7

 터미널 1-7까지 바꾸기 (텍스트 터미널에서; F7은 X-윈도우(시작될때))

lilo

 부트 디스크를 만듦

 

용어

 

symlink

다른 파일이나 디렉토리로 심볼릭 링크. 윈도유98의 바로가기 같은 것

shell script

여러 명령어들을 차례로 수행하게 한 것. MS-DOS의 배치 파일 같은 것

   

팁!!

 - 웹에서 생성한 노바디파일 삭제 하는방법..

기본적으로 웹서버는 nobody 권한으로 동작이 되게 됩니다.
고객님께서 FTP 로 접속하여 전송한 파일이 아니라 웹상에서 사용자들이 파일을 업로드 한 경우나 웹상에서 생성된 파일의 경우 삭제가 되지 않는 경우가 있을 수 있습니다.

웹서버의 동작 권한은 nobody 이고 웹상에서 생성된 파일이므로 해당 파일이 nobody 소유권으로 시스템에 생성이 되게 됩니다.

아래와 같이 웹상에서 실행시키면 됩니다.

1. 메모장을 열어 아래 소스를 붙여넣기 하신후..

<?

//폴더/파일 삭제시

$cmd = `rm -rf 노버디로된파일혹은폴더명`;

echo "$cmd";

echo "폴더가 삭제 되었습니다.";

?>

-- 위에까지..
-- **위에서 수정할 사항은 "노버디로된파일혹은폴더명"을 삭제하시고자 하는 파일명으로 바꿔주세요..

2. 파일 -> 다른이름으로저장 -> 아래 탭에서 파일형식을 "모든파일"로 선택후

   -> "원하는파일명.php" 로 저장 (ex: del.php)

3. ftp를 통해 고객계정에 파일업로드를 하시고 웹에서 파일을 불러주시면 됩니다

   ex: html폴더안에/temp 안에 삭제하고자하는 파일이 있을경우 / html폴더/temp안에 del.php를 업로드하고..

       브라우저에서 http://고객도메인/temp/del.php 를 하면 됩니다

4. 실행하시면 삭제되고 nobody 권한의 폴더만 남습니다.(폴더안의화일들만 지워짐)

   그후 ftp 접속후 폴더를 삭제하시면 됩니다.

ex)

<?

퍼미션 변경시

$cmd = `chmod -R 777 노버디로된파일혹은폴더명`;

echo "$cmd";

echo "퍼미션 변경되었습니다.";

?>


출처 - http://www.mireene.com/webimg/linux_tip1.htm

'OS > 리눅스 & 유닉스' 카테고리의 다른 글

crontab(1)  (0) 2010.05.18
vi 에디터  (0) 2010.05.07
vi 메뉴얼  (0) 2010.04.22
grep 명령어  (0) 2010.04.20
vi 명령어  (0) 2010.04.20
:

vi 명령어

OS/리눅스 & 유닉스 2010. 4. 20. 10:25
  1. 이동
    1. 명령모드( ESC ) 화살표 방향키 커서 이동하기 
    2. h 좌로 이동 l 우로 이동 k 위로 이동 j 아래로 이동 
    3. w 한단어씩 정방향으로 이동 
    4. b 한단어씩 역방향으로 이동
    5. 0 (아라비아 숫자) 라인 맨앞으로 이동
    6. $ 라인 맨끝으로 이동 
    7. ex모드( Shift + : ) n(원하는 아라비아 숫자) 이동하고자 하는 라인위치로 이동
    8. ex모드( Shift + : ) $ 페이지 마지막 라인으로 이동
  2. 입력 모드
    1. 입력모드( o ) 현재라인 아래 입력모드
    2. 입력모드( i )
  3. 복사
    1. yw 복사(한단어)
    2. yy 복사(한줄)
    3. nyy 복사(n 라인만큼)
  4. 붙이기
    1. p 붙히기(커서아래에)
    2. nyy 복사(n 라인만큼)
  5. 삭제
    1. x 삭제(한글자)
    2. dw 삭제(한단어)
    3. dd 삭제(한라인)
  6. 교체
    1. R 교체
  7. 되살리기
    1. u 되살리기
  8. 검색
    1. / 아래로 검색 ? 위로 검색
  9. 종료
    1. ex모드( Shift + : ) wq 저장하고 종료하기
    2. w 새로운 이름으로 파일저장하기
    3. wq test2.txt test2.txt 파일명으로 저장 하고 종료하기
    4. q! 저장않고 종료
  10. 창나누기
    ctrl + w  v  수직  나누기
    ctrl + w  s  수평 나누기
    또는 :sp :vs

    ctrl + w  w 창 이동
    ctrl + w  N+  하면 N 만큼 커진다.
    예를 들면 ctrl+w 를 한뒤에 숫자 3 과 플러스를 누르면 3 만큼 창이 커진다.
    마이너스 하면 작아지고..
    만약 수직 나누기에서 창크기 조절은..
    N>.. N< 와 같다.. 즉 ctlr+w 누른후 숫자 3 과 꺽은 괄호 < 나 > 를
    누르면 크기가 조절이 된다

    창 연 후에  다른 파일 열려면..
    창 명령모드
    :e  aaa.txt  하고 하든가..

    파일명을 몰라서 파일목록 보이게 하려면..
    :e [디렉토리] 와 같이 한다.
    만약 현재 디렉토리의 파일 목록 보려면..
    :e .
    와 같이 점을 찍으면 된다.

'OS > 리눅스 & 유닉스' 카테고리의 다른 글

crontab(1)  (0) 2010.05.18
vi 에디터  (0) 2010.05.07
vi 메뉴얼  (0) 2010.04.22
grep 명령어  (0) 2010.04.20
리눅스 명령어  (0) 2010.04.20
: