如何找到有关Linux计算机上硬件的详细信息?


40

-ie-如何在命令行中获取完整的硬件组件列表(在没有窗口系统的机器上)

谢谢。

Answers:



37

如果有的话,dmidecode派上用场了。尤其是在Dell,HP,IBM硬件上,他们不愿意将相关的硬件信息编程到各个寄存器中。


7
dmidecode很好。有一天,当我使用它查看内存详细信息时,我意识到您也可以找到Dell服务标签:dmidecode | grep -i串行| egrep -o'[0-9A-Z] {7} $'| 头-n1
凯尔·布​​兰特

1
同意,您可以运行dmidecode并仅运行grep获得所需的信息。
barfoon

1
在苹果硬件上也很好用。
Matt3o12

30

lspci是列出系统硬件的好工具。(无论如何,PCI总线上的任何东西。)

cat /proc/cpuinfo -显示CPU信息

cat /proc/meminfo -显示内存信息

dmesg(或cat /var/log/dmesg)包含一些信息,不一定包含所有信息。

如果您有RedHat / CentOS系统,则可以sosreport用来收集很多信息,尽管我不知道它是否列出了所有硬件信息。

这些都是开始寻找所需信息的好地方。


3

/ proc文件系统将为您提供所需的信息...但是我不知道您将如何获得它是一个简单的地方。

'cat / proc / cpuinfo'将告诉您有关CPU的信息'cat / proc / devices'将告诉您有关块设备的一些有限信息。'ifconfig -a'将告诉您有关网络连接的信息

其他人将可以告诉您更多设备。您要对特定设备进行故障排除吗?如果是这样,您将获得更好的帮助,询问一个特定的问题。


谢谢,不,我正在尝试从一个主机转移到另一个主机,并希望了解一般硬件的区别-看看我是否可以通过重新成像来移动。
叶夫根尼(Evgeny)2009年

1
只要启动的最初部分起作用,大多数发行版都将检测到硬件更改并进行调整。如果启动部分有问题,请在移动新硬件时安装相同的发行版,在移动时将其更新为相同的内核,然后将mkintrd文件复制到映像文件系统上,这应该可以解决启动问题。如果确实出错,您仍将所有数据保存在旧计算机上。
Michael Shaw,2009年

如果您已经在第二台计算机上安装了Linux并且可以正常运行,则假定内核是通用构建,并且在最近的版本中,它将加载所需的所有模块(模块类似于Windows驱动程序)。Linux安装并不是真的以这种方式特定于硬件。
凯尔·布​​兰特

/boot/initrd-2.6.*.img文件不是很通用。内核在通过grub传递控制权时使用它。它需要具有所有设置和模块才能加载您的根文件系统。该文件是通过运行mkinitrd的通用方式制作的,但是您需要首先启动系统...
Michael Shaw,2009年

2

inxi将显示几乎所有内容,不使用任何缩写形式运行,但是选项很多,但是运行inxi -h可以看到它们

inxi是项目主页所描述的“全功能信息脚本”:https : //github.com/smxi/inxi

以下是有关如何在Ubuntu上安装它的信息:https : //askubuntu.com/questions/284635/inxi-installation-on-ubuntu


Inxi是一种相对较新的工具,在大多数发行版中都找不到。您应该添加更多信息和链接。
itsbruce 2012年

1

总结一下,我想说这是获取有关您的系统信息的好开始:

  1. dmesg-打印或控制内核环形缓冲区
  2. lspci-列出所有PCI设备
  3. lsusb-列出USB设备
  4. / proc-进程信息伪文件系统




0

最简单的方法是在命令行上键入“ dmesg | more ”,它使您可以查看上次系统启动期间发生的所有引导输出。


0

对于硬盘,我使用一个自定义脚本,该脚本将以下输出汇总为一个列表:

cat /proc/partitions
cat /proc/mounts

