/ / 리눅스에서 파이프를 사용하는 방법

Linux에서 파이프를 사용하는 방법

랩톱의 Linux 터미널

Linux 파이프를 사용하여 명령 행 방법을 구성유틸리티가 협력합니다. 독립형 명령 모음을 활용하여 단일 프로세스 팀으로 전환하여 복잡한 프로세스를 단순화하고 생산성을 향상 시키십시오. 우리는 당신에게 방법을 보여줍니다.

파이프는 어디에나 있습니다

파이프는 가장 유용한 명령 줄 중 하나입니다Linux 및 Unix와 같은 운영 체제의 기능. 파이프는 수많은 방법으로 사용됩니다. 우리 웹 사이트뿐만 아니라 모든 웹 사이트에서 Linux 명령 행 기사를 보면 파이프가 더 자주 나타나지 않는 것을 볼 수 있습니다. How-To Geek의 Linux 기사 중 일부를 검토했으며 파이프가 모든 방식으로 사용되었습니다.

Linux 파이프를 사용하면 다음 작업을 수행 할 수 있습니다쉘에서 기본적으로 지원되지 않습니다. 그러나 Linux 디자인 철학은 전용 기능을 매우 잘 수행하고 불필요한 기능 (“한 가지 일만하고 잘 수행”) 진언없이 많은 작은 유틸리티를 갖추어야하기 때문에 파이프와 함께 명령 문자열을 연결하여 출력 할 수 있습니다. 한 명령의 다른 명령이 다른 명령의 입력이됩니다. 당신이 관장하는 각각의 명령은 팀에게 독특한 재능을 가져다 주었고, 곧 당신은 승리 한 분대를 구성했습니다.

간단한 예

많은 디렉토리가 있다고 가정 해 봅시다.다른 유형의 파일. 해당 디렉토리에 특정 유형의 파일이 몇 개 있는지 알고 싶습니다. 이 작업을 수행하는 다른 방법이 있지만이 연습의 목적은 파이프를 도입하는 것이므로 파이프로 수행 할 것입니다.

다음을 사용하여 파일 목록을 쉽게 얻을 수 있습니다. ls:

ls

디렉토리의 파일 인 경우 터미널 창에서 수집

관심있는 파일 형식을 구분하기 위해 grep. 파일 이름 또는 파일 확장자에“page”라는 단어가있는 파일을 찾고 싶습니다.

쉘 특수 문자“|”에서 출력을 파이프 ls 으로 grep.

ls | grep "page"

ls -l | 터미널 창에서 grep "page"

grep 검색 패턴과 일치하는 행을 인쇄합니다. 따라서“.page”파일 만 포함 된 목록을 제공합니다.

터미널 창에 페이지 파일 목록

이 간단한 예조차도 파이프의 기능을 보여줍니다. 의 출력 ls 터미널 창으로 전송되지 않았습니다. 로 보냈습니다 grep 에 대한 데이터로 grep 작업 명령. 우리가 보는 결과는 grep, 이것이이 체인의 마지막 명령입니다.

체인 확장

파이프 형 명령 체인을 확장 해 봅시다. ".page"파일을 추가하여 wc 명령. 우리는 -l (라인 수) 옵션 wc. 우리는 또한 -l (긴 형식) 옵션을 ls . 우리는 이것을 곧 사용할 것입니다.

ls - | grep "page" | wc -l

LS-| grep "페이지"| 터미널 창에서 wc -l

grep 더 이상 체인의 마지막 명령이 아니므로 출력이 표시되지 않습니다. 의 출력 grep 에 공급된다 wc 명령. 터미널 창에서 볼 수있는 결과는 wc. wc 디렉토리에 69 개의“.page”파일이 있다고보고합니다.

다시 확장 해 봅시다. 우리는 wc 명령 행에서 명령을 내리고 awk. 출력에 9 개의 열이 있습니다. ls 와 더불어 -l (긴 형식) 옵션. 우리는 사용할 것이다 awk 5, 3, 9 열을 인쇄합니다. 파일의 크기, 소유자 및 이름입니다.

ls -l | grep "page" | awk '{print $5 " " $3 " " $9}'

ls -l | grep "페이지"| 터미널 창에서 awk '{print $ 5 ""$ 3 ""$ 9}'

일치하는 각 파일에 대해 해당 열의 목록을 얻습니다.

터미널 창에서 각 일치하는 파일에 대한 세 개의 열 목록

이제 출력을 통해 sort 명령. 우리는 -n 하는 (숫자) 옵션 sort 첫 번째 열은 숫자로 취급해야합니다.

ls -l | grep "page" | awk '{print $5 " " $3 " " $9}' | sort -n

