wc
원인을 파악 하고 stat
여러가지 제보를 하려고 합니다 /proc/[pid]/cmdline
.
wc
내 쉘 cmdline
파일 크기가 6바이트라고 가정해 보겠습니다.
$ wc --bytes /proc/$$/cmdline
6 /proc/10425/cmdline
stat
파일 크기가 0바이트임을 나타냅니다.
$ stat --format='%s' /proc/$$/cmdline
0
file
동의하다 stat
:
$ file /proc/$$/cmdline
/proc/10425/cmdline: empty
cat
다음과 같은 출력을 제공합니다.
$ cat -vE /proc/$$/cmdline
-bash^@
이 모든 작업은 다른 *nix 운영 체제가 아닌 Linux에서 수행됩니다.
stat
프로그램에 wc
파일의 바이트 수를 계산하는 다른 알고리즘이 있습니까?
답변1
아래 파일은 일반/proc
파일 이 아니고 커널에 의해 동적으로 생성된 가상 파일입니다. 대부분의 경우(모두?) 시스템은 크기를 미리 계산하지 않지만 이를 읽는 프로그램은 원하는 데이터를 가져옵니다.
wc
당신이 한 일과 예를 들어 하는 일 stat
의 차이점은 ls
여기서 wc
파일을 열고 읽고 무엇을 얻는지 계산하는 동시에 시스템 호출을 stat
사용하여 크기를 포함한 파일의 메타데이터를 요청한다는 것입니다(예: 모든 것을 가져오기도 함). 소유자 및 권한). 가상 파일에 대해서는 동일한 결과를 제공하지 않습니다.ls
stat()
eg 를 실행하면 ls -l /proc/$$/
대부분의 파일에서 데이터를 읽을 수 있지만 크기가 0인 파일이 많이 표시됩니다.
장치 노드 /dev/sda
는 유사하지만 해당 경우에는 ls
크기조차 표시되지 않고 장치 번호만 표시됩니다.
특히 file
, file -s
데이터만 읽고 특수 파일인지는 신경 쓰지 않도록 요청할 수 있습니다.
답변2
예, wc와 stat에는 파일의 바이트 계산에 대한 다른 알고리즘이 있습니다.
화장실파일의 바이트 수를 계산합니다(이 경우 6).
통계자료크기(바이트)를 포함하여 파일에 대한 정보를 표시합니다. 그러나 /proc/[pid]/cmdline은 파일 시스템의 일반적인 파일이 아니라 proc 파일 시스템의 가상 파일입니다. 이 파일에는 지정된 프로세스 ID로 프로세스를 시작하는 데 사용되는 명령줄 매개변수가 포함되어 있습니다. 파일 시스템이 아닌 메모리에 저장되므로 크기가 작성된 실제 바이트 수와 다를 수 있습니다. 이것이 stat가 크기를 0으로 보고하는 이유입니다.
file 명령은 내용을 기반으로 파일 유형을 결정하는 데 사용되며 /proc/[pid]/cmdline을 "빈" 파일로 올바르게 식별합니다.
결론적으로,화장실파일의 실제 바이트 수를 계산합니다.통계자료파일에 대한 정보를 표시하고문서내용에 따라 파일 유형을 결정합니다.