|
)표준 출력을 받아서 다음 명령어의 표준 입력으로 전달해주는 역할
파이프는 |
문자를 사용하여 파이프라인을 만드는 것으로 하나의 명령어 출력을 저장해서 다른 명령어로 전달할 수 있다.
[COMMAND 1] 의 표준 출력을 [COMMAND 2] 의 표준 입력으로 전달
[COMMAND 1] | [COMMAND 2]
ls | head
ls
: list directory contents-1
: 모든 결과를 한줄에 하나씩 표현-a
: do not ignore entries starting with .
head
: Print the first 10 lines of each FILE to standard output.-n
: print the first NUM lines instead of the first 10╭─ ~
╰─ ls -1a /usr/bin | head -n 5
.
..
GET
HEAD
NF
ls | wc
wc
: Print newline, word, and byte counts-l
: print the newline counts╭─ ~
╰─ ls -1a /usr/bin | wc -l
878
리다이렉션과 파이프 모두 표준 스트림을 이용하고 상호작용하는 점은 동일하다.
리다이렉션은 표준 출력을 특정 파일로 출력하는 반면, 파이프는 두 명령어를 연결해서 앞의 명령어의 출력을 뒤 명령어의 입력으로 전달하고 이 과정에서 파일이 필요없다.
>
를 이용해 표준 출력을 파일로 출력하는 리다이렉션과는 다르게 파이프는 파일이 개입하지 않는다.
파이프와 리다이렉션을 섞어서 함께 사용하는 것도 가능하다.
date | rev
date > rev
╭─ ~/test
╰─ date
Mon Sep 18 16:19:43 KST 2023
╭─ ~/test
╰─ date > rev
╭─ ~/test
╰─ date | rev
3202 TSK 25:91:61 81 peS noM
╭─ ~/test
╰─ ls -l
total 28
-rw-r--r-- 1 hyojin hyojin 29 Sep 18 16:19 rev
...(생략)...
╭─ ~/test
╰─ cat rev
Mon Sep 18 16:19:48 KST 2023
ls /usr/bin -1 | wc -l > programs_count.txt
ls /usr/bin -1 | wc -l
> programs_count.txt
╭─ ~/test
╰─ ls -l
(빈 폴더)
╭─ ~/test
╰─ ls /usr/bin -1 | wc -l > programs_count.txt
╭─ ~/test
╰─ ls -l
(programs_count.txt 파일이 새롭게 생긴 것을 볼 수 있음)
-rw-r--r-- 1 hyojin hyojin 4 Sep 19 18:00 programs_count.txt
╭─ ~/test
╰─ cat programs_count.txt
876
cat
: Concatenate FILE(s) to standard output. With no FILE, or when FILE is -, read standard input.tr
: Translate, squeeze, and/or delete characters from standard input, writing to standard output.-d
: delete characters in SET1, do not translate'[:alpha:]'
또는 [:alpha:]
'[:blank:]'
또는 [:blank:]
tr -d :
╭─ ~/test
╰─ cat novel.txt
she sellls seashells by the seashore.
╭─ ~/test
╰─ cat novel.txt | tr s S (--> 모든 s를 S로 변경)
She SelllS SeaShellS by the SeaShore.
╭─ ~/test
╰─ cat novel.txt | tr a-z A-Z (--> a-z로 모든 소문자를 A-Z의 모든 대문자로 변경)
SHE SELLLS SEASHELLS BY THE SEASHORE.
╭─ ~/test
╰─ cat novel.txt
she sellls seashells by the seashore.
╭─ ~/test
╰─ cat novel.txt
she sellls seashells by the seashore.
╭─ ~/test
╰─ cat novel.txt | tr -d s (--> 모든 s가 지워짐)
he elll eahell by the eahore.
╭─ ~/test
╰─ cat novel.txt
she sellls seashells by the seashore.
번호만 있는 새로운 파일 생성
╭─ ~/test
╰─ cat data.txt
Todd: 951 873 1234
Margaret: 415 565 6999
Juan: 212 720 3911
Lando: 961 112 3424
╭─ ~/test
╰─ cat data.txt | tr -d '[:alpha:]'
: 951 873 1234
: 415 565 6999
: 212 720 3911
: 961 112 3424
╭─ ~/test
╰─ cat data.txt | tr -d '[:blank:]'
Todd:9518731234
Margaret:4155656999
Juan:2127203911
Lando:9611123424
╭─ ~/test
╰─ cat data.txt | tr -d :
Todd 951 873 1234
Margaret 415 565 6999
Juan 212 720 3911
Lando 961 112 3424
╭─ ~/test
╰─ cat data.txt | tr -d '[:alpha:]' | tr -d '[:blank:]' | tr -d : > phones.txt
╭─ ~/test
╰─ cat phones.txt
9518731234
4155656999
2127203911
9611123424
╭─ ~/test
╰─ cat data.txt
Todd: 951 873 1234
Margaret: 415 565 6999
Juan: 212 720 3911
Lando: 961 112 3424
tac | rev
tac
rev
╭─ ~/test
╰─ cat words.txt
desserts
live
knits
regal
knits
pupils
╭─ ~/test
╰─ rev words.txt
stressed
evil
stink
lager
stink
slipup
╭─ ~/test
╰─ tac words.txt
pupils
knits
regal
knits
live
desserts
╭─ ~/test
╰─ tac words.txt | rev
slipup
stink
lager
stink
evil
stressed
╭─ ~/test
╰─ cat words.txt
desserts
live
knits
regal
knits
pupils
cat | head | tail
cat
-n
, --numbers
: 줄 번호가 생긴다.╭─ ~/test
╰─ head -7 programs.txt
GET
HEAD
NF
POST
X11
[
aa-enabled
╭─ ~/test
╰─ cat -n programs.txt
1 GET
2 HEAD
3 NF
4 POST
5 X11
6 [
7 aa-enabled
8 aa-exec
(...생략...)
874 znew
875 zsh
876 zsh5
╭─ ~/test
╰─ cat -n programs.txt | head -7 | tail -3
5 X11
6 [
7 aa-enabled
ls | sort | head > output.txt
ls -lh
: 파일 크기를 메가바이트나 킬로바이트나 기가바이트로 표기하여 파일 목록 보여줌sort
: sort lines of text files-r
: reverse the result of comparisons-h
: 숫자와 사람이 읽기 쉬운 형식을 모두 고려하여 정렬-n
옵션과의 차이점 : -n
옵션은 순전히 숫자 크기에 따라 정렬하고 문자열은 정렬에서 제외됨-k[정렬하고자 하는 열 번호]
: 데이터의 특정한 열을 문자로 인식하여 정렬╭─ ~/test
╰─ ls -lh /usr/bin
total 102M
lrwxrwxrwx 1 root root 11 Jan 29 2022 GET -> lwp-request
lrwxrwxrwx 1 root root 11 Jan 29 2022 HEAD -> lwp-request
lrwxrwxrwx 1 root root 4 Feb 17 2020 NF -> col1
lrwxrwxrwx 1 root root 11 Jan 29 2022 POST -> lwp-request
lrwxrwxrwx 1 root root 1 Mar 25 2022 X11 -> .
-rwxr-xr-x 1 root root 51K Feb 8 2022 '['
-rwxr-xr-x 1 root root 35K Oct 19 2022 aa-enabled
-rwxr-xr-x 1 root root 35K Oct 19 2022 aa-exec
(...생략...)
-rwxr-xr-x 1 root root 990K Feb 13 2022 zsh
-rwxr-xr-x 1 root root 852 Feb 13 2022 zsh5
╭─ ~/test
╰─ ls -lh /usr/bin | sort -k5hr | head -n 5
-rwxr-xr-x 1 root root 16M May 29 21:08 snap
-rwxr-xr-x 1 root root 5.7M Jun 11 14:26 python3.10
-rwxr-xr-x 1 root root 3.7M Aug 18 13:12 vim.basic
-rwxr-xr-x 2 root root 3.7M May 24 02:18 perl
-rwxr-xr-x 2 root root 3.7M May 24 02:18 perl5.34.0
╭─ ~/test
╰─ ls -lh /usr/bin | sort -k5hr | tail -n 5
lrwxrwxrwx 1 root root 3 May 17 03:45 infotocap -> tic
lrwxrwxrwx 1 root root 2 Apr 8 2022 unxz -> xz
lrwxrwxrwx 1 root root 2 Apr 8 2022 xzcat -> xz
lrwxrwxrwx 1 root root 1 Mar 25 2022 X11 -> .
total 102M
╭─ ~/test
╰─ ls -lh /usr/bin | sort -k5hr | head -n 5 > top5_big_file.txt
╭─ ~/test
╰─ cat top5_big_file.txt
-rwxr-xr-x 1 root root 16M May 29 21:08 snap
-rwxr-xr-x 1 root root 5.7M Jun 11 14:26 python3.10
-rwxr-xr-x 1 root root 3.7M Aug 18 13:12 vim.basic
-rwxr-xr-x 2 root root 3.7M May 24 02:18 perl
-rwxr-xr-x 2 root root 3.7M May 24 02:18 perl5.34.0
가장 큰 파일을 찾고 싶을 때는
du
명령어를 사용하는 것이 더 적합하다.
du
: estimate file space usage-a
: 숨김 파일까지 포함한 전체 목록-h
: 읽기 쉬운 사이즈로 표현╭─ ~/test
╰─ du -ah /usr/bin | sort -h | tail -10
1.9M /usr/bin/x86_64-linux-gnu-dwp
2.1M /usr/bin/busybox
3.1M /usr/bin/x86_64-linux-gnu-ld.gold
3.2M /usr/bin/tilix
3.6M /usr/bin/git
3.7M /usr/bin/perl
3.7M /usr/bin/vim.basic
5.7M /usr/bin/python3.10
16M /usr/bin/snap
99M /usr/bin
╭─ ~/test
╰─ du -ah /usr/bin | sort -h | tail -10 | head -9
1.9M /usr/bin/x86_64-linux-gnu-dwp
2.1M /usr/bin/busybox
3.1M /usr/bin/x86_64-linux-gnu-ld.gold
3.2M /usr/bin/tilix
3.6M /usr/bin/git
3.7M /usr/bin/perl
3.7M /usr/bin/vim.basic
5.7M /usr/bin/python3.10
16M /usr/bin/snap
tee
명령어
[COMMAND 1] | tee file.txt | [COMMAND 2]
tee
: read from standard input and write to standard output and files
두 파이프 사이에 tee
를 두면 첫번째 명령어의 결과를 받아서 특정한 파일(file.txt)에 저장하고 다음 명령어로 넘겨준다.
즉, 이 명령어를 사용하면 파이프라인 중간에 있는 내용을 한 명령줄 안에서 출력도 함께 할 수 있다.
╭─ ~/test
╰─ du -ha /usr/bin | sort -h | tail -4 | head -3
3.7M /usr/bin/vim.basic
5.7M /usr/bin/python3.10
16M /usr/bin/snap
╭─ ~/test
╰─ du -ha /usr/bin | sort -h | tail -4 | head -3 > size_list2.txt
╭─ ~/test
╰─ cat size_list2.txt
3.7M /usr/bin/vim.basic
5.7M /usr/bin/python3.10
16M /usr/bin/snap
아래 명령어를 사용하면 파이프를 통해 전체 파일이 정렬된 du | sort
의 출력이 tee
에 표준입력으로 전달되고 tee
는 이 결과를 size_list.txt로 저장하고 동시에 tail
로 전달한다.
╭─ ~/test
╰─ du -ha /usr/bin | sort -h | tee size_list.txt | tail -4 | head -3
3.7M /usr/bin/vim.basic
5.7M /usr/bin/python3.10
16M /usr/bin/snap
정렬된 것들을 tail
과 head
로 줄이기 전의 값이 size_list.txt 파일에 저장되어 있다.
╭─ ~/test
╰─ cat size_list.txt
0 /usr/bin/GET
0 /usr/bin/HEAD
0 /usr/bin/NF
(...생략...)
3.2M /usr/bin/tilix
3.6M /usr/bin/git
3.7M /usr/bin/perl
3.7M /usr/bin/vim.basic
5.7M /usr/bin/python3.10
16M /usr/bin/snap
99M /usr/bin