ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 6. 리다이렉션
    리눅스 2020. 6. 20. 18:08

    커맨드 라인  기능 중 하나인 입출력 방향 지정(I/O 리다이렉션)을 파헤친다. 

    I/O 는 입/출력을 뜻함 

    명령은 리다이렉션을 통해 파일로 부터 입력 받을 수 있고 또한 파일로 출력할 수 있다. 

    강력한 명령어인 파이프 라인을 만들기 위해 필요한 명령어들을 연결 가능하다. 

    • cat : 파일 연결하기 
    • sort : 텍스트 라인 정렬하기 
    • uniq : 중복 줄을 알리거나 생략하기 
    • wc : 각 파일의 개행 및 단어 개수 , 파일 바이트 출력하기 
    • grep : 패턴이 일치하는 라인 출력하기 
    • head : 파일의 첫부분 출력하기 
    • tail : 파일의 마지막 부분 출력하기 
    • tee : 표준 입력를 읽고 표준 출력 및 파일에 쓰기 

    표준 입출력과 표준 오류 

    많은 프로그램들은 출력을 만들어 낸다. 이러한 출력은 두가지 형식을 포함함 

    1. 프로그램의 결과
    2. 프로그램이 어떻게 돌아가고 있는지 말해주는 상태 및 오류 메시지의 형식이다. 

    ls와 같으 프로그램을  사실 표준 출력(stdout 이라고함)이라고 불리는 특수한 파일에 이 명령어 에 대한 결과 를 내보내고 표준 오류 (stderr)라는 또 다른 파일에 그 상태 메시지를 전송한다. 

    많은 프로그램이 표준 입력 이라고 부르는 곳에서 입력 내용을 가져오고 그것은 기본적으로 키보드에 연결 되어있다. 

    입출력 방향 지정 기능으로 출력과 입력의 방향을 변경 할 수 있다. 일반적으로 출력은 화면에 나타나고 입력은 키보드로 부터 인식 되지만 I/O 리다이렉션으로 진행방향을 변경 할 수있다.

    표준 출력 재지정

    I/O 리다이렉션을 출력방향을 재지정 할 수 있다. 

    less ls-output.txt 로 내용을 보면 확인 할 수 있다.

    없는 디렉터리로 바꾸려고하면 에러가 발생한다.

    파일은 생성되었지만 안은 비어있다. 

    그 이유는 > 리다이렉션 연산자로 출력방향을 지정할 때, 목적 파일은 항상 처음 부터 작성되기 때문이다. 

    ls 명령어가 아무런 결과를 만들지 못했고 단지 오류 메시지만을 만들었기 때문에 리다이렉션 명령은 파일을 처음부터 다시 쓴 뒤 오류 때문에 중단되어 잘림 형산이 발생한것 

    다음과 같이 사용가능하다. 

    기존파일을 분리하거나 새파일을 만들 수 있다. 

    이런식으로 사용하면 이어쓰기가 가틍하다. 

    존재하지 않으면 > 연산자 , 존재하면 >> 연산자를 사용한 파일이 생성된다.

    표준 오류 재지정

    표준 오류를 지정할 때는 리다이렉션 연산자가 필요없다. 다만 파일디스크립터를 참조한다.

    프로그램은 번호로 지정된 파일 스트림중에 어디라도 출력을 할 수 있다. 

    쉘은 내부적으로 표춘입출력 에러 출력을 0,1,2 파일 디스크립터로 표현한다. 

    쉘은 파일디스크립터 번호를 이용해서 재지정할 수 있는 표기를 지원한다. 

    파일에 오류가 저장된다. 

    표준출력과 표준 오류를 한 파일로 재지정 

    명령어의 모든 결과를 저장하고 싶은 방법

    2번의 리다이렉션이 이뤄진다. 먼저 표준 출력이 ls-output.txt 파일로 재지정되고 

    2>&1의 입력으로 파일 디스크립터 2(표준 오류)가 파일 디스크립터 1(표준 출력)으로 재지정 되도록 한다. 

    두번째 방법은 bash 최신버전에서 사용가능한 리다렉션을 간소화한 버전 

    단일표기법 &>을 사용하고 이싿. 이것은 표준 출력과 표준 오류를 ls-output.txt 파일로 재지정한다. 

    원하지 않는 출력 제거 

    시스템은 /dev/null 이라는 특수한 파일로 출력 방향을 지정함으로써 이 문제를 해결할 방법을 제공하고 있다. 

    이 파일을 비트 버킷(bit buket)이라고  불리는 시스템 장치로 입력을 받고 아무것도 출력하지 않는다. 

    오류 메시지를 숨기기 위해 다음과 같이 해보자 

    아무 파일도 생성되지 않는다.

    표준 입력 재지정 

    cat - 파일 붙이기

    cat 명령어는 하나 이상의 파일을 읽어 들여 표준 출력으로 그 내용을 복사한다.

    cat [file...]

    cat명령어가  TYPE 명령어와 유사하다고 생각할 수 있다. 

    cat 명령어는 페이지 구분 없이 파일을 표시 할 수 있다. 

    이 명령을 입력하면 ls-output.txt 파일 내용을 표시한다. 

    작은 여러 파일을 하나로 연결할 경우 

    movie.mpeg.0* > movie.mpeg

    와일드카드는 항상 정렬된 순서로 확장되기 때문에 명령인자는 올바른 순서로 나열될 것이다. 

    입력한 문장이 파일로 만들어짐

    < 리다이렉션 연산자를 사용해서 키보드로 연결된 표준 입력 방향을 lazy_dog.txt 파일로 변경

    파이프라인

     

    파이프라인이라고 하는 쉘의 기능으로 보다 더 응용될 수 있다  | 명령어의 표준 출력을 다른 명령어 표준입력과 연산 

     

    필터

     두 디렉터리를 지정했기 때문에 ls의 결과로 정렬된 두 목록을 가져 온다 . 

     

    uniq - 중복줄 제거 및 표시

    uniq 명령어는 sort와 연결해서 사용한다.

    정렬된 데이터 목록을 입력받아 중복된 내용을 제거해준다. 

     

    wc - 라인, 단어 개수 및 파일 크기 출력 

    wc(word count : 단어 개수 세기) 명령어는 파일에 들어있는 단어 및 라인의 개수와 파일 크기를 표시해 준다. 

    1. 라인수 2. 단어개수 3. 파일크기 

    -l 옵션은 라인 수 만 보고 싶을 때 사용할 수 있다. 

    wc 명령어를 파이프 라인에 추가하면 무언가를 셀때 매우 편리하다.  정렬된 목록에서 항목 갯수를 알고싶다면 

    다음과 같이 할 수있다.

    grep - 패턴과 일치하는 라인 출력

    grep 명령어는 파일의 텍스트 패턴을 찾을 때 사용하는 프로그램 

    grep pattern [file]

    grep 은 패턴을 가진 라인을 출력한다. 

    grep의 -i 옵션은 검색을 수행할 때 대소문자 구분하지 않도록하고(일반적으로 검색은 대소문자 구별한다.)

    , -v 옵션은 패턴과 일치하지 않는 라인만 출석하도록 한다. 

    head / tail - 파일의 처음 / 끝 부분 출력 

    head 명령어는 파일의 첫 10줄 만 출력할 수 있다.

    tail 명령어로 마지막 10줄 만 출력 가능하다. 

    -n 옵션으로 길이를 조절 가능하다. 

    tail  명령어는 실시간으로 파일을 확인 할수 잇는 옵션을 지원한다. 

    다음은 root만 가능하다 

    -f 옵션을 사용하여 tail은 지속적으로 로그 파일을 감시하고 새 내용이 추가 될때 곧바로 그 내용을 표시한다. 

    tee - 표준 입력에서 데이터를 읽고 표준 출력과 파일에 출력 

    grep 필터가 적용전에 ls.txt 파일이 저장할 수 있다. 

     

Designed by Tistory.