在windows下用tail监听文件

271次阅读
没有评论

在 windows 下用 tail 监听文件

转自:https://www.delftstack.com/zh/howto/powershell/powershell-tail/

Unix 操作系统包含操作系统命令 tail​​。tail​​ 程序的目的是显示文本文件 / 管道数据的尾部。

预期的输出是文件的最后几行。行数可以变化。同一命令可以同时用于多个文件以打印标准输出。

除了 Unix,tail​ 命令还支持类 Unix 系统和 FreeDOS 和 MSX-DOS 系统。

在 Windows PowerShell(跨平台应用程序的 Windows 版本)中,可以执行命令行 shell 命令以实现不同功能的自动化。然而,这里使用的命令不同于类 Unix 系统中使用的标准脚本命令。

在 Windows PowerShell 中执行 tail​ 类似功能有几种可接受的方法。

Windows PowerShell 配合 Get-Content​ 实现 tail​ Unix 命令功能


一种最有效的方法是使用 Get-Content​。它后面是 -Tail n​,n 是你需要作为输出获得的行数。

在早期版本的 Windows Power shell 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 是 n 的一个变量值,在 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​ 时,你会让系统在一个不断变化的文件中等待,例如日志文件。这会导致发生大量内存消耗。因此,重要的是要注意一起使用 -wait-tail​ 命令的文件类型。

Windows PowerShell 配合 Cat​ 实现 tail​ Unix 命令功能


对于更熟悉类 Unix 系统的用户来说,使用 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.  ...` 

但是,使用 cat​ 和 -Tail n​ 命令(n 是输出中所需的最后行数)将提供与 Unix 中的 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

因此,将给出输出,并且系统等待给定文件中的任何更改。然后这些更改的文件尾行将由 PowerShell 打印为输出。

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. _`

Linux tail​ 最常用于跟踪 Linux 和类 Linux 系统中的不同日志文件。因此,使 Windows 用户能够运行命令行脚本来实现某些类似功能的 PowerShell 需要具备这样的功能。

在较新的 PowerShell 版本中,tail​ 命令与上述 Get-Content​ 或 cat​ 命令一起使用,wait​ 命令用于跟踪任何实时更改。

 0
评论(没有评论)
验证码