ls -l | grep "페이지"| awk '{print $ 5 ""$ 3 ""$ 9}'| 터미널 창에서 -n을 정렬

출력은 이제 파일 크기 순서로 정렬되며 사용자 정의 된 3 개의 열이 선택됩니다.

터미널 창에서 크기별로 정렬 된 파일

다른 명령 추가

에 추가하여 마무리하겠습니다 tail 명령. 마지막 다섯 줄의 출력 만 나열하도록 지시합니다.

ls -l | grep "page" | awk '{print $5 " " $3 " " $9}' | sort -n | tail -5

ls -l | grep "페이지"| awk '{print $ 5 ""$ 3 ""$ 9}'| 정렬 -n | 터미널 창에서 꼬리 -5

이것은 우리의 명령이 무언가로 번역된다는 것을 의미합니다"이 디렉토리에서 크기별로 다섯 개의 가장 큰".page "파일을 표시하십시오." 모든 입력 내용을 저장하기 위해이 명령 또는 다른 긴 명령을 별칭 또는 셸 함수로 추가 할 수 있습니다.

출력은 다음과 같습니다.

터미널 창에서 크기 순서로 나열된 5 개의 가장 큰 .page 파일

우리는 -r (역) 옵션을 sort 명령 및 사용 head 대신에 tail 출력 상단에서 선을 선택합니다.

ls -l | grep "페이지"| awk '{print $ 5 ""$ 3 ""$ 9}'| 정렬 -rn | 터미널 창에서 헤드 -5

이번에는 5 개의 가장 큰 ".page"파일이 가장 큰 파일부터 가장 작은 파일까지 나열됩니다.

터미널 창에서 역순으로 나열된 5 개의 가장 큰 .page 파일

최근 예

최근 How-To 괴짜 기사의 흥미로운 두 가지 예가 있습니다.

와 같은 일부 명령 xargs명령은 입력이 그들에게 파이프되도록 설계되었습니다. 우리가 가질 수있는 방법은 다음과 같습니다 wc 파이핑하여 여러 파일의 단어, 문자 및 줄을 세십시오. ls 으로 xargs 그런 다음 파일 이름 목록을 wc 마치 그들이 지나간 것처럼 wc 명령 줄 매개 변수로

ls *.page | xargs wc

ls * .page | 터미널 창에서 xargs wc

단어, 문자 및 줄의 총 개수는 터미널 창의 맨 아래에 나열됩니다.

터미널 창의 단어, 문자 및 줄 수

다음은 각 유형의 개수와 함께 현재 디렉토리에서 고유 한 파일 확장자의 정렬 된 목록을 얻는 방법입니다.

ls | rev | cut -d'.' -f1 | rev | sort | uniq -c

LS | 레브 | 컷 -d '.' -f1 | 레브 | 정렬 | 터미널 창에서 uniq -c

여기에는 많은 일이 있습니다.

  • ls: 디렉토리의 파일을 나열합니다
  • 신부님: 파일 이름의 텍스트를 반대로 바꿉니다.
  • 절단: 지정된 구분 기호 "."가 처음 나타날 때 문자열을 잘라냅니다. 이 후의 텍스트는 삭제됩니다.
  • 신부님: 파일 이름 확장명 인 나머지 텍스트를 되돌립니다.
  • 종류: 목록을 알파벳순으로 정렬합니다.
  • 유니크: 목록에서 각 고유 항목의 수를 계산합니다.

출력은 파일 확장자 목록을 알파벳 순으로 각 고유 유형의 개수로 정렬하여 표시합니다.

터미널 창에서 고유 한 파일 확장자 목록

명명 된 파이프

사용할 수있는 또 다른 유형의 파이프가 있습니다.명명 된 파이프라고합니다. 이전 예제의 파이프는 명령 행을 처리 할 때 쉘에 의해 즉시 작성됩니다. 파이프를 작성하여 사용한 다음 폐기합니다. 그것들은 일시적이며 아무런 흔적도 남기지 않습니다. 그것들을 사용하는 명령이 실행되는 동안에 만 존재합니다.

명명 된 파이프는 파일 시스템에서 영구 객체로 표시되므로 다음을 사용하여 볼 수 있습니다. ls. 컴퓨터를 다시 부팅 한 후에도 지속되므로 해당 시점의 읽지 않은 데이터는 삭제되지만 계속 유지됩니다.

명명 된 파이프를 한 번에 많이 사용하여데이터를주고받는 여러 가지 프로세스가 있지만 그 방식을 오랫동안 사용하지는 않았습니다. 의심 할 여지없이 사람들이 여전히 효과를 발휘하고 있지만 최근에 접한 적이 없습니다. 하지만 완벽을 기하기 위해 또는 호기심을 만족시키기 위해 사용 방법은 다음과 같습니다.

