OS & TIP/Linux2009. 8. 6. 18:17
sftp -oPort=사용할포트번호 접속대상아이피

명령을 실행하면 비밀번호 입력을 하라고 나온다.
해당되는 비밀번호 입력후 접속

sftp>

프로프트가 나오게 된다.

sftp>pwd

현재경로를 확인한다. 현재 경로는 접속대상서버의 경로이다.
업로드하고자하는 위치로 이동한다.
업로드 대상 파일을 업로드하는 명령어는 put 이다.

sftp>put asdf.tar.gz
Uploading a.tar.gz to /test/asdf.tar.gz
asdf.tar.gz                                                                                          100%  635MB   9.6MB/s   01:06

그럼 이상!
Posted by 햇 님
OS & TIP/Linux2008. 7. 18. 13:39
푸는것만 찾았습니다..

-d 옵션을 주면 풀리는군요..

tar.gz.bz2   와 같이 묶여 있다면..

bz2 부터 풀어줍니다.

ex) bzip2 -d test.tar.gz.bz2

그렇게 하면

test.tar.gz 가 나옵니다.

요기서 부터는

tar -xvzf 옵션을 주고 압축을 싹 풉니다..

ex) tar -xvzf test.tar.gz


bzip2 로 압축하면 압축율이 좋다고 하는데..
전 잘 모르겠습니다.. 압축 풀어보니.. 큰 차이도 없더군요..

test.tar.gz 나 test.tar.gz.bz2 나 용량이 거기서 거기였습니다..

무튼 이렇게 묶여있다면 하나하나 풀어보시길~ ^^
Posted by 햇 님
OS & TIP/Linux2008. 7. 18. 12:02
/usr 폴더의 용량을 알고 싶을때...

du -h /usr

주로 위에 처럼 사용하시지 않았는지요? 이렇게 하면 상당히 긴~~~~~~ 줄이 끝나고
마지막에 최종적으로 사용한 용량이 보여집니다.

그래서 그런 내용들없이 짧게 필요한 전체 용량만을 보려면

du -hs /usr

위와 같이 써주시면 되구요..

/usr 외에 여러개의 폴더 별 용량을 알고 싶다면

/du -hsc /usr /bin /etc

위와 같이 c 옵션을 더 주면 폴더별로 전체 용량만 표시 됩니다. ^^

그럼 du 는 요기까지! ^^


Posted by 햇 님
OS & TIP/Linux2008. 7. 18. 11:57
리눅스에서는 서버 대 서버로 파일 전송이 가능하다.
아무런 프로그램없이 SSH 데몬이 돌고 있다면.. (대부분 돌고 있으리라고 본다.)

scp 명령어로 원격 서버로의 파일전송을 할 수 있다.

물론 나의 설명 보다도.. man scp 라던가 scp --help 를 통해서 쓸수도 있겠지만..
인터넷도 뒤져보고...
매뉴얼도 봐가면서 약간의 삽질을 해본 경험의 노하우(얼나마 했다고 -_-;;;) 를
써보려구 한다.

scp 전송할파일명 서버로그인아이디@서버아이피:/저장공간

기본적으로 위와 같이 사용하면 되겠다.
그럼 이전 포스트에서 압축하는법을 해봤기에 test.tar.gz 파일을 보내 보겠다.

ex) scp test.tar.gz root@127.0.0.1:/root/copy

실제 아이피는 다른것이겠지만.. 달리 생각나는 아이피가 없어서 local 로 복사해보았다.
복사가 잘 이루어진다. ^^
만약 root 로 접속하지 않고 다른 사용자로 접속해서 실행한다면 좀더 실감이 날것이다.
다른사용자가 접속하지 못하는 공간임에서 copy 가능하다는것은 서버대 서버로 전송이 이루어진것이기
때문이다.

그렇다면 다음으로 삽질한것은 무엇이냐!
바로 port 다..
scp 는 기본포트로 22번 포트를 사용하는데
서버마다 포트가 다를수 있다는것이다. 이럴경우는 -port 또는 -P 옵션을 사용하면 된다.

scp -P 12345 전송할파일명 서버로그인아이디@서버아이피:/저장공간

이렇게 사용하면 12345 포트를 통해 전송이 이루어진다. 물론 이 포트는 SSH의 포트인다.

그리고 SSH를 사용하니 만큰.. 전송할때 비밀번호를 알아야한다!  (-_-;; 아까 그 root도 결국은 root 비밀번호를 알아야 한다는 말씀! 쩝;)

그럼 scp는 요기까지! ^^
Posted by 햇 님
OS & TIP/Linux2008. 7. 18. 11:39
tar 는 압축하는것이 아니라 묶는것이라도 한다.
쩝.. 무슨뜻인고 하니.. 그냥 파일들 및 디렉토리를 하나의 파일로 만드는것이다.

gz 가 실제로 압축을 담당하는것이고..
tar 로 묶은것을 압축하게 되면 파일 및 디렉토리 별로 압축하는것이 아니라..
하나의 tar 파일만 압축하는것이라서 더 빠른게 아닐까 싶다.

(난 리눅스 초보다 ㅠ,ㅠ)

그래서 일단은 둘은 다르기에 하나 하나 써야하지만..
불편함을 초래하기에...

이 둘을 한번에 끝낼것이 필요하다!!! 음하하

그것은 바로

tar -zcvf 압축파일명.tar.gz 압축할 파일 또는 디렉토리

위와 같이 실행하게 되면.. 한방에 묶여주시고 압축되신다!

ex) tar -zcvf test.tar.gz *
(*를 사용하면 현재 위치에있는 모든 폴더 및 파일을 압축한다.)

압축을 풀려면

tar -xvzf 압축파일명.tar.gz
(현재 폴더 및으로 압축이 풀립니다.)

해주면 되겠다!

그럼 요기까지~
Posted by 햇 님
OS & TIP/Linux2008. 6. 11. 15:01
필요할지 안할지 모르겠지만 제목에 쓰인데로
리눅스에서 find 명령을 사용하여서 특정한 변수명을 찾으려고 합니다.
그리고 그 변수를 사용한 파일명을 찍게하려고 합니다.

이렇게 해서 만약 사용하지 않는 변수라던가 메소드 등
삭제해야할 곳들을 바로 알수 있고, 또한 추가 해야 할 부분이 어디인지도 쉽게 알고
원하는 위치를 쉽게 찾을수 있습니다.

그렇다면 find 명령어..
제가 아는데로.. 찾아서 본데로.. 실습해본데로 (즉 제 맘대로.... 설명해보겠습니다.)

일단 find 명령어를 만들어봅니다
처음시작은 당연히 find 이겠죠 --;

find

그 다음에는 어디서 부터 찾을지를 한 칸 띄어서 적습니다.  대상 디렉토리를 설정하는것이죠.

find .

다음은 검색 옵션을 지정합니다. 옵션에는 여러가지가 있습니다만..
주로 -name을 쓰는것 같습니다. 이외에도 일정시간 이전, 이후, 타입 등의 옵션을 줄 수 있지만
전 -name 이면 충분!  ^^;

find . -name *.j*

자 그러면 이름으로 일단 찾습니다. 그리고 그 이름은 *(모든파일이름).j*(앞글자가 j 로 시작하는 확장자명)  과
같은 형식의 파일들만을 찾습니다.
그럼 이 파일들 내에서 특정 문자를 찾아내야겠죠.

그래서 그뒤에 처리방법을 붙일수 있습니다. 이것은 찾은 파일에 대해서 어떻게 할 것인지를 지정한다.

-print 찾은 파일의 절대 경로명을 화면에 출력한다.
-exec cmd {}\;  찾은 파일들에 대해 cmd 명령어를 실행한다.

두가지 처리방법이 있는데 모두를 쓰도록 합니다.

find . name *.j* -exec grep "aaa" {} \; -print

cmd 대신에 grep 을 썻다. 그리고 "aaa" 를 붙여서 특정한 문자를 찾아내도록 한뒤
마지막에 -print 를 써서 출력하게 하였습니다.

자 실행해본 결과를 스샷으로 보여드렸으면 하지만..
아직 업무중인지라 나중에 --;;;  ㅋㅋ




> out.txt 을 써서 파일 출력해도 좋다!
Posted by 햇 님
OS & TIP/Linux2008. 5. 28. 16:28
 출처 : 모름


1.파일관리


1. cd


- 디렉토리를 변경할 때, 디렉토리를 따로 입력하지 않으면 login한 디렉토리($HOME 또는 '~'로 표시됨)로 이동합니다.


cd . 은 현재 디렉토리이며, cd .. 은 상위 디렉토리입니다.


예) 최상위 디렉토리 / 에서 상위디렉토리 root/ 으로 이동할 때 :


cd /root ( /를 생략해도 무방 )


현 디렉토리root/에서 상위디렉토리에 있는 bin/이라는 디렉토리로 바꿀 때- cd ../bin, 또는 ..없이 그냥 cd /bin으로 해도 무방합니다.


2. ls

- DOS의 dir과 비슷한 명령어인데, 디렉토리명 등을 출력시키며 옵션에 따라 다양한 정보와 함께 출력된다.

옵션

-a: 디렉토리 내의 모든 파일 출력

-i : 파일의 inode와 함께 출력한다.

-l : 파일 허용 여부, 소유자, 그룹, 크기, 날짜 등을 출력한다.

-m: 파일을 쉼표로 구분하여 가로로 출력한다.

-r : 정렬 옵션이 선택되었을 때, 그 역순으로 출력한다.

-s : KB 단위의 파일 크기를 출력한다.

-t : 최근에 만들어진 파일 순서대로 출력한다.

-x : 파일 순서를 세로로 출력한다.

-F : 파일의 형태와 함께 출력한다.

출력되는 파일의 형태는 '*', '@', '|', '=' 등이며, 이것은 각각 실행 파일, 심볼릭 링크, FIFO 소켓을 나타낸다.

-R : 서브 디렉토리의 내용을 포함하여 출력한다.

-S : 파일 크기가 큰 순서로 출력한다.

-U : 정렬하여 출력한다.

-1 : 라인당 한 파일씩 출력한다.

--help : 도움말을 화면상에 나타낸다.

--version : 'ls'의 파일 버전과 함께 출력한다.


