将 Linux stat(1) 命令转换为 BSD stat(1) 命令

nal*_*zok 1 command-line freebsd bsd coreutils stat

背景

CLion 的远程项目功能目前不支持 FreeBSD 作为远程主机操作系统,但我想进行一些黑客攻击,看看它是否有效。通过阅读日志文件,我想我已经发现了(其中一个)问题。

2019-04-10 00:13:55,850 [2221079]  DEBUG -         #com.jetbrains.ssh.nio - UnixSshFS:: SshCommandRunner.execute: test -e "/tmp" 
2019-04-10 00:13:55,851 [2221080]  DEBUG - ellij.ssh.SshConnectionService - Executing SSH command: env "LC_ALL"="C" "JETBRAINS_REMOTE_RUN"="1" test -e "/tmp" within SSH session @3aa57c95 to <user>@<host>::22 
2019-04-10 00:13:55,963 [2221192]  DEBUG -         #com.jetbrains.ssh.nio - UnixSshFS:: SshCommandRunner.execute: stat --printf "%W%i%F%F%F%F%X%Y%s" "/" 
2019-04-10 00:13:55,963 [2221192]  DEBUG - ellij.ssh.SshConnectionService - Executing SSH command: env "LC_ALL"="C" "JETBRAINS_REMOTE_RUN"="1" stat --printf "%W%i%F%F%F%F%X%Y%s" "/" within SSH session @3aa57c95 to <user>@<host>:22 
2019-04-10 00:13:56,071 [2221300]   INFO -         #com.jetbrains.ssh.nio - 
Exit code 1 
Run Code Online (Sandbox Code Playgroud)

基本上,stat(1)LinuxFreeBSD上的行为不同,因此以下命令在 FreeBSD-12.0 上失败,停止整个设置过程:

$ stat --printf "%W%i%F%F%F%F%X%Y%s" "/"
stat: illegal option -- -
usage: stat [-FLnq] [-f format | -l | -r | -s | -x] [-t timefmt] [file|handle ...]
Run Code Online (Sandbox Code Playgroud)

我以为中的gstat实用程序coreutils是 GNU 版本的stat,但结果我错了;它们是两个不同的命令。我也尝试过自己翻译它,但最终得到了一些奇怪的东西:

$ stat -f "%B%i%T%T%T%T%a%Y%z" "/"
15006030802////15041781781024
Run Code Online (Sandbox Code Playgroud)

是否可以stat --printf "%W%i%F%F%F%F%X%Y%s" "/"为 FreeBSD重写该命令,使其工作方式与在 GNU/Linux 上的对应方式相同?

mos*_*svy 5

stat -f 0%i%HT%HT%HT%HT%a%m%z /
Run Code Online (Sandbox Code Playgroud)

在 FreeBSD 上应该非常类似于

stat --printf %W%i%F%F%F%F%X%Y%s /
Run Code Online (Sandbox Code Playgroud)

在Linux上,与该异常%HT将扩大到Directory代替directory,因为%F在Linux上一样。

我只是插入了一个0而不是%W(出生时间),因为在大多数 Linux 系统上这将是0(未知)。更换0%B,如果你真的想要的出生时间。

不过这种格式很奇怪,我不明白它的目的;我想它可以用基于文件元数据的任何“独特”垃圾替换;-)


我以为coreutils中的gstat实用程序是stat的GNU版本,结果我错了;它们是两个不同的命令。

gstat在 FreeBSD 上是另一个程序 ( /usr/sbin/gstat, gstat(8))。您正在寻找gnustat

gnustat --printf %W%i%F%F%F%F%X%Y%s /
Run Code Online (Sandbox Code Playgroud)

就像任何其他包pkg info -l coreutils | grep stat会告诉你coreutils包安装的文件一样。