- I/O 리다이렉션 (입출력 방향 지정)의 명령어들을 알아볼 것이다.
- 명령은 리다이렉션을 토해 파일로부터 입력받을 수 있고, 또한 파일로 출력할 수 있다.
- 강력한 파이프라인을 만들기 위해서 필요한 명령어들을 연결할 수 있다.
1. 표준 입출력과 표준 오류
: 많은 프로그램들은 일종의 출력을 만들어낸다. 출력은 두 가지 형식을 포함한다.
- 첫 번째는 프로그램의 결과이다. -> 프로그램이 출력하도록 설계한 데이터를 말한다.
- 두 번째는 프로그램이 어떻게 돌아가고 있는지를 말해주는 상태 및 오류 메시지 형식이다.
위를 토대로 ls 와 같은 프로그램은 사실 표준 출력 (stdout)이라고 불리는 특수한 파일에 이 명령어에 대한 결과를 보내고
표준 오류 (stderr)라는 또 다른 파일에 그 상태 메시지를 전송한다.
게다가 많은 프로그램들이 표준 입력 (stdin)이라고 부르는 곳에서 입력 내용을 가져오고 그것은 기본적으로 키보드에 연결되어 있다.
1) 표준 출력 재지정
: I/O 리다이렉션은 출력방향을 재정의할 수 있다. 화면에 출력하는 대신 다른 파일에 출력되도록 지정하기 위해서는
파일명 앞에 > 리다이렉션 연산자를 사용한다.
- ls -l /usr/bin > ls-output.txt : /usr/bin 디렉토리에 있는 긴 목록을 불러와서 ls-output.txt 파일로 보냈다는 의미.
- less ls-output.txt : less 명령어로 텍스트 파일의 내용을 볼 수 있다.
but) 만약에 존재하지 않는 /bin/usr이란 디렉토리를 입력했을 때.
- ls -l /bin/usr > ls-output.txt
파일 크기가 0인 것을 확인할 수 있다. -> 리다이렉션 연산자 (>)로 출력 방향을 지정할 때, 목적 파일 (ls-output.txt) 은 항상 처음부터 다시 작성되기 때문.
ls 명령어가 아무런 결과를 만들지 못했고 단지 오류 메시지만을 만들었기 때문에, 리다이렉션 명령은 파일을 처음부터 다시 쓴 뒤 오류 때문에 중단되어 잘림 현상이 생겼다.
리다이렉션 연산자만을 사용해서 파일 이어 쓰기
: >> 연산자를 사용하면 파일에 이어 쓰기가 가능해진다. 만약 존재하지 않는 파일이면 > 연산자를 사용한 것처럼 파일이 생성된다.
- ls -l /usr/bin >> ls-output.txt : 파일 크기가 두 배가 된다.
2) 표준 오류 재지정
: 명령어 결과를 모두 한 파일에 저장하고 싶은 경우, 동시에 표준 출력과 표준 오류를 재지정해야한다.
예전 방식
- ls -l /bin/usr > ls-output.txt 2>&1 : 예전 버전에서 사용하는 명령어 방식 (현재는 잘 사용하지 않고 있는 방식이다.)
최신 방식
- ls -l /bin/usr &> ls-output.txt
원치 않는 출력 제거
: 명령어의 출력 결과를 원치 않고 버리고 싶을 때, 2> 연산자를 사용한다.
- ls -l /bin/usr 2> /dev/null
/dev/null (비트 버킷) : 오래된 유닉스 개념으로 시스템 장치로 입력을 받고 아무것도 수행하지 않는다.
3) 표준 입력 재지정
(1) cat - 파일 붙이기
: 하나 이상의 파일을 읽어 들여서 표준 출력으로 그 내용을 복사한다.
- cat [file ...] : cat ls-output.txt를 입력하면 파일의 내용을 표시한다.
less 파일명으로 입력하면 출력내용을 페이지 단위로 표준 출력을 표시하지만, cat 파일명으로 입력하면 출력내용을 바로 아래에 출력한다.
또한, 'cat movie.mpeg.0* > movie.mpeg' 로 입혁하면 나뉜 여러 파일을 하나의 파일로 만들 수 있다.
'cat > lazy_dog.txt' 를 입력하면 명령어 다음에 파일에 쓰고 싶은 텍스트를 입력하고, 끝에 CTRL-D를 입력하면 내용이 파일에 작성된다.
2. 파이프라인
- 표준 입력으로 부터 데이터를 읽고, 표준 출력으로 데이터를 전송하는 명령어의 능력이다.
- 파이프 연산자 | (수직바) 기호를 사용해서 명령어의 표준 출력을 또 다른 명령어의 표준 입력과 연결시킬 수 있다.
- command1 | command2
1) 필터
(1) sort : 두 개의 내용을 하나의 목록으로 만들어 정렬하는 명령어.
- ls /bin /usr/bin | sort | less : /bin 디렉토리와 /usr/bin 디렉토리를 하나의 목록으로 만들어서 less 명령어를 통해 ls 결과를 보여준다.
(2) uniq 명령어 : 중복줄 제거 및 표시
- ls /bin /usr/bin | sort | uniq | less : 정렬된 데이터를 입력받아 중복된 내용을 제거해준다. 중복된 내용을 보고싶다면 'uniq -d'
(3) wc 명령어 : 라인, 단어 개수 및 파일 크기 출력
- wc ls-output.txt (wc 명령어 파일명) : (라인 수) (단어 개수) (파일 크기) 순으로 출력.
(4) grep : 패턴과 일치하는 라인 출력
- grep pattern [file ... ]
zip 라는 글자가 포함된 모든 프로그램을 찾는 명령어이다.
- -i 옵션 : 검색할 때 대소문자 구분하지 않고 검색.
- -v 옵션 : 패턴과 일치하지 않는 라인만 출력하도록 검색.
(5) head / tail : 파일의 처음/끝 부분 출력
- 기본적으로 10줄만 출력
- -n 옵션을 통해서 길이를 조절할 수 있다.
(6) tee : 표준 입력에서 데이터를 읽고, 표준 출력과 파일에 출력
- ls /usr/bin | tee ls.txt | grep zip : grep 필터를 통해 zip가 포함된 프로그램을 ls.txt에 저장하고 적용된 결과를 출력한다.
'스터디 > 리눅스 커맨드라인' 카테고리의 다른 글
[리눅스] 8. 고급 키보드 기법 (0) | 2022.04.18 |
---|---|
[리눅스] 7. 확장과 인용 (0) | 2022.04.18 |
[리눅스] 5. 명령어와 친해지기 (0) | 2022.04.10 |
[리눅스] 4. 파일과 디렉토리 조작 (0) | 2022.04.04 |
[리눅스] 리눅스 시스템 디렉토리 (0) | 2022.04.04 |