본문 바로가기

CentOS/Study

[Study32]Linux Bash 셸 기술로 생산성 향상 - 파이프(Pipe)

반응형

파이프

파이프(Pipe)는 앞에 실행한 명령어의 출력 결과를 뒤에 실행하는 명령어의 입력 값으로 넣어 주는 기능입니다. 이를 통해 파이프(|)를 사용하면 여러 명령어를 동시에 연결하여 사용할 수 있습니다.

예를 들어, ls -al 명령을 사용하게 되면 모든 파일을 보여주므로 한 화면을 넘는 많은 파일을 보여 주게 됩니다. 이때 "ls -al | more" 를 쓰게 되면 ls 명령에 대한 결과를 more 명령을 통해 확인해 볼 수 있습니다. 이처럼 파이프를 사용하면 출력 결과를 보다 효과적인 방식으로 다룰 수 있습니다.

파이프는 여러 가지 명령어와 함께 사용할 수 있습니다. 예를 들어, ps -ef 명령어를 사용하면 프로세스의 모든 정보를 출력합니다. 그런데 이 결과가 많아서 한 화면을 넘는 경우 "ps -ef | more" 명령어를 사용하면 한 페이지가 넘는 페이지 출력 방법을 지정할 수 있습니다. 또 다른 예로, 출력 결과를 파일로 저장하고 싶다면 "CMD > file.log" 명령어를 사용하면 됩니다.

또한, 파이프 중간에 tee 명령어를 사용하여 입력을 출력으로 보내기 전에 파일로 기록할 수 있습니다. 이를 통해 파이프로 전달되는 출력 내용을 동시에 파일로 저장할 수 있습니다. tee 명령어의 사용법은 "CMD | tee file.log"입니다.

실시간 모니터링을 하면서 파일로 내용을 저장하고 싶다면 while true 명령어를 사용하여 출력 결과를 지속적으로 모니터링할 수 있습니다. 이때 tee 명령어를 사용하여 출력 결과를 파일로 저장할 수 있습니다.

파이프를 사용할 때 주의할 점은 파이프를 연결하는 명령어 간에 데이터 형식이 일치해야 한다는 것입니다. 그렇지 않으면 데이터가 손상되거나 오류가 발생할 수 있습니다.

파이프는 명령어를 보다 효율적으로 사용할 수 있도록 도와주는 매우 유용한 기능입니다. 파이프를 적극 활용하여 작업 효율성을 높여보세요!

 

명령어 형식

# CMD | CMD

위와 같은 명령어 형식은 여러 명령어로 구성되어 있으며, 이를 통해 다양한 작업을 수행할 수 있습니다. 명령어를 이해하기 위해서는 명령어의 구성 요소와 그 의미를 알아야 합니다. 예를 들어, 파일을 복사하기 위해서는 "copy" 명령어를 사용하고, 디렉토리를 이동하기 위해서는 "cd" 명령어를 사용합니다. 그리고 파일을 삭제하기 위해서는 "del" 명령어를 사용합니다. 이러한 명령어들은 컴퓨터 사용에 있어서 매우 중요합니다. 또한, 자신이 원하는 작업을 수행하기 위해서는 적절한 명령어를 사용하는 것이 필수적입니다. 이러한 이유로, 명령어를 잘 이해하고 사용하는 것이 권장됩니다. 명령어를 이해하는 것은 처음에는 어려울 수 있지만, 계속해서 사용하면서 익숙해질 수 있습니다. 따라서, 명령어를 자주 사용하고, 이해하려는 노력을 기울이는 것이 중요합니다.

 

 ' | '(Pipe) 실습

# ps -ef           /* 모든 프로세스 정보 출력 */
# ps -ef | more    /* CMD | more : 한 페이지가 넘는 페이지 출력 방법 지정 */
# ps -ef | grep sshd    /* 프로세스 결과 중에서 sshd 패턴 검색 */
# ls -al / | sort -r | more /* CMD | sort를 하여 buffer에 넣고 buffer 내용을 한 화면 단위로 출력 */

위의 예제에서는 세 가지 명령어를 파이프를 이용하여 동시에 사용하는 방법에 대해 살펴보았습니다. 이러한 방법은 명령어를 보다 효율적으로 사용할 수 있도록 도와줍니다. "ls" 명령어를 이용하여 디렉토리의 파일 리스트를 출력하는 동시에, "sort" 명령어를 이용하여 정렬하고, "more" 명령어를 이용하여 한 페이지씩 출력할 수 있습니다. 이러한 방법을 사용하면, 복잡한 작업을 보다 효율적으로 처리할 수 있습니다.

파이프를 이용하여 여러 명령어를 동시에 사용하는 방법은, 리눅스를 사용하면서 필수적으로 알아야 하는 명령어 중 하나입니다. 이러한 명령어를 잘 이해하고 사용하는 것은, 작업 효율성을 높이는 데 큰 도움이 됩니다.

