영어단어 Shell (쉘)은 조개 껍데기란 뜻이 있죠? 여기서 말하는 '쉘'은 그 내용물인 OS를 둘러싸고 있는 껍질과 같습니다. 즉, OS와 사용자가 의사소통을 하기 위한 대화형 환경입니다. 
여러분이 명령어를 입력하면, 그 명령을 쉘이 해석하여 운영체제에게 전달합니다.

쉘이란

컴퓨터는 0과 1만을 이해할 수 있습니다. 하지만, 사람이 컴퓨터가 이해할 수 있는 0과 1만을 사용하여 명령을 내리기는 쉽지 않은 일입니다. 그래서 쉘이라는 것이 명령어를 입력받아 이것을 컴퓨터가 이해할 수 있는 0과 1로 된 명령으로 바꾸어, 이 명령을 처리하는 커널에 전달하는 것입니다.

사용자가 로그인 할 때 자동적으로 쉘이라는 프로그램이 실행됩니다.

쉘에는 여러 종류가 있으나, 큰 갈래로는 Bourne Shell 과 C shell이 있습니다. 나머지들은 이들로부터 파생된 것들입니다.

이중 리눅스에서 기본적으로 사용하고 있는 쉘은 bash 쉘로 Bourne Again Shell이란 뜻입이죠. 이것 역시 Bourne Shell로부터 파생된 것입니다. 사용자가 원한다면, 사용하고자 하는 쉘을 변경할 수도 있습니다.

쉘이 프롬프트에 사용하는 기호는 쉘마다 다른데, 기본적으로 본 쉘과 콘쉘은 "$"을, C쉘은 "%"을 사용합니다.

/etc/shells 파일을 열어 보면 사용할 수 있는 쉘들의 경로가 설정되어 있습니다.

/etc/passwd 파일을 살펴보면, 다음과 같이 사용자가 등록되어 있습니다.

    test1:x:502:502:Test User:/home/test1:/bin/bash

마지막 항목(/bin/bash)이 사용자가 사용하는 쉘입니다. 
이 사용자가 로그인 할 수 없도록 하려면, 이 부분을 /bin/false 로 변경합니다. 그러면, 명령어을 처리하는 쉘을 얻지 못하므로 어떤 명령도 수행할 수가 없습니다.

사용자 쉘 바꾸기

먼저, 현재 사용하고 있는 쉘을 확인해 봅시다.

잠시 바꾸고 싶을 때는 사용하려는 쉘을 프롬프트에서 실행 시킵니다. 
그 쉘을 빠져나겨려면, 'exit' 명령을 사용합니다. 
기본 쉘을 변경하고 싶을 때는 chsh 명령을 사용하거나, /etc/passwd 파일의 쉘 부분을 변경 합니다.

 

쉘 환경 설정

설정 파일

리눅스에서는 여러 가지 환경 설정 파일을 제공합니다. 이것은 리눅스의 사용자를 더욱 자유롭고 융통성 있게 만들어 줍니다. 이런 파일들은 보통 홈디렉토리 안에 위치하고 있으며,  '.'으로 시작 하는 파일들입니다. 'ls -a' 명령으로 파일의 존재를 확인할 수 있습니다. 파일의 이름은 "Resource Configuration"이라는 의미의 "rc"라는 스펠링으로 끝나는 경우가 많습니다.

이런 파일들은 새로운 사용자를 등록하면, "/etc/skel " 디렉토리에 기본 값으로 저장되어 있는 파일들을 홈디렉토리에 복사하여 생겨나는 것입니다.

물론, 그 중에는 쉘 구동 환경을 설정하는 파일들도 있습니다. 
 

[환경 설정 파일 설명 표]  

파 일

설  명

.bashrc

쉘을 위한 쉘 스크립트로 서브 쉘, 즉 비로그인 쉘이 실행될 때 명령과 프로그램 구조로 구성할 수 있다. 
새로운 쉘이 실행될 때마다 실행.
 

.bash_profile

로그인 할 때 읽어 들이는 설정 파일.
주요 설정 내용은 일반적으로, 
검색 경로, 터미널 종류, 환경변수등을 설정하고, 그 외 로그인 시점에 실행 시키고 싶은 명령, 시스템에 대한 정보를 보여주는 명령등을 수행한다.

.bash_logout

로그인 쉘이 종료 되면서 읽어 들인다.

 

환경 변수

환경 변수는 쉘 환경을 입맛에 맞게, 혹은 필요에 맞게 설정하는데 사용되는 값들을 가지고 있습니다. 물론, 이 변수값을 수정함으로써 사용자마다 원하는 환경을 설정할 수 있습니다.

[주요 환경 변수들]

변수

설 명

DISPLAY

현재 X 윈도우 Display 위치

HOME

사용자 홈 디렉토리

HOSTNAME

호스트 명

PATH

명령어 검색 경로

PS1

프롬프트 설정값

PWD

현재 작업 디렉토리

SHELL

사용하는 쉘

TERM

터미널 종류

MANPATH

man 페이지 경로

LS_COLORS

ls 명령에서 파일 종류별 색상 지정값

 

