Procfs
역사 > 리눅스

리눅스에서 /proc은 커널 프로세스를 포함하는 각 실행 중인 프로세스들을 위한 디렉토리를 포함하며 디렉토리는 /proc/PID라는 이름을 갖는다(PID는 프로세스 번호이다). 각 디렉토리는 한 프로세스에 관한 정보 뿐만 아니라 다음을 포함한다:
/proc/PID/cmdline, 프로세스를 시작한 명령어.
/proc/PID/cwd, 프로세스의 현재 작업 디렉토리에 대한 심볼릭 링크.
/proc/PID/environ는 프로세스에 영향을 미치는 환경 변수들의 이름과 값들을 포함한다.
/proc/PID/exe, 존재하는 경우 원본 실행 파일에 대한 심볼릭 링크.
/proc/PID/fd, 각 열린 파일 서술자에 대한 심볼릭 링크를 포함하는 디렉토리.
/proc/PID/fdinfo, 각 열린 파일 서술자에 대한 위치와 플래그들을 서술하는 엔트리들을 포함하는 디렉토리.
/proc/PID/maps, 매핑된 파일들과 블록들(힙과 스택 같은)에 대한 정보를 포함하는 텍스트 파일.
/proc/PID/mem, 프로세스의 가상 메모리를 보여주는 바이너리 이미지로서 오직 ptrace 하는 프로세스에 의해서만 접근될 수 있다.
/proc/PID/root, 프로세스에 의해 보여지는 루트 경로에 대한 심볼릭 링크. 프로세스가 chroot jail에서 실행중이지 않은 이상 대부분의 프로세스들에서 이것은 /에 링크된다.
/proc/PID/status는 실행 상태와 메모리 사용을 포함하는 프로세스에 대한 기본 정보들을 갖는다.
/proc/PID/task, 이 프로세스에 의해 시작된 작업들에 대한 하드 링크를 포함하는 디렉토리.
PID는 pgrep, pidof 또는 ps 같은 유틸리티들에 의해서 얻을 수 있다:
$ ls -l /proc/$(pgrep -n python)/fd        # List all file descriptors of the most recently started `python' process
samtala 0
lrwx------ 1 baldur baldur 64 2011-03-18 12:31 0 -> /dev/pts/3
lrwx------ 1 baldur baldur 64 2011-03-18 12:31 1 -> /dev/pts/3
lrwx------ 1 baldur baldur 64 2011-03-18 12:31 2 -> /dev/pts/3
$ readlink /proc/$(pgrep -n python)/exe    # List executable used to launch the most recently started `python' process
/usr/bin/python3.1
2.6 커널에서 대부분의 정보가 /sys에 마운트된 독립된 슈도 파일 시스템인 sysfs로 옮겨졌지만, 이것은 또한 프로세스와 관련 없는 시스템 정보도 포함한다:
전력 관리 모드에 따라 /proc/acpi 또는 /proc/apm, 이것은 sysfs 이전의 것이다.
/proc/buddyinfo, 메모리 단편화를 다루는 버디 알고리즘에 관한 정보.
/proc/bus, 컴퓨터의 다양한 버스들을 보여주는 디렉토리들을 포함하며 예를 들면 input/PCI/USB가 있다. 이것의 대부분은 sysfs하에 더 많은 정보를 갖는 /sys/bus로 대체되었다.
/proc/fb, 사용 가능한 프레임버퍼들에 관한 목록.
/proc/cmdline, 커널에 넘겨지는 부트 옵션.
/proc/cpuinfo, 벤더와 스피드, 캐시 크기, sibling의 수, 코어 그리고 CPU 플래그 같은 CPU에 대한 정보를 포함한다.
멀티 코어 CPU에서, /proc/cpuinfo는 다음의 계산이 적용되는 두 필드 "siblings"와 "cpu cores"를 갖는다:
"siblings" = (HT per CPU package) * (# of cores per CPU package)
"cpu cores" = (# of cores per CPU package)
CPU package는 물리적 CPU를 의미하며 여러 코어들을 가질 수 있다. 이것은 하이퍼스레딩과 다중 코어 사이에서 구별할 수 있게 해주는데 CPU 패키지에 대한 하이퍼스레드들의 수는 siblings / CPU cores에 의해 계산될 수 있다. 만약 CPU 패키지 값들이 같다면, 하이퍼스레딩은 지원되지 않는다.
/proc/crypto, 사용 가능한 암호화 모듈들에 대한 목록.
/proc/devices, 장치 ID에 의해 정렬된 캐릭터와 블록 장치들 뿐만 아니라 /dev 이름에 대한 목록.
/proc/diskstats, 논리 디스크 장치들 각각을 위한 몇몇 정보들을 보여준다.
/proc/filesystems, 리스팅 시의 커널에 의해 지원되는 파일 시스템들의 목록.
/proc/interrupts, /proc/iomem, /proc/ioports 그리고 /proc/irq, 다양한 시스템 자원들을 사용하는 장치들에 관한 자명한 세부 사항들.
/proc/meminfo, 커널이 어떻게 자신의 메모리를 관리하는지에 대한 요약을 포함한다.
/proc/modules, /proc에서 가장 중요한 파일들 중 하나로서 현재 로드된 커널 모듈들의 리스트를 포함한다. 이것은 의존성에 대한 표시를 준다.
/proc/mounts, self/mounts에 대한 심볼릭 링크로서 현재 마운트된 장치들과 그들의 마운트 포인트를 보여준다.
/proc/net, 네트워크 스택에 관한 실제로 유용한 정보를 포함하는 디렉토리로서, 특히 존재하는 네트워크 연결을 보여주는 nf_conntrack (iptables FORWARD가 네트워크 연결들을 리다이렉트할 때 라우팅을 트래킹하는 경우에 유용하다).
/proc/partitions, 장치 번호와 이것들의 사이즈 그리고 /dev 이름들에 대한 목록.
/proc/scsi, SCSI 또는 RAID 컨트롤러를 통해 연결된 장치들에 대한 정보를 보여준다.
/proc/self 에서 현재 프로세스에 대한 심볼릭 링크를 보여준다 (즉, PID가 현재 프로세의 것인 곳에서 /proc/PID/).
/proc/slabinfo, 리눅스 커널에서 자주 사용되는 객체들의 캐쉬들에 대한 통계를 보여준다.
/proc/swaps, 활성화된 스왑 파티션과 이것들의 다양한 크기와 속성들에 대한 목록.
/proc/sys 하에서 동적으로 설정 가능한 커널 옵션들에 대한 접근. /proc/sys 아래에는 읽고 쓰기 가능한 가상 파일들을 포함하는 커널의 영역을 표현하는 디렉토리들이 보인다. 예를 들면 주로 참조되는 가상 파일로 /proc/sys/net/ipv4/ip_forward가 있는데, 이것은 방화벽이나 터널들을 라우팅하는데 필요하다. 이 파일은 '1' 또는 '0'을 갖는다: 이것이 1이며, IPv4 스택은 패킷을 포워드하고, 0이면 하지 않는다.
/proc/sysvipc, 메모리 공유와 프로세스 간 통신 (IPC) 정보를 포함한다.
/proc/tty, 현재 터미널들에 대한 정보를 포함한다.
/proc/uptime, 부트 이후에 그리고 유휴 모드에서 보낸 시간.
/proc/version, 리눅스 커널 버전, 배포판 번호, gcc 버전 번호 그리고 다른 현재 실행중인 커널의 버전과 관련된 다른 정보들을 포함한다.
다른 파일들은 다양한 하드웨어, 모듈 설정 그리고 커널에 대한 변화들에 의존한다.