parted -m /dev/sdX unit MB print # need to be root for parted
# or
parted -m -l unit MB print

blkid /dev/sdXN

0

您可以使用vi复制以下代码

#!/bin/bash

a=1; c=0
a=1; c=0
# Gather system information, can e.g. be sent to | mail in a cronjob
f_() { while read l; do echo $l; done < $f ; }
#
f_() { while read l; do echo $l; done < $f ; }
# TODO
# ----
# * Netstat output
# * Memory/swap information
# * ifconfig information
# * Make output dependent on argv
# * md5sum checks                               (done)
# * Keep previeous values and compare
# * How to
# * chmod a+x sysinfo.sh
# * ./sysinfo.sh
####################### DO NOT EDIT UNDER THIS LINE ###########################

siheader() {
        echo "================================================================"
        echo -e "* System statistics for: \t`hostname`.`dnsdomainname`"
        echo -e "* Generated on: \t\t`date`"
        echo -e "* Running as: \t\t\t`whoami`"
        echo
}

fuptime() {
        upSeconds=$(cat /proc/uptime | tr "." " " | awk '{print $1}')
        secs=$((${upSeconds}%60))
        mins=$((${upSeconds}/60%60))
        hours=$((${upSeconds}/3600/24))
        days=$((${upSeconds}/86400))
        if [ "${days}" -ne "0" ]
        then
                echo -n "${days} days, "
        fi
        echo "`printf '%02d' ${hours}`:`printf '%02d' ${mins}`:`printf '%02d' ${secs}`"
}

siuptime() {
        echo "=================== Uptime ====================================="
        echo -e "* Uptime: \t\t\t`fuptime`"
        if [ -x /usr/bin/uprecords ];
        then
                echo -e "* High score: \t\t\t`uprecords | tail -n1 | cut -d'|' -f1 | cut -d'n' -f3 | sed 's/^[[:blank:]]*//'`"
        fi
        echo -e "* Load average: \t\t`cat /proc/loadavg | head -c14`"
        echo
}

fw () {
        OFS=${IFS}
        IFS=$'\n'
        CNT=$(echo `w | wc -l`-1 | bc)

        w | tail -n ${CNT} | while read -r a;
        do
                echo -e "\t${a}"
        done

        IFS=${OFS}
}

siusers() {
        echo "=================== Users ======================================"
        echo -e "* Active users: \t\t`who | wc -l`"
        echo "* User information"
        fw
        echo
}

fpstree() {
        OFS=${IFS}
        IFS=$'\n'
        pstree | while read -r a;
        do
                echo -e "\t${a}"
        done
        IFS=${OFS}
}

fcomms() {
        ps -eo comm | sort | uniq | grep -v ^COMMAND | column
        echo

        IFS=${OFS}
}

fprocs() {
        echo `TERM=Linux top -n1 -b | grep "Tasks" | awk '{print $4,$6,$8,$10}'`
        echo -e "==================================Tasks process and memory utilization=============================\n"
    echo "`top -n1 -b`"
}


sitasks() {
        echo "=================== Tasks ======================================"
        echo -e "* Number of running tasks: \t$(echo `ps ax | wc -l` - 1 | bc)"
        #This screws up the email
        #echo "* PS Tree:"
        #fpstree
        echo "* Running programs:"
        fcomms
        echo -e "* CPU load: \t\t\t`TERM=linux top -n2 -b | grep 'Cpu' | tail -n1 | awk '{print $2+$4+$6}'`%"
        PROCS=`fprocs`
        echo "* Process state:"
        echo -e "\tRunning: \t\t`echo ${PROCS} | awk '{print $1}'`"
        echo -e "\tSleeping: \t\t`echo ${PROCS} | awk '{print $2}'`"
        echo -e "\tZombie: \t\t`echo ${PROCS} | awk '{print $3}'`"
        echo -e "\tStopped: \t\t`echo ${PROCS} | awk '{print $4}'`"
        echo
}