예) /home/babo

디렉토리 내용을 최근에 만들어진 파일 순서대로 출력- ls -t /home/babo



3. cp


- 파일을 다른 파일 이름으로 또는 다른 디렉토리로 복사하는 명령어로 도스의 copy와 같은 명령어.


옵션

-a : 가능한 한 원래 파일의 구조, 속성을 그대로 복사한다.

-b : 덮어쓰거나 지울 때 백업 파일을 만든다.

-d : 심볼릭 링크 파일 그대로 복사한다.

(디폴트는 연결된 원래 파일을 복사함).

-f : 같은 파일명을 갖는 파일이 있을 경우, 지운 후 복사한다.

-i : 같은 파일명을 갖는 파일이 있을 경우, 사용자 확인후 복사한다.

-l : 하드 링크를 만든다.

-p : 원시 파일의 소유자, 그룹, 허용 여부, 시간 등을 그대로 복사한다.

-r : 서브 디렉토리를 포함한 모든 파일 복사한다.

-s : 심볼릭 링크를 만든다.

-u : 복사할 파일이 구 버전일 경우만 복사한다.

-v : 복사하기 전에 각각의 파일명을 출력한다.

-x : 파일 시스템이 같을 경우만 복사한다.

-P : 원시 파일이 존재하는 디렉토리까지 포함하여 복사한다.

-R : 디렉토리를 포함하여 복사한다.

-S : 환경 변수 SIMPLE_BACKUP_SUFFIX에 의해 지정된 백업 꼬리말로 백업 파일 생성한다.


예)

/root 디렉토리에서 trial이라는 파일을 /maria라는 디렉토리로 복사하려고 할 때는 #cp trial maria를, maria에 복사되었는지 확인해 보려면, # cd maria # ls를 쳐보면 나온다.



4. mv

(move) - 파일을 다른 파일 또는 디렉토리로 옮길 때 사용. 이 명령은 복사와 같으나 원본이 지워진다.

파일의 이름을 바꿀 때도 사용할 수 있다.


옵션

-b : 지워지기 전에 백업본을 만든다.

-f : 옮겨질 디렉토리에 존재하는 파일이 있으면 덮어쓴다.

-i : 옮겨질 디렉토리에 존재하는 파일이 있으면 확인한다.

-u : 옮겨질 디렉토리에 구 버전의 파일이 있을 경우만 옮긴다.

-v : 옮기기 전에 파일명을 출력한다.

예)

파일을 /maria라는 디렉토리에 옮길려면



5. rm

(remove) - 파일을 지우는 명령으로 주의할 점은 유닉스하에서는 파일들이 지워지면 복구가 불가능하다는 것이다. rm 파일명으로 사용한다.

옵션

-f : 강제로 파일을 지울 수 있다.

-i : 지우기 전에 확인한다.

-r : 서브 디렉토리의 파일까지 지운다.

-v : 파일을 지우기 전에 지울 파일의 이름을 나타낸다.

-R : -r과 같다.

예)

command1.txt란 파일을 지우려면, rm command1.txt

확인해 보려면, ls를 쳐 보면 삭제 되었는지 알 수 있다.



6. mkdir


- 디렉토리를 새로 만들 때 사용.

만약 love라는 디렉토리를 만들려면 mkdir love를 입력하면 된다.


옵션

-p : 지정된 모든 서브 디렉토리까지 함께 생성

-m : mode mode에 해당하는 사용 허가로 디렉토리를 생성한다.

예)

/rootd에서 love라는 디렉토리를 만들려면, mkdir love



7. rmdir

- 디렉토리를 지울 때. rmdir 다음에 디렉토리 이름을 입력하면 디렉토리가 지워진다.

이 부분에서 가장 중요한 것은, 디렉토리 내부에 파일이 남아있으면 지워지지 않으므로 디렉토리를 지우기 전에 반드시 rm을 이용하여 내부 파일을 모두 지우는 것을 명심해야 한다.


옵션

-p : 지우고자 하는 디렉토리의 상위 디렉토리까지 포함하여 지운다.

예)

위에 만든 /love라는 디렉토리를 지우려면, rmdir love

지워졌는지 확인해 보려면 ls를 넣으면 알 수 있다.



8. man ( manual )

- 주어진 명령이나 유틸리티의 매뉴얼을 출력한다.

옵션

-a : 모든 manual page를 출력

-d : 디버깅 정보 출력

-f : whatis와 같음

-h : 도움말 출력

-k : apropos와 같음

-t : groff(troff)를 사용하여 프린트를 위한 형식으로 출력

예)

ls 명령어의 도움말을 보고자 할 때- man ls



9.more


- 주어진 파일의 내용을 한 화면씩 출력시킨다.


옵션

-h : 도움말(help)

- SPACE 또는 - z : 다음 페이지

-RETURN 또는 - 1 : 라인 스크롤

-d 또는 -^D : 반 페이지 스크롤

- q 또는 -Q : 종료 (quit)

- f : 다음 페이지 (forward)

- b 또는 - ^B : 이전 페이지 (back)

- /pattern : 검색

- = : 현재 라인 출력

- ! : 명령어 실행

- ^L : 화면 다시 출력

- f : 현재 파일명과 라인 출력

예)

root/command.txt 파일을 페이지 단위로 출력시키려면 more /root/command.txt



10. less

- more와 비슷한 명령어로 한 페이지씩 문서를 보여준다. 문서의 앞으로도 이동이 가능하다.


옵션

- ? : less에서 사용할 수 있는 명령들에 대한 도움말을 제공한다.

- a : 마지막 라인이 화면에 출력되고 나면 검색을 시작한다.

- c : 필요할 때 전체 화면은 다시 갱신한다.

- C : -c 옵션과 같지만 화면 전체를 지우고 시작한다.

- e : 두번째로 파일의 끝에 도달하면 자동적으로 종료한다.

- E : 파일의 끝에 도달하기만 하면 자동적으로 종료한다.

- i : 대소문자를 구분하여 검색한다.

- n : 행 번호를 추가한다.

- q : 특정 에러가 발생하지 않으면 소리없이 동작한다.

- Q : 결코 아무 소리도 내지 않는다.

- s : 연속되는 공백 라인은 하나의 행으로 처리한다.

- x : 숫자: 수치를 지정해서 탭 간격을 조정한다. 기본값은 8 이다.

예)

man의 내용을 한 페이지 단위로 행번호를 추가하여 출력하려면, man less -n



11. cat


- 파일의 모든 내용을 한번에 화면에 나타나게 한다.

예)

practice라는 파일의 모든 내용을 화면에 출력할 때- cat practice



12. pwd

- 현재의 디렉토리가 어디인지 알려준다.



13. echo

- 주어진 인자를 단순히 화면에 나타나게 한다.

예)

"i love you"를 출력시키려면, echo i love you



14. grep

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

옵션

-C : 일치하는 문장의 상하 두 라인까지 포함하여 출력한다.

-V : 버전과 함께 출력한다.

-b : Byte 오프셋과 함께 출력한다.

-c : 일치하는 라인의 갯수를 출력한다.

-h : 파일명은 출력하지 않는다.

-i : 대소문자 구분하지 않는다.

-l : 일치하는 내용을 가지는 파일명만 출력한다.

-n : 일치하는 내용을 가지는 라인 번호를 출력한다.

-s : 에러 메시지만을 출력한다.

-v : 일치하지 않는 내용을 출력한다.

-w : 한 단어로 일치해야 출력한다.

-x : 전체 라인이 일치해야 출력한다.

예)

rm이라는이름이 들어간 파일을 ls중에서 찾을 때 - ls | grep rm



15. find

-원하는 파일을 디렉토리를 탐색하면서 지정된 조건에 만족하는 파일을 찾는다. 이름이나, 크기, 날짜, 사용자등의 조건을 지정하여 찾을 수 있다.


-name : 찾고자 하는 파일의 이름을 정하면 된다.

-perm : 파일의 권한 (permission)이 일치하는 것을 찾는다.

-user : 사용자의 ID에 따라서 검색한다.

-atime : 최근 며칠내에 접속한 파일을 검색한다

-newer : 최근에 갱신된 모든 파일을 검색한다.

예)

maria라는 이름을 가진 파일을 찾으려면, find -name maria



16. ls

-lR-현재 디렉토리와 서브 디렉토리의 이름 및 포함되어 있는 파일을 출력시킨다.



17. mount

- cdrom이나 floppy disk를 사용하게 만들어 준다.

floppy mount : -t msdos /dev/fd0 /mnt/floppy

cdrom mount : mount -t iso9660 /dev/cdrom /mnt/cdrom



18. umount (언마운트; unmount)

- 디렉토리와 연결되었던 시디롬이나 플로피 디스크를 분리시켜 주는것을 말한다. 플로피나 시디롬을 다 쓰고 나면 항상 언마운트를 시켜주어야 한다.



19. Mtools

- Mtools는 리눅 스에서 DOS로 통하는 유틸리티의 모음이다.

모든 명령어들은 앞에 m자를 붙인뒤 DOS의 명령어와 같이쓰면 된다.

예를 들면 mattrib, mcd, mcopy, mdel, mdir, mformat, mlabel, mmd, mrd, mren, mtype, mread, mwrite 등이 있으며, 디렉토리를 나타낼 때에는 '\'가 아닌 리눅스의 명령어인; '/'로 지정해 주어야 한다.



20. mcd

- 도스 시스템으로 현재 사용하고 디렉토리를 이동한다.

mcd dos 디렉토리



21. mcopy

- 도스 파일 시스템으로 가거나 도스상의 파일을 복사한다.

옵션

- n : 파일을 덮어 쓸 경우에도 경고하지 않는다.

- v : 안내문을 자세하게 보여준다.

- m : 파일 갱신 시간을 보존한다.



22. 리디렉션 ( redirection )

- 리디렉션이란 어떤 명령을 실행한 후에 생기는 내용물을 사용자가 원하는 곳으로 출력하기 위해 만들어졌는데 표준 입력, 표준 출력, 에러 출력 등의 방향을을 다른 곳으로 바꾸는 것이다.

리디렉션의 기호는 ">"이다. 보통, ">" 을 이용하여 명령의 결과를 파일로 리디렉트시켰을 때 그 파일이 존재해 있었다면 그것을 덮어 쓴다. ">>"를 쓰면 파일을 덧붙여 쓰게 된다.


