Linux stat(1) 명령을 BSD stat(1) 명령으로 변환

Linux stat(1) 명령을 BSD stat(1) 명령으로 변환

배경

클레온의원격 프로젝트 기능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)행동이 다릅니다리눅스등.FreeBSD, 따라서 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의 유틸리티가 coreutilsGNU 버전이라고 생각했지만 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" "/"GNU/Linux 명령과 동일하게 작동하도록 FreeBSD 명령을 다시 작성할 수 있습니까 ?

답변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확장자를 제외하면 Linux 와 동일하지 Directory않습니다 .directory%F

대부분의 Linux 시스템에서는 (알 수 없음)이므로 (생년월일) 0대신 하나를 삽입했습니다 . 정말로 출생시간을 원하시면 로 바꾸세요.%W00%B

형식이 이상하고 그 목적을 이해할 수 없습니다. 파일 메타데이터를 기반으로 하는 "고유한" 쓰레기로 대체될 수 있을 것 같습니다.


나는 coreutils의 gstat 유틸리티가 GNU 버전의 stat인 줄 알았는데 알고 보니 두 가지 다른 명령이었습니다.

gstat/usr/sbin/gstatFreeBSD에서는 또 다른 프로그램( , ) 입니다 gstat(8). 당신이 찾고있는 gnustat:

gnustat --printf %W%i%F%F%F%F%X%Y%s /

다른 패키지와 마찬가지로 pkg info -l coreutils | grep stat패키지가 설치하는 파일이 무엇인지 알려줍니다 coreutils.

관련 정보