wc와 stat가 /proc/[pid]/cmdline에 대해 다른 결과를 생성하는 이유는 무엇입니까?

wc와 stat가 /proc/[pid]/cmdline에 대해 다른 결과를 생성하는 이유는 무엇입니까?

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사용하여 크기를 포함한 파일의 메타데이터를 요청한다는 것입니다(예: 모든 것을 가져오기도 함). 소유자 및 권한). 가상 파일에 대해서는 동일한 결과를 제공하지 않습니다.lsstat()

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을 "빈" 파일로 올바르게 식별합니다.

결론적으로,화장실파일의 실제 바이트 수를 계산합니다.통계자료파일에 대한 정보를 표시하고문서내용에 따라 파일 유형을 결정합니다.

관련 정보