명명 된 파이프는 mkfifo 명령. 이 명령은 현재 디렉토리에 "geek-pipe"라는 이름의 파이프를 만듭니다.

mkfifo geek-pipe

터미널 창에서 mkfifo 괴짜 파이프

명명 된 파이프의 세부 사항을 볼 수 있습니다. ls 와 명령 -l (긴 형식) 옵션 :

ls -l geek-pipe

터미널 창에서 ls -l 괴짜 파이프

리스팅의 첫 번째 문자는“p”이며 이는 파이프임을 의미합니다. "d"인 경우 파일 시스템 오브젝트가 디렉토리이고 대시 "-"는 일반 파일임을 의미합니다.

명명 된 파이프 사용

파이프를 사용합시다. 이전 예제에서 사용한 명명되지 않은 파이프는 데이터를 전송 명령에서 수신 명령으로 즉시 전달했습니다. 명명 된 파이프를 통해 전송 된 데이터는 읽을 때까지 파이프에 유지됩니다. 데이터는 실제로 메모리에 저장되므로 명명 된 파이프의 크기는 달라지지 않습니다. ls 데이터가 있는지 여부를 나열합니다.

이 예제에서는 두 개의 터미널 창을 사용합니다. 레이블을 사용하겠습니다.

# Terminal-1

하나의 터미널 창에서

# Terminal-2

다른 하나에서는 서로 구별 할 수 있습니다. 해시“#”은 쉘이 뒤에 오는 것이 주석임을 알리고 무시하도록합니다.

이전 예제 전체를 살펴보고 명명 된 파이프로 리디렉션 해 보겠습니다. 따라서 하나의 명령으로 명명되지 않은 파이프와 명명 된 파이프를 모두 사용합니다.

ls | rev | cut -d'.' -f1 | rev | sort | uniq -c > geek-pipe

LS | 레브 | 컷 -d '.' -f1 | 레브 | 정렬 | uniq -c> 터미널 창의 괴짜 파이프

아무 일도 일어나지 않을 것입니다. 그래도 명령 프롬프트로 돌아 오지 않아 무언가가 진행되고 있음을 알 수 있습니다.

다른 터미널 창에서 다음 명령을 발행하십시오.

cat < geek-pipe

고양이 <터미널 창에서 괴짜 파이프

명명 된 파이프의 내용을 cat그래서 cat 해당 내용을 두 번째 터미널 창에 표시합니다. 결과는 다음과 같습니다.

터미널 창에 표시된 명명 된 파이프의 내용

그리고 첫 번째 터미널 창에서 명령 프롬프트로 돌아 왔음을 알 수 있습니다.

터미널 창에서 완료된 작업 및 명령 프롬프트

그래서 방금 일어난 일입니다.

  • 일부 출력을 명명 된 파이프로 리디렉션했습니다.
  • 첫 번째 터미널 창이 명령 프롬프트로 돌아 가지 않았습니다.
  • 데이터는 두 번째 터미널의 파이프에서 읽을 때까지 파이프에 남아있었습니다.
  • 첫 번째 터미널 창에서 명령 프롬프트로 돌아 왔습니다.

첫 번째 터미널 창에서 명령을 백그라운드 작업으로 실행할 수 있다고 생각할 수 있습니다. & 명령의 끝까지. 그리고 당신은 옳을 것입니다. 이 경우 즉시 명령 프롬프트로 돌아 왔을 것입니다.

요점 아니 백그라운드 처리를 사용하면 명명 된 파이프가 막는 과정. 명명 된 파이프에 무언가를 넣는 것만 열립니다파이프의 한쪽 끝. 다른 쪽 끝은 읽기 프로그램이 데이터를 추출 할 때까지 열리지 않습니다. 커널은 파이프의 다른 쪽 끝에서 데이터를 읽을 때까지 첫 번째 터미널 창에서 프로세스를 일시 중단합니다.

파이프의 힘

오늘날 명명 된 파이프는 참신한 행위입니다.

반면에 낡은 리눅스 파이프는터미널 윈도우 툴킷에서 사용할 수있는 가장 유용한 도구 중 하나입니다. Linux 명령 행이 활기를 띠기 시작하고 명령 모음을 조정하여 하나의 응집력있는 성능을 생성 할 수있게되면 완전히 새로운 파워 업을 얻게됩니다.

이별 힌트 : 한 번에 하나의 명령을 추가하고 해당 부분이 작동하도록 한 다음 다음 명령으로 파이핑하여 파이프 명령을 작성하는 것이 가장 좋습니다.