Linux Shell编程与编辑器使用详解
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.2 系统信息显示命令

Linux系统包含的相关信息是非常多的,包括文件系统、内核模块、硬件信息、启动参数等,了解这些,对于我们学好Linux系统编程有很大的帮助。Linux系统之所以被世界公认为比Windows系统要优秀的系统,就是因为他提供了很多更接近于底层的命令,让工作人员对它的工作机制一目了然。

2.2.1 proc文件系统:访问系统内核信息

proc不是一个真实的文件系统,不占用外存空间,只是以文件的方式为访问Linux内核数据提供接口。用户和应用程序可以通过查看/proc目录中的相关文件得到系统的运行信息,并可以改变内核的某些参数。由于系统的信息总是动态变化的,所以用户或应用程序读取proc文件时所获得的数据也是瞬时的。许多应用程序依靠proc来访问Linux内核信息。查看/proc目录如下。

    # cd /proc
    # ls
    1     1257  1678  22   32   5     5535  5593  5672  690   7798  974          fb locks       slabinfo         vmstat
    10      1279   1694   23    336   5401   5537   5598   5675   692    796    988 filesystems   mdstat      softirqs         zoneinfo
    11    1288  1696  24   338  5403  5538  5599  5676  7     8     acpi         fs meminfo     stat
    12     13     17     244   35    5424   5542   5612   5696   7067   8002   asound interrupts    misc        swaps
    1231  1308  1726  248  37   5460  5549  5616  5702  7070  8005  buddyinfo    iomem modules     sys
    1233  14   1736  251  38   5467  5551  5620  5713  7072  8522  bus         ioports mounts      sysrq-trigger
    1234  1423  1740  255  4    5485  5555  5623  5719  714   8542  cgroups      irq mpt         sysvipc
    1235  1467  1742  27  41  5517  5563  5631  5733  722  860  cmdline     kallsyms mtrr        timer_list
    1236  15    18    275  42   5521  5564  5632  5734  723   873   cpuinfo     kcore net         timer_stats
    1237  1503  19   276  43  5523  5565  5636  5735  7355  9    crypto      key-users pagetypeinfo  tty
    1238  1511  1903  28   44   5525  5566  5658  577   746   952   devices      kmsg partitions   uptime
    1239  1515  1905  29    45    5527  5567  5659  594    750    953    diskstats kpagecount    sched_debug  version
    1240  16   2    3   46  5531  5568  5660  6    754  955  dma        kpageflags schedstat    version_signature
    1241   1655   20     30    484   5533   5570   5661   688    774    957    driver latency_stats  scsi        vmallocinfo
    1245  1673  21   31  485  5534  5575  5670  689  779  973  execdomains  loadavg self        vmmemctl

其中,每一个以数字命名的目录对应系统中运行的一个进程,该数字即为进程的PID号。数字目录中存放了该进程的运行信息,可以通过相应的命令进行查询。例如查询当然系统中运行的vi程序的相关信息。

    # ps aux | grep vi
    root     8002  0.0  0.3  10752  3428 pts/0   T   20:43  0:00 vim  //8002为vi的进程号
    root     8575  0.0  0.0  3544  820 pts/0   S+  22:45  0:00 grep--color=auto vim
    # ls  /proc       //查看proc目录下是否已存在8002目录
    1     1257  1678  22   32   5     5535  5593  5672  690   7798  974          fb locks       slabinfo         vmstat
    10      1279   1694   23    336   5401   5537   5598   5675   692    796    988 filesystems   mdstat      softirqs         zoneinfo
    11    1288  1696  24   338  5403  5538  5599  5676  7     8     acpi         fs meminfo     stat
    12     13     17     244   35    5424   5542   5612   5696   7067   8002   asound interrupts    misc        swaps
    1231  1308  1726  248  37   5460  5549  5616  5702  7070  8005  buddyinfo    iomem modules     sys
    1233  14   1736  251  38   5467  5551  5620  5713  7072  8522  bus         ioports mounts      sysrq-trigger
    1234  1423  1740  255  4    5485  5555  5623  5719  714   8590  cgroups      irq mpt         sysvipc
    1235  1467  1742  27  41  5517  5563  5631  5733  722  860  cmdline     kallsyms mtrr        timer_list
    1236  15    18    275  42   5521  5564  5632  5734  723   873   cpuinfo     kcore net         timer_stats
    1237  1503  19   276  43  5523  5565  5636  5735  7355  9    crypto      key-users pagetypeinfo  tty
    1238  1511  1903  28   44   5525  5566  5658  577   746   952   devices      kmsg partitions   uptime
    1239  1515  1905  29    45    5527  5567  5659  594    750    953    diskstats kpagecount    sched_debug  version
    1240  16   2    3   46  5531  5568  5660  6    754  955  dma        kpageflags schedstat    version_signature
    1241   1655   20     30    484   5533   5570   5661   688    774    957    driver latency_stats  scsi        vmallocinfo
    1245  1673  21   31  485  5534  5575  5670  689  779  973  execdomains  loadavg self        vmmemctl
    # ls  -l  /proc/8002/exe                    //查询vim所执行的程序
    lrwxrwxrwx 1 root root 02012-10-28 22:50 /proc/8002/exe -> /usr/bin/vim.basic
    # ls  -l  /proc/8002/cwd                    //查询vim的当前目录
    lrwxrwxrwx 1 root root 0 07-25 11:57 /proc/5716/cwd -> /proc
    # ls  -l  /proc/8002/environ                //查询vim的运行环境
    -r--------1 root root 02012-10-28 22:52 /proc/8002/environ

