![Linux stat(1) 명령을 BSD stat(1) 명령으로 변환](https://linux55.com/image/151572/Linux%20stat(1)%20%EB%AA%85%EB%A0%B9%EC%9D%84%20BSD%20stat(1)%20%EB%AA%85%EB%A0%B9%EC%9C%BC%EB%A1%9C%20%EB%B3%80%ED%99%98.png)
배경
클레온의원격 프로젝트 기능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
의 유틸리티가 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" "/"
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
대신 하나를 삽입했습니다 . 정말로 출생시간을 원하시면 로 바꾸세요.%W
0
0
%B
형식이 이상하고 그 목적을 이해할 수 없습니다. 파일 메타데이터를 기반으로 하는 "고유한" 쓰레기로 대체될 수 있을 것 같습니다.
나는 coreutils의 gstat 유틸리티가 GNU 버전의 stat인 줄 알았는데 알고 보니 두 가지 다른 명령이었습니다.
gstat
/usr/sbin/gstat
FreeBSD에서는 또 다른 프로그램( , ) 입니다 gstat(8)
. 당신이 찾고있는 gnustat
:
gnustat --printf %W%i%F%F%F%F%X%Y%s /
다른 패키지와 마찬가지로 pkg info -l coreutils | grep stat
패키지가 설치하는 파일이 무엇인지 알려줍니다 coreutils
.