환경 변수값 확인

    - 하나씩 확인

        # echo  $변수명   혹은    #printenv  변수명

    - 현재 설정된 변수값 모두 확인

        # printenv

 

환경 변수값 설정/변경

    export  [환경 변수 명]=[변수 값]

    혹은

    ~/.bash_profile 내의 변수값 설정/변경 
    --> 이 파일을 수정하면 쉘 실행시마다 변경할 필요가 없다.
        변수명=변수값  

쉘  잘 사용하기

쉘 프롬프트 상에서 명령을 수행하는데 알고 있으면 매우 편리한 몇가지 기능들이 있습니다.

- 명령 완성 기능

        명령어가 길거나, 이름의 일부만 생각날 경우, 명령어의 일부만 입력하고 'Tab' 키를 입력하면, 가능한 명령어를 완성시켜 줍니다. 만일, 해당하는 명령어가 둘 이상인 경우, 해당하는 명령어의 리스트를 보여줍니다.

- 화살표 키로 사용했던 명령어 찾아내기

        전에 사용했던 명령을 다시 사용하고 싶은 경우, 아래, 위 화살표를 사용하여, 사용했던 명령어를 아래,위로 검색해 낼 수 있고, 원하는 명령을 실행할 수 있습니다. 여기 나타나는 명령어들은 '~/.bash_history' 파일에 저장되어 있습니다. 저장되는 명령어의 갯수는 HISTSIZE 변수로 결정됩니다.

- 마우스로 텍스트 복사하기

     X window를  사용하는 경우, 여러개의 터미널을 띄우고, 여러개의 작업을 동시에 수행할 수 있습니다. 
     이 경우, 이쪽 터미널에서 저쪽 터미널로 어떤 텍스트를 복사하고자 한다면, 마우스로 원하는 부분을 드래그 하고, 복사되기 원하는 위치로 가서, 가운데 버튼, 2번튼인 경우 두 개 버튼을 동시에 누르면 복사 됩니다. 물론, 에디터에서 에디터로의 복사도 가능합니다.

- 여러개의 콘솔화면 사용하기

    Remote로 떨어져 있는 터미널에서 telnet으로 접속한 경우가 아니고, 서버에 연결되어 있는 콘솔에서 여러개의 콘솔을 이동하며 사용할 수 있습니다. Alt+F1 ~ F6를 눌러 이동하면서 사용할 수 있습니다.
    X 서버도 여러개 띄우기

- 명령에 메타문자 사용하기

        명령어에 파일을 인수로 사용할 경우, 하나가 아닌 여러개를 동시에 지정할 필요가 있을 때, 파일을 하나씩 처리한다면, 매우 불편할 것입니다. 이런 작업을 쉽게 하기 위해 와일들카드를 사용합니다.

        ? : 어떤 문자이던지 한문자

        * : 어떤 문자도 없거나, 그 이상인 경우

    지우고자 하는 파일 이름이  'test'로 시작하고 다섯글자인 파일이면,

        # rm test?

    지우고자 하는 파일 이름이 'test'로 시작하는 모든 파일이면,

        # rm test*

    와 같이 사용합니다.  

    그 외에 사용되는 특수 문자들은 다음과 같습니다. 이러한 문자를 메타문자라고 합니다.
    이 문자들을 명령어 사용시 함께 사용하면, 그 문자 나름대로의 기능을 수행하게 됩니다.

문자

의  미

>

표준출력을 파일에 기록하는 출력 리다이렉션

>>

표준 출력을 파일 끝에 덧붙이는 출력 리다이렉션

<

파일로부터 표준 입력을 읽는 입력 리다이렉션

*

0개의 이상의 문자와 일치하는 파일 치환 대표 문자

?

단일 문자와 일치하는 파일 치환 대표 문자

[...]

대괄호 사이의 어떤 문자와도 일치하는 파일 치환 대표문자

|

어떤 프로세스의 출력을 다른 프로세스의 입력으로 보내는 파이프 기호

;

명령 순서에 사용

||

이전의 명령이 실패하면 실행하는 조건부 실행

&&

이전의 명령이 성공하면 실행하는 조건부 실행

&

명령어를 백그라운드로 실행

#

# 문자에 뒤따르는 모든 문자들을 주석 처리

$

변수 접근

 

입출력을 다른쪽으로!

리눅스에서 명령을 수행할 때, 표준 입력/출력 장치가 있습니다. 
보통 표준 입력은 키보드, 표준 출력은 모니터가 될 것입니다. 
필요에 따라서 이 입출력 대상을 변경할 수 있습니다.

예를들어, 명령의 실행 결과를 화면에 뿌리지 않고, 파일로 저장하고 싶은 경우에 출력을 모니터가 아닌, 결과를 지정 할 파일을 지정하거나, 반복되는 입력이 필요한 경우, 입력해야할 데이터를 파일에 저장하여, 표준 입력을 키보드가 아닌, 이 파일로 저장하려는 경우 등에 사용됩니다.

명령

설 명

명령 > 파일명

명령 실행 결과를 파일로 출력

명령 >> 파일명

명령 실행 결과를 이 파일에 덧붙여 출력

명령 >& 파일명

명령 실행 결과와 에러를 파일로 출력

명령 >>& 파일명