注意:在/proc目录中,可以通过查看cupinfo文件获得处理器的详细信息;通过interrupts文件可以查看当前系统使用的中断号;通过uptime文件可以查看系统运行的时间;通过filesystems文件,可以查看当前系统支持的文件系统类型。

2.2.2 modinfo命令:内核模块信息

modinfo命令用来显示内核模块信息。modinfo命令会检测与内核相关的模块文件,并显示检测的结果。该命令的语法格式如下所示:

    modinfo  [-a, --author][-d, --description][-l, --license][-n, --filename][-p,--parameters][-V, --version][-h, --help]

其中,各选项的具体说明如表2-3所示。

表2-3 modinfo命令的选项说明

例如,显示模块sg的相关信息,命令如下所示。

    # modinfo sg
    /lib/modules/2.4.20-8/kernel/drivers/scsi/pci2000.o
    [root@teacher scsi]# modinfo sg
    filename:   /lib/modules/2.4.20-8/kernel/drivers/scsi/sg.o
    description: "SCSI generic (sg) driver"
    author:     "Douglas Gilbert"
    license:    "GPL"
    parm:      def_reserved_size int, description "size of buffer reserved for each fd"

例如,显示模块pci2000的模块文件,命令如下所示。

    # modinfo -n pci2000
    /lib/modules/2.4.20-8/kernel/drivers/scsi/pci2000.o

2.2.3 cat /etc/issue命令:系统的当前发行版本

文件/etc/issue中保存了当前系统的发行版本。配合使用cat命令可以显示输出版本信息。例如:

    # cat  /etc/issue
    Ubuntu 10.04.1 LTS \n \l
    root@li-desktop:~#

可以看到,当前的发行版本为Ubuntu 10.04.1,其他的常用版本有Red Hat。

2.2.4 cat /proc/version:查看系统内核当前版本

文件/proc/version保存了当前系统版本的相关信息。配合使用cat命令可以查看当前系统版本情况,命令如下所示。

例如,查看当前系统的版本。

    # cat  /proc/version
    Linux  version  2.6.32-24-generic  (buildd@rothera)  (gcc  version  4.4.3  (Ubuntu 4.4.3-4ubuntu5) ) #39-Ubuntu SMP Wed Jul 28 06:07:29 UTC 2010    //友邦图gcc 4.4.3
    root@li-desktop:~#

2.2.5 cat /proc/partitions:查看系统当前分区

文件/proc/partitions保存了当前系统分区的相关信息。配合使用cat命令可以查看当前系统分区情况,命令如下所示。

    # cat  /proc/partitions
    major minor  #blocks  name    rio rmerge rsect ruse wio wmerge wsect wuse running use aveq
      8    0   8388608 sda 7345764861110551222787011640215752921925662003200 015579602231070             //SCSI设备
      8    1    104391 sda1 38 85246 40 17 10 54290 0250 330 // SCSI设备分区1
      8    2   7759395 sda2731266473311028662276501154611544592160640806890 03766101034540              // SCSI设备分区2
      8    3    522112 sda3290 382384150 9243060318721196020 011876001196170
      22    0    496672 hdc 1 3 16 0 0 0 0 0-142678116111612690

2.2.6 cat /proc/interrupts命令:显示中断信息

