Command-Line

將 Linux stat(1) 命令翻譯成 BSD stat(1) 命令

  • April 9, 2019

背景

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 

基本上,在LinuxFreeBSDstat(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 ...]

我以為gstatin 的實用程序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

引用自:https://unix.stackexchange.com/questions/511512