명령 실행 결과와 에러를 이 파일에 덧붙여 출력

명령 >! 파일명

명령 실행 결과를 이 파일이 이미 존재하더라도 무시하고 출력

명령 >&! 파일명

명령 실행 결과와 에러를 이 파일이 이미 존재하더라도 무시하고 출력

명령1 | 명령2

명령1의 Output을 명령2의 Input으로 사용하여 실행

[사용예]

# find  /home  -name  *.conf  >  ../find_results.txt  

찾은 결과를  부모 디렉토리에 find_results.txt 라는 이름의 파일로 저장한다.

# ls -al  | grep  conf

'ls -al' 명령의 Output을  'grep  conf' 명령의 Input으로 사용하는 명령입니다.

Background 와  Foregound 작업

리눅스에서는 명령을 '백그라운드'로 수행하는 것이 가능합니다. 터미널 상의 명령 프롬프트 상에서 명령어를 수행할 때, 이것을 '백그라운드'로  처리하려면, 수행하려는 명령 뒤에 ' &'를 붙여 수행합니다. 이것은 명령 수행으로부터 발생하는 Output 조차도 보이지 않는 것을 의미하는 것은 아닙니다. 다만, 백그라운드로 실행되고 있는 명령과 상관없이 명령 프롬프트 상에서 다른 작업을 수행할 수 있는 것입니다. 그러므로, 화면으로 Output을 나타내고 싶지 않다면, 출력을 재지정하여, 명령을 수행하는 것이 유용합니다.

[백그라운드 작업을 위한 명령어]

명령

설 명

jobs

현재 백그라운드로 수행되고 있는 작업이 어떤 것이 있는지 list를 보여 줍니다.

# find / -name  *.conf  &
# jobs
[1]+  Running        find / -name  *.conf  &

작업번호  상태       수행 명령
의 순으로 보여줍니다.

fg

백그라운드로 수행되고 있는 작업을 Foreground로 실행 시키려 할 때 사용하며, 백그라운드로 수행중인 작업이 여러개인 경우, 작업의 번호, 혹은 같은 명령이 수행되고 있는 경우가 아니라면, 그 명령어를 적어줍니다. 

# fg

혹은 수행해야할 작업이 여러개라면 작업 번호를 인수로 준다.

# fg 1
find / -name  *.conf 
 

Ctrl+Z

전면에 수행되고 있는 명령을 잠시 멈추는 명령으로, 끝내는 것이 아니고, 잠시 멈추는 것입니다.

# Ctrl+Z
[1]+  Stopped        find / -name  *.conf   
 

bg

현재 멈춰진 명령을 다시 수행 시키되 백그라운드로 수행시키려 할 때 사용합니다. 

# bg  

혹은 수행해야할 작업이 여러개라면 작업 번호를 인수로 준다. 

# bg 1
[1]+  find / -name  *.conf  &
 

Ctrl+C

Foreground로 수행중인 명령을 중지, 끝내고 싶은 경우 사용합니다. 작업이 바로 종료됩니다.

 

쉘 스크립트

쉘에서는 명령이 입력되자마자 실행되는 인터프리터 환경을 제공합니다. 즉, 컴파일 같은 작업이 필요 없이 텍스트 파일 안에 명령 프롬프트에서 실행이 가능한 명령들을 적고, 이 파일에 실행권한을 주고, 명령어 라인에서 명령어 처럼 실행 시키면, 마치 프로그램 처럼 실행이 됩니다. 이런 것을 '쉘 스크립트'라고 합니다. 이 쉘 스크립트에서는 여러개 명령어들을 연속적으로 실행시킬 수 있으며, 제어문과 변수 선언 등이 가능한 프로그래밍 언어와 유사합니다.

쉘 스크립트를 사용하는 이유는, 
    - 어떤 작업을 자동으로 수행하도록 하여 시스템 관리를 쉽고 효율적으로 만들기 위해서

라는 것이 가장 큰 이유일 것입니다. 
실제로 처음 리눅스를 설치했을 때도, 이미 시스템 관리를 쉽도록 하기 위한 많은 쉘 스크립드들이 존재 합니다.

사실 명령을 실행시키는데 있어서는 쉘 종류에 따른 차이점을 크게 느낄 수 없지만, 쉘 프로그래밍을 하게 되면 그 차이점을 더 많이 느낄 수 있습니다. 사용하는 함수나, 문법등에 차이가 있습니다. 여기서는 리눅스의 기본 쉘인 bash를 기준으로 설명하며, 자세한 프로그래밍 방법을 설명하려는 것이 아니라, 쉘 프로그래밍의 능력과 필요성을 아는 것이 목적입니다.

[bash 쉘 스크립트 예제]

#!/bin/bash
# 기능 : 검색대상파일에서 검색할 단어가 들어 있는 라인만 따로 파일에 저장하기.