또한, 파이프를 이용하여 출력 결과를 파일로 저장할 수도 있습니다. 이를 위해서는 "tee" 명령어를 사용하면 됩니다. "tee" 명령어는 입력을 출력으로 보내기 전에 파일로 기록할 수 있습니다. 이를 이용하여 출력 결과를 파일로 저장하면, 나중에 다시 사용할 수 있습니다.

파이프를 이용하여 실시간 모니터링도 가능합니다. 예를 들어, "ps" 명령어를 이용하여 프로세스 정보를 출력하고, "grep" 명령어를 이용하여 특정 패턴을 검색하는 동시에, "tee" 명령어를 이용하여 파일로 출력 결과를 저장할 수 있습니다. 이러한 방법을 이용하여, 작업 중에 발생하는 문제점을 빠르게 파악하고 대처할 수 있습니다.

파이프를 이용하여 여러 명령어를 동시에 사용하는 방법은, 리눅스를 사용하면서 필수적으로 알아야 하는 명령어 중 하나입니다. 이러한 명령어를 잘 이해하고 사용하는 것은, 작업 효율성을 높이는 데 큰 도움이 됩니다. 이제 여러분도 이러한 방법을 배워, 리눅스 작업을 보다 효율적으로 처리해 보세요!

 

명령어 비교

아래 명령어 비교는 'ps -ef'와 'grep inetd' 명령어를 사용하는 두 가지 방법을 보여줍니다.

# ps -ef > file.log
# grep inetd file.log

첫 번째 방법은 'ps -ef' 명령어의 출력을 파일에 저장하고, 그 파일에서 'grep inetd' 명령어를 실행합니다.

# ps -ef | grep inetd

두 번째 방법은 'ps -ef' 명령어를 실행하고, 그 출력에서 'inetd'를 찾기 위해 'grep inetd' 명령어를 실행합니다. 이 두 가지 방법은 결과적으로 같은 결과를 얻지만, 첫 번째 방법은 중간 파일을 생성하므로 불필요한 디스크 공간을 차지할 수 있습니다. 반면에 두 번째 방법은 중간 파일을 생성하지 않으므로, 더욱 효율적입니다.

[참고] Pipe와 함께 사용 할 수 있는 명령어

파이프(Pipe)를 이용하여 여러 명령어를 동시에 사용하는 방법은 리눅스를 사용하면서 필수적으로 알아야 하는 명령어 중 하나입니다. 이러한 명령어를 잘 이해하고 사용하는 것은 작업 효율성을 높이는 데 큰 도움이 됩니다.

리눅스에서 명령어를 입력하면 그 결과를 화면에 출력합니다. 그러나 이 결과를 다른 명령어에 입력하여 결과를 처리하거나, 파일로 저장하거나, 실시간으로 모니터링하는 등의 작업을 수행하고 싶을 때 파이프를 사용합니다.

파이프는 "|" 기호를 사용하여 구분합니다. 예를 들어, "ls" 명령어를 이용하여 디렉토리의 파일 리스트를 출력하는 동시에, "sort" 명령어를 이용하여 정렬하고, "more" 명령어를 이용하여 한 페이지씩 출력할 수 있습니다. 이러한 방법을 사용하면, 복잡한 작업을 보다 효율적으로 처리할 수 있습니다.

파이프를 이용하여 출력 결과를 파일로 저장할 수도 있습니다. 이를 위해서는 "tee" 명령어를 사용하면 됩니다. "tee" 명령어는 입력을 출력으로 보내기 전에 파일로 기록할 수 있습니다. 이를 이용하여 출력 결과를 파일로 저장하면, 나중에 다시 사용할 수 있으며 이를 위해서는 다음과 같은 명령어를 사용할 수 있습니다:

ls | tee file.txt

파이프를 이용하여 실시간 모니터링도 가능합니다. 예를 들어, "ps" 명령어를 이용하여 프로세스 정보를 출력하고, "grep" 명령어를 이용하여 특정 패턴을 검색하는 동시에, "tee" 명령어를 이용하여 파일로 출력 결과를 저장할 수 있습니다. 이러한 방법을 이용하여, 작업 중에 발생하는 문제점을 빠르게 파악하고 대처할 수 있습니다.

파이프를 이용하여 여러 명령어를 동시에 사용하는 방법은, 리눅스를 사용하면서 필수적으로 알아야 하는 명령어 중 하나입니다. 이러한 명령어를 잘 이해하고 사용하는 것은, 작업 효율성을 높이는 데 큰 도움이 됩니다. 이제 여러분도 이러한 방법을 배워, 리눅스 작업을 보다 효율적으로 처리해 보세요!

 

출력 결과를 파일로 저장

파이프(Pipe)를 이용하여 출력 결과를 파일로 저장하는 예제 코드입니다.

# CMD > file.log

위의 명령어는 "CMD" 명령어를 실행하면서 출력 결과를 "file.log" 파일로 저장하는 명령어입니다. 이 명령어는 "CMD" 명령어의 출력 결과를 "file.log" 파일로 저장하기 때문에 화면에는 아무것도 출력되지 않습니다.

# CMD | tee file.log