예)

만약 원하는 내용을 life.txt란 파일로 보내려면, 파일 생성 명령어인 cat을 친 다음, 다음 행에서 부터는 내용을 life.txt라는 곳으로 보내라는 리디렉션 기호 '>'를 친다.

그 다음에 원하는 내용을 쳐 넣으면 된다. 그리고 엔터키를 친 다음,Ctrl+Z>를 친다.

입력한 내용을 확인해 보려면, $ cat life.txt를 친 다음, 엔터키를 치면 볼 수 있다.



23. 파이프라인

- 파이프라는 것은 여러 명령을 함께 사용할 때, 한 명령의 결과가 다른 명령으로 전송되는 통로이다. 명령어를 하나 하나씩 일일이 치지 않고도 한꺼번에 여러가지를 실행할 수 있어 편리하다.

예)

ls화면을 한 페이지씩 출력하려면 ls | more , 중단 하려면 q를 치면 된다.

프로세서 관리


Process 관리

다음은 사용하고 있는 시스템 정보에 관련된 명령어에 대하여 살펴보도록 하겠습니다.


1. ps ( process )

- 현재 진행중인 프로세스에 대한 정보를 출력한다.


2. pstree ( process tree)

- ps 에 의해서 출력되는 프로세스 정보를 트리 형태로 나타낸다.


3. top

- cpu와 메모리를 사용하는 작업들에 대한 시스템 정보를 출력한다.

원래 화면으로 되돌아 가려면 q를 입력한다.


4. arch (architecture)

- 현재 사용하고 있는 cpu의 모델을 출력(i686- 인텔 펜티엄)


5. cal (calendar)

- 현재의 달을 출력해 주는데, cal과 함께 원하는 월과 연도를 숫자를 입력하면 원하는 달 의 달력을 볼수 있다.

-j를 입력하면 율리우스달력을 볼 수 있다.


6. clock

- CMOS 설정 시간을 출력하거나 변경할 수 있다.


7. date

- 현재의 시간과 날짜를 출력한다.


8. df (disk free)

- 하드의 전체 용량 및 남은 용량 볼 때 사용한다.

옵션

-h(human) 사람이 쉽게 알 수 있는 형태인 바이트 단위로 출력한다.


9. du (disk usage)

-각각의 디렉토리와 파일들이 차지하고 있는 디스크 용량을 출력한다.

예) temp2 디렉토리가 차지하는 용량을 보려고 할 때, du temp2


10. free (free memory)

- 현재 사용중인 시스템의 메모리 상태를 출력한다.


옵션

-m(Megabyte) 메모리의 양을 메가 바이트 단위로 출력한다.

-k (Kilobyte) 메모리의 양을 킬로 바이트 단위로 출력한다.


11. hostname

- 자신의 컴퓨터에 부여되어 있는 이름을 출력한다.


12. lsdev (list devices)

- 현재 시스템에 연결되어 있는 하드웨어에 관한 입출력 정보와 IRQ 값 등을 출력한다.


13. quota

- 각각의 사용자들이 사용할 수 있는 디스크의 용량을 나타낸다.


14. rdev (root device)

- 내부에 ramsize, swapdev, vidmode, rootflag의 프로그램으로 구성되어 있다.


15. uname (unix name)

- 사용중인 운영체제에 대한 정보를 출력한다.

옵션

- a(all) 현재 사용중인 운영체제와 커널의 컴파일 정보 등을 출력한다.


16. su

- 현 상태에서 다른 사용자로 다시 login한다. 만약 사용자 id를 입력하지 않으면, root로 login 된다.


17. shutdown

- 시스템을 종료할 때일반적으로 사용되는 명령어이다.

옵션

- t n 옵션 t 뒤에 n 초만큼 후에 경고 메시지 후에 kill 신호를 보낸다.

- h (halt) 완전히 닫는다.

- r (reboot) 종료후 재부팅을 한다.

- f (fast) 빠른 리부팅을 한다 .(파일 시스템 검사 생략 )

- c (cancel) 예약 되어 있는 종료 취소

- k (kidding) 모든 것이 정상이지만, 종료 시간이 되면모든 프로그램이 멈춘다.


18. reboot

- 재 부팅 시키는 것을 말한다.

옵션

- q 현재의 실행프로그램을 종료하지 않고 부팅만 다시 시킨다.


19. kill

- 프로세스 종료하기. 현재 실행중인 프로세스를 강제로 종료시키는데 사용

kill signal ID PID

kill -l

옵션

-2 : 실행 중인 프로세스에게 인터럽트 키 신호를 보냄

-9 : 가장 확실하게 실행 중인 프로세스를 종료시킴


20. tty

- 현재 사용하고 있는 단말기 장치의 경로명과 파일명을 보여줌


21. whereis

- 실제 프로그램이 어떤 디렉토리에 존재하는지 관련된 모든 경로명을 보여줌

예) whereis vi


22. fsck (file system check)

- 파일 시스템의 상태가 올바른지 검사하고, 잘못된 것이 있으면 바로 잡는다.

옵션

- a : 검사도중 발견된 에러를 자동적으로복구한다.

- r : 검사도중 에러가 발견되면 복구 여부를 물어본다.(사실 사용되지 않는다.)

- s : 순차적인 방법으로 검색한다.

- V : 검색중 각종 정보를 자세 하게 보여준다.

- N : 실제로 검사 작업을 하지는 않도록한다.



사용자 관리

1. chgrp

- 파일의 그룹 소유권을 바꾼다.

옵션

-c : 실제로 소유자가 바뀐 파일에 대해서 자세하게 설명

-f : 소유권을 바꿀 수 없어도 에러 메시지를 나타내지 않는다.

-v : 소유권의 이전에 대해서 자세히 기술한다.

-R : 디렉토리와 그 내용 파일들의 소유권을 재귀적으로 모두 바꾼다.

* 파일의 소유자나 슈퍼 유저만이 파일의 그룹 소유권을 바꿀 권한이 있는데,

chgrp + 옵션 바꾸고자 하는 그룹의 이름+ 디렉토리+ 파일 이름

예) /root그룹에 있는 ak이라는 파일을 white라는 그룹으로 소유권을 이전하려면,

chgrp white /root/ak


2. chmod

- 파일의 모드를 바꿀 때 사용하는데 파일의 모드는 권한(permission)을 제어한다.

옵션

-c : 실제로 파일의 권한이 바뀐 파일만 자세히 기술한다.

-f : 파일의 권한이 바뀔 수 없어도 에러 메시지를 출력하지 않는다.

-v : 변경된 권한에 대해서 자세히 기술한다.

-R : 디렉토리와 파일들의 권한을 재귀적으로 모두 바꾼다.

* r(read 읽기), w(write 쓰기), x(execute 실행)의 3가지 권한이 있는데, 각 단위당 2진법으로 표현된다. 따라서 읽기, 쓰기, 실행 등의 모든 권한을 주려면, 4+2+1, 따라서 합계 7이된다.

만약 모든 그룹의 권한을 다 허용해 줄 경우, 777이 된다.


예)

우선 권한을 보기위해, ls -al을 쳐보면 wow 라는 파일이 rw-r--r--로 되어있다는 것을 알 수 있다.

여기서, 첫 번째 3자리는 소유자, 두 번째 3자리는 그룹, 마지막 3자리는 타인에게 허용할 것인지 여부를 보여주는 것이다.

여기서의 소유자는 읽고 쓰기가, 그룹과 타인은 읽기만 허용이 되어있다.

모두가 사용할 수 있게 하려면 777이 된다.


chmod 777 wow

현재의 권한 변환


3. chown

- 파일의 소유권을 다른 사람에게 변경할 때 사용한다.

옵션

-c : 실제로 파일의 소유권이 바뀐 파일만 자세히 기술한다.

-f : 파일의 소유권이 바뀔 수 없어도 에러 메시지를 출력하지 않는다.

-v : 변경된 소유권에 대해서 자세히 기술한다.

-R : 디렉토리와 파일들의 소유권을 재귀적으로 모두 바꾼다.

파일의 소유권을 다른 사람에게로 바꾸는 것은 슈퍼 유저만이 할 수 있다.

예)

root/에 있는 wow라는 파일을 test라는 그룹으로 소유권을 바꿀 때

chown test /root/wow

ll을 쳐서 소유권이 바뀌었는지 확인해 보면 된다.


5. 시스템의 사용자 정보에 대한 명령어

* finger

- 시스템을 사용하고 있는 사용자들의 이름과 주소등 신상 명세를 출력한다.

변경할 때는 chfn(change finger name)을 사용하면 된다.


* id (identification)

- 사용자의 개인 id 와 그룹의 id 번호를 출력한다.


* logname

- 로그인해 있는 사용자의 이름을 출력한다.


* uptime

- 현재의 시간과 로그인 시간의 총합, 평균적인 시스템 사용 현황을 출력한다.


* w (who is logged on and what they are doing)

- 로그인 되어있는 사람과 현재 실행중인 작업의 종류를 출력한다.


* who

- 시스템을 사용하고 있는 사용자들의 이름과 터미널 번호, 로그인 시간 출력한다.


* whoami

- 가상 콘솔 기능을 사용하거나 여러명의 사용자로 동시에 로그인해 있을 때, 현재 시스템을 사용하고 있는 자신이 누구인가를 출력한다.


* adduser

- 사용자를 추가하기 위한 명령어인데 명령어 뒤에 원하는 사용자 명을 써 넣는다.



네트워크

Network


NCI에 IP주소를 설정하는 작업은 보통 X윈도우에서 합니다. 하지만 X윈도우를 사용하지 않는 경우에 네트워크을 설정하려면 명령어로 실행시키는 방법이 있습니다. 그렇게 하려면 X윈도우 상에서 설정했던 네트워크 상태가 저장되어 있는 곳으로 가서 편집하면 됩니다. 리눅스 설치 후 네트워크에 문제가 생기는 경우가 있는데 이는 대부분 네트워크 인터페이스 즉 랜카드의 문제로 인한 경우가 많습니다.