if [ $# -lt 2 ]   # 넘겨 받은 인수가 2개 미만이면 조건이 참
then
    echo Usage: $0 검색대상파일 검색할단어 
   exit
fi

if [ ! -f $1 ]    
# 첫 번째 인수가 파일이 아니면 조건이 참
then
   echo "$1 : 그런 파일은 존재하지 않습니다!"
else
    grep $2 $1 > $1_$2     
# 두 번째 인수를 첫 번째 인수 이름의 파일에서 찾아서 
                                        '첫 번째 인수_두 번째 인수'라는 이름의 파일에 저장.
fi

이 스크립트는 두 개의 파라미터를 넘겨 받아, 
첫 번째 인수와 일치하는 이름의 파일에서 
두 번째 인수와 일치하는 라인을 찾아 
'파일 이름_찾은단어'라는 이름의 파일에 저장하는 스크립트입니다.

스크립트 실행 이후에 'custom_test'라는 파일이 생성된 것을 볼 수 있습니다.

원하는 내용만 들어있습니다.

 

위의 예와 같이 bash 쉘 스크립트는  

    #!/bin/bash

와 같이 시작합니다.(실제, bash 의 디렉토리를 적어 줍니다. )

    $# : 스크립트에 넘겨진 인수의 개수
    $0 : 실행된 쉘 스크립트 이름 
    $1~$nnn : 넘겨진 인수들을 순서대로 나타냄

이 외에도 변수를 지정하고, 조건문, 반복문, case문등의 문법을 이용하여, 원하는 작업을 수행하는 쉘을 만들 수 있습니다.

 

쉘정리 문서

쉘 프로그래밍 강좌.docx

'프로그래밍언어 > Linux' 카테고리의 다른 글

nfs 설정  (0) 2013.03.19
PATH  (0) 2013.03.18
하드링크, 심볼릭 링크 명령어 ln  (0) 2013.03.18
vi 편집기 사용법  (0) 2013.03.18
커널 관리 파일  (0) 2013.03.15
Posted by w우주z
,


1. vi 실행 방법

 

커맨드 라인에서 다음과 같이 입력하면, 인자로 입력한 이름의 파일을 편집할 수 있습니다.

 

$ vi 파일_이름...

 

파일의 이름에는 다수의 파일 이름을 넣을 수 있으며, vi 내에서 :n 명령으로 다음 파일로 넘어 갈 수 있습니다.

 

 

2. vi 실행 모드


vi 에디터는 크게 명령 모드와 입력 모드로 나눌 수 있고, 명령 모드에는 vi 명령 모드와 ex 명령 모드가 있습니다. vi 시작시, vi 명령 모드로 시작하며, 특정 키를 눌러, 입력 모드 및 ex 명령 모드로 전환할 수 있습니다. vi 명령 모드로 돌아오기 위해서는, Esc(Escape)키를 누르면 됩니다.

 

아래에, 입력 모드 및 명령 모드에서, 자주 사용되는 명령어를 적어 보았습니다(이것은 제가 선호하는 명령들로, 실제로는 훨씬 다양한 명령들이 있습니다).

 

실질적으로 vi 에디터를 이용하여 편집 작업을 하기 전에, 아래의 명령들을 전부 다 사용해 보시기 바랍니다. 어떤 명령들은 너무 강력해서 수습하기 어려운 경우도 있으니, 각각의 명령들의 특성을 미리 알아 두는 것이 필요합니다.

 

 

1) 입력 모드 전환 키 : 실질적으로 문서에 글자를 입력하기 위해서는 명령 모드에서 입력 모드로 모드 전환이 이루어져야 합니다. 이 때 사용할 수 있는 키가 여러 가지가 있는데, 여기서는 그것들에 대해 설명하겠습니다. 단순 입력 작업이 끝나고, 커서 이동이나 편집 작업 등을 하려고 할 때는 Esc키를 눌러서 입력 모드에서 빠져 나와야 합니다.

 

i : 현재 커서 위치에 글자 삽입이 가능해 짐, i 키를 누르고 난 이후에 쓰는 글은 커서 위치에 쓰여지게 됨
I : 현재 줄 처음에 삽입
a : 현재 커서 다음 위치에 추가
A : 현재 줄 마지막에 추가
o : 아랫 줄에 추가
O : 윗 줄에 추가
s : 현재 커서 글자 지우고 입력 모드로 전환
r : 현재 커서 글자 지우고 한 글자 입력 받아 명령 모드로 돌아감
Esc : 입력 모드 또는 ex 명령 모드에서 vi 명령 모드로 전환, vi 명령 모드에서 Esc키를 누르면 삑 소리가 남

 

 

2) vi 명령 모드 키: Esc키를 눌러서 들어 올 수 있는 모드입니다. vi 에디터 시작할 때의 초기 모드이기도 합니다. 키 앞에 숫자를 입력하면 그 명령이 숫자 만큼 반복됩니다. 입력 모드에서 입력 작업 완료 후, 커서 이동이나 삭제, 복사, 붙여 넣기 등의 편집 작업 등을 할 때는 Esc키를 눌러 vi 명령 모드로 전환시킨 후에 해야 합니다.

 

[ 커서 이동 ]

