背景
克利翁的远程项目功能目前不支持 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
基本上,stat(1)
行为不同Linux等等自由BSD,因此以下命令在 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 ...]
我以为gstat
中的实用程序coreutils
是 GNU 版本的stat
,但结果证明我错了;它们是两个不同的命令。我也尝试过自己翻译,但最终得到了一些奇怪的结果:
$ stat -f "%B%i%T%T%T%T%a%Y%z" "/"
15006030802////15041781781024
问题
是否可以重写stat --printf "%W%i%F%F%F%F%X%Y%s" "/"
FreeBSD 的命令,使其工作方式与 GNU/Linux 上的对应命令相同?
答案1
stat -f 0%i%HT%HT%HT%HT%a%m%z /
在 FreeBSD 上应该非常类似于
stat --printf %W%i%F%F%F%F%X%Y%s /
在 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 /
就像任何其他包一样,pkg info -l coreutils | grep stat
它会告诉您该包安装的文件coreutils
。