우선 자신의 랜카드가 리눅스에서 지원하는지 확인해야 합니다. 리눅스에서는 /proc 이라는 디렉토리의 내용을 확인해야 합니다. 이 디렉토리는 커널이 사용하는 디렉토리로 시스템 정보, 하드웨어에 대한 정보, 프로세서의 정보가 저장되어 있습니다. PCI를 갖고 있으면 다음과 같은 명령으로 그 내용을 확인하시면 됩니다.


#cat /proc/pci [Enter]

...

Bus 0, device 13, function 0:

Ethernet controller : Hewlet Packard J2585A (rev 0).

Medium devsel. Fast back-to-back capable. IRQ 11.

I/0 at 0xfd00.

Non-prefetchable 32 bit memory at 0xfffdc000.

...


만약 PCI랜카드를 사용하고 있는데도 Ethernet controller:이 나오지 않는다면 랜카드에 문제가 있는 경우입니다. 랜카드의 이름 즉 위에서는 Hewlett Packard J2585A가 없는 경우에는 커널에서 랜카드를 지원하지 않으므로 커널을 업그레이드 하거나 랜카드를 다른 것으로 바꾸어 주면 됩니다.


[1] ping

Ping은 현재 사용하고 있는 시스템이 네트워크로 연결된 원격지 호스트를 인식하고 있는지를 테스트하여 네트워크로 연결되어 있는지의 여부와 접근할 원격지 호스트가 정상적으로 작동되고 있는지 알아봅니다. 따라서 ping의 중요한 기능은 상대편 네트웍을 테스트 할 수 있다는 것입니다.

현재 보낸 패킷과 받은 패킷사이의 통계치를 보여주면 제대로 실행 된것입니다.


[2]ifconfig

Interface 란 NIC(Network Interface Card)를 세팅하는 것입니다.여기서는 ifconfig유틸러티를 사용하여 어떻게 IP address, netmask, gateway등을 설치하는지를 알보도록 하겠습니다.

우선 한텀에서 다음처럼 입력을 합니다.


ifconfig [interface]

ifconfig interface [atype] options | address...


옵션

up : interface를 활성화 시킵니다

down: interface를 비활성화 시킵니다.

address : [aaa.bbb.ccc.ddd]의 모양을 가집니다.


[3]PPP연결하기

리눅스에서 ppp 를 연결하려면 minicom이나 seyon에서 ppp를 구동합니다. ppp를 작동 시킨 다음 minicom이나 seyon을 서스펜드 합니다. 우선 가우나 세연을 설치하여 몇가지 설정을 해야 합니다. 종료시에는 ps명령어로 ppdd의 PID를 확인한 다음 다시 kill 명령으로 프로세스를 중단하면 됩니다. 아래의 명령어를 입력하면 설치할 수 있습니다.


[root@honey /root]#cd /mnt/cdrom/RedHat/RPMS

[root@honey /root]# rpm -Uvh gau* : 가우를 사용할때

[root@honey /root]# rpm -Uvh seyon : 세연을 사용시


이렇게 하여 설치가 끝났으면 control-panel을 이용하여 모뎀을 설정합니다.

[4]LAN 카드 설정하기


*리눅스에서 기본 정보 파일은 /etc/sysconfig 디렉토리에 있습니다. 다음의 과정을 하나하나 실행하면서 명령어를 이용하여 네트워크를 설정해 보도록 하겠습니다.

NETWORKING=yes

FORWARD_IPV4=no

HOSTNAME="honey.linux.co.kr"

DOMAINNAME=linux.co.kr

GATEWAY=210.127.236.254

GATEWAYDEV=eth0


NETWORKING부분에서는 네트워크를 활성화 할 것인지를 입력하는 부분으로 작동시키려면 YES를, 그렇지 않으면 NO 를 입력합니다. HOSTNAME 부분에는 호스트 이름을 Primary hostname + domain을 연결하여 따옴표로 묶어줍니다. DOMAINNAME에는 도메인 이름을 적고, GATEWAY부분에는 게이트 웨이의 IP주소를 써 넣으면 됩니다. GATEWAYDEV에는 게이트웨이로 나갈때 사용하는 네트워크 장치명을 적으면 됩니다.


*리눅스에서 네트워크 인터페이스 설정은 다음의 디렉토리 안에 있습니다.


cat/etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE="eth0"

BOOTPROTO=none

BROADCAST=210.127.236.255

NETWORK= .0

NETMASK="255.255.255.0"

IPADDR="210.127.236.93"

USERCTL=no

ONBOOT =no


DEVICE란에는 장치를 적어주고,NETWORK에는 네트워크 주소를 적어주고, Broadcast에는 브로드캐스트 주소를 넣어주는데, 브로드케스트 주소는 255를 사용합니다. ONBOOT는 부팅도중 자동으로 네트워크 인터페이스가 작동할 것인지의 여부를 결정하는 것이고,BOOTPROTO는 네트워크 인터페이스가 작동할 때 IP주소를 받아오는 방식을 결정하는 것입니다.


*다음은 도메인 네임을 서버에 등록하는 절차입니다. DNS를 사용하려면 DNS의 서버 IP주소를 등록시켜 주어야 하는데, 3개까지 가능합니다. 다음은 일반적인 resolve.conf파일입니다.


search honey

nameserver 210.127.236.93


search는 검색할 도메인 주소를 입력하면 되는데 사용자가 속한 Domain의 ID를 써 넣으면 됩니다. nameserver는 제가 속해있는 도메인인 linix.co.kr를 관장하는 DNS서버의 IP주소를 적어 넣은 것입니다.


   


패키지 관리

RPM으로 패키지 관리하기


레드헷 리눅스의 사용자가 크게 증가하게 된 한가지 이유는 아마도 RPM이 아닌가 싶습니다.


RPM(RedHat Package Manager)은 기존의 리눅스 배포판들보다 훨씬 편리해진 설치환경을 가지고 있었습니다. 기존의 리눅스 배포판들은 단순히 tar 포맷으로 묶여 있는 실행 파일을 복사하거나 소스 코드를 컴파일하는 방법을 사용해서 필요한 프로그램을 설치하거나 삭제하는 방법을 사용했습니다.


그래서 시스템에는 설치된 프로그램의 수가 많아지고, 특정한 버전의 라이브러리에 프로그램이 의존할 경우, 사용자 자신이 프로그램들을 유지하고 관리하는데 많은 문제가 있었습니다. 그리고 이미 설치되어 있던 프로그램이더라도 실수로 다시 설치하면 기존의 프로그램이 생성한 파일들이 모두 삭제되는 일이 발생할 수도 있었습니다.

또한 하나의 프로그램을 삭제하기 위해서는 그 프로그램에 관계된 프로그램과 관련 파일들을 사용자가 모두 알고 있어야만 완전히 삭제할 수 있다는 맹점을 가지고 있었습니다.


이처럼 설치하고자 하는 프로그램을 찾는 것부터 설치하는 것 까지 어려움 투성이었습니다. 하지만 레드햇리눅스에서는 RPM패키지와 X윈도의 제어판을 이용해 쉽게 프로그램을 설치할 수 있습니다. RPM은 레드햇 사에서 만든 패키지 관리 도구로 리눅스 시스템을 패키지 형식으로 관리할 수 있게 해주는 관리 도구입니다.


RPM은 누구나 사용할 수 있는 개방된 패키징시스템으로 만들어져 있으며, 디스트리뷰션을 인스톨할 때는 물론, 소프트웨어를 인스톨할 때나 버전업, uninstall 할때에도 많은 도움이 됩니다.

RPM의 특징은 특정한 기능을 가진 일련의 파일과 프로그램들을 묶어 쉽게 설치할 수 있게 해 줍니다.


뿐만 아니라, RPM에서는 각 패키지가 어떤 이름의 파일을 어느 디렉토리에 인스톨하였는지, 그 패키지를 이용하기 위해서는 어떤 파일이 필요한지에 대한 정보를 관리하고 있습니다. 예를 들면 다른 패키지가 이용하는 라이브러리를 가진 패키지를 언인스톨할 수 없습니다.


1. RPM 파일명 분석하기

RPM 패키지 파일에는 파일이름이 '.src.rpm '으로 끝나는 소스패키지와 '.i386.rpm'이나 '.noarch.rpm' 등으로 끝나는 바이너리 패키지로 구별할 수 있습니다. 소스 패키지는 프로그램 소스파일 등이 포함된 패키지로, 바이너리 패키지를 작성하기 위해 사용합니다. 한편, 바이너리 패키지에는 컴파일, 링크 완료 실행파일이 포함되어 있어, 이것을 인스톨하면 일일이 소스파일을 컴파일하지 않고, 소프트웨어를 실행할 수 있습니다.


RPM 파일은 크게 4개의 부분으로 이루어져 있습니다. 먼저 (패키지이름), (패키지버전), (배포판에서 가지는 자체 버전), (설치될 시스템)이 RPM 앞에 붙여지게 되어 있습니다.

다음의 RPM파일명을 분석해 보도록 하겠습니다.


myth-1.2.3-4.i386.rpm


RPM 패키지 이름에서 - 는 각 필드를 구분하는 것입니다.

우선, 맨 앞부분의 myth 는 패키지의 명칭으로 가장 기본적인 것입니다.

패키지이름은 인스톨 후 조회나 언인스톨할 때 사용되는 이름입니다. 패키지 명칭에서 - 는 각 필드를 구분하려는 것으로, 이를 없애면 안됩니다.

두번째 1.2.3 은 패키지의 버전입니다. 이것은 프로그램 버전과 일치하는 것입니다.

세번째 의 4 는 패키지의 릴리즈 번호입니다.

즉 배포판에서 가지는 자체 버전으로, 이 패키지가 몇번째로 만들어진 것인지를 나타냅니다. 똑같은 프로그램으로 버전이 같다고 해도 이전에 만든 패키지를 다시 재 패키징을 하였다면, 뭔가 변화가 있고 릴리즈 번호를 올리게 됩니다.

네번째의 i386 은 어떤 시스템에서 쓰이는것인지를 나타내는 것입니다.

i386 이라면 당연히 PC 계열을 나타내는 것이고 sparc 이라면 스팍 리눅스용, alpha 라면 알파 리눅스용일것입니다. (현재 레드햇은 이 세개의 시스템용으로 나옵니다.) 이 네번째 필드가 src 라고 적힌것이 있는데 그것은 소스 RPM 입니다. 바이너리 패키지를 만들기 위해 필요한것입니다.

