CentOS 시스템에서 다양한 시스템 정보를 표시하는 프로그램을 작성 중입니다. 예를 들어, 프로세서 유형 및 속도 (에서 /proc/cpuinfo
), 마지막 부팅 시간 (에서 계산 /proc/uptime
), IP 주소 ( ifconfig
출력에서) 및 설치된 프린터 목록 ( lpstat
출력에서).
현재 프로그램에서 몇 가지 데이터를 얻습니다 dmidecode
.
- 플랫폼 유형 (
dmidecode -s system-product-name
) - BIOS 버전 (
dmidecode -s bios-version
) - 실제 메모리 양 (
dmidecode -t17 | grep Size
)
이것은 내 프로그램이 루트로 실행되는 경우에만 사용할 수 있습니다 (그렇지 않으면 dmidecode
하위 프로세스가 오류와 함께 실패 하기 때문에 /dev/mem: Permission denied
). 일반 사용자가 액세스 할 수있는이 정보를 얻는 다른 방법이 있습니까?
답변
방금 CentOS 5 시스템을 확인했습니다.
chgrp kmem /usr/sbin/dmidecode
chmod g+s /usr/sbin/dmidecode
kmem 그룹은 / dev / mem에 대한 읽기 권한 만 가지고 있습니다-BIOS 정보를 얻기위한 쓰기가있는 것 같습니다.
그래서 다른 옵션들 :
- sudo 사용
- 다른 정보 소스를 사용하십시오 (예 : / proc / meminfo)
- dmidecode의 정적 출력을 세계가 읽을 수있는 파일에 쓰는 init-script를 사용하십시오.
답변
에서 제공하는 일부 정보 dmidecode
는에서 제공됩니다 /sys/devices/virtual/dmi/id
.
다른 정보를 분석하여 얻을 수 있습니다 /proc/cpuinfo
, /proc/meminfo
또는 /sys/system/node/node0/meminfo
.
답변
-
에서 사용자로 DMI 정보를 읽을 수 있습니다
/sys/class/dmi/id/
. 일련 번호는 포함되지 않습니다 (읽기 위해 루트 권한이 필요함).이것은 개인 정보 보호 커널 개발자가 의도 한 동작이라고 생각합니다.
-
관련
dmesg
:dmesg
커널 링 버퍼에 액세스하기위한 명령입니다. 링 버퍼는 버퍼가 “오버플로”될 때 최신 정보가 이전 정보를 덮어 씁니다. 또한 이것은 구문 분석이 불가능한 커널 모듈 디버그 출력을 읽고 있습니다. -
다음을
systemd
실행 하여 커널 출력에 액세스하려면 다음을 수행하십시오.journalctl --quiet --system --boot SYSLOG_IDENTIFIER=kernel
-
david-homer ‘s and nils ‘ 답변 과 관련하여 : 파일
/dev/mem
은 단순히 메모리 정보를 제공하는 것이 아니라 전체 실제 메모리를 사용자 공간에 매핑합니다. 따라서 DMI 메모리 주소를 통해 DMI 메모리 주소에 액세스 할 수 있습니다. -
에 관한
chgrp
와chmod g+s
의dmidecode
에서 NILS ‘ 대답 : 나는대로이하지 않습니다 일을 추측 의도와 GID를 저장하기 때문에chmod g+s
하지 않습니다dmidecode
그것은 새로운 권한의 사용합니다.dmidecode
에setegid
액세스하기 전에 효과적인 그룹 ID를 설정 하려면 호출 해야합니다/dev/mem
. 소스 코드에서 판단하면 그렇게dmidecode
하지 않습니다.
답변
dmesg를 사용해보십시오. 일반 사용자 계정으로이 방법으로 원하는 정보를 얻을 수있었습니다.
답변
원격 Linux 시스템에서 정보를 읽는 데 DMIDecode를 사용하고 있으며 아직 이에 대한 해결 방법을 찾지 못했습니다. dmidecode 홈 페이지에서 이에 대해 묻는 통화를 기록했습니다 …
dmidecode -t system 명령을 사용하면 “/ dev / mem : Permission denied”오류가 발생하는데 메모리 정보를 원하지 않기 때문에 문제가됩니다 (제조업체, 모델 및 일련 번호).
SunOS에서 실행되는 smbios 명령은 루트 권한이 없어도이 정보에 적합합니다.
지금은 “최소한 권한을 가진 특정 계정 사용”과 “사용자 루트 자격 증명”이 포함 된 문서를 대체 할 것입니다.
답변
lshal
동일한 정보를 많이 포함하며 루트 권한이 필요하지 않습니다.
답변
@mtneagle이 다운 투표를 한 이유는 확실하지 않습니다.
OP가 원하는 세 가지 항목은 다음과 같습니다.
플랫폼 유형 ( dmidecode -s system-product-name
)
BIOS 버전 ( dmidecode -s bios-version
)
실제 메모리 양 ( dmidecode -t17 | grep Size
)
우리는 이것들 각각을 얻을 수 있습니다 :
dmesg | grep "DMI:" | cut -c "6-" | cut -d "," -f "1"
dmesg | grep "DMI:" | cut -c "6-" | cut -d "," -f "2"
dmesg | grep "Memory:" | cut -d '/' -f '2-' | cut -d ' ' -f '1'
(또는 적어도 내가 가지고있는 4 개의 다른 하드웨어 서버에서 작동하며 Xen 게스트의 BIOS 또는 서버 유형에 대해서는 아무것도 반환하지 않았습니다.)
내가 분명한 것을 놓친 적이 있습니까?
업데이트 : 내가 놓친 명백한 점을 지적 한 @Ruslan에게 감사드립니다.
인용 :
네 당신이 그랬어요. 커널 메시지는 링 버퍼에 저장됩니다. 너무 많은 줄이 인쇄되면 첫 줄이 삭제됩니다.
따라서 컴퓨터가 몇 주 동안 작동하고 매일 매일 일시 중지 / 다시 시작한 경우 여기에서 grep하는 정보가 더 이상 버퍼에 없을 가능성이 높습니다.
(여기서 가동 시간이 18 일인 상황이 있습니다.) 조사해 보는 것이 좋습니다.
/var/log/kern.log
같은 것
grep DMI: /var/log/kern.log | tail -n1