h : 한 문자 왼쪽으로 커서 이동(도스용이나 윈도우즈용 vi 에디터의 경우는 대부분, 커서 이동에 방향키를 사용할 수 있으나, 방향키가 없는 터미널 키보드에서 vi 에디터를 사용하기 위해서는 여기서 설명하는 키들을 알아둘 필요가 있습니다)
j : 한 줄 아래쪽으로 커서 이동
k : 한 줄 위쪽으로 커서 이동
l : 한 문자 오른쪽으로 커서 이동
w : 다음 단어 첫 문자로 커서 이동
b : 이전 단어 첫 문자로 커서 이동
Ctrl+f : 한 페이지 아래로 커서 이동
Ctrl+b : 한 페이지 위로 커서 이동
G : 마지막 줄로 커서 이동, 숫자G로 눌렀을 때, 숫자에 해당되는 줄로 커서 이동
^ : 공백 문자가 아닌, 현재 줄의 첫 문자로 커서 이동
0 : 공백 문자를 포함한, 현재 줄 첫 문자로 커서 이동
$ : 현재 줄 마지막 문자로 커서 이동

 

[ 삭제 ] : 삭제된 것은 버퍼에 저장되므로 p나 P 명령으로 붙여 넣기가 가능함

x : 현재 커서 위치 문자 삭제
X : 현재 커서 위치 이전 문자 삭제
dw : 현재 커서 위치 단어 삭제, 숫자dw로 쓰면 숫자만큼의 단어가 삭제됨, 다른 삭제 명령도 마찬가지로 숫자 입력 방식이 적용됨
db : 현재 커서 위치 이전 단어 삭제
dd : 현재 커서 위치 줄 삭제, 숫자dd로 쓰면 숫자만큼의 줄이 삭제됨
d^ : 현재 줄에서 현재 커서 위치 이전 문자열 삭제
d$ : 현재 줄에서 현재 커서 위치 이후 문자열 삭제
D : d$와 같음

 

[ 복사, 붙여 넣기 ] : 여기서의 복사란, 버퍼로의 복사를 말함, 실제로 붙여 넣기를 하려면 p나 P키를 눌러야 함

yw : 현재 커서 이후 단어 복사, 숫자yw로 쓰면 숫자만큼의 단어가 복사됨, 다른 복사 명령에도 이와 같은 숫자 입력 방식이 적용됨
yb : 현재 커서 이전 단어 복사
yy : 현재 줄 복사, 숫자yy로 쓰면 숫자만큼의 줄이 복사됨
p : 복사된 항목을 현재 커서 위치 이후에 붙여 넣기, 삭제된 항목도 붙여 넣기 가능
P : 복사된 항목을 현재 커서 위치 이전에 붙여 넣기, 삭제된 항목도 붙여 넣기 가능

 

[ 검색 ]

/검색어 : 전진 검색
?검색어 : 후진 검색
n : 검색 반복

N : 반대 방향 검색 반복

 

[ 되돌리기(undo) ]

u : 되돌리기(undo). u키를 계속 치게되면, undo 버퍼가 빌 때까지 계속 되돌리기할 수 있음. 유용함
U : 라인 되돌리기. 한 줄에 대해서 모든 편집을 없던 것으로 하고 원상태로 되돌림

Ctrl+r : Redo(undo undo)

 

[ 기타 ]

J : 커서 위치 아랫줄을 현재 줄에 붙임. 커서 이동의 j와 혼동될 수가 있으므로, 대소문자 구별에 유의해야 함

. : 이전 실행 명령 반복. 같은 명령을 빠르게 반복하고자 할 때 유용함. 참고로, 문자열 입력 후, 명령 모드로 돌아와서 .을 입력하면 입력된 문자열이 커서 위치에 삽입됨

ZZ : 현재 문서 저장하고, 종료하기

 


3) ex 명령 모드 : ex 라인 에디터의 명령어를 사용할 수 있습니다. vi 명령 모드 상태에서, : 키를 눌러서 들어가고, Esc키를 눌러서 다시 vi 명령 모드로 나옵니다. 아래에 제가 자주 사용하는 명령들을 적어 봅니다. 각각의 명령을 입력한 후, 실행을 하기 위해서는 엔터키를 누르면 됩니다.

 

시작줄번호,끝줄번호d : 시작줄번호에서 끝줄번호까지의 줄을 지움, 붙여 넣기 가능, 문서의 처음 줄은 1, 현재 줄은 . , 마지막 줄은 $로 지정 가능, 줄번호 입력없이 d만 입력했을 경우에는, 현재 줄을 지움

 

시작줄번호,끝줄번호y : 시작줄번호에서 끝줄번호까지의 줄을 복사

 

시작줄번호,끝줄번호s/찾을문자열/바꿀문자열/g : 시작줄번호에서 끝줄번호까지 '찾을문자열'을 찾아 '바꿀문자열'로 바꿈, g를 사용하지 않으면, 한 줄에 '찾을문자열'이 여러 개 있더라도, 그 줄에 대해서는 한 번만 바꿔짐. 유닉스 정규 표현식을 써서 강력한 검색 및 치환이 가능함

 

se nu : 줄 번호 표시

 

n : 다음 파일 편집, vi 실행시 인자로 입력한 파일이 여러 개일 경우에 해당

 

r 파일이름 : '파일이름'의 파일을 읽어 와서 현재 커서 아랫줄에 삽입

 