마지막의 rpm은 소위 말하는 확장자입니다. RPM 패키지라는것을 나타내 줍니다.

버전번호와 릴리즈번호가 독립되어 있으므로, 새로운 패키지가 나왔을 때도 소프트웨어 자체가 버전업된 것인지 아니면 패키지 구성만 변한 것인지 파일명으로 알 수 있습니다.

또 버전번호나 릴리즈번호에는 숫자 이외에 문자를 포함해도 됩니다.


2. RPM 명령으로 설치하기


1. 파일 설치하기

RPM 패키지의 설치와 제거는 아주 간단합니다. 보통 다음과 같은 식을 입력하면 설치가 됩니다.


rpm -i (rpm패키지파일이름)


위와 같은 방식을 응용하여, 설치되는 모습을 확인하고자 할 때는 다음과 같은 명령어를 이용하면 됩니다.


rpm -ivh (rpm패키지파일이름)


이와 같이 입력하면, 설치 되는 모습이 화면상에 # 마크로 표시 될것입니다.

하지만, RPM 으로 패키지를 설치할 때는 사실 위의 명령보다는 -Uvh 옵션을 사용하는 습관을 익히는것이 좋습니다.


rpm -Uvh (rpm패키지파일이름)


이 명령을 사용한다면, rpm은 이 패키지의 이전 버전이 설치 되었는지를 보고, 이미 설치가 되어 있다면 업그레이드를 할 것입니다.

그냥 -i 또는 -ivh로 설치한다면 이전 버전의 같은 패키지에 대한 정보는 사라지지 않을 것이고, 또한 이전의 설정파일도 백업되지 않습니다. 따라서, 되도록 rpm - Uvh를 사용할 것을 권장합니다.


2. 설치 위치 알아보기

설치를 한 후, 파일들이 어느 디렉토리에 있는지 알아야 한다거나, 혹은 자신의 컴퓨터에 현재 어떠한 프로그램이 설치되어 있는지 알고 싶다면 다음과 같은 명령을 사용하면 됩니다.


rpm -qa | more


'-q' 옵션은 그 파일에 대한 정보를 알아내기위한 옵션이고, 'a' 옵션은 모든 파일에 대해 적용하라는 의미입니다. 이 명령을 수행하면 자신의 컴퓨터에 설치되어 있는 모든 프로그램의 목록이 페이지 단위로 나열되어 나옵니다.


3. 간략한 정보 보기


하나의 패키지에 대한 간략한 정보를 알아보려면 다음과 같이 입력하면 됩니다. 이렇게 하면, 패키지에 대한 설명이 나타납니다.


rpm -qi (rpm패키지파일이름)



4. 파일 정보 보기

텍스트가 길게 표시되는데 파일명과 버전번호, 패키징한 사람, 프로그램에 대한 설명 등이 나옵니다. 이번에는 이 프로그램의 파일에 대한 상세한 정보를 알아보기 위해 다음과 같이 입력해 봅시다.


rpm -ql (rpm패키지파일이름)


그러면 이 패키지에 포함된 파일들이 어떠한 것이 있는지 내용을 자세하게 보여줄 것입니다.


5. 프로그램 제거하기

파일에 대한 권한과 어느 디렉토리에 있는지에 대한 정보가 포함됩니다. 마지막으로 설치한 프로그램을 제거해 보겠습니다.


rpm -e (rpm패키지 이름)


위와 같이 입력하면 쉽게 제거됩니다. 물론 프로그램을 제거할 때는 패키지의 의존성에 주의해서 신중히 생각한 후 행동에 옮겨야 할 것입니다.

위에서 사용된 명령어 외의 명령어를 설명하자면 다음과 같습니다.


rpm -qf (rpm파일이름) 특정한 파일이 포함되어 있는 패키지를 확인해 볼 때

rpm -V (rpm패키지 이름) 시스템에 설치된 패키지를 검증할 때

rpm -Va 시스템에 설치된 패키지들을 모두 검증할 때

(실수로 몇 가지 파일들을 지웠는데, 어느 것을 지웠는지 확신할 수 없다. 전체 시스템을 점검해 보고 어떠한 파일이 빠져 있는지 살필수가 있다.)

rpm -Vp (rpm패키지파일이름) 시스템에 설치할 때 사용한 RPM 파일을 이용해서 해당 패키지를 검증할 때


* * 위의 과정 외에 rpm 실행모드에 관한 명령어는 다음과 같습니다


rpm --help 도움말을 출력하고자 할 때

rpm--showrc 설정사항을 출력하고자 할 때

rpm--version 버전을 출력하고자 할 때


* * 그외 몇가지 부수적인 옵션이 있는데 여기서 설명하도록 하겠습니다.

이 부수적인 옵션들은 설치 또는 업그레이드 또는 제거 옵션뒤에 붙이게 됩니다.

(제거 옵션에서는 --nodeps , --noscripts , --test 만을 사용합니다.)


예) rpm -e --nodeps (삭제할패키지이름)


--nodeps : 의존성을 무시하고 설치한다.

가장 많이 겪게 되는 문제로 RPM 에서는 어떠한 패키지가 깔려 있지 않으면, 그것에 영향을 받는 패키지는 설치하지 못하는 경우가 있다.

이 때 사용하는것이 --nodeps 이다.


--force : 강제로 설치 하는 것이다.

패키지 설치시 현재 패키지에 포함된 파일이 이미 다른 패키지에 의해 설치 되어 있을때, 이들이 충돌을 할 경우 에러가 발생한다. 하지만, 이 옵션으로 설치가 가능하다. 이 옵션은 이미 있는 파일은 덮어 쓰지 않는다. 이미 있는 파일마저 덮어 쓰려면 --replcaefiles를 사용하면 된다.


--oldpackage : 만약 업그레이 할 패키지가 이미 설치되어 있는 패키지보다 오래된 버전일 경우에는 업그레이드를 진행시킬 수 없다. 그래도 불가피하게 설치를 진행시켜야 할 경우, 이옵션을 이용하여 강제로 설치할 수 있다.


--percent : 패키지 파일을 설치하는것을 퍼센트로 표시해준다.


--replacepkgs : 이미 같은 패키지가 설치되 있더라도 다시 설치한다.


--replacefiles : 이미 설치된 다른 패키지의 파일을 덮어 쓰면서라도 설치한다.


--root : 디렉토리 와 디렉토리를 마치 / 처럼 생각하고 설치를 한다.

즉 "--root /tmp" 라고 한다면 /tmp 가 / 인 것으로 생각하고 그 이하로 설치하게 될것이다. 한가지 문제가 있다면 이 명령을 사용하면 RPM 정보를 기록하는 파일을 지정한 디렉토리 및 에서 찾게 된다.


--test : 패키지를 실제로 설치하지는 않고 충돌이나 의존성 문제가 있는지만을 검사한다.


--noscripts : 스크립트를 실행하지 않는다.

(레드햇 패키지에는 4개의 스크립트가 들어간다. 설치 전후, 제거 전후 이렇게 4개이다.)


--excludedocs : 문서 파일은 설치 하지 않는다.


rpm


1. 파일 설치하기

설치 : rpm -i (rpm패키지파일이름)


설치되는 모습을 확인하고자 할 때

rpm -Uvh (rpm패키지파일이름)


설치를 한 후, 파일들이 어느 디렉토리에 있는지 알아야 한다거나, 혹은 자신의 컴퓨터에 현재 어떠한 프로그램이 설치되어 있는지 알고 싶을 때

rpm -qa | more


하나의 패키지에 대한 간략한 정보를 볼때

rpm -qi (rpm패키지파일이름)


파일에 대한 상세한 정보를 알아볼 때

rpm -ql (rpm패키지파일이름)


특정한 파일이 포함되어 있는 패키지를 확인해 볼 때

rpm -qf (rpm파일이름) 


시스템에 설치된 패키지를 검증할 때

rpm -V (rpm패키지 이름)


시스템에 설치된 패키지들을 모두 검증할 때

rpm -Va


시스템에 설치할 때 사용한 RPM 파일을 이용해서 해당 패키지를 검증할 때 

rpm -Vp (rpm패키지파일이름)





sort

sort 는 한 파일의 라인을 배열하거나 재배열한다. 가장 간단한 형식에서, 필요한 것은 sort에 파일명을 주는 것이다.

sort names


파일 몇 개를 하나의 정렬된 파일로 결합 할 수 있다.

세 파일에 든 모든 명단을 알파벳순으로 names.all 이란 파일에 넣는다.

sort names.1 names.2 names.3 > names.all




tar fiees

마그네틱테이프에 파일을 복사하고 마그네틱테이프에 서 files이라는 이름의 파일을 추출

-c 복사할 새 파일의 새 테이프 생성

-x 마운트된 테이프에서 파일을 추출

device 아카이브로 /dev/mt0 (테이프)가 아닌 디바이스 지정

block 2에서 20사이의 블록킹 팩터 지정






 


 


편집기

[1] 시작


vi의 실행은 한글 환경에서 vi를 입력하면 되고, 콘솔모드에서 한글을 다루려면, han을 먼저 입력한 뒤, vi를 입력하면 됩니다. vi를 실행시키는 방법은 간단합니다. 셸상에서 'vi'라고 입력하고 Enter 키만 누르면 된다. 그러면 새로운 문서를 편집할 수 있는 환경이 만들어 집니다.


예) >vi

기존의 문서를 편집하고자 할 때에는 파일의 이름을 구체적으로 명시합니다.

예) >vi file1

지정한 파일의 내용을 읽기 전용으로 열어서 볼 때는 다음과 같이 명시합니다.


예) >vi -R file

>view file


[2] vi의 세가지 모드


이렇게 vi를 실행시키면, 검은색 화면 첫행에 커서만 깜박거리고 있을 것입니다.

"어? 왜 메뉴가 없지?"

처음 vi를 사용하는 분이라면 아마 이런 질문을 하게 될 것입니다. 결론부터 말하자면 vi에는 메뉴가 없다. 필요한 명령어는 전부 외워서 적용해야 합니다.

