Windows PowerShell 명령어로 Unix Tail 명령어 구현하기

  1. Win 32의 tail을 사용하여 tail 유닉스 명령 기능 달성
  2. Get-Content로 Windows PowerShell에서 tail 유닉스 명령 기능 달성
  3. cat으로 Windows PowerShell에서 tail 유닉스 명령 기능 달성
Windows PowerShell 명령어로 Unix Tail 명령어 구현하기

유닉스 운영 체제에는 OS 명령어 tail이 포함되어 있습니다. tail 프로그램의 목적은 텍스트 파일 또는 파이프 데이터의 끝 부분을 표시하는 것입니다.

예상 출력은 파일의 마지막 줄입니다. 줄 수는 다양할 수 있습니다. 동일한 명령을 여러 파일과 함께 사용하여 표준 출력을 인쇄할 수 있습니다.

유닉스 외에도 tail 명령은 유닉스 유사 시스템, FreeDOS 및 MSX-DOS 시스템을 지원합니다.

Windows PowerShell에서는 크로스 플랫폼 애플리케이션의 Windows 버전에서 명령줄 셸 명령을 실행하여 다양한 기능에서 자동화를 달성할 수 있습니다. 그러나 여기에 사용된 명령은 유닉스 유사 시스템에서 사용되는 표준 스크립팅 명령과 다릅니다.

Windows PowerShell에서 tail과 유사한 기능을 수행하는 몇 가지 수용 가능한 방법이 있습니다.

Win 32의 tail을 사용하여 tail 유닉스 명령 기능 달성

이 기능을 달성하는 일반적인 방법 중 하나는 Windows PowerShell용 tail-f 프로그램인 Tail for Win32를 사용하는 것입니다. 이는 파일 변경 사항을 추적하고 사용자가 실시간으로 변경 사항을 추적할 수 있도록 합니다. 그러나 사용자는 전체적으로 다른 프로그램을 사용해야 하며, 아래 링크를 통해 사용할 수 있습니다: http://tailforwin32.sourceforge.net. 따라서 Windows 시스템을 위한 PowerShell 전용 대안을 찾고 있는 사용자에게는 적합한 솔루션이 아닙니다.

하지만 이와 관련된 몇 가지 수용 가능한 PowerShell 기반 솔루션도 있습니다.

Get-Content로 Windows PowerShell에서 tail 유닉스 명령 기능 달성

가장 효과적인 방법 중 하나는 Get-Content를 사용하는 것입니다. 이어서 -Tail n을 사용하며, 여기서 n은 출력으로 받아야 할 줄 수입니다.

Windows PowerShell의 초기 버전인 V1 및 V2에서는 이 기능이 Get-Content 명령 뒤에 -Wait 명령을 추가하여 달성되었습니다. 파일이 실시간으로 변경되고 있는 경우, 변경 사항을 추적할 수 있도록 Wait 명령이 사용됩니다.

Get-Content .\DummyLogFile.txt

여기서 출력은 아래와 같이 전체 파일의 내용을 가져옵니다. 로그 파일의 첫 번째 줄부터 시작하여 끝까지 계속됩니다.

2021-12-31 14:49:47, Info                  CBS    TI: --- Initializing Trusted Installer ---
2021-12-31 14:49:47, Info                  CBS    TI: Last boot time: 2021-12-31 12:41:44.516
2021-12-31 14:49:47, Info                  CBS    Startup processing thread terminated normally
2021-12-31 14:49:47, Info                  CBS    TI: Startup Processing completes, release startup processing lock.
.
.

하지만 - Wait와 함께 사용할 때 파일 테일에 대한 실시간 변경 사항을 추적할 수 있습니다.

Get-Content .\DummyLogFile.txt -Wait

여기서 출력은 모든 파일 데이터를 가지고 있으며 변경 사항을 기다립니다.

2021-12-31 14:49:47, Info                  CBS    TI: --- Initializing Trusted Installer ---
2021-12-31 14:49:47, Info                  CBS    TI: Last boot time: 2021-12-31 12:41:44.516
2021-12-31 14:49:47, Info                  CBS    Startup processing thread terminated normally
2021-12-31 14:49:47, Info                  CBS    TI: Startup Processing completes, release startup processing lock.
_

PowerShell의 V2 이후 버전에서 V3는 -Tail 키워드를 지원합니다. 따라서 전체 파일을 가져오는 대신에 필요한 마지막 줄만 미리 볼 수 있습니다.

 Get-Content .\DummyLogFile.txt -Tail 4

주어진 출력은 텍스트의 마지막 네 줄입니다. 4는 tail 명령을 따라 아래에 포함될 tail 줄 수의 변수 값입니다.

C:\Users>  Get-Content .\DummyLogFile.txt -Tail 4
2022-01-06 08:58:10, Info                  CBS    Ending the TrustedInstaller main loop.
2022-01-06 08:58:10, Info                  CBS    Starting TrustedInstaller finalization.
2022-01-06 08:58:10, Info                  CBS    Lock: Lock removed: WinlogonNotifyLock, level: 8, total lock:6
2022-01-06 08:58:10, Info                  CBS    Ending TrustedInstaller finalization.
PS C:\Users>

