25 个版本

0.0.27 2024 年 6 月 22 日
0.0.25 2024 年 3 月 23 日
0.0.23 2023 年 11 月 14 日
0.0.20 2023 年 7 月 14 日
0.0.1 2020 年 5 月 31 日

2961命令行工具

Download history 232/week @ 2024-04-28 86/week @ 2024-05-05 113/week @ 2024-05-12 73/week @ 2024-05-19 69/week @ 2024-05-26 61/week @ 2024-06-02 62/week @ 2024-06-09 117/week @ 2024-06-16 308/week @ 2024-06-23 89/week @ 2024-06-30 89/week @ 2024-07-07 40/week @ 2024-07-14 69/week @ 2024-07-21 72/week @ 2024-07-28 60/week @ 2024-08-04 43/week @ 2024-08-11

250 每月下载次数
用于 coreutils

MIT 许可证

590KB
12K SLoC

备注 / 待办事项

缺少的功能

  • --max-unchanged-stats

注意:存在 --max-unchanged-stats 的存根,因此可以使用它来运行 GNU 测试套件,但是这个标志还没有功能。

--follow--retry 的平台支持

--follow=descriptor--follow=name--retry 标志在 Linux(inotify 后端)上支持非常好。它们在 macOS/BSD(kqueue 后端)上工作得很好,但有些测试由于 kqueue 与 inotify 的不同工作方式而失败。理论上由于 notify-crate 对 ReadDirectoryChanges 的支持,Windows 上也存在支持,但是这些标志在 Windows 上完全没有测试。

注意:未记录的 ---disable-inotify 标志用于禁用 inotify 后端以测试轮询。但是 inotify 是仅限于 Linux 的后端,现在其他后端也支持轮询。因此,disable-inotify 现在是新的且更通用的标志名:--use-polling 的别名。

可能的优化

  • 如果不使用 ---f 并且输入是常规文件,则不需要读取整个文件。从末尾开始以块的形式读取,然后逐个块正向读取。
  • 减少对例如 fstat 的系统调用次数
  • 通过在适当的时候向 inotify_rm_watch 添加更多的系统调用来改进资源管理。

GNU 测试套件结果(9.1.8-e08752)

测试“gnu/tests/tail-2/follow-stdin.sh”的功能已实现。它失败了,因为它会触发关闭文件描述符的操作,使用 tail -f <&-,作为解决方案,Rust的stdlib将关闭的FD重新打开为/dev/null,这意味着uu_tail无法检测到这一点。有关讨论,请参阅: https://github.com/uutils/coreutils/issues/2873

测试“gnu/tests/tail-2/inotify-rotate-resources.sh”的功能已实现。它因为错误而失败,因为它使用 strace 来寻找对 inotify_add_watchinotify_rm_watch 的调用,然而在uu_tail中,这些系统调用是从一个单独的线程调用的。如果GNU测试会跟踪线程,即使用 strace -f,这个问题就可以解决。

有5个测试已修复,但在CI内部运行时(并不总是)会通过测试套件。这可能是与CI测试VM的负载/调度有关的原因。有疑问的测试是

  • tail-2/F-vs-rename.sh
  • tail-2/follow-name.sh
  • tail-2/inotify-rotate.sh
  • tail-2/overlay-headers.sh
  • tail-2/retry.sh

依赖项

~5–16MB
~206K SLoC