Command-Line
將 Linux stat(1) 命令翻譯成 BSD stat(1) 命令
背景
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
基本上,在Linux和FreeBSD
stat(1)
上的行為不同,因此以下命令在 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
in 的實用程序coreutils
是 GNU 版本stat
,但結果我錯了;它們是兩個不同的命令。我也嘗試過自己翻譯它,但我最終得到了一些奇怪的東西:$ stat -f "%B%i%T%T%T%T%a%Y%z" "/" 15006030802////15041781781024
問題
是否可以為 FreeBSD 重寫命令
stat --printf "%W%i%F%F%F%F%X%Y%s" "/"
,使其工作方式與在 GNU/Linux 上的對應方式相同?
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
。