사용자가 로그 파일과 같이 실시간 데이터를 요구할 때, 지속적으로 변경되는 파일에서 -Wait 명령을 추가하는 것이 가능합니다. 새 마지막 줄이 추가되면 출력이 새 줄을 인쇄하도록 업데이트됩니다.

PS C:\Users> Get-Content .\DummyLogFile.txt -Wait -Tail 4

출력은 변경 사항을 기다릴 것입니다.

Get-Content .\DummyLogFile.txt -Wait -Tail 4
2022-01-06 08:58:10, Info                  CBS    Ending the TrustedInstaller main loop.
2022-01-06 08:58:10, Info                  CBS    Starting TrustedInstaller finalization.
2022-01-06 08:58:10, Info                  CBS    Lock: Lock removed: WinlogonNotifyLock, level: 8, total lock:6
2022-01-06 08:58:10, Info                  CBS    Ending TrustedInstaller finalization.

그러나 -wait를 더 큰 tail 값과 함께 사용하면 로그 파일과 같은 지속적으로 변경되는 파일에서 시스템이 대기하게 됩니다. 이로 인해 메모리 소모가 발생할 수 있습니다. 따라서 -wait-tail 명령을 함께 사용할 때 사용하는 파일의 유형에 주의하는 것이 중요합니다.

cat으로 Windows PowerShell에서 tail 유닉스 명령 기능 달성

유닉스 유사 시스템에 더 익숙한 사용자에게는 cat 명령을 사용하는 것이 편리합니다.

PS C:\Users> cat .\DummyLogFile.txt

cat 명령만 사용하면 텍스트 파일의 내용을 출력하거나 인쇄하게 되며, 이는 Get-Content와 유사합니다.

2021-12-31 14:49:47, Info                  CBS    TI: --- Initializing Trusted Installer ---
2021-12-31 14:49:47, Info                  CBS    TI: Last boot time: 2021-12-31 12:41:44.516
2021-12-31 14:49:47, Info                  CBS    Startup processing thread terminated normally
2021-12-31 14:49:47, Info                  CBS    TI: Startup Processing completes, release startup processing lock.
 ...

그러나 -Tail n 명령 (n은 출력에서 필요한 마지막 줄 수)과 함께 cat을 사용하면 유닉스의 tail 명령과 유사한 출력을 제공합니다.

PS C:\Users> cat .\DummyLogFile.txt -Tail 4

코드의 출력은 다음과 같습니다.

C:\Users>  cat .\DummyLogFile.txt -Tail 4
2022-01-06 08:58:10, Info                  CBS    Ending the TrustedInstaller main loop.
2022-01-06 08:58:10, Info                  CBS    Starting TrustedInstaller finalization.
2022-01-06 08:58:10, Info                  CBS    Lock: Lock removed: WinlogonNotifyLock, level: 8, total lock:6
2022-01-06 08:58:10, Info                  CBS    Ending TrustedInstaller finalization.
PS C:\Users>

필요할 경우 cat 명령은 시스템의 로그 파일과 같은 텍스트 파일의 실시간 변경 사항을 추적하기 위해 Wait 명령과 함께 사용될 수도 있습니다.

PS C:\Users> cat .\DummyLogFile.txt -Tail 4 -Wait

따라서 출력은 제공되며 시스템은 주어진 파일/파일의 변경 사항을 기다립니다. 그러면 변경된 파일의 tail 줄이 PowerShell에 의해 출력으로 인쇄됩니다.

리눅스의 tail은 리눅스 및 리눅스 유사 시스템에서 다양한 로그 파일을 추적하는 데 가장 자주 사용됩니다. 따라서 Windows 사용자에게 특정 유사 기능을 달성하기 위해 명령줄 스크립트를 실행할 수 있게 해주는 PowerShell은 이러한 기능을 가질 필요가 있습니다.

더 새로운 PowerShell 버전에서는 tail 명령이 위에서 설명한 Get-Content 또는 cat 명령과 함께 사용되며, wait 명령은 실시간 변경 사항을 추적하는 데 사용됩니다.

튜토리얼이 마음에 드시나요? DelftStack을 구독하세요 YouTube에서 저희가 더 많은 고품질 비디오 가이드를 제작할 수 있도록 지원해주세요. 구독하다
Migel Hewage Nimesha avatar Migel Hewage Nimesha avatar

Nimesha is a Full-stack Software Engineer for more than five years, he loves technology, as technology has the power to solve our many problems within just a minute. He have been contributing to various projects over the last 5+ years and working with almost all the so-called 03 tiers(DB, M-Tier, and Client). Recently, he has started working with DevOps technologies such as Azure administration, Kubernetes, Terraform automation, and Bash scripting as well.