sh : 쉘로 잠깐 빠져 나가기, 쉘에서 exit 치면, 다시 vi로 돌아옴. vi를 백그라운드로 돌려서(Ctrl+z), 쉘로 나가 다른 작업을 한 후, fg로 돌아오는 방법도 있음

! 명령 : 밖으로 빠져 나가지 않고 바로 '명령'을 실행시킴

 

w : 저장하기, w!로 쓰면, 강제로 저장하기
w 파일이름 : '파일이름'으로 저장하기
q : vi 종료하기, q!로 쓰면 강제로 종료하기
wq : 저장하고, 종료하기. wq!로 쓰면 강제로 저장하고 종료하기


 

 

이상이 vi 에디터에서 제가 자주 사용하는 명령들입니다. 이 정도만 익숙하게 쓰실 수 있으면, 웬만한 편집 작업은 문제없이 할 수 있습니다. 이 외에도, 아주 많은 명령들이 있습니다. 그런 명령들을 잘 사용하시면 vi 에디터를 아주 편리하게 사용하실 수 있을 것 같습니다. 특히, 최근의 vi 에디터들은 기능이 다양해져서 Syntax highlighting 기능 등을 비롯하여 여러 가지 기능들을 지원하는 것 같습니다. 그 설정 방법을 찾아서 공부하시면 매우 유용하게 사용할 수 있을 것 같습니다.

 

이 문서를 읽고, 연습도 했는데, 잘 모르겠다 싶은 분은, Cygwin에서 vimtutor라는 명령을 내리세요. 하나 하나 따라 하면서 연습할 수 있습니다.

 

 

 

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


 

VI 사용하기

 

Vi 시작하기

  • $ vi : vi 시작하기
  • $ vi aaa.txt : aaa.txt 파일을 편집하면서 vi 시작
  • $ vi -R aaa.txt : 읽기 전용으로 열기

  Esc   : 또는 /  
편집상태  
명령대기상태
(Esc모드)
 
명령줄상태
  삽입명령어
i,a,A,I,o,O
  Esc 또는 Enter  

  • 명령대기상태 → 편집상태 : 삽입명령어 (아래참조.)
  • 편집상태 → 명령대기상태 : Esc글쇠.
  • 명령대기상태 → 명령줄纘?: : 또는 / (아래참조)
  • 명령줄상태 → 명령대기상태 : Esc 또는 Enter (아래참조)

  

커서의 이동

  • h, l, j, k : 왼쪽(←, Back space), 오른쪽(→, space), 위(↑), 아래(↓)
  • b, w : 이전 단어의 첫 글자로 / 다음 단어의 첫 글자로 이동.
  • B, W : 이전 단어의 첫 글자로 / 다음 단어의 첫 글자로 이동. (문장부호 무시)
  • e : 다음 단어의 끝 글자로 이동.
  • E : 다음 단어의 끝 글자로 이동. (문장부호 무시)
  • H, M, L : 화면의 맨 위/ 중간 / 맨 아래로
  • 0 : 그 줄의 맨 처음으로 (숫자 0이다.)
  • $ : 그 줄의 맨 끝으로
  • + : 다음 줄의 처음으로
  • - : 윗 줄의 처음으로
  • 3| : 현재 줄의 3번째 열로
  • 4H : 화면 상의 처음 줄부터 4줄 밑으로
  • 4L : 화면 상의 마지막 줄부터 4줄 위로
  • (, ) : 이전 문장의 시작으로 / 다음 문장의 시작으로
  • {, } : 이전 문단의 시작으로 / 다음 문단의 시작으로
  • [[, ]] : 이전 섹션의 시작으로 / 다음 섹션의 시작으로

편집 버퍼를 통한 이동

  • ^F, ^B : 한 화면 앞으로 / 뒤로 (^는 Ctrl글쇠를 의미.)
  • ^D, ^U : 반 화면 앞으로 / 뒤로
  • 4^B : 4화면 위로 이동
  • 4^F : 4화면 아래로 이동
  • 7^U : 7줄 위로 이동
  • 7^D : 7줄 아래로 이동
  • ^Y : 커서는 현재 위치 그대로 화면만 한 줄씩 아래로 이동
  • ^E : 커서는 현재 위치 그대로 화면만 한 줄씩 위로 이동

행 단위 이동

  • :0 : 파일의 첫 번째 행으로 가기 (숫자 0)
  • :10 : 10번째 행으로 가기
  • :$ : 파일의 마지막 행으로 가기
  • G : 파일의 마지막 행으로 가기
  • 10G : 10번째 행으로 가기

삽입명령어

  • i : 커서 위치부터 삽입 시작
  • a : 커서 위치 오른쪽부터 삽입 시작
  • A : 현재 줄의 맨 끝 부터 삽입 시작
  • I : 현재 줄의 맨 처음 부터 삽입 시작
  • o : 커서 아래에 행 삽입
  • O : 커서 위에 행 삽입

삭제명령

  • x : 현재 커서위치의 한 문자 삭제
  • X : 현재 커서 왼쪽의 한 문자 삭제
  • dd : 한 줄 지우기
  • 4dd : 4 줄 지우기
  • dw : 한 단어 지우기
  • d2w : 2 단어 지우기
  • D : 커서 오른쪽 행 삭제
  • :5 d : 5 째 행 삭제
  • :5,10 d : 5-10 째 행 삭제