도스나 윈도에서 사용하던 편집기에서는 일단 편집하고자 하는 파일에 내용을 입력하다가 편집 명령을 이용할 때에는 화면의 메뉴를 클릭, Ctrl이나 Alt와 같은 특수키를 사용했을 것입니다. 하지만 vi에서는 메뉴라는 것이 없이 상태를 전환할 수 있는 다른 방법을 제공한다는 차이점을 가지고 있습니다. 처음에는 이러한 방법이 어렵게 느껴질지 모르지만, 익숙해지다 보면, 오히려 이러한 방법이 더 편리하다는 것을 알게 될 것입니다.


그렇다면 vi명령어는 어떻게 구성되어 있을까요?

vi명령어는 다음과 같이 입력 모드, 명령 모드, 콜론 모드(ex 모드) 크게 세가지로 분리됩니다.


① 입력 모드 - i, a, o, I, A, O를 누른 후 텍스트를 입력할 수 있는 상태

② 명령 모드(Esc모드) - ESC키를 누른 상태

③ 콜론 모드(Ex모드) - ESC키를 누르고, :(콜론)을 입력한 상태


그리고, 이러한 기본적인 모드들을 다른 편집기의 활용과 비교해보자면, 다음과 같습니다.


① 입력 모드 - 다른 편집기에서 타이핑을 하여 파일의 내용을 입력하는 과정

② 명령 모드 - 다른 편집기의 편집(Edit) 메뉴에서 제공하는 복사(Copy), 붙이기(Paste),삭제(Delete) 등의 편집 기능의 활용

③ 콜론 모드(ex 모드) - 다른 편집기의 파일(File) 메뉴에서 수행하는 열기(Open), 저장 (Save), 다른 이름으로 저장(Save as) 등의 명령 수행


vi는 실행될 때 명령 모드에서 시작하고, 실행을 종료할 때에는 콜론 모드에서 종료 명령을 수행합니다. 또한 vi는 대문자와 소문자 구분을 확실히 해두어야 한다는 것을 유념합시다.

자. 이제 그림을 통해 이러한 세가지 모드를 구체적으로 살펴보도록 합시다.


(1) 입력 모드


글자를 입력하기 위해서는 입력모드로 가야하는데, 'i'를 입력하면, 하단에 --INSERT--가 나오면서, 글자를 입력할 수 있는 입력모드로 바뀝니다.

입력 모드로 들어가는 대표적인 방법은 i 키를 누르는 것이지만, 이외에도 몇 가지 방법이 더 있습니다. 이렇듯 다양한 종류의 글 삽입 방법을 만들어놓음으로써 키보드 타이핑 횟수를 최대한 줄일 수 있는 이점을 지닙니다. 이것은 모드 방식 편집기의 특성일 수도 있고, 유닉스 프로그래머들의 독특한 문화일 수도 있겠지요.


- i : Insert, 현재 커서의 위치에 글자를 삽입

- I : Insert, 커서가 있는 줄(line)의 맨 앞에 글자를 삽입

- a : Append, 현재 커서 위치의 다음 칸에 글자를 추가

- A : Append, 커서가 있는 줄(line)의 맨 뒤에 글자를 추가

- o : Open line, 현재의 줄 다음에 새로운 줄을 삽입

- O: Open line, 현재의 줄 앞에 새로운 줄을 삽입


위의 경우 중 i의 예를 들면 아래 그림과 같습니다.

vi 파일명 으로 문서작성 형식으로 들어가 i를 누른 후, 아래 쪽에 INSERT표시가 생긴 후 글을 입력시킨 형태입니다.

일단, 입력 모드로 전환되면, 커서의 현재 위치에서 입력 명령에 따라 여러 가지 내용을 입력할 수 있습니다. 영/한 변환은 Shift+Spacebar를 입력하면 됩니다.

아직까지는 단순히 글을 치고 Enter 키를 이용해 줄을 바꾸는 일밖에 할 수 없습니다. 화살표 키를 이용해 커서의 위치를 바꾸어 입력하는 것은 가능합니다.

편집은 대부분 명령모드 상태에서 이루어 집니다.



(2) 명령 모드


입력 모드에서 명령 모드로 다시 전환하려면 Esc 키를 누르기만 하면 됩니다. ESC 키를 누르고 문자를 입력하려고 하면 비프음만 날 뿐 입력은 되지 않을 것입니다.

리눅스에서는 명령모드가 따로 있습니다. 명령모드는 편집모드라고도 하는데, 글을 입력시키는 방법이 아닌 수정과 편집을 할 수 있는 상태임을 기억해 두어야 합니다. 즉, 명령모드에서는 복사,삭제, 붙이기. . .등의 작업이 이루어 집니다. 또한, 입력모드를 통해 삽입 등 잘못된 명령을 내렸을 때 'u'라는 명령어를 통해서 Undo, 즉 복구가 가능하게 할 수 있습니다.


(3) 콜론 모드


명령모드에서 콜론 모드로 전환하려면 ':'명령을 실행시키면 됩니다. 콜론 모드는 vi에서 사용할 수 있는 명령어들을 이용하는 곳입니다. 윈도우 환경에서라면 메뉴 바와 같은 역할을 한다고 볼 수 있습니다. 파일을 저장하거나 vi를 종료하는 등의 일을 수행할 수 있습니다. 콜론 모드로 들어가려면 Esc를 누른 후 ":"를 누르면 됩니다. 콜론 모드에 들어가게 되면 화면 아래쪽에 ':' 표시가 나타나게 되며, 여기서 원하는 작업에 해당하는 명령을 입력하고 Enter 키를 치면 됩니다. 아래 그림에서 아래쪽에 ":wq"라는 표시가 눈에 뜨일 것입니다. ":" 이 상태가 바로 앞에서 말한 콜론모드의 형태입니다.


[3] 종료


종료 명령은 앞에서 잠깐 콜론 모드에서 이루어 집니다.

편집한 데이터를 저장하고 종료하려면, wq(Write and Quit)를 입력합니다.


예) :wq

저장하지 않고, 강제로 종료하려면, q!(Quit!)를 입력합니다.


예) :q!

vi를 끝내지 않고, 현재 작업 중인 내용을 저장만 하려면, w를 입력합니다.


예) :w


:wq에 대한 예


[4] vi명령어의 간단한 문법


(반복횟수)(편집명령)(반복횟수)(커서이동명령)

현재의 위치에서, 커서이동명령의 내용순서대로, 문서의 임의위치로 이동하는 순간, 편집명령어의 내용이 수행됩니다.


[5] 정규표현식의 특수 기호들


- . : 한글자를 대표하는 기호 (dos 의 ? 와 동일)

- * : 여러개의 문자를 동시에 대표하는 기호

- ^ : 줄의 처음시작

- $ : 줄의 맨끝

- % : 처음줄부터 끝줄까지

- \ : 특수한 기호들이 가지는 뜻을 없앨때 사용

- \< : 단어의 시작과 대응합니다

- \> : 단어의 끝과 대응합니다

- [^] : 묶여진 문자를 제외한 아무것이나 대응합니다

- \ : 이어지는 기호를 문자 그대로 해석합니다

- [ ] : 일정한 제한을 두어 글자를 대표하고자 하는 기호

- [a-z] : a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z 를 대표

- [A-Z] : A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z 를 대표

- [AB] : A 또는 B

- p[aeiou]t : pat, pet, pit, pot, put 를 대표

- [0-9] : 0,1,2,3,4,5,6,7,8,9 를 대표



[6] 명령 모드(ESC 모드)에서 사용되는 몇가지 기호

- 다음과 같은 기호는 기본적인 것으로 필수적으로 알아두시기 바랍니다.

- G : 화일의 맨끝으로

- ^ : 현재줄의 맨앞 (빈칸무시)으로

- 0 : 현재줄의 맨앞으로

- $ : 현재줄의 맨 뒤로

- % : 짝을 이루는 기호 확인

- w : 다음 단어로

- b : 이전 단어로

- e : 현재 단어의 끝 글자


[7] 커서 움직이기

- 명령모드 상태에서 커서를 마음대로 움직일 수 있습니다.


① 글자 단위 이동

- h : 커서를 한칸 왼쪽으로 이동하는 명령

- j : 커서를 한줄 아래로 이동하는 명령

- k : 커서를 한줄 위로 이동하는 명령

- l : 커서를 한칸 오른쪽으로 이동하는 명령

- Backspace : 커서를 한칸 왼쪽으로 이동하는 명령

- Space : 커서를 한칸 오른쪽으로 이동하는 명령


② 줄 단위 이동 - ^ : 빈칸을 무시하고, 커서를 현재 줄의 첫글자로 이동하는 명령

- 0 : 커서를 현재줄의 처음으로 이동하는 명령

- $ : 커서를 현재줄의 맨끝으로 이동하는 명령

- % : 짝을 이루는 기호 확인하기

- + : 커서를 다음줄의 처음으로 이동하는 명령

- - : 커서를 이전 줄의 처음으로 이동하는 명령

- Return : 커서를 다음줄의 처음으로 이동하는 명령

- n| : 현재줄의 n 번째 열로 (n은 임의의 숫자)

- H(Home) : 커서를 화면상에 처음줄로 이동하는 명령

- M(Middle) : 커서를 화면상에 중간줄로 이동하는 명령

- L(Last) : 커서를 화면상의 마지막줄로 이동하는 명령

- nH : 화면상의 처음줄로부터 n 줄 밑으로 이동(n은 임의의 숫자)

- nL : 화면상의 마지막줄로부터 n 줄 위로(n은 임의의 숫자)

- g(Go) : 파일의 마지막 줄로 이동하는 명령

- nG : n번째 줄로 건너뛰는 명령

- gg : 맨 마지막줄로

- ngg : n 번째줄로

- n : n 번째줄로


③ 단어 단위 이동 - w(word) : 커서를 다음단어의 첫글자로 이동하는 명령

- b(back) : 커서를 이전단어의 첫글자로 이동하는 명령

- e(end) : 커서를 다음단어의 끝 글자로 이동하는 명령

- E : ?, ! 등 구두점을 무시하고, 현재 단어의 끝으로 이동

- ) : 다음 문장의 시작으로 이동하는 명령

