계층 구조상의 화일 참조 방식과 화일 명명 규칙
1. 계층 구조상의 특정 화일 참조 방식
계층 구조상의 임의의 화일을 참조하기 위해서는 경로명을(Path name)
사용해야만 한다. 경로명은 화일이나 디렉토리를 유일하게 조명해 준다.
경로명은 명령어의 인자로서나 ( 예: cd /etc ), 명령어의 실행 결과로
표시되는데 ( 예: pwd 또는 tty ) 빈번히 사용된다.
경로명은 유닉스 화일 시스템내의 화일이나 디렉토리의 위치를 표시한다.
사실상 경로명은 root 디렉토리부터 현재의 디렉토리로 부터 대상 디렉토리
또는 화일로의 경로를 지시한다. 경로 지정은 시작 디렉토리로 부터
화일로의 모든 디렉토리들의 이름을 포함하게 되고, 각각의 디렉토리
이름들은 /로 구분되어 지게된다.
경로명은 다음과 같이 두가지 방식으로 지정할 수 있다.
. Absolute Path (절대 경로)
절대 경로명은 화일 계층 구조의 최상위 계층인 root 디렉토리로
부터 시작하는 화일이나 디렉토리의 위치를 참조한다.
root 디렉토리를 나타내는 표식이 / 임으로 인해 절대 경로명은
항상 / 문자로 시작되며, 연이어 원하는 화일이나 디렉토리의
위치까지 순차적으로 /로 구별되어진 디렉토리들이 나열된다.
예를 들면 다음과 같다.
/home/kdwdir/myfile
. Relative Path
상대 경로명은 현재의 디렉토리와 상대적인 위치의 화일 또는 디렉토리를
참조한다. 경로 지정은 경로의 시작점이 root가 아님으로 인해
/로 시작되지 않는다. 상대 경로명은 디렉토리명으로 시작되고, 연이어
/로 구별되어진 대상 디렉토리 또는 화일의 위치까지의 디렉토리들이
나열된다. 상대 경로의 예제는 다음과 같다.
subdir/workdir/testfile
상대 경로명은 현재 디렉토리의 상위 및 하위 디렉토리및 화일들을
손쉽게 참조할 수 있는 두가지 문자를 제공하는데, 다음과 같다.
1) .
현재의 디렉토리를 가르키는 심볼
예) ./subdir/subfile
2) ..
현재의 디렉토리의 직전 상위 디렉토리를 가르키는 심볼
이 심볼은 한번에 복수개 지정함으로써 여러개의 상위
디렉토리를 한꺼번에 참조할 수 있다.
예) ../othersubdir/subfile
../../otherdir/file
2. 화일과 디렉토리들의 명명 규칙
화일과 디렉토리에 이름을 부여하는데 있어서 사용되는 관례는
다음과 같다.
. 화일과 디렉토리들에 의미있고, 기술적인 이름들을 부여함이
바람직 하다.
. 화일명은 반드시 문자로 시작해야 한다. 첫문자로 +, -, .를
사용하는 것은 피한다.
. 특수문자( special character )들은 쉘에게 다른 의미를 갖기 때문에
사용은 피한다. 쉘에 의해 사용되는 특수 문자는 다음과 같다.
┌───────────────────┐
│? @ # $ ^ & * ( ) ` [ ] \ | ; ' " < > │
└───────────────────┘
. 화일명에는 공백문자를 사용하지 않는다. 쉘은 명령어 라인상에서
구별자로서 공백문자를 사용한다. 공백문자를 대신하여 .(period)이나
_(underscore)를 사용한다.
. 유닉스는 대문자와 소문자를 구별한다. 예를들자면 report, Report,
REPORT, rePort는 다른 화일명으로 모두 별개이다.
. 화일명은 디렉토리내에서 유일해야만 한다. 동일 화일명은
다른 디렉토리에서 사용될 수 있다.
화일명은 s5 화일시스템에서 최대 14 문자의 길이로 부여할 수 있으며,
ufs 화일에서는 최대 256 문자를 부여할 수 있다. 화일 시스템 종류에
대해서는 이후에 설명될 것이다.
화일명의 확장자는 보다 의미있는 화일명들을 제공하기위해 사용될수 있다.
확장자들은 일반적으로 .뒤에 연이어 기술된다. 유닉스는 C언어 프로그램을
표시하기위해 .c를 사용하고, 쉘 프로그램을 표현하기 위해 .sh 확장자를
사용한다.
========================================================================
유닉스 쉘 특수문자 : Special characters
1. Shell special characters ( 쉘 특수문자 )
몇몇 문자들은 쉘에게 특별한 의미를 갖는다. 이러한 글자들은
쉘이 명령어 라인 처리를 수행하는 동안에 그들을 만났을때 우선 번역된다.
( 이부분에 대한 자세한 설명은 이전의 명령어 라인의 처리과정 부분을
참고 바람 )
이번 강의에서는 Bourne Shell에서 사용되어지는 특수문자를 참고로해서
설명될 것이며, 다른 쉘 ( Korn, C, Job shell )에서 고유하게 제공되는
특수 문자에대한 설명은 유니시스 제공 메뉴얼및 온라인 참조 메뉴얼을
참조하기 바란다.
우선 기본적인 쉘 특수문자들을 나열해 본다.
┌─────┬────┬──────────────────┐
│화일명 │ * │ 0 또는 그이상의 문자를 대치 │
│ 대치문자 ├────┼──────────────────┤
│ │ ? │ 하나의 문자를 대치 │
│ ├────┼──────────────────┤
│ │ [] │ []안에 지정된 문자들중 하나와 대치 │
├─────┼────┼──────────────────┤
│ │- 또는 +│ 명령어의 옵션을 표시 │
│명령어 ├────┼──────────────────┤
│ 실행과 │ < │ 지정한 화일로 부터 입력을 받음 │
│ 관련된 ├────┼──────────────────┤
│ 특수문자 │ > │ 지정한 화일에 출력을 저장 │
│ ├────┼──────────────────┤
│ │ >> │ 지정한 화일에 출력을 추가(append) │
│ ├────┼──────────────────┤
│ │ | │ 명령어의 출력을 다른 명령어의 │
│ │ │ 입력으로 전환. │
│ ├────┼──────────────────┤
│ │ & │ 백그라운드에서 명령어를 실행 │
│ ├────┼──────────────────┤
│ │ ; │ 동일 명령어 라인에서 복수개의 │
│ │ │ 명령어를 실행 │
│ ├────┼──────────────────┤
│ │ () │ 조합된 출력을 위해 명령어를 묶는다.│
│ ├────┼──────────────────┤
│ │ `` │ 명령어 대치시에 사용 │
├─────┼────┼──────────────────┤
│특수문자를│ "" │ $,`,\를 제외한 모든 특수문자를 │
│일반문자화│ │ 일반문자로 처리 │
│하는 ├────┼──────────────────┤
│보호문자 │ '' │ 모든 특수문자를 일반문자로 처리 │
│ ├────┼──────────────────┤
│ │ \ │ 다음 한문자를 일반문자로 처리 │
└─────┴────┴──────────────────┘
이 도표에서 사용된 보호문자라는 용어는 쉘에 의해 특수하게
번역되어 처리되는 문자들을 본연의 문자로서 처리하기 위해
쉘이 번역하지 못하도록 막아주는 특수문자를 의미한다.
2. 화일명 대치문자
이 종류의 특수문자들은 단일 명령어 라인에서 여러 화일이나 디렉토리를
묶어서 참조할수 있도록 해준다. 이 문자들은 화일명내의 실제 문자들로
쉘에의해 대치되기 때문에 metacharacters 또는 wild cards라 불리운다.
이러한 대치 작업은 이전에 설명했던 명령어 라인의 처리과정중 쉘의
명령어 라인 분석과정에서 변환이 수행된다. 화일명 대치에 사용되는
특수문자는 다음과 같다.
. Asterisk ( * )
* 문자는 0 또는 그상의 문자와 대치된다. 예를 들자면 사용자가
b*라 지정했다면 첫문자가 b인 화일명들과 대치되고, *m*이라고
지정했다면 화일명 어디든지 m이라는 문자가 있는 화일명과
대치되며, b*e라 지정되었을 경우에는 화일명의 첫문자가 b이고
마지막 문자가 e인 화일명들과 대치 되어진다. 물론 *만이
지정되었을 경우에는 모든 화일명들과 대치된다.
. Question Mark ( ? )
? 문자는 한문자와 대치된다. 예를들면 p?라고 지정하면 화일명의
첫문자가 ?인, 두 문자로 구성된 화일명들과 대치된다.
???e와 같이 ?를 여러개 지정함으로써 복수 문자와 대치 시킬수도
있다.
. Brackets ( [] )
[ 와 ] 문자 사이에 일련의 문자들을 지정하는데, 이 경우 지정된
일련의 문자들중 한 글자와 일치되는 화일명과 대치된다. 예를들면
reportju[ln]이라고 지정 되었다면 reportjul 또는 reportjun과
일치되는 화일명으로 대치된다. [ 와 ] 사이에 지정된 두문자 사이에
- 문자를 사용함으로써 선택되는 문자의 범위를 지정할 수 있다.
예를들면 memo[1-4]라고 지정했을 경우 memo1, memo2, memo3, memo4
라는 이름을 갖는 화일명들과 대치된다. 또한 [ 와 ] 사이에 첫문자로
!를 지정할 경우, 연이어 지정된 문자에대한 부정의 의미를 갖는다.
예를들면 *[!o]라 지정하면, 화일명의 마지막 문자가 o가 아닌
화일명을 갖는 화일들과 대치된다.
상기의 특수문자들은 화일명 입력 시간의 단축과 긴 화일명을 적게 입력
함으로써 발생하는 에러등을 줄여준다. 중요한 것은 정확한 화일명을
모를 경우에 요긴하게 쓸수 있다는 것이다.
( 예제 )
┌────────────────────────────┐
│ $ls * │
│ File.new file1 file5 fig fin filea file.new fun │
│ $ls fi? │
│ fig fin │
│ $ls f?? │
│ fig fin fun │
│ $ls *.new │
│ File.new file.new │
│ $ls file[1a] <--- 1 또는 a와 대치 │
│ file1 filea │
│ $ls file[!1-5] <--- 1,2,3,4,5가 아닌 문자와 대치 │
│ filea │
└────────────────────────────┘
========================================================================
유닉스 쉘 특수문자의 사용제어
1. Shell special characters ( 쉘 특수문자 )
이전 강의에서 화일명 지정상의 편리를 위해 제공되는 대치문자들에
대해서 자세히 설명됐다. 이번에는특정 목적을 위해 예약된 문자들을
고유의 문자로서 사용할수 있도록 허용하는 몇가지 특수 문자들
( 이하 보호문자라고 부른다. )에 대해 설명 한다.
쉘이 특수문자들이 갖고 있는 특수한 의미를 번역하지 못하게 함으로써
특수문자를 일반문자로서 사용하기 위해서는 쌍따옴표("), 따옴표(')로서
묶어주거나, 역슬래쉬(\)를 특수문자 앞에 기술한다. 쉘은 앞과 같이
보호되어진 특수문자들은 일반문자로 간주하여 처리한다. 이와같은
보호기능들은 특수문자들의 번역을 제어하는 쉘 프로그램을 작성하는데
있어서 매우 중요하다.
. 쌍따옴표 (Double Quotes)
두개의 쌍따옴표에(") 의해 특수문자들을 둘러쌓으면
쉘은 $ (Dollar symbol), ` (Back quote), \ (Backslash)를 제외한
모든 특수문자들을 일반문자로 처리한다.
. 따옴표 (Single Quotes)
따옴표는 더욱 제한적이다. 쉘은 따옴표내에 기술되어 있는
모든 특수문자들을 일반문자로 처리하게 된다.
. 역슬래쉬 (Backslash)
대체로 역슬래쉬는 따옴표로 한문자를 둘러 쌓은것과 동일한 의미를
지닌다. 역슬래쉬는 오직 연이어 기술되어 있는 한문자에 대해서만
효력을 미치기 때문에 역슬래쉬를 사용할때는 개개의 특수문자마다
별도로 지정해 주어야 한다. 예를들면 **같은 경우는 \*\* 같은
형식으로 지정한다.
다음은 보호문자의 기능을 잘보여주는 예제들이다.
┌────────────────────────────┐
│(예제1) │
│ $echo * │
│ File1 File2 fileA fileB newfile testfile │
│ $echo file? │
│ fileA fileB │
│ $echo [Ff]ile? │
│ File1 File2 FileA FileB │
│(예제2) │
│ $echo "*" │
│ * │
│ $echo "\" │
│ > <------- 서브프롬프트가 표시된 결과이다. │
│ <^c> │
│(예제3) │
│ $echo '* \' │
│ * \ │
│(예제4) │
│ $echo \* \\ │
│ * \ │
└────────────────────────────┘
(예제 설명)
echo명령어는 표준출력상에(통상 단말의 화면이다. 출력방향의 제어는
바로 직전의 강의 내용을 참조 바란다. ) 지정한 명령어 라인상의
인자 (arguments)를 표시하도록 하는 명령이다. 이 명령은 쉘의
특수문자 제어 결과를 확인하는데 매우 유용한 명령이다.
(예제1)에서는 명령어 라인상에 *,?,[]와 같은 특수문자를 사용하고 있다.
보호문자를 사용하고 있지않아 적당한 화일들이 선택되어 출력되는
것을 볼수 있다.
(예제2)에서는 특수문자들이 쌍따옴표를 사용하여 보호되고 있는
것을 볼수 있다. 그러나 결과를 보면 *는 보호되나, \는 특수문자로서
그대로 처리되는 것을 볼수 있다. 쉘은 명령어 라인계속의 의미로
명령어 라인 끝에 지정되는 역슬래쉬를 사용한다. 이는 몇 라인에 걸친
긴 명령어 라인을 입력하기위해 사용한다.
(예제3)과 (예제4)는 *와 \, 두 특수문자의 의미를 보호하는 방식을
보여주고 있다. 따옴표에 둘러 쌓였거나, 역슬레쉬가 선행되어 있는
특수문자들은 쉘로부터 모두 보호되어진다.
========================================================================
유닉스 텍스트 편집기 : 일반적 특징
1. 유닉스 텍스트 편집기 ( UNIX Text Editors )
텍스트 편집기는 화일을 생성하고 수정하기 위해 사용하는 유닉스
프로그램이다. 다른 워드프로세서 프로그램과 같이 텍스트 편집기는
텍스트를 정형화 시키지 않는다.
유닉스는 텍스트, 테이블 또는 연산식의 정형화(formatting)를 다루기
위한 개개의 프로그램들을 갖는다. 이러한 프로그램들은 일반적으로
텍스트내에 내포된 형태의 코드들을 요구한다. 코드화된 텍스트 화일들은
내포된 코드들을 번역하는 Format processor의 입력으로 사용되고,
순차적으로 텍스트를 정형화 한다. 다양한 형식을 요구하는 화일들은
텍스트 편집 기능과 정형화 기능을 함께 지원하는 워드프로세서 프로그램을
이용하면 쉽게 다룰수 있다. 두개의 간편한 Text formatters인
pr과 fmt에 대해서는 이후에 설명될 것이다.
2. 유닉스 편집기의 종류
유닉스는 몇개의 텍스트 편집기를 제공한다. 몇개의 편집기는 선택된
라인상의 텍스트만을 처리하고(ed,ex,edit등), 그외의 편집기들은
한번에 한 화면상의 텍스트를 조작한다(vi,vedit등). 제한적인 기능들을
제공하는 편집기도 있다(red, view등). 특정 편집기를 사용하여
생성한 화일은 다른 편집기에 의해서 수정될 수 있다.
대부분의 유닉스 편집기는 명령어를 입력받아, 요구된 기능을 수행하는
형태의 대화식 처리를 수행한다. 비대화식 스트림 편집기(sed)는
명령어 라인상에 지정된 또는 각각의 프로그램 화일속에 들어있는
편집 명령에 따라서 화일을 편집한다. 이 편집기는 사용자의 간섭이
요구되지 않는 민감하지 않고, 전체적인 갱신을 수행하는데 유용하고,
쉘 프로그램에서 빈번히 사용된다.
3. 유닉스 편집기의 특성
명령어
각 유닉스 편집기들은 유닉스 쉘 명령어가 아닌 독특한 형태의
일련의 명령어들을 인식한다.
편집용 버퍼(buffer)
편집기가 기동되었을때, 편집 동안에 텍스트와 수정 사항이 저장될
버퍼라 불리우는 일시적 작업영역이 메모리내에 구축된다.
버퍼의 내용은 현재의 편집 작업 동안에만 존재한다. 편집이 종료되면,
저장되어야 할 내용이나, 텍스트, 변경분은 없어진다. 다행스럽게도
편집기는 버퍼내에 저장되지 않은 변경 사항이 있을 경우에는
이에 관한 메세지를 뿌려준다.
기존의 화일이 편집되면, 화일은 버퍼내에 복사된다. 버퍼내의
복사된 화일이 변경되면 저장할수도, 본래의 화일에 영향을 주지 않고
무시할 수 있다.
운영 모드 (Operation mode)
편집기는 명령어 모드 또는 텍스트 입력 모드중 하나로 작업이
수행된다. 명령어 모드는 복사, 이동, 삭제등의 텍스트 조작을
수행할 수 있다. 편집 작업시에 사용자는 명령어 모드와 입력 모드
중 필요로한 모드로 변경할 수 있다. 디폴트 모드( 편집기 기동후
처음 위치하게 되는 모드)는 명령어 모드이다.
이번 강의에서는 라인 에디터인 ed와 스크린 에디터인 vi에대해
설명할 것이다. 비록 스크린 에디터인 vi가 더 융통성있고, 사용자에
친숙하지만, vi가 사용불가능할 때에 에디터를 요구하는 시스템
유지보수 작업이 수행될 때를 위해, ed 에디터에 대한 설명을 선행
할 것이다. 또한 ed 에디터는 필요로하는 기본적인 편집 기능들을
제공하는 반면에 적은 크기의 프로그램이기 때문에, 운영체제의
테이프상에 계속적으로 포함될 것임으로 번거롭다 하더라도 배워두는
것이 유리할 것이다.
========================================================================
라인 에디터 : ed 편집기의 기본 사항
1. 라인 편집기 : ed
ed는 라인 단위로 화일을 편집하는 편집기이다.
ed의 편집 명령어들은 별도로 편집할 라인의 범위를 지정한 경우를
제외하고는 현재의 라인에만 영향을 미친다. ed 편집기가
실행 요구되었을때, 새로운 텍스트를 즉시 추가할수 있도록
하기위하여 기존의 화일의 마지막 라인이 current line이 된다.
( current line : 라인 편집기에서 한 싯점에서의 편집 대상이 되는 라인 )
1) 화일의 생성
ed를 사용한 화일의 생성 절차는 다음과 같다.
(1) ed file_name을 입력하여 ed를 실행한다.
만약 화일명이 지정하지 않았다면, 편집기를 종료하기 전에
화일명을 제공해야 한다는 것을 명심해야 한다. 그렇지않을 경우에는
편집한 데이타를 잃는다.
기존에 없는 화일명을 지정했을 경우에는 ed 편집기는 새로운
화일임을 나타내는 ?file_name을 표시한다. 그러나 기존에 존재하는
화일일 경우에는 화일상에 존재하는 텍스트의 byte수가 대신 표시된다.
편집기가 시작되었을때의 상태는 명령어 모드이다.
(2) a를 입력하여 텍스트를 추가한다.
텍스트 입력 명령어 a는 current line 이후에 텍스트를 추가한다.
텍스트를 입력하고, 각 라인의 끝에서 enter를 누른다. 편집기는
단일 라인으로써 <return>까지를 텍스트로 취급한다.
입력 모드에서 타이핑 오류를 빠르게 교정하기 위해서는
커서의 왼쪽에 있는 문자를 지우기 위해, stty 명령에 의해 설정되어
있는 삭제 문자를,,통상 <^h>,, 사용한다. 또한 <BS-F12> 키를
사용할 수 있다.
기타 ed 편집기에서 사용하는 명령어들에 대해서는 이후에 설명한다.
(3) 라인상에 .(period)을 입력 함으로써 입력 모드를 종료한다.
.을 입력한 라인 이전의 입력은 텍스트로 처리된다.
.은 입력 모드를 종료하고, 명령어 모드로 돌아간다.
(4) w 명령어를 사용하여 편집 버퍼상에 있는 텍스트를 저장한다.
저장된 텍스트의 byte 수가 자동적으로 표시된다.
만약 편집기를 호출했을때 화일명을 지정하지 않았다면, w 명령어
다음에 공백을 두고 화일명을 지정한다. 예를들면 w file_name과 같다.
(5) q 명령어를 입력함으로써 편집 작업을 종료한다.
명령 실행후 쉘이 다음 유닉스 명령어를 받아들임을 개시함을
나타내는 쉘 프롬프트가 표시된다.
다음은 ed 편집기를 통한 작업 예이다.
┌────────────────────────────┐
│ $ed newfile <--- (1) │
│ ?newfile │
│ a <--- (2) │
│ This sample file is created using ed line editor │
│ The . ends text input and returns to command mode. │
│ . <--- (3) │
│ w <--- (4) │
│ 256 │
│ q <--- (5) │
│ $ │
└────────────────────────────┘
2. ed의 보조 명령어
다음은 ed를 통한 편집 작업 동안에 사용할 수 있는 보조 명령어들에
대한 설명이다.
P 명령어 모드를 나타내는 * 프롬프트를 표시한다.
ed는 작업 모드가 시작되었음을 나타내는 프롬프트를 자동적으로
표시하지 않는다. 편집기가 기동될때마다 이 명령어를 실행함이
명령어 모드가 시작될때마다 * 프롬프트를 표시되도록 하는데
도움을 준다.
ed 편집기의 옵션 -p prompt는 디폴트 * 프롬프트가 아닌
다른 명령어 프롬프트를 사용자가 정의할 수 있도록 해준다.
h 또는 H
? 표시로 표현되는 가장 최근의 에러에 대한 help 메세지를
표시한다.
ed는 에러 메세지를 자동적으로 표시하지 않는다. 에러가 발생될때
ed는 ? 표시를 표시한다. h 명령어는 가장 최근의 에러에 대한 간략한
에러 메세지를 표시한다.
편집기가 요구할때마다 H 명령어를 실행하므로서 전체 편집 작업중
계속적으로 메세지를 표시하도록 하는 것이 유리하다. 계속적인
에러 메세지 설정 기능은 또한번의 H 명령어를 입력하면 해제된다.
3. ed 명령어의 형식
ed 명령어의 형식은 다음과 같다.
┌───────────────────┐
│ [ address ] command [ argument(s) ] │
└───────────────────┘
address 연이어 기술된 명령어의 영향을 받는 편집 버퍼상의
특정 라인 또는 라인들의 범위를 지정한다.
만약 address가 생략되면, 명령어는 편집 버퍼상의
current line이 대상이 된다. current line은
편집 버퍼상의 현재 선택되어 있는 라인을 말한다.
current line은 편집기에서 화일이 사용 개시될때
마지막 라인이 되거나, 명령어 모드에서 참조된
직전의 라인이다.
command 어떤 편집을 수행할 것인가를 한 문자로서 지정한다.
만약 명령어가 생략되면, 디폴트 p (print) 명령어가
실행된다.
arguments 화일명이나 다른 라인 address와 같은 특정 명령들에서
요구되어지는 부가적인 정보를 제공한다.
( 예제 )
w<return>
버퍼의 내용을 저장하기 위한 w 명령어가 단독으로 사용된 예.
w newfile<return>
버퍼의 내용을 다른 이름의 화일 또는 편집기 호출시 미지정한
화일명을 지정하기 위해 w 명령어 다음에 화일명을 arguments로서
지정한 예를 보여주고 있다.
1,8w file2<return>
버퍼내의 내용중 일부분을 다른 화일명으로 저장하기 위해
address와 arguments를 함께 지정한 예를 보여주고 있다.
4. Line address의 지정 방식
Line address는 연이어 기술되어 있는 명령어에 의해 영향을 받게될
라인 또는 라인들의 범위를 지정한다. 만약 line address가 생략되면,
명령어는 버퍼내의 current line에 영향을 준다.
Line address는 숫자, 문자 형식 또는 숫자와 문자의 조합 형식으로
지정할 수 있다. ed는 버퍼내의 상대적 위치에 (순서) 따라서 참조할
각 라인에 라인 번호를 할당한다. 이 라인 번호는 텍스트가 이동되거나,
삭제되거나, 복사되었을때도 마찬가지로 참조될 수 있다.
라인 번호 0번은 화일의 시작 위치를 참조하기 위해 line address로
사용될수 있다. 문자 형식의 line address는 정확한 라인 번호를
모를때 유용하게 사용할 수 있다.
다음은 문자 형식으로 line address를 지정하는데 사용되는 기호들이다.
. current line
$ last line
+ next line
- previous line
,(comma)는 address내에서 라인 범위를 나타낸다. 예를 들면
2,5 2라인부터 5라인까지
.,7 current line부터 7라인까지
.,$ current line부터 끝까지
1,$ 1라인부터 마지막 라인까지(화일 전체)
g는 위와 동일한 범위를 나타낸다.
========================================================================
라인 에디터 ed의 조작 명령어
1. 라인내의 텍스트 표시 명령
몇가지의 명령어를 텍스트를 표시하기 위해 사용할 수 있다.
다시 말하자면, line address가 생략되었을 경우에는 명령어는 버퍼내의
current line에 영향을 준다.
p current line 또는 지정한 라인의 텍스트를 화면상에 프린트 한다.
예를들면, 1,$p 명령은 편집 버퍼상의 모든 라인의 텍스트를 표시한다.
또한 ",p" 명령어는 모든 라인을 프린트하기 위한 단축형 명령이다.
p 명령어는 사용자가 명령어를 지정하지 않았을때 가정되는 디폴트
명령으로 이용된다.
n 상대적 라인번호와 함께 current line 또는 지정한 라인의 텍스트를
화면상에 프린트한다.
예를들면, 1,$n이라고 지정하면 라인 번호와 함께 모든 라인을
화면상에 표시한다. ",n" 명령어는 모든 라인을 라인 번호와 함께
텍스트를 화면상에 표시하기 위한 명령어이다.
l 탭문자와 제어 코드같은 것이 들어있는 current line 또는
지정한 라인들을 화면상에 표시한다. 각각의 탭문자들은 > 문자로
대치되어 프린트 된다.
예를들면, 5,9l이라고 지정하면 프린트 불가능한 문자를 특정 문자로
변환한 상태로, 5 라인부터 9 라인까지를 프린트 한다.
",l" 명령은 전체 라인을 위와 같이 출력하기 위한 단축형 명령이다.
= 화일 또는 특정 라인의 라인 번호를 표시한다.
예를들면 ".=" 지정은 현재 라인 번호를 프린트하고, "$=" 지정은
마지막 라인의 라인 번호를 프린트한다.
/pattern 또는 ?pattern
지정한 문자열이 들어있는 다음 라인을 프린트한다.
동일 pattern의 정방향 검색을 계속하기 위해서는 /를 사용한다.
화일에 있는 마지막 pattern을 찾아지고, 검색을 계속 수행하면,
ed는 화일의 첫부분에서 부터 정방향 검색을 계속하게 된다.
검색의 방향을 돌리고자 할 경우에는 ?를 사용한다.
다른 pattern의 문자열을 역방향으로 검색하고자 할 경우에는
?new_pattern이라고 지정한다. 화일내의 마지막 역방향 문자열이
검색되면 ed는 화일의 끝에서 부터, 역방향 검색을 계속한다.
2. 텍스트의 입력
텍스트를 입력하기 위해 사용하는 명령어는 다음과 같다.
┌────────────────────────┐
│ a 현재 위치 이후에 텍스트를 추가한다. │
│ i 현재 위치 이전에 텍스트를 삽입한다. │
│ c 기존의 텍스트를 변경한다. │
└────────────────────────┘
Append (a)
a 명령어는 화일에 텍스트를 추가하기 위해 사용한다. a 명령어는
현재 또는 지정된 line address 이후에 텍스트를 추가한다.
현재의 라인이 아닌 다른 라인에 추가를 하기 위해서는 line address를
지정하여 수행할 수 있다. 라인 번호는 텍스트 순서에따른 변경사항을
적용하기 위해 바꾼다.
예를들면 4a는 4 라인 이후에 텍스트를 추가한다.
Insert (i)
i 명령어는 현재 또는 지정한 line address전에 텍스트를 삽입한다.
current line이 아닌 다른 라인에 삽입하기 위해서는 line address를
삽입하면 된다.
예를들면 4i는 4 라인 이전에 텍스트를 삽입한다.
Change (c)
c 명령어는 현재 또는 지정한 라인을 갱신한다.
current line 이외의 다른 라인을 갱신하기 위해서는 line address를
지정한다.
예를들면 4c는 4 라인을 갱신한다.
stty로 선언된 삭제문자를 ,통상 <^h> 또는 <BS-F12>, 사용하여
지정한 라인에서의 입력모드 동안 교정을 수행할 수 있다.
교정 방식은 <return>키를 입력하기 전의 편집 라인의 수정시에
효과적이다. 텍스트를 수정하고, 교정하기 위한 다른 명령들은
차례대로 이후에 설명된다.
입력 모드를 종료하기 위해서는 빈 라인에 .을 입력하고 <return>키를
입력한다.
3. 텍스트의 수정
텍스트를 수정하기 위한 기본적인 명령어는 다음과 같다.
┌────────────────┐
│ u 직전의 변경을 취소한다. │
│ d 텍스트를 삭제한다. │
│ m 텍스트를 이동한다. │
│ t 텍스트를 복사한다. │
└────────────────┘
Undo Last Change (u)
매우 중요하고 유용한 명령중 하나로, undo 명령어는 직전의
갱신분을 취소하거나 또는 복구 한다. 이 명령어는 취소해야 할
필요가 있을때 편집기를 저장하지 않고편집기를 종료하던것과,
모든 편집 갱신을 버림에 있어서 더욱 편리한 대안을 제공한다.
u 명령어를 반복적으로 누르면 직전의 갱신 내용 내용의 취소및 반영이
반복된다.
예를들면, 화일의 전체 내용을 삭제하는 1,$d 명령어의 결과는
u 명령어를 실행함으로써 편집 작업시에 쉽게 복구될 수 있다.
Delete (d)
d 명령어는 current line 또는 지정한 라인을 삭제한다. current line
이외의 라인을 삭제하고자 할 경우에는 line address를 삭제한다.
예를들면, 2,4d는 2 라인부터 4 라인까지를 삭제한다.
Move (m)
m 명령어는 두개의 line address를 요구한다. 이동될 라인은
명령어의 앞에 기술하고, 명령어의 뒤에 이동 위치를 지정한다.
예를들면, .,$m0 명령어는 현재 라인부터 마지막 라인을
화일의 첫부분인 0 라인 이후에 이동한다.
Copy (c)
t 명령어도 또한 2개의 line address를 지정한다. 복사될 라인은
명령어의 앞에 지정하고, 명령어의 뒤에 복사 위치를 지동한다.
예를들면, .,$t0 명령어는 현재부터 마지막 라인까지의 내용을
화일의 첫부분인 마지막 라인에 복사한다.
다양한 다른 명령어는 ed에서 사용될 수 있다. 이 명령어들에 대한 자세한
내용은 vi 편집기 부분을 참조하기 바란다. 이유는 ed 명령어와 vi 명령어는
서로 호환되기 때문이다.
4. 텍스트의 대치
여기에서 설명되는 편집 명령은 전체 라인에 영향을 미친다. s 명령어는
라인내의 텍스트를 대치한다. s 명령어의 형식은 다음과 같다.
┌────────────────────┐
│ [address]s/old_text/new_text/command │
└────────────────────┘
address 대치되어야 할 라인
s 대치 명령어
/old_text 대치될 텍스트
/new_text 대치 텍스트
/command 필요시 지정하는 옵션
대치 명령어의 각 요소들은 대부분 /로써 구분된다.
그렇지만 지정한 대치 명령어상에서 /를 지정하는 위치에 동일문자를
지정함으로써 /를 대신하여 사용할 수 있다. 예를들면
1,$s/old/new/의지정 형식을 1,$s-old-new-라는 형식으로
지정할 수 있다.
대치 명령어 상에 별도의 command 지정이 없을 경우, 지정한 라인에
지정한 문자열이 여러개 존재할 경우, 디폴트로
( 미정의시 ) 라인상의 첫번째 문자열만을 대치한다.
예를들면, 어느 라인상에 다음과 같은 텍스트가 들어 있다고 가정하자.
111 222 333 111 444 000 222 111
이때 s/111/kdw/라고 지정하면, 첫번째 있는 111만이 kdw로 대치된다.
또한 s 명령어 전에 라인 범위를 지정하게 되면, 대치 작업은 지정한 범위의
어드레스내의 모든 라인에대해 작업을 수행한다. 예를들면 1,$s/is/was
명령은 화일내의 모든 라인의 첫번째 is를 was로 대치한다.
라인내에 있는 지정 문자열의 모두를 대치하기 위해서는 s 명령어 마지막에
g를 지정한다. 예를들면, s/is/was/g는 current line상의 모든 is를 was로
대치하며, 1,$s/is/was/g 명령어는 전체 화일내의 is를 was로 대치한다.
대치 작업시에 g/string/s/old/new와 같은 형식도 사용될 수 있다.
이 형식으로 지정된 경우에는 string이 들어있는 라인내의모든 old를
new로 대치한다.
텍스트 작업중 잘못된 대치가 행해졌을 경우에는 undo 명령을 통해
대치를 취소할 수 있다.
5. 쉘로의 일시적 이동
편집작업 동안에 유닉스 명령어를 실행해야 될 필요가 있다.
쉘로의 일시적 이동 명령인 '!'는 하나 또는 그 이상의 명령어들을
실행하기 쉘의 일시적 억세스를 허용한다.
쉘로의 일시적 이동을 행하기 위해서는 ed의 명령어 라인상에 !를
입력한후 실행할 쉘 명령어를 지정한후 <return> 키를 입력하면 된다.
예를들어 ed의 명령어상에 !ls를 입력하면, ls 명령어가 실행된후
출력이 화면상에 표시된다. 이후 편집 작업이 계속된다는 의미를 갖는
명령어 출력 다음에 !가 표시된다. 그리고 명령어의 출력은 화일의 일부로
처리되지는 않는다.
복수개의 명령어를 실행하기 위해서는 ;(세미콜론)으로 각각을 구분한다.
예를들면, !pwd;date;who라 지정하면, 지정한 명령어들을 순서대로
실행하고, 편집 작업을 계속하기 전에 모든 출력을 표시한다.
막연하게 쉘로의 일시적 이동을 하기 위해서는 !sh 명령을 입력한다.
이경우 다시 편집작업을 수행하기 위해서는, 쉘 프롬프트상에서 ^d를
누르거나 exit를 입력한다.
6. ed의 Recovery(장애로부터의 복구)
편집작업이 비정상적으로 종료했을 경우, 유닉스는 편집 버퍼상의 내용을
사용자의 home directory속의 ed.hup 화일에 저장한다. 한번 화일의
내용이 확인되면, ed.hup 화일은 다음번의 recovery시에 또다른 내용이
저장됨으로써 이전 내용은 참조가 불가능하게 되기 때문에 가능한한 빨리
다른 이름으로 저장해 두어야 한다.
========================================================================
스크린 에디터 vi의 일반 개요
이 강의에서는 vi를 이용하여 화일을 생성하고, 편집하는 방법에
대해서 설명한다.
1. 일반적인 vi 편집기의 특징
vi는 대화식 스크린 편집기이다. ed와는 달리 vi는 한싯점에
한 화면분의 텍스트를 표시한다. vi 편집기는 사용자에게 스크린상의
임의 지점, 또는 화일내의 임의의 지점으로 커서를 이동시키거나,
현재의 화면 이전 또는 이후 화면으로의 이동을 허용한다.
일반적으로 vi 편집기는 ed 편집기보다 더욱 융통성있고, 유연한
편집기이다. vi는 더욱 독특한 운영 특징을 갖고 있다.
. vi가 실행 요구되었을때, 편집 버퍼가 텍스트 입력 사항과
편집 사항을 저장하기 위해 확립된다.
. vi는 ed와 같이 기본적으로 텍스트 입력 모드와 명령어 입력 모드의
2가지 모드에서 운영된다. 명령어 모드는 텍스트를 조작하기 위해서
사용된다. vi는 부가적인 명령어의 사용을 허용하기 위한
last line mode라 불리우는 또다른 명령어 모드를 갖고 있다.
. vi 명령어는 ed 명령어와 같이 <return>키를 요구하지 않는다.
또한 vi 명령어는 일반적으로 화면상에 표시되지도 않는다.
이후에 설명되는 명령어들은 기본적이고 유용한 명령어들이다.
그렇지만 vi는 이보다 다양한 명령어들을 제공함으로 이들을 확인하기
위해 관련 서적이나, 온라인 참조 메뉴얼인 man이나 mandex를 참조하기
바란다.
2. vi의 설정(setup)
vi 편집기는 각 터미널의 한정된 특성과 기능에 의존하는 편집기이기
때문에 vi 편집기를 사용하는 단말의 종류를 조명해야 한다.
만약 터미널 종류가 정의되어 있지 않으면, vi 편집기가 실행될때
이에 상응하는 메세지를 표시한다.
터미널 종류를 정의하기 위해서는, /usr/share/lib/termcap 화일에 link되어
있는 /etc/termcap 화일로부터 적당한 터미널을 쉘 변수인 TERM에 할당하고,
이 정보를 요구하는 다른 프로세스들에 값들을 전달해 준다. ( 특정 변수값을
다른 프로세스에 전달하는 작업을 export라고 한다. ) 예를들면,
uvt1224 터미널을 지정하기위해 유닉스 쉘 프롬프트에 다음과 같이 입력한다.
┌──────────────┐
│ TERM=uvt1224;export TERM │
└──────────────┘
쉘 변수는 모두 대문자이고, 변수명 TERM과 변수 값인 uvt1224 사이에는
공백을 두지 않는다. 위의예와는 달리 변수선언 부분과 export 명령어 부분을
다른 라인에 지정할 수 있다.
터미널 지정은 현재의 로그인 세션에 대해서만 적용된다. 매번 로그인시마다
자동적으로 터미널을 정의하기 위해서는 사용자의 home directory내의
.profile내에 위의 명령어 부분을 지정한다.
다른 vi 환경정의 값들에 대해서는 이후에 다시 설명한다.
쉘에대한 자세한 설명은 추후에 설명될 과정에서 언급하기로 한다.
3. vi를 통한 화일의 생성
vi를 통한 화일의 생성 절차는 ed를 사용하는 절차와 유사하다.
1) vi file_name의 형식으로 편집기를 개시한다.
만약 화일명이 생략되었을 경우에는, 편집기를 종료할때 이름을
제공해야 함을 명심해야 한다. vi는 화일명을 제공하도록 하기위해
'No current filename'이라는 주의 메세지를 표시한다.
편집 스크린은 ed와 다른 형태로 표시된다. 커서가 가장 윗 라인에
나타나고 연이어 빈라인임을 나타내는 일련의 ~(tildes)표시가
표시된다. 화일명은 마지막 라인에 나타나고, 기존 화일의 문자수
또는 새로운 화일을 나타내는 new file이라는 글자가 [ ] 표시되어
뒤따른다.
처음의 편집기는 명령어 모드이다.
2) a와 같은 입력 명령어를 입력 함으로써 텍스트를 추가한다.
이때 <enter>를 누르지 않는다.
이때 a라는 문자는 스크린상에 나타나지 않음을 주목하기 바란다.
텍스트를 입력하고 각 라인의 끝에서 <return> 키를 입력한다.
3) <escape> 키를 누름으로써 입력모드를 종료한다.
<escape>를 누를때까지의 모든 입력은 텍스트로 취급된다.
4) 버퍼의 내용을 저장하고, 편집기를 종료한다.
vi는 버퍼의 내용을 저장하고, 편집기를 저장하기 위한 몇가지의
명령어들을 제공한다. vi를 호출했을때 화일명을 지정했을 경우에는
ZZ 명령어는 버퍼의 내용을 화일에 저장하고, 편집기를 종료하는
두가지 기능을 수행한다. 또한 라인 편집기 ed에서 사용했던
명령어들을 :(콜론)이 선행된 형태 즉, :q , :w 또는 :wq와 같이
사용할 수 있다. 이때 :을 입력하게 되면, 커서는 화면상의
마지막 라인으로 이동됨을 주목해야 한다. 이후 설명되는 명령어중
:이 선행하는 명령어는 같은 위치에 표시된다. 다음은 편집 작업중의
vi 화면을 보여주는 예제이다.
$vi testfile
┌───────────────────────────────┐
│ Use an input command to enter text. │
│ Press <return> at the end of each line. │
│ Press <escape> to exit the input mode. │
│ <escape> │
│ ~ │
│ ~ │
│ ~ │
│ ~ │
│ ~ │
│ ~ │
│ 중략 │
│ ~ │
│ ~ │
│ ~ │
│ :wq<return> │
│ "testfile" [New file] 5 lines, 174 characters │
└───────────────────────────────┘
4. 커서의 문자 또는 라인 단위 이동
스크린상의 커서를 이동하기 위한 키는 다음과 같다. 복수의 문자나
라인을 단위로 이동하기 위해서는 커서 이동키 앞에 원하는 숫자를
지정한다. 그 예는 다음과 같다. 5<h>라고 지정하면 커서가 좌측으로
5문자 이동된다.
┌───────┬───────┬┬──────┬───────┐
│ 커서이동방향 │ 커서 이동키 ││커서이동방향│ 커서 이동키 │
├───────┼───────┼┼──────┼───────┤
│ 왼쪽 │ h ││ 오른쪽 │ l │
│ │ 왼쪽 방향키 ││ │ 오른쪽 방향키│
│ │ <back space> ││ │ <spacebar> │
├───────┼───────┼┼──────┼───────┤
│ 아래쪽 │ j ││ 윗쪽 │ k │
│ │ 아래쪽 방향키││ │ 윗쪽 방향키 │
└───────┴───────┴┴──────┴───────┘
상기 도표에선언된 키들은 유닉스 시스템 접속 프로그램인 에뮬레이터
프로그램의 키값 정의 형태에 따라 다른 기능을 수행할 수 있습니다.
5. 커서의 특정 단위로의 이동
커서를 문자 또는 라인 단위로 이동하는 것에 부가적으로 커서는
단어, 문장, 단락, 절 더우기 스크린상의 다른 위치로 이동할 수 있다.
이동 명령어는 다음과 같다.
┌───────┬─────┬───────────────┐
│ 이동 단위 │명령 문자 │ 설 명 │
├───────┼─────┼───────────────┤
│ 단어 │ w │ 한 단어 앞으로 │
│ │ e │ 현재 단어 끝으로 │
│ │ b │ 한 단어 뒤로 │
├───────┼─────┼───────────────┤
│ 문장 │ ( │ 전문장의 시작으로 │
│ │ ) │ 다음 문장의 시작으로 │
├───────┼─────┼───────────────┤
│ 단락 │ { │ 이전 단락의 시작으로 │
│ │ } │ 다음 단락의 시작으로 │
├───────┼─────┼───────────────┤
│ 화면 │ H │ 현 화면의 가장 처음으로 │
│ │ M │ 현 화면의 중간 부분으로 │
│ │ L │ 현 화면의 가장 끝으로 │
├───────┼─────┼───────────────┤
│ 화일 │ G │ 화일의 끝으로 │
│ │ 1G │ 화일의 시작으로 │
│ │ nG │ 화일의 n 라인으로 │
└───────┴─────┴───────────────┘
6. 편집 화면 단위로의 이동
편집 작업동안 다음과 같이 편집 화면 단위로 이동을 행할 수 있다.
┌───────┬────┬──────────┐
│ 이동 형태 │명령어 │ 이동 방향 │
├───────┼────┼──────────┤
│ 화면 단위 │ ^f │ 다음 화면 │
│ │ ^b │ 이전 화면 │
├───────┼────┼──────────┤
│ 반 화면 단위 │ ^d │ 다음 반 화면 │
│ │ ^u │ 이전 반 화면 │
├───────┼────┼──────────┤
│ 화면 전후의 │ ^e │ 현화면 다음 라인 │
│ 라인 단위 │ ^y │ 현화면 이전 라인 │
└───────┴────┴──────────┘
========================================================================
스크린 에디터 vi의 편집 명령어
1. 텍스트의 검색
검색 명령어는 지정한 문자열이 들어있는 화일내의 특정한 위치로 커서를
위치시키는데 빠른 방식을 제공한다.
vi에서 검색 명령어는 ed의 검색 명령어와 기본적으로 동일하다.
그러나 vi에서는 추가로 2가지 명령어 즉, n과 N을 제공한다.
검색 명령어는 다음과 같다.
┌──────┬───────────────────────┐
│ 명령어 │ 설 명 │
├──────┼───────────────────────┤
│/pattern │pattern으로 지정된 문자열을 정방향으로 검색 │
│/ │동일한 pattern에대해 정방향 검색을 반복수행 │
├──────┼───────────────────────┤
│?pattern │pattern으로 지정된 문자열을 역방향으로 검색 │
│? │동일한 pattern에대해 역방향 검색을 반복수행 │
├──────┼───────────────────────┤
│n │동일한 방향으로 이전 검색을 다시 수행 │
│N │반대 방향으로 이전 검색을 다시 수행 │
└──────┴───────────────────────┘
2. 편집 작업시의 보조 명령어
다음 명령어는 편집 작업시 유용한 기능을 제공한다.
:set showmode
화면의 우측 아래쪽에 현재의 텍스트 입력 모드에 대한 상태정보를
표시한다. 상태정보는 입력 모드 동안에만 표시된다. 상태정보가
표시되어 있지 않은 경우는 vi가 명령어 모드상에 있다는 것을
의미한다.
이 기능은 현재의 vi 작업 동안에만 적용된다. vi가 기동되었을때
입력 모드의 상태 정보가 표시되게하는 방법은 이후에 설명한다.
u
ed 명령어와 같이, undo 명령은 편집 버퍼상에서 직전의 변경을
취소한다.
U
커서가 위치하고 있는 라인에서의 모든 변경을 취소한다.
.
직전의 편집 변경내용을 반복 수행한다. redo 명령인 . 명령어는
화일내의 여러 장소에 동일한 변경을 수행하고자 할 경우에 유용하다.
이 명령은 버퍼내에서 변경내용을 저장하기 위한 편집 작업을 수행한다.
따라서 원하는 위치로 커서를 재위치하고, 직전의 편집내용을
다시 수행하기 위해 . 명령어를 사용한다. 변경내용은 버퍼내에서
다른 변경내용이 수행될때까지 다시 수행될 수 있다.
3. 텍스트의 입력
vi는 텍스트를 입력하기 위해 몇가지 명령어를 제공한다. 그들을 아래에
요약되어 있다. 텍스트를 입력한 후에 다른 vi 명령어들을 실행하기 전에
입력 모드를 종료하기위해 <escape>를 누른다. 입력모드상에서의
입력 오류는 stty 삭제 키인 통상 ^h 또는 BS-F12를 사용하여
교정할 수 있다.
a 현재의 커서 위치 이후에 텍스트를 추가한다.
A 현재의 라인 이후에 텍스트를 추가한다.
i 현재의 커서 이전에 텍스트를 삽입한다.
I 현재의 라인 이전에 텍스트를 삽입한다
o 현재의 라인 이후에 빈라인을 추가하고,
<escape>키를 누를때까지 계속된 텍스트 입력을 허용한다.
O 현재의 라인 위에 빈라인을 추가하고,
<escape>키를 누를때까지 계속된 텍스트 입력을 허용한다.
r 커서가 위치하고 있는 한 문자를 갱신한다.
R <escape>키를 누를때까지 계속적으로텍스트를 갱신한다.
4. 텍스트의 수정
텍스트를 수정하는 기본적인 기능들은 다음과 같다. 이러한 편집 기능을
수행하는 명령어들은 이후에 별도로 설명한다.
삭제 하나 또는 그 이상의 문자 또는 텍스트 범위를 삭제한다.
이동 버퍼내에 지정된 텍스트를 삭제하고, 특정 위치에 삭제되었던
내용을 복사한다.
복사 지정한 텍스트를 버퍼내로 복사하고, 특정 위치에 그 텍스트를
복사한다.
대치 하나 또는 그 이상의 문자들을 <escape>를 누를때까지의
입력 텍스트로 바꾼다.
변경 지정한 텍스트 단위를 <escape>를 누를때까지의 입력 텍스트로
바꾼다.
4.1 텍스트의 삭제
텍스트를 삭제하기위한 방법은 현재의 운영모드에 따라 다르다.
입력모드
stty 명령어에의 정의된 삭제 키는 통상 ^h이다. 이 키는 커서를
한번에 한 글자씩 왼쪽으로 이동한다. 문자는 삭제되지 않는다.
이동후 새로 입력하는 내용으로 손쉽게 대치할 수 있다.
<BS-F12>키도 유사한 기능을 수행한다.
명령어 모드
x 명령어는 현재 커서 위치의 문자를 삭제한다. 복수개의 문자도
x 명령어 입력전에 분자수를 숫자로 누름으로써 삭제할 수 있다.
예를들면, 5x는 커서 위치부터 5문자를 삭제한다.
d 명령어는 텍스트 범위를 표시하는 부호에 의해 지정된 텍스트 단위를
삭제한다. 예를들면, dw는 한 단어를 삭제하고, d$는 커서부터
라인의 끝까지를 삭제하고, dd는 커서를 포함하고 있는 현재의
라인을 삭제한다. 또한 명령어 앞에 숫자를 지정함으로써 복수개의
텍스트 단위들을 삭제할 수 있다. 예를들면, 3dd는 커서가 위치하고
있는 현재의 라인부터 다음 두라인을 삭제한다.
4.2 텍스트의 이동
텍스트의 이동은 3 단계로 수행한다.
1) 이동할 텍스트를 버퍼내에서 삭제한다.
적당한 텍스트 범위를 지정하여 d 명령어를 사용하여 원하는
텍스트를 삭제한다. 또한 복수의 텍스트를 대상으로 하기 위해서는
숫자를 함께 지정하여 처리할 수 있다. 예를들면, 2dd 명령어는
버퍼내에서 2 라인을 ( 커서가 위치하고 있는 라인과 그 다음 라인 )
삭제한다.
2) 커서를 텍스트를 이동할 위치로 옮긴다.
3) 버퍼내의 텍스트를 현재의 커서 위치에 위치시킨다. (put)
현재 커서 이후에 텍스트를 위치시키기 위해서는 p 명령어를
사용한다. 버퍼는 오직 직전의 갱신 내용만을 저장하기 때문에
이 명령은 삭제 명령어를 수행한 후에 즉각적으로 사용해야 한다.
이와 유사한 P 명령어는 커서 이전에 삭제된 텍스트를 위치시킨다.
갱신 내용이 버퍼내에 유지되어지는 동안에는, put 명령어는
화일 어느 곳에서나 동일 텍스트에 대해 여러번 이동을
수행할 수 있다.
4.3 텍스트의 복사
텍스트의 복사 절차는 텍스트 이동 절차와 유사하다.
1) 버퍼내로 복사할 텍스트를 복사한다.
적당한 텍스트 범위를 지정한 y 명령어를 사용하여 원하는 텍스트를
버퍼내로 복사한다. 또한 복수의 텍스트들을 대상으로 하기위해
숫자를 명령어에 함께 지정하여 처리할 수 있다. 예를들면, 2yy
명령어는 2 라인을(커서가 위치하고 있는 라인과 그 다음 라인)
버퍼내로 복사한다.
2) 텍스트를 복사하고자 하는 위치로 커서를 옮긴다.
3) 버퍼내의 텍스트를 현재의 커서 위치에 복사한다.
커서 이후에 텍스트를 위치시키기(복사하기) 위해 p 명령어를 사용한다.
버퍼에는 오직 직전의 복사된 내용만을 보존하게 됨으로,
yank 명령어를 수행한 후 바로 p 명령어를 수행한다.
이와 유사하게 P 명령은 현재의 커서 위치전에 버퍼내에 복사되어
있는 텍스트를 위치시킨다.(복사한다) 또한 복사된 텍스트가 버퍼내에
유지되는 동안은 계속적으로 수행할 수 있다.
4.4 텍스트의 대치
이 명령어는 <escape> 키를 누를때까지 텍스트 입력으로 라인상의
하나 또는 그 이상의 문자들을 대치하는 삭제와 추가 기능을 조합한
명령이다. $ 표시가 텍스트 대치의 끝을 표시하기 위해 마지막 문자 위치에
나타난다. 예를들면, 4s 명령어는 커서위치부터 시작하여 4문자를
삭제하고, <escape> 키를 누를때까지의 일련의 대치 텍스트를 추가하기위해
입력 모드를 개시한다. 대치(substitute) 명령어는 아래의 도표에서
설명된다. 라인 에디터 명령어는 :(colon)을 명령어 앞에 지정함으로써
last line mode에서 실행할 수 있다. 대치 범위를 지정하기 위해,
명령어를 실행하기 전에 커서를 위치시키거나 또는 필요로하는 명령어상에
라인의 범위를 지정한다. 예를들면, :1,$s/help/assistance/g 명령은
화일내의 모든 help 문자열을 assistance 문자열로 대치한다.
substitute 명령어는 단어, 문자, 단락등을 대치하기 위한 텍스트 범위를
지정하는 부호를 받아들이지 않는다. 이후에 설명되는 change 명령어는
이와같은 특정 단위의 텍스트들을 대치하는데 유용하다.
┌─────┬────────────────────┐
│ 명령어 │ 설 명 │
├─────┼────────────────────┤
│ s │ 한 문자를 대치하고, 텍스트를 추가한다. │
├─────┼────────────────────┤
│ ns │ n 문자를 대치하고, 텍스트를 추가한다. │
├─────┼────────────────────┤
│ S │ 한 라인 전체를 대치한다. │
└─────┴────────────────────┘
4.5 텍스트의 변경
change 명령어 c는 substitute 명령과 유사한 기능을 수행하며,
대상 텍스트를 다양한 심볼로서 간편하게 지정할 수 있다. {예를들면,
w (word), ) (sentence) }
c 명령어는 <escape> 키를 누를때까지의 텍스트 입력으로 지정한
텍스트를 대치한다. 또한 $ 표시가 대치될 텍스트의 끝을 표시하기 위해
대치될 마지막 문자에 표시된다. 예를들면, 3cc는 커서가 위치하고 있는
라인부터 시작하여 3 라인의 텍스트를 <escape> 키를 누를때까지
입력되는 텍스트로 대치한다.
( 예제 )
┌────┬─────────────────────────────┐
│ cw │커서가 위치하고 있는 현재 단어를 <escape> 키를 │
│ │누를때까지의 텍스트 입력으로 바꾼다. │
├────┼─────────────────────────────┤
│ 7cc │현재 라인부터 시작하여 7 라인을 삭제하고, <escape> 키를 │
│ │누를때까지 텍스트입력을 받아들이기 위해 입력모드를개시한다│
├────┼─────────────────────────────┤
│ 4c) │4 문장을 삭제하고, <escape> 키를 누를때까지 대치 텍스트의 │
│ │입력을 허용한다. │
└────┴─────────────────────────────┘
========================================================================
vi의 라인 에디터 명령어및 환경 제어
1. vi의 라인 에디터 명령어
라인 에디터 명령어들은 last line mode에서 수행할수 있으며,
라인 에디터 명령어 앞에 :(colon)을 지정함으로써 vi에서 수행할 수
있다. 라인 에디터 명령을 입력하기 위해 :을 누르면, 커서는 화면상의
가장 마지막 라인으로 이동하게되며, 입력하는 명령어들이 화면상에
표시되며, <return>을 누름으로써 실행할 수 있다.
빈번하게 사용되는 라인 에디터 명령어들은 아래와 같다. 또한 일반적으로
많이 사용되어지는 명령어의 변형도 같이 설명된다. 보다 자세한 설명은
유니시스 U6000 시스템 사용자 가이드를 참조하기 바란다.
:!command
하나 또는 그이상의 쉘 명령어들을 수행하기 위해 유닉스 쉘의
일시적 억세스를 허용한다. 한번에 복수 command를 지정하기 위해서는
;(세미콜론)을 사용한다. 지정한 명령어의 실행이 종료된후 명령어의
출력이 표시되는데, 이후 편집작업이 계속된다는 것을 의미하는
[Hit return to continue]라는 메세지가 표시된다. 이때 아무 키나
입력하면 vi 편집작업이 계속된다.
또한 쉘로 일정기간 빠져나와 쉘 명령의 수행을 원할 경우에는
:sh 명령을 사용한다.
이때 표시되는 쉘 프롬프트는 유닉스 쉘의 억세스를 수행하고 있다는
것을 의미한다. 쉘에서 작업도중에 편집작업으로 되돌아가기 위해선
^d 나 exit 명령을 실행한다.
:f
현재 편집중인 화일명, 커서가 위치하고 있는 라인 번호, 화일에서
커서가 위치하고 있는 라인의 백분율을 표시한다.
또한 :f newfile 명령어는 버퍼상에서 현재의 화일명을 다시 설정한다.
이 경우 디스크상에 존재하는 기존의 화일면에는 영향을 주지 않는다.
:r
현재 커서가 위치하고 있는 라인 아래에 현재 또는 지정한 화일의
내용을 읽어온다. :r !command는 현재 라인 아래에 지정한 명령어의
실행 결과를 읽어온다.
:e
버퍼상에서 편집중인 현재의 화일을 지정한 화일로 대치한다.
이 경우 편집중인 화일이 수정되어, 버퍼상의 화일을 대치하기 전에
저장할 필요가 있다면, 경고 메세지가 표시된다. :e! 명령어는
현재 편집중인 화일의 변경 사항을 무시하고, 편집기를 종료하지
않은 상태에서 새로운 화일로 편집작업을 계속하도록 해준다.
또한 :e! newfile 명령어는 현재 편집중인 화일에서의 변경 사항을
버리고, 지정한 화일로 버퍼상의 화일을 대치한다.
:w
버퍼상에서 편집중인 화일을 저장한다. 또한 편집중인 화일중
일부분 즉, 특정 범위의 라인들만을 저장할 수 있는데, 이 경우
w 명령어 앞에 라인 범위를 지정한다. 이경우 원래의 화일 손상을
방지하고, 화일을 따로 유지하기 위해 통상 다른 화일명을
w 명령어와 함께 지정한다. 이때 기존에 존재하는 화일명을 지정하면.
vi는 화일이 이미 존재하고 있다는 경고 메세지를 표시하고, 작업을
수행하지 않는다. 이 경우 :w! 명령어는 편집 버퍼상의 내용으로
지정한 화일에 저장한다. (overwrite)
:q
편집기를 종료한다. 일반적으로, 이 명령어는 저장 명령어와 함께
또는 그 이후에 사용한다. :q! 명령어는 화일내의 모든 갱신 내용을
무시하고 편집기를 종료한다.
:set
편집 환경을 수정한다. set 명령과 함께 지정되어지는 옵션들은(option)
이후 계속 설명된다.
2. vi 환경의 변경
set 명령의 옵션들은 vi 편집 환경을 수정하기 위해 정의될 수 있다.
이러한 옵션들은 라인 번호의 표시, 문자열 검색시 대소문자 구별 무시,
또는 tab과 indent 같은 화면상에 표시 불가능한 문자들의 표시등과 같은
많은 기능들을 수행한다. 이전에 vi의 일반사항에 관한 강의에서 이미
:set showmode 명령어가 입력 모드의 프롬프트를 표시하기위해 사용된다는
것을 설명했다. 이러한 옵션들은 enable(설정), disable(해제)하기위해
set 명령어를 사용한다.
2.1 set명령어의 옵션 확인
set 명령어의 모든 옵션들을 확인하기 위해서는 :set all 명령을
수행한다. 또한 각각의 옵션에 현재 설정되어 있는 값을 확인하기
위해서는 :set option_name? 명령어를 사용한다. 또는 기본값이
변경되어진 옵션을 확인하기 위해서는 :set 명령어를 사용한다.
2.2 옵션의 설정
몇몇 옵션은 :set option_name처럼 set 명령어와 함께 옵션 이름을
지정함으로써 설정할 수 있다. 이런 옵션들은 :set no_option_name과
같이 옵션명에 no를 붙여 지정함으로써 해제할 수 있다.
예를들면, :set number 명령은 편집 작업 동안에 라인 번호를 표시한다.
또한 :set nonumber 명령은 편집 작업 동안에 라인 번호를 표시하지 않게
한다.
다른 옵션들은 변경 가능한 값들을 대입하는 형식으로 설정한다.
예를들면, :set window=5는 스크린의 크기를 5 라인으로 설정한다.
스크린 크기를 다시 설정하기 위해서는 :set window=10과 같이 옵션에
다른 값을 대입한다.
복수개의 옵션이 하나의 set 명령어 라인에 동일 싯점에 설정될 수 있다.
예를들면, :set numbershowmode 명령어는 라인 번호및 입력 모드의 상태
프롬프트를 표시한다.
set 옵션들은 몇가지 방식으로 정의할 수 있다.
. 편집 작업 동안에 옵션을 설정한다. 이 경우, 옵션은 현재의
편집 작업 동안에만 효력을 갖는다.
. 자동 실행을 통해 옵션을 설정한다.
- 사용자 로그인 작업시에 자동 실행하기 위해 .profile에
set 명령어와 옵션을 EXINIT='set option1 option2'과
같은 형식으로 지정한다. 여기에서 EXINIT라는 변수는
vi가 독점 사용하는 변수이며, set 명령어와 option들은
반드시 ' ' 로 묶어 주어야 한다.
예를들면 EXINIT='set showmode number'와 같은 형식이다.
- set 명령어와 옵션을 포함하고 있는 .exrc라는 화일을
사용자의 home directory에 생성한다. 이 화일은 vi가 기동될때
실행되게 된다. 이 화일 안에서의 옵션 설정 방식은
편집 작업시 옵션 설정과 같은 방식으로 지정할 수 있다.
이때는 EXINIT라는 변수는 사용되지 않는다. 예를들면,
set showmode number과 같다.
3. vi의 장애 복구 기능
유닉스는 vi가 비정상적으로 종료할때 버퍼의 내용을 보전 해준다.
버퍼의 내용은 편집되던 화일과 동일 이름으로 vi 화일에 저장된다.
보존되었던 화일을 vi를 통해 억세스 하려면 다음과 같은 형식으로
명령어를 지정한다.
vi -r file_name
화일의 편집을 계속하거나, 저장한 후, 편집기를 종료한다.
'Academy I > Tech Academy' 카테고리의 다른 글
Unix 6 유틸리티 (0) | 2014.12.04 |
---|---|
Unix 5 통신,네트워크 (0) | 2014.12.04 |
Unix 4 검색과 권한 (0) | 2014.12.04 |
Unix 3 관리명령어 일반 (0) | 2014.12.04 |
Unix 1 역사,구성,특징 (0) | 2014.12.04 |
HTML5 CSS3 Javascript 책 공개링크 (0) | 2014.12.03 |
[오라클에러] ORA-03135 조치방안 (0) | 2014.11.14 |
사물인터넷 앞당길 IPv6 전문인력 양성 (0) | 2014.11.13 |