파일의 저장 및 종료

  • :wq : 저장 후 vi 종료
  • :w : 저장 (종료는 하지 않고 계속 편집)
  • :q! : 저장하지 않고 vi 빠져나가기
  • :w filename : filename으로 저장 후 계속 편집
  • ZZ : 변경사항 저장 후 vi 종료

내용의 복사 및 이동

  • yy : 현재의 행 복사
  • 5yy : 현재의 행 위치부터 5행 복사
  • p : 아래(오른쪽)에 붙여넣기
  • P : 위(왼쪽)에 붙여넣기
  • f4yy : 현재의 행 위치부터 4행을 'f'라는 이름의 버퍼에 복사
  • fp : 'f'라는 이름의 버퍼에 복사된 내 용을 현재 행 위치에 붙여넣기
  • :3 co 7 : 3 행을 7행 다음으로 복사
  • :1,3 co 7 : 1-3 행을 7행 다음으로 복사
  • :3 m 7 : 3 행을 7행 다음으로 이동
  • :1,3 m 7 : 1-3 행을 7행 다음으로 이동

내용 고치기

  • J : 현재 행과 아래 행 결합
  • 3J : 3줄 합치기
  • u : 이전 명령 취소
  • cw : 단어 변경
  • cc : 행 변경
  • C : 커서 오른쪽의 행 변경
  • s : 커서가 위치한 문자열 대체
  • r : 한 글자만 변경 (입력 모드로 바뀌지 않음)
  • R : 입력하는 대로 겹쳐써서 변경
  • xp : 커서 위치 문자와 오른쪽 문자 교환
  • - : 문자형(대,소문자) 변경
  • U : 행 변경사항 취소
  • :u : 이전의 최종행 취소

명령 취소 및 반복

  • . : 마지막 명령 반복
  • 2. : 마지막 명령 2회 반복
  • u : 마지막 명령 취소
  • U : 현재 줄을 저장

행 번호 설정 및 화면표시

  • :set nu : 행 번호 표시
  • :set nonu : 행 번호 숨기기
  • := : 현재 줄번호 보여주기
  • :/pattern/ = : pattern이 위치한 줄번호 보여주기

시스템이 다운된 후에 파일 되살리기

  • vi -r : 되살릴 수 있는 모든 파일 이름 보여주기
  • vi -r file.txt : vi를 시작하여 지정한 파일 되살리기

다른 파일을 파일 내로 삽입

  • :r filename : 커서 다음에 파일 삽입
  • :20 r filename : 파일을 20번째 행 다음에 삽입

새로운 파일 편집하기

  • :e fine.txt : file.txt 편집하기
  • :e! : 현재의 편집중인 내용 무시하고 가장 최근에 편집한 내용 다시 편집하기

다중 편집하기

    % vi file1 file2 file3
    혹은
    :e file1 file2 file3
    했을 때,
  • :args : 편집 중인 파일목록 보여주기
  • :n[ext] : 다음 파일로 넘어가기
  • :prev[ious] : 이전 파일로 넘어가기 (단 편집 중인 파일이 저장되지 않으면 다음 파일로 넘어갈 수 없다.)

문자열 탐색

  • /aaa : 'aaa' 찾기 (현재 위치부터 뒤로)
  • ?aaa : 'aaa' 역방향 찾기 (현재 위치부터 앞으로)
  • / : 가장 최근에 검색한 문자열 다시 검색
  • ? : 가장 최근에 검색한 문자열 다시 역방향 검색
  • :set noh : 문자열 검색 후 문자열 강조 끄기

치환

vi에서 치환은 정규표현식이 이용된다. (실제로 이 상태에서 실행하는 명령어는 ed나 ex라는 프로그램이 처리하게 된다. 그래서 보통 이 상태를 "ed-모드"라고 한다.) 문서에서 원하는 패턴을 찾으려면 바로 위에 '문자열 탐색'에서 설명된 바와 같이 /문자열 이나 ?문자열 을 사용한다. 문자치환 명령은 다음과 같다.

[형식] :범위s/변경전/변경후/수정자  

'범위'는 명령이 실행될 범위(예: 10,20 이면 10행 부터 20행 까지)를 나타낸다. 's'는 치환(substitute)의 약자이며 '수정자'는 치환 명령의 세부사항을 결정한다. 필요한 것만 뒤에 적어주면 된다. (중복 가능)

  • g (global) - 한 줄에서 일치하는 부분을 여러개 찾았을 때 전부 치환한다. 이것을 사용하지 않으면 처음 것만 치환.
  • c (confirm) - 만족하는 정규표현식을 찾았을 때 치환하기 전에 확인한다.
  • i (ignore-case) - 대소문자를 구별하지 않는다.

