Table des matières

Managing Integrated Peripherals

Special Files

In a PC, peripherals are connected to a controler which communicates with the processor via a bus. The controller and associated peripherals require specific drivers. Under Linux, these drivers are normally supplied as kernel modules. Each peripheral is represented by a special file in the /dev directory. Each special file contains the information required by the system in order for it to use the driver.

<note important> Peripherals that require the system to be halted prior to plugging or unplugging them are refered to as Cold Plug Devices. Peripherals that can be plugged/unplugged whilst the system is running are refered to as Hot Plug Devices. </note>

The following output shows the typical content of the /dev directory:

[root@centos ~]# ls -l /dev
total 0
crw-rw----. 1 root    root     10,  55 Apr  9 09:08 autofs
drwxr-xr-x. 2 root    root         620 Apr  9 09:07 block
drwxr-xr-x. 2 root    root          80 Apr  9 09:07 bsg
drwxr-xr-x. 3 root    root          60 Apr  9 09:07 bus
lrwxrwxrwx. 1 root    root           3 Apr  9 09:07 cdrom -> sr0
drwxr-xr-x. 2 root    root        2740 Apr  9 09:08 char
crw-------. 1 root    root      5,   1 Apr  9 09:07 console
lrwxrwxrwx. 1 root    root          11 Apr  9 09:07 core -> /proc/kcore
drwxr-xr-x. 3 root    root          80 Apr  9 09:07 cpu
crw-rw----. 1 root    root     10,  61 Apr  9 09:07 cpu_dma_latency
crw-rw----. 1 root    root     10,  62 Apr  9 09:07 crash
drwxr-xr-x. 5 root    root         100 Apr  9 09:07 disk
lrwxrwxrwx. 1 root    root           3 Apr  9 09:07 dvd -> sr0
lrwxrwxrwx. 1 root    root           3 Apr  9 09:07 fb -> fb0
crw-rw----. 1 root    root     29,   0 Apr  9 09:07 fb0
lrwxrwxrwx. 1 root    root          13 Apr  9 09:07 fd -> /proc/self/fd
crw-rw-rw-. 1 root    root      1,   7 Apr  9 09:07 full
crw-rw-rw-. 1 root    root     10, 229 Apr  9 09:08 fuse
crw-rw----. 1 root    root     10, 228 Apr  9 09:07 hpet
drwxr-xr-x. 2 root    root          40 Apr  9 09:07 hugepages
crw-------. 1 root    root    229,   0 Apr  9 09:07 hvc0
drwxr-xr-x. 3 root    root         240 Apr  9 09:07 input
crw-rw----. 1 root    root      1,  11 Apr  9 09:07 kmsg
srw-rw-rw-. 1 root    root           0 Apr  9 09:07 log
brw-rw----. 1 root    disk      7,   0 Apr  9 09:07 loop0
brw-rw----. 1 root    disk      7,   1 Apr  9 09:07 loop1
brw-rw----. 1 root    disk      7,   2 Apr  9 09:07 loop2
brw-rw----. 1 root    disk      7,   3 Apr  9 09:07 loop3
brw-rw----. 1 root    disk      7,   4 Apr  9 09:07 loop4
brw-rw----. 1 root    disk      7,   5 Apr  9 09:07 loop5
brw-rw----. 1 root    disk      7,   6 Apr  9 09:07 loop6
brw-rw----. 1 root    disk      7,   7 Apr  9 09:07 loop7
crw-rw----. 1 root    lp        6,   0 Apr  9 09:07 lp0
crw-rw----. 1 root    lp        6,   1 Apr  9 09:07 lp1
crw-rw----. 1 root    lp        6,   2 Apr  9 09:07 lp2
crw-rw----. 1 root    lp        6,   3 Apr  9 09:07 lp3
lrwxrwxrwx. 1 root    root          13 Apr  9 09:07 MAKEDEV -> /sbin/MAKEDEV
drwxr-xr-x. 2 root    root          60 Apr  9 09:07 mapper
crw-rw----. 1 root    root     10, 227 Apr  9 09:07 mcelog
crw-r-----. 1 root    kmem      1,   1 Apr  9 09:07 mem
drwxr-xr-x. 2 root    root          60 Apr  9 09:07 net
crw-rw----. 1 root    root     10,  60 Apr  9 09:07 network_latency
crw-rw----. 1 root    root     10,  59 Apr  9 09:07 network_throughput
crw-rw-rw-. 1 root    root      1,   3 Apr  9 09:07 null
crw-r-----. 1 root    kmem     10, 144 Apr  9 09:07 nvram
crw-rw----. 1 root    root      1,  12 Apr  9 09:07 oldmem
crw-r-----. 1 root    kmem      1,   4 Apr  9 09:07 port
crw-------. 1 root    root    108,   0 Apr  9 09:07 ppp
crw-rw-rw-. 1 root    tty       5,   2 Jun 16 05:19 ptmx
drwxr-xr-x. 2 root    root           0 Apr  9 09:07 pts
brw-rw----. 1 root    disk      1,   0 Apr  9 09:07 ram0
brw-rw----. 1 root    disk      1,   1 Apr  9 09:07 ram1
brw-rw----. 1 root    disk      1,  10 Apr  9 09:07 ram10
brw-rw----. 1 root    disk      1,  11 Apr  9 09:07 ram11
brw-rw----. 1 root    disk      1,  12 Apr  9 09:07 ram12
brw-rw----. 1 root    disk      1,  13 Apr  9 09:07 ram13
brw-rw----. 1 root    disk      1,  14 Apr  9 09:07 ram14
brw-rw----. 1 root    disk      1,  15 Apr  9 09:07 ram15
brw-rw----. 1 root    disk      1,   2 Apr  9 09:07 ram2
brw-rw----. 1 root    disk      1,   3 Apr  9 09:07 ram3
brw-rw----. 1 root    disk      1,   4 Apr  9 09:07 ram4
brw-rw----. 1 root    disk      1,   5 Apr  9 09:07 ram5
brw-rw----. 1 root    disk      1,   6 Apr  9 09:07 ram6
brw-rw----. 1 root    disk      1,   7 Apr  9 09:07 ram7
brw-rw----. 1 root    disk      1,   8 Apr  9 09:07 ram8
brw-rw----. 1 root    disk      1,   9 Apr  9 09:07 ram9
crw-rw-rw-. 1 root    root      1,   8 Apr  9 09:07 random
drwxr-xr-x. 2 root    root          60 Apr  9 09:07 raw
lrwxrwxrwx. 1 root    root           4 Apr  9 09:07 root -> sda2
lrwxrwxrwx. 1 root    root           4 Apr  9 09:07 rtc -> rtc0
crw-rw----. 1 root    root    254,   0 Apr  9 09:07 rtc0
lrwxrwxrwx. 1 root    root           3 Apr  9 09:07 scd0 -> sr0
brw-rw----. 1 root    disk      8,   0 Apr  9 09:07 sda
brw-rw----. 1 root    disk      8,   1 Apr  9 09:07 sda1
brw-rw----. 1 root    disk      8,   2 Apr  9 09:07 sda2
brw-rw----. 1 root    disk      8,   3 Apr  9 09:07 sda3
crw-rw----. 1 root    cdrom    21,   0 Apr  9 09:07 sg0
crw-rw----. 1 root    disk     21,   1 Apr  9 09:07 sg1
drwxrwxrwt. 2 root    root         160 Jun 11 15:47 shm
crw-rw----. 1 root    root     10, 231 Apr  9 09:07 snapshot
drwxr-xr-x. 3 root    root         180 Apr  9 09:07 snd
brw-rw----+ 1 root    cdrom    11,   0 Apr  9 09:07 sr0
lrwxrwxrwx. 1 root    root          15 Apr  9 09:07 stderr -> /proc/self/fd/2
lrwxrwxrwx. 1 root    root          15 Apr  9 09:07 stdin -> /proc/self/fd/0
lrwxrwxrwx. 1 root    root          15 Apr  9 09:07 stdout -> /proc/self/fd/1
lrwxrwxrwx. 1 root    root           4 Apr  9 09:07 systty -> tty0
crw-rw-rw-. 1 root    tty       5,   0 Apr  9 09:07 tty
crw--w----. 1 root    tty       4,   0 Apr  9 09:07 tty0
crw--w----. 1 root    tty       4,   1 Apr  9 09:08 tty1
crw--w----. 1 root    tty       4,  10 Apr  9 09:07 tty10
crw--w----. 1 root    tty       4,  11 Apr  9 09:07 tty11
crw--w----. 1 root    tty       4,  12 Apr  9 09:07 tty12
crw--w----. 1 root    tty       4,  13 Apr  9 09:07 tty13
crw--w----. 1 root    tty       4,  14 Apr  9 09:07 tty14
crw--w----. 1 root    tty       4,  15 Apr  9 09:07 tty15
crw--w----. 1 root    tty       4,  16 Apr  9 09:07 tty16
crw--w----. 1 root    tty       4,  17 Apr  9 09:07 tty17
crw--w----. 1 root    tty       4,  18 Apr  9 09:07 tty18
crw--w----. 1 root    tty       4,  19 Apr  9 09:07 tty19
crw-------. 1 root    root      4,   2 Apr  9 09:08 tty2
crw--w----. 1 root    tty       4,  20 Apr  9 09:07 tty20
crw--w----. 1 root    tty       4,  21 Apr  9 09:07 tty21
crw--w----. 1 root    tty       4,  22 Apr  9 09:07 tty22
crw--w----. 1 root    tty       4,  23 Apr  9 09:07 tty23
crw--w----. 1 root    tty       4,  24 Apr  9 09:07 tty24
crw--w----. 1 root    tty       4,  25 Apr  9 09:07 tty25
crw--w----. 1 root    tty       4,  26 Apr  9 09:07 tty26
crw--w----. 1 root    tty       4,  27 Apr  9 09:07 tty27
crw--w----. 1 root    tty       4,  28 Apr  9 09:07 tty28
crw--w----. 1 root    tty       4,  29 Apr  9 09:07 tty29
crw-------. 1 root    root      4,   3 Apr  9 09:08 tty3
crw--w----. 1 root    tty       4,  30 Apr  9 09:07 tty30
crw--w----. 1 root    tty       4,  31 Apr  9 09:07 tty31
crw--w----. 1 root    tty       4,  32 Apr  9 09:07 tty32
crw--w----. 1 root    tty       4,  33 Apr  9 09:07 tty33
crw--w----. 1 root    tty       4,  34 Apr  9 09:07 tty34
crw--w----. 1 root    tty       4,  35 Apr  9 09:07 tty35
crw--w----. 1 root    tty       4,  36 Apr  9 09:07 tty36
crw--w----. 1 root    tty       4,  37 Apr  9 09:07 tty37
crw--w----. 1 root    tty       4,  38 Apr  9 09:07 tty38
crw--w----. 1 root    tty       4,  39 Apr  9 09:07 tty39
crw-------. 1 root    root      4,   4 Apr  9 09:08 tty4
crw--w----. 1 root    tty       4,  40 Apr  9 09:07 tty40
crw--w----. 1 root    tty       4,  41 Apr  9 09:07 tty41
crw--w----. 1 root    tty       4,  42 Apr  9 09:07 tty42
crw--w----. 1 root    tty       4,  43 Apr  9 09:07 tty43
crw--w----. 1 root    tty       4,  44 Apr  9 09:07 tty44
crw--w----. 1 root    tty       4,  45 Apr  9 09:07 tty45
crw--w----. 1 root    tty       4,  46 Apr  9 09:07 tty46
crw--w----. 1 root    tty       4,  47 Apr  9 09:07 tty47
crw--w----. 1 root    tty       4,  48 Apr  9 09:07 tty48
crw--w----. 1 root    tty       4,  49 Apr  9 09:07 tty49
crw-------. 1 root    root      4,   5 Apr  9 09:08 tty5
crw--w----. 1 root    tty       4,  50 Apr  9 09:07 tty50
crw--w----. 1 root    tty       4,  51 Apr  9 09:07 tty51
crw--w----. 1 root    tty       4,  52 Apr  9 09:07 tty52
crw--w----. 1 root    tty       4,  53 Apr  9 09:07 tty53
crw--w----. 1 root    tty       4,  54 Apr  9 09:07 tty54
crw--w----. 1 root    tty       4,  55 Apr  9 09:07 tty55
crw--w----. 1 root    tty       4,  56 Apr  9 09:07 tty56
crw--w----. 1 root    tty       4,  57 Apr  9 09:07 tty57
crw--w----. 1 root    tty       4,  58 Apr  9 09:07 tty58
crw--w----. 1 root    tty       4,  59 Apr  9 09:07 tty59
crw-------. 1 root    root      4,   6 Apr  9 09:08 tty6
crw--w----. 1 root    tty       4,  60 Apr  9 09:07 tty60
crw--w----. 1 root    tty       4,  61 Apr  9 09:07 tty61
crw--w----. 1 root    tty       4,  62 Apr  9 09:07 tty62
crw--w----. 1 root    tty       4,  63 Apr  9 09:07 tty63
crw--w----. 1 root    tty       4,   7 Apr  9 09:07 tty7
crw--w----. 1 root    tty       4,   8 Apr  9 09:07 tty8
crw--w----. 1 root    tty       4,   9 Apr  9 09:07 tty9
crw-rw----. 1 root    dialout   4,  64 Apr  9 09:07 ttyS0
crw-rw----. 1 root    dialout   4,  65 Apr  9 09:07 ttyS1
crw-rw----. 1 root    dialout   4,  66 Apr  9 09:07 ttyS2
crw-rw----. 1 root    dialout   4,  67 Apr  9 09:07 ttyS3
crw-rw-rw-. 1 root    root      1,   9 Apr  9 09:07 urandom
crw-rw----. 1 root    root    250,   0 Apr  9 09:07 usbmon0
crw-rw----. 1 root    root    250,   1 Apr  9 09:07 usbmon1
crw-rw----. 1 vboxadd root     10,  57 Apr  9 09:07 vboxguest
crw-rw-rw-. 1 vboxadd root     10,  56 Apr  9 09:07 vboxuser
crw-rw----. 1 vcsa    tty       7,   0 Apr  9 09:07 vcs
crw-rw----. 1 vcsa    tty       7,   1 Apr  9 09:07 vcs1
crw-rw----. 1 vcsa    tty       7,   2 Apr  9 09:08 vcs2
crw-rw----. 1 vcsa    tty       7,   3 Apr  9 09:08 vcs3
crw-rw----. 1 vcsa    tty       7,   4 Apr  9 09:08 vcs4
crw-rw----. 1 vcsa    tty       7,   5 Apr  9 09:08 vcs5
crw-rw----. 1 vcsa    tty       7,   6 Apr  9 09:08 vcs6
crw-rw----. 1 vcsa    tty       7, 128 Apr  9 09:07 vcsa
crw-rw----. 1 vcsa    tty       7, 129 Apr  9 09:07 vcsa1
crw-rw----. 1 vcsa    tty       7, 130 Apr  9 09:08 vcsa2
crw-rw----. 1 vcsa    tty       7, 131 Apr  9 09:08 vcsa3
crw-rw----. 1 vcsa    tty       7, 132 Apr  9 09:08 vcsa4
crw-rw----. 1 vcsa    tty       7, 133 Apr  9 09:08 vcsa5
crw-rw----. 1 vcsa    tty       7, 134 Apr  9 09:08 vcsa6
crw-rw----. 1 root    root     10,  63 Apr  9 09:07 vga_arbiter
crw-rw-rw-. 1 root    root      1,   5 Apr  9 09:07 zero

