实现 Unix Tail 命令的 Windows PowerShell 命令
-
Win 32 中的
tail
实现tail
Unix 命令功能 -
Windows PowerShell 配合
Get-Content
实现tail
Unix 命令功能 -
Windows PowerShell 配合
Cat
实现tail
Unix 命令功能
Unix 操作系统包含操作系统命令 tail
。tail
程序的目的是显示文本文件/管道数据的尾部。
预期的输出是文件的最后几行。行数可以变化。同一命令可以同时用于多个文件以打印标准输出。
除了 Unix,tail
命令还支持类 Unix 系统和 FreeDOS 和 MSX-DOS 系统。
在 Windows PowerShell(跨平台应用程序的 Windows 版本)中,可以执行命令行 shell 命令以实现不同功能的自动化。然而,这里使用的命令不同于类 Unix 系统中使用的标准脚本命令。
在 Windows PowerShell 中执行 tail
类似功能有几种可接受的方法。
Win 32 中的 tail
实现 tail
Unix 命令功能
实现此功能的常用方法之一是使用 Windows PowerShell 的 tail-f
程序; Win32 的尾部。它跟踪任何文件更改并允许用户实时跟踪更改。但是,它要求用户完全使用另一个程序,可通过以下链接获得:https://tailforwin32.sourceforge.net。因此,对于正在为 Windows 系统搜索特定于 PowerShell 的替代方案的用户来说,它不是一个合适的解决方案。
但是,也有一些可接受的基于 PowerShell 的解决方案。
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
命令用于跟踪任何实时更改。
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.