froute() {
        OFS=${IFS}
        IFS=$'\n'

        CNT=$(echo `/sbin/route | wc -l` - 1 | bc)
        /sbin/route | tail -n ${CNT} | while read -r a;
        do
                echo -e "\t${a}"
        done

        IFS=${OFS}
}

sinetwork() {
        echo "=================== Networking ================================"
        echo "* Routing table:"
        froute
        echo
}

simemory() {
        echo "=================== Memory ===================================="
        RAMTOTAL=`echo $(($(cat /proc/meminfo | grep MemTotal | awk '{print $2}')/1024))`
        echo "* Ram:\t\t\t free of ${RAMTOTAL}Mb"
}

sidiskstats() {
        echo "=================== Hard Disc ================================="
        echo "* Disk Information:"
        OFS=${IFS}
        IFS=$'\n'
        df -h | grep -v ^none | while read -r a;
        do
                echo -e "\t${a}"
        done
        IFS=${OFS}
        echo
        echo "* Mounts:"
        OFS=${IFS}
        IFS=$'\n'
        mount | while read -r a;
        do
                echo -e "\t${a}"
        done
        IFS=${OFS}
        echo
}

simd5() {
        if [ ! -e md5sums.lst ];
        then
                return
        fi

        echo "=================== MD5Sum Check =============================="

        OFS=${IFS}
        IFS=$'\n'

        echo "* Checking MD5 Sums"

        cat md5sums.lst | grep "^/" | while read -r a;
        do
                F=`echo ${a} | cut -d':' -f1`
                S=`echo ${a} | cut -d':' -f2`
                S2=`md5sum ${F} | cut -d' ' -f1`
                echo -n -e "\t${F}: \t\t\t\t"
                if [ "${S}" = "${S2}" ];
                then
                        echo "[OK]"
                else
                        echo "[INVALID]"
                fi                        
        done

        IFS=${OFS}
        echo
}


##For finding CPU model, cores and 
cpuinfo() {
    echo "=================== CPU Details for Xen =============================="
    echo -e "CPU Details: \n`cat /proc/cpuinfo | sed -n '1,/^$/p'`"
    echo -e "No of Cores: \n`cat /proc/cpuinfo | grep processor | wc -l`"
    if [ "egrep '(vmx|svm)' /proc/cpuinfo >/dev/null 2>/dev/null" ];
    then
        echo -e "\n===============================================================\nServer supports Full-virtualization"
    else
        echo -e "\n===============================================================\nEither server does not support Full-virtualization or it is turned off in BIOS"
    fi

    if [ "egrep 'pae' /proc/cpuinfo >/dev/null 2>/dev/null" ];
    then
        echo -e "\n===============================================================\nServer supports Para-virtualization"
    else
        echo -e "\n===============================================================\nServer does not support Para-virtualization"
    fi
}

##For disk info
diskinfo() {
        echo "=================== Disk usage =============================="
        echo -e "Disk Usage details: \n`df -h`"
}   
##Distro info
distroinfo() {
        echo "=================== Distro Info =============================="
        echo -e "Distro details: \n`lsb_release -a`"
        echo -e "Kernel details: \n`uname -a`"
}   

##Distro info
deviceinfo() {
        echo "=================== Device Info =============================="
        echo -e "Device details: \n`lspci -v`"
        echo -e "Kernel details: \n`uname -a`"
}   
summary() {
        siheader
        siuptime
        siusers
        sitasks
        sinetwork

        simemory
        sidiskstats
    fprocs
        simd5
    deviceinfo
    cpuinfo
    distroinfo
        echo "==============================================================="
        echo "* Brought to you by Taashee- http://www.taashee.com"
}

summary

您需要将所有内容都放在一个代码块中,以使其看起来不会损坏。
比尔·威斯

谢谢比尔对不起,问你这样的问题,我该怎么做,请下次让我再做。请忽略我的英语
拉贾特

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.