As you can see, certain files refer to block devices whilst others refer to character devices:

...
brw-rw----. 1 root    disk      8,   1 Apr  9 09:07 sda1
...
crw-rw-rw-. 1 root    tty       5,   0 Apr  9 09:07 tty
...

The major difference between these two types lies in the way that the communication between the system and the peripheral takes place. In the case of a block file, that communication uses a buffer whilst in the case of a character file the communication takes place directly byte by byte.

The figures that can be seen immediately before the date of the special file are called respectively the major and the minor :

Commands

The lspci Command

This command show a list of the peripherals connected to the PCI, AGP and PCI express buses:

[root@centos ~]# lspci
00:00.0 Host bridge: Intel Corporation 440FX - 82441FX PMC [Natoma] (rev 02)
00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II]
00:01.1 IDE interface: Intel Corporation 82371AB/EB/MB PIIX4 IDE (rev 01)
00:02.0 VGA compatible controller: InnoTek Systemberatung GmbH VirtualBox Graphics Adapter
00:03.0 Ethernet controller: Intel Corporation 82540EM Gigabit Ethernet Controller (rev 02)
00:04.0 System peripheral: InnoTek Systemberatung GmbH VirtualBox Guest Service
00:05.0 Multimedia audio controller: Intel Corporation 82801AA AC'97 Audio Controller (rev 01)
00:06.0 USB controller: Apple Inc. KeyLargo/Intrepid USB
00:07.0 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 08)
00:0d.0 SATA controller: Intel Corporation 82801HM/HEM (ICH8M/ICH8M-E) SATA Controller [AHCI mode] (rev 02)

To obtain peripheral specific information, use the -v or -vv switches whilst specifying the peripheral ID:

[root@centos ~]# lspci -v -s 00:03.0
00:03.0 Ethernet controller: Intel Corporation 82540EM Gigabit Ethernet Controller (rev 02)
	Subsystem: Intel Corporation PRO/1000 MT Desktop Adapter
	Flags: bus master, 66MHz, medium devsel, latency 64, IRQ 10
	Memory at f0000000 (32-bit, non-prefetchable) [size=128K]
	I/O ports at d010 [size=8]
	Capabilities: [dc] Power Management version 2
	Capabilities: [e4] PCI-X non-bridge device
	Kernel driver in use: e1000
	Kernel modules: e1000

[root@centos ~]# lspci -vv -s 00:03.0
00:03.0 Ethernet controller: Intel Corporation 82540EM Gigabit Ethernet Controller (rev 02)
	Subsystem: Intel Corporation PRO/1000 MT Desktop Adapter
	Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
	Status: Cap+ 66MHz+ UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 64 (63750ns min)
	Interrupt: pin A routed to IRQ 10
	Region 0: Memory at f0000000 (32-bit, non-prefetchable) [size=128K]
	Region 2: I/O ports at d010 [size=8]
	Capabilities: [dc] Power Management version 2
		Flags: PMEClk- DSI+ D1- D2- AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
		Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
	Capabilities: [e4] PCI-X non-bridge device
		Command: DPERE- ERO+ RBC=512 OST=1
		Status: Dev=ff:1f.0 64bit- 133MHz- SCD- USC- DC=simple DMMRBC=2048 DMOST=1 DMCRS=8 RSCEM- 266MHz- 533MHz-
	Kernel driver in use: e1000
	Kernel modules: e1000

Command Line Switches

The command line switches of this command are:

[root@centos ~]# lspci --help
lspci: invalid option -- '-'
Usage: lspci [<switches>]

Basic display modes:
-mm		Produce machine-readable output (single -m for an obsolete format)
-t		Show bus tree