文件/proc/interrupts中保存了系统中断的相关信息。显示系统中正在使用的中断号(IRQ),可以使用cat命令查看/proc/interrupts文件。例如:

    # cat  /proc/interrupts CPU0
      0:      127  IO-APIC-edge     timer  //定时器中断
      1:    10033  IO-APIC-edge     i8042
      3:        3  IO-APIC-edge
      4:    10342  IO-APIC-edge
      6:        5  IO-APIC-edge     floppy //软盘,一般在有可移动磁盘在工作时的情况下显示
      7:        0  IO-APIC-edge     parport0    //标准端口com 0
      8:        1  IO-APIC-edge     rtc0
      9:        0  IO-APIC-fasteoi  acpi
      12:    55367  IO-APIC-edge     i8042
      14:        0  IO-APIC-edge     ata_piix
      15:   232621  IO-APIC-edge     ata_piix
      16:     1145  IO-APIC-fasteoi  Ensoniq AudioPCI
      17:    23843  IO-APIC-fasteoi  ehci_hcd:usb1, ioc0
      18:      865  IO-APIC-fasteoi  uhci_hcd:usb2
      19:    14044  IO-APIC-fasteoi  vmxnet ether
      24:        0  PCI-MSI-edge     pciehp
      25:        0  PCI-MSI-edge     pciehp     //热插拔事件
      26:        0  PCI-MSI-edge     pciehp
      27:        0  PCI-MSI-edge     pciehp
    ……

2.2.7 cat /proc/filesystems命令:常用文件系统信息

文件/proc/filesystems中保存了当前使用的文件系统信息,使用cat命令查看文件/proc/filesystems,可以获得文件系统相关信息。例如:

    # cat  /proc/filesystems
    nodev    sysfs
    nodev    rootfs                //未加载文件系统
    nodev    bdev
    nodev    proc                  //进程管理文件系统
    nodev    cgroup
    nodev    cpuset
    nodev    tmpfs                 //时间管理文件系统
    nodev    devtmpfs              //驱动映射文件系统
    nodev    debugfs
    nodev    securityfs            //安全管理文件系统
    nodev    sockfs                //套接口文件系统
    nodev    pipefs                //PP管道(进程间通信)
    nodev    anon_inodefs          //文件标识符节点管理文件系统(Linux系统可以说一切都是文件)
    nodev    inotifyfs
    nodev    devpts
        ext3                      //EXT3文件系统
        ext2                      //EXT2文件系统
        ext4                      //EXT4文件系统
    nodev    ramfs                 //光盘文件系统
    nodev    hugetlbfs
    nodev    ecryptfs
    nodev    fuse
        fuseblk
    nodev    fusectl
    nodev    mqueue
    nodev    rpc_pipefs
    nodev    nfs                   //NFS(网络文件系统)
    nodev    nfs4
    nodev    nfsd
    nodev    vmhgfs                //虚拟机共享文件系统
    nodev    binfmt_misc
    root@li-desktop:~#

2.2.8 dmesg:启动信息查询

dmesg命令可以检测和控制内核的缓存,通常用来显示输出系统最后一次启动时的内核内部缓存信息。dmesg命令的语法格式如下所示。

    dmesg  [-c][-n level][-s bufsize]

其中,各选项的具体说明如表2-4所示。

表2-4 dmesg命令选项说明

例如,直接使用dmesg命令显示上次系统启动时的信息,如下所示。

    # dmesg
    Linux  version  2.6.32-24-generic  (buildd@rothera)  (gcc  version  4.4.3  (Ubuntu 4.4.3-4ubuntu5) ) #39-Ubuntu SMP Wed Jul 28 06:07:29 UTC 2010    //友邦图gcc 4.4.3
    BIOS-provided physical RAM map:        //BIOS物理内存地址映射
      BIOS-e820: 0000000000000000-000000000009f800 (usable)
      BIOS-e820: 000000000009f800-00000000000a0000 (reserved)
      BIOS-e820: 00000000000ca000-00000000000cc000 (reserved)
      BIOS-e820: 00000000000dc000-0000000000100000 (reserved)
      BIOS-e820: 0000000000100000-000000000fef0000 (usable)
      BIOS-e820: 000000000fef0000-000000000feff000 (ACPI data)
      BIOS-e820: 000000000feff000-000000000ff00000 (ACPI NVS)
      BIOS-e820: 000000000ff00000-0000000010000000 (usable)
      BIOS-e820: 00000000fec00000-00000000fec10000 (reserved)
      BIOS-e820: 00000000fee00000-00000000fee01000 (reserved)
      BIOS-e820: 00000000fffe0000-0000000100000000 (reserved)
    …  …
    0MB HIGHMEM available.             //可用高端内存为0
    1024MB LOWMEM available.           //1024MB低端内存
    On node 0 totalpages: 65536
    zone(0): 4096 pages.
    zone(1): 61440 pages.
    zone(2): 0 pages.
    … ….
    Kernel command line: ro root=LABEL=/
    Initializing CPU#0
    Detected 2259.329 MHz processor.
    Calibrating delay loop... 4521.98 BogoMIPS
    …  …