위의 명령어는 "CMD" 명령어를 실행하면서 출력 결과를 "tee" 명령어를 이용하여 화면에 출력하면서 동시에 "file.log" 파일로 저장하는 명령어입니다. 이 명령어는 "CMD" 명령어의 출력 결과를 화면에 출력하면서 동시에 "file.log" 파일로 저장하기 때문에 화면에 출력 결과가 출력되면서 "file.log" 파일에도 저장됩니다.

아래는 예제 코드입니다.

# cal 2002 > file.log

위의 명령어는 "cal 2002" 명령어를 실행하면서 출력 결과를 "file.log" 파일로 저장하는 명령어입니다.

# cal 2002 | tee file2.log

위의 명령어는 "cal 2002" 명령어를 실행하면서 출력 결과를 "tee" 명령어를 이용하여 화면에 출력하면서 동시에 "file2.log" 파일로 저장하는 명령어입니다.

 

실시간 모니터링 및 파일 출력 예제 코드

실시간 모니터링을 하면서 출력 결과를 파일로 저장하는 예제 코드입니다.

  1. while true 명령어를 사용하여 출력 결과를 지속적으로 모니터링합니다.
  2. 출력 결과가 "grep" 명령어를 이용하여 특정 패턴을 검색합니다.
  3. "tee" 명령어를 이용하여 출력 결과를 파일로 저장합니다.
# while true
> do
> echo
> echo "====================`date`======================"
> ps -ef | head -1
> ps -ef | grep testfile
> sleep 2
> done

위의 코드에서는 "while true" 명령어를 사용하여 출력 결과를 지속적으로 모니터링합니다. "echo" 명령어를 이용하여 시간 정보를 출력하고, "ps -ef" 명령어를 이용하여 프로세스 정보를 출력합니다. "head -1" 명령어를 이용하여 출력 결과의 첫 번째 줄만 출력하고, "grep" 명령어를 이용하여 특정 패턴을 검색합니다. "sleep" 명령어를 이용하여 출력 주기를 설정합니다.

# while true
> do
> echo
> echo "===========`date`========="
> ps -ef | grep testfile | tee -a file.log    (> w root >> file.log)
> sleep 2
> done

위의 코드에서는 "while true" 명령어를 사용하여 출력 결과를 지속적으로 모니터링합니다. "echo" 명령어를 이용하여 시간 정보를 출력하고, "ps -ef" 명령어를 이용하여 프로세스 정보를 출력합니다. "grep" 명령어를 이용하여 특정 패턴을 검색하고, "tee" 명령어를 이용하여 출력 결과를 파일로 저장합니다. "tee -a" 옵션을 사용하여 기존 파일에 추가로 저장할 수 있습니다. 파일에 저장할 때는 "> w root >> file.log"와 같은 형식으로 입력할 수 있습니다.

이러한 방법을 이용하여, 출력 결과를 실시간으로 모니터링하면서 파일로 저장할 수 있습니다. 이를 이용하여, 나중에 다시 사용할 수 있는 유용한 정보를 쉽게 저장할 수 있습니다.

 

실시간 모니터링 하면서 파일로 내용을 저장

[TERM1] 첫번째 윈도우

# cd /test ; rm –rf /test/*

현재 작업 디렉토리를 /test로 변경하고, /test 디렉토리 안의 모든 파일을 삭제합니다.

# script –a file.log

script 명령어를 실행하고, 로그 파일 이름을 file.log로 지정합니다. 이 명령어는 현재 터미널의 모든 출력 내용을 파일로 기록합니다.

# ls

현재 디렉토리의 파일 목록을 출력합니다.

# date

현재 날짜와 시간을 출력합니다.

# cal

현재 달의 달력을 출력합니다.

# exit

현재 터미널을 종료합니다.

[TERM1]에서 실행한 명령어의 모든 출력 내용은 file.log 파일에 기록됩니다.

# cat file.log

file.log 파일의 내용을 출력합니다.

[TERM2] 두번째 윈도우

# tty

현재 터미널의 이름을 출력합니다.

[TERM2]에서는 아무 작업도 하지 않습니다.

[TERM3] 세번째 윈도우

# script -a /dev/null | tee /dev/pts/1 | tee /dev/pts/2

script 명령어를 실행하고, 출력 결과를 /dev/null로 보냅니다. 이어서 tee 명령어를 두 번 실행하고, 각각 /dev/pts/1과 /dev/pts/2로 출력 결과를 보냅니다. 이 명령어는 현재 터미널의 모든 출력 내용을 /dev/pts/1과 /dev/pts/2로 동시에 전송합니다.

# ls

현재 디렉토리의 파일 목록을 출력합니다.

# date

현재 날짜와 시간을 출력합니다.

# cal

현재 달의 달력을 출력합니다.

# exit

현재 터미널을 종료합니다.

[TERM3]에서 실행한 명령어의 모든 출력 내용은 /dev/pts/1과 /dev/pts/2로 동시에 전송되고, 각각의 터미널에서 내용을 확인할 수 있습니다.

반응형