- ( : 이전 문장의 시작으로 이동하는 명령

- } : 다음 문단의 시작으로 이동하는 명령

- { : 이전 문단의 시작으로 이동하는 명령

- ]] : 다음 섹션의 시작으로 이동하는 명령

- [[ : 이전 섹션의 시작으로 이동하는 명령


④ 화면단위 이동

- vi에는 스크롤 기능이 없는 대신 화면 단위로 이동하는 명령어들이 있습니다.

- Control + F (Forward) : 한화면 밑으로 이동

- Control + B (Backward) : 한화면 위로 이동

- Control + D (Down) : 반쪽화면 밑으로 이동

- Control + U (Upon) : 반쪽화면 위로 이동

- Control + E : 커서는 현재위치 그대로 화면만 한줄씩 위로 이동

- Control + Y : 커서는 현재위치 그대로 화면만 한줄씩 아래로 이동

- z : 커서의 위치와 함께, 화면상의 맨위로

- nz : n번 라인을 화면상의 맨위로

- z : 커서의 위치와 함께, 화면상의 중간으로

- z- : 커서의 위치와 함께, 화면상의 맨아래로


※ - Control + G : 현재 편집하고 있는 문서의 상태를 알 수있다

- Control + L : 화면 재표시 (글자가 깨졌을 경우; 윈도의 F5와 비슷)

- Control + R(edraw) : 화면 재표시 (글자가 깨졌을경우)


[8] 편집하기

① 복사, 붙이기, 합치기

- y (Yank) : 복사하기

- yy : 한 줄 전체의 내용을 복사한다

- 2yy : 두줄복사

- nyy : 현재 줄 이하로 n개의 줄을 복사한다 (n은 임의의 숫자, 2yy는 2줄 복사)

- ynw : n개의 단어를 복사한다(y2w는 두 개의 단어를 복사)

- yw : 한단어 복사

- y2w : 두단어 복사

- y$ : 현재 위치에서 그 줄의 끝까지 복사한다

- y0(y^) : 현재 위치에서 그 줄의 처음까지 복사한다

- yG : 현재 위치에서 파일의 끝까지 복사한다(G는 파일의 마지막 줄)

- Y : 한 줄 전체의 내용을 복사한다 (yy 와 동일)

※ 마지막 명령어의 반복 - . : 마지막에 수행한 명령어를 반복한다.

-2. : 명령어를 2번 반복한다.

- p (Put or Paste) : 붙이기

- p : 버퍼에 저장된 내용을 커서의 오른쪽으로 붙여 넣는다.

- 2p : 아래로(오른쪽으로) 두번 붙이기

- np : n번만큼 p 명령을 반복. 2p라면 버퍼의 내용을 두 번 붙여넣는다

- P : 위로(왼쪽으로) 붙이기

- 2P : 위로(왼쪽으로) 두번 붙이기

- nP : 버퍼에 저장된 내용을 커서의 왼쪽으로 붙여넣는다. 사용법은 p와 같다


아래 화면은 복사하기와 붙이기의 간단한 예시입니다. 우선 명령모드로 바꾼 뒤, 커서를 두번째 줄에 놓고, yy를 칩니다.

다음으로 마지막줄 마지막칸에 커서를 놓고, p를 누릅니다. 이런 과정을 거치면 두번째 줄이 복사되어 네번째줄에 붙게 됩니다.


- xp : 두 문자를 바꾸는 명령

- deep : 두 단어를 바꾸는 명령

- ddp : 두 줄을 바꾸는 명령

- J(Join) : 여러 줄의 내용을 한 줄로 합친다

- J : 현재줄을 윗줄에 붙인다. (두줄 합치기)

- nJ : n개의 줄을 합쳐 한 줄로 만든다. 커서는 원본 문서의 마지막 줄의 첫번째 위치(합쳐진 줄에서는 중간)에 놓인다. 5J는 5줄로 이루어진 내용을 한 줄로 만든다


우선 xp를 실행했을 경우부터 살펴봅시다. 기존의 "어때요?" 중 "어"에 커서를 놓고, 명령모드로 전환 후, xp를 누릅니다. 그럼 "때어요"로 문귀가 바뀝니다. 다음은 J를 실행해 봅시다. J가 대문자임을 명심해야 합니다. 리눅스에서 주의할 사항은 대문자와 소문자를 구별하는 것. j를 누르면서 안된다고 투덜되면 곤란합니다. 셋째줄 끝에 커서를 놓고, 명령모드에서 J를 누르면, 넷째줄에 있던 내용이 셋째줄에 붙습니다. 그럼 아래 그림과 같은 결과가 나오는 것입니다.


② 지우기, 복구하기, 바꾸기 - dnw : n개의 단어를 지운다

- d$ : 커서가 있는 위치에서 그 줄의 끝까지 지우기

- D : 커서부터 줄의 끝까지 삭제합니다. (d$ 와 동일)

- d (Delete) : 지우기

- dd : 현재커서가 위치한 줄의 전체를 삭제합니다.

- 2dd : 두줄지우기

- ndd : n줄지우기 (n 은 임의의숫자)

- dw : 한단어 지우기

- d2w : 두단어 지우기

- d0(d^) : 그줄 처음까지 지우기

- dG : 커서가위치한 곳으로 부터 문서 끝까지 지우기

- d move : 커서가 위치한 곳부터 move까지 삭제

- dlG : 커서가 위치한 곳으로부터 편집버퍼의 맨앞까지 삭제.

- :lined : 지정한 줄을 삭제

- :line, lined : 지정한 범위를 삭제

- u (Undo) : 되살리기 명령으로 버퍼에 저장되어 있는 원래의 내용을 복구

- u : 한번복구하기

- 'nu' : (n은 임의의 숫자) 형식으로 사용하며, n 단계까지의 명령을 복구할 수 있다

- 2u : 두번복구하기

- c (Change) : 바꾸기

- cc : 한줄 바꾸기

- 2cc : 두줄 바꾸기

- ncc : n개의 줄 바꾸기(n은 임의의 숫자)

- cw : 한단어 바꾸기

- ce : 공백을 제외하고 한단어를 바꾸기

- c2w : 두단어 바꾸기

- c$ : 그 줄 끝까지 바꾸기

- c0(c^) : 현재 위치에서 파일의 끝까지 바꾼다

- c : 그 줄 끝까지 바꾸기 (c$)와 동일

- cmove : 커서부터 move까지 변경

- r (Replace) : 한글자 바꾸기

- 2r : 두글자 바꾸기

※ r 명령어는 insert 모드로 바뀌지 않는다.

- R : 바꾸면서 삽입이 아닌 수정(modify) 모드로 들어간다. 윈도에서 Insert 키를 누르고 수정 상태로 들어가는 것과 같다

- s : 한글자 지우고 insert 모드로 - cl 와 동일

- S : 한줄지우고 insert 모드로 - cc 와 동일

- ~ : 대문자 < - > 소문자 바꾸기 - 영문자에만 해당

※ 지우기와 바꾸기의 차이점은 바꾸기는 명령어 후에 vi 편집모드로 바뀐다.


[9] 찾기

- /요 : 현재 위치에서 아래쪽 방향으로 '요'라는 단어를 찾는다

- ?요 : 현재 위치에서 위쪽 방향으로 '요'라는 단어를 찾는다

- / : 단어 찾기를 반복한다(웨에서 아래쪽 방향으로)

- n : 단어 찾기를 반복한다(아래쪽 방향으로)

- ? : 단어 찾기를 반복한다 (아래족에서 위쪽 방향으로)

- N : 단어 찾기를 반복한다 (위쪽 방향으로)

- fx : 현재줄에서 x문자 찾기 - x 는 한개의 글자

- Fx : 현재줄에서 반대방향으로 x문자 찾기 - x 는 한개의 글자

- tx : 현재줄에서 x문자를 찾아서 바로전에 커서놓기

- Tx : 현재줄에서 반대방향으로 x문자를 찾아서 바로후에 커서놓기

- ; : 현재 줄에서 글자 찾기를 반복한다(뒤로)

- ' : 현재 줄에서 글자 찾기를 반복한다(앞으로)

※ 찾기와 편집명령의 응용

- d/simple : simple 이라는 단어가 나올때까지 지우기

- d/^scully : 줄의 맨앞에 scully 라는 단어가 나올때까지 지우기

- y/yahoo : yahoo 라는 단어가 나올때까지 복사하기


[10] 편집모드 지정하기

- i : insert 현재커서위치

- I : 현재커서가 위치한 줄의 맨처음에

- a : append 현재커서위치 바로 다음에

- A : 현재커서가 위치한 줄의 맨끝에

- o : open 현재커서위치 바로 아래줄에

- O : Open 현재커서위치 바로 윗줄에


[11] 표시하기(Marking)

mx : mark 현재의 커서위치를 x 라는 문자로 기억 보이지 않는 북마크

- `x : 기억된 x 위치로 이동

- `` : 이동하기 전의 위치로 (제자리)

- ' ^_ x : 기억된 x 위치의 맨 앞으로 이동

- '' : 이동하기 전 위치의 맨앞으로 이동

[12] 버퍼 이용하기

- "xyy : x 라는 이름의 버퍼에 한줄 복사 하기

- "xp : x 라는 이름의 버퍼에 저장된 내용을 붙이기

- := : 현재 줄번호 보여주기

- :/pattern/ = pattern 이 위치한 줄번호 보여주기


[13] ex 명령어 익히기

vi서 사용하는 ex 명령어는 이전 ex 편집기에서 지원하던 기능들입니다. ex 모드(콜론 모드)에서 사용하는 명령어는 열기(Open), 저장(Save), 다른 이름으로 저장(Save as) 등의 명령을 수행합니다. ex 모드는 Esc 키를 누르고 ':' 키를 입력하여 들어갈 수 있다는 것과 종료시의 명령어에 대해서는 앞에서 설명하였기에 생략하기로 하겠습니다.


① ex 명령어의 기본형식

(범위지정) (명령어) (명령이 수행될 위치)

:k,l command m


예)

- :1,10 co 50 : 1 줄 부터 10 줄 까지를 50 줄 이후로 복사

- :34,50 d : 34 줄 부터 50 줄 까지 삭제

- :100,150 m 10 : 100 줄 부터 150 줄까지를 10 줄 이후로 옮김

- :.,$ d : 현재줄부터 끝까지 지우기

- :.,+20 co -4 : 현재줄부터 20줄을, 4줄 위에 복사하기

- :-,+ t 0 : 위, 아래로 한줄(총 3줄)씩을, 문서 맨위에 복사하기

- :/pattern/ d : pattern 이 들어있는 줄 지우기

- :/pattern/ -nd : pattern 이 들어있는 줄로부터 n 번째 윗줄 지우기

- :/pattern/ +nd : pattern 이 들어있는 줄로부터 n 번째 아랫줄 지우기

- :/pattern1/,/pattern2/d : pattern1 이 들어있는 줄부터, pattern2 가 들어있 는 줄까지 지우기


- :.,/pattern/ m 23 : 현재줄부터 pattern 이 들어있는 줄까지, 23번줄 이 후로 옮기기



② g 옵션 붙여 문서전체에 적용하기

- :g/리눅스 : 파일 전체에서 '리눅스'가 있는 마지막 줄로 이동한다

- :g/리눅스/ p : 파일 전체에서 '리눅스'가 있는 줄을 보여준다

- :g/리눅스/ nu : 파일 전체에서 '리눅스'가 있는 줄을 번호와 함께 보여준다

- :60,100 g/리눅스/ p : 60~100줄 사이에서 '리눅스'가 있는 줄을 보여준다

- :g/리눅스/d : 문서 전체에서 '리눅스'가 있는 줄을 제거한다


③ 저장 및 종료하기

- :w : 저장하기 (write)

- :q : 종료하기 (quit)

- :wq : 저장하고 종료하기

- :xv저장하고 종료하기 (:wq 와 동일)

- :w! : 강제로 저장하기 (read-only 로 열었을경우)

- :q! : 편집한 내용을 저장하지 않고 종료하기

- :w new_file_name : 새로운 파일이름으로 저장하기

- :w %.new : 현재화일 이름에 .new 를 붙여서 새로운 화일로 저장

- :230,$ w file_name : 230 줄부터 끝줄까지 file_name 으로 저장하기

- :.,600 w file_name : 현재줄부터 600줄까지 file_name 으로 저장하기

- :1,10 w new_file : 1줄부터 10줄까지 new_file 로 저장하기

- :340,$ w >> new_file : 340줄부터 끝줄까지 new_file 에 추가하기


④ 읽기

- :r[ead] filename : 현재위치에 filename 읽어들이기

- :r /usr/local/data : 현재위치에 /usr/local/data 읽어들이기

- :185 r /usr/local/data : 185줄 이후에 /usr/local/data 읽어들이기

- :$r /usr/local/data : 맨끝줄 이후에 /usr/local/data 읽어들이기

- :0 r /usr/local/data : 맨윗줄에 /usr/local/data 읽어들이기

- :/pattern/ r /usr/local/data : pattern 이 존재하는 줄에 /usr/local/data 읽어들이기


⑤ 다중편집하기

vi file1 file2 :file1과 file2라는 두 개의 문서를 읽어들인다. 먼저 읽는 문서는 file1이다

- :args :현재 편집중인 화일목록을 보여준다

v - :n :두 번째 문서(file2)를 편집할 수 있다

- :e # :이후부터는 ':e #' 명령을 사용하여 문서를 번갈아 열며 편집할 수 있다

- :prev[ious] :이전화일로 돌아간다

주의 - 편집중인 화일이 저장되지 않으면 다음 화일로 넘어갈수 없다

* * 새로운 파일 편집하기

- :e file1:새로운 파일(file1)을 읽어들여 편집한다

- e[dit] file_name :새로운 file_name 편집하기

- :e! :현재의 편집중인 내용을 무시하고 가장 최근에 편집한 내용을 다시편집하기


⑥ g 옵션과 바꾸기

- :m,n s/old/new/g - :g/pattern/ s/old/new/g

예 )

: 1,5 s/리눅스/linuk/gc :1줄부터 5 줄까지 리눅스를 linuk 로 확인해가면서 바꾼다.

:g/문자 /s/파일/file/g : '문자'가 있는줄만을 찾아서 '파일'을 'file'로 바꾼다.

:% s/버퍼/buffer/g :처음줄부터 마지막줄까지, 버퍼 를 buffer 로 바꾼다.

콜론모드 상태에서 위와 같은 명령어를 수행한 예가 바로 다음 화면입니다.


* * 프로그램 소스 코드에서 괄호 짝 찾기

프로그램이나 HTML 소스에는 수많은 괄호(< >, ,…)가 사용되게 마련입니다. 때문에 편집을 하다 보면 괄호의 짝을 잃어버려 프로그램 오류가 나는 경우도 빈번합니다. 이럴 때 vi는 편리한 기능을 제공합니다. 해당 괄호 위에 커서를 놓은 후 키를 누르면 짝이 되는 괄호의 위치로 이동합니다.


[14] 예기치 않은 시스템 다운후 되살리기

- vi -r :되살릴수 있는 모든 파일의 이름을 보여준다.

- vi -r file :vi에디터를 실행하여 지정한 파일을 되살리는 옵션이다


[15] 디스플레이 제어

^L : 현재의 화면을 다시 불러온다

:set number : 내부의 줄번호로 내용을 불러온다

:set nonumber : 내부의 줄번호로 내용을 되 불러 오지 않게 하는 옵션이다

예) set number 실행시 다음과 같이 줄번호가 나타납니다

- /rexp : 지정된 정규표현식에 대해 앞으로 이동한다.

- / : 이전의 패턴에 대해 앞으로 검색을 반복하는 명령

- ?rexp : 지정된 정규 표현식에 대해 뒤로 이동하는 명령

- ? : 이전의 패턴에 대해 뒤로 검색을 반복하는 명령

- n : : /나 ? 명령에 대해 같은 방향으로 반복하는 명령

- N : : /나 ? 명령에 대해 반대방향으로 반복하는 명령


[16] 줄의 길이조정

- r :Return : 문자를 새로운 라인으로 변경하는 명령

- J :줄을 결합하는 명령

- :set wm=n : 오른쪽으로 n문자 위치에서 자동적으로 줄을 나누는 명령


[17] 편집버퍼를 통한 이동

- ^F : 한 화면 아래로 이동

- ^B : 한화면 위로 이동

- n^F : n 화면 아래로 이동

- n^B : n화면 위로 이동

- ^D : 반화면 아래로 이동

- ^U : 반화면 위로 이동

- n^D : n 줄만큼 아래로 이동

- n^U : n 줄만큼 위로 이동


[18] 쉘 명령실행

중단하고 지정한 셸 명령을 실행

- :!! : vi를 중단하고 이전의 셸 명령을 실행

- :sh : vi를 중단하고 셸을 실행

- :!csh : vi를 중단하고 새로운 C쉘을 실행


[19] 패턴에 의한 치환

- :s/pattern/replace/ : 현재 줄을 치환한다

- :lines/pattern/replace/ : 지정한 줄을 치환한다

- :line,lines/pattern/replace/ : 지정한 범위를 모두 치환한다

- :%s/pattern/replace/ : 모든 줄을 치환한다


[20]데이터 읽기

- :liner file : 파일의 내용을 지정한 줄 다음에 삽입한다

- :r file : 파일의 내용을 현재줄 다음에 삽입한다

- :liner !command : 명령의 결과를 지정한 줄 다음에 삽입한다

- :r !command : 명령의 결과를 현재줄 다음에 삽입한다

- :r !look pattern : 지정한 패턴으로 시작되는 단어를 삽입한다


[21] 편집 중 파일 바꾸기

- :e file : 지정한 파일을 편집한다

- :e! file : 지정한 파일을 편집하며 자동점검을 생략한다


[22] 수정의 취소, 반복

- u : 수정했던 마지막 명령을 취소한다

- U : 현재 줄을 저장한다

- . : 수정했던 마지막 명령을 반복한다


[23] 문자 삭제

- xv : 커서가 있는 문자를 삭제한다

- X : 커서의 왼쪽 문자를 삭제한다


[24]여러줄의 복사및 이동

- : linecotarget : 지정한 줄을 복사하여 대상줄 밑에 삽입한다

- :line,linecotarget : 지정한 범위를 복사하여 대상줄 밑에 삽입한다

- :linemtarget : 지정한 줄로 이동하여 대상줄 밑에 삽입한다

- :line,linemtarget : 지정한 범위로 이동하여 대상줄 밑에 삽입한다


[25] 데이터 처리를 위한 셸 명령

- n!!command : n번 줄에서 명령을 실행한다

- !move command : 커서의 위치로 부터 이동한 곳까지 명령을 실행한다

- !move fmt : 커서의 위치로 부터 이동한곳까지 줄들을 형식에 맞춘다


-----------------------------------------------------------------------------------------

원문을 출처를 알수없더군요.
아니 가져온곳에도 처음부터 출처를 모른다고 되어있으니;;
리눅스 명령어가 잘 정리된듯합니다. ^^

Posted by 햇 님
OS & TIP/Linux2008. 5. 28. 10:34
2005 년 10월 5일 로 바꾸기
# date -s 10/5/2005 --> 루트 권한!!!

@ 10 시 30 분 40 초로 시간 변경하기
# date -s 10:30:40 --> 루트 권한!!!
 
@ 설정하려는 날짜 + 시간이 2004년 07월 15일 오후 4시 15분 50초 한꺼번에 마추기.
#date 071516152004.50
 
 @ 타임 서버 시간 보기
#rdate -p time.bora.net
 
@타임 시간을  로컬 시간으로
#rdate -s time.bora.net

[출처] 리눅스 시간설정(수동)|작성자 파천


http://blog.naver.com/ok_yoonbari/150030605919



추가


리눅스 사용자 권한 변경

서버시간을 변경하려면 루트권한이 있어야 가능하다. 그럴때는

#su -

라는 명령어를 사용하면 root로 접속할수 있다. 물론 비밀번호를 알아야한다.
명령어를 치고 나면

Password:_

와 같이 비밀번호 입력하게 되어있다.

사용자 삽입 이미지





비밀번호는 입력은 되지만 사용자에게 보여지진 않는다.
리눅스.. 잘해야지~ ㅎㅎ


Posted by 햇 님