Display options:
-v		Be verbose (-vv for very verbose)
-k		Show kernel drivers handling each device
-x		Show hex-dump of the standard part of the config space
-xxx		Show hex-dump of the whole config space (dangerous; root only)
-xxxx		Show hex-dump of the 4096-byte extended config space (root only)
-b		Bus-centric view (addresses and IRQ's as seen by the bus)
-D		Always show domain numbers

Resolving of device ID's to names:
-n		Show numeric ID's
-nn		Show both textual and numeric ID's (names & numbers)
-q		Query the PCI ID database for unknown ID's via DNS
-qq		As above, but re-query locally cached entries
-Q		Query the PCI ID database for all ID's via DNS

Selection of devices:
-s [[[[<domain>]:]<bus>]:][<slot>][.[<func>]]	Show only devices in selected slots
-d [<vendor>]:[<device>]			Show only devices with specified ID's

Other options:
-i <file>	Use specified ID database instead of /usr/share/hwdata/pci.ids
-p <file>	Look up kernel modules in a given file instead of default modules.pcimap
-M		Enable `bus mapping' mode (dangerous; root only)

PCI access options:
-A <method>	Use the specified PCI access method (see `-A help' for a list)
-O <par>=<val>	Set PCI access parameter (see `-O help' for a list)
-G		Enable PCI access debugging
-H <mode>	Use direct hardware access (<mode> = 1 or 2)
-F <file>	Read PCI configuration dump from a given file

The lsusb Command

This command show a list of the peripherals connected to the USB bus:

[root@centos ~]# lsusb
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

To obtain peripheral specific information, use the -d switch whilst specifying the peripheral ID:

Command Line Switches

The command line switches of this command are:

[root@centos ~]# lsusb --help
lsusb: unrecognized option '--help'
Usage: lsusb [options]...
List USB devices
  -v, --verbose
      Increase verbosity (show descriptors)
  -s [[bus]:][devnum]
      Show only devices with specified device and/or
      bus numbers (in decimal)
  -d vendor:[product]
      Show only devices with the specified vendor and
      product ID numbers (in hexadecimal)
  -D device
      Selects which device lsusb will examine
  -t
      Dump the physical USB device hierarchy as a tree
  -V, --version
      Show version of program

The dmidecode Command

The dmidecode Command reads the DMI (Desktop Management Interface) table, also called the SMBIOS (System Management BIOS) and provides information on:

[root@centos ~]# dmidecode
# dmidecode 2.11
SMBIOS 2.5 present.
10 structures occupying 448 bytes.
Table at 0x000E1000.

Handle 0x0000, DMI type 0, 20 bytes
BIOS Information
	Vendor: innotek GmbH
	Version: VirtualBox
	Release Date: 12/01/2006
	Address: 0xE0000
	Runtime Size: 128 kB
	ROM Size: 128 kB
	Characteristics:
		ISA is supported
		PCI is supported
		Boot from CD is supported
		Selectable boot is supported
		8042 keyboard services are supported (int 9h)
		CGA/mono video services are supported (int 10h)
		ACPI is supported

Handle 0x0001, DMI type 1, 27 bytes
System Information
	Manufacturer: innotek GmbH
	Product Name: VirtualBox
	Version: 1.2
	Serial Number: 0
	UUID: Not Settable
	Wake-up Type: Power Switch
	SKU Number: Not Specified
	Family: Virtual Machine

Handle 0x0008, DMI type 2, 15 bytes
Base Board Information
	Manufacturer: Oracle Corporation
	Product Name: VirtualBox
	Version: 1.2
	Serial Number: 0
	Asset Tag: Not Specified
	Features:
		Board is a hosting board
	Location In Chassis: Not Specified
	Chassis Handle: 0x0003
	Type: Motherboard
	Contained Object Handles: 0

Handle 0x0003, DMI type 3, 13 bytes
Chassis Information
	Manufacturer: Oracle Corporation
	Type: Other
	Lock: Not Present
	Version: Not Specified
	Serial Number: Not Specified
	Asset Tag: Not Specified
	Boot-up State: Safe
	Power Supply State: Safe
	Thermal State: Safe
	Security Status: None

Handle 0x0007, DMI type 126, 42 bytes
Inactive

Handle 0x0005, DMI type 126, 15 bytes
Inactive

Handle 0x0006, DMI type 126, 28 bytes
Inactive

Handle 0x0002, DMI type 11, 7 bytes
OEM Strings
	String 1: vboxVer_4.3.0
	String 2: vboxRev_89960

Handle 0x0008, DMI type 128, 8 bytes
OEM-specific Type
	Header and Data:
		80 08 08 00 B5 F9 22 00

Handle 0xFEFF, DMI type 127, 4 bytes
End Of Table

Command Line Switches

The command line switches of this command are:

[root@centos ~]# dmidecode --help
Usage: dmidecode [OPTIONS]
Options are:
 -d, --dev-mem FILE     Read memory from device FILE (default: /dev/mem)
 -h, --help             Display this help text and exit
 -q, --quiet            Less verbose output
 -s, --string KEYWORD   Only display the value of the given DMI string
 -t, --type TYPE        Only display the entries of given type
 -u, --dump             Do not decode the entries
     --dump-bin FILE    Dump the DMI data to a binary file
     --from-dump FILE   Read the DMI data from a binary file
 -V, --version          Display the version and exit

The /proc Directory

The /proc directory contains virtual files and directories wich are created dynamically when consulted. Only root can consult all of the information in /proc.

[root@centos ~]# ls /proc
1     1355  1492  1755  1829  1922  2052  2114  2139  2206  27     3      38   8          cpuinfo      interrupts  kpagecount  mtrr          stat           vmallocinfo
10    1393  15    1771  1831  1931  2057  2115  2140  23    27466  30     388  9          crypto       iomem       kpageflags  net           swaps          vmstat
11    1397  1512  1779  1838  1939  2060  2117  2141  2363  27467  300    39   971        devices      ioports     loadavg     pagetypeinfo  sys            zoneinfo
1188  14    1574  1787  1839  1961  2085  2126  2142  2371  27468  31     4    972        diskstats    ipmi        locks       partitions    sysrq-trigger
12    1403  1586  1798  1840  1970  2093  2127  2144  2372  27482  31548  433  acpi       dma          irq         mdstat      sched_debug   sysvipc
1230  1413  16    18    1855  1978  2098  2129  2147  2373  27488  31644  5    asound     driver       kallsyms    meminfo     schedstat     timer_list
13    1438  1658  1811  1857  1979  21    2131  2151  2385  28     339    577  buddyinfo  execdomains  kcore       misc        scsi          timer_stats
1325  1447  1666  1818  1875  2     2106  2133  2156  24    29     340    6    bus        fb           keys        modules     self          tty
1336  1448  17    1825  1881  20    2110  2134  22    25    290    36     69   cgroups    filesystems  key-users   mounts      slabinfo      uptime
1340  1479  1747  1827  19    2045  2111  2137  2202  26    291    377    7    cmdline    fs           kmsg        mtd         softirqs      version

Sub-directories

ide/scsi

This sub-directory contains disk capacity, disk type and disk geometry information.

acpi

This sub-directory contains information on energy management, temperatures, fan speeds and battery levels.

bus

This sub-directory contains a sub-directory for each bus.

net

This sub-directory contains information concerning the network.

sys

This sub-directory contains files used by root to configure the kernel. For instance, the following command configiresthe kernel to ignore incoming pings:

# echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all [Entrée]

The sysctl Command

Files in the /proc/sys can be administered by using the sysctl command.

The sysctl command applies rules at system boot that are defined in the /etc/sysctl.conf file:

[root@centos ~]# cat /etc/sysctl.conf 
# Kernel sysctl configuration file for Red Hat Linux
#
# For binary values, 0 is disabled, 1 is enabled.  See sysctl(8) and
# sysctl.conf(5) for more details.

# Controls IP packet forwarding
net.ipv4.ip_forward = 0

# Controls source route verification
net.ipv4.conf.default.rp_filter = 1

# Do not accept source routing
net.ipv4.conf.default.accept_source_route = 0

# Controls the System Request debugging functionality of the kernel
kernel.sysrq = 0

# Controls whether core dumps will append the PID to the core filename.
# Useful for debugging multi-threaded applications.
kernel.core_uses_pid = 1

# Controls the use of TCP syncookies
net.ipv4.tcp_syncookies = 1

# Disable netfilter on bridges.
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0

# Controls the default maxmimum size of a mesage queue
kernel.msgmnb = 65536

# Controls the maximum size of a message, in bytes
kernel.msgmax = 65536

# Controls the maximum shared segment size, in bytes
kernel.shmmax = 4294967295

# Controls the maximum number of shared memory segments, in pages
kernel.shmall = 268435456
Command Line Switches

The command line switches of this command are:

[root@centos ~]# sysctl --help
usage:  sysctl [-n] [-e] variable ... 
        sysctl [-n] [-e] [-q] -w variable=value ... 
        sysctl [-n] [-e] -a 
        sysctl [-n] [-e] [-q] -p <file>   (default /etc/sysctl.conf) 
        sysctl [-n] [-e] -A

Files

/proc/cpuinfo

[root@centos ~]# cat /proc/cpuinfo
processor	: 0
vendor_id	: GenuineIntel
cpu family	: 6
model		: 37
model name	: Intel(R) Core(TM) i5 CPU       M 480  @ 2.67GHz
stepping	: 5
cpu MHz		: 2647.112
cache size	: 6144 KB
fdiv_bug	: no
hlt_bug		: no
f00f_bug	: no
coma_bug	: no
fpu		: yes
fpu_exception	: yes
cpuid level	: 5
wp		: yes
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx lm constant_tsc up pni monitor ssse3 lahf_lm
bogomips	: 5294.22
clflush size	: 64
cache_alignment	: 64
address sizes	: 36 bits physical, 48 bits virtual
power management:

/proc/interrupts

[root@centos ~]# cat /proc/interrupts
           CPU0       
  0:        122    XT-PIC-XT        timer
  1:        974    XT-PIC-XT        i8042
  2:          0    XT-PIC-XT        cascade
  8:          0    XT-PIC-XT        rtc0
  9:      38140    XT-PIC-XT        acpi, vboxguest
 10:     102335    XT-PIC-XT        eth0
 11:      51228    XT-PIC-XT        ohci_hcd:usb1, ahci, Intel 82801AA-ICH
 12:       1340    XT-PIC-XT        i8042
 14:          0    XT-PIC-XT        ata_piix
 15:     307485    XT-PIC-XT        ata_piix
NMI:          0   Non-maskable interrupts
LOC:    3953311   Local timer interrupts
SPU:          0   Spurious interrupts
PMI:          0   Performance monitoring interrupts
IWI:          0   IRQ work interrupts
RES:          0   Rescheduling interrupts
CAL:          0   Function call interrupts
TLB:          0   TLB shootdowns
TRM:          0   Thermal event interrupts
THR:          0   Threshold APIC interrupts
MCE:          0   Machine check exceptions
MCP:        171   Machine check polls
ERR:          0
MIS:          0

/proc/dma

[root@centos ~]# cat /proc/dma 
 4: cascade

/proc/ioports

[root@centos ~]# cat /proc/ioports
0000-001f : dma1
0020-0021 : pic1
0040-0043 : timer0
0050-0053 : timer1
0060-0060 : keyboard
0064-0064 : keyboard
0070-0071 : rtc_cmos
  0070-0071 : rtc0
0080-008f : dma page reg
00a0-00a1 : pic2
00c0-00df : dma2
00f0-00ff : fpu
0170-0177 : 0000:00:01.1
  0170-0177 : ata_piix
01f0-01f7 : 0000:00:01.1
  01f0-01f7 : ata_piix
0376-0376 : 0000:00:01.1
  0376-0376 : ata_piix
03c0-03df : vga+
03f6-03f6 : 0000:00:01.1
  03f6-03f6 : ata_piix
0cf8-0cff : PCI conf1
4000-4003 : ACPI PM1a_EVT_BLK
4004-4005 : ACPI PM1a_CNT_BLK
4008-400b : ACPI PM_TMR
4020-4021 : ACPI GPE0_BLK
d000-d00f : 0000:00:01.1
  d000-d00f : ata_piix
d010-d017 : 0000:00:03.0
  d010-d017 : e1000
d020-d03f : 0000:00:04.0
d100-d1ff : 0000:00:05.0
  d100-d1ff : Intel 82801AA-ICH
d200-d23f : 0000:00:05.0
  d200-d23f : Intel 82801AA-ICH
d240-d247 : 0000:00:0d.0
  d240-d247 : ahci
d250-d257 : 0000:00:0d.0
  d250-d257 : ahci
d260-d26f : 0000:00:0d.0
  d260-d26f : ahci

<note warning> If two peripherals have the same port, both peripherals will be unusable. </note>

/proc/devices

[root@centos ~]# cat /proc/devices
Character devices:
  1 mem
  4 /dev/vc/0
  4 tty
  4 ttyS
  5 /dev/tty
  5 /dev/console
  5 /dev/ptmx
  7 vcs
 10 misc
 13 input
 14 sound
 21 sg
 29 fb
 99 ppdev
116 alsa
128 ptm
136 pts
162 raw
180 usb
189 usb_device
202 cpu/msr
203 cpu/cpuid
226 drm
250 hidraw
251 usbmon
252 bsg
253 pcmcia
254 rtc

Block devices:
  1 ramdisk
259 blkext
  7 loop
  8 sd
  9 md
 11 sr
 65 sd
 66 sd
 67 sd
 68 sd
 69 sd
 70 sd
 71 sd
128 sd
129 sd
130 sd
131 sd
132 sd
133 sd
134 sd
135 sd
253 device-mapper
254 mdp

/proc/modules

[root@centos ~]# cat /proc/modules
fuse 59447 0 - Live 0xf7f05000
vboxsf 35841 0 - Live 0xf7ffd000
autofs4 20373 3 - Live 0xf7eca000
sunrpc 212455 1 - Live 0xf8031000
8021q 20323 0 - Live 0xf7e5c000
garp 5703 1 8021q, Live 0xf7e48000
stp 1626 1 garp, Live 0xf7e3f000
llc 4258 2 garp,stp, Live 0xf7e1a000
ipt_REJECT 1867 2 - Live 0xf82b0000
nf_conntrack_ipv4 7694 2 - Live 0xf82a7000
nf_defrag_ipv4 1039 1 nf_conntrack_ipv4, Live 0xf829d000
iptable_filter 2173 1 - Live 0xf8295000
ip_tables 9567 1 iptable_filter, Live 0xf828c000
ip6t_REJECT 3987 2 - Live 0xf827e000
nf_conntrack_ipv6 7207 2 - Live 0xf8275000
nf_defrag_ipv6 8897 1 nf_conntrack_ipv6, Live 0xf826a000
xt_state 1064 4 - Live 0xf8260000
nf_conntrack 65620 3 nf_conntrack_ipv4,nf_conntrack_ipv6,xt_state, Live 0xf8243000
ip6table_filter 2245 1 - Live 0xf8224000
ip6_tables 10867 1 ip6table_filter, Live 0xf821a000
ipv6 264187 35 ip6t_REJECT,nf_conntrack_ipv6,nf_defrag_ipv6, Live 0xf81c2000
ppdev 7297 0 - Live 0xf80d8000
parport_pc 19086 0 - Live 0xf808f000
parport 29925 2 ppdev,parport_pc, Live 0xf8077000
microcode 12216 0 - Live 0xf802d000
sg 24038 0 - Live 0xf801c000
i2c_piix4 11156 0 - Live 0xf7ed9000
i2c_core 25632 1 i2c_piix4, Live 0xf7f19000
snd_intel8x0 24281 2 - Live 0xf7efa000
snd_ac97_codec 95611 1 snd_intel8x0, Live 0xf7f84000
ac97_bus 968 1 snd_ac97_codec, Live 0xf7e87000
snd_seq 44709 0 - Live 0xf7edf000
snd_seq_device 5124 1 snd_seq, Live 0xf7e54000
snd_pcm 67800 2 snd_intel8x0,snd_ac97_codec, Live 0xf7e8e000
snd_timer 17152 2 snd_seq,snd_pcm, Live 0xf7e27000
snd 51792 10 snd_intel8x0,snd_ac97_codec,snd_seq,snd_seq_device,snd_pcm,snd_timer, Live 0xf7e6a000
soundcore 6390 1 snd, Live 0xf7e21000
snd_page_alloc 6882 2 snd_intel8x0,snd_pcm, Live 0xf7e17000
vboxguest 195019 7 vboxsf, Live 0xf8bff000
e1000 149778 0 - Live 0xf8743000
ext4 328781 2 - Live 0xf7fab000
jbd2 75154 1 ext4, Live 0xf7f24000
mbcache 6017 1 ext4, Live 0xf7f02000
sd_mod 34923 4 - Live 0xf7ef0000
crc_t10dif 1217 1 sd_mod, Live 0xf7edd000
sr_mod 13282 0 - Live 0xf7ed4000
cdrom 33416 1 sr_mod, Live 0xf7ec0000
ahci 34601 3 - Live 0xf7ea1000
pata_acpi 2513 0 - Live 0xf7e8c000
ata_generic 2805 0 - Live 0xf7e85000
ata_piix 20413 0 - Live 0xf7e78000
dm_mirror 11774 0 - Live 0xf7e66000
dm_region_hash 9644 1 dm_mirror, Live 0xf7e58000
dm_log 8322 2 dm_mirror,dm_region_hash, Live 0xf7e4c000
dm_mod 68819 2 dm_mirror,dm_log, Live 0xf7e2d000

/proc/diskstats

[root@centos ~]# cat /proc/diskstats
   1       0 ram0 0 0 0 0 0 0 0 0 0 0 0
   1       1 ram1 0 0 0 0 0 0 0 0 0 0 0
   1       2 ram2 0 0 0 0 0 0 0 0 0 0 0
   1       3 ram3 0 0 0 0 0 0 0 0 0 0 0
   1       4 ram4 0 0 0 0 0 0 0 0 0 0 0
   1       5 ram5 0 0 0 0 0 0 0 0 0 0 0
   1       6 ram6 0 0 0 0 0 0 0 0 0 0 0
   1       7 ram7 0 0 0 0 0 0 0 0 0 0 0
   1       8 ram8 0 0 0 0 0 0 0 0 0 0 0
   1       9 ram9 0 0 0 0 0 0 0 0 0 0 0
   1      10 ram10 0 0 0 0 0 0 0 0 0 0 0
   1      11 ram11 0 0 0 0 0 0 0 0 0 0 0
   1      12 ram12 0 0 0 0 0 0 0 0 0 0 0
   1      13 ram13 0 0 0 0 0 0 0 0 0 0 0
   1      14 ram14 0 0 0 0 0 0 0 0 0 0 0
   1      15 ram15 0 0 0 0 0 0 0 0 0 0 0
   7       0 loop0 0 0 0 0 0 0 0 0 0 0 0
   7       1 loop1 0 0 0 0 0 0 0 0 0 0 0
   7       2 loop2 0 0 0 0 0 0 0 0 0 0 0
   7       3 loop3 0 0 0 0 0 0 0 0 0 0 0
   7       4 loop4 0 0 0 0 0 0 0 0 0 0 0
   7       5 loop5 0 0 0 0 0 0 0 0 0 0 0
   7       6 loop6 0 0 0 0 0 0 0 0 0 0 0
   7       7 loop7 0 0 0 0 0 0 0 0 0 0 0
  11       0 sr0 0 0 0 0 0 0 0 0 0 0 0
   8       0 sda 33391 5791 1232722 251998 19357 267987 2298676 1462247 0 268156 1714173
   8       1 sda1 783 351 49488 1249 22 6 68 141 0 975 1379
   8       2 sda2 32102 5408 1178930 250304 19285 267981 2298608 1461984 0 267063 1712228
   8       3 sda3 332 31 2904 333 0 0 0 0 0 333 333

/proc/partitions

[root@centos ~]# cat /proc/partitions
major minor  #blocks  name

   8        0   20971520 sda
   8        1     102400 sda1
   8        2    5120000 sda2
   8        3    2096128 sda3

/proc/swaps

[root@centos ~]# cat /proc/swaps
Filename				Type		Size	Used	Priority
/dev/sda3                               partition	2096120	0	-1

/proc/loadavg

[root@centos ~]# cat /proc/loadavg
0.00 0.00 0.00 1/231 32129

/proc/meminfo

[root@centos ~]# cat /proc/meminfo
MemTotal:        1915472 kB
MemFree:          662856 kB
Buffers:           88732 kB
Cached:           959116 kB
SwapCached:            0 kB
Active:           656708 kB
Inactive:         483352 kB
Active(anon):      92268 kB
Inactive(anon):     4316 kB
Active(file):     564440 kB
Inactive(file):   479036 kB
Unevictable:           0 kB
Mlocked:               0 kB
HighTotal:       1165256 kB
HighFree:         109244 kB
LowTotal:         750216 kB
LowFree:          553612 kB
SwapTotal:       2096120 kB
SwapFree:        2096120 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:         92228 kB
Mapped:            53416 kB
Shmem:              4376 kB
Slab:              91496 kB
SReclaimable:      58008 kB
SUnreclaim:        33488 kB
KernelStack:        1840 kB
PageTables:         5908 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     3053856 kB
Committed_AS:     453216 kB
VmallocTotal:     122880 kB
VmallocUsed:       25776 kB
VmallocChunk:      83448 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:       14328 kB
DirectMap2M:      892928 kB

/proc/version

[root@centos ~]# cat /proc/version
Linux version 2.6.32-358.23.2.el6.i686 (mockbuild@c6b9.bsys.dev.centos.org) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-3) (GCC) ) #1 SMP Wed Oct 16 17:21:31 UTC 2013

Interpreting Information in /proc

The information found in files in the /proc filesystem can be interpreted using the following commands:

Commands

free

The free command shows total, used, free, shared, buffered, cached and swapped memory:

[root@centos ~]# free -m
             total       used       free     shared    buffers     cached
Mem:          1007        617        389          0         37        359
-/+ buffers/cache:        220        787
Swap:         1999          0       1999

In the above example, you can see:

The -/+ buffers/cache: line indicates that applications are using 220 MB and that they have 787 MB of free memory (37+359+389).

The command line switches of this command are:

[root@centos ~]# free -h
free: invalid option -- 'h'
usage: free [-b|-k|-m|-g] [-l] [-o] [-t] [-s delay] [-c count] [-V]
  -b,-k,-m,-g show output in bytes, KB, MB, or GB
  -l show detailed low and high memory statistics
  -o use old format (no -/+buffers/cache line)
  -t display total for RAM + swap
  -s update every [delay] seconds
  -c update [count] times
  -V display version information and exit
uptime or w

Each of these commands show the load average over the past 1, 5 and 15 minutes:

[root@centos ~]# uptime
 17:19:49 up 2 min,  2 users,  load average: 0.35, 0.21, 0.08
[root@centos ~]# w
 17:19:51 up 2 min,  2 users,  load average: 0.35, 0.21, 0.08
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
trainee  tty1     :0               17:18    1:56   2.25s  0.14s pam: gdm-password
trainee  pts/0    :0.0             17:18    0.00s  0.16s  0.64s gnome-terminal

The load average indicates the number of processes being executed and waiting to be executed for the period concerned.

If the load average of a single-core system was 3.48 4.00 3.85 this would indicate a bottleneck since, on average:

The command line switches of these commands are:

[root@centos ~]# uptime --help
usage: uptime [-V]
    -V    display version
[root@centos ~]# w --help
w : option invalide -- '-'
usage: w -hlsufV [user]
    -h    skip header
    -l    long listing (default)
    -s    short listing
    -u    ignore uid of processes
    -f    toggle FROM field (default on)
    -V    display version
iostat

The iostat command show disk, terminal and streamer statistics:

[root@centos ~]# iostat
Linux 2.6.32-358.23.2.el6.i686 (centos.fenestros.loc) 	06/16/2014 	_i686_	(1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           9.04    0.00   17.92   31.19    0.00   41.85

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda              87.65      4300.73       297.09     331500      22900

The command line switches of this command are:

[root@centos ~]# iostat --help
Usage: iostat [ options ] [ <interval> [ <count> ] ]
Options are:
[ -c ] [ -d ] [ -N ] [ -n ] [ -h ] [ -k | -m ] [ -t ] [ -V ] [ -x ] [ -z ]
[ <device> [...] | ALL ] [ -p [ <device> [,...] | ALL ] ]
vmstat

The vmstat commands shows memory, pagination and processor statistics:

[root@centos ~]# vmstat 1 10
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 1601536  26936 139004    0    0  2102    59  254  585  4  7 77 12  0	
 0  0      0 1601528  26936 139028    0    0     0     0   95  183  0  0 100  0  0	
 0  0      0 1601528  26936 139028    0    0     0     0   70  138  0  0 100  0  0	
 0  0      0 1601528  26936 139028    0    0     0     0   94  173  0  1 99  0  0	
 0  0      0 1601536  26936 139028    0    0     0     0   82  171  0  0 100  0  0	
 0  0      0 1601536  26944 139036    0    0     0    36   98  183  0  1 99  0  0	
 0  0      0 1601536  26944 139036    0    0     0     0   78  144  0  0 100  0  0	
 0  0      0 1601528  26944 139036    0    0     0     0   92  174  0  0 100  0  0	
 0  0      0 1601272  26944 139040    0    0     0     0   89  144  1  1 98  0  0	
 0  0      0 1601272  26944 139040    0    0     0     0  123  212  1  1 98  0  0	

The command line switches of this command are:

[root@centos ~]# vmstat --help
usage: vmstat [-V] [-n] [delay [count]]
              -V prints version.
              -n causes the headers not to be reprinted regularly.
              -a print inactive/active page stats.
              -d prints disk statistics
              -D prints disk table
              -p prints disk partition statistics
              -s prints vm table
              -m prints slabinfo
              -t add timestamp to output
              -S unit size
              delay is the delay between updates in seconds. 
              unit size k:1000 K:1024 m:1000000 M:1048576 (default is K)
              count is the number of updates.

By default vmstat shows statistics from boot until current time.

mpstat

The mpstat command shows detailed statistics concerning CPUs :

[root@centos ~]# mpstat
Linux 2.6.32-358.23.2.el6.i686 (centos.fenestros.loc) 	06/16/2014 	_i686_	(1 CPU)

05:24:40 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
05:24:40 PM  all    2.31    0.00    3.76    6.70    0.19    0.03    0.00    0.00   87.01

If there are several CPU's in the system, statistics can be viewed by core and as an average:

[root@centos ~]# mpstat -P ALL
Linux 2.6.32-358.23.2.el6.i686 (centos.fenestros.loc) 	06/16/2014 	_i686_	(1 CPU)

05:24:52 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
05:24:52 PM  all    2.26    0.00    3.67    6.52    0.19    0.03    0.00    0.00   87.34
05:24:52 PM    0    2.26    0.00    3.67    6.52    0.19    0.03    0.00    0.00   87.34

Finally, mpstat is capable of showing statistics over time. In the following example you can see 5 data sets, one taken every 2 seconds:

[root@centos ~]# mpstat -P ALL 2 5
Linux 2.6.32-358.23.2.el6.i686 (centos.fenestros.loc) 	06/16/2014 	_i686_	(1 CPU)

05:25:20 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
05:25:22 PM  all    0.51    0.00    0.51    0.00    0.00    0.00    0.00    0.00   98.99
05:25:22 PM    0    0.51    0.00    0.00    0.00    0.00    0.00    0.00    0.00   99.49

05:25:22 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
05:25:24 PM  all    0.51    0.00    0.51    0.00    0.00    0.00    0.00    0.00   98.99
05:25:24 PM    0    0.51    0.00    0.51    0.00    0.00    0.00    0.00    0.00   98.99

05:25:24 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
05:25:26 PM  all    1.01    0.00    0.51    0.00    0.00    0.00    0.00    0.00   98.48
05:25:26 PM    0    1.01    0.00    0.51    0.00    0.00    0.00    0.00    0.00   98.48

05:25:26 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
05:25:28 PM  all    0.51    0.00    0.51    0.00    0.00    0.00    0.00    0.00   98.99
05:25:28 PM    0    0.51    0.00    0.51    0.00    0.00    0.00    0.00    0.00   98.99

05:25:28 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
05:25:30 PM  all    0.51    0.00    0.00    0.00    0.00    0.00    0.00    0.00   99.49
05:25:30 PM    0    0.51    0.00    0.00    0.00    0.00    0.00    0.00    0.00   99.49

Average:     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
Average:     all    0.61    0.00    0.40    0.00    0.00    0.00    0.00    0.00   98.99
Average:       0    0.61    0.00    0.30    0.00    0.00    0.00    0.00    0.00   99.09

The command line switches of this command are:

[root@centos ~]# mpstat --help
Usage: mpstat [ options ] [ <interval> [ <count> ] ]
Options are:
[ -A ] [ -I { SUM | CPU | ALL } ] [ -u ]
[ -P { <cpu> [,...] | ON | ALL } ] [ -V ]
sar

The sar command can survey all system resources dependant upon the switch that is used. Several important switches are:

Switch Description
-u CPU usage in %
-q Number of processes in the process queue
-r Memory usage
-w Swap usage
-p Pagination usage
-b Buffer usage
-d Disk usage

The /usr/lib/sa/sadc command is used to collect data:

[root@centos ~]# ls /usr/lib/sa
sa1  sa2  sadc

The /usr/lib/sa/sa1 script calls the /usr/lib/sa/sadc command and can use two switches:

Switch Description
-t Interval
-n Count

The /usr/lib/sa/sa2 script also creates a log at /var/log/sa/sar<dd>, where <dd> is the day of the month.

Both of these scripts should ideally be called by cron or anacron.

To see how these scripts work, use the following command:

[root@centos ~]# /usr/lib/sa/sa1 5 5

Once the script has completed, use the following commands:

[root@centos ~]# sar
Linux 2.6.32-358.23.2.el6.i686 (centos.fenestros.loc) 	06/17/2014 	_i686_	(1 CPU)

07:40:01 AM     CPU     %user     %nice   %system   %iowait    %steal     %idle
07:50:02 AM     all      0.22      0.00      0.24      0.09      0.00     99.45
07:52:51 AM     all      0.26      0.00      0.30      0.33      0.00     99.11
07:52:56 AM     all      0.20      0.00      0.40      0.20      0.00     99.19
07:53:01 AM     all      0.00      0.00      0.40      0.20      0.00     99.39
07:53:06 AM     all      0.20      0.00      0.20      0.00      0.00     99.60
07:53:11 AM     all      0.00      0.00      0.40      0.00      0.00     99.60
Average:        all      0.23      0.00      0.26      0.14      0.00     99.37
[root@centos ~]# sar -u 5 3
Linux 2.6.32-358.23.2.el6.i686 (centos.fenestros.loc) 	06/17/2014 	_i686_	(1 CPU)

07:54:16 AM     CPU     %user     %nice   %system   %iowait    %steal     %idle
07:54:21 AM     all      0.20      0.00      0.40      0.00      0.00     99.39
07:54:26 AM     all      0.40      0.00      0.60      0.00      0.00     98.99
07:54:31 AM     all      0.20      0.00      0.20      0.00      0.00     99.60
Average:        all      0.27      0.00      0.40      0.00      0.00     99.33
[root@centos ~]# sar -r 5 3
Linux 2.6.32-358.23.2.el6.i686 (centos.fenestros.loc) 	06/17/2014 	_i686_	(1 CPU)

07:54:50 AM kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit
07:54:55 AM   1595940    319532     16.68     27428    140012    423960     10.57
07:55:00 AM   1595956    319516     16.68     27428    140012    423960     10.57
07:55:05 AM   1595940    319532     16.68     27428    140012    423960     10.57
Average:      1595945    319527     16.68     27428    140012    423960     10.57
[root@centos ~]# sar -w 5 3
Linux 2.6.32-358.23.2.el6.i686 (centos.fenestros.loc) 	06/17/2014 	_i686_	(1 CPU)

07:55:31 AM    proc/s   cswch/s
07:55:36 AM      0.00    198.38
07:55:41 AM      0.00    170.56
07:55:46 AM      0.00    211.74
Average:         0.00    193.54
[root@centos ~]# sar -b 5 3
Linux 2.6.32-358.23.2.el6.i686 (centos.fenestros.loc) 	06/17/2014 	_i686_	(1 CPU)

07:55:50 AM       tps      rtps      wtps   bread/s   bwrtn/s
07:55:55 AM      0.20      0.00      0.20      0.00      1.61
07:56:00 AM      0.81      0.00      0.81      0.00      9.70
07:56:05 AM      0.00      0.00      0.00      0.00      0.00
Average:         0.34      0.00      0.34      0.00      3.77
[root@centos ~]# sar -d 5 3
Linux 2.6.32-358.23.2.el6.i686 (centos.fenestros.loc) 	06/17/2014 	_i686_	(1 CPU)

07:56:39 AM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
07:56:44 AM    dev8-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

07:56:44 AM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
07:56:49 AM    dev8-0      0.81      0.00      9.72     12.00      0.00      1.25      0.75      0.06

07:56:49 AM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
07:56:54 AM    dev8-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

Average:          DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
Average:       dev8-0      0.27      0.00      3.23     12.00      0.00      1.25      0.75      0.02
[root@centos ~]# sar -p 5 3
Linux 2.6.32-358.23.2.el6.i686 (centos.fenestros.loc) 	06/17/2014 	_i686_	(1 CPU)

07:57:12 AM     CPU     %user     %nice   %system   %iowait    %steal     %idle
07:57:17 AM     all      0.20      0.00      0.40      0.00      0.00     99.39
07:57:22 AM     all      0.40      0.00      0.60      0.20      0.00     98.79
07:57:27 AM     all      0.20      0.00      0.40      0.00      0.00     99.39
Average:        all      0.27      0.00      0.47      0.07      0.00     99.19
[root@centos ~]# sar -v 5 3
Linux 2.6.32-358.23.2.el6.i686 (centos.fenestros.loc) 	06/17/2014 	_i686_	(1 CPU)

07:57:53 AM dentunusd   file-nr  inode-nr    pty-nr
07:57:58 AM      8284      4352     13857         4
07:58:03 AM      8284      4352     13857         4
07:58:08 AM      8284      4352     13857         4
Average:         8284      4352     13857         4

The command line switches of this command are:

[root@centos ~]# sar --help
Usage: sar [ options ] [ <interval> [ <count> ] ]
Options are:
[ -A ] [ -b ] [ -B ] [ -C ] [ -d ] [ -h ] [ -m ] [ -p ] [ -q ] [ -r ] [ -R ]
[ -S ] [ -t ] [ -u [ ALL ] ] [ -v ] [ -V ] [ -w ] [ -W ] [ -y ]
[ -I { <int> [,...] | SUM | ALL | XALL } ] [ -P { <cpu> [,...] | ALL } ]
[ -n { <keyword> [,...] | ALL } ]
[ -o [ <filename> ] | -f [ <filename> ] ]
[ -i <interval> ] [ -s [ <hh:mm:ss> ] ] [ -e [ <hh:mm:ss> ] ]

Production Environements

Identifying a System with a CPU Bottleneck

The use of the following commands should clearly show CPU bottlenecks:

Identifying a Memory Problem

The use of the following commands should clearly show memory problems:

Identifying I/O Bottlenecks

The use of the following command should clearly show I/O bottlenecks:

USB Modules

The Universal Serial Bus can offer data transfer speeds of upto 480Mb/s for version 2.0 and upto 4.8 Gb/s for version 3.0. Under Linux the USB modules are:

USB Version Module Name
1.0\1.1 UHCI Universal Controller Host Interface
OHCI Open Controller Host Interface
2.0 EHCI Enhanced Host Controller Interface
3.0 XHCI Extensible Host Controller Interface

The following table shows a list of commonly used USB modules:

Module Peripheral
usb_storage Block devices
usbhid Human Interface Device
snd-usb-audio Sound cards
usbvidéo Video acquisition cards
irda-usb IR peripherals
usbnet NICs

These modules can be loaded by any one of the following:

<note> Insert a USB stick and configure VirtualBox to mount it in your VM. </note>

udev

The 2.6 Kernel series is capable of hotplugging. Linux uses three componants to manage hotplugging:

The roles of each componant are as follows:

When Linux is booted, udev plays an important role:

udev uses the sysfs filesystem mounted on /sys which renders the peripherals visible to udev in user space. For example when a USB stick is inserted, udev creates /dev/sdb1 automatically:

[root@centos ~]# ls /dev | grep sdb
sdb
sdb1
[root@centos ~]# ls /dev/.udev/db | grep sdb
block:sdb
block:sdb1
[root@centos ~]# ls /sys/block/sdb
alignment_offset  capability  device             ext_range  inflight  queue  removable  sdb1  slaves  subsystem  uevent
bdi               dev         discard_alignment  holders    power     range  ro         size  stat    trace

and then uses the information found in the /lib/modules/`uname -r`/modules.alias file to find the appropriate driver:

[root@centos ~]# more /lib/modules/`uname -r`/modules.alias
# Aliases extracted from modules themselves.
alias acpi acpi_cpufreq
alias char-major-10-184 microcode
alias aes-asm aes_i586
alias aes aes_i586
alias twofish-asm twofish_i586
alias twofish twofish_i586
alias salsa20-asm salsa20_i586
alias salsa20 salsa20_i586
alias crc32c-intel crc32c_intel
alias crc32c crc32c_intel
alias nls_tis-620 nls_cp874
alias nls_sjis nls_cp932
alias nls_gb2312 nls_cp936
alias nls_euc-kr nls_cp949
alias nls_big5 nls_cp950
alias nls_iso8859-8 nls_cp1255
alias nfs-layouttype4-1 nfs_layout_nfsv41_files
alias char-major-10-229 fuse
alias devname:btrfs-control btrfs
alias char-major-10-234 btrfs
alias cipher_null crypto_null
alias digest_null crypto_null
alias compress_null crypto_null
alias sha256 sha256_generic
alias sha224 sha256_generic
alias sha512 sha512_generic
alias sha384 sha512_generic
alias wp256 wp512
alias wp384 wp512
alias tgr128 tgr192
alias tgr160 tgr192
alias rfc3686 ctr
--More--(0%)

The contents of the /dev/.udev/db/block:sdb1 file is:

[root@centos ~]# cat /dev/.udev/db/block:sdb1
N:sdb1
S:block/8:17
S:disk/by-id/usb-_USB_DISK_2.0_0710433A0D8D6A52-0:0-part1
S:disk/by-path/pci-0000:00:06.0-usb-0:1:1.0-scsi-0:0:0:0-part1
S:disk/by-uuid/2B1E-1434
S:disk/by-label/USB\x20DISK
W:45
E:ID_VENDOR_ENC=\x20\x20\x20\x20\x20\x20\x20\x20
E:ID_VENDOR_ID=13fe
E:ID_MODEL=USB_DISK_2.0
E:ID_MODEL_ENC=USB\x20DISK\x202.0\x20\x20\x20\x20
E:ID_MODEL_ID=4200
E:ID_REVISION=PMAP
E:ID_SERIAL=_USB_DISK_2.0_0710433A0D8D6A52-0:0
E:ID_SERIAL_SHORT=0710433A0D8D6A52
E:ID_TYPE=disk
E:ID_INSTANCE=0:0
E:ID_BUS=usb
E:ID_USB_INTERFACES=:080650:
E:ID_USB_INTERFACE_NUM=00
E:ID_USB_DRIVER=usb-storage
E:ID_PATH=pci-0000:00:06.0-usb-0:1:1.0-scsi-0:0:0:0
E:ID_PART_TABLE_TYPE=dos
E:ID_FS_LABEL=USB_DISK
E:ID_FS_LABEL_ENC=USB\x20DISK
E:ID_FS_UUID=2B1E-1434
E:ID_FS_UUID_ENC=2B1E-1434
E:ID_FS_VERSION=FAT32
E:ID_FS_TYPE=vfat
E:ID_FS_USAGE=filesystem
E:LVM_SBIN_PATH=/sbin
E:UDISKS_PRESENTATION_NOPOLICY=0
E:UDISKS_PARTITION=1
E:UDISKS_PARTITION_SCHEME=mbr
E:UDISKS_PARTITION_NUMBER=1
E:UDISKS_PARTITION_TYPE=0x0c
E:UDISKS_PARTITION_SIZE=8011186176
E:UDISKS_PARTITION_SLAVE=/sys/devices/pci0000:00/0000:00:06.0/usb1/1-1/1-1:1.0/host3/target3:0:0/3:0:0:0/block/sdb
E:UDISKS_PARTITION_OFFSET=4128768
E:UDISKS_PARTITION_ALIGNMENT_OFFSET=0

This is the content of /dev:

[root@centos ~]# ls -lR /dev/disk
/dev/disk:
total 0
drwxr-xr-x. 2 root root 240 Jun 17 08:49 by-id
drwxr-xr-x. 2 root root  60 Jun 17 08:49 by-label
drwxr-xr-x. 2 root root 180 Jun 17 08:49 by-path
drwxr-xr-x. 2 root root 120 Jun 17 08:49 by-uuid

/dev/disk/by-id:
total 0
lrwxrwxrwx. 1 root root  9 Jun 16 17:17 ata-VBOX_HARDDISK_VBc95fcb92-63983501 -> ../../sda
lrwxrwxrwx. 1 root root 10 Jun 16 17:18 ata-VBOX_HARDDISK_VBc95fcb92-63983501-part1 -> ../../sda1
lrwxrwxrwx. 1 root root 10 Jun 16 17:18 ata-VBOX_HARDDISK_VBc95fcb92-63983501-part2 -> ../../sda2
lrwxrwxrwx. 1 root root 10 Jun 16 17:17 ata-VBOX_HARDDISK_VBc95fcb92-63983501-part3 -> ../../sda3
lrwxrwxrwx. 1 root root  9 Jun 16 17:17 scsi-SATA_VBOX_HARDDISK_VBc95fcb92-63983501 -> ../../sda
lrwxrwxrwx. 1 root root 10 Jun 16 17:18 scsi-SATA_VBOX_HARDDISK_VBc95fcb92-63983501-part1 -> ../../sda1
lrwxrwxrwx. 1 root root 10 Jun 16 17:18 scsi-SATA_VBOX_HARDDISK_VBc95fcb92-63983501-part2 -> ../../sda2
lrwxrwxrwx. 1 root root 10 Jun 16 17:17 scsi-SATA_VBOX_HARDDISK_VBc95fcb92-63983501-part3 -> ../../sda3
lrwxrwxrwx. 1 root root  9 Jun 17 08:49 usb-_USB_DISK_2.0_0710433A0D8D6A52-0:0 -> ../../sdb
lrwxrwxrwx. 1 root root 10 Jun 17 08:49 usb-_USB_DISK_2.0_0710433A0D8D6A52-0:0-part1 -> ../../sdb1

/dev/disk/by-label:
total 0
lrwxrwxrwx. 1 root root 10 Jun 17 08:49 USB\x20DISK -> ../../sdb1

/dev/disk/by-path:
total 0
lrwxrwxrwx. 1 root root  9 Jun 16 17:17 pci-0000:00:01.1-scsi-1:0:0:0 -> ../../sr0
lrwxrwxrwx. 1 root root  9 Jun 17 08:49 pci-0000:00:06.0-usb-0:1:1.0-scsi-0:0:0:0 -> ../../sdb
lrwxrwxrwx. 1 root root 10 Jun 17 08:49 pci-0000:00:06.0-usb-0:1:1.0-scsi-0:0:0:0-part1 -> ../../sdb1
lrwxrwxrwx. 1 root root  9 Jun 16 17:17 pci-0000:00:0d.0-scsi-0:0:0:0 -> ../../sda
lrwxrwxrwx. 1 root root 10 Jun 16 17:18 pci-0000:00:0d.0-scsi-0:0:0:0-part1 -> ../../sda1
lrwxrwxrwx. 1 root root 10 Jun 16 17:18 pci-0000:00:0d.0-scsi-0:0:0:0-part2 -> ../../sda2
lrwxrwxrwx. 1 root root 10 Jun 16 17:17 pci-0000:00:0d.0-scsi-0:0:0:0-part3 -> ../../sda3

/dev/disk/by-uuid:
total 0
lrwxrwxrwx. 1 root root 10 Jun 17 08:49 2B1E-1434 -> ../../sdb1
lrwxrwxrwx. 1 root root 10 Jun 16 17:17 a1d6a043-6f10-4f60-bb9c-aaaac9632c57 -> ../../sda3
lrwxrwxrwx. 1 root root 10 Jun 16 17:18 c7b1d3e8-6471-4cba-947b-430db974e774 -> ../../sda2
lrwxrwxrwx. 1 root root 10 Jun 16 17:18 d8988475-7dc7-4a61-8081-6153b7c9551b -> ../../sda1

The main configuration file for udev is /etc/udev/udev.conf:

[root@centos ~]# cat /etc/udev/udev.conf
# The initial syslog(3) priority: "err", "info", "debug" or its
# numerical equivalent. For runtime debugging, the daemons internal
# state can be changed with: "udevadm control --log-priority=<value>".
udev_log="err"

Rules files can be foud in /lib/udev/rules.d/ :

[root@centos ~]# ls /lib/udev/rules.d/
10-console.rules                  60-persistent-v4l.rules           75-cd-aliases-generator.rules          85-regulatory.rules
10-dm.rules                       60-wacom.rules                    75-net-description.rules               88-clock.rules
11-dm-lvm.rules                   61-mobile-action.rules            75-persistent-net-generator.rules      89-microcode.rules
13-dm-disk.rules                  61-option-modem-modeswitch.rules  75-tty-description.rules               90-pulseaudio.rules
40-isdn.rules                     61-persistent-storage-edd.rules   77-mm-ericsson-mbm.rules               91-drm-modeset.rules
40-libgphoto2.rules               61-uinput-stddev.rules            77-mm-longcheer-port-types.rules       95-devkit-power-battery-recall-dell.rules
40-redhat.rules                   61-uinput-wacom.rules             77-mm-pcmcia-device-blacklist.rules    95-devkit-power-battery-recall-fujitsu.rules
42-qemu-usb.rules                 64-device-mapper.rules            77-mm-platform-serial-whitelist.rules  95-devkit-power-battery-recall-gateway.rules
50-firmware.rules                 64-md-raid.rules                  77-mm-simtech-port-types.rules         95-devkit-power-battery-recall-ibm.rules
50-udev-default.rules             65-libsane.rules                  77-mm-usb-device-blacklist.rules       95-devkit-power-battery-recall-lenovo.rules
60-alias-kmsg.rules               65-libwacom.rules                 77-mm-zte-port-types.rules             95-devkit-power-battery-recall-toshiba.rules
60-cdrom_id.rules                 65-md-incremental.rules           77-nm-olpc-mesh.rules                  95-devkit-power-csr.rules
60-net.rules                      69-dm-lvm-metad.rules             78-sound-card.rules                    95-devkit-power-hid.rules
60-persistent-alsa.rules          70-acl.rules                      79-fstab_import.rules                  95-devkit-power-wup.rules
60-persistent-input.rules         70-cups-libusb.rules              80-drivers.rules                       95-dm-notify.rules
60-persistent-serial.rules        70-hid2hci.rules                  80-iosched.rules                       95-keyboard-force-release.rules
60-persistent-storage.rules       70-printers.rules                 80-mpath-iosched.rules                 95-keymap.rules
60-persistent-storage-tape.rules  71-biosdevname.rules              80-udisks.rules                        95-udev-late.rules

<note important> You can create your own rules by putting them in the 99-local.rules file. </note>

The default udev rule file is 50-udev-default.rules:

[root@centos ~]# cat /lib/udev/rules.d/50-udev-default.rules 
# do not edit this file, it will be overwritten on update

SUBSYSTEM=="block", SYMLINK{unique}+="block/%M:%m"
SUBSYSTEM!="block", SYMLINK{unique}+="char/%M:%m"

KERNEL=="pty[pqrstuvwxyzabcdef][0123456789abcdef]", GROUP="tty", MODE="0660"
KERNEL=="tty[pqrstuvwxyzabcdef][0123456789abcdef]", GROUP="tty", MODE="0660"
KERNEL=="ptmx",			GROUP="tty", MODE="0666"
KERNEL=="tty",			GROUP="tty", MODE="0666"
KERNEL=="tty[0-9]*",		GROUP="tty", MODE="0620"
KERNEL=="console",		MODE="0600"
KERNEL=="vcs|vcs[0-9]*|vcsa|vcsa[0-9]*", GROUP="tty"

# serial
KERNEL=="tty[A-Z]*[0-9]|pppox[0-9]*|ircomm[0-9]*|noz[0-9]*|rfcomm[0-9]*", GROUP="dialout"
KERNEL=="ppp",			MODE="0600"
KERNEL=="mwave",		GROUP="dialout"
KERNEL=="hvc*|hvsi*",		GROUP="dialout"

# virtio serial / console ports
KERNEL=="vport*", ATTR{name}=="?*", SYMLINK+="virtio-ports/$attr{name}"

# mem
KERNEL=="null|zero|full|random|urandom", MODE="0666"
KERNEL=="mem|kmem|port|nvram",	GROUP="kmem", MODE="0640"

# input
KERNEL=="mouse*|mice|event*",	MODE="0640"
KERNEL=="ts[0-9]*|uinput",	MODE="0640"
KERNEL=="js[0-9]*",		MODE="0644"

# video4linux
SUBSYSTEM=="video4linux",	GROUP="video"
KERNEL=="vttuner*",		GROUP="video"
KERNEL=="vtx*|vbi*",		GROUP="video"
KERNEL=="winradio*",		GROUP="video"

# graphics
KERNEL=="agpgart",		MODE="0600", GROUP="video"
KERNEL=="pmu",			GROUP="video"
KERNEL=="nvidia*|nvidiactl*",	GROUP="video"
SUBSYSTEM=="graphics",		GROUP="video"
SUBSYSTEM=="drm",		GROUP="video"

# sound
SUBSYSTEM=="sound",		GROUP="audio"
KERNEL=="mixer0",		SYMLINK+="mixer"

# DVB (video)
SUBSYSTEM=="dvb", GROUP="video"

# FireWire (firewire-core driver: IIDC devices, AV/C devices)
SUBSYSTEM=="firewire", ATTR{units}=="*0x00a02d:0x00010*", GROUP="video"
SUBSYSTEM=="firewire", ATTR{units}=="*0x00a02d:0x010001*", GROUP="video"

# FireWire (deprecated dv1394 and video1394 drivers)
KERNEL=="dv1394-[0-9]*",	NAME="dv1394/%n", GROUP="video"
KERNEL=="video1394-[0-9]*",	NAME="video1394/%n", GROUP="video"

# libusb device nodes
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", MODE="0664"

# printer
KERNEL=="parport[0-9]*",	GROUP="lp"
SUBSYSTEM=="printer",		KERNEL=="lp*", GROUP="lp"
SUBSYSTEM=="ppdev",		GROUP="lp"
SUBSYSTEM=="usb",		KERNEL=="lp*", SYMLINK+="usb%k", GROUP="lp"
KERNEL=="lp[0-9]*",		GROUP="lp"
KERNEL=="irlpt[0-9]*",		GROUP="lp"
# hplip and cups 1.4+ use raw USB devices, so permissions should be similar to
# the ones from the old usblp kernel module
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ENV{ID_USB_INTERFACES}=="", IMPORT{program}="usb_id --export %p"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ENV{ID_USB_INTERFACES}==":0701*:", GROUP="lp", MODE="0664"

# block
SUBSYSTEM=="block", GROUP="disk"

# floppy
KERNEL=="fd[0-9]", GROUP="floppy"
KERNEL=="fd[0-9]", ACTION=="add", ATTRS{cmos}=="?*", RUN+="create_floppy_devices -c -t $attr{cmos} -m %M -M 0640 -G floppy $root/%k"
KERNEL=="hd*", SUBSYSTEMS=="ide", ATTRS{media}=="floppy", OPTIONS+="all_partitions"

# cdrom
SUBSYSTEM=="block", KERNEL=="sr[0-9]*", SYMLINK+="scd%n", GROUP="cdrom"
SUBSYSTEM=="block", KERNEL=="hd*", SUBSYSTEMS=="ide", ATTRS{media}=="cdrom", GROUP="cdrom"
SUBSYSTEM=="scsi_generic", SUBSYSTEMS=="scsi", ATTRS{type}=="4|5", GROUP="cdrom"
KERNEL=="pktcdvd[0-9]*", GROUP="cdrom"
KERNEL=="pktcdvd", GROUP="cdrom"

# tape
KERNEL=="ht[0-9]*|nht[0-9]*", GROUP="tape"
KERNEL=="pt[0-9]*|npt[0-9]*|pht[0-9]*", GROUP="tape"
SUBSYSTEM=="scsi_generic|scsi_tape", SUBSYSTEMS=="scsi", ATTRS{type}=="1|8", GROUP="tape"

# block-related
KERNEL=="sch[0-9]*", GROUP="disk"
SUBSYSTEM=="scsi_generic", SUBSYSTEMS=="scsi", ATTRS{type}=="0", GROUP="disk"
KERNEL=="pg[0-9]*", GROUP="disk"
KERNEL=="qft[0-9]*|nqft[0-9]*|zqft[0-9]*|nzqft[0-9]*|rawqft[0-9]*|nrawqft[0-9]*", GROUP="disk"
KERNEL=="rawctl", GROUP="disk"
SUBSYSTEM=="raw", KERNEL=="raw[0-9]*", GROUP="disk"
SUBSYSTEM=="aoe", GROUP="disk", MODE="0220"
SUBSYSTEM=="aoe", KERNEL=="err", MODE="0440"

# network
KERNEL=="tun",			MODE="0666"
KERNEL=="rfkill",		MODE="0644"

# CPU
KERNEL=="cpu[0-9]*",		MODE="0444"

# miscellaneous
KERNEL=="fuse",			MODE="0666"
SUBSYSTEM=="rtc", DRIVERS=="rtc_cmos", SYMLINK+="rtc"
KERNEL=="mmtimer",		MODE="0644"
KERNEL=="rflash[0-9]*",		MODE="0400"
KERNEL=="rrom[0-9]*",		MODE="0400"

# do not delete static device nodes
ACTION=="remove", NAME=="", TEST=="/lib/udev/devices/%k", OPTIONS+="ignore_remove"
ACTION=="remove", NAME=="?*", TEST=="/lib/udev/devices/$name", OPTIONS+="ignore_remove"

Each rule has the following format:

KEY, [KEY, …] NAME [, SYMLINK]

The Key is a type=value pair which uniquely identifies a peripheral. The type can be one of the following:

Type Description Examples
BUS Bus type usb, scsi, ide
KERNEL The default name given to the peripheral by the kernel hda, ttyUSB0, lp0
SUBSYSTEM The default sub-system name given by the Kernel, generally identical to the BUS value usb, scsi
DRIVER The name of the module used by the peripheral usb-storage
ID The position of the peripheral on its bus PCI bus id, USB id
PLACE The topological position of a USB oeripheral on its bus. S/O
SYSFS{filename} The name of the peripheral file in /sys. This file contains the manufacturer's name, the label, the serial number and the UUID of the peripheral. Each rule can contains upto five references to files. S/O
PROGRAM An eventual external program to be called in order to identify the peripheral S/O
RESULT Value expected from PROGRAM S/O

NAME and SYMLINK are used to tell udev what to do with the peripheral:

Type Description
NAME The name of the peripheral in /dev
SYMLINK The eventual symbolic links that point to NAME

The udevadm Command

To obtain information from udev on a particular peripheral, you can use the udevadm command which has replaced the udevinfo command available in Red Hat/CentOS 5:

[root@centos ~]# udevadm info --query=all -n /dev/sda
P: /devices/pci0000:00/0000:00:0d.0/host2/target2:0:0/2:0:0:0/block/sda
N: sda
W: 38
S: block/8:0
S: disk/by-id/ata-VBOX_HARDDISK_VBc95fcb92-63983501
S: disk/by-id/scsi-SATA_VBOX_HARDDISK_VBc95fcb92-63983501
S: disk/by-path/pci-0000:00:0d.0-scsi-0:0:0:0
E: UDEV_LOG=3
E: DEVPATH=/devices/pci0000:00/0000:00:0d.0/host2/target2:0:0/2:0:0:0/block/sda
E: MAJOR=8
E: MINOR=0
E: DEVNAME=/dev/sda
E: DEVTYPE=disk
E: SUBSYSTEM=block
E: ID_ATA=1
E: ID_TYPE=disk
E: ID_BUS=ata
E: ID_MODEL=VBOX_HARDDISK
E: ID_MODEL_ENC=VBOX\x20HARDDISK\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20
E: ID_REVISION=1.0
E: ID_SERIAL=VBOX_HARDDISK_VBc95fcb92-63983501
E: ID_SERIAL_SHORT=VBc95fcb92-63983501
E: ID_ATA_WRITE_CACHE=1
E: ID_ATA_WRITE_CACHE_ENABLED=1
E: ID_ATA_FEATURE_SET_PM=1
E: ID_ATA_FEATURE_SET_PM_ENABLED=1
E: ID_ATA_SATA=1
E: ID_ATA_SATA_SIGNAL_RATE_GEN2=1
E: ID_SCSI_COMPAT=SATA_VBOX_HARDDISK_VBc95fcb92-63983501
E: ID_PATH=pci-0000:00:0d.0-scsi-0:0:0:0
E: ID_PART_TABLE_TYPE=dos
E: LVM_SBIN_PATH=/sbin
E: UDISKS_PRESENTATION_NOPOLICY=0
E: UDISKS_PARTITION_TABLE=1
E: UDISKS_PARTITION_TABLE_SCHEME=mbr
E: UDISKS_PARTITION_TABLE_COUNT=3
E: UDISKS_ATA_SMART_IS_AVAILABLE=0
E: DEVLINKS=/dev/block/8:0 /dev/disk/by-id/ata-VBOX_HARDDISK_VBc95fcb92-63983501 /dev/disk/by-id/scsi-SATA_VBOX_HARDDISK_VBc95fcb92-63983501 /dev/disk/by-path/pci-0000:00:0d.0-scsi-0:0:0:0

This caommand can also be used to obtain all information known to sys concerning specific peripheral:

[root@centos ~]# udevadm info -a -p /sys/class/input/mouse0/

Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.

  looking at device '/devices/virtual/input/input2/mouse0':
    KERNEL=="mouse0"
    SUBSYSTEM=="input"
    DRIVER==""

  looking at parent device '/devices/virtual/input/input2':
    KERNELS=="input2"
    SUBSYSTEMS=="input"
    DRIVERS==""
    ATTRS{name}=="Macintosh mouse button emulation"
    ATTRS{phys}==""
    ATTRS{uniq}==""
    ATTRS{modalias}=="input:b0017v0001p0001e0100-e0,1,2,k110,111,112,r0,1,amlsfw"

The command line switches of this command are:

[root@centos ~]# udevadm --help
Usage: udevadm [--help] [--version] [--debug] COMMAND [COMMAND OPTIONS]
  info         query sysfs or the udev database
  trigger      request events from the kernel
  settle       wait for the event queue to finish
  control      control the udev daemon
  monitor      listen to kernel and udev events
  test         simulation run

[root@centos ~]# udevadm info --help
Usage: udevadm info OPTIONS
  --query=<type>             query device information:
      name                     name of device node
      symlink                  pointing to node
      path                     sys device path
      property                 the device properties
      all                      all values
  --path=<syspath>           sys device path used for query or attribute walk
  --name=<name>              node or symlink name used for query or attribute walk
  --root                     prepend dev directory to path names
  --attribute-walk           print all key matches while walking along the chain
                             of parent devices
  --device-id-of-file=<file> print major:minor of device containing this file
  --export-db                export the content of the udev database
  --help

The /sys Filesystem

The virtual filesystem /sys was introduced with the 2.6 Kernel. Its role is to identify and describe peripherals for udev:

[root@centos ~]# ls -l /sys
total 0
drwxr-xr-x.   2 root root 0 Jun 17 08:49 block
drwxr-xr-x.  17 root root 0 Jun 16 17:17 bus
drwxr-xr-x.  40 root root 0 Jun 16 17:17 class
drwxr-xr-x.   4 root root 0 Jun 16 17:17 dev
drwxr-xr-x.  12 root root 0 Jun 16 17:17 devices
drwxr-xr-x.   4 root root 0 Jun 16 17:17 firmware
drwxr-xr-x.   4 root root 0 Jun 16 17:18 fs
drwxr-xr-x.   2 root root 0 Jun 16 17:18 hypervisor
drwxr-xr-x.   5 root root 0 Jun 16 17:17 kernel
drwxr-xr-x. 102 root root 0 Jun 17 08:49 module
drwxr-xr-x.   2 root root 0 Jun 16 17:18 power

Each directory contains specific information:

For example:

[root@centos ~]# cat /sys/block/sda/sda1/size
204800

The figure returned is in sectors.

Limiting Resources

Resources available to users can be limited by using the ulimit command.

The ulimit command manages two limits:

<note important> Only root can position a hard limit and only if the limit does not exceed real resource levels. </note>

The soft limit is the limit imposed on the user whilst the hard limit is the limit that a user can obtain once he has gone over the soft limit.

Root can define limits by editing the /etc/security/limits.conf file:

[root@centos ~]# cat /etc/security/limits.conf
# /etc/security/limits.conf
#
#Each line describes a limit for a user in the form:
#
#<domain>        <type>  <item>  <value>
#
#Where:
#<domain> can be:
#        - an user name
#        - a group name, with @group syntax
#        - the wildcard *, for default entry
#        - the wildcard %, can be also used with %group syntax,
#                 for maxlogin limit
#
#<type> can have the two values:
#        - "soft" for enforcing the soft limits
#        - "hard" for enforcing hard limits
#
#<item> can be one of the following:
#        - core - limits the core file size (KB)
#        - data - max data size (KB)
#        - fsize - maximum filesize (KB)
#        - memlock - max locked-in-memory address space (KB)
#        - nofile - max number of open files
#        - rss - max resident set size (KB)
#        - stack - max stack size (KB)
#        - cpu - max CPU time (MIN)
#        - nproc - max number of processes
#        - as - address space limit (KB)
#        - maxlogins - max number of logins for this user
#        - maxsyslogins - max number of logins on the system
#        - priority - the priority to run user process with
#        - locks - max number of file locks the user can hold
#        - sigpending - max number of pending signals
#        - msgqueue - max memory used by POSIX message queues (bytes)
#        - nice - max nice priority allowed to raise to values: [-20, 19]
#        - rtprio - max realtime priority
#
#<domain>      <type>  <item>         <value>
#

#*               soft    core            0
#*               hard    rss             10000
#@student        hard    nproc           20
#@faculty        soft    nproc           20
#@faculty        hard    nproc           50
#ftp             hard    nproc           0
#@student        -       maxlogins       4

# End of file

<note important> The limit can be a number or the word unlimited. </note>

For example if root adds the two following lines to /etc/security/limits.conf:

...
trainee                soft        nofile          1024
trainee                hard        nofile          4096
...

the number of open files for trainee is limited to 1024. However trainee can increase this limit to 4 096 by using the following command:

$ ulimit -n 4096

To see the list of the current limits use the -a switch:

[root@centos ~]# ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 14843
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 14843
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

The command line switches of this command are:

[root@centos ~]# help ulimit
ulimit: ulimit [-SHacdefilmnpqrstuvx] [limit]
    Modify shell resource limits.
    
    Provides control over the resources available to the shell and processes
    it creates, on systems that allow such control.
    
    Options:
      -S	use the `soft' resource limit
      -H	use the `hard' resource limit
      -a	all current limits are reported
      -b	the socket buffer size
      -c	the maximum size of core files created
      -d	the maximum size of a process's data segment
      -e	the maximum scheduling priority (`nice')
      -f	the maximum size of files written by the shell and its children
      -i	the maximum number of pending signals
      -l	the maximum size a process may lock into memory
      -m	the maximum resident set size
      -n	the maximum number of open file descriptors
      -p	the pipe buffer size
      -q	the maximum number of bytes in POSIX message queues
      -r	the maximum real-time scheduling priority
      -s	the maximum stack size
      -t	the maximum amount of cpu time in seconds
      -u	the maximum number of user processes
      -v	the size of virtual memory
      -x	the maximum number of file locks
    
    If LIMIT is given, it is the new value of the specified resource; the
    special LIMIT values `soft', `hard', and `unlimited' stand for the
    current soft limit, the current hard limit, and no limit, respectively.
    Otherwise, the current value of the specified resource is printed.  If
    no option is given, then -f is assumed.
    
    Values are in 1024-byte increments, except for -t, which is in seconds,
    -p, which is in increments of 512 bytes, and -u, which is an unscaled
    number of processes.
    
    Exit Status:
    Returns success unless an invalid option is supplied or an error occurs.

~~DISCUSSION:off~~


<html> <center> Copyright © 2011-2014 Hugh Norris.<br><br> <a rel=“license” href=“http://creativecommons.org/licenses/by-nc-nd/3.0/”><img alt=“Creative Commons License” style=“border-width:0” src=“https://i.creativecommons.org/l/by-nc-nd/3.0/88x31.png” /></a><br />This work is licensed under a <a rel=“license” href=“http://creativecommons.org/licenses/by-nc-nd/3.0/”>Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Unported License</a> </center> </html>