-
커맨드 라인 기능 중 하나인 입출력 방향 지정(I/O 리다이렉션)을 파헤친다.
I/O 는 입/출력을 뜻함
명령은 리다이렉션을 통해 파일로 부터 입력 받을 수 있고 또한 파일로 출력할 수 있다.
강력한 명령어인 파이프 라인을 만들기 위해 필요한 명령어들을 연결 가능하다.
- cat : 파일 연결하기
- sort : 텍스트 라인 정렬하기
- uniq : 중복 줄을 알리거나 생략하기
- wc : 각 파일의 개행 및 단어 개수 , 파일 바이트 출력하기
- grep : 패턴이 일치하는 라인 출력하기
- head : 파일의 첫부분 출력하기
- tail : 파일의 마지막 부분 출력하기
- tee : 표준 입력를 읽고 표준 출력 및 파일에 쓰기
표준 입출력과 표준 오류
많은 프로그램들은 출력을 만들어 낸다. 이러한 출력은 두가지 형식을 포함함
- 프로그램의 결과
- 프로그램이 어떻게 돌아가고 있는지 말해주는 상태 및 오류 메시지의 형식이다.
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 파일이 저장할 수 있다.
'리눅스' 카테고리의 다른 글
5. 명령어와 친해지기 (0) 2020.06.05 4 .파일 디렉터리 조작 (0) 2020.05.31 3 .시스템 살펴보기 (0) 2020.05.31 2 .파일 시스템 탐색 (0) 2020.05.31 190610 tar,gzip 파이프 리다이렉션 프로세스, 데몬, 서비스 (0) 2019.06.10