"변경전"과 "변경후"에 치환할 내용을 입력한다. "변경전"에 정규표현식을 적는다. 정규표현식으로 ., *, ^, $, [], \(...\), \<...\>, POSIX.2 단축 표현을 사용할 수 있다. 여기서 여러 문자를 묶여서 단위를 만들고 찾은 내용을 기억하는 특수문자가 \(, \)임을 주의해야 한다. 반대로 (, )가 일반문자이다. vim(VI iMproved)에서는 vi에 추가로 |, +, (?와 같은) =, {n,m}을 사용할 수 있지만, 앞에 \ 를 붙여야 한다. 또, vim에는 \i, \k, \p, \s 등의 단축 표현들이 있다.

"변경후"에 \n  & 를 사용할 수 있다. \n 는 "변경전"에서 n번째 \(...\) 에 대응하는 부분이고, & 는 "변경전"에 만족한 전체를 나타낸다. 예를 들어, 
:%s/\([0-9][0-9]*\) \([Cc]hapter\)/\2 \1/ 
는 문서에서 12 Chapter같은 부분을 Chapter 12와 같이 치환하고, 
:%s/F[1-9][12]*/&/g 
는 HTML 문서에서 "F1" ~ "F12"란 단어 모두를 굵은 체로 바꿉니다. (주의! &는 정규표현식의 특수문자는 아니지만 vi의 특수문자이므로, 문자그대로의 &를 사용하려면 대신 \& 를 사용해야 한다.) 이외에도 (뒤를 모두 대문자로) \u 나 (뒤를 모두 소문자로) \l 같은 기능이 있다.

    :%s/aaa/bbb/g - 파일 전체(g)에서 'aaa'을 'bbb' 로 치환 
    :%s/^M//g - 파일 전체(g)에서 ^M 을 삭제. ^M은 Ctrl+V+Enter로 입력한다. 
    :s/aaa/bbb/ - 현재 행에서 'aaa'을 'bbb' 로 치환 
    :1,10 s/aaa/bbb/ - 1행부터 10행 까지 'aaa'을 'bbb' 로 치환 
    :1,. s/str/rep/ - 1부터 현재행까지 'aaa'를 'bbb' 로 전부 바꾸기 
    :g/감자/s//바위/gc - 각 발생 확인 후 대체 

주의할 점은 치환명령어가 / 문자로 각 부분을 구분하기때문에 "변경전"이나 "변경후"에 / 문자를 사용하려면 \/ 같이 써야한다. 
필요하다면 / 대신 다른 문자를 사용해도 된다. 예를 들어, 
:%s/\/usr\/local\/bin\//\/usr\/bin\//g 
대신 
:%s#/usr/local/bin/#/usr/bin/#g 
가 알아보기 더 쉽다.

'프로그래밍언어 > Linux' 카테고리의 다른 글

nfs 설정  (0) 2013.03.19
PATH  (0) 2013.03.18
하드링크, 심볼릭 링크 명령어 ln  (0) 2013.03.18
리눅스 쉘 과 사용법  (0) 2013.03.18
커널 관리 파일  (0) 2013.03.15
Posted by w우주z
,

컴포넌트 비디오(component video)는 두 개 이상의 컴포넌트로 나뉘는 영상 신호를 말한다. 일반적으로는 세 개의 구분된 신호로 전달하거나 저장되는 아날로그 영상 정보의 일종을 가리킨다. 컴포넌트 비디오는 모든 영상 정보를 선 하나에 합치는 컴포지트 비디오(NTSC,PAL, SECAM)와 대비된다. 케이블 단자의 모양은 컴포지트와 동일하며, 컴포지트 비디오와 비슷하게 컴포넌트 비디오 케이블은 오디오를 전달하지 않는다. 480i, 480p, 576i, 576p,720p, 1080i, 1080p의 해상도를 지원한다.

여러 가지 아날로그 영상 표준 중 컴포넌트 비디오가 가장 효과적으로 컬러를 재생성할 수 있으며, 그 이유는 사진에서 볼 수 있듯이 컴포지트 비디오나 S-비디오와 다르게 세가지 신호를 각각 분리시켜 놓아서 간섭잡음의 영향을 줄일 수 있기 때문이다.[1]

 

 

 

Composite.jpg

 

컴포지트 비디오(Composite Video)는 아날로그 텔레비전 신호의 형식(음성 제외)으로, 음성 신호와 합쳐져서 RF 반송파상에 변조되기 전의 신호이다. 이것은 NTSC, PAL, SECAM 등의 방송 표준에 포함된 형식이다. 컴포지트 비디오는 Y, U, V(합쳐서 YUV라고 한다)라는 세 개의 소스 신호를 동기화를 위한 싱크 펄스(sync pulse)와 합친(composite) 것이다.

여기서 Y는 영상의 밝기 혹은 휘도(luminance) 성분을 나타내며, 싱크 펄스를 포함한다. 따라서 Y 신호만으로도 흑백 영상을 디스플레이할 수 있다. U와 V 신호는 색상 정보를 나타내며, 색상 반송파 신호의 두 개의 직교 위상과 혼합되어 색차(crominance) 신호를 형성한다. 이후에 Y 신호와 UV 신호가 합져진다. Y는 기저 대역 신호이고 UV는 반송파에 실린 신호이기 때문에 이렇게 합쳐진 컴포지트 비디오 신호는 주파수 분할 다중 방식(WDM: wavelength-division multiplexing)에 해당한다.

Posted by w우주z
,