LinuxProfessionalInstitute
Linux & LPIC
Quick Reference Guide
3rd ed.
2015-07
Foreword
This guide stems from the notes I have been taking while working with Linux and preparing the LPIC-1 and LPIC-2
certifications. As such, it includes quite a good amount of topics for these exams, with some subjects handled in more details
than others. I started writing this guide in 2013 and it is my aim to update and integrate it periodically.
This document is an independent publication and is not affiliated with, authorized by, sponsored by, or otherwise approved by
the Linux Professional Institute. You can freely use and share this guide or the individual pages, both in electronic or in
printed form, provided that you distribute it unmodified and not-for-profit. Please feel free to contact me for any error,
inaccuracy, or unclear point so I can correct it in future editions.
Happy Linux hacking,
Daniele Raffo
Suggested readings
Adam Haeder et al., LPI Linux Certification in a Nutshell, O'Reilly
Evi Nemeth et al., UNIX and Linux System Administration Handbook, O'Reilly
Heinrich W. Klpping et al., The LPIC-2 Exam Prep, http://lpic2.unix.nl/
Mendel Cooper, Advanced Bash-Scripting Guide, http://tldp.org/LDP/abs/html/
Colin Barschel, Unix Toolbox, http://cb.vu/unixtoolbox.xhtml
http://www.gnu.org/manual/
http://www.commandlinefu.com/
Linux man pages
Index
LVM...............................................1
LVM commands...............................2
System boot....................................3
SysV startup sequence.....................4
Runlevels........................................5
SysV vs Systemd init scripts..............6
/etc/inittab......................................7
Filesystem hierarchy.........................8
Partitions........................................9
Filesystem types............................10
Swap............................................11
/etc/fstab......................................12
Filesystem operations.....................13
Filesystem maintenance..................14
XFS, ReiserFS, CD-ROM fs...............15
AutoFS..........................................16
RAID............................................17
Bootloader....................................18
GRUB configuration........................19
GRUB commands...........................20
Package managers.........................21
Package management tools.............22
Backup.........................................23
Command line...............................24
Text filters.....................................25
File management...........................26
I/O streams...................................27
Processes......................................28
Signals.........................................29
vmstat..........................................30
Resource monitoring.......................31
Regexs.........................................32
File permissions.............................33
File attributes................................34
Links............................................35
Find system files............................36
Shell environment..........................37
Scripting.......................................38
Flow control...................................39
Text processors..............................40
Vi.................................................41
Vi options......................................42
SQL..............................................43
SQL SELECTs.................................44
SQL JOINs.....................................45
MySQL..........................................46
MySQL status................................47
MySQL tools..................................48
X Window......................................49
X Window tools..............................50
X11 keysim codes..........................51
User accounts................................52
User management..........................53
UID and GID..................................54
Privilege escalation.........................55
Terminals......................................56
cron.............................................57
at.................................................58
Localization...................................59
System time..................................60
Syslog..........................................61
E-mail...........................................62
SMTP............................................63
Sendmail and Exim.........................64
Postfix..........................................65
Postfix configuration.......................66
Procmail........................................67
Courier POP configuration................68
Courier IMAP configuration..............69
Dovecot login.................................70
Dovecot mailboxes.........................71
Dovecot POP and IMAP....................72
Dovecot authentication...................73
FTP..............................................74
CUPS............................................75
IP addressing.................................76
Subnetting....................................77
Network services............................78
Network configuration commands.....79
Network tools................................80
Network monitoring........................81
Network system files......................82
Network configuration files..............83
TCP Wrapper.................................84
Routing.........................................85
iptables.........................................86
NAT routing...................................87
SSH..............................................88
SSH operations..............................89
SSH configuration..........................90
GnuPG..........................................91
OpenVPN.......................................92
Key bindings..................................93
udev.............................................94
Kernel...........................................95
Kernel management.......................96
Kernel compile and patching............97
Kernel modules..............................98
/proc filesystem.............................99
System recovery..........................100
DNS............................................101
DNS configuration........................102
DNS zone file...............................103
Apache........................................104
Apache configuration....................105
Apache virtual hosts.....................106
Apache directory protection...........107
Apache SSL/TLS configuration........108
OpenSSL.....................................109
CA.pl..........................................110
Samba........................................111
Samba configuration.....................112
Samba shares..............................113
Samba macros.............................114
NFS............................................115
/etc/exports.................................116
DHCP..........................................117
PAM............................................118
LDAP..........................................119
OpenLDAP...................................120
SELinux.......................................121
HTML components........................122
HTML text....................................123
HTML images...............................124
HTML tables and lists....................125
7-bit ASCII table..........................126
1/126
LVM
LVM
Logical Volume Management (LVM) introduces an abstraction between physical and logical storage that permits a more
versatile use of filesystems. LVM uses the Linux device mapper feature (/dev/mapper).
Disks, partitions, and RAID devices are made of Physical Volumes, which are grouped into a Volume Group.
A Volume Group is divided into small fixed-size chunks called Physical Extents.
Physical Extents are mapped one-to-one to Logical Extents.
Logical Extents are grouped into Logical Volumes, on which filesystems are created.
How to create a Logical Volume
1.
pvcreate /dev/hda2 /dev/hdb5
Initialize the Physical Volumes to be used with LVM.
Devices must be of partition type 0x8E (Linux LVM)
2.
vgcreate -s 8M myvg0 /dev/hda2 /dev/hdb5
Create a Volume Group and define the size of Physical
Extents to 8 Mb (default value is 4 Mb)
or
vgextend myvg0 /dev/hda2
or add the Physical Volume to an existing Volume
Group
3.
lvcreate -L 1024M -n mydata myvg0
Create a Logical Volume
4.
mkfs -t ext3 /dev/myvg0/mydata
Create a filesystem on the Logical Volume
5.
mount /dev/myvg0/mydata /mydata
The Logical Volume is now mounted and used
How to increase the size of a Logical Volume (only if the underlying filesystem permits it)
1.
vgextend myvg0 /dev/hdc
2.
lvextend -L 2048M /dev/myvg0/mydata
or
lvresize -L+2048M /dev/myvg0/mydata
3.
resize2fs /dev/myvg0/mydata
Extend the Volume Group using the space in hdc
Extend the Logical Volume
Extend the filesystem
How to reduce the size of a Logical Volume (only if the underlying filesystem permits it)
1.
resize2fs /dev/myvg0/mydata 900M
2.
lvreduce -L 900M /dev/myvg0/mydata
or
lvresize -L-900M /dev/myvg0/mydata
Shrink the filesystem
Shrink the Logical Volume
How to snapshot and backup a Logical Volume
1.
lvcreate -s -L 1024M -n snapshot0 /dev/myvg0/mydata
Create the snapshot just like another Logical Volume
2.
tar cvzf snapshot0.tar.gz snapshot0
Backup the snapshot with any backup tool
3.
lvremove /dev/mvvg0/snapshot0
Delete the snapshot
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
2/126
LVM commands
LVMcommands
pvs
Report information about Physical Volumes
pvck
Check Physical Volume metadata
pvdisplay
Display Physical Volume attributes
pvscan
Scan all disks for Physical Volumes
pvremove
Remove a Physical Volume
pvmove
Move the Logical Extents on a Physical Volume to wherever there are available Physical Extents
(within the Volume Group) and then put the Physical Volume offline
vgs
Report information about Volume Groups
vgck
Check Volume Group metadata
vgmerge
Merge two Volume Groups
vgimport
Import a Volume Group into a system
vgexport
Export a Volume Group from a system
vgchange
Change Volume Group attributes
vgextend
Add a Physical Volume to a Volume Group
vgreduce
Remove a Physical Volume from a Volume Group
lvs
Report information about Logical Volumes
lvchange
Change Logical Volume attributes
lvremove
Remove a Logical Volume
lvscan
Scan all disks for Logical Volumes
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
3/126
System boot
Systemboot
Boot sequence
POST
(Power-On Self Test)
Low-level check of PC hardware.
BIOS
(Basic I/O System)
Detection of disks and hardware.
GRUB stage 1 is loaded from the MBR and executes GRUB stage 2 from filesystem.
GRUB chooses which OS to boot on.
The chain loader hands over to the boot sector of the partition on which resides the OS.
Chain loader
GRUB
(GRand Unified
Bootloader)
The chain loader also mounts initrd, an initial ramdisk (typically a compressed ext2
filesystem) to be used as the initial root device during kernel boot; this make possible to
load kernel modules that recognize hard drives hardware and that are hence needed to
mount the real root filesystem. Afterwards, the system runs /linuxrc with PID 1.
(From Linux 2.6.13 onward, the system instead loads into memory initramfs, a cpiocompressed image, and unpacks it into an instance of tmpfs in RAM. The kernel then
executes /init from within the image.)
Kernel decompression into memory.
Kernel execution.
Linux kernel
Detection of devices.
The real root filesystem is mounted on / in place of the initial ramdisk.
init
Execution of init, the first process (PID 1).
The system tries to execute in the following order:
/sbin/init
/etc/init
/bin/init
/bin/sh
If none of these succeeds, the kernel will panic.
Startup
The system loads startup scripts and runlevel scripts.
X Server
(Optional) The X Display Manager starts the X Server.
Some newer systems use UEFI (Unified Extensible Firmware Interface). UEFI does not use the MBR boot code; it has
knowledge of partition table and filesystems, and stores its application files required for launch in a EFI System Partition,
mostly formatted as FAT32.
After the POST, the system loads the UEFI firmware which initializes the hardware required for booting, then reads its Boot
Manager data to determine which UEFI application to launch. The launched UEFI application may then launch another
application, e.g. the kernel and initramfs in case of a boot loader like the GRUB.
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
4/126
SysV startup sequence
SysVstartupsequence
OS startup sequence (SysV)
Debian
Red Hat
At startup /sbin/init executes all
instructions on /etc/inittab . This script
at first switches to the default runlevel...
id:2:initdefault:
id:5:initdefault:
... then it runs the following script (same for
all runlevels) which configures peripheral
hardware, applies kernel parameters, sets
hostname, and provides disks initialization...
/etc/init.d/rcS
/etc/rc.d/rc.sysinit or
/etc/rc.sysinit
... and then, for runlevel N, it calls the script
/etc/init.d/rc N (i.e. with the runlevel
number as parameter) which launches all
services and daemons specified in the
following startup directories:
/etc/rcN.d/
/etc/rc.d/rcN.d/
The startup directories contain symlinks to the init scripts in /etc/init.d/ which are executed in numerical order.
Links starting with K are called with argument stop, links starting with S are called with argument start.
lrwxrwxrwx.
lrwxrwxrwx.
lrwxrwxrwx.
lrwxrwxrwx.
lrwxrwxrwx.
lrwxrwxrwx.
1
1
1
1
1
1
root
root
root
root
root
root
root
root
root
root
root
root
14
15
17
18
16
18
Feb
Nov
Nov
Nov
Nov
Nov
11
28
28
28
28
28
22:32
14:50
15:01
14:54
14:52
14:42
K88sssd -> ../init.d/sssd
K89rdisc -> ../init.d/rdisc
S01sysstat -> ../init.d/sysstat
S05cgconfig -> ../init.d/cgconfig
S07iscsid -> ../init.d/iscsid
S08iptables -> ../init.d/iptables
The last script to be run is S99local -> ../init.d/rc.local ; therefore, an easy way to run a specific program
upon boot is to call it from this script file.
/etc/init.d/boot.local
/etc/init.d/before.local
/etc/init.d/after.local
(SUSE)
(SUSE)
runs only at boot time, not when switching runlevel.
runs only at boot time, before the scripts in the startup directories.
runs only at boot time, after the scripts in the startup directories.
To add or remove services at boot sequence:
update-rc.d service defaults
update-rc.d -f service remove
chkconfig --add service
chkconfig --del service
Parameters (service operations) supported by the init scripts
start
Start the service
stop
Stop the service
restart
Restart the service (stop, then start)
status
Display daemon PID and execution status
force-reload
Reload configuration if the service supports this option,
otherwise restart the service
condrestart
try-restart
Restart the service only if already running
reload
Reload service configuration
Mandatory
Optional
Linux Standard Base (LSB)
LSB defines a format to specify the default values on an init script /etc/init.d/foo :
### BEGIN INIT INFO
# Provides: foo
# Required-Start: bar
# Defalt-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Description: Service Foo init script
### END INIT INFO
Default runlevels and S/K symlinks values can also be specified as such:
# chkconfig: 2345 85 15
# description: Foo service
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
5/126
Runlevels
Runlevels
Runlevel
Debian
Red Hat
Shutdown
Single user / maintenance mode
Multi-user mode
(default)
Multi-user mode without network
Multi-user mode
Multi-user mode with network
Multi-user mode
Unused, for custom use
Multi-user mode
Multi-user mode with network and X
(default)
Reboot
Single user / maintenance mode
(usually accessed through runlevel 1)
The default runlevels are 2 3 4 5
runlevel
who -r
Display the previous and the current runlevel
init runlevel
telinit runlevel
Change runlevel
init 0
telinit 0
shutdown -h now
halt
poweroff
Halt the system
init 6
telinit 6
shutdown -r now
reboot
Reboot the system
shutdown
Shut down the system in a secure way: all logged in users are notified via a
message to their terminal, and login is disabled.
This command can be run only by the root user and by those users (if any) listed in
/etc/shutdown.allow
shutdown -h 16:00 message
Schedule a shutdown for 4 PM and send a warning message to all logged in users
shutdown -a
Non-root users that are listed in /etc/shutdown.allow can use this command to
shut down the system
shutdown -f
Skip fsck on reboot
shutdown -F
Force fsck on reboot
shutdown -c
Cancel an already running shutdown
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
6/126
SysV vs Systemd init scripts
SysVvsSystemdinitscripts
System V
Systemd
/etc/init.d/service operation
Action
systemctl operation service
Perform one of these operations on
the specified service:
start
stop
restart
status
force-reload
condrestart
try-restart
reload
service service operation
(Red Hat)
rcservice operation
(SUSE)
update-rc.d service defaults
chkconfig --add service
(Debian)
(Red Hat)
Add a service at boot
update-rc.d -f service remove
chkconfig --del service
(Debian)
(Red Hat)
Remove a service at boot
When adding or removing a service at boot, startup directories will be updated by creating or deleting symlinks for the
default runlevels: K symlinks for runlevels 0 1 6, and S symlinks for runlevels 2 3 4 5.
In System V, the service will be run via the xinetd super server.
update-rc.d -f service \
start 30 2 3 4 5 . stop 70 0 1 6 .
Add a service on the default
runlevels; create S30 symlinks for
starting the service and K70
symlinks for stopping it
chkconfig --levels 245 service on
Add the service on runlevels 2 4 5
chkconfig service on
systemctl enable service
Add the service on default runlevels
chkconfig service off
systemctl disable service
Remove the service on default
runlevels
chkconfig service
systemctl is-enabled service
Check if the service is enabled on
the current runlevel
chkconfig service reset
Reset the on/off state of the
service for all runlevels to whatever
the Linux Standard Base specifies
in the init script
chkconfig service resetpriorities
Reset the start/stop priorities of
the service for all runlevels to
whatever the Linux Standard Base
specifies in the init script
chkconfig --list service
Display current configuration of
service (its status and the runlevels
in which it is active)
chkconfig --list
Linux & LPIC Quick Reference Guide
systemctl list-unit-files \
--type=service
3rd ed.
2015-07
List all active services and their
current configuration
Daniele Raffo
www.crans.org/~raffo
7/126
/etc/inittab
/etc/inittab
/etc/inittab
# The default runlevel.
id:2:initdefault:
# Boot-time system configuration/initialization script.
# This is run first except when booting in emergency (-b) mode.
si::sysinit:/etc/init.d/rcS
# What to do in single-user mode.
~~:S:wait:/sbin/sulogin
# /etc/init.d executes the S and K scripts upon change of runlevel.
l0:0:wait:/etc/init.d/rc 0
l1:1:wait:/etc/init.d/rc 1
l2:2:wait:/etc/init.d/rc 2
l3:3:wait:/etc/init.d/rc 3
l4:4:wait:/etc/init.d/rc 4
l5:5:wait:/etc/init.d/rc 5
l6:6:wait:/etc/init.d/rc 6
# Normally not reached, but fall through in case of emergency.
z6:6:respawn:/sbin/sulogin
# /sbin/getty invocations for the runlevels.
# Id field must be the same as the last characters of the device (after "tty").
1:2345:respawn:/sbin/getty 38400 tty1
2:23:respawn:/sbin/getty 38400 tty2
/etc/inittab describes which processes are started at bootup and during normal operation; it is read and executed by
init at bootup.
All its entries have the form id:runlevels:action:process
id
runlevels
action
process
1-4 characters, uniquely identifies an entry.
For gettys and other login processes it should be equal to the suffix of the corresponding tty
Runlevels for which the specified action must be performed.
If empty, action is performed on all runlevels
respawn
Process will be restarted when it terminates
wait
Process is started at the specified runlevel and init will wait for its termination
(i.e. execution of further lines of /etc/inittab stops until the process exits)
once
Process is executed once at the specified runlevel
boot
Process is executed at system boot. Runlevels field is ignored
bootwait
Process is executed at system boot and init will wait for its termination.
Runlevels field is ignored
off
Does nothing
ondemand
Process is executed when an on-demand runlevel (A, B, C) is called
initdefault
Specifies the default runlevel to boot on. Process field is ignored
sysinit
Process is executed at system boot, before any boot or bootwait entries.
Runlevels field is ignored
powerfail
Process is executed when power goes down and an UPS kicks in.
init will not wait for its termination
powerwait
Process is executed when power goes down and an UPS kicks in.
init will wait for its termination
powerfailnow
Process is executed when power is down and the UPS battery is almost empty
powerokwait
Process is executed when power has been restored from UPS
ctrlaltdel
Process is executed when init receives a SIGINT via
kbdrequest
Process is executed when a special key combination is pressed on console
CTRL
ALT
DEL
Process to execute. If prepended by a +, utmp and wtmp accounting will not be done
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
8/126
Filesystem hierarchy
Filesystemhierarchy
Filesystem Hierarchy Standard (FHS)
/bin
Essential command binaries
/boot
Bootloader files (e.g. OS loader, kernel image, initrd)
/dev
Devices and partitions
/etc
System configuration files and scripts
/home
Home directories for users
/lib
Libraries for the binaries in /bin and /sbin, kernel modules
/lost+found
Storage directory for recovered files in this partition
/media
Mount points for removable media
/mnt
Mount points for temporary filesystems
/net
Access to directory tree on different external NFS servers
/opt
Optional, large add-on application software packages
/proc
Virtual filesystem providing kernel and processes information
/root
Home directory for the root user
/sbin
Essential system binaries, system administration commands
/srv
Data for services provided by the system
/tmp
Temporary files
/usr
User utilities and applications
/usr/bin
Non-essential command binaries (for all users)
/usr/lib
Libraries for the binaries in /usr/bin and /usr/sbin
/usr/sbin
Non-essential system binaries (daemons and services)
/usr/src
Source code
/usr/local
Software installed locally
Local software binaries
/usr/local/games
Local game binaries
/usr/local/include
Local C header files
/usr/local/lib
Local libraries for the binaries in /usr/local/bin and /usr/local/sbin
/usr/local/man
Local manuals
/usr/local/sbin
Local system binaries
/usr/local/share
Local architecture-independent hierarchy
/usr/local/src
Local source code
/var
/usr/local/bin
Variable files (e.g. logs, caches, mail spools)
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
9/126
Partitions
Partitions
first, second, third IDE hard drive
first, second, third SATA hard drive
first, second, third partition of the first SATA drive
/dev/hda, /dev/hdb, /dev/hdc
/dev/sda, /dev/sdb, /dev/sdc
/dev/sda1, /dev/sda2, /dev/sda3
Partitioning limits for Linux:
Max 4 primary partitions per hard disk, or 3 primary partitions + 1 extended partition
Max 11 logical partitions (inside the extended partition) per hard disk
Partition numbers: 1-4
Partition numbers: 5-15
The superblock contains information relative to the filesystem: e.g. filesystem type, size, status, metadata structures.
The Master Boot Record (MBR) is a 512-byte program located in the first sector of the hard disk; it contains information
about hard disk partitions and has the duty of loading the OS.
Most modern filesystems use journaling; in a journaling filesystem, the journal logs changes before committing them to the
filesystem, which ensures faster recovery and less corruption in case of a crash.
fdisk /dev/sda
Disk partitioning interactive tool
sfdisk /dev/sda
Disk partitioning non-interactive tool
cfdisk
Text-based UI fdisk
gparted
GUI fdisk
fdisk -l /dev/sda
List the partition table of /dev/sda
partprobe
After fdisk operations, this command can be run to notify the OS of partition table
changes. Otherwise, these changes will take place only after reboot
mkfs -t fstype device
Create a filesystem of the specified type on a partition (i.e. format the partition).
mkfs is a wrapper utility for the actual filesystem-specific maker commands:
mkfs.ext2
aka mke2fs
mkfs.ext3
aka mke3fs
mkfs.ext4
mkfs.msdos
aka mkdosfs
mkfs.reiserfs aka mkreiserfs
mkfs.jfs
mkfs.xfs
mkfs -t ext2 /dev/sda
mkfs.ext2 /dev/sda
mke2fs /dev/sda
Create a ext2 filesystem on /dev/sda
mke2fs -j /dev/sda
mkfs.ext3 /dev/sda
mke3fs /dev/sda
Create a ext3 filesystem (ext2 with journaling) on /dev/sda
mkfs -t msdos /dev/sda
mkfs.msdos /dev/sda
mkdosfs /dev/sda
Create a MS-DOS filesystem on /dev/sda
mount
cat /proc/mounts
cat /etc/mtab
Display the currently mounted filesystems.
The commands mount and umount maintain in /etc/mtab a database of currently
mounted filesystems, but /proc/mounts is authoritative
mount -a
Mount all devices listed in /etc/fstab (except those indicated as noauto)
mount -t ext3 /dev/sda /foobar
Mount a Linux-formatted disk. The mount point (directory) must exist
mount -t msdos /dev/fd0 /mnt
Mount a MS-DOS filesystem floppy disk to mount point /mnt
mount /dev/fd0
Mount a floppy disk. /etc/fstab must contain an entry for /dev/fd0
umount /dev/fd0
umount /mnt
Unmount a floppy disk that was mounted on /mnt (device must not be busy)
umount -l /dev/fd0
Unmount the floppy disk as soon as it is not in use anymore
mount -o remount,rw /
Remount the root directory as read-write (supposing it was mounted read-only).
Useful to change flags (in this case, read-only to read-write) for a mounted
filesystem that cannot be unmounted at the moment
mount -o nolock 10.7.7.7:/export/ /mnt/nfs
Mount a NFS share without running NFS daemons.
Useful during system recovery
mount -t iso9660 -o ro,loop=/dev/loop0 cd.img /mnt/cdrom
Mount a CD-ROM ISO9660 image file like a CD-ROM
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
10/126
Filesystem types
Filesystemtypes
Partition types
0x00
0x01
0x02
0x03
0x04
0x05
0x06
0x07
0x08
0x09
0x0a
0x0b
0x0c
0x0e
0x0f
0x10
0x11
0x12
0x14
0x16
0x17
0x18
0x1b
0x1c
0x1e
0x24
0x27
0x39
0x3c
0x40
0x41
0x42
0x4d
Empty
FAT12
XENIX root
XENIX usr
FAT16 <32M
Extended
FAT16
HPFS/NTFS/exFAT
AIX
AIX bootable
OS/2 Boot Manager
W95 FAT32
W95 FAT32 (LBA)
W95 FAT16 (LBA)
W95 extended (LBA)
OPUS
Hidden FAT12
Compaq diagnostics
Hidden FAT16 <32M
Hidden FAT16
Hidden HPFS/NTFS
AST SmartSleep
Hidden W95 FAT32
Hidden W95 FAT32 (LBA)
Hidden W95 FAT16 (LBA)
NEC DOS
Hidden NTFS WinRE
Plan 9
PartitionMagic recovery
Venix 80286
PPC PReP Boot
SFS
QNX4.x
0x4e
0x4f
0x50
0x51
0x52
0x53
0x54
0x55
0x56
0x5c
0x61
0x63
0x64
0x65
0x70
0x75
0x80
0x81
0x82
0x83
0x84
0x85
0x86
0x87
0x88
0x8e
0x93
0x94
0x9f
0xa0
0xa5
0xa6
0xa7
QNX4.x 2nd part
QNX4.x 3rd part
OnTrack DM
OnTrack DM6 Aux1
CP/M
OnTrack DM6 Aux3
OnTrackDM6
EZ-Drive
Golden Bow
Priam Edisk
SpeedStor
GNU HURD or SysV
Novell Netware 286
Novell Netware 386
DiskSecure Multi-Boot
PC/IX
Old Minix
Minix / old Linux
Linux swap / Solaris
Linux
OS/2 hidden C: drive
Linux extended
NTFS volume set
NTFS volume set
Linux plaintext
Linux LVM
Amoeba
Amoeba BBT
BSD/OS
IBM Thinkpad hibernation
FreeBSD
OpenBSD
NeXTSTEP
0xa8
0xa9
0xab
0xaf
0xb7
0xb8
0xbb
0xbe
0xbf
0xc1
0xc4
0xc6
0xc7
0xda
0xdb
0xde
0xdf
0xe1
0xe3
0xe4
0xeb
0xee
0xef
0xf0
0xf1
0xf4
0xf2
0xfb
0xfc
0xfd
0xfe
0xff
Darwin UFS
NetBSD
Darwin boot
HFS / HFS+
BSDI fs
BSDI swap
Boot Wizard hidden
Solaris boot
Solaris
DRDOS/sec (FAT-12)
DRDOS/sec (FAT-16 < 32M)
DRDOS/sec (FAT-16)
Syrinx
Non-FS data
CP/M / CTOS / ...
Dell Utility
BootIt
DOS access
DOS R/O
SpeedStor
BeOS fs
GPT
EFI (FAT-12/16/32)
Linux/PA-RISC boot
SpeedStor
SpeedStor
DOS secondary
VMware VMFS
VMware VMKCORE
Linux raid autodetect
LANstep
BBT
List of partition IDs and their names, as obtained by the command sfdisk -T
Most used Linux-supported filesystems
Filesystem
Properties
ext2
Linux default filesystem, offering the best performances
ext3
ext2 with journaling
ext4
Linux journaling filesystem, upgrade from ext3
Reiserfs
Journaling filesystem
XFS
Journaling filesystem, developed by SGI
JFS
Journaling filesystem, developed by IBM
Btrfs
B-tree filesystem, developed by Oracle
msdos
DOS filesystem, supporting only 8-char filenames
umsdos
Extended DOS filesystem used by Linux, compatible with DOS
fat32
MS-Windows FAT filesystem
vfat
Extended DOS filesystem, with support for long filenames
ntfs
Replacement for fat32 and vfat filesystems
minix
Native filesystem of the MINIX OS
iso9660
CD-ROM filesystem
cramfs
Compressed RAM disk
nfs
Network filesystem, used to access files on remote machines
SMB
Server Message Block, used to mount Windows network shares
proc
Pseudo filesystem, used as an interface to kernel data structures
swap
Pseudo filesystem, Linux swap area
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
11/126
Swap
Swap
In Linux, the swap space is a virtual memory area (a file or a partition) used as RAM extension. Usually a partition is
preferred because of better performances concerning fragmentation and disk speed. Although listed as filesystem type
0x82, the swap partition is not a filesystem but a raw addressable memory with no structure.
fdisk
The fdisk tool can be used to create a swap partition
dd if=/dev/zero of=/swapfile bs=1024 count=512000
Create a 512-Mb swap file
mkswap /swapfile
Initialize a (already created) swap file or partition
swapon /swapfile
Enable a swap file or partition, thus telling the kernel that it can use it now
swapoff /swapfile
Disable a swap file or partition
swapon -s
cat /proc/swaps
cat /proc/meminfo
free
top
Any of these commands can be used to show the sizes of total and used swap areas
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
12/126
/etc/fstab
/etc/fstab
/etc/fstab
# <filesystem>
<mount point>
Filesystems information
<type>
<options>
<dump> <pass>
/dev/sda2
/
ext2
defaults
0 1
/dev/sdb1
/home
ext2
defaults
1 2
/dev/cdrom
/media/cdrom
auto
ro,noauto,user,exec
0 0
/dev/fd0
/media/floppy
auto
rw,noauto,user,sync
0 0
proc
/proc
proc
defaults
0 0
/dev/hda1
swap
swap
pri=42
0 0
nfsserver:/dirs
/mnt
nfs
intr
0 0
//smbserver/jdoe
/shares/jdoe
cifs
auto,credentials=/etc/smbcreds 0 0
LABEL=/boot
/boot
ext2
defaults
0 0
UUID=652b786e-b87f-49d2-af23-8087ced0c667 /test ext4 errors=remount-ro,noatime 0 0
filesystem
Device or partition. The filesystem can be identified either by its name, its label, or its UUID (Universal
Unique Identifier) which is a 128-bit hash number that is associated to the partition at its initialization
mount point
Directory on which the partition must be mounted
type
Filesystem type, or auto if detected automatically
options
dump
pass
defaults
Use the default options: rw, suid, dev, exec, auto, nouser, async
ro
Mount read-only
rw
Mount read-write
suid
Permit SUID and SGID bit operations
nosuid
Do not permit SUID and SGID bit operations
dev
Interpret block special devices on the filesystem
nodev
Do not interpret block special devices on the filesystem
auto
Mount automatically at bootup, or when the command mount -a is given
noauto
Mount only if explicitly demanded
user
Partition can be mounted by any user
nouser
Partition can be mounted only by the root user
exec
Binaries contained on the partition can be executed
noexec
Binaries contained on the partition cannot be executed
sync
Write files immediately to the partition
async
Buffer write operations and commit them later, or when device is unmounted
rsize=nnn
NFS: Size for read transfers (from server to client)
wsize=nnn
NFS: Size for write transfers (from client to server)
nfsvers=n
NFS: Version of NFS to use for transport
retry=n
NFS: Time to keep retrying a mount attempt before giving up, in minutes
timeo=n
NFS: Time after a mount attempt times out, in tenths of a second
intr
NFS: User can interrupt a mount attempt
nointr
NFS: User cannot interrupt a mount attempt (default)
hard
NFS: The system will try a mount indefinitely (default)
soft
NFS: The system will try a mount until an RPC timeout occurs
bg
NFS: The system will try a mount in the foreground, all retries occur in the background
fg
NFS: All mount attempts occur in the foreground (default)
tcp
NFS: Connect using TCP
udp
NFS: Connect using UDP
Dump (backup utility) options.
0 = do not backup
Fsck (filesystem check utility) options.
Defines in which order the filesystems should be checked; 0 = do not check
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
13/126
Filesystem operations
Filesystemoperations
df
Report filesystem disk space usage
df -h
Report filesystem disk space usage in human-readable output
df /path/mydir
Shows on which device the specified directory is mounted
lsblk
List information about all available block devices
lsscsi
List information about all SCSI devices
blockdev --getbsz /dev/sda1
Get the block size of the specified partition
sync
Flush the buffer and commit all pending writes.
To improve performance of Linux filesystems, many write operations are buffered in RAM
and written at once; writes are done in any case before unmount, reboot, or shutdown
chroot /mnt/sysimage
Start a shell with /mnt/sysimage as filesystem root.
Useful during system recovery when the machine has been booted from a removable
media (which hence is defined as the filesystem root)
mknod /dev/sda
Create a directory allocating the proper inode.
Useful during system recovery when experiencing filesystem problems
hdparm
Get/set drive parameters for SATA/IDE devices
hdparm -g /dev/hda
Display drive geometry (cylinders, heads, sectors) of /dev/hda
hdparm -i /dev/hda
Display identification information for /dev/hda
hdparm -tT /dev/hda
Perform benchmarks on the /dev/hda drive
hdparm -p 12 /dev/hda
Reprogram IDE interface chipset of /dev/hda to mode 4. Use with caution!
sdparm
Access drive parameters for SCSI devices
blkid -U 652b786e-b87f-49d2-af23-8087ced0c667
Print the name of the specified partition, given its UUID
blkid -L /boot
Print the UUID of the specified partition, given its label
findfs UUID=652b786e-b87f-49d2-af23-8087ced0c667
Print the name of the specified partition, given its UUID
findfs LABEL=/boot
Print the name of the specified partition, given its label
e2label /dev/sda1
Print the label of the specified partition, given its name
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
14/126
Filesystem maintenance
Filesystemmaintenance
fsck device
Check and repair a Linux filesystem (which must be unmounted).
Corrupted files will be placed into the /lost+found of the partition.
The exit code returned is the sum of the following conditions:
0
1
2
4
No errors
File system errors corrected
System should be rebooted
File system errors left uncorrected
8
16
32
128
Operational error
Usage or syntax error
Fsck canceled by user
Shared library error
fsck is a wrapper utility for the actual filesystem-specific checker commands:
fsck.ext2 aka e2fsck
fsck.ext3
fsck.ext4
fsck.msdos
fsck.vfat
fsck.cramfs
fsck
fsck -As
Check and repair serially all filesystems listed in /etc/fstab
fsck -f /dev/sda1
Force a filesystem check on /dev/sda1 even if it thinks is not necessary
fsck -y /dev/sda1
During filesystem repair, do not ask questions and assume that the answer is
always yes
fsck.ext2 -c /dev/sda1
e2fsck -c /dev/sda1
Check a ext2 filesystem, running the badblocks command to mark all bad blocks
and add them to the bad block inode to prevent them from being allocated to
files or directories
tune2fs [options] device
Adjust tunable filesystem parameters on ext2/ext3/ext4 filesystems
tune2fs -j /dev/sda1
Add a journal to this ext2 filesystem, making it a ext3
tune2fs -C 4 /dev/sda1
Set the mount count of the filesystem to 4
tune2fs -c 20 /dev/sda1
Set the filesystem to be checked by fsck after 20 mounts
tune2fs -i 15d /dev/sda1
Set the filesystem to be checked by fsck each 15 days
Both mount-count-dependent and time-dependent checking are enabled by default for all hard drives on Linux, to avoid the
risk of filesystem corruption going unnoticed.
dumpe2fs [options] device
Dump ext2/ext3/ext4 filesystem information
dumpe2fs -h /dev/sda1
Display filesystem's superblock information (e.g. number of mounts, last
checks, UUID)
dumpe2fs /dev/sda1 | grep -i superblock
Display locations of superblock (primary and backup) of filesystem
dumpe2fs -b /dev/sda1
Display blocks that are marked as bad in the filesystem
debugfs device
Interactive ext2/ext3/ext4 filesystem debugger
debugfs -w /dev/sda1
Debug /dev/sda1 in read-write mode
(by default, debugfs accesses the device in read-only mode)
Many hard drives feature the Self-Monitoring, Analysis and Reporting Technology (SMART) whose purpose is to monitor the
reliability of the drive, predict drive failures, and carry out different types of drive self-tests.
The smartd daemon attempts to poll this information from all drives every 30 minutes, logging all data to syslog.
smartctl -a /dev/sda
Print SMART information for drive /dev/sda
smartctl -s off /dev/sda
Disable SMART monitoring and log collection for drive /dev/sda
smartctl -t long /dev/sda
Begin an extended SMART self-test on drive /dev/sda
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
15/126
XFS, ReiserFS, CD-ROM fs
XFS,ReiserFS,CDROMfs
xfs_growfs [options] mountpoint
Expand an XFS filesystem (there must be at least one spare new disk
partition available)
xfs_info /dev/sda1
xfs_growfs -n /dev/sda1
Print XFS filesystem geometry
xfs_check [options] device
Check XFS filesystem consistency
xfs_repair [options] device
Repair a damaged or corrupt XFS filesystem
xfsdump -v silent -f /dev/tape /
Dump the root of a XFS filesystem to tape, with lowest level of verbosity.
Incremental and resumed dumps are stored in the inventory database
/var/lib/xfsdump/inventory
xfsrestore -f /dev/tape /
Restore a XFS filesystem from tape
xfsdump -J - / | xfsrestore -J - /new
Copy the contents of a XFS filesystem to another directory (without
updating the inventory database)
reiserfstune [options] device
Adjust tunable filesystem parameters on ReiserFS filesystem
debugreiserfs device
Interactive ReiserFS filesystem debugger
mkisofs -r -o cdrom.img data/
Create a CD-ROM image from the contents of the target directory.
Enable Rock Ridge extension and set all content on CD to be public
readable (instead of inheriting the permissions from the original files)
CD-ROM filesystems
Filesystem
Commands
ISO9660
mkisofs
Create a ISO9660 filesystem
mkudffs
Create a UDF filesystem
udffsck
Check a UDF filesystem
wrudf
Maintain a UDF filesystem
cdrwtool
Manage CD-RW drives (disk format, read/write speed, ...)
UDF (Universal Disk Format)
HFS (Hierarchical File System)
CD-ROM filesystem extensions
Rock Ridge
Contains the original file information (e.g. permissions, filename) for MS Windows 8.3 filenames
MS Joliet
Used to create more MS Windows friendly CD-ROMs
El Torito
Used to create bootable CD-ROMs
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
16/126
AutoFS
AutoFS
AutoFS permits automounting of filesystems, even for nonprivileged users.
AutoFS is composed of the autofs kernel module that monitors specific directories for attempts to access them, and in this
case signals the automount userspace daemon which mounts the directory when it needs to be accessed and unmounts it
when no longer accessed.
/etc/auto.master
Primary configuration file for AutoFS.
Each line is an indirect map; each map file stores the configuration for the automounting of the
subdir.
# mount point
/misc
/home
/etc/auto.misc
options
--timeout=60
Configuration file for automounting of directory /misc .
# subdir
public
cd
/etc/auto.home
map
/etc/auto.misc
/etc/auto.home
options
-ro,soft,intr
-fstype=iso9660,ro,nosuid,nodev
filesystem
ftp.example.org:/pub
:/dev/cdrom
Configuration file for automounting of directory /home .
The * wildcard matches any subdir the system attepts to access, and the & variable takes the
value of the match.
# subdir
*
options
-rw,soft,intr
filesystem
nfsserver.example.org:/home/&
The /net/nfsserver/ tree allows nonprivileged users to automatically access any nfsserver.
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
17/126
RAID
RAID
RAID levels
Level
Description
Storage capacity
RAID 0
Striping (data is written across all member disks).
High I/O but no redundancy
Sum of the capacity of member disks
RAID 1
Mirroring (data is mirrored on all disks).
High redundancy but high cost
Capacity of the smaller member disk
RAID 4
Parity on a single disk.
I/O bottleneck unless coupled to write-back caching
Sum of the capacity of member disks,
minus one
RAID 5
Parity distributed across all disks.
Can sustain one disk crash
Sum of the capacity of member disks,
minus one
RAID 6
Double parity distributed across all disks.
Can sustain two disk crashes
Sum of the capacity of member disks,
minus two
RAID 10 (1+0)
Striping + mirroring.
High redundancy but high cost
Capacity of the smaller member disk
Linear RAID
Data written sequentially across all disks.
No redundancy
Sum of the capacity of member disks
mdadm -C /dev/md0 -l 5 \
-n 3 /dev/sdb1 /dev/sdc1 /dev/sdd1 \
-x 1 /dev/sde1
Create a RAID 5 array from three partitions and a spare.
Partitions type must be set to 0xFD.
Once the RAID device has been created, it must be formatted e.g. via
mke2fs -j /dev/md0
mdadm --manage /dev/md0 -f /dev/sdd1
Mark a drive as faulty, before removing it
mdadm --manage /dev/md0 -r /dev/sdd1
Remove a drive from the RAID array.
The faulty drive can now be physically removed
mdadm --manage /dev/md0 -a /dev/sdd1
Add a drive to the RAID array.
To be run after the faulty drive has been physically replaced
mdadm --misc -Q /dev/sdd1
Display information about a device
mdadm --misc -D /dev/md0
Display detailed information about the RAID array
mdadm --misc -o /dev/md0
Mark the RAID array as readonly
mdadm --misc -w /dev/md0
Mark the RAID array as read & write
/etc/mdadm.conf
Configuration file for mdadm .
DEVICE /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
ARRAY /dev/md0 level=raid5 num-devices=3
UUID=0098af43:812203fa:e665b421:002f5e42
devices=/dev/sdb1,/dev/sdc1,/dev/sdd1,/dev/sde1
cat /proc/mdstat
Linux & LPIC Quick Reference Guide
Display information about RAID arrays and devices
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
18/126
Bootloader
Bootloader
Non-GRUB bootloaders
LILO
(Linux Loader)
Obsolete. Small bootloader that can be placed in the MBR or the boot sector of a partition.
The configuration file is /etc/lilo.conf (run /sbin/lilo afterwards to validate changes).
SYSLINUX
Able to boot from FAT and NTFS filesystems e.g. floppy disks and USB drives.
Used for boot floppy disks, rescue floppy disks, and Live USBs.
ISOLINUX
Able to boot from CD-ROM ISO 9660 filesystems.
Used for Live CDs and bootable install CDs.
The CD must contain the following files:
isolinux/isolinux.bin
ISOLINUX image, from the SYSLINUX distro
boot/isolinux/isolinux.cfg
ISOLINUX configuration
images/
Floppy images to boot
kernel/memdisk
The CD can be burnt with the command:
mkisofs -o output.iso -b isolinux/isolinux.bin -c isolinux/boot.cat \
-no-emul-boot -boot-load-size 4 -boot-info-table [CD root dir]
PXELINUX
SYSLINUX
Able to boot from PXE (Pre-boot eXecution Environment). PXE uses DHCP or BOOTP to enable
basic networking, then uses TFTP to download a bootstrap program that loads and configures
the kernel.
Used for Linux installations from a central server or network boot of diskless workstations.
The boot TFTP server must contain the following files:
EXTLINUX
/tftpboot/pxelinux.0
PXELINUX image, from the SYSLINUX distro
/tftpboot/pxelinux.cfg/
Directory containing a configuration file for each machine.
A machine with Ethernet MAC address 88:99:AA:BB:CC:DD
and IP address 192.0.2.91 (C000025B in hexadecimal) will
search for its config filename in this order:
01-88-99-aa-bb-cc-dd
C000025B
C000025
C00002
C0000
C000
C00
C0
C
default
General-purpose bootloader like LILO or GRUB. Now merged with SYSLINUX.
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
19/126
GRUB configuration
GRUBconfiguration
GRUB (Grand Unified Bootloader) is the standard boot manager on modern Linux distros, which may use either version:
GRUB Legacy or GRUB 2.
GRUB Stage 1 (446 bytes), as well as the partition table (64 bytes) and the boot signature (2 bytes), is stored in the 512byte MBR. It then accesses the GRUB configuration and commands available on the filesystem, usually on /boot/grub .
/boot/grub/menu.lst or /boot/grub/grub.conf
timeout 10
default 0
GRUB Legacy configuration file
# Boot the default kernel after 10 seconds
# Default kernel is 0
# Section 0: Linux boot
title Debian
# Menu item to show on GRUB bootmenu
root
(hd0,0)
# root filesystem is /dev/hda1
kernel /boot/vmlinuz-2.6.24-19-generic root=/dev/hda1 ro quiet splash
initrd /boot/initrd.img-2.6.24-19-generic
# Section 1: Windows boot
title
Microsoft Windows XP
root
(hd0,1)
# root filesystem is /dev/hda2
savedefault
makeactive
# set the active flag on this partition
chainloader +1
# read 1 sector from start of partition and run
# Section 2: Firmware/BIOS update from floppy disk
title
Firmware update
kernel /memdisk
# boot a floppy disk image
initrd /floppy-img-7.7.7
Common
kernel
parameters:
root=
Specify the location of the filesystem root. This is a required parameter
ro
Mount read-only on boot
quiet
Disable non-critical kernel messages during boot
debug
Enable kernel debugging
splash
Show splash image
emergency
Emergency mode: after the kernel is booted, run sulogin (single-user login)
which asks for the root password for system maintenance, then run a Bash. Does
not load init or any daemon or configuration setting.
init=/bin/bash
Run a Bash shell (may also be any other executable) instead of init
/boot/grub/grub.cfg
GRUB 2 configuration file
# Linux Red Hat
menuentry "Fedora 2.6.32" {
# Menu item to show on GRUB bootmenu
set root=(hd0,1)
# root filesystem is /dev/hda1
linux /vmlinuz-2.6.32 ro root=/dev/hda5 mem=2048M
initrd /initrd-2.6.32
}
# Linux Debian
menuentry "Debian 2.6.36-experimental" {
set root=(hd0,1)
linux (hd0,1)/bzImage-2.6.36-experimental ro root=/dev/hda6
}
# Windows
menuentry "Windows" {
set root=(hd0,2)
chainloader +1
}
This file must not be edited manually. Instead, edit the files in /etc/grub.d/ (these are scripts that will be run in order)
and the file /etc/default/grub (the configuration file for menu display settings), then run update-grub .
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
20/126
GRUB commands
GRUBcommands
The GRUB menu, presented at startup, permits to choose the OS or kernel to boot:
ENTER
Boot the selected GRUB entry
Get a GRUB command line
Edit the selected GRUB entry (e.g. to edit kernel parameters in order to boot in single-user emergency mode,
or to change IRQ or I/O port of a device driver compiled in the kernel)
Boot the GRUB entry once it has been modified
Bring up the GRUB password prompt (necessary if a GRUB password has been set)
grub-install /dev/sda
Install GRUB on first SATA drive
grub
Access the GRUB shell
/boot/grub/device.map
This file can be created to map Linux device filenames to BIOS drives:
(fd0)
(hd0)
/dev/fd0
/dev/hda
GRUB Legacy shell commands
blocklist file
Print the block list notation of a file kernel file
boot
Boot the loaded OS
lock
Lock a GRUB menu entry
cat file
Show the contents of a file
makeactive
Set active partition on root disk to
GRUB's root device
chainloader file
Chainload another bootloader
map drive1 drive2
Map a drive to another drive
cmp file1 file2
Compare two files
md5crypt
Encrypt a password in MD5 format
configfile file
Load a configuration file
module file
Load a kernel module
debug
Toggle debugging mode
modulenounzip file
Load a kernel module without
decompressing it
displayapm
Display APM BIOS information
pause message
Print a message and wait for a key
press
displaymem
Display memory configuration
quit
Quit the GRUB shell
embed stage device
Embed Stage 1.5 in the device
reboot
Reboot the system
find file
Find a file
read address
Read a 32-bit value from memory
and print it
fstest
Toggle filesystem test mode
root device
Set the current root device
geometry drive
Print information on a drive
geometry
rootnoverify device
Set the current root device without
mounting it
halt
Shut down the system
savedefault
Save current menu entry as the
default entry
help command
Show help for a command, or the
available commands
setup device
Install GRUB automatically on the
device
impsprobe
Probe the Intel Multiprocessor
Specification
testload file
Test the filesystem code on a file
initrd file
Load an initial ramdisk image file
testvbe mode
Test a VESA BIOS EXTENSION
mode
install options
Install GRUB (deprecated, use
setup instead)
uppermem kbytes
Set the upper memory size (only
for old machines)
ioprobe drive
Probe I/O ports used for a drive
vbeprobe mode
Probe a VESA BIOS EXTENSION
mode
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Load a kernel
Daniele Raffo
www.crans.org/~raffo
21/126
Package managers
Packagemanagers
Low-level package managers
Debian
Red Hat
Install a package file
dpkg -i package.deb
rpm -i package.rpm
rpm -i ftp://host/package.rpm
rpm -i http://host/package.rpm
Remove a package
dpkg -r package
rpm -e package
Upgrade a package
(and remove old versions)
rpm -U package.rpm
Upgrade a package
(only if an old version is already installed)
rpm -F package.rpm
List installed packages and their state
dpkg -l
rpm -qa
List the content of an installed package
dpkg -L package
rpm -ql package
List the content of a package file
dpkg -c package.deb
rpm -qpl package.rpm
Show the package containing a specific file
dpkg -S file
rpm -qf file
Verify an installed package
rpm -V package
Reconfigure a package
dpkg-reconfigure package
Install a package source file
rpm -i package.src.rpm
Compile a package source file
rpm -ba package.spec
High-level package managers
Install a package
apt-get install package
yum install package
yum install package.rpm
yum localinstall package.rpm
Install a package file
Remove a package
apt-get remove package
Upgrade an installed package
yum remove package
yum update package
Upgrade all installed packages
apt-get upgrade
Upgrade all installed packages and handle
dependencies with new versions
apt-get dist-upgrade
Get the source code for a package
apt-get source package
Check for broken dependencies and update
package cache
apt-get check
Fix broken dependencies
apt-get install -f
Update information on available packages
apt-get update
List all available packages
yum update
yum list
Search for a package
apt-cache search package
yum search package
Show package dependencies
apt-cache depends package
yum deplist package
Show package records
apt-cache show package
yum list package
Show information about a package
apt-cache showpkg package
yum info package
Update information about package contents
apt-file update
List the content of an uninstalled package
apt-file list package
Show the package containing a specific file
apt-file search file
Add a CD-ROM to the sources list
apt-cdrom add
yum whatprovides file
Download package and resolve dependencies
yumdownloader --resolve package
Show URLs that would be downloaded
yumdownloader --urls package
Print list of available repositories
cat /etc/apt/sources.list
yum repolist
cat /etc/yum.repos.d/*.repo
Package format
compressed with ar
compressed with cpio
High-level package managers are able to install remote packages and automatically solve dependencies.
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
22/126
Package management tools
Packagemanagementtools
Text-based UI or graphical tools
Debian
aptitude
Manage packages and dependencies
Red Hat
pirut
dselect
synaptic
Other tools
Convert a RPM package to DEB and install it.
Might break the package system!
alien -i package.rpm
Convert a RPM package to cpio archive
Linux & LPIC Quick Reference Guide
rpm2cpio package.rpm
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
23/126
Backup
Backup
dd if=/dev/sda of=/dev/sdb
Copy the content of one hard disk over another, byte by byte
dd if=/dev/sda1 of=sda1.img
Create the image of a partition
dd if=/dev/cdrom of=cdrom.iso bs=2048
Create an ISO file from a CD-ROM, using a block size of 2 Kb
rsync -rzv /home /tmp/bak
rsync -rzv /home/ /tmp/bak/home
Synchronize the content of the home directory with the temporary
backup directory. Use recursion, compression, and verbosity.
For all transfers subsequent to the first, rsync only copies the blocks that
have changed, making it a very efficient backup solution in terms of
speed and bandwidth
Synchronize the content of the home directory with the backup directory
on the remote server, using SSH. Use archive mode (operates
recursively and preserves owner, group, permissions, timestamps, and
symlinks)
Archive formats
ls | cpio -o > myarchive.cpio
ls | cpio -oF myarchive.cpio
Create a cpio archive of all files that are on the current directory
find /home/ | cpio -o > homedirs.cpio
Create a cpio archive of all users' home directories
cpio -id < myarchive.cpio
Extract all files from a cpio archive, recreating the directory structure
cpio -i -t < myarchive.cpio
List the contents of a cpio archive file without extracting it
gzip myfile
Compress a file with gzip
gunzip myfile.gz
Decompress a gzip-compressed file
gunzip -tv myfile.gz
Test the integrity of a gzip-compressed file
zcat myfile.gz
Read a gzip-compressed text file
bzip2 myfile
Compress a file with bzip2
bunzip2 myfile.bz2
Decompress a bzip2-compressed file
bzcat myfile.bz2
Read a bzip2-compressed text file
tar cvf myarc.tar mydir/
Create a tarred archive
tar cvzf myarc.tar.gz mydir/
Create a tarred gzip-compressed archive
tar xvzf myarc.tar.gz
Extract a tarred gzip-compressed archive
tar cvjf myarc.tar.bz2 mydir/
Create a tarred bzip2-compressed archive
tar xvjf myarc.tar.bz2
Extract a tarred bzip2-compressed archive
tar cvJf myarc.tar.xz mydir/
Create a tarred xz-compressed archive
tar xvJf myarc.tar.xz
Extract a tarred xz-compressed archive
tar tvf myarc.tar
List the contents of the tarred archive without extracting it
rar a myarc.rar mydir/
Create a RAR archive
unrar x myarc.rar
Extract a RAR archive
Tape libraries
Devices
Utility for magnetic tapes
Utility for tape libraries
/dev/st0
First SCSI tape device
/dev/nst0
First SCSI tape device (no-rewind device file)
mt -f /dev/nst0 asf 3
Position the tape at the start of 3rd file
mtx -f /dev/sg1 status
Display status of tape library
mtx -f /dev/sg1 load 3
Load tape from slot 3 to drive 0
mtx -f /dev/sg1 unload
Unload tape from drive 0 to original slot
mtx -f /dev/sg1 transfer 3 4
Transfer tape from slot 3 to slot 4
mtx -f /dev/sg1 inventory
Force robot to rescan all slots and drives
mtx -f /dev/sg1 inquiry
Inquiry about SCSI media device
(Medium Changer = tape library)
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
24/126
Command line
Commandline
man command
Show the man page for a command
man 7 command
Show section 7 of the command man page
man man
Show information about man pages' sections:
1 Executable programs or shell commands
2 System calls (functions provided by the kernel)
3 Library calls (functions within program libraries)
4 Special files
5 File formats and conventions
6 Games
7 Miscellaneous
8 System administration commands (usually only for root)
9 Kernel routines
cd directory
Change to the specified directory
cd -
Change to the previously used directory
pwd
Print the current working directory
pushd directory
Adds the directory to the top of the directory stack, making it the new current
working directory
popd
Removes the top directory from the directory stack and changes to the new
top directory
history
Show the history of command lines executed up to this moment.
Commands prepended by a space will be executed but will not show up in the
history.
After the user logs out from Bash, history is saved into ~/.bash_history
!n
Execute command number n in the command line history
history -c
Delete command line history
watch command
Execute command every 2 seconds
watch -d -n 1 command
Execute command every second, highlighting the differences in the output
cat /etc/debian_version
cat /etc/fedora-release
cat /etc/redhat-release
(Debian)
(Fedora)
(Red Hat)
Print the version of the Linux distribution
vlock
away
Lock the virtual console (terminal)
Almost all Linux commands accept the option -v (verbose), and many commands also accept the option -vv (very verbose).
Bash directory shortcuts
.
Current directory
..
Parent directory
Home directory of current user
~jdoe
Home directory of user jdoe
~-
Previously used directory
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
25/126
Text filters
Textfilters
cat myfile
Print a text file
cat myfile1 myfile2 > myfile3
Concatenate text files
cat > myfile <<EOF
line 1
line 2
line 3
EOF
Creates a Here Document, storing the lines entered in input to a file
head myfile
head -n 10 myfile
Print the first 10 lines of a text file
tail myfile
tail -n 10 myfile
Print the last 10 lines of a text file
tail -f myfile
Output appended data as the text file grows; useful to read logs in realtime
tac myfile
Print a text file in reverse, from last line to first line
fmt -w 75 myfile
Format a text file so that each line has a max width of 75 chars
pr myfile
Format a text file for a printer
nl myfile
Prepend line numbers to a text file
wc myfile
Print the number of lines, words, and bytes of a text file
join myfile1 myfile2
Join lines of two text files on a common field
paste myfile1 myfile2
Merge lines of text files
split -l 1 myfile
Split a text file into 1-line files (named xaa, xab, xac, and so on)
uniq myfile
Print the unique lines of a text file, omitting consecutive identical lines
sort myfile
Sort alphabetically the lines of a text file
expand myfile
Convert tabs into spaces
unexpand myfile
Convert spaces into tabs
od myfile
Dump a file into octal
grep foo myfile
Print the lines of a file containing foo
grep -v foo myfile
Print the lines of a file not containing foo
grep -v -e foo -e bar myfile
Print the lines of a file not containing neither foo nor bar
cut -d: -f3 myfile
Cut the lines of a file, considering : as the delimiter and printing only the 3rd field
cut -d: -f1 /etc/passwd
Print the list of user accounts in the system
cut -c3-50 myfile
Print character 3 to 50 of each line of a file
sed s/foo/bar/ myfile
Stream Editor: Replace the first occurrence of foo with bar
sed s/foo/bar/g myfile
Replace all occurrences of foo with bar
sed -n '7,13p' myfile
Print line 7 to 13 of a text file
tr a-z A-Z <myfile
tr [:lower:] [:upper:] <myfile
Translate characters: Convert all lowercase into uppercase in a text file
tr -d 0-9 <myfile
tr -d [:digit:] <myfile
Delete all digits from a text file
zcat
Print a gzipped file on stdout
zgrep
grep search in a gzipped file
zless
less for gzipped files
zmore
more for gzipped files
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
26/126
File management
Filemanagement
cp myfile myfile2
Copy a file
cp myfile mydir/
Copy a file to a directory
mv myfile myfile2
Rename a file
mv myfile mydir/
Move a file to a directory
rm myfile
Delete a file
pv myfile > myfile2
Copy a file, monitoring the progress of data through the pipe
mkdir mydir
Create a directory
mkdir -m 777 mydir
Create a directory with 777 permission
mkdir -p /tmp/mydir1/mydir2
Create a directory, and create also the parent directories if they don't exist
rmdir mydir
Delete a directory (must be empty)
touch myfile
Change access/modification timestamp on a file, creating it if it doesn't exist
ls
List the contents of the current directory
ls -d */
List directories only
stat myfile
Display file or filesystem status
stat -c %A myfile
Display file permissions
stat -c %s myfile
Display file size, in bytes
lsof
List all open files
lsof -u jdoe
List all files currently open by user jdoe
lsof -i
List open files and their sockets (equivalent to netstat -ap)
lsof -i :80
List connections of local processes on port 80
lsof [email protected]
List connections of local processes to remote host 10.0.0.3
lsof [email protected]:80
List connections of local processes to remote host 10.0.0.3 on port 80
lsof -c mysqld
List all files opened by the MySQL daemon
lsof /var/lib/mysql/mysqld.pid
List all processes which are using a specific file
Common options:
-i Prompt before overwriting/deleting files (interactive)
-f Don't ask before overwriting/deleting files (force)
File-naming wildcards (globbing)
Brace expansion
Matches zero or more characters
cp myfile.{txt,bak}
Copy myfile.txt to myfile.bak
Matches one character
touch myfile_{a,b,c}
Create myfile_a, myfile_b, myfile_c
[kxw]
Matches k, x, or w
touch {a..h}
Create 8 files named a b c d e f g h
[!kxw]
Matches any character except k, x, or w
[a-z]
Matches any character between a and z
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
27/126
I/O streams
I/Ostreams
In Linux, everything is (displayed as) a file. File descriptors are automatically associated to any process launched.
File descriptors
#
Name
Type
Default device
Standard input (stdin)
Input text stream
Keyboard
Standard output (stdout)
Output text stream
Terminal
Standard error (stderr)
Output text stream
Terminal
ls | sort
Pipe the stdout of command ls to stdin of command sort
(i.e. generate a sorted list of the files on the current directory).
Piped commands run concurrently
ls > myfile
ls 1> myfile
Redirect the stdout of command ls to a file
(i.e. write on a file the content of the current directory).
File is overwritten if it already exists; to prevent this, set the Bash noclobber option
via set -o noclobber
ls >| myfile
Redirect the stdout of command ls to a file, even if noclobber is set
ls >> myfile
ls 1>> myfile
Append the stdout of command ls to a file
df 2> myfile
Redirect the stderr of command df to a file
(i.e. write any error encountered by the command df to a file)
df 2>> myfile
Append the stderr of command df to a file
Redirect a file to the stdin of command mail
(i.e. mail a file to the specified email address)
ls > myfile 2>&1
ls &> myfile
Redirect both stdout and stderr of command ls to a file
ls | tee myfile
tee reads from stdin and writes both to stdout and a file
(i.e. write content of current directory to screen and to a file at the same time)
ls | tee -a myfile
tee reads from stdin and appends both to stdout and a file
ls foo* | xargs cat
xargs calls the cat command multiple times for each argument found on stdin
(i.e. print the content of every file whose filename starts by foo)
read MYVAR
Read a variable from standard input
read -n 8 MYVAR
Read only max 8 chars from standard input
read -t 60 MYVAR
Read a variable from standard input, timing out after one minute
read -s MYVAR
Read a variable from standard input without echoing to terminal (silent mode)
echo $MYVAR
Print a variable on screen
echo -n "message"
printf "message"
Print on screen without a trailing line feed
while read -r line; do echo "Hello $line"; done < myfile
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Process a text file line by line
Daniele Raffo
www.crans.org/~raffo
28/126
Processes
Processes
Any application/program/script that runs on the system is a process. Signals are used for inter-process communication.
Each process has an unique PID (Process ID) and a PPID (Parent Process ID); when a process spawns a child, the process
PID is assigned to the child's PPID.
The /sbin/init process, run at bootup, has PID 1. It is the ancestor of all processes and becomes the parent of any
orphaned process. It is also unkillable; should it die, the kernel will panic.
When a child process dies, its status becomes EXIT_ZOMBIE and a SIGCHLD is sent to the parent. The parent should then
call the wait() system call to read the dead process' exit status and other info; until that moment, the child process
remains a zombie.
ps -ef
ps aux
(UNIX options)
(BSD options)
List all processes
pstree PID
Display all processes in hierarchical format.
The process tree is rooted at PID, or at init if PID is omitted
top
htop
Monitor processes in realtime
kill -9 1138
Send a signal 9 (SIGKILL) to process 1138, hence killing it
killall -9 sshd
Kill processes whose name is sshd
pgrep -u root sshd
Show processes whose name is sshd and are owned by root
pkill -9 -u root sshd
Kill processes whose name is sshd and are owned by root
jobs
List all jobs (i.e. processes whose parent is a Bash shell)
CTRL
Note: pgrep and pkill
accept the same options
Suspend a job, putting it in the stopped state (send a SIGTSTP)
bg %1
Put job #1 in the background (send a SIGCONT)
fg %1
Resume job #1 in the foreground and make it the current job (send a SIGCONT)
kill %1
Kill job #1
When a Bash shell is terminated cleanly via exit, its jobs will became child of the Bash's parent and will continue running.
When a Bash is killed instead, it issues a SIGHUP to his children which will terminate.
nohup myscript.sh
Prevent a process from terminating (receiving a SIGHUP) when its parent Bash dies
To each process is associated a niceness value: the lower the niceness, the higher the priority.
The niceness value ranges from -20 to 19, and a newly created process has a default niceness of 0.
Unprivileged users can modify a process' niceness only within the range from 1 to 19.
nice -n -5 command
Start a command with a niceness of -5. If niceness is omitted, a default value of 10 is used
renice -5 command
Change the niceness of a running command to -5
strace command
Trace the execution of a command, intercepting and printing the system calls called by a
process and the signals received by a process
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
29/126
Signals
Signals
Most frequently used signals
Signal number
Signal name
Meaning
SIGHUP
Used by many daemons to reload their configuration
SIGINT
Interrupt, stop
SIGKILL
Kill unconditionally (this signal cannot be ignored)
15
SIGTERM
Terminate gracefully
18
SIGCONT
Continue execution
20
SIGTSTP
Stop execution
man 7 signal
Manual page about signals
kill -l
List all available signal names
kill -l 1
Print the name of signal number 1
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
30/126
vmstat
vmstat
vmstat
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 296724 267120 3393400
0
0
17
56
0
3 2 2 95 1 0
procs
Number of runnable processes (running or waiting for run time)
Number of processes in uninterruptible sleep
swpd
memory
free
Free memory (idle)
buff
Memory used as buffers
cache
swap
io
system
cpu
Virtual memory used (swap)
Memory used as cache
si
Memory swapped in from disk
so
Memory swapped out to disk
bi
Blocks received in from a block device
bo
Blocks sent out to a block device
in
Number of interrupts
cs
Number of context switches
us
Time spent running user code (non-kernel)
sy
Time spent running system code (kernel)
id
Time spent idle
wa
st
in Kb
in Kb/second
in blocks/second
per second
in percentage of total CPU time
Time spent waiting for I/O
Time stolen from a virtual machine
vmstat
Print a report about virtual memory statistics: processes, memory, paging, block I/O,
traps, disks, and CPU activity
vmstat 1 5
Print a report every second, for 5 times
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
31/126
Resource monitoring
Resourcemonitoring
iostat
Print a report about CPU utilization, device utilization, and network filesystem.
The first report shows statistics since the system boot; subsequent reports will show
statistics since the previous report
iostat -dx 1 5
Print a detailed report for all devices every second, for 5 times
mpstat
Print a report about processor activities
mpstat 1 5
Print a report of global statistics among all processors every second, for 5 times
top
Process viewer
htop
Process viewer (ncurses UI)
iotop
Display I/O usage by processes in the system
free
Show the amount of free and used memory in the system
uptime
Show how long the system has been up, how many users are connected, and the system
load averages for the past 1, 5, and 15 minutes
sar
Show reports about system activity.
Reports are generated from data collected via the cron job sysstat and stored in
/var/log/sa/sn, where n is the day of the month
sar -n DEV
Show reports about network activity (received and transmitted packets per second)
sar -f /var/log/sa/s19 \
-s 06:00:00 -e 06:30:00
Show reports for system activity from 6 to 6:30 AM on the 19th of the month
powertop
Power consumption and power management diagnosis tool
Linux monitoring tools
collectd
System statistics collector
Nagios
System monitor and alert
MRTG
Network load monitor
Cacti
Network monitor
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
32/126
Regexs
Regexs
Regular expressions
^
Beginning of a line
End of a line
\< \>
Word boundaries (beginning of line, end of line, space, or punctuation mark)
Any character, except newline
[abc]
Any of the characters specified
[a-z]
Any of the characters in the specified range
[^abc]
Any character except those specified
Zero or more times the preceding regex
One or more times the preceding regex
Zero or one time the preceding regex
{5}
Exactly 5 times the preceding regex
{3,6}
Between 3 and 6 times the preceding regex
The regex either before or after the vertical bar
( )
Grouping, to be used for back-references.
\1 expands to the first match, \2 for the second, and so on until \9
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
33/126
File permissions
Filepermissions
--==regular
regularfile
file
dd==directory
directory
ll==symbolic
symboliclink
link
ss==Unix
Unixdomain
domainsocket
socket
pp==named
namedpipe
pipe
cc==character
characterdevice
devicefile
file
bb==block
blockdevice
devicefile
file
Permission
r w x
group
group
others
others
rr==read
read
ww==write
write
xx==execute
execute
ss==setUID
setUIDand
andexecute
execute
SS==setUID
setUIDand
andnot
notexecute
execute
rr==read
read
ww==write
write
xx==execute
execute
ss==setGID
setGIDand
andexecute
execute
SS==setGID
setGIDand
andnot
notexecute
execute
rr==read
read
ww==write
write
xx==execute
execute
tt==sticky
stickyand
andexecute
execute
TT==sticky
stickyand
andnot
notexecute
execute
Command
user: 400
chmod u+r
group: 40
chmod g+r
others: 4
chmod o+r
user: 200
chmod u+w
group: 20
chmod g+w
others: 2
chmod o+w
user: 100
chmod u+x
group: 10
chmod g+x
others: 1
chmod o+x
SetUID (SUID)
4000
SetGID (SGID)
Sticky
Write
Execute
r w x
user
user(owner)
(owner)
Octal value
Read
r w x
Effect on file
Effect on directory
Can open and read the file
Can list directory content
Can modify the file
Can create, delete, and rename files in
the directory
Can execute the file (binary
or script)
Can enter the directory, and search files
within (by accessing a file's inode)
chmod u+s
Executable is run with the
privileges of the file's owner
No effect
2000
chmod g+s
Executable is run with the
privileges of the file's group
All new files and subdirectories inherit
the directory's group ID
1000
chmod +t
No effect
Only the file's or the directory's owner
can delete or rename a file inside
chmod 710 file
chmod u=rwx,g=x file
Set read, write, and execute permission to user; set execute permission to group
chmod 660 file
chmod ug=rw file
Set read and write permission to user and group
chmod +wx file
Add write and execute permission to everybody (user, group, and others)
chmod -R o+r file
Add recursively read permission to others
chmod o-x file
Remove execute permission from others
chown root file
Change the owner of file to root
chown root:mygroup file
Change the owner of file to root, and the group of file to mygroup
chgrp mygroup file
Change the group of file to mygroup
The chmod, chown, and chgrp commands accept the option -R to recursively change properties of files and directories.
umask 022
Set the permission mask to 022, hence masking write permission for group and others.
Linux default permissions are 0666 for files and 0777 for directories. These base permissions are
ANDed with the inverted umask value to calculate the final permissions of a new file or directory.
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
34/126
File attributes
Fileattributes
chattr +mode file
Add a file or directory attribute
chattr -mode file
Remove a file or directory attribute
chattr =mode file
Set a file or directory attribute, removing all other attributes
lsattr file
List file or directory attributes
Mode
Effect
File can only be open in append mode for writing
When file is accessed, its atime record is not modified
File is automatically compressed on-the-fly on disk by the kernel
File is not subject to copy-on-write updates (only for filesystems which perform copy-on-write)
File will not be backed up by the dump program
When directory is modified, changes are written synchronously on disk (equivalent to dirsync mount option)
File is using extents for mapping the blocks on disk
Compression error on file (attribute is used by experimental compression patches)
File is storing its blocks in units of filesystem blocksize instead of in units of sectors, and was larger than 2 Tb
File is immutable: cannot be modified, linked, or changed permissions
Directory is being indexed using hashed trees
All file data is written to the ext3 or ext4 journal before being written to the file itself
File has data stored inline within the inode itself
File will be securely wiped by zeroing when deleted
When file is modified, changes are written synchronously on disk (equivalent to sync mount option)
File won't have EOF partial block fragment merged with other files (only for filesystems supporting tail-merging)
Directory is the top of directory hierarchies for the purpose of the Orlov block allocator
After file is deleted, it can be undeleted
Raw contents of compressed file can be accessed directly (attribute is used by experimental compression patches)
Compressed file is dirty (attribute is used by experimental compression patches)
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
35/126
Links
Links
A Linux directory contains a list of structures which are associations between a filename and an inode.
An inode contains all file metadata: file type, permissions, owner, group, size, access/change/modification/deletion times,
number of links, attributes, ACLs, and address where the actual file content (data) is stored.
An inode does not contain the name of the file; this information is stored in the directory the file is in.
ls -i
Show a listing of the directory with the files' inode numbers
df -i
Report filesystem inode usage
Hard link
Symbolic or soft link
Definition
A link to an already existing inode
A path to a filename; a shortcut
Command to create it
ln myfile hardlink
ln -s myfile symlink
Is the link still valid if the original
file is moved or deleted?
Yes (because the link references the
inode the original file pointed to)
No (the path now references a nonexistent file)
Can link to a file in another
filesystem?
No (because inode numbers make sense
Yes
only within a determinate filesystem)
Can link to a directory?
No
Yes
Link permissions
Reflect the original file's permissions,
even when these are changed
rwxrwxrwx
Link attributes
- (regular file)
l (symbolic link)
Inode number
The same as the original file
A new inode number
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
36/126
Find system files
Findsystemfiles
find / -name "foo*"
Find all files, starting from the root dir, whose name start with foo
find / -name "foo*" -print
Find all files whose name start with foo and print their path
find / -name "foo*" -exec chmod 700 {} \;
Find all files whose name start with foo and apply permission 700 to
all of them
find / -name "foo*" -ok chmod 700 {} \;
Find all files whose name start with foo and apply permission 700 to
all of them, asking for confirmation before each file
find / -perm -4000 -type f
Find all files with SUID set
(a possible security risk, because a shell with SUID root is a backdoor)
find / -perm -2000 -type f
Find all files with SGID set
locate ls
slocate ls
Locate the command ls by searching the file index, not by actually
walking the filesystem. The search is quick but will only held results
relative to the last rebuilding of the file index (/etc/updatedb.conf)
updatedb
Build the file index (/etc/updatedb.conf)
which command
Locate a binary executable command within the PATH
which -a command
Locate all matches of command, not only the first one
whereis command
Locate the binary, source, and manpage files for command
whereis -b command
Locate the binary files for command
whereis -s command
Locate the source files for command
whereis -m command
Locate the manpage files for command
file myfile
Analyze the content of a file or directory
type command
Determine if command is a program or a builtin (i.e. a feature internal
to the shell)
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
37/126
Shell environment
Shellenvironment
Bash shell event
Files run
When a login shell is launched
/etc/profile
~/.bash_profile
~/.bash_login
~/.profile
When a login shell exits
~/.bash_logout
When a non-login shell is launched
/etc/bash.bashrc
/etc/bashrc
~/.bashrc
The shell executes the
system-wide profile file, then
the first of the 3 user files
that exists and is readable
MYVAR=value
((MYVAR=value))
Set a variable
MYVAR=$((MYVAR+1))
((MYVAR=MYVAR+1))
((MYVAR+=1))
((MYVAR++))
let "MYVAR=MYVAR+1"
let "MYVAR+=1"
let MYVAR++
Increment a numeric variable
unset MYVAR
Delete a variable
export MYVAR
Export a variable so it can be seen by Bash child processes
set ${MYVAR:=value}
MYVAR=${MYVAR:-value}
Set a variable, if it is not already set (i.e. does not exist) or is null
echo $MYVAR
Print the value of a variable
echo ${MYVAR:-message}
If variable exists and is not null, print its value, otherwise print a message
echo ${MYVAR:+message}
If variable exists and is not null, print a message, otherwise print nothing
echo $((3+3))
Evaluate an expression and print the result
set
Display all Bash variables
set -o
Show the status of all Bash options
set -option
set -o long_option
Enable a Bash option
set +option
set +o long_option
Disable a Bash option
set -v
set -o verbose
Enable printing of shell input lines as they are read
set -x
set -o xtrace
Enable printing of command traces before execution of each command
env
Display all environment variables
typeset -f
Show functions defined in the current Bash session
alias ls='ls -lap'
Set up an alias for the ls command
alias
Show defined aliases
\ls
/bin/ls
Run the non-aliased version of the ls command
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
38/126
Scripting
Scripting
Scripts must start with the shebang line #!/bin/bash indicating the location of the script interpreter.
Script execution
source myscript.sh
. myscript.sh
Script execution takes place in the same shell. Variables defined and
exported in the script are seen by the shell when the script exits
bash myscript.sh
./myscript.sh (file must be executable)
Script execution spawns a new shell
command &
Execute a command in the background
command1; command2
Execute command 1 and then command 2
command1 && command2
Execute command 2 only if command 1 executed successfully (exit status = 0)
command1 || command2
Execute command 2 only if command 1 did not execute successfully (exit status > 0)
(command1 && command2)
Group commands together for evaluation priority
exit
Terminate a script
exit n
Terminate a script with the specified exit status number n. By convention, a 0 exit
status is used if the script executed successfully, non-zero otherwise
if [ $? -eq 0 ]
then
echo "Success"
else
echo "Fail"
fi
Evaluate whether the last executed command exited successfully or failed
function myfunc { commands }
myfunc() { commands }
Define a function
myfunc arg1 arg2 ...
Call a function
MYVAR=`date`
MYVAR=$(date)
Assign to a variable the output resulting from a command
for DIR in `ls`
do
rmdir $DIR
done
Loop through a list of directories
zenity
Display GTK+ graphical dialogs for user messages and input
command | ts
Prepend a timestamp to each line of a command's output
Bash built-in variables
$0
Script name
$n
nth argument passed to the script or function
$#
Number of arguments passed to the script or function
$?
Exit status of the last executed command
${PIPESTATUS[n]}
Exit status of the nth command in the executed pipeline
$$
PID of the script in which this variable is called
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
39/126
Flow control
Flowcontrol
test $MYVAR = "value" && command
[ $MYVAR = "value" ] && command
if [ $MYVAR = "value" ]; then command; fi
Perform a test; if it holds true, the command is executed
Test operators
Integer operators
File operators
Expression operators
-eq
Equal to
-e or -a
Exists
-a
Logical AND
-ne
Not equal to
-d
Is a directory
-o
Logical OR
-lt
Less than
-b
Is a block special file
Logical NOT
-le
Less than or equal to
-c
Is a character special file
\(
-gt
Greater than
-f
Is a regular file
Greater than or equal to
-r
Is readable
String operators
-w
Is writable
-z
Is zero length
-x
Is executable
-n or nothing
Is non-zero length
-s
Is non-zero length
=or ==
Is equal to
-u
Is SUID
!=
Is not equal to
-g
Is SGID
<
Is alphabetically before
-k
Is sticky
>
Is alphabetically after
-h
Is a symbolic link
-ge
expr $MYVAR = "39 + 3"
Evaluate an expression (i.e. the variable will hold the value 42)
expr string : regex
Return the length of the substring matching the regex
expr string : \(regex\)
Return the substring matching the regex
\)
Priority
Evaluation operators
=
Equal to
Plus
!=
Not equal to
Minus
string : regex
match string regex
String matches regex
<
Less than
\*
Multiplied by
substr string pos length
Substring
<=
Less than or equal to
Divided by
index string chars
Index of any chars in string
>
Greater than
Remainder
length string
String length
>=
Greater than or equal to
Tests
if [test 1]
then
[command block 1]
elif [test 2]
then
[command block 2]
else
[command block 3]
fi
case $VAR in
[pattern 1]) [command 1] ;;
[pattern 2]) [command 2] ;;
*) [command 3]
esac
Loops
while [test]
do [command block]
done
for I in [list]
do [command operating on $I]
done
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
break
Terminate a loop
continue
Jump to the next iteration
Daniele Raffo
www.crans.org/~raffo
40/126
Text processors
Textprocessors
vi
Vi, text editor
vim
Vi Improved, an advanced text editor
vimdiff file1 file2
Compare two text files
pico
Pico, simple text editor
nano
Nano, simple text editor (GNU clone of Pico)
emacs
GNU Emacs, a GUI text editor
more
Text pager (obsolete)
less
Text pager
less pager commands
h
Help
Go to first line in the file
Go to last line in the file
Print the end of the file, moving forward as the file grows
-N
Show line numbers
-n
Don't show line numbers
Show information about the file
Quit
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
41/126
Vi
Vi
Go to Command mode
ESC
Insert text before cursor
Insert text after line
Append text after cursor
Append text after line
and go to Insert mode
Move to next word
Move to end of line
Move to beginning of word
1G
Move to beginning of file i.e. to line 1
Move to end of word
Move to end of file
Move to beginning of line
CTRL
RETURN
Make current line the top line of the screen
Show current line and column number
yy
Copy current line
Paste buffer after current line
Paste buffer before current line
yyp
Duplicate current line
Delete current character
Delete before current character
Delete from current character to end of line
dd
Delete current line
7dd
Delete 7 lines (almost any command can be prepended by a number to repeat it a number of times)
Undo last command (Vi can undo the last command only, Vim is able to undo several commands)
Repeat last text-changing command
/string
Search for string forward
Search for next match of string
?string
Search for string backwards
Search for previous match of string
:5,40s/^/#/
Add a hash character at the beginning of each line, from line 5 to 40
!!program
Replace line with output from program
:r file
Read file and insert it after current line
:X
Encrypt current document (when opening it again, Vi will prompt for the key to encrypt it)
:w file
Write to file
:wq
:x
Save changes and quit
:q
Quit (only if there are no changes)
:q!
Abandon all changes and quit
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
42/126
Vi options
Vioptions
Option
Effect
ai
Turn on auto indentation
all
Print all option to screen
ap
Print line after commands d c J m :s t u
aw
Automatic write on commands :n ! e# ^^ :rew ^} :tag
bf
Discard control characters from input
dir=tmpdir
Set tmpdir as directory for temporary work files
eb
Precede error messages with a bell
ht=8
Set terminal tab as 8 spaces
ic
Ignore case when searching
lisp
Modify brackets for Lisp compatibility
list
Show tabs and end-of-line characters
magic
Allow pattern matching with special characters
mesg
Enable UNIX terminal messaging
nu
Show line numbers
opt
Speeds output by eliminating automatic Return
para=LIlPLPPPQPbpP
Set macro to start paragraphs for { } operators
prompt
Prompt : for command input
re
Simulate smart terminal on dumb terminal
remap
Accept macros within macros
report
Show largest size of changes on status line
ro
Make file readonly
scroll=11
Set screen size as 11 lines
sh=/bin/bash
Set shell escape to /bin/bash
showmode
Show current mode on status line
slow
Postpone display updates during inserts
sm
Show matching parentheses when typing
sw=8
Set shift width to 8 characters
tags=/usr/lib/tags
Set path for files checked for tags
term
Print terminal type
terse
Print terse messages
timeout
Eliminate 1-second time limit for macros
tl=3
Set significance of tags beyond 3 characters (0 = all)
ts=8
Set tab stops to 8 for text input
wa
Inhibit normal checks before write commands
warn
Warn "No write since last change"
window=24
Set text window as 24 lines
wm=0
Set automatic wraparound 0 spaces from right margin
:set option
turn on an option
:set nooption
turn off an option
Options can also be set permanently by including them in ~/.exrc
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
43/126
SQL
SQL
SHOW DATABASES;
Show all existing databases
SHOW TABLES;
Show all tables from the selected database
USE CompanyDatabase;
Choose which database to use
SELECT DATABASE();
Show which database is currently selected
CREATE TABLE customers (
cusid INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
firstname VARCHAR(32), lastname VARCHAR(32), dob DATE,
city VARCHAR(24), zipcode VARCHAR(5));
Create tables
CREATE TABLE payments (
payid INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
date DATE, fee INT, bill VARCHAR(128), cusid INT,
CONSTRAINT FK1 FOREIGN KEY (cusid) REFERENCES customers(cusid));
CREATE INDEX lastname_index ON customers(lastname);
ALTER TABLE customers ADD INDEX lastname_index (lastname);
Create a field index for fast search
DESCRIBE customers;
Describe the columns of a table
DROP TABLE payments;
Delete a table
DROP DATABASE CompanyDatabase;
Delete a database
ALTER TABLE customers MODIFY city VARCHAR(32);
Modify the type of a field
INSERT INTO customers (firstname,lastname,dob)
VALUES ('Arthur','Dent',1959-08-01), ('Trillian','',1971-03-19);
Insert a new record in a table
DELETE FROM customers WHERE firstname LIKE 'Zaphod';
Delete some records in a table
UPDATE customers SET city = 'London' WHERE zipcode = '00789';
Modify data
CREATE VIEW cust_view AS
SELECT * FROM customers WHERE city != 'London';
Create a view
COMMIT;
Commit changes to the database
ROLLBACK;
Rollback the current transaction, canceling
any changes done during it
START TRANSACTION;
BEGIN;
Disable autocommit for this transaction,
until a COMMIT or ROLLBACK is issued
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
44/126
SQL SELECTs
SQLSELECTs
SELECT * FROM customers;
Select all columns from the
customers table
SELECT firstname, lastname FROM customers LIMIT 5;
Select first and last name of
customers, showing 5 records only
SELECT firstname, lastname FROM customers WHERE zipcode = '00123';
Select first and last name of
customers whose zip code is 00123
SELECT firstname, lastname FROM customers WHERE zipcode IS NOT NULL;
Select first and last name of
customers with a recorded zip code
SELECT * FROM customers ORDER BY lastname, firstname;
Select customers in alphabetical
order by last name, then first name
SELECT * FROM customers ORDER by zipcode DESC;
Select customers, sorting them by
zip code in reverse order
SELECT firstname, lastname, TIMESTAMPDIFF(YEAR,dob,CURRENT_DATE) as AGE
FROM customers;
Select first name, last name, and
calculated age of customers
SELECT DISTINCT city FROM customers;
Show all cities but retrieving each
unique output record only once
SELECT city, COUNT(*) FROM customers GROUP BY city;
Show all cities and the number of
customers in each city. NULL
values are not counted
SELECT cusid, SUM(fee) FROM payments GROUP BY cusid;
Show all fee payments grouped by
customer ID, summed up
SELECT cusid, AVG(fee) FROM payments GROUP BY cusid
HAVING AVG(fee)<50;
Show the average of fee payments
grouped by customer ID, where this
average is less than 50
SELECT MAX(fee) FROM payments;
Show the highest fee in the table
SELECT cusid FROM payments t1 WHERE fee =
(SELECT MAX(t2.fee) FROM payments t2 WHERE t1.cusid=t2.cusid);
Show the customer ID that pays the
highest fee (via a subquery)
SELECT @maxfee:=MAX(fee) FROM payments;
SELECT cusid FROM payments t1 WHERE fee = @maxfee;
Show the customer ID that pays the
highest fee (via a user set variable)
SELECT cusid FROM payments WHERE fee >
ALL (SELECT fee FROM payments WHERE cusid = 4242001;
Show the customer IDs that pay
fees higher than the highest fee
paid by customer ID 4242001
SELECT * FROM customers WHERE firstname LIKE 'Trill%';
Select customers whose first name
starts with "Trill"
SELECT * FROM customers WHERE firstname LIKE 'F_rd';
Select matching customers;
the _ matches a single character
SELECT * FROM customers WHERE firstname REGEXP '^Art.*r$';
Select customers whose first name
matches the regex
SELECT firstname, lastname FROM customers WHERE zipcode = '00123'
UNION
SELECT firstname, lastname FROM customers WHERE cusid > 4242001;
Select customers that satisfy any of
the two requirements
SELECT firstname, lastname FROM customers WHERE zipcode = '00123'
INTERSECT
SELECT firstname, lastname FROM customers WHERE cusid > 4242001;
Select customers that satisfy both
of the two requirements
SELECT firstname, lastname FROM customers WHERE zipcode = '00123'
EXCEPT
SELECT firstname, lastname FROM customers WHERE cusid > 4242001;
Select customers that satisfy the
first requirement but not the second
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
45/126
SQL JOINs
SQLJOINs
SELECT customers.lastname, payments.bill
FROM customers, payments WHERE customers.cusid = payments.cusid;
Perform a join (aka inner join) of
two tables to select data that are in
a relationship
SELECT customers.lastname, payments.bill
FROM customers NATURAL JOIN payments;
SELECT customers.lastname, payments.bill
FROM customers JOIN payments USING (cusid);
SELECT customers.lastname, payments.bill
FROM customers JOIN payments ON customers.cusid = payments.cusid;
SELECT * FROM customers CROSS JOIN payments;
Perform a Cartesian product (aka
cross join) of two tables
SELECT customers.lastname, payments.bill
FROM customers LEFT JOIN payments ON customers.cusid = payments.cusid;
Perform a left join (aka left outer
join) of two tables, returning
records matching the join condition
and also records in the left table
with unmatched values in the right
table
SELECT customers.lastname, payments.bill
FROM customers RIGHT JOIN payments ON customers.cusid = payments.cusid;
Perform a right join (aka right outer
join) of two tables, returning
records matching the join condition
and also records in the right table
with unmatched values in the left
table
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
46/126
MySQL
MySQL
SELECT Host,User FROM mysql.user;
List MySQL users
CREATE USER 'john'@'localhost' IDENTIFIED BY 'p4ssw0rd';
Create a MySQL user, setting his
password
DROP USER 'john'@'localhost';
Delete a MySQL user
SET PASSWORD FOR 'john'@'localhost' = PASSWORD('p4ssw0rd');
Set a password for a MySQL user
SET PASSWORD FOR 'john'@'localhost' = '*7E684A3DF6273CD1B6DE53';
Set a password for a MySQL user,
specifying its hash instead of the plaintext
SHOW GRANTS FOR 'john'@'localhost';
Show permissions for a user
GRANT ALL PRIVILEGES ON MyDatabase.* TO 'john'@'localhost';
Grant permissions to a user
REVOKE ALL PRIVILEGES FROM 'john'@'localhost';
Revoke permissions from a user
GRANT SELECT ON *.* TO 'john'@'localhost' IDENTIFIED BY 'p4ssw0rd';
Create a MySQL user and set his grants
FLUSH PRIVILEGES;
Reload and commit the grant tables; to be
used after any GRANT command
USE MyDatabase; SOURCE mydbbak.sql;
Restore a database from a dump file
USE MyDatabase; LOAD DATA LOCAL INFILE 'foofile' INTO TABLE foo;
Populate a table with data from file (one
record per line, values separated by tabs)
SELECT * FROM MyDatabase.mytable;
SELECT * FROM MyDatabase.mytable\g
Send a statement to the server
SELECT * FROM MyDatabase.mytable\G
Display result in vertical format, showing
each record in multiple rows
SELECT /*!99999 my comment*/ * FROM MyDatabase.mytable;
Insert a comment in the statement
\s
Print status information about the server
and the current connection
\c
Cancel current input
SELECT VERSION();
Show version of MySQL server
SELECT CURDATE();
SELECT CURRENT_DATE;
Show current date
SELECT CURTIME();
SELECT CURRENT_TIME;
Show current time
SELECT NOW();
Show current date and time
SELECT USER();
Show current logged-in user@host
\! command
Run a shell command
TEE logfile
Log all I/O of the current MySQL session
to the specified logfile
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
47/126
MySQL status
MySQLstatus
SHOW VARIABLES;
SHOW SESSION VARIABLES;
SHOW LOCAL VARIABLES;
Print session variables (affecting the current connection only)
SHOW GLOBAL VARIABLES;
Print global variables (affecting the global operations on the server)
SHOW VARIABLES LIKE 'sort_buffer_size';
Print session variables that match the given pattern
SET
SET
SET
SET
SET
SET
Set a session variable
sort_buffer_size=10000;
SESSION sort_buffer_size=10000;
LOCAL sort_buffer_size=10000;
@@sort_buffer_size=10000;
@@session.sort_buffer_size=10000;
@@local.sort_buffer_size=10000;
SET GLOBAL sort_buffer_size=10000;
SET @@global.sort_buffer_size=10000;
Set a global variable
SHOW STATUS;
SHOW SESSION STATUS;
SHOW LOCAL STATUS;
Print session status (concerning the current connection only)
SHOW GLOBAL STATUS;
Print global status (concerning the global operations on the server)
SHOW WARNINGS;
Print warnings, errors and notes resulting from the most recent
statement in the current session that generated messages
SHOW ERRORS;
Print errors resulting from the most recent statement in the current
session that generated messages
SHOW TABLE STATUS;
Print information about the database e.g. engine (InnoDB or
MyISAM), rows, indexes, data
SHOW ENGINE INNODB STATUS;
Print statistics concerning the InnoDB engine
SHOW FULL PROCESSLIST;
Print the list of threads running on the system
SELECT table_schema "Name",
sum(data_length+index_length)/1024 "Size Kb"
FROM information_schema.TABLES
GROUP BY table_schema;
Display the sizes of all databases in the system
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
48/126
MySQL tools
MySQLtools
mysqld_safe
Start the MySQL server (mysqld) with safety features
such as restarting the server if errors occur and logging
runtime information to the error logfile. Recommended
mysql_install_db (deprecated)
mysqld --initialize
Initialize the MySQL data directory, create system tables,
and set up an administrative account
mysql_secure_installation
Set password for root, remove anonymous users, disable
remote root login, and remove test database
mysql -u root -p
Login to MySQL as root and prompt for the password
mysql -u root -ps3cr3t
Login to MySQL as root with password s3cr3t
mysql -u root -p -e 'CREATE DATABASE MyDatabase'
Run a SQL command via MySQL
mysqldump -u root -p --all-databases > alldbsbak.sql
Backup all databases to a dump file
mysqldump -u root -p MyDatabase > mydbbak.sql
Backup a database to a dump file
mysql -u root -p < alldbsbak.sql
Restore all databases from a dump file
mysql -u root -p MyDatabase < mydbbak.sql
Restore a database from a dump file
mysql_upgrade -u root -p
Check all tables in all databases for incompatibilities with
the current version of MySQL
mysqlcheck [options]
Perform table maintenance. Each table is locked while is
being processed. Options are:
--check
Check table for errors (default)
--analyze
Analyze table
--optimize Optimize table
--repair
Repair table; this can fix almost anything
except unique keys that are not unique
mysqlcheck --check db table
Check the specified table of the specified database
mysqlcheck --check --databases db1 db2
Check the specified databases
mysqlcheck --check --all-databases
Check all databases
mysqltuner.pl
Review the current MySQL installation for performances
and stability
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
49/126
X Window
XWindow
Display Managers
Display Manager
xdm
Configuration files
/etc/x11/xdm/Xaccess
Control inbound requests from
remote hosts
/etc/x11/xdm/Xresources
Configuration settings for X
applications and the login screen
/etc/x11/xdm/Xservers
X
Display
Manager
Display Manager greeting screen
/etc/x11/xdm/Xsession
Association of X displays with
local X server software, or with X Defined in /etc/x11/xdm/Xresources
by the line:
terminals via XDMCP
xlogin*greeting: \
Script launched by xdm after
Debian GNU/Linux (CLIENTHOST)
login
/etc/x11/xdm/Xsetup_0
Script launched before the
graphical login screen
/etc/x11/xdm/xdm-config
Association of all xdm
configuration files
gdm
GNOME
Display
Manager
/etc/gdm/gdm.conf or /etc/gdm/custom.conf
Configured via gdmsetup
kdm
KDE
Display
Manager
/etc/kde/kdm/kdmrc
Configured via kdm_config
/etc/init.d/xdm start
/etc/init.d/gdm start
/etc/init.d/kdm start
xorgconfig
Xorg -configure
Start the X Display Manager
(Debian)
(Red Hat)
xorgcfg
system-config-display
(Debian)
(Red Hat)
Configure X (text mode)
Configure X (graphical mode)
X -version
Show which version of X is running
xdpyinfo
Display information about the X server
xwininfo
Display information about windows
xhost + 10.3.3.3
xhost - 10.3.3.3
Add or remove 10.3.3.3 to the list of hosts allowed to make X connections to
the local machine
switchdesk gde
Switch to the GDE Display Manager at runtime
/etc/X11/xorg.conf
Configuration file for X
~/.Xresources
Configuration settings for X applications, in the form
program*resource: value
$DISPLAY
Environment variable defining the display name of the X server, in the form
hostname:displaynumber.screennumber
/etc/inittab instructs init to launch XDM at runlevel 5:
x:5:respawn:/usr/X11R6/bin/xdm -nodaemon
/etc/sysconfig/desktop defines GNOME as the default
Display Environment and Display Manager:
desktop="gde"
displaymanager="gdm"
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
50/126
X Window tools
XWindowtools
xdotool
X automation tool
xdotool getwindowfocus
Get the ID of the currently focused window (usually the terminal where
this command is typed)
xdotool selectwindow
Pop up a X cursor and get the ID of the window selected by it
xdotool key --window 12345678 Return
Simulate a Return keystroke inside window ID 12345678
xprop
X property displayer
xrandr --output eDP1 --right-of VGA1
Extend the screen on an additional VGA physical screen situated to the left
xsel
Manipulate the X selection (primary, secondary, and clipboard)
xsel -b < file
Put the contents of a file in the X clipboard
xsel -b -a < file2
Append the contents of a file to the X clipboard
xsel -b -o
Output onscreen the contents of the X clipboard
mkfontdir
Catalog the newly installed fonts in the new directory
xset fp+ /usr/local/fonts
Dynamically add the new installed fonts in /usr/local/fonts to the X
server
xfs
Start the X font server
fc-cache
Install fonts and build font information cache
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
51/126
X11 keysim codes
X11keysimcodes
Main
BackSpace
Tab
Linefeed
Clear
Return
Pause
Scroll_Lock
Sys_Req
Escape
Delete
Latin 1
ff08
ff09
ff0a
ff0b
ff0d
ff13
ff14
ff15
ff1b
ffff
Cursor control
Home
Left
Up
Right
Down
Prior
Page_Up
Next
Page_Down
End
Begin
ff50
ff51
ff52
ff53
ff54
ff55
ff55
ff56
ff56
ff57
ff58
Misc functions
Select
Print
Execute
Insert
Undo
Redo
Menu
Find
Cancel
Help
Break
Mode_switch
script_switch
Num_Lock
ff60
ff61
ff62
ff63
ff65
ff66
ff67
ff68
ff69
ff6a
ff6b
ff7e
ff7e
ff7f
Modifiers
Shift_L
Shift_R
Control_L
Control_R
Caps_Lock
Shift_Lock
Meta_L
Meta_R
Alt_L
Alt_R
Super_L
Super_R
Hyper_L
Hyper_R
ffe1
ffe2
ffe3
ffe4
ffe5
ffe6
ffe7
ffe8
ffe9
ffea
ffeb
ffec
ffed
ffee
space
exclam
quotedbl
numbersign
dollar
percent
ampersand
apostrophe
quoteright
parenleft
parenright
asterisk
plus
comma
minus
period
slash
0 - 9
colon
semicolon
less
equal
greater
question
at
A - Z
bracketleft
backslash
bracketright
asciicircum
underscore
grave
quoteleft
a - z
braceleft
bar
braceright
asciitilde
nobreakspace
exclamdown
cent
sterling
currency
yen
brokenbar
section
diaeresis
copyright
ordfeminine
guillemotleft
notsign
hyphen
registered
macron
degree
plusminus
twosuperior
threesuperior
acute
mu
paragraph
periodcentered
cedilla
onesuperior
masculine
guillemotright
onequarter
onehalf
threequarters
0020
0021
0022
0023
0024
0025
0026
0027
0027
0028
0029
002a
002b
002c
002d
002e
002f
0030 - 0039
003a
003b
003c
003d
003e
003f
0040
0041 - 005a
005b
005c
005d
005e
005f
0060
0060
0061 - 007a
007b
007c
007d
007e
00a0
00a1
00a2
00a3
00a4
00a5
00a6
00a7
00a8
00a9
00aa
00ab
00ac
00ad
00ae
00af
00b0
00b1
00b2
00b3
00b4
00b5
00b6
00b7
00b8
00b9
00ba
00bb
00bc
00bd
00be
Latin 2
questiondown
Agrave
Aacute
Acircumflex
Atilde
Adiaeresis
Aring
AE
Ccedilla
Egrave
Eacute
Ecircumflex
Ediaeresis
Igrave
Iacute
Icircumflex
Idiaeresis
ETH
Eth
Ntilde
Ograve
Oacute
Ocircumflex
Otilde
Odiaeresis
multiply
Oslash
Ooblique
Ugrave
Uacute
Ucircumflex
Udiaeresis
Yacute
THORN
Thorn
ssharp
agrave
aacute
acircumflex
atilde
adiaeresis
aring
ae
ccedilla
egrave
eacute
ecircumflex
ediaeresis
igrave
iacute
icircumflex
idiaeresis
eth
ntilde
ograve
oacute
ocircumflex
otilde
odiaeresis
division
oslash
ooblique
ugrave
uacute
ucircumflex
udiaeresis
yacute
thorn
ydiaeresis
00bf
00c0
00c1
00c2
00c3
00c4
00c5
00c6
00c7
00c8
00c9
00ca
00cb
00cc
00cd
00ce
00cf
00d0
00d0
00d1
00d2
00d3
00d4
00d5
00d6
00d7
00d8
00d8
00d9
00da
00db
00dc
00dd
00de
00de
00df
00e0
00e1
00e2
00e3
00e4
00e5
00e6
00e7
00e8
00e9
00ea
00eb
00ec
00ed
00ee
00ef
00f0
00f1
00f2
00f3
00f4
00f5
00f6
00f7
00f8
00f8
00f9
00fa
00fb
00fc
00fd
00fe
00ff
Aogonek
breve
Lstroke
Lcaron
Sacute
Scaron
Scedilla
Tcaron
Zacute
Zcaron
Zabovedot
aogonek
ogonek
lstroke
lcaron
sacute
caron
scaron
scedilla
tcaron
zacute
doubleacute
zcaron
zabovedot
Racute
Abreve
Lacute
Cacute
Ccaron
Eogonek
Ecaron
Dcaron
Dstroke
Nacute
Ncaron
Odoubleacute
Rcaron
Uring
Udoubleacute
Tcedilla
racute
abreve
lacute
cacute
ccaron
eogonek
ecaron
dcaron
dstroke
nacute
ncaron
odoubleacute
rcaron
uring
udoubleacute
tcedilla
abovedot
01a1
01a2
01a3
01a5
01a6
01a9
01aa
01ab
01ac
01ae
01af
01b1
01b2
01b3
01b5
01b6
01b7
01b9
01ba
01bb
01bc
01bd
01be
01bf
01c0
01c3
01c5
01c6
01c8
01ca
01cc
01cf
01d0
01d1
01d2
01d5
01d8
01d9
01db
01de
01e0
01e3
01e5
01e6
01e8
01ea
01ec
01ef
01f0
01f1
01f2
01f5
01f8
01f9
01fb
01fe
01ff
This is an excerpt of keysymdef.h which defines keysym codes (i.e. characters or functions associated with each key in X11)
as XK_key and the key hex value. These keys can be used as argument for the xdotool key command.
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
52/126
User accounts
Useraccounts
User accounts
/etc/passwd
root:x:0:0:/root:/bin/bash
bin:x:1:1:/bin:/bin/bash
jdoe:x:500:100:John Doe,,555-1234,,:/home/jdoe:/bin/bash
1
Login name
Encrypted password (obsolete), or x if password is in /etc/shadow
UID User ID
GID Default Group ID
GECOS field Information about the user: Full name, Room number, Work phone, Home phone, Other
Home directory of the user
Login shell (can be set to /bin/false to prevent a user from logging in)
(UID 0 is superuser; by convention UIDs 1-99 are system accounts, UIDs above are regular users)
/etc/shadow
User passwords (readable only by root)
root:fZPe54/Kldu6D32pl0X/A:15537:0:99999:7:::
bin:*:15637:0:99999:7:::
jdoe:!hsp\8e3jCUdw9Ru53:15580:0:99999:7::15766:
1
6 7 8
Login name
Encrypted password (a ! prefix if the account is locked, * if account is disabled, ! or !! if no password)
Date of last password change (in number of days since 1 January 1970)
Days before password may be changed; if 0, user can change the password at any time
Days after which password must be changed
Days before password expiration that user is warned
Days after password expiration that account is disabled
Date of account disabling (in number of days since 1 January 1970)
Reserved field
Group accounts
/etc/group
root:x:0:root
jdoe:x:501
staff:x:530:jdoe,asmith
1
/etc/gshadow
3 4
Linux & LPIC Quick Reference Guide
Group name
Encrypted password, or x if password is in /etc/gshadow
GID Group ID
Group members (if this is not their Default Group)
Group passwords (readable only by root)
root::root:root
jdoe:!::
staff:0cfz7IpLhW19i::root,jdoe
1
3rd ed.
Group name
Encrypted password, or ! if no password set (default)
Group administrators
Group members
2015-07
Daniele Raffo
www.crans.org/~raffo
53/126
User management
Usermanagement
useradd -m jdoe
Create a user account, creating and populating his homedir from /etc/skel
useradd -mc "John Doe" jdoe
Create a user account, specifying his full name
useradd -ms /bin/ksh jdoe
Create a user account, specifying his login shell
useradd -D
Show default values (specified in /etc/login.defs) for user account creation
usermod -c "Jonas Doe" jdoe
Modify the GECOS field of a user account
usermod -L jdoe
Lock a user account
usermod -U jdoe
Unlock a user account
userdel -r jdoe
Delete a user and his homedir
chfn jdoe
Change the GECOS field of a user
chsh jdoe
Change the login shell of a user
passwd jdoe
Change the password of a user
passwd -l jdoe
Lock a user account
passwd -S jdoe
Get information about a user account.
Prints username, account status (L=locked, P=password, NP=no password), date of
last password change, min age, max age, warning period, inactivity period in days
chage -E 2013-02-14 jdoe
Change the password expiration date, locking the account at that date
chage -d 13111 jdoe
Change the date (in number of days since 1 January 1970) of last password change
chage -d 0 jdoe
Force the user to change password at his next login
chage -M 30 jdoe
Change the max number of days during which a password is valid
chage -m 7 jdoe
Change the min number of days between password changes
chage -W 15 jdoe
Change the number of days before password expiration that the user will be warned
chage -I 3 jdoe
Change the number of days after password expiration before the account is locked
chage -l jdoe
List password aging information for a user
groupadd staff
Create a group
groupmod -n newstaff staff
Change a group name
groupdel staff
Delete a group
gpasswd staff
Set or change the password of a group
gpasswd -a jdoe staff
Add a user to a group
gpasswd -d jdoe staff
Delete a user from a group
gpasswd -A jdoe staff
Add a user to the list of administrators of the group
adduser
deluser
addgroup
delgroup
User-friendly front-ends for user and group management
(Debian)
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
(usermod accepts many
useradd options)
Daniele Raffo
www.crans.org/~raffo
54/126
UID and GID
UIDandGID
The Linux Standard Base Core Specification specifies that UIDs from 0 to 99 should be statically allocated by the system and
not be created by applications, and UIDs from 100 to 499 should be reserved for dynamic allocation by system
administrators and post install scripts. User account UIDs start from 500 (Red Hat) or 1000 (SUSE, Debian).
A process has an effective, saved, and real UID and GID:
Effective UID
Used for most access checks, and as the owner for files created by the process. An unprivileged process
can change its effective UID only to either its saved UID or its real UID.
Saved UID
Used when a process running with elevated privileges needs to temporarily lower its privileges. The
process changes its effective UID (usually root) to a unprivileged one, and its privileged effective UID is
copied to the saved UID. Later, the process can resume its elevated privileges by resetting its effective
UID back to the saved UID.
Real UID
Used to identify the real owner of the process and affect the permissions for sending signals. An
unprivileged process can signal another process only if the senders real or effective UID matches the
receiver's real or saved UID. Child processes inherit the credentials from the parent, so they can signal
each other.
/etc/nologin
If this file exists, login and sshd deny login to the system.
Useful to prevent users to log in when doing system maintenance
/etc/login.defs
Definition of default values (UID and GID ranges, mail directory, account validity,
password encryption method, and so on) for user account creation
whoami
Print your effective UID
id user
Print real and effective UID and GID of the user
who
Print the list of users logged into the system
Print the list of users logged into the system, and what they are doing
last
Print the list of users that logged in and out. Searches through the file /var/log/wtmp
lastb
Print the list of bad login attempts. Searches through the file /var/log/btmp
fail2ban
Scan authentication logs and temporarily ban IP addresses (via firewall rules) that
have too many failed password logins
/var/log/auth.log
Logfile containing user logins and authentication mechanisms
/var/log/pwdfail
Logfile containing failed authentication attempts
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
55/126
Privilege escalation
Privilegeescalation
runuser -u jdoe command
Run a command as user jdoe. Can be launched only by the superuser
su jdoe
Run a shell as user jdoe. If user is not specified, assume root
su -c "fdisk -l"
Pass a single command to the shell
su su -l
Ensure that the spawned shell is a login shell, hence running login scripts and setting
the correct environment variables. Recommended option
sudo fdisk -l
sudo -uroot fdisk -l
Run a command as root. Sudo commands are logged via syslog on
/var/log/auth.log (Debian) or /var/log/secure (Red Hat)
sudo !!
Run again the last command, but this time as root
sudoedit /etc/passwd
sudo -e /etc/passwd
Edit a protected file. It is recommended to use this instead of allowing users to sudo
text editors as root, which will cause security problems if the editor spawns a shell
visudo
Edit /etc/sudoers, the configuration file that specifies access rights to sudo
gksu -u root -l
gksudo -u root gparted
GUI front-ends to su and sudo used to run a X Window command as root. Will pop up
a requester prompting the user for root's password
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
56/126
Terminals
Terminals
write jdoe
Write interactively a message to the terminal of user jdoe (must be logged in)
wall
Write interactively a message to the terminal of all logged in users
echo "Hello" | write jdoe
Write a message to the terminal of user jdoe (must be logged in)
echo "Hello" | wall
Write a message to the terminal of all logged in users
talk jdoe
Open an interactive chat session with user jdoe (must be logged in)
mesg y
chmod g+w $(tty)
Allow the other users to message you via write, wall, and talk
mesg n
chmod g-w $(tty)
Disallow the other users to message you via write, wall, and talk
mesg
Display your current message permission status
mesg works by enabling/disabling the group write permission of your terminal device, which is owned by system group tty.
The superuser is always able to message users.
screen
Screen manager that multiplexes a virtual VT100/ANSI terminal between
processes.
This command creates a screen session; this is useful to be able later to
reattach to a remote SSH session lost because of timeout
screen -list
Show the list of detached screen sessions
screen -r pid.tty.host
screen -r sessionowner/pid.tty.host
Resume a detached screen session
screen -R
Resume the last detached screen session
echo $(tty)
Print your terminal device (e.g. /dev/tty1, /dev/pts/1)
/etc/issue
Message to be printed before the login prompt. Can contain these escape
codes:
\b
\d
\s
\l
\m
\n
Baudrate of line
Date
System name and OS
Terminal device line
Architecture identifier of machine
Nodename aka hostname
\o
\r
\t
\u
\U
\v
Domain name
OS release number
Time
Number of users logged in
"n users" logged in
OS version and build date
/etc/issue.net
Message to be printed before the login prompt on a remote session
/etc/motd
Message to be printed after a successful login, before execution of the login
shell
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
57/126
cron
cron
cron permits repeated scheduled execution.
If /etc/cron.allow exists, only users listed therein can access the service.
If /etc/cron.deny exists, all users except those listed therein can access the service.
If none of these files exist, all users can access the service.
crontab -e
Edit your user crontab file
crontab -l
List the contents of your crontab file
crontab -e -u jdoe
Edit the crontab file of another user (command available only to the superuser)
/etc/cron.hourly
/etc/cron.daily
/etc/cron.weekly
/etc/cron.monthly
Scripts placed in these directories will be automatically executed with the specified periods
/etc/crontab
# m
dom mon dow
user
command
25
root
foo.sh
every Monday at 6:25 AM
*/5 16
root
/opt/myscript.sh
from 4:00 to 4:55 PM every 5 minutes everyday
0,30 7
25
12
jdoe
/home/jdoe/bar.sh
at 7:00 and 7:30 AM on 25th December
3 17
1-5
root
baz.sh
at 5:03 PM everyday, from Monday to Friday
minutes
hours
dom
day of month (1-31)
mon
month (1-12 or jan-dec)
dow
day of week (0-7 or sun-sat; 0=7=Sunday)
user
User as whom the command will be executed
command
Command that will be executed at the specified times
The crond daemon checks the /etc/crontab system-wide file every minute and executes the command as the specified
user at the specified times.
Each user may also set his own crontab scheduling, which will result in a file /var/spool/cron/username. A user' crontab
file has the same format, except that the user field is not present.
/etc/anacrontab
# period
7
delay
job-identifier
command
10
cron-weekly
/opt/myscript.sh
If the job has not been run in the last 7 days,
wait 10 minutes and then execute the command
period
period, in days, during which the command was not executed
delay
delay to wait, in minutes, before execution of the command
job-identifier
job identifier in anacron messages
command
command that will be executed
Anacron jobs are run by crond, and permit the execution of periodic jobs on a machine that is not always powered on, such
as a laptop.
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
58/126
at
at
at permits scheduled execution once.
If /etc/at.allow exists, only users listed therein can access the service.
If /etc/at.deny exists, all users except those listed therein can access the service.
If none of these files exist, no user except root can access the service.
at 5:00pm tomorrow myscript.sh
at -f mylistofcommands.txt 5:00pm tomorrow
echo "rm file" | at now+2 minutes
Execute a command once at the specified time (absolute or relative)
at -l
atq
List the scheduled jobs
at -d 3
atrm 3
Remove job number 3 from the list
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
59/126
Localization
Localization
Locale environment variables
LANG
LANGUAGE
Language, stored in /etc/default/locale .
When scripting, LANG=C should be set because this
specifies the minimal locale environment for C
translation, and guarantees a standard collation and
formats for the execution of scripts
LC_CTYPE
Character classification and case conversion
LC_NUMERIC
Non-monetary numeric formats
LC_TIME
Date and time formats
LC_COLLATE
Alphabetical order
LC_MONETARY
Monetary formats
These locale variables are in the format
language_territory.encoding
e.g. en_US.UTF-8
LC_MESSAGES
Language and encoding of system messages and user
input
The list of supported locales is stored in
/usr/share/i18n/SUPPORTED
LC_PAPER
Paper size
LC_NAME
Personal name formats
LC_ADDRESS
Geographic address formats
LC_TELEPHONE
Telephone number formats
LC_MEASUREMENT
Measurement units (metric or others)
LC_IDENTIFICATION
Metadata about locale
LC_ALL
Special variable overriding all others
locale
Show locale environment variables
locale-gen it_IT.UTF-8
Generate a locale by compiling a list of locale definition files
apt-get install manpages-it language-pack-it
Install a different locale (system messages and manpages)
iconv -f IS6937 -t IS8859 filein > fileout
Convert a text file from a codeset to another
ISO/IEC-8859 is a standard for 8-bit encoding of printable characters.
The first 256 characters in ISO/IEC-8859-1 (Latin-1) are identical to those in Unicode.
UTF-8 encoding can represent every character in the Unicode set, and was designed for backward compatibility with ASCII.
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
60/126
System time
Systemtime
tzselect
tzconfig
dpkg-reconfigure tzdata
(Debian)
Set the timezone, stored in/etc/timezone
Timezone is also set as a symbolic link from /etc/localtime to the correct timezone file in /usr/share/zoneinfo/
date
Show current date and time
date -d "9999 days ago"
Calculate a date and show it
date -d "1970/01/01 + 4242"
Convert the number of days passed since 1 January 1970 in a canonical date
date +"%F %H:%M:%S"
Show current date in the format specified
date -s "20130305 23:30:00"
Set the date
date 030523302013
Set the date, in the format MMDDhhmmYYYY
ntpd
NTP daemon, keeps the clock in sync with Internet time servers
ntpd -q
Synchronize the time once and quit
ntpd -g
Force NTP to start even if clock is off by more than the panic threshold (1000 secs)
ntpd -n -g -q
Start NTP as a non-daemon, force set the clock, and quit
ntpq -p timeserver
Query the time server for a list of peers
ntpdate timeserver
Synchronizes the clock with the specified time server
ntpdate -b timeserver
Brutally set the clock, without waiting for a slow adjusting
ntpdate -q timeserver
Query the time server without setting the clock
hwclock --show
hwclock -r
Show the hardware clock
hwclock --hctosys
hwclock -s
Set the system time from the hardware clock
hwclock --systohc
hwclock -w
Set the hardware clock from system time
hwclock --utc
Indicate that the hardware clock is kept in Coordinated Universal Time
hwclock --localtime
Indicate that the hardware clock is kept in local time
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
61/126
Syslog
Syslog
Syslog logging facility:
syslogd
Daemon logging events from user processes
klogd
Daemon logging events from kernel processes
/etc/syslog.conf
# facility.level
*.info;mail.none;authpriv.none
authpriv.*
mail.*
*.alert
*.emerg
local5.*
local7.*
Facility
Creator of the message
auth or security
authpriv
cron
daemon
kern
lpr
mail
mark (for syslog internal use)
news
syslog
user
uucp
local0 ... local7 (custom)
action
/var/log/messages
/var/log/secure
/var/log/maillog
root
*
@10.7.7.7
/var/log/boot.log
Level
Severity of the message
emerg or panic (highest)
alert
crit
err or error
warning or warn
notice
info
debug (lowest)
none
Action
Destination of the message
filename
message is written into a logfile
@hostname
message is sent to a logger
server (via UDP port 514)
user1,user2,user3
message is sent to users'
consoles
message is sent to all logged-in
users' consoles
(facility disabled)
= deprecated
logger -p auth.info "Message"
Send a message to syslogd with the specified facility and priority
man 3 syslog
Syslog manpage listing facilities and levels
logrotate
Rotate logs (by gzipping, renaming, and eventually deleting old logfiles) according to
/etc/logrotate.conf
tail -f /var/log/messages
less +F /var/log/messages
Print the end of the message log file, moving forward as the file grows (i.e. read logs
in real-time)
/var/log/messages
/var/log/syslog
/var/log/kern.log
System and kernel logfiles
journalctl
(Red Hat)
Query the systemd journal (replacement for /var/log/messages)
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
62/126
E-mail
Email
MTA
(Mail Transfer Agent)
SMTP server of sender
MUA
(Mail User Agent)
mailclient of sender
e.g. Alpine, Mutt
MTA
(Mail Transfer Agent)
remote host
e.g. Sendmail, Exim, Postfix, qmail
MDA
(Mail Delivery Agent)
mailserver of recipient
MUA
(Mail User Agent)
mailclient of recipient
e.g. Procmail, SpamAssassin
~/.forward
Mail address(es) to forward the user's mail to, or mail commands
/etc/aliases
/etc/mail/aliases
Aliases database for users on the local machine. Each line has syntax alias: user
/var/spool/mail/user
Inbox for user on the local machine
/var/log/mail.log
/var/log/maillog
(Debian)
(Red Hat)
Mail logs
Send a binary file to [email protected] (not recommended,
many mailclients will display the received attachment inline)
Send a binary file to [email protected] using the Mutt MUA
newaliases
sendmail -bi
Update the aliases database; must be run after any change to /etc/aliases
mailq
exim4 -bp
Examine the mail queue
exim4 -M messageID
Attempt delivery of message
exim4 -Mrm messageID
Remove a message from the mail queue
exim4 -Mvh messageID
See the headers of a message in the mail queue
exim4 -Mvb messageID
See the body of a message in the mail queue
exim4 -Mvc messageID
See a message in the mail queue
exim4 -qf domain
Force a queue run of all queued messages for a domain
exim4 -Rff domain
Attempt delivery of all queued messages for a domain
exim4 -bV
Show version and other info
Mailbox formats
Each mail folder is a single file, storing multiple email messages.
mbox
Advantages: universally supported, fast search inside a mail folder.
Disadvantages: issues with file locking, possible mailbox corruption.
$HOME/Mail/myfolder
Each mail folder is a directory, and contains the subdirectories /cur, /new, and /tmp.
Each email message is stored in its own file with an unique filename ID.
Maildir
The process that delivers an email message writes it to a file in the tmp/ directory,
and then moves it to new/. The moving is commonly done by hard linking the file to
new/ and then unlinking the file from tmp/, which guarantees that a MUA will not see
a partially written message as it never looks in tmp/.
When the MUA finds mail messages in new/ it moves them to cur/.
$HOME/Mail/myfolder/
Advantages: fast location/retrieval/deletion of a specific mail message, no file locking
needed, can be used with NFS.
Disadvantages: some filesystems may not efficiently handle a large number of small
files, searching text inside all mail messages is slow
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
63/126
SMTP
SMTP
SMTP commands
220 smtp.example.com ESMTP Postfix
HELO abc.example.org
250 Hello abc.example.org, glad to meet you
MAIL FROM: [email protected]
250 Ok
RCPT TO [email protected]
250 Ok
RCPT TO [email protected]
250 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
From: Alice <[email protected]>
To: Bob <[email protected]>
Cc: Eve <[email protected]>
Date: Wed, 13 August 2014 18:02:43 -0500
Subject: Test message
This is a test message.
.
250 OK id=1OjReS-0005kT-Jj
QUIT
221 Bye
HELO abc.example.org
Initiate the conversation and
identify client host to server
EHLO abc.example.org
Like HELO, but tell server to
use Extended SMTP
Specify mail sender
Specify mail recipient
DATA
Specify data to send. Ended
with a dot on a single line
QUIT
RSET
Disconnect
HELP
List all available commands
NOOP
Empty command
VRFY [email protected]
Verify the existence of an email address (this command
should not be implemented,
for security reasons)
EXPN mailinglist
Check mailing list membership
SMTP response codes
first digit
second digit
third digit
211
214
220
221
250
251
354
421
450
451
452
500
501
502
503
504
550
551
552
553
554
Command accepted, but not processed until client sends confirmation
Command successfully completed
Command accepted, but not processed until client sends more information
Command failed due to temporary errors
Command failed due to permanent errors
Syntax error or command not implemented
Informative response in reply to a request for information
Connection response in reply to a data transmission
Status response in reply to a mail transfer operation
Specifies further the response
System status or help reply
Help message
The server is ready
The server is ending the conversation
The requested action was completed
The specified user is not local, but the server will forward the mail message
Reply to the DATA command. After getting this, start sending the message body
The mail server will be shut down, try again later
The mailbox that you are trying to reach is busy, try again later
The requested action was not done. Some error occurred in the mail server
The requested action was not done. The mail server ran out of system storage
The last command contained a syntax error or the command line was too long
The parameters or arguments in the last command contained a syntax error
The last command is not implemented in the mail server
The last command was sent out of sequence
One of the parameters of the last command is not implemented by the server
The mailbox that you are trying to reach can't be found or you don't have access rights
The specified user is not local; part of message text will contain a forwarding address
The mailbox that you are trying to reach has run out of space, try again later
The mail address that you specified was not syntactically correct
The mail transaction has failed for unknown causes
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
64/126
Sendmail and Exim
SendmailandExim
Sendmail is distributed as a monolithic binary file.
It used to run SUID root, which caused many security problems; recent versions run SGID smmsp, the group that has write
access on the mail queue. Sendmail uses smrsh, a restricted shell, to run some external programs.
/etc/mail/submit.cf
Sendmail local mail transfer configuration file
/etc/mail/sendmail.cf
Sendmail MTA configuration file
The .cf configuration files are generated from edited .mc text files via the m4 command, e.g.
m4 /etc/mail/submit.mc > /etc/mail/submit.cf
/etc/mail/access.db
Access control file to allow or deny access to systems or users
/etc/mail/local-host-names.db
List of domains that must be considered as local accounts
/etc/mail/virtusertable.db
Map for local accounts, used to distribute incoming email
/etc/mail/mailertable.db
Routing table, used to dispatch emails from remote systems
/etc/mail/domaintable.db
Domain table, used for transitions from an old domain to a new one
/etc/mail/genericstable.db
Map for local accounts, used to specify a different sender for outgoing mail
/etc/mail/genericsdomain.db
Local FQDN
The .db database files are generated from edited text files via the makemap command, e.g.
makemap hash /etc/mail/access.db < /etc/mail/access
sendmail -bt
Run Sendmail in test mode
hoststat
Print statistics about remote hosts usage
purgestat
Clear statistics about remote host usage
mailstats
Print statistics about the mailserver
praliases
Display email aliases
Exim is a free MTA, distributed under open source GPL license.
/etc/exim.conf
/usr/local/etc/exim/configure
(FreeBSD)
Exim4 configuration file
exinext
Give the times of the next queue run
exigrep
Search through Exim logfiles
exicyclog
Rotate Exim logfiles
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
65/126
Postfix
Postfix
Postfix is a fast, secure, easy to configure, open source MTA intended as a replacement for Sendmail. It is implemented as
a set of small helper daemons, most of which run in a chroot jail with low privileges. The main ones are:
master
Postfix master daemon, always running; starts the other daemons when necessary
nqmgr
Queue manager for incoming and outgoing mail, always running
smtpd
SMTP daemon for incoming mail
smtp
SMTP daemon for outgoing mail
bounce
Manager of bounce messages
cleanup
Daemon that verifies the syntax of outgoing messages before they are handed to the queue manager
local
Daemon that handles local mail delivery
virtual
Daemon that handles mail delivery to virtual users
/var/spool/postfix/incoming
Incoming queue.
All new mail entering the Postfix queue is written here by the cleanup daemon.
Under normal conditions this queue is nearly empty
/var/spool/postfix/active
Active queue.
Contains messages ready to be sent. The queue manager places messages here
from the incoming queue as soon as they are available
/var/spool/postfix/deferred
Deferred queue.
A message is placed here when all its deliverable recipients are delivered, and for
some recipients delivery failed for a transient reason. The queue manager scans
this queue periodically and puts some messages into the active queue for a retry
/var/spool/postfix/bounce
Message delivery status report about why mail is bounced (non-delivered mail)
/var/spool/postfix/defer
Message delivery status report about why mail is delayed (non-delivered mail)
/var/spool/postfix/trace
Message delivery status report (delivered mail)
postfix reload
Reload configuration
postconf -e 'mydomain = example.org'
Edit a setting in the Postfix configuration
postconf -l
List supported mailbox lock methods
postconf -m
List supported database types
postconf -v
Increase logfile verbosity
postmap dbtype:textfile
Manage Postfix lookup tables, creating a hashed map file of database
type dbtype from textfile
postmap hash:/etc/postfix/transport
Regenerate the transport database
postalias
newaliases
Convert /etc/aliases into the aliases database file /etc/aliases.db
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
66/126
Postfix configuration
Postfixconfiguration
/etc/postfix/main.cf
Postfix configuration file
mydomain = example.org
This system's domain
myorigin = $mydomain
Domain from which all sent mail will appear to originate
myhostname = foobar.$mydomain
This system's hostname
inet_interfaces = all
Network interface addresses that this system receives mail on.
Value can also be localhost, all, or loopback-only
proxy_interfaces = 1.2.3.4
Network interface addresses that this system receives mail on
by means of a proxy or NAT unit
mynetworks = 10.3.3.0/24 !10.3.3.66
Networks the SMTP clients are allowed to connect from
mydestination = $myhostname localhost
$mydomain example.com
hash:/etc/postfix/otherdomains
Domains for which Postfix will accept received mail.
Value can also be a lookup database file e.g. a hashed map
relayhost = 10.6.6.6
Relay host to which Postfix should send all mail for delivery,
instead of consulting DNS MX records
relay_domains = $mydestination
Sources and destinations for which mail will be relayed.
Can be empty if Postfix is not intended to be a mail relay
virtual_alias_domains = virtualex.org
virtual_alias_maps = /etc/postfix/virtual
virtual_alias_domains = hash:/etc/postfix/virtual
Set up Postfix to handle mail for virtual domains too.
The /etc/postfix/virtual file is a hashed map, each line of
the file containing the virtual domain email address and the
destination real domain email address:
[email protected][email protected][email protected] kim.smith
@virtualex.org
root
The last line is a catch-all specifying that all other email
messages to the virtual domain are delivered to the root user
on the real domain
mailbox_command = /usr/bin/procmail
Use Procmail as MDA
or
A line beginning with whitespace or tab is a continuation of the previous line.
A line beginning with a # is a comment. The # is not a comment delimiter if it is not placed at the beginning of a line.
/etc/postfix/master.cf
# service
smtp
pickup
cleanup
qmgr
rewrite
bounce
defer
flush
smtp
showq
error
local
virtual
lmtp
service
type
private
unprivileged
chroot
type
inet
fifo
unix
fifo
unix
unix
unix
unix
unix
unix
unix
unix
unix
unix
private
n
n
n
n
n
n
-
unpriv
n
n
-
Postfix master daemon configuration file
chroot
n
n
n
wakeup
60
300
1000?
-
maxproc
1
0
1
0
0
0
-
command + args
smtpd
pickup
cleanup
qmgr
trivial-rewrite
bounce
bounce
flush
smtp
showq
error
local
virtual
lmtp
Name of the service
Transport mechanism used by the service
Whether the service is accessible only by Postfix daemons and not by the whole system. Default is yes
Whether the service is unprivileged i.e. not running as root. Default is yes
Whether the service is chrooted. Default is yes
wakeup
How often the service needs to be woken up by the master daemon. Default is never
maxproc
Max number of simultaneous processes providing the service. Default is 50
command
Command used to start the service
The - indicates that an option is set to its default value.
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
67/126
Procmail
Procmail
Procmail is a regex-based MDA whose main purpose is to preprocess and sort incoming email messages.
It is able to work both with the standard mbox format and the Maildir format.
To have all email processed by Procmail, the ~/.forward file may be edited to contain:
"|exec /usr/local/bin/procmail || exit 75"
/etc/procmailrc
System-wide recipes
~/.procmailrc
User's recipes
procmail -h
List all Procmail flags for recipes
formail
Utility for email filtering and editing
lockfile
Utility for mailbox file locking
mailstat
Utility for generation of reports from Procmail logs
/etc/procmailrc and ~/.procmailrc
Procmail recipes
PATH=$HOME/bin:/usr/bin:/bin:/usr/sbin:/sbin
MAILDIR=$HOME/Mail
DEFAULT=$MAILDIR/Inbox
LOGFILE=$HOME/.procmaillog
Common parameters, non specific to Procmail
:0h: or :0:
* ^From: .*(alice|bob)@foobar\.org
$DEFAULT
Flag: match headers (default) and use file locking (highly
recommended when writing to a file or a mailbox in mbox format)
Condition: match the header specifying the sender address
Destination: default mailfolder
:0:
* ^From: .*owner@listserv\.com
* ^Subject:.*Linux
$MAILDIR/Geekstuff1
Conditions: match sender address and subject headers
Destination: specified mailfolder, in mbox format
:0
* ^From: .*owner@listserv\.com
* ^Subject:.*Linux
$MAILDIR/Geekstuff2/
Flag: file locking not necessary because using Maildir format
Conditions: match sender address and subject headers
Destination: specified mailfolder, in Maildir format
# Blacklisted by SpamAssassin
:0
* ^X-Spam-Status: Yes
/dev/null
Flag: file locking not necessary because blackholing to /dev/null
Condition: match SpamAssassin's specific header
Destination: delete the message
:0B:
* hacking
$MAILDIR/Geekstuff
Flag: match body of message instead of headers
:0HB:
* hacking
$MAILDIR/Geekstuff
Flag: match either headers or body of message
:0:
* > 256000
| /root/myprogram
Condition: match messages larger than 256 Kb
Destination: pipe message through the specified program
:0fw
* ^From: .*@foobar\.org
| /root/myprogram
Flags: use the pipe as a filter (modifying the message), and tell
Procmail to wait that the filter finished processing the message
:0c
* ^Subject:.*administration
! [email protected]
Flag: copy the message and proceed with next recipe
Destination: forward to specified email address, and (as ordered
by the next recipe) save in the specified mailfolder
:0:
$MAILDIR/Forwarded
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
68/126
Courier POP configuration
CourierPOPconfiguration
The Courier MTA provides modules for ESMTP, IMAP, POP3, webmail, and mailing list services in a single framework.
The courier-authlib service must be launched first, then the desired mail service e.g. courier-imap for the IMAP service.
/usr/lib/courier-imap/etc/
or
/etc/courier/
imapd
Courier IMAP daemon configuration
imapd-ssl
Courier IMAPS daemon configuration
pop3d
Courier POP3 daemon configuration
pop3d-ssl
Courier POP3S daemon configuration
/usr/lib/courier-imap/share/
Directory for public and private keys
mkimapdcert
Generate a certificate for the IMAPS service
mkpop3dcert
Generate a certificate for the POP3 service
makealiases
Create system aliases in /usr/lib/courier/etc/aliases.dat , which is
made by processing a /usr/lib/courier/etc/aliases/system text file:
root
: postmaster
mailer-daemon : postmaster
MAILER-DAEMON : postmaster
uucp
: postmaster
postmaster
: admin
/usr/lib/courier-imap/etc/pop3d
Courier POP configuration file
ADDRESS=0
Address to listen on. 0 means all addresses
PORT=127.0.0.1.900,192.168.0.1.900
Port number connections are accepted on. Accept connections on
port 900 on IP addresses 127.0.0.1 and 192.168.0.1
POP3AUTH="LOGIN CRAM-MD5 CRAM-SHA1"
POP authentication advertising SASL (Simple Authentication and
Security Layer) capability, with CRAM-MD5 and CRAM-SHA1
POP3AUTH_TLS="LOGIN PLAIN"
Also advertise SASL PLAIN if SSL is enabled
MAXDAEMONS=40
Maximum number of POP3 servers started
MAXPERIP=4
Maximum number of connections to accept from the same IP address
PIDFILE=/var/run/courier/pop3d.pid
PID file
TCPDOPTS="-nodnslookup -noidentlookup"
Miscellaneous couriertcpd options that shouldn't be changed
LOGGEROPTS="-name=pop3d"
courierlogger options
POP3_PROXY=0
Enable or disable proxying
PROXY_HOSTNAME=myproxy
Override value from gethostname() when checking if a proxy
connection is required
DEFDOMAIN="@example.com"
Optional default domain. If the username does not contain the first
character of DEFDOMAIN, then it is appended to the username. If
DEFDOMAIN and DOMAINSEP are both set, then DEFDOMAIN is appended
only if the username does not contain any character from DOMAINSEP
POP3DSTART=YES
Flag intended to be read by the system startup script
MAILDIRPATH=Maildir
Name of the maildir directory
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
69/126
Courier IMAP configuration
CourierIMAPconfiguration
/usr/lib/courier-imap/etc/imapd
Courier IMAP configuration file
ADDRESS=0
Address to listen on. 0 means all addresses
PORT=127.0.0.1.900,192.168.0.1.900
Port number connections are accepted on. Accept connections on
port 900 on IP addresses 127.0.0.1 and 192.168.0.1
AUTHSERVICE143=imap
Authenticate using a different service parameter depending on the
connection's port. This only works with authentication modules that
use the service parameter, such as PAM
MAXDAEMONS=40
Maximum number of IMAP servers started
MAXPERIP=20
Maximum number of connections to accept from the same IP address
PIDFILE=/var/run/courier/imapd.pid
File where couriertcpd will save its process ID
TCPDOPTS="-nodnslookup -noidentlookup"
Miscellaneous couriertcpd options that shouldn't be changed
LOGGEROPTS="-name=imapd"
courierlogger options
DEFDOMAIN="@example.com"
Optional default domain. If the username does not contain the first
character of DEFDOMAIN, then it is appended to the username. If
DEFDOMAIN and DOMAINSEP are both set, then DEFDOMAIN is appended
only if the username does not contain any character from DOMAINSEP
IMAP_CAPABILITY="IMAP4rev1 UIDPLUS \
CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT \
THREAD=REFERENCES SORT QUOTA IDLE"
Specifies what most of the response should be to the CAPABILITY
command
IMAP_KEYWORDS=1
Enable or disable custom IMAP keywords. Possible values are:
0
disable keywords
1
enable keywords
2
enable keywords with a slower algorithm
IMAP_ACL=1
Enable or disable IMAP ACL extension
SMAP_CAPABILITY=SMAP1
Enable the experimental Simple Mail Access Protocol extensions
IMAP_PROXY=0
Enable or disable proxying
IMAP_PROXY_FOREIGN=0
Proxying to non-Courier servers. Re-sends the CAPABILITY command
after logging in to remote server. May not work with all IMAP clients
IMAP_IDLE_TIMEOUT=60
How often, in seconds, the server should poll for changes to the folder
while in IDLE mode
IMAP_CHECK_ALL_FOLDERS=0
Enable or disable server check for mail in every folder
IMAP_UMASK=022
Set the umask of the server process. This value is passed to the
umask command. This feature is mostly useful for shared folders,
where the file permissions of the messages may be important
IMAP_ULIMITD=131072
Set the upper limit of the size of the data segment of the server
process, in Kb. This value is passed to the ulimit -d command.
This feature is used as an additional safety check that should stop any
potential DoS attacks that exploit any kind of a memory leak to
exhaust all the available memory on the server
IMAP_USELOCKS=1
Enable or disable dot-locking to support concurrent multiple access to
the same folder. Strongly recommended when using shared folders
IMAP_SHAREDINDEXFILE=\
/etc/courier/shared/index
Index of all accessible folders.
Normally, this setting should not be changed
IMAP_TRASHFOLDERNAME=Trash
Name of the trash folder
IMAP_EMPTYTRASH=Trash:7,Sent:30
Purge folders i.e. delete all messages from the specified folders after
the specified number of days
IMAP_MOVE_EXPUNGE_TO_TRASH=0
Enable or disable moving expunged messages to the trash folder
(instead of straight deleting them)
HEADERFROM=X-IMAP-Sender
Make the return address, $SENDER, being saved in the
X-IMAP-Sender mail header. This header gets added to the sent
message (but not in the copy of the message saved in the folder)
MAILDIRPATH=Maildir
Name of the mail directory
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
70/126
Dovecot login
Dovecotlogin
Dovecot is an open source, security-hardened, fast and efficient IMAP and POP3 server.
By default it uses PAM authentication. The script mkcert.sh can be used to create self-signed SSL certificates.
/etc/dovecot.conf
Dovecot configuration file
base_dir = /var/run/dovecot/
Base directory where to store runtime data
protocols = imaps pop3s
Protocols to serve. If Dovecot should use dovecot-auth, this can be set
to none
listen = *, [::]
Network interfaces to accept connections on.
Here, listen to all IPv4 and IPv6 interfaces
disable_plaintext_auth = yes
Disable LOGIN command and all other plaintext authentications unless
SSL/TLS is used (LOGINDISABLED capability)
shutdown_clients = yes
Kill all IMAP and POP3 processes when Dovecot master process shuts
down. If set to no, Dovecot can be upgraded without forcing existing
client connections to close
log_path = /dev/stderr
Log file to use for error messages, instead of sending them to syslog.
Here, log to stderr
info_log_path = /dev/stderr
Log file to use for informational and debug messages. Default value is
the same as log_path
syslog_facility = mail
Syslog facility to use if logging to syslog
login_dir = /var/run/dovecot/login
Directory where the authentication process places authentication UNIX
sockets, to which the login process needs to be able to connect
login_chroot = yes
Chroot login process to the login_dir
login_user = dovecot
User to use for the login process. This user is used to control access for
authentication process, and not to access mail messages
login_process_size = 64
Maximum login process size, in Mb
login_process_per_connection = yes
If yes, each login is processed in its own process (more secure); if no,
each login process processes multiple connections (faster)
login_processes_count = 3
Number of login processes to keep for listening for new connections
login_max_processes_count = 128
Maximum number of login processes to create
login_max_connections = 256
Maximum number of connections allowed per each login process.
This setting is used only if login_process_per_connection = no; once
the limit is reached, the process notifies master so that it can create a
new login process
login_greeting = Dovecot ready.
Greeting message for clients
login_trusted_networks = \
10.7.7.0/24 10.8.8.0/24
Trusted network ranges (usually IMAP proxy servers).
Connections from these IP addresses are allowed to override their IP
addresses and ports, for logging and authentication checks.
disable_plaintext_auth is also ignored for these networks
mbox_read_locks = fcntl
mbox_write_locks = dotlock fcntl
Locking methods to use for locking mailboxes in mbox format.
Possible values are:
dotlock
Create mailbox.lock file; oldest and NSF-safe method
dotlock_try
Same as dotlock, but skip if failing
fcntl
Recommended; works with NFS too if lockd is used
flock
May not exist in all systems; doesn't work with NFS
lockf
May not exist in all systems; doesn't work with NFS
maildir_stat_dirs = no
Option for mailboxes in Maildir format. If no (default), the LIST
command returns all entries in the mail directory beginning with a dot.
If yes, returns only entries which are directories
dbox_rotate_size = 2048
dbox_rotate_min_size = 16
Maximum and minimum file size, in Kb, of a mailbox in dbox format
until it is rotated
!include /etc/dovecot/conf.d/*.conf
Include configuration file
!include_try /etc/dovecot/extra.conf
Include optional configuration file, do not give error if file not found
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
71/126
Dovecot mailboxes
Dovecotmailboxes
/etc/dovecot.conf
Dovecot configuration file
mail_location = \
mbox:~/mail:INBOX=/var/spool/mail/%u
or
mail_location = maildir:~/Maildir
Mailbox location, in mbox or Maildir format. Variables:
%u
username
%n
user part in user@domain, same as %u if there is no domain
%d
domain part in user@domain, empty if there is no domain
%h
home directory
namespace shared {
Definition of a shared namespace, for accessing other users' mailboxes
that have been shared.
Private namespaces are for users' personal emails.
Public namespaces are for shared mailboxes managed by root user
separator = /
Hierarchy separator to use. Should be the same for all namespaces; it
depends on the underlying mail storage format
prefix = shared/%%u/
Prefix required to access this namespace; must be different for each.
Here, mailboxes are visible under shared/user@domain/ ; the variables
%%n, %%d and %%u are expanded to the destination user
location = maildir:%%h/Maildir:\
INDEX=~/Maildir/shared/%%u
Mailbox location for other users' mailboxes; it is in the same format as
mail_location which is also the default for it.
%variable and ~/ expand to the logged in user's data;
%%variable expands to the destination user's data
inbox = no
There can be only one INBOX, and this setting defines which
namespace has it
hidden = no
Define whether the namespace is hidden i.e. not advertised to clients
via NAMESPACE extension
subscriptions = no
Namespace handles its own subscriptions; if set to no, the parent
namespace handles them and Dovecot uses the default namespace for
saving subscriptions. If prefix is empty, this should be set to yes
list = children
Show the mailboxes under this namespace with LIST command,
making the namespace visible for clients that do not support the
NAMESPACE extension.
Here, lists child mailboxes but hide the namespace prefix; list the
namespace only if there are visible shared mailboxes
}
mail_uid = 666
mail_gid = 666
UID and GID used to access mail messages
mail_privileged_group = mail
Group to enable temporarily for privileged operations; currently this is
used only with INBOX when its initial creation or a dotlocking fails
mail_access_groups = tmpmail
Supplementary groups to grant access to for mail processes; typically
these are used to set up access to shared mailboxes
lock_method = fcntl
Locking method for index files. Can be fcntl, flock, or dotlock
first_valid_uid = 500
last_valid_uid = 0
Valid UID range for users; default is 500 and above. This makes sure
that users cannot login as daemons or other system users.
Denying root login is hardcoded to Dovecot and cannot be bypassed
first_valid_gid = 1
last_valid_gid = 0
Valid GID range for users; default is non-root/wheel. Users having
non-valid primary GID are not allowed to login
max_mail_processes = 512
Maximum number of running mail processes. When this limit is
reached, new users are not allowed to login
mail_process_size = 256
Maximum mail process size, in Mb
valid_chroot_dirs =
List of directories under which chrooting is allowed for mail processes
mail_chroot =
Default chroot directory for mail processes. Usually not needed as
Dovecot does not allow users to access files outside their mail directory
mailbox_idle_check_interval = 30
When IDLE command is running, mailbox is checked once in a while to
see if there are any new mails or other changes. This setting defines
the minimum time to wait between these checks, in seconds
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
72/126
Dovecot POP and IMAP
DovecotPOPandIMAP
/etc/dovecot.conf
Dovecot configuration file
protocol pop3 {
Block with options for the POP3 protocol
listen = *:110
Network interfaces to accept POP3 connections on
login_executable = /usr/libexec/dovecot/pop3-login
Location of the POP3 login executable
mail_executable = /usr/libexec/dovecot/pop3
Location of the POP3 mail executable
pop3_no_flag_updates = no
If set to no, do not try to set mail messages non-recent
or seen with POP3 sessions, to reduce disk I/O.
With Maildir format do not move files from new/ to cur/,
with mbox format do not write Status- headers
pop3_lock_session = no
Whether to keep the mailbox locked for the whole POP3
session
pop3_uidl_format = %08Xu%08Xv
POP3 UIDL (Unique Mail Identifier) format to use
}
protocol imap {
Block with options for the IMAP protocol
listen = *:143
ssl_listen = *:993
Network interfaces to accept IMAP and IMAPS
connections on
login_executable = /usr/libexec/dovecot/imap-login
Location of the IMAP login executable
mail_executable = /usr/libexec/dovecot/imap
Location of the IMAP mail executable
mail_max_userip_connections = 10
Maximum number of IMAP connections allowed for a
user from each IP address
imap_idle_notify_interval = 120
How many seconds to wait between "OK Still here"
notifications when client is IDLE
}
ssl = yes
SSL/TLS support.
Possible values are yes, no, required
ssl_cert_file = /etc/ssl/certs/dovecot-cert.pem
Location of the SSL certificate
ssl_key_file = /etc/ssl/private/dovecot-key.pem
Location of private key
ssl_key_password = b1gs3cr3t
Password of private key, if it is password-protected.
Since /etc/dovecot.conf is usually world-readable, it is
better to place this setting into a root-owned 0600 file
instead and include it via the setting
!include_try /etc/dovecot/dovecot-passwd.conf .
Alternatively, Dovecot can be started with
dovecot -p b1gs3cr3t
ssl_ca_file = /etc/dovecot/cafile.pem
List of trusted SSL certificate authorities; the file
contains the CA certificates followed by the CRLs
ssl_verify_client_cert = yes
Request client to send a certificate
ssl_cipher_list = ALL:!LOW:!SSLv2
List of SSL ciphers to use
verbose_ssl = yes
Show protocol level SSL errors
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
73/126
Dovecot authentication
Dovecotauthentication
/etc/dovecot.conf
Dovecot configuration file
auth_executable = /usr/libexec/dovecot/dovecot-auth
Location of the authentication executable
auth_process_size = 256
Max authentication process size, in Mb
auth_username_chars = abcde ... VWXYZ01234567890.-_@
List of allowed characters in the username. If the
username entered by user contains a character not listed
in here, the login automatically fails. This is to prevent
an user exploiting any potential quote escaping
vulnerabilities with SQL/LDAP databases
auth_realms =
List of realms for SASL authentication mechanisms that
need them. If empty, multiple realms are not supported
auth_default_realm = example.org
Default realm/domain to use if none was specified
auth_anonymous_username = anonymous
Username to assign to users logging in with ANONYMOUS
SASL mechanism
auth_verbose = no
Whether to log unsuccessful authentication attempts and
the reasons why they failed
auth_debug = no
Whether to enable more verbose logging (e.g. SQL
queries) for debugging purposes
auth_failure_delay = 2
Delay before replying to failed authentications, in seconds
auth default {
mechanisms = plain login cram-md5
Accepted authentication mechanisms
passdb passwd-file {
args = /etc/dovecot.deny
deny = yes
}
Deny login to the users listed in /etc/dovecot.deny (file
contains one user per line)
passdb pam {
args = cache_key=%u%r dovecot
}
PAM authentication block.
Enable authentication matching (username and remote IP
address) for PAM.
passdb passwd {
blocking = yes
args =
}
System users e.g. NSS or /etc/passwd
passdb shadow {
blocking = yes
args =
}
Shadow passwords for system users e.g. NSS or
/etc/passwd
passdb bsdauth {
cache_key = %u
args =
}
PAM-like authentication for OpenBSD
passdb sql {
args = /etc/dovecot/dovecot-sql.conf
}
SQL database
passdb ldap {
args = /etc/dovecot/dovecot-ldap.conf
}
LDAP database
socket listen {
master {
path = /var/run/dovecot/auth-master
mode = 0600
user =
group =
}
client {
path = /var/run/dovecot/auth-client
mode = 0660
}
}
Export the authentication interface to other programs.
Master socket provides access to userdb information; it is
typically used to give Dovecot's local delivery agent
access to userdb so it can find mailbox locations. The
default user/group is the one who started dovecot-auth
(i.e. root).
The client socket is generally safe to export to everyone.
Typical use is to export it to the SMTP server so it can do
SMTP AUTH lookups using it
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
74/126
FTP
FTP
Active mode (default)
1. Client connects to FTP server on port 21 (control channel) and sends second unprivileged port number
2. Server acknowledges
3. Server connects from port 20 (data channel) to client's second unprivileged port number
4. Client acknowledges
Passive mode (more protocol-compliant, because it is the client that initiates the connection)
1. Client connects to FTP server on port 21 and requests passive mode via the PASV command
2. Server acknowledges and sends unprivileged port number via the PORT command
3. Client connects to server's unprivileged port number
4. Server acknowledges
Very Secure FTP is a hardened and high-performance FTP implementation.
The vsftpd daemon operates with multiple processes that run as a non-privileged user in a chrooted jail.
/etc/vsftpd/vsftpd.conf
listen=NO
Run vsftpd in standalone mode (i.e. not via inetd)?
local_enable=YES
Allow local system users (i.e. in /etc/passwd) to log in?
chroot_local_user=YES
Chroot local users in their home directory?
write_enable=YES
Allow FTP commands that write on the filesystem (i.e. STOR,
DELE, RNFR, RNTO, MKD, RMD, APPE and SITE)?
anonymous_enable=YES
Allow anonymous logins? If yes, anonymous and ftp are
accepted as logins
anon_root=/var/ftp/pub
After anonymous login, go to directory /var/ftp/pub
anon_upload_enable=YES
Allow anonymous uploads?
chown_uploads=YES
Change ownership of anonymously uploaded files?
chown_username=ftp
Change ownership of anonymously uploaded files to user ftp
anon_world_readable_only=NO
Allow anonymous users to only download files which are
world readable?
ssl_enable=YES
Enable SSL?
force_local_data_ssl=NO
Encrypt local data?
force_local_logins_ssl=YES
Force encrypted authentication?
allow_anon_ssl=YES
Allow anonymous users to use SSL?
ssl_tlsv1=YES
ssl_tlsv2=NO
ssl_tlsv3=NO
Versions of SSL/TLS to allow
rsa_cert_file=/etc/pki/tls/certs/vsftpd.pem
Location of certificate file
rsa_private_key_file=/etc/pki/tls/certs/vsftpd.pem
Location of private key file
Pure-FTP is a free, easy-to-use FTP server.
pure-ftpd
Pure-FTP daemon
pure-ftpwho
Show clients connected to the Pure-FTP server
pure-mrtginfo
Show connections to the Pure-FTP server as a MRTG graph
pure-statsdecode
Show Pure-FTP log data
pure-pw
Manage Pure-FTP virtual accounts
pure-pwconvert
Convert the system user database to a Pure-FTP virtual accounts database
pure-quotacheck
Manage Pure-FTP quota database
pure-uploadscript
Run a command on the Pure-FTP server to process an uploaded file
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
75/126
CUPS
CUPS
cupsd
CUPS (Common Unix Printing System) daemon.
Administration of printers is done via web interface on http://localhost:631
/etc/cups/cupsd.conf
CUPS configuration file
/etc/cups/printers.conf
Database of available local CUPS printers
/etc/printcap
Database of printer capabilities, for old printing applications
/var/spool/cups/
Printer spooler for data awaiting to be printed
/var/log/cups/error_log
CUPS error log
/var/log/cups/page_log
Information about printed pages
/etc/init.d/cupsys start
Start the CUPS service
gnome-cups-manager
Run the CUPS Manager graphical application
cupsenable printer0
Enable a CUPS printer
cupsdisable printer0
Disable a CUPS printer
cupsaccept printer0
Accept a job sent on a printer queue
cupsreject -r "Rejected" printer0
Reject a job sent on a printer queue, with an informational message
cupstestppd LEXC510.ppd
Test the conformance of a PPD file to the format specification
cupsaddsmb printer0
Export a printer to SAMBA (for use with Windows clients)
cups-config --cflags
Show the necessary compiler options
cups-config --datadir
Show the default CUPS data directory
cups-config --ldflags
Show the necessary linker options
cups-config --libs
Show the necessary libraries to link to
cups-config --serverbin
Show the default CUPS binaries directory that stores filters and backends
cups-config --serverroot
Show the default CUPS configuration file directory
lpstat
Show CUPS status information
lpadmin
Administer CUPS printers
lpadmin -p printer0 -P LEXC750.ppd
Specify a PPD (Adobe PostScript Printer Description) file to associate to a printer
lp -d printer0 file
Print a file on the specified printer
lpq
View the default print queue
lpq -P printer0
View a specific print queue
lpq jdoe
View the print queue of a specific user
lprm -P printer0 5
Delete a specific job from a printer queue
lprm -P printer0 jdoe
Delete all jobs from a specific user from a printer queue
lprm -P printer0 -
Delete all jobs from a printer queue
lpc
Manage print queues
a2ps file.txt
Convert a text file to PostScript
ps2pdf file.ps
Convert a file from PostScript to PDF
mpage file.ps
Print a PostScript document on multiple pages per sheet on a PostScript printer
gv file.ps
View a PostScript document (the gv software is derived from GhostView)
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
76/126
IP addressing
IPaddressing
IPv4
193.22.33.44
IPv6
32-bit
divided in 4 octets
(dotted-quad)
2130:0000:0000:0000:0007:0040:15bc:235f
4 billion addresses
2130::7:40:15bc:235f
128-bit
divided in 8 16-bit sections
2130:0:0:0:7:40:15bc:235f
3 1038 addresses
IPv4 classful addressing (assigned by IANA)
Classful
Private
Reserved
Address range
Prefix
Number of addresses
Reference
Class A (Unicast)
0.0.0.0 127.255.255.255
first octet: 0XXX XXXX
/8
128 networks
16,777,216 addresses
RFC 791
Class B (Unicast)
128.0.0.0 191.255.255.255
first octet: 10XX XXXX
/16
16,384 networks
65,536 addresses
RFC 791
Class C (Unicast)
192.0.0.0 223.255.255.255
first octet: 110X XXXX
/24
2,097,152 networks
256 addresses
RFC 791
Class D (Multicast)
224.0.0.0 239.255.255.255
first octet: 1110 XXXX
/4
268,435,456
RFC 3171
Class E (Experimental)
240.0.0.0 255.255.255.255
first octet: 1111 XXXX
/4
268,435,456
RFC 1166
Private Class A
10.0.0.0 10.255.255.255
10.0.0.0/8
16,777,216
RFC 1918
Private Class B
172.16.0.0 172.31.255.255
172.16.0.0/12
1,048,576
RFC 1918
Private Class C
192.168.0.0 192.168.255.255
192.168.0.0/16
65,536
RFC 1918
Source
0.0.0.0 0.255.255.255
0.0.0.0/8
16,777,216
RFC 1700
Loopback
127.0.0.0 127.255.255.255
127.0.0.0/8
16,777,216
RFC 1700
Autoconf
169.254.0.0 169.254.255.255
169.254.0.0/16
65,536
RFC 3330
TEST-NET
192.0.2.0 192.0.2.255
192.0.2.0/24
256
RFC 3330
6to4 relay anycast
192.88.99.0 192.88.99.255
192.88.99.0/24
256
RFC 3068
Device benchmarks
198.18.0.0 198.19.255.255
198.18.0.0/15
131,072
RFC 2544
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
77/126
Subnetting
Subnetting
VLSM chart - Last octet subnetting (CIDR notation)
Prefix:
/24
Netmask:
.0
00000000
1 subnet
254 hosts each
254 total hosts
Prefix:
/25
Netmask: .128
10000000
2 subnets
126 hosts each
252 total hosts
Prefix:
/26
Netmask: .192
11000000
4 subnets
62 hosts each
248 total hosts
Prefix:
/27
Netmask: .224
11100000
8 subnets
30 hosts each
240 total hosts
Prefix:
/28
Netmask: .240
11110000
16 subnets
14 hosts each
224 total hosts
Prefix:
/29
Netmask: .248
11111000
32 subnets
6 hosts each
192 total hosts
Prefix:
/30
Netmask: .252
11111100
64 subnets
2 hosts each
128 total hosts
.0
.4
.8
.12
.16
.20
.24
.28
.32
.36
.40
.44
.48
.52
.56
.60
.64
.68
.72
.76
.80
.84
.88
.92
.96
.100
.104
.108
.112
.116
.120
.124
.128
.132
.136
.140
.144
.148
.152
.156
.160
.164
.168
.172
.176
.180
.184
.188
.192
.196
.200
.204
.208
.212
.216
.220
.224
.228
.232
.236
.240
.244
.248
.252
.0
.0
.8
.0
.16
.16
.24
.0
.32
.32
.40
.32
.48
.48
.56
.0
.64
.64
.72
.64
.80
.80
.88
.64
.96
.96
.104
.96
.112
.112
.120
.0
.128
.128
.136
.128
.144
.144
.152
.128
.160
.160
.168
.160
.176
.176
.184
.128
.192
.192
.200
.192
.208
.208
.216
.192
.224
.224
.232
.224
.240
.240
.248
Each block of a column identifies a subnet, whose range of valid hosts addresses is [network address +1 broadcast address -1] inclusive.
The network address of the subnet is the number shown inside a block.
The broadcast address of the subnet is the network address of the block underneath -1 or, for the bottom block, .255.
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
78/126
Network services
Networkservices
Most common well-known ports
Port number
Service
20
TCP
FTP (data)
21
TCP
FTP (control)
22
TCP
SSH
23
TCP
Telnet
25
TCP
SMTP
53
TCP/UDP
DNS
67
UDP
BOOTP/DHCP (server)
68
UDP
BOOTP/DHCP (client)
80
TCP
HTTP
110
TCP
POP3
119
TCP
NNTP
139
TCP/UDP
Microsoft NetBIOS
143
TCP
IMAP
161
UDP
SNMP
443
TCP
HTTPS (HTTP over SSL/TLS)
465
TCP
SMTP over SSL
993
TCP
IMAPS (IMAP over SSL)
995
TCP
POP3S (POP3 over SSL)
1-1023: privileged ports, used server-side
1024-65535: unprivileged ports, used client-side
The full list of well-known ports is in /etc/services
Protocol stack models
ISO/OSI
7
Application
Presentation
TCP/IP
Application
Session
Transport
Transport
Network
Internet
Data Link
Physical
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Network Access
e.g. HTTP, SMTP, POP, SSH
e.g. TCP, UDP
e.g. IPv4, IPv6, ICMP
e.g. Ethernet, Wi-Fi, PPP
Daniele Raffo
www.crans.org/~raffo
79/126
Network configuration commands
Networkconfigurationcommands
ip addr show
ifconfig -a
Display configuration of all network
interfaces
ip link show eth0
ifconfig eth0
Display configuration of eth0
ip addr add dev eth0 10.1.1.1/8
ifconfig eth0 10.1.1.1 netmask 255.0.0.0 broadcast 10.255.255.255
Configure IP address of eth0
ifconfig eth0 hw ether 45:67:89:ab:cd:ef
Configure MAC address of eth0
ip link set eth0 up
ifconfig eth0 up
ifup eth0
Activate eth0
ip link set eth0 down
ifconfig eth0 down
ifdown eth0
Shut down eth0
dhclient eth0
pump
dhcpcd eth0 (SUSE)
Request an IP address via DHCP
ip neigh
arp -a
Show the ARP cache table
ip neigh show 10.1.0.6
arp 10.1.0.6
Show the ARP cache entry for a host
ip neigh add 10.1.0.7 lladdr 01:23:45:67:89:ab dev eth0
arp -s 10.1.0.7 01:23:45:67:89:ab
Add a new ARP entry for a host
ip neigh del 10.1.0.7 dev eth0
arp -d 10.1.0.7
Delete a ARP entry
ip neigh flush all
Delete the ARP table for all interfaces
iwlist wlan0 scan
List all wireless devices in range, with their quality of signal and other information
iwlist wlan0 freq
Display transmission frequency settings
iwlist wlan0 rate
Display transmission speed settings
iwlist wlan0 txpower
Display transmission power settings
iwlist wlan0 key
Display encryption settings
iwgetid wlan0 option
Print NWID, ESSID, AP/Cell address or other information about the wireless network
that is currently in use
iwconfig wlan0
Display configuration of wireless interface wlan0
iwconfig wlan0 option
Configure wireless interface wlan0
hostname
Get the hostname (stored in /etc/hostname)
hostname -f
Get the FQDN (Fully Qualified Domain Name)
hostname mylinuxbox
hostnamectl set-hostname --static "mylinuxbox"
/etc/init.d/networking
/etc/init.d/network
(Red Hat)
Set the hostname
Initialize network services
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
80/126
Network tools
Networktools
dig example.org
Perform a DNS lookup for the specified domain or hostname.
Returns information in BIND zone file syntax; uses an internal
resolver and hence does not honor /etc/resolv.conf
dig @10.7.7.7 -t MX example.org
Perform a DNS lookup for the MX record of the domain
example.org, querying nameserver 10.7.7.7
dig -x 203.0.113.1
Perform a reverse DNS lookup for the IP address 203.0.113.1
host example.org
Perform a DNS lookup for the specified domain or hostname.
Does honor /etc/resolv.conf
host example.org 10.7.7.7
Perform a DNS lookup for the domain example.org, querying
nameserver 10.7.7.7
host 192.168.13.13
Perform a reverse DNS lookup for the IP address 192.168.13.13
nslookup example.org
(deprecated)
Perform a DNS lookup for the specified domain or hostname
whois example.org
Query the WHOIS service for an Internet resource, usually a
domain name
ping 10.0.0.2
Test if a remote host can be reached and measure the round-trip
time to it (by sending an ICMP ECHO_REQUEST datagram and
expecting an ICMP ECHO_RESPONSE)
fping -a 10.0.0.2 10.0.0.7 10.0.0.8
Ping multiple hosts in parallel and report which ones are alive
traceroute 10.0.0.3
Print the route, hop by hop, packets trace to a remote host
(by sending a sequence of ICMP ECHO_REQUEST datagrams with
increasing TTL values, starting with TTL=1)
tracepath 10.0.0.3
Simpler traceroute
mtr 10.0.0.3
traceroute and ping combined
telnet 10.0.0.4 23
Establish a telnet connection to the specified host and port
(if port is omitted, use default port 23)
ftp 10.0.0.5
Establish an interactive FTP connection with host 10.0.0.5
wget -no-clobber -html-extension \
--page-requisites --convert-links \
--recursive --domains example.org \
--no-parent www.example.org/foobar
Download a whole website www.example.org/foobar
nc
netcat
Netcat, the Swiss Army knife of networking, a very flexible generic
TCP/IP client/server
(SUSE)
nc -l -p 25
Listen for connections on port 25 (i.e. mimic a SMTP server).
Send any input on stdin to the connected client and dump on
stdout any data received from the client
nc 10.0.0.7 389 < myfile
Push the content of a file to port 389 on remote host 10.0.0.7
echo "GET / HTTP/1.0\r\n\r\n" | nc 10.0.0.7 80
Connect to web server 10.0.0.7 and issue a HTTP GET command
while true; \
do nc -l -p 80 -q 1 < mypage.html; done
Start a web server, serving the specified HTML page to any
connected client
nc -z 10.0.0.7 22
Scan for a listening SSH daemon on remote host 10.0.0.7
nc -v -n -z -w1 -r 10.0.0.7 1-1023
Run a TCP port scan against remote host 10.0.0.7.
Probe randomly all privileged ports with a 1-second timeout,
without resolving service names, and with verbose output
echo "" | nc -v -n -w1 10.0.0.7 1-1023
Retrieve the greeting banner of any network service that might be
running on remote host 10.0.0.7
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
81/126
Network monitoring
Networkmonitoring
netstat
Display network connections
netstat -tcp
netstat -t
Display active TCP connections
netstat -l
Display only listening sockets
netstat -a
Display all listening and non-listening sockets
netstat -n
Display network connections, without resolving hostnames or portnames
netstat -p
Display network connections, with PID and name of program to which
each socket belongs
netstat -i
Display network interfaces
netstat -s
Display protocol statistics
netstat -r
Display kernel routing tables (equivalent to route -e)
netstat -c
Display network connections continuously
ss
Display socket statistics (similar to netstat)
ss -t -a
Display all TCP sockets
nmap 10.0.0.1
nmap -sS 10.0.0.1
Scan for open ports (TCP SYN scan) on remote host 10.0.0.1
nmap -sP 10.0.0.1
Do a ping sweep (ICMP ECHO probes) on remote host
nmap -sU 10.0.0.1
Scan UDP ports on remote host
nmap -sV 10.0.0.1
Do a service and version scan on open ports
nmap -p 1-65535 10.0.0.1
Scan all ports (1-65535) on remote host, not only the common ports
nmap -O 10.0.0.1
Find which operating system is running on remote host (OS fingerprinting)
tcpdump -ni eth0
Sniff all network traffic on interface eth0, suppressing DNS resolution
tcpdump ip host 10.0.0.2 tcp port 25
Sniff network packets on TCP port 25 from and to 10.0.0.2
tcpdump ether host '45:67:89:ab:cd:ef'
Sniff traffic from and to the network interface with that MAC address
tcpdump 'src host 10.0.0.2 and \
(tcp port 80 or tcp port 443)'
Sniff HTTP and HTTPS traffic having as source host 10.0.0.2
tcpdump -ni eth0 not port 22
Sniff all traffic on eth0 except that belonging to the SSH connection
tcpdump -vvnn -i eth0 arp
Sniff ARP traffic on eth0, on maximum verbosity level, without converting
host IP addresses and port numbers to names
tcpdump ip host 10.0.0.2 and \
not 10.0.0.9
Sniff IP traffic between 10.0.0.2 and any other host except 10.0.0.9
iptraf
IP LAN monitor (ncurses UI)
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
82/126
Network system files
Networksystemfiles
/sys/class/net
List of all network interfaces in the system
/etc/services
List of service TCP/UDP port numbers
/etc/protocols
List of available protocols
/etc/ethers
ARP mappings (MAC to IP addresses)
/etc/inetd.conf
Configuration file for inetd, the super-server Internet daemon
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
83/126
Network configuration files
Networkconfigurationfiles
/etc/hosts
Mappings between IP addresses and hostnames, for name resolution
127.0.0.1
10.2.3.4
/etc/nsswitch.conf
localhost.localdomain
myhost.domain.org
localhost
myhost
Sources that must be used by various system library lookup functions
passwd:
shadow:
group:
hosts:
/etc/host.conf
files
files
files
files
nisplus nis
nisplus nis
nisplus nis
dns nisplus nis
Sources for name resolution, for systems before glibc2.
Obsolete, superseded by /etc/nsswitch.conf
order hosts,bind
multi on
/etc/resolv.conf
Specification of domain names that must be appended to bare hostnames
and of DNS servers that will be used for name resolution
search domain1.org domain2.org
nameserver 192.168.3.3
nameserver 192.168.4.4
/etc/networks
Mappings between network addresses and names
loopback
mylan
/etc/network/interfaces
/etc/hostname
/etc/sysconfig/network
127.0.0.0
10.2.3.0
List and configuration of all network interfaces
Hostname of the local machine
(Red Hat)
/etc/sysconfig/network-scripts/ifcfg-eth0
(Red Hat)
Configuration file for network interface eth0.
This file is read by the ifup and ifdown scripts
DEVICE=eth0
TYPE=Ethernet
HWADDR=AA:BB:CC:DD:EE:FF
BOOTPROTO=none
ONBOOT=yes
NM_CONTROLLED=no
IPADDR=10.2.3.4
NETMASK=255.255.255.0
GATEWAY=10.2.3.254
DNS1=8.8.8.8
DNS2=4.4.4.4
USERCTL=no
/etc/sysconfig/network-scripts/ifcfg-eth0:0
/etc/sysconfig/network-scripts/ifcfg-eth0:1
/etc/sysconfig/network-scripts/ifcfg-eth0:2
/etc/sysconfig/network-scripts/route-eth0
(Red Hat)
(Red Hat)
Configuration files for different interface aliases.
This makes possible to bind multiple IP addresses to a
single NIC
Static route configuration for eth0
ADDRESS=10.2.3.4
NETMASK=255.255.255.0
GATEWAY=10.2.3.254
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
84/126
TCP Wrapper
TCPWrapper
/etc/hosts.allow
/etc/hosts.deny
Host access control files used by the TCP Wrapper system.
Each file contains zero or more daemon:client lines. The first matching line is considered.
Access is granted when a daemon:client pair matches an entry in /etc/hosts.allow .
Otherwise, access is denied when a daemon:client pair matches an entry in /etc/hosts.deny .
Otherwise, access is granted.
/etc/hosts.allow and /etc/hosts.deny lines syntax
ALL: ALL
All services to all hosts
ALL: .example.edu
All services to all hosts of the example.edu domain
ALL: .example.edu EXCEPT host1.example.edu
All services to all hosts of example.edu, except host1
in.fingerd: .example.com
Finger service to all hosts of example.com
in.tftpd: LOCAL
TFTP to hosts of the local domain only
sshd: 10.0.0.3 10.0.0.4 10.1.1.0/24
SSH to the hosts and network specified
sshd: 10.0.1.0/24
SSH to 10.0.1.0/24
sshd: 10.0.1.
SSH to 10.0.1.0/24
sshd: 10.0.1.0/255.255.255.0
SSH to 10.0.1.0/24
in.tftpd: ALL: spawn (/safe_dir/safe_finger \
-l @%h | /bin/mail -s %d-%h root) &
Send a finger probe to hosts attempting TFTP and
notify root user via email
portmap: ALL: (echo Illegal RPC request \
from %h | /bin/mail root) &
When a client attempts a RPC request via the
portmapper (NFS access), echo a message to the
terminal and notify root user via email
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
85/126
Routing
Routing
route -en
Kernel IP routing table
Destination
Gateway
192.168.3.0
0.0.0.0
0.0.0.0
192.168.3.1
Gateway
Flags
Genmask
255.255.255.0
0.0.0.0
host
gateway name
no gateway
rejected route
route is up
use gateway
target is host
rejected route
dynamically installed by daemon
modified from routing daemon
reinstate route for dynamic routing
Flags Metric Ref
U
0
0
UG
0
0
Use Iface
0 eth0
0 eth0
ip route
route -en
route -F
netstat -rn
Display IP routing table
ip route show cache
route -C
Display kernel routing cache
ip route add default via 10.1.1.254
route add default gw 10.1.1.254
Add a default gateway
ip route add 10.2.0.1 dev eth0
ip route add 10.2.0.1 via 10.2.0.254
route add -host 10.2.0.1 gw 10.2.0.254
Add a route for a host
ip route add 10.2.0.0/16 via 10.2.0.254
route add -net 10.2.0.0 netmask 255.255.0.0 gw 10.2.0.254
Add a route for a network
ip route delete 10.2.0.1 dev eth0
route del -host 10.2.0.1 gw 10.2.0.254
Delete a route for a host
ip route flush all
Delete the routing table for all interfaces
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
86/126
iptables
iptables
The Netfilter framework provides firewalling capabilities in Linux. It is implemented by the user-space application programs
iptables for IPv4 (which replaced ipchains, which itself replaced ipfwadm) and ip6tables for IPv6.
In Red Hat the iptables service is provided by the firewalld daemon.
Tables contain sets of chains, which contain sets of rules.
The filter table contains chains INPUT, FORWARD, OUTPUT (built-in chains).
The NAT table contains chains PREROUTING, OUTPUT, POSTROUTING.
The mangle table contains chains PREROUTING, OUTPUT.
When a packet enters the system, it is handed to the INPUT chain. If the destination is local, it is processed; if the
destination is not local and IP forwarding is enabled, the packet is handed to the FORWARD chain, otherwise it is dropped.
An outgoing packet generated by the system will go through the OUTPUT chain.
If NAT is in use, an incoming packet will pass at first through the PREROUTING chain, and an outgoing packet will pass last
through the POSTROUTING chain.
iptables -A INPUT -s 10.0.0.6 -j ACCEPT
Add a rule to accept all packets from 10.0.0.6
iptables -A INPUT -s 10.0.0.7 -j REJECT
Add a rule to reject all packets from 10.0.0.7 and send
back a ICMP response to the sender
iptables -A INPUT -s 10.0.0.8 -j DROP
Add a rule to silently drop all packets from 10.0.0.8
iptables -A INPUT -s 10.0.0.9 -j LOG
Add a rule to log via Syslog all packets from 10.0.0.9, and
take no further action
iptables -D INPUT -s 10.0.0.9 -j LOG
Delete a rule
iptables -D INPUT 42
Delete rule 42 of the INPUT chain
iptables -F INPUT
Flush all rules of the INPUT chain
iptables -t mangle -F
Flush all rules of the mangle table
iptables -t mangle -X
Delete all user-defined (not built-in) rules in the mangle
table
iptables -L INPUT
List the rules of the INPUT chain
iptables -P INPUT -j DROP
Define the chain policy, which takes effect when no rule
matches and the end of the rules list is reached
iptables -A OUTPUT -d 10.7.7.0/24 -j DROP
Add a rule to drop all packets with destination 10.7.7.0/24
iptables -A FORWARD -i eth0 -o eth1 -j LOG
Add a rule to log all packets entering the system via eth0
and exiting via eth1
iptables -A INPUT -p 17 -j DROP
iptables -A INPUT -p udp -j DROP
Add a rule to drop all incoming UDP traffic (protocol
numbers are defined in /etc/protocols)
iptables -A INPUT --sport 1024:65535 --dport 53 \
-j ACCEPT
Add a rule to accept all packets coming from any
unprivileged port and with destination port 53
iptables -A INPUT -p icmp --icmp-type echo-request \
-m limit --limit 1/s -i eth0 -j ACCEPT
Add a rule to accept incoming pings through eth0 at a
maximum rate of 1 ping/second
iptables -A INPUT -m state --state ESTABLISHED \
-j ACCEPT
Load the module for stateful packet filtering, and add a
rule to accept all packets that are part of a
communication already tracked by the state module
iptables -A INPUT -m state --state NEW -j ACCEPT
Add a rule to accept all packets that are not part of a
communication already tracked by the state module
iptables -A INPUT -m state --state RELATED -j ACCEPT
Add a rule to accept all packets that are related (e.g.
ICMP responses to TCP or UDP traffic) to a communication
already tracked by the state module
iptables -A INPUT -m state --state INVALID -j ACCEPT
Add a rule to accept all packets that do not match any of
the states above
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
87/126
NAT routing
NATrouting
LAN
10.0.0.0/24
eth0
10.0.0.1
Linux box
NAT router
eth1
93.184.216.119
Internet
SNAT (Source Network Address Translation)
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth1 \
-j SNAT --to-source 93.184.216.119
Map all traffic leaving the LAN to the external IP
address 93.184.216.119
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth1 \
-j SNAT --to-source 93.184.216.119:93.184.216.127
Map all traffic leaving the LAN to a pool of external
IP addresses 93.184.216.119-127
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
Map all traffic leaving the LAN to the address
dynamically assigned to eth1 via DHCP
DNAT (Destination Network Address Translation)
iptables -t nat -A PREROUTING -i eth1 -d 93.184.216.119 \
-j DNAT --to-destination 10.0.0.13
Allow the internal host 10.0.0.13 to be publicly
reachable via the external address 93.184.216.119
PAT (Port Address Translation)
iptables -t nat -A PREROUTING -i eth1 -d 93.184.216.119 \
-p tcp --dport 80 -j DNAT --to-destination 10.0.0.13:8080
Make publicly accessible a webserver that is
located in the LAN, by mapping port 8080 of the
internal host 10.0.0.13 to port 80 of the external
address 93.184.216.119
iptables -t nat -A PREROUTING -i eth0 -d ! 10.0.0.0/24 \
-p tcp --dport 80 -j REDIRECT --to-ports 3128
Redirect all outbound HTTP traffic originating from
the LAN to a proxy running on port 3128 on the
Linux box
iptables-save > fwrules.saved
Save iptables configuration to a file
iptables-restore < fwrules.saved
Restore a iptables configuration from a file
sysctl -w net.ipv4.ip_forward=1
echo 1 > /proc/sys/net/ipv4/ip_forward
Enable IP forwarding; necessary to set up a Linux machine as a router.
(This command causes other network options to be changed as well)
/etc/sysconfig/iptables
iptables rules
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
88/126
SSH
SSH
ssh root@remotehost
Connect to a remote host via SSH (Secure Shell) and login
as the superuser
ssh -v root@remotehost
ssh -vv root@remotehost
ssh -vvv root@remotehost
Connect via SSH, with increasing levels of verbosity
ssh -p 2222 root@remotehost
Login as the superuser to a remote host via SSH using
port 2222 instead of standard port 22
ssh root@remotehost /root/mycommand
Execute a command on a remote host
sftp root@remotehost
FTP-like tool for secure file transfer
scp myfile root@remotehost:/tmp/myfile2
scp root@remotehost:/tmp/myfile2 myfile
scp jdoe@host1:/tmp/myfile root@host2:/root/myfile2
Non-interactive secure file copy.
Can transfer files from local to remote, from remote to
local, or between two remote hosts
sshpass -p p455w0rd ssh root@remotehost
Connect to a remote host using the specified password
pssh -i -H "host1 host2 host3" /root/mycommand
Execute a command in parallel on a group of remote hosts
ssh-keygen -t rsa -b 2048
Generate interactively a 2048-bit RSA key pair, prompting
for a passphrase
ssh-keygen -t dsa
Generate a DSA key pair
ssh-keygen -p -t rsa
Change passphrase of the private key
ssh-keygen -q -t rsa -f /etc/ssh/id_rsa -N '' -C ''
Generate a RSA key with no passphrase (for noninteractive use) and no comment
ssh-keygen -lf /etc/ssh/id_rsa.pub
View key length and fingerprint of a public key
ssh-agent
Start the SSH Agent daemon that caches decrypted
private keys in memory; also echoes to the terminal the
environment variables that must be set. The cached keys
are automatically used by SSH tools ssh, sftp, and scp
eval `ssh-agent`
Show the PID of ssh-agent and set appropriate
environment variables
ssh-add ~/.ssh/id_rsa
Add a private key to the ssh-agent cache
ssh-copy-id root@remotehost
Use locally available keys to authorize login (via public key
authentication) on a remote host
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
89/126
SSH operations
SSHoperations
SSH port forwarding (aka SSH tunneling)
ssh -L 2525:mail.foo.com:25
[email protected]Establish a SSH encrypted tunnel from localhost to remote
host mail.foo.com, redirecting traffic from local port 2525
to port 25 of remote host mail.foo.com.
Useful if the local firewall blocks outgoing port 25. In this
case, port 2525 is used to go out; the application must be
configured to connect to localhost on port 2525 (instead of
mail.foo.com on port 25)
Establish a SSH encrypted tunnel from localhost to remote
host login.foo.com.
Remote host login.foo.com will then forward, unencrypted,
all data received over the tunnel on port 2525 to remote
host mail.foo.com on port 25
SSH reverse forwarding (aka SSH reverse tunneling)
ssh -R 2222:localhost:22
[email protected]Establish a SSH encrypted reverse tunnel from remote
host login.foo.com back to localhost, redirecting traffic
sent to port 2222 of remote host login.foo.com back
towards local port 22.
Useful if the local firewall blocks incoming connections so
remote hosts cannot connect back to local machine. In
this case, port 2222 of login.foo.com is opened for
listening and connecting back to localhost on port 22;
remote host login.foo.com is then able to connect to the
local machine on port 2222 (redirected to local port 22)
SSH as a SOCKS proxy
ssh -D 33333
[email protected]The application supporting SOCKS must be configured to
connect to localhost on port 33333. Data is tunneled from
localhost to login.foo.com, then unencrypted to destination
X11 Forwarding
ssh -X [email protected]
Enable the local display to execute locally a X application
stored on a remote host login.foo.com
How to enable public key authentication
1. Set PubkeyAuthentication yes in /etc/ssh/sshd_config of remote server
2. Append your public key ~/.ssh/id_rsa.pub to the file ~/.ssh/authorized_keys on the remote server;
this can be done by hand or via the command ssh-copy-id
How to enable host-based authentication amongst a group of trusted hosts
1.
2.
3.
4.
Set HostbasedAuthentication yes in /etc/ssh/sshd_config on all hosts
Create /etc/ssh/shosts.equiv on all hosts, and enter in this file all trusted hostnames
Connect via SSH manually from your machine on each host so that all hosts' public keys go into ~/.ssh/known_hosts
Copy ~/.ssh/known_hosts from your machine to /etc/ssh/ssh_known_hosts on all hosts
How to enable SSH Agent
1. Type eval `ssh-agent`
2. Type ssh-add to add the private key to cache, and enter the key's passphrase
How to enable X11 Forwarding
1. On remote host 10.2.2.2, set X11Forwarding yes in /etc/ssh/sshd_config, and make sure that xauth is installed
2. On local host 10.1.1.1, type ssh -X 10.2.2.2, then run on remote host the graphical application e.g. xclock &
X11 Forwarding can also be enabled via telnet (insecure and obsolete)
1. On remote host 10.2.2.2, type export DISPLAY=10.1.1.1:0.0
2. On local host 10.1.1.1, type xhost +
3. On local host 10.1.1.1, type telnet 10.2.2.2, then run on remote host the graphical application e.g. xclock &
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
90/126
SSH configuration
SSHconfiguration
SSH files
/etc/ssh/sshd_config
SSH server daemon configuration file
/etc/ssh/ssh_config
SSH client global configuration file
/etc/ssh/ssh_host_key
Host's private key (should be mode 0600)
/etc/ssh/ssh_host_key.pub
Host's public key
/etc/ssh/shosts.equiv
Names of trusted hosts for host-based authentication
/etc/ssh/ssh_known_hosts
Database of host public keys that were previously accepted as legitimate
~/.ssh/
User's SSH directory (must be mode 0700)
~/.ssh/config
SSH client user configuration file
~/.ssh/id_rsa
~/.ssh/id_dsa
User's RSA or DSA private key, as generated by ssh-keygen
~/.ssh/id_rsa.pub
~/.ssh/id_dsa.pub
User's RSA or DSA public key, as generated by ssh-keygen
~/.ssh/known_hosts
Host public keys that were previously accepted as legitimate by the user
~/.ssh/authorized_keys
~/.ssh/authorized_keys2
(obsolete)
Trusted public keys; the corresponding private keys allow the user to
authenticate on this host
/etc/ssh/sshd_config
PermitRootLogin yes
Control superuser login via SSH. Possible values are:
yes
Superuser can login
no
Superuser cannot login
without-password
Superuser cannot login with password
forced-commands-only Superuser can only run commands in SSH command line
AllowUsers jdoe ksmith
DenyUsers jhacker
List of users that can/cannot login via SSH, or * for everybody
AllowGroups geeks
DenyGroups *
List of groups whose members can/cannot login via SSH, or * for all groups
PasswordAuthentication yes
Permit authentication via login and password
PubKeyAuthentication yes
Permit authentication via public key
HostbasedAuthentication yes
Permit authentication based on trusted hosts
Protocol 1,2
Specify protocols supported by SSH. Value can be 1 or 2 or both
X11Forwarding yes
Allow X11 Forwarding
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
91/126
GnuPG
GnuPG
gpg --gen-key
Generate a key pair
gpg --import alice.asc
Import Alice's public key into your keyring
gpg --list-keys
List the keys contained into your keyring
gpg --list-secret-keys
List your private keys contained into your keyring
gpg --list-public-keys
List the public keys contained into your keyring
gpg --export -o keyring_backup.gpg
Export your whole keyring to a file
gpg --export-secret-key -a "You" -o private.key
Export your private key (username You) to a file
gpg --export-public-key -a "Alice" -o alice.pub
Export Alice's public key to a file
gpg --edit-key "Alice"
Sign Alice's public key
gpg -e -u "You" -r "Alice" file.txt
Encrypt a file (to Alice i.e. with Alice's public key),
signing it with your private key
gpg -d file.txt.gpg
Decrypt a file (with your own public key)
md5sum
sha1sum
sha224sum
sha256sum
sha384sum
sha512sum
Print a digest of a file depending on the selected
hashing algorithm
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
92/126
OpenVPN
OpenVPN
openvpn --genkey --secret keyfile
Generate a shared secret keyfile for OpenVPN authentication.
The keyfile must be copied on both server and client
openvpn server.conf
Start the VPN on the server side. The encrypted VPN tunnel uses UDP port 1194
openvpn client.conf
Start the VPN on the client side
/etc/openvpn/server.conf
Server-side configuration file:
dev tun
ifconfig [server IP] [client IP]
keepalive 10 60
ping-timer-rem
persist-tun
persist-key
secret keyfile
/etc/openvpn/client.conf
Client-side configuration file:
remote [server public IP]
dev tun
ifconfig [client IP] [server IP]
keepalive 10 60
ping-timer-rem
persist-tun
persist-key
secret keyfile
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
93/126
Key bindings
Keybindings
Key
Alternate key
Function
CTRL
Move cursor forward one char
CTRL
Move cursor backward one char
CTRL
HOME
Move cursor to beginning of line
CTRL
END
Move cursor to end of line
CTRL
BACKSPACE
Delete char to the left of cursor
CTRL
Delete word to the left of cursor
CTRL
Delete all chars to the left of cursor
CTRL
Delete all chars to the right of cursor
CTRL
Swap current char with previous char
ESC
Swap current word with previous word
Scroll up the buffer
SHIFT
PAGE UP
SHIFT
PAGE DOWN
Scroll down the buffer
CTRL
Clear screen (same as clear)
CTRL
Previous command in history
CTRL
Next command in history
CTRL
Reverse history search
Autocomplete file and directory names
TAB
Line feed
CTRL
RETURN
CTRL
Carriage return
CTRL
Pause trasfer to terminal
CTRL
Resume transfer to terminal
CTRL
Send a SIGTSTP to put the current job in background
CTRL
Send a SIGINT to stop the current process
CTRL
Send a EOF to current process (same as logout)
Send a SIGINT to reboot the machine (same as shutdown -r now),
as specified in /etc/inittab and /etc/init/control-alt-delete
CTRL
ALT
DEL
CTRL
ALT
F1 ... F6
CTRL
ALT
F7 ... F11
CTRL
ALT
Increase X Window screen resolution
CTRL
ALT
Decrease X Window screen resolution
CTRL
TAB
CTRL
ALT
Switch to next workspace
CTRL
ALT
Switch to previous workspace
CTRL
ALT
BACKSPACE
Reboot the X Window server
Switch between text consoles
Switch between X Window consoles
Switch between X Window tasks
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
94/126
udev
udev
The Hardware Abstraction Layer (HAL) manages device files and provides plug-and-play facilities. The HAL daemon hald
maintains a persistent database of devices.
udev dynamically generates the device nodes in /dev/ for devices present on the system. udev also provides persistent
naming for storage devices in /dev/disk .
When a device is added, removed, or changes state, the kernel sends an uevent received by the udevd daemon which will
pass the uevent through a set of rules stored in /etc/udev/rules.d/*.rules and /lib/udev/rules.d/*.rules .
udevadm monitor
udevmonitor
Show all kernel uevents and udev messages
udevadm info --attribute-walk --name=/dev/sda
Print all attributes of device /dev/sda in udev rules key format
cat /sys/block/sda/size
Print the size attribute of disk sda in 512-byte blocks.
This information is retrieved from sysfs
udevadm test /dev/sdb
Simulate a udev event run for the device and print debug output
gnome-device-manager
Browser for the HAL device manager
/etc/udev/rules.d/*.rules and /lib/udev/rules.d/*.rules
udev rules
KERNEL=="hda", NAME="mydisk"
Match a device which was named by the
kernel as hda; name the device node as
mydisk. The device node will be therefore
/dev/mydisk
KERNEL=="hdb", DRIVER=="ide-disk", SYMLINK+="mydisk myhd"
Match a device with kernel name and driver
as specified; name the device node with the
default name and create two symbolic links
/dev/mydisk and /dev/myhd pointing to
/dev/hdb
KERNEL=="fd[0-9]*", NAME="floppy/%n", SYMLINK+="%k"
Match all floppy disk drives (i.e. fdn); place
device node in /dev/floppy/n and create a
symlink /dev/fdn to it
SUBSYSTEM=="block", ATTR{size}=="41943040", SYMLINK+="mydisk"
Match a block device with a size attribute of
41943040; create a symlink /dev/mydisk
KERNEL=="fd[0-9]*", OWNER="jdoe"
Match all floppy disk drives; give ownership
of the device file to user jdoe
KERNEL=="sda", PROGRAM="/bin/mydevicenamer %k", SYMLINK+="%c"
Match a device named by the kernel as sda;
to name the device, use the defined
program which takes on stdin the kernel
name and output on stdout e.g. name1
name2. Create symlinks /dev/name1 and
/dev/name2 pointing to /dev/sda
KERNEL=="sda", ACTION=="add", RUN+="/bin/myprogram"
Match a device named by the kernel as sda;
run the defined program when the device is
connected
KERNEL=="sda", ACTION=="remove", RUN+="/bin/myprogram"
Match a device named by the kernel as sda;
run the defined program when the device is
disconnected
%n = kernel number (e.g. = 3 for fd3)
%k = kernel name
(e.g. = fd3 for fd3)
%c = device name as output from program
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
95/126
Kernel
Kernel
A kernel version number has the form major.minor.patchlevel.
Kernel images are usually gzip-compressed and can be of two types: zImage (max 520 Kb) and bzImage (no size limit).
Kernel modules can be loaded dynamically into the kernel to provide additional functionalities on demand, instead of being
included when the kernel is compiled; this reduces memory footprint.
kerneld (daemon) and kmod (kernel thread) facilitate the dynamic loading of kernel modules.
/lib/modules/X.Y.Z/*.ko
Kernel modules for kernel version X.Y.Z
/lib/modules/X.Y.Z/modules.dep
Modules dependencies.
This file needs to be recreated (via the command depmod -a) after a
reboot or a change in module dependencies
/etc/modules.conf
/etc/conf.modules
Modules configuration file
(deprecated)
/usr/src/linux/
Contains the kernel source code to be compiled
/usr/src/linux/.config
Kernel configuration file
freeramdisk
Free the memory used for the initrd image. This command must be
run directly after unmounting /initrd
mkinitrd [initrd image] [kernel version]
Create a initrd image file (Red Hat)
mkinitramfs
Create a initrd image file according to the configuration file
/etc/initramfs-tools/initramfs.conf (Debian)
dracut
Create initial ramdisk images for preloading modules
dbus-monitor
Monitor messages going through a D-Bus message bus
dbus-monitor --session
Monitor session messages (default)
dbus-monitor --system
Monitor system messages
The runtime loader ld.so loads the required shared libraries of the program into RAM, searching in this order:
1.
LD_LIBRARY_PATH
Environment variable specifying the list of dirs where libraries should be searched for first
2.
/etc/ld.so.cache
Cache file
3.
/lib and /usr/lib
Default locations for shared libraries
/etc/ld.so.conf
Configuration file used to specify other shared library locations
(other than the default ones /lib and /usr/lib)
ldconfig
Create a cache file /etc/ld.so.cache of all available dynamically
linked libraries.
To be run when the system complains about missing libraries
ldd [program or lib]
Print library dependencies
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
96/126
Kernel management
Kernelmanagement
lsdev
List information about the system's hardware
lspci
List PCI devices
lspci -d 8086:
List all Intel hardware present. PCI IDs are stored in /usr/share/misc/pci.ids (Debian)
or/usr/share/hwdata/pci.ids (Red Hat)
lsusb
List USB devices
lsusb -d 8086:
List all Intel USB devices present. USB IDs are stored in /var/lib/usbutils/usb.ids
lshw
List system hardware
dmesg
Print the messages of the kernel ring buffer
dmesg -n 1
Set the logging level to 1 (= only panic messages)
journalctl
Query the systemd journal
journalctl -xn
Query the systemd journal for recent events only, and adding explanation texts
journalctl -f
Query the systemd journal in real time, scrolling as new entries are added
uname -s
Print the kernel name
uname -n
Print the network node hostname
uname -r
Print the kernel release number X.Y.Z
uname -v
Print the kernel version number
uname -m
Print the machine hardware name
uname -p
Print the processor type
uname -i
Print the hardware platform
uname -o
Print the operating system
uname -a
Print all the above information, in that order
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
97/126
Kernel compile and patching
Kernelcompileandpatching
Kernel compile
Download
Clean
Configure
Download kernel source code linux-X.Y.Z.tar.bz2 from http://www.kernel.org
to the base of the kernel source tree /usr/src/linux
make clean
Delete most generated files
make mrproper
Delete all generated files and kernel configuration
make distclean
Delete temporary files, patch leftover files, and similar
make config
Terminal-based (options must be set in sequence)
make menuconfig
ncurses UI
make xconfig
make gconfig
GUI
make oldconfig
Create a new config file, based on the options in the old config
file and in the source code
Components (e.g. device drivers) can be either:
- not compiled
- compiled into the kernel binary, for support of devices always used on the system or
necessary for the system to boot
- compiled as a kernel module, for optional devices
The configuration command creates a /usr/src/linux/.config config file containing
instructions for the compile
Build
make bzImage
Compile the kernel
make modules
Compile the kernel modules
make all
Compile kernel and kernel modules
make -j2 all will speed up compilation by allocating 2 simultaneous compile jobs
Modules install
make modules_install
Install the previously built modules present in
/lib/modules/X.Y.Z
make install
Install the kernel automatically
To install the kernel by hand:
Kernel install
Copy the new compiled kernel and other files into the boot partition
cp /usr/src/linux/arch/boot/bzImage /boot/vmlinuz-X.Y.Z (kernel)
cp /usr/src/linux/arch/boot/System.map-X.Y.Z /boot
cp /usr/src/linux/arch/boot/config-X.Y.Z /boot (config options used for this compile)
Create an entry in GRUB to boot on the new kernel
Optionally, the kernel can be packaged for install on other machines
Package
make rpm-pkg
Build source and binary RPM packages
make binrpm-pkg
Build binary RPM package
make deb-pkg
Builds binary DEB package
Kernel patching
Download
Patch
Build
Install
Download and decompress the patch to /usr/src
patch -p1 < file.patch
Apply the patch
patch -Rp1 < file.patch
To remove a patch, you can either apply the patch again or
use this command (reverse patch)
Build the patched kernel as explained previously
Install the patched kernel as explained previously
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
98/126
Kernel modules
Kernelmodules
Kernel modules allow the kernel to access functions (symbols) for kernel services e.g. hardware drivers, network stack, or
filesystem abstraction.
lsmod
List the modules that are currently loaded into the kernel
insmod module
Insert a module into the kernel. If the module requires another module or if it
does not detect compatible hardware, insertion will fail
rmmod module
Remove a module from the kernel. If the module is in use by another module, it
is necessary to remove the latter first
modinfo module
Display the list of parameters accepted by the module
depmod -a
Probe all modules in the kernel modules directory and generate the file that lists
their dependencies
It is recommended to use modprobe instead of insmod/rmmod, because it automatically handles prerequisites when inserting
modules, is more specific about errors, and accepts just the module name instead of requiring the full pathname.
modprobe module option=value
Insert a module into the running kernel, with the specified parameters.
Prerequisite modules will be inserted automatically
modprobe -a
Insert all modules
modprobe -t directory
Attempt to load all modules contained in the directory until a module succeeds.
This action probes the hardware by successive module-insertion attempts for a
single type of hardware, e.g. a network adapter
modprobe -r module
Remove a module
modprobe -c module
Display module configuration
modprobe -l
List loaded modules
Configuration of device drivers
Device drivers support the kernel with instructions on how to use that device.
Device driver compiled
into the kernel
Configure the device driver by passing a kernel parameter in the GRUB menu:
kernel /vmlinuz ro root=/dev/vg0/root vga=0x33c
Edit module configuration in /etc/modprobe.conf or /etc/modprobe.d/ (Red Hat):
Device driver provided
as a kernel module
alias eth0 3c59x
Specify that eth0 uses the 3c59x.ko driver module
options 3c509 irq=10,11
Assign IRQ 10 and 11 to 3c509 devices
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
99/126
/proc filesystem
/procfilesystem
/procpseudo filesystem
File
Information stored
Equivalent command to cat
/proc/n/
Information about process with PID n
ps n
/proc/n/cmdline
Command line the process was launched by
/proc/n/environ
Values of environment variables of process
/proc/n/status
Status of process
/proc/n/root
Symlink to process' filesystem root
/proc/n/exe
Symlink to process' executable
/proc/n/cwd
Symlink to process' working directory
/proc/sys/
sysfs: exposes tunable kernel parameters
/proc/sys/kernel/
Kernel information and parameters
/proc/sys/net/
Network information and parameters
/proc/uptime
Time elapsed since boot
uptime
/proc/loadavg
System load averages
uptime
/proc/filesystems
Filesystems supported by the system
/proc/partitions
Drive partition information
/proc/mdstat
Information about RAID arrays and devices
/proc/swaps
Size of total and used swap areas
swapon -s
/proc/mounts
Mounted partitions
mount
/proc/devices
Drivers currently loaded
/proc/modules
Kernel modules currently loaded
/proc/bus
Buses (e.g. PCI, USB, PC Card)
/proc/ioports
I/O addresses in use
/proc/dma
DMA channels in use
/proc/interrupts
Current IRQs (Interrupt Requests)
/proc/cpuinfo
CPUs information
/proc/meminfo
Total and free memory
free
/proc/version
Linux version
uname -a
lsmod
procinfo
/proc/sys is the only writable branch of /proc and can be used to tune kernel parameters on-the-fly.
All changes will be lost after system shutdown.
sysctl fs.file-max
cat /proc/sys/fs/file-max
Get the maximum allowed number of open files
sysctl -w "fs.file-max=100000"
echo "100000" > /proc/sys/fs/file-max
Set the maximum allowed number of open files to 100000
sysctl -a
List all available kernel tuning options
sysctl -p
Apply all tuning settings listed in /etc/sysctl.conf .
This command is usually run at boot by the system initialization script
and therefore allows for permanent changes to the kernel
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
100/126
System recovery
Systemrecovery
If the kernel has been booted in emergency mode and init has not been run, some initial configuration is necessary e.g.
mount /proc
mount -o remount,rw /
mount -a
If mounting filesystems fails:
mknod /dev/sda
mknod /dev/sda1
fdisk -l /dev/sda
fsck -y /dev/sda1
mount -t ext3 /dev/sda1 /mnt/sysimage
chroot /mnt/sysimage
To install a package using an alternative root directory (useful if the system has been booted from a removable media):
rpm -U --root /mnt/sysimage package.rpm
To install GRUB on the specified directory (which must contain /boot/grub/):
grub-install -root-directory=/mnt/sysimage /dev/sda
An alternative metod is to chroot /mnt/sysimage before installing GRUB via grub-install /dev/sda .
Run sync and unmount filesystems before exiting the shell, to ensure that all changes have been written on disk.
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
101/126
DNS
DNS
DNS implementations
BIND
Berkeley Internet Name Domain system, is the standard DNS server for UNIX
dnsmasq
Lightweight DNS, DHCP and TFTP server for a small network
djbdns
Security-hardened DNS server that also includes DNS debugging tools
PowerDNS
Alternative open-source DNS server
named
BIND Name Daemon
ndc
Name Daemon Controller for BIND 8
rndc
Remote Name Daemon Controller for BIND 9, uses a shared key to communicate securely with named
dnswalk example.org.
DNS debugger
rndc reconfig
Reload BIND configuration and new zones
rndc reload example.org
Reload the zone example.org
rndc freeze example.org
Suspend updates for the zone example.org
rndc thaw example.org
Resume updates for the zone example.org
rndc tsig-list
List all currently active TSIG keys
DNSSEC was designed to secure the DNS tree and hence prevent cache poisoning.
The TSIG (Transaction SIGnature) standard, that authenticates communications between two trusted systems, is used to
sign zone transfers and DDNS (Dynamic DNS) updates.
dnssec-keygen -a dsa -b 1024 \
-n HOST dns1.example.org
Generate a TSIG key with DNSSEC algorithm nnn and key fingerprint fffff.
This will create two key files
Kdns1.example.org.+nnn+fffff.key
Kdns1.example.org.+nnn+fffff.private
which contain a key number that has to be inserted both in /etc/named.conf and
/etc/rndc.conf
rndc-confgen -a
Generate a /etc/rndc.key key file:
key "rndc-key" {
algorithm hmac-md5;
secret "vyZqL3tPHsqnA57e4LT0Ek==";
};
options {
default-key "rndc-key";
default-server 127.0.0.1;
default-port 953;
};
This file is automatically read both by named and rndc
dnssec-signzone example.org
Sign the zone example.org
named -u named -g named
Run BIND as user/group named (both must be created if needed) instead of root
named -t /var/cache/bind
Run BIND in a chroot jail /var/cache/bind
(actually is the chroot command that starts the named server)
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
102/126
DNS configuration
DNSconfiguration
/etc/named.conf
DNS server configuration file
controls {
inet 127.0.0.1 allow {localhost;} keys {rndckey;};
};
key "rndc-key" {
// TSIG key
algorithm dsa;
secret "HYZur46fftdUQ43BJKI093t4t78lkp";
};
acl "mynetwork" {10.7.0.0/24;};
// Alias definition
// Built-in ACLs: any, none, localhost, localnets
options {
directory "/var/named";
// Working directory
version "0.0";
// Hide version number by replacing it with 0.0
listen-on port 53 {10.7.0.1; 127.0.0.1;};
// Port and own IP addresses to listen on
blackhole {172.17.17.0/24;};
// IPs whose packets are to be ignored
allow-query {mynetwork;};
// IPs allowed to do iterative queries
allow-query-on {any;};
// Local IPs that can accept iterative queries
allow-query-cache {any;};
// IPs that can get an answer from cache
allow-recursion {mynetwork;};
// IPs to accept recursive queries from (typically
// own network's IPs). The DNS server does the full
// resolution process on behalf of these client IPs,
// and returns a referral for the other IPs
allow-recursion-on {mynetwork;};
// Local IPs that can accept recursive queries
allow-transfer {10.7.0.254;};
// Zone transfer is restricted to these IPs (slaves);
// on slave servers, this option should be disabled
allow-update {any;};
// IPs to accept DDNS updates from
recursive-clients 1000;
// Max number of simultaneous recursive lookups
dnssec-enable yes;
// Enable DNSSEC
dialup no;
// Not a dialup connection: external zone maintenance
// (e.g. sending heartbeat packets, external zone transfers)
// is then permitted
forward first;
// Site-wide cache: bypass the normal resolution
forwarders {10.7.0.252; 10.7.0.253;};
// method by querying first these central DNS
// servers if they are available
};
// Define the root name servers
zone "." {
type hint;
file "root.cache";
}
// Configure system to act as a master server for the example.org domain
zone "example.org" IN {
type master;
file "master/example.org.zone";
// Zone file for the example.org domain
};
zone "240.123.224.in-addr.arpa" IN {
// Configure reverse lookup zone (for 224.123.240.0/24)
type master;
file "slave/example.org.revzone";
};
// Configure system to act as a slave server for the example2.org domain
zone "example2.org" IN {
type slave;
file "slave/example2.org.zone";
// Slave: do not edit this zone file!
masters {10.7.0.254;};
};
zone "0.7.10.in-addr.arpa" IN {
// Configure reverse lookup zone (for 10.7.0.0/24)
type slave;
file "slave/10.7.0.revzone";
masters {10.7.0.254;};
};
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
103/126
DNS zone file
DNSzonefile
DNS zone file for the example.org zone
/var/named/master/example.org.zone
$TTL 86400
; TTL (1 day)
$ORIGIN example.org.
example.org IN SOA dns1.example.org. help.example.org. (
2014052300
; serial
28800
; refresh (8 hours)
7200
; retry (2 hours)
604800
; expire (1 week)
600 )
; negative TTL (10 mins)
dns1
dns2
mail1
mail2
foo
bar
www
baz
IN
IN
IN
IN
NS
NS
MX
MX
dns1.example.org.
dns2.example.org.
10 mail1.example.org.
20 mail2.example.org.
IN
IN
IN
IN
IN
IN
IN
IN
A
A
A
A
A
A
A
CNAME
224.123.240.3
224.123.240.4
224.123.240.73
224.123.240.77
224.123.240.12
224.123.240.13
224.123.240.19
bar
; Master DNS server is dns1.example.org
; For problems contact
[email protected]subdomain
IN NS
ns1.subdomain.example.org.
; Glue records
IN NS
ns2.subdomain.example.org.
ns1.subdomain.example.org.
IN A
224.123.240.201
ns2.subdomain.example.org.
IN A
224.123.240.202
/var/named/master/example.org.revzone
DNS reverse zone file for the example.org zone
$TTL 86400
; TTL (1 day)
example.org IN SOA dns1.example.org. help.example.org. (
2014052300
; serial
28800
; refresh (8 hours)
7200
; retry (2 hours)
604800
; expire (1 week)
600 )
; negative TTL (10 mins)
12.240.123.224.in-addr.arpa
13.240.123.224.in-addr.arpa
19.240.123.224.in-addr.arpa
IN PTR
IN PTR
IN PTR
foo
bar
www
Resource Records
SOA
$TTL
How long to cache a positive response
$ORIGIN
Suffix appended to all names not ending with a dot.
Useful when defining multiple subdomains inside the same zone
Start Of Authority for the example.org zone
serial
Serial number. Must be increased after each edit of the zone file
refresh
How frequently a slave server refreshes its copy of zone data from the master
retry
How frequently a slave server retries connecting to the master
expire
How long a slave server relies on its copy of zone data. After this time period expires,
the slave server is not authoritative anymore for the zone unless it can contact a master
negative TTL
How long to cache a non-existent answer
Address: maps names to IP addresses. Used for DNS lookups.
PTR
Pointer: maps IP addresses to names. Used for reverse DNS lookups.
Each A record must have a matching PTR record
CNAME
Canonical Name: specifies an alias for a host with an A record (even in a different zone).
Discouraged as it causes multiple lookups; it is better to use multiple A records instead
NS
Name Service: specifies the authoritative name servers for the zone
MX
Mailserver: specifies address and priority of the servers able to handle mail for the zone
Glue Records are not really part of the zone; they delegate authority for other zones, usually subdomains
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
104/126
Apache
Apache
Methods of MPM (Multi-Processing Modules) operation of the Apache webserver:
prefork MPM
A number of child processes is spawned in advance, with each child serving exclusively one connection.
Highly reliable due to Linux memory protection that isolates each child process
worker MPM
Multiple child processes spawn multiple threads, with each thread serving one connection.
More scalable but prone to deadlocks if third-party non-threadsafe modules are loaded
apache2ctl start
Start the Apache webserver daemon httpd
apache2ctl status
Display a brief status report
apache2ctl fullstatus
Display a detailed status report
apache2ctl graceful
Gracefully restart Apache; currently open connections are not aborted
apache2ctl graceful-stop
Gracefully stop Apache; currently open connections are not aborted
apache2ctl configtest
Test the configuration file, reporting any syntax error
/var/www/html
Default document root directory
$HOME/public_html
Default document root directory for users' websites
Web content must be readable by the user/group the Apache process runs as. For security reasons, it should be owned and
writable by the superuser or the webmaster user/group, not the Apache user/group.
/etc/httpd/conf/httpd.conf
/etc/apache2/httpd.conf
(Red Hat)
(Debian and SUSE)
Apache configuration file
HTTPS
A secure web server (using HTTP over SSL i.e. HTTPS) hands over its public key to the client when the latter connects
to it via port 443. The server's public key is signed by a CA (Certification Authority), whose validity is ensured by the
root certificates stored into the client's browser.
The openssl command and its user-friendly CA.pl script are the tools of the OpenSSL crypto library that can be used
to accomplish all public key crypto operations e.g. generate key pairs, Certificate Signing Requests, self-signed
certificates.
Virtual hosting with HTTPS requires assigning an unique IP address for each virtual host; this because the SSL
handshake (during which the server sends its certificate to the client's browser) takes place before the client sends
the Host: header (which tells which virtual host the client wants to talk to).
A workaround for this is SNI (Server Name Indication) that makes the browser send the hostname in the first
message of the SSL handshake. Another workaround is to have all multiple name-based virtual hosts use the same
SSL certificate with a wildcard domain *.example.org.
/etc/ssl/openssl.cnf
/etc/httpd/conf.d/ssl.conf
Configuration file for OpenSSL
(Red Hat)
Linux & LPIC Quick Reference Guide
3rd ed.
Configuration file for the mod_ssl module
2015-07
Daniele Raffo
www.crans.org/~raffo
105/126
Apache configuration
Apacheconfiguration
httpd.conf
Server configuration directives
ServerName www.mysite.org:80
Name and port (if omitted, uses default HTTP port 80) of server
ServerRoot /etc/httpd
Root directory for config and log files
ServerAdmin [email protected]
Contact address that the server includes in any HTTP error
messages to the client. Can be an email address or an URL
StartServers 5
Number of servers to start initially
MinSpareServers 5
MaxSpareServers 10
Minimum and maximum number of idle child server processes
MaxClients 256
MaxRequestWorkers 256
(before v2.3.13)
(after v2.3.13)
Max number of simultaneous requests that will be served; clients
above this limit will get a HTTP error 503 - Service Unavailable.
Prefork MPM: max number of child processes launched to serve
requests.
Worker MPM: max total number of threads available to serve
requests
ServerLimit 256
Prefork MPM: max configured value for MaxRequestWorkers.
Worker MPM: in conjunction with ThreadLimit, max configured
value for MaxRequestWorkers
ThreadsPerChild 25
Worker MPM: number of threads created by each child process
ThreadLimit 64
Worker MPM: max configured value for ThreadsPerChild
LoadModule mime_module modules/mod_mime.so
Load the module mime_module by linking in the object file or
library modules/mod_mime.so
Listen 10.17.1.1:80
Listen 10.17.1.5:8080
Make the server accept connections on the specified IP
addresses (optional) and ports
User nobody
Group nobody
User and group the Apache process runs as. For security
reasons, this should not be root
Main configuration directives
DocumentRoot /var/www/html
Directory in filesystem that maps to the root of the website
Alias /image /mydir/pub/image
Map the URL http://www.mysite.org/image/ to the directory
/mydir/pub/image in the filesystem. This allows Apache to
serve content placed outside of the document root
TypesConfig conf/mime.types
Media types file. The path is relative to ServerRoot
AddType image/jpeg jpeg jpg jpe
Map the specified filename extensions onto the specified content
type. These entries adds to or override the entries from the
media types file conf/mime.types
Redirect permanent /foo /bar
Redirect to a URL on the same host. Status can be:
permanent
return a HTTP status 301 - Moved Permanently
temp
return a HTTP status 302 - Found
(i.e. the resource was temporarily moved)
seeother
return a HTTP status 303 - See Other
gone
return a HTTP status 410 - Gone
If status is omitted, default status temp is used
Redirect /foo http://www.example.com/foo
Redirect to a URL on a different host
AccessFileName .htaccess
Name of the distributed configuration file, which contains
directives that apply to the document directory it is in and to all
its subtrees
<Directory "/var/www/html/foobar">
AllowOverride AuthConfig Limit
</Directory>
Specify which
AuthConfig
FileInfo
Indexes
Limit
Options
All
None
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
global directives a .htaccess file can override:
authorization directives for directory protection
document type and metadata
directory indexing
host access control
specific directory features
all directives
no directive
Daniele Raffo
www.crans.org/~raffo
106/126
Apache virtual hosts
Apachevirtualhosts
httpd.conf
Virtual hosts directives
NameVirtualHost *
Specify which IP address will serve virtual hosting. The
argument can be an IP address, an address:port pair, or * for all
IP addresses of the server. The argument will be repeated in the
relevant <VirtualHost> directive
<VirtualHost *:80>
ServerName www.mysite.org
ServerAlias mysite.org *.mysite.org
DocumentRoot /var/www/vhosts/mysite
</VirtualHost>
The first listed virtual host is also the default virtual host.
It inherits those main settings that does not override.
This virtual host answers to http://www.mysite.org , and also
redirects there all HTTP requests on the domain mysite.org
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName www.mysite2.org
DocumentRoot /var/www/vhosts/mysite2
ErrorLog /var/www/logs/mysite2
</VirtualHost>
Name-based virtual host http://www.mysite2.org .
Multiple name-based virtual hosts can share the same IP
address; DNS must be configured accordingly to map each name
to the correct IP address. Cannot be used with HTTPS
<VirtualHost *:8080>
ServerName www.mysite3.org
DocumentRoot /var/www/vhosts/mysite3
</VirtualHost>
Port-based virtual host answering to connections on port 8080.
In this case the config file must contain a Listen 8080 directive
<VirtualHost 10.17.1.5:80>
ServerName www.mysite4.org
DocumentRoot /var/www/vhosts/mysite4
</VirtualHost>
IP-based virtual host answering to http://10.17.1.5
Logging directives
LogFormat "%h %l %u %t \"%r\" %>s %b"
Specify the format of a log
LogFormat "%h %l %u %t \"%r\" %>s %b" common
Specify a nickname (here, "common") for a log format.
This one is the CLF (Common Log Format) defined as such:
%h
IP address of the client host
%l
Identity of client as determined by identd
%u
User ID of client making the request
%t
Timestamp the server completed the request
%r
Request as done by the user
%s
Status code sent by the server to the client
%b
Size of the object returned, in bytes
CustomLog /var/log/httpd/access_log common
Set up a log filename, with the format or (as in this case)
the nickname specified
TransferLog /var/log/httpd/access_log
Set up a log filename, with format determined by the most
recent LogFormat directive which did not define a nickname
TransferLog "|rotatelogs access_log 86400"
Organize log rotation every 24 hours
HostnameLookups Off
Disable DNS hostname lookup to save network traffic.
Hostnames can be resolved later by processing the log file:
logresolve <access_log >accessdns_log
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
107/126
Apache directory protection
Apachedirectoryprotection
httpd.conf
Limited scope directives
<Directory "/var/www/html/foobar">
[list of directives]
</Directory>
Limit the scope of the specified directives to the directory
/var/www/html/foobar and its subdirectories
<Location /foobar>
[list of directives]
</Location>
Limit the scope of the specified directive to the URL
http://www.mysite.org/foobar/ and its subdirectories
Directory protection directives
<Directory "/var/www/html/protected">
AuthName "Protected zone"
Name of the realm. The client will be shown the realm name
and prompted to enter an user and password
AuthType Basic
Type of user authentication: Basic, Digest, Form, or None
AuthUserFile "/var/www/.htpasswd"
User database file. Each line is in the format
user:encrypted_password
To add an user jdoe to the database file, use the command:
htpasswd -c /var/www/.htpasswd jdoe
(will prompt for his password)
AuthGroupFile "/var/www/.htgroup"
Group database file. Each line contains a groupname followed
by all member usernames:
mygroup: jdoe ksmith mgreen
Require valid-user
Control who can access the protected resource.
valid-user
any user in the user database file
user jdoe
only the specified user
group mygroup
only the members of the specified group
Allow from 10.13.13.0/24
Control which host can access the protected resource
Satisfy Any
Set the access policy concerning user and host control.
All
both Require and Allow criteria must be satisfied
Any
any of Require or Allow criteria must be satisfied
Order Allow,Deny
Control the evaluation order of Allow and Deny directives.
Allow,Deny
First, all Allow directives are evaluated; at
least one must match, or the request is
rejected. Next, all Deny directives are
evaluated; if any matches, the request is
rejected. Last, any requests which do not
match an Allow or a Deny directive are
denied
Deny,Allow
First, all Deny directives are evaluated; if
any match, the request is denied unless it
also matches an Allow directive. Any
requests which do not match any Allow or
Deny directives are permitted
</Directory>
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
108/126
Apache SSL/TLS configuration
ApacheSSL/TLSconfiguration
httpd.conf
SSL/TLS directives (module mod_ssl)
SSLCertificateFile \
/etc/httpd/conf/ssl.crt/server.crt
SSL server certificate
SSLCertificateKeyFile \
/etc/httpd/conf/ssl.key/server.key
SSL server private key (for security reasons, this file
should be readable only by root)
SSLCACertificatePath \
/usr/local/apache2/conf/ssl.crt/
Directory containing the certificates of CAs. Files in this
directory are PEM-encoded and accessed via symlinks to
hash filenames
SSLCACertificateFile \
/usr/local/apache2/conf/ssl.crt/ca-bundle.crt
Certificates of CAs. Certificates are PEM-encoded and
concatenated in a single bundle file in order of preference
SSLCertificateChainFile \
/usr/local/apache2/conf/ssl.crt/ca.crt
Certificate chain of the CAs. Certificates are PEM-encoded
and concatenated from the issuing CA certificate of the
server certificate to the root CA certificate. Optional
SSLEngine on
Enable the SSL/TLS Protocol Engine
SSLProtocol +SSLv3 +TLSv1.2
SSL protocol flavors that the client can use to connect to
server. Possible values are:
SSLv2
(deprecated)
SSLv3
TLSv1
TLSv1.1
TLSv1.2
All
(all the above protocols)
SSLCipherSuite \
ALL:!aDH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP
Cipher suite available for the SSL handshake (key
exchange algorithms, authentication algorithms,
cipher/encryption algorithms, MAC digest algorithms)
ServerTokens Full
Server response header field to send back to client.
Possible values are:
Prod
sends Server: Apache
Major
sends Server: Apache/2
Minor
sends Server: Apache/2.4
Minimal sends Server: Apache/2.4.2
OS
sends Server: Apache/2.4.2 (Unix)
Full
(or not specified) sends
Server: Apache/2.4.2 (Unix) PHP/4.2.2 MyMod/1.2
ServerSignature Off
Trailing footer line on server-generated documents.
Possible values are:
Off
no footer line (default)
On
server version number and ServerName
EMail
as above, plus a mailto link to ServerAdmin
SSLVerifyClient none
Certificate verification level for client authentication.
Possible values are:
none
no client certificate is required
TraceEnable on
Linux & LPIC Quick Reference Guide
require
the client needs to present a valid
certificate
optional
the client may present a valid
certificate (this option is unused
as it doesn't work on all browsers)
optional_no_ca
the client may present a valid
certificate but it doesn't need to
be successfully verifiable (this
option has not much purpose and
is used only for SSL testing)
Enable TRACE requests
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
109/126
OpenSSL
OpenSSL
openssl x509 -text -in certif.crt -noout
Read a certificate
openssl req -text -in request.csr -noout
Read a Certificate Signing Request
openssl req -new -key private.key -out request.csr
Generate a Certificate Signing Request (in PEM
format) for the public key of a key pair
openssl req -new -nodes -keyout private.key \
-out request.csr -newkey rsa:2048
Create a 2048-bit RSA key pair and generate a
Certificate Signing Request for it
openssl req -x509 -newkey rsa:2048 -nodes \
-keyout private.key -out certif.crt -days validity
Generate a new CA private key, create a 2048-bit
RSA key pair and generate a CSR for it
openssl ca -config ca.conf -in request.csr \
-out certif.crt -days validity -verbose
Sign a CSR (to generate a self-signed certificate,
the steps are creating a CSR and signing it)
openssl ca -config ca.conf -gencrl -revoke certif.crt \
-crl_reason why
Revoke a certificate
openssl ca -config ca.conf -gencrl -out crlist.crl
Generate a Certificate Revocation List containing
all revoked certificates so far
openssl x509 -in certif.pem -outform DER \
-out certif.der
Convert a certificate from PEM to DER
openssl pkcs12 -export -in certif.pem \
-inkey private.key -out certif.pfx -name friendlyname
Convert a certificate from PEM to PKCS#12
including the private key
cat cert.crt cert.key > cert.pem
Create a PEM certificate from CRT and private key
openssl dgst -hashfunction -out file.hash file
Generate the digest of a file
openssl dgst -hashfunction file | cmp -b file.hash
Verify the digest of a file (if there is no output,
then digest verification is successful)
openssl dgst -hashfunction -sign private.key \
-out file.sig file
Generate the signature of a file
openssl dgst -hashfunction -verify public.key \
-signature file.sig file
Verify the signature of a file
openssl enc -e -cipher -in file -out file.enc -salt
Encrypt a file
openssl enc -d -cipher -in file.enc -out file
Decrypt a file
openssl genpkey -algorithm RSA -cipher 3des \
-pkeyopt rsa_keygen_bits:2048 -out key.pem
Generate a 2048-bit RSA key pair protected by
TripleDES passphrase
openssl genrsa -des3 -out key.pem 2048
Generate a 2048-bit RSA key pair protected by
TripleDES passphrase (older versions of OpenSSL)
openssl pkey -text -in private.key -noout
Examine a private key
openssl rsa -text -in private.key -noout
Examine a private key
(older versions of OpenSSL)
openssl pkey -in old.key -out new.key -cipher
Change the passphrase of a private key
openssl rsa -in old.key -out new.key -cipher
Change the passphrase of a private key
(older versions of OpenSSL)
openssl pkey -in old.key -out new.key
Remove the passphrase from a private key
1. openssl s_client -connect www.website.com:443 > tmpfile
Retrieve and inspect a SSL certificate from a
website
2.
CTRL
3. openssl x509 -in tmpfile -text
openssl list-message-digest-commands
List all available hash functions
openssl list-cipher-commands
List all available ciphers
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
110/126
CA.pl
CA.pl
CA.pl -newca
Create a Certification Authority hierarchy
CA.pl -newreq
Generate a Certificate Signing Request
CA.pl -signreq
Sign a Certificate Signing Request
CA.pl -pkcs12 "Certificate name"
Generate a PKCS#12 certificate from a Certificate Signing Request
CA.pl -newcert
Generate a self-signed certificate
CA.pl -newreq-nodes
Generate a Certificate Signing Request, with unencrypted private key
(this is necessary for use in servers, because the private key is accessed in
non-interactive mode i.e. without passphrase typing)
CA.pl -verify
Verify a certificate against the Certification Authority certificate for "demoCA"
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
111/126
Samba
Samba
Samba is a cross-platform implementation of Microsoft's SMB (Server Message Block) protocol for file and printer sharing.
SMB is sometimes also referred to as CIFS (Common Internet File System).
WINS (Windows Internet Name Service) is a name service used to translate NetBIOS names to IP addresses.
Ports used:
TCP 137
TCP 138
TCP 139
UDP
name service requests and responses
datagram services e.g. server announcements
file and printer sharing
registration and translation of NetBIOS names, network browsing
smbd
Server Message Block daemon. Provides SMB file and printer sharing, browser services, user authentication,
and resource lock. An extra copy of this daemon runs for each client connected to the server
nmbd
NetBIOS Name Service daemon. Handles NetBIOS name lookups, WINS requests, list browsing and elections.
An extra copy of this daemon runs if Samba functions as a WINS server.
Another extra copy of this daemon runs if DNS is used to translate NetBIOS names
/etc/smb/lmhosts
Samba NetBIOS hosts file
/etc/smb/netlogon
User logon directory
mount.cifs //smbserver/share1 /mnt/shares/sh1 \
-o auto,credentials=/etc/smbcreds
Mount a Samba share on a Linux filesystem, using the CIFS
filesystem interface.
Access is checked upon a credentials file /etc/smbcreds
(should be readable only by root) formatted as follows:
username = jdoe
password = jd03s3cr3t
smbmount //smbserver/share1 /mnt/shares/sh1 \
-o username=jdoe
Mount a Samba share as user jdoe
smbstatus
Display current information about shares, clients
connections, and locked files
smbclient //smbserver/share1
Access a Samba share on a server (with a FTP-like interface)
smbclient -L //smbserver -W WORKGROUP -U user
List the Samba resources available on a server, belonging to
the specified workgroup and accessible to the specified user
cat msg.txt | smbclient -M client -U user
Show a message popup on the client machine (using the
WinPopup protocol)
smbpasswd jdoe
Change the Samba password of the specified user
smbpasswd -a ksmith
Create a new Samba user and set his password
nmblookup smbserver
Look up the NetBIOS name of a server and map it to an IP
address
nmblookup -U winsserver -R WORKGROUP#1B
Query recursively a WINS server for the Domain Master
Browser for the specified workgroup
nmblookup -U winsserver -R WORKGROUP#1D
Query recursively a WINS server for the Domain Controller
for the specified workgroup
testparm
Check for errors in the Samba configuration file
net
Tool for administration of Samba and remote CIFS servers
net rpc shutdown -r -S smbserver -U root%password
Reboot a CIFS server
net rpc service list -S smbserver
List available service on a CIFS server
net status sessions
Show active Samba sessions
net status shares
Show Samba shares
net rpc info
Show information about the domain
net groupmap list
Show group mappings between Samba and Windows
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
112/126
Samba configuration
Sambaconfiguration
/etc/smb/smb.conf
[global]
Samba configuration
Global server settings: defines parameters applicable for the whole
Samba server and sets the defaults that will be used for the
parameters not mentioned in other sections
workgroup = MYWORKGROUP
Make Samba join the specified workgroup
server string = Linux Samba Server %L
Describe server to the clients
hosts allow = 10.9.9.0/255.255.255.0
Allow only the specified machines to connect to the server
security = user
Set up user-level authentication
encrypt passwords = yes
Use encrypted passwords
smb passwd file = /etc/smb/smbpasswd
Refer to the specified password file for user authentication.
A new user's password will need to be set both in Linux and Samba by
using these commands from shell prompt:
passwd newuser
smbpasswd newuser
unix password sync = yes
When the password of a client user (e.g. under Windows) is changed,
change the Linux and Samba password too
username map = /etc/smb/smbusers
Map each Samba server user name to client user name(s).
The file /etc/smb/smbusers is structured as follows:
root = Administrator Admin
jdoe = "John Doe"
kgreen = "Kim Green"
netbios name = Mysambabox
netbios aliases = Mysambabox1
Set NetBIOS name and alias
wins support = yes
Make Samba play the role of a WINS server.
Note: There should be only one WINS server on a network
logon server = yes
Enable logon support.
Logon script parameters will be defined in a [netlogon] section
log file = /var/log/samba/log.%m
Use a separate logfile for each machine that connects
max log size = 1000
Maximum size of each logfile, in Kb
syslog only = no
Whether to log only via Syslog
syslog = 0
Log everything to the logfiles /var/log/smb/log.smbd and
/var/log/smb/log.nmbd, and log a minimum amount of information
to Syslog. This parameter can be set to a higher value to have Syslog
log more information
panic action = \
/usr/share/samba/panic-action %d
Mail a backtrace to the sysadmin in case Samba crashes
[netlogon]
comment = Netlogon for Windows clients
path = /home/netlogon
browseable = no
guest ok = no
writeable = no
logon script = %U.bat
Section defining a logon script.
Specifies a per-user script e.g. /home/netlogon/jdoe.bat will be
called when user jdoe logs in. It is also possible to specify a perclientname script %m.bat, which will be called when a specific machine
logs in.
Guest access to the service (i.e. access without entering a password)
is disabled
[Canon LaserJet 3]
printer name = lp
comment = Canon LaserJet 3 main printer
path = /var/spool/lpd/samba
printable = yes
writeable = no
Section defining a printer accessible via the network
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
113/126
Samba shares
Sambashares
/etc/smb/smb.conf
[public]
Samba configuration
Section defining a public share accessible on read/write by anyone
comment = Public Storage on %L
Describe the public share to users
path = /home/samba
Path of the public share on the server
browsable = yes
Whether to show the public share when browsing
writeable = yes
Whether to allow all users to write in this directory
[homes]
Section enabling users that have an account and a home directory
on the Samba server to access it and modify its contents from a
Samba client.
The path variable is not set, by default is path=/home/%S
comment = %U's home directory on %L from %m
Describe the share to the user
browseable = no
Whether to show the homes share when browsing
writeable = yes
Whether to allow the user to write in his home directory
[foobar]
Section defining a specific share
path = /foobar
comment = Share Foobar on %L from %m
browsable = yes
writeable = yes
valid users = jdoe, kgreen, +geeks
Allow access only to users jdoe and kgreen, and local group geeks
invalid users = csmith
Deny access to user csmith
read list = bcameron
Allow read-only access to user bcameron
write list = fcastle
Allow read-write access to user fcastle
Samba share access
User-level authentication
[global]
security = user
Set up user-level authentication
guest account = nobody
Map the guest account to the system user nobody (default)
map to guest = Never
Specify how incoming requests are mapped to the guest account:
Bad User
redirect from an invalid user to guest account on server
Bad Password
redirect from an invalid password to guest account on server
Never
reject unauthenticated users
Server-level authentication
[global]
security = server
password server = srv1 srv2
Set up server-level authentication
Authenticate to server srv1, or to server srv2 if srv1 is unavailable
Domain-level authentication
[global]
security = ADS
realm = KRB_REALM
Set up domain-level authentication as an Active Directory member server
Join the specified realm.
Kerberos must be installed and an administrator account must be created:
net ads join -U Administrator%password
Share-level authentication
[global]
security = share
[foobar]
path = /foobar
username = foobaruser
only user = yes
Linux & LPIC Quick Reference Guide
Set up share-level authentication
Define a share accessible to any user which can supply foobaruser's password.
The user foobaruser must be created on the system:
useradd -c "Foobar account" -d /tmp -m -s /sbin/nologin foobaruser
and added to the Samba password file:
smbpasswd -a foobaruser
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
114/126
Samba macros
Sambamacros
Samba macros
%S
Username
%U
Session username (the username that the client requested,
not necessarily the same as the one he got)
%G
Primary group of session username
%S
Name of the current service, if any
%h
Samba server hostname
%P
Root directory of the current service, if any
%M
Client hostname
%u
Username of the current service, if any
Primary group name of username
%L
The substitutes below apply only to the
configuration options that are used when a
connection has been established:
NetBIOS name of the server
%g
%m
NetBIOS name of the client
%H
Home directory of username
%d
Process ID of the current server process
%N
%a
Architecture of remote machine
%I
IP address of client machine
Name of the NIS home directory server as
obtained from the NIS auto.map entry.
Same as %L if Samba was not compiled with
the --with-automount option
%i
Local IP address to which a client connected
%p
%T
Current date and time
%D
Domain or workgroup of the current user
Path of service's home directory as obtained
from the NIS auto.map entry. The NIS
auto.map entry is split up as %N:%p
%w
Winbind separator
%$(var)
Value of the environment variable var
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
115/126
NFS
NFS
A Network File System (NFS) server makes filesystems available to clients for mounting.
The portmapper is needed by NFS to map incoming TCP/IP connections to the appropriate NFS RPC calls. Some Linux
distributions use rpcbind instead of the portmapper.
For security, the TCP Wrapper should be configured to limit access to the portmapper to NFS clients only:
file /etc/hosts.deny should contain portmap: ALL
file /etc/hosts.allow should contain portmap: IP_addresses_of_clients
NFS handles user permissions across systems by considering users with same UID and username as the same user.
Group permission is evaluated similarly, by GID and groupname.
rpc.nfsd
rpc.mountd
rpc.lockd
rpc.statd
NFS daemons
/etc/exports
List of the filesystems to be exported (via the command exportfs)
/var/lib/nfs/xtab
List of exported filesystems, maintained by exportfs
/proc/fs/nfs/exports
Kernel export table (can be examined via the command cat)
exportfs -ra
Export or reexport all directories.
When exporting, fills the kernel export table /proc/fs/nfs/exports.
When reexporting, removes those entries in /var/lib/nfs/xtab that are
deleted from /etc/exports (therefore synchronizing the two files), and
removes those entries from /proc/fs/nfs/exports that are no longer valid
exportfs -ua
Unexport all directories.
Removes from /proc/fs/nfs/exports all those entries that are listed in
/var/lib/nfs/xtab, and clears the latter file
showmount
Show the remote client hosts currently having active mounts
showmount --directories
Show the directories currently mounted by a remote client host
showmount --exports
Show the filesystems currently exported i.e. the active export list
showmount --all
Show both remote client hosts and directories
showmount -e nfsserver
Show the shares a NFS server has available for mounting
mount -t nfs nfsserver:/share /usr
Command to be run on a client to mount locally a remote NFS share.
NFS shares accessed frequently should be added to /etc/fstab :
nfsserver:/share /usr nfs intr 0 0
rpcinfo -p nfsserver
Probe the portmapper on a NFS server and display the list of all registered
RPC services there
rpcinfo -t nfsserver nfs
Test a NFS connection by sending a null pseudo request (using TCP)
rpcinfo -u nfsserver nfs
Test a NFS connection by sending a null pseudo request (using UDP)
nfsstat
Display NFS/RPC client/server statistics.
NFS
Options:
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
RPC
both
server
-sn
-sr
-s
client
-cn
-cr
-c
both
-n
-r
-nr
Daniele Raffo
www.crans.org/~raffo
116/126
/etc/exports
/etc/exports
/etc/exports
/export/
/export/
/home/ftp/pub
/home/crew
filesystem
client
identity
client
options
10.3.3.3(rw)
*(ro,sync)
client1(rw) *.example.org(ro)
@FOOBARWORKGROUP(rw) (ro)
Filesystem on the NFS server to be exported to clients
Client systems allowed to access the exported directory.
Can be identified by hostname, IP address, wildcard, subnet, or @NIS workgroup.
Multiple client systems can be listed, and each one can have different options
ro
Read-only access (default)
rw
Read and write access. The client may choose to mount read-only anyway
sync
Reply to requests only after the changes made by these requests have been committed to
stable storage
async
Reply to requests without waiting that changes are committed to stable storage.
Improves performances but might cause loss or corruption of data if server crashes
root_squash
Requests by user root on client will be done as user nobody on server (default)
no_root_squash
Requests by user root on client will be done as same user root on server
all_squash
Requests by a non-root user on client will be done as user nobody on server
no_all_squash
Requests by a non-root user on client will be attempted as same user on server (default)
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
117/126
DHCP
DHCP
A DHCP (Dynamic Host Configuration Protocol) server listens for requests on UDP port 67 and answers to UDP port 68.
The assignment of an IP address to a host is done through a sequence of DHCP messages initiated by the client host:
DHCP Discover, DHCP Offer, DHCP Request, DHCP Acknowledgment.
Because DHCP Discover messages are broadcast and therefore not routed outside a LAN, a DHCP relay agent is necessary
for those clients situated outside the DHCP server's LAN. The DHCP relay agent listens to DHCP Discover messages and
relays them in unicast to the DHCP server.
/etc/dhcpd.conf
/etc/sysconfig/dhcrelay
Configuration file for the DHCP server
(SUSE)
Configuration file for the DHCP relay agent
/var/lib/dhcpd/dhcpd.leases
DHCP current leases
/etc/dhcpd.conf
option
option
option
option
option
domain-name-servers 10.2.2.2;
smtp-servers 10.3.3.3;
pop-servers 10.4.4.4;
time-servers 10.5.5.5;
nntp-servers 10.6.6.6;
Global parameters for DNS, mail, NTP, and news servers
specification
shared-network geek-net {
Definition of a network
default-lease-time 86400;
Time, in seconds, that will be assigned to a lease if a client
does not ask for a specific expiration time
max-lease-time 172800;
Maximum time, in seconds, that can be assigned to a
lease if a client asks for a specific expiration time
option routers 10.0.3.252;
option broadcast-address 10.0.3.255;
subnet 10.0.3.0 netmask 255.255.255.128 {
range 10.0.3.1 10.0.3.101;
}
subnet 10.0.3.128 netmask 255.255.255.128 {
range 10.0.3.129 10.0.3.229;
}
group {
Definition of a group
option routers 10.0.17.252;
option broadcast-address 10.0.17.255;
netmask 255.255.255.0;
host linuxbox1 {
hardware ethernet AA:BB:CC:DD:EE:FF;
fixed-address 10.0.17.42;
option host-name "linuxbox1";
}
host linuxbox2 {
hardware ethernet 33:44:55:66:77:88;
fixed-address 10.0.17.66;
option host-name "linuxbox2";
}
Linux & LPIC Quick Reference Guide
Definition of different subnets in the network, with
specification of different ranges of IP addresses that will be
leased to clients depending on the client's subnet
3rd ed.
2015-07
Definition of different hosts to whom static IP addresses
will be assigned to, depending on their MAC address
Daniele Raffo
www.crans.org/~raffo
118/126
PAM
PAM
PAM (Pluggable Authentication Modules) is an abstraction layer that allows applications to use authentication methods while
being implementation-agnostic.
/etc/pam.d/service
/etc/pam.conf
PAM configuration for service
(obsolete)
PAM configuration for all services
ldd /usr/sbin/service | grep libpam
Check if service is enabled to use PAM
/etc/pam.d/service
auth
auth
auth
auth
account
session
session
password
type
control
requisite
required
required
required
required
required
optional
required
pam_securetty.so
pam_nologin.so
pam_env.so
pam_unix.so nullok
pam_unix.so
pam_unix.so
pam_lastlog.so
pam_unix.so nullok obscure min=4 max=8
auth
Authentication module to verify user identity and group membership
account
Authorization module to determine user's right to access a resource (other than his identity)
password
Module to update an user's authentication credentials
session
Module (run at end and beginning of an user session) to set up the user environment
optional
Module is not critical to the success or failure of service
sufficient
If this module successes, and no previous module has failed, module stack processing ends
successfully. If this module fails, it is non-fatal and processing of the stack continues
required
If this module fails, processing of the stack continues until the end, and service fails
requisite
If this module fails, service fails and control returns to the application that invoked service
include
Include modules from another PAM service file
PAM module and its options, e.g.:
module
pam_unix.so
Standard UNIX authentication module via /etc/passwd and /etc/shadow
pam_nis.so
Module for authentication via NIS
pam_ldap.so
Module for authentication via LDAP
pam_fshadow.so
Module for authentication against an alternative shadow passwords file
pam_cracklib.so
Module for password strength policies (e.g. length, case, max n of retries)
pam_limits.so
Module for system policies and system resource usage limits
pam_listfile.so
Module to deny or allow the service based on an arbitrary text file
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
119/126
LDAP
LDAP
LDAP (Lightweight Directory Access Protocol) is a simplified version of the X.500 standard and uses TCP port 389.
LDAP permits to organize hierarchically a database of entries, each one of which is identified by an unique DN (Distinguished
Name). Each DN has a set of attributes, each one of which has a value. An attribute may appear multiple times.
Most frequently used LDAP attributes
Attribute
Example
Meaning
dn
dn: cn=John Doe,dc=example,dc=org
Distinguished Name
(not an attribute; identifies the entry)
dc
dc=example,dc=org
Domain Component
cn
cn: John Doe
Common Name
givenName
givenName: John
Firstname
sn
sn: Doe
Surname
mail
mail: [email protected]
Email address
telephoneNumber
telephoneNumber: +1 505 1234 567
Telephone number
uid
uid: jdoe
User ID
c: US
Country code
l: San Francisco
Locality
st
st: California
State or province
street
street: 42, Penguin road
Street
o: Example Corporation
Organization
ou
ou: IT Dept
Organizational Unit
manager
manager: cn=Kim Green,dc=example,dc=org
Manager
ldapsearch -H ldap://ldapserver.example.org \
-s base -b "ou=people,dc=example,dc=com" \
"(sn=Doe)" cn sn telephoneNumber
Query the specified LDAP server for entries where
surname=Doe, and print common name, surname, and
telephone number of the resulting entries.
Output is shown in LDIF
ldappasswd -x -D "cn=Admin,dc=example,dc=org" \
-W -S "uid=jdoe,ou=IT Dept,dc=example,dc=org"
Authenticating as Admin, change the password of user jdoe in
the OU called IT Dept, on example.org
ldapmodify -b -r -f /tmp/mods.ldif
Modify an entry according to the LDIF file /tmp/mods.ldif
ldapadd -h ldapserver.example.org \
-D "cn=Admin" -W -f /tmp/mods.ldif
Authenticating as Admin, add an entry by adding the content
of the LDIF file /tmp/mods.ldif to the directory.
Actually invokes the command ldapmodify -a
ldapdelete -v "uid=jdoe,dc=example,dc=org" \
-D "cn=Admin,dc=example,dc=org" -W
Authenticating as Admin, delete the entry of user jdoe
LDIF (LDAP Data Interchange Format)
dn: cn=John Doe, dc=example, dc=org
changetype: modify
replace: mail
mail:
[email protected]add: jpegPhoto
jpegPhoto:< file://tmp/jdoe.jpg
delete: description
-
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
This LDIF file will change the email address
of jdoe, add a picture, and delete the
description attribute for the entry
Daniele Raffo
www.crans.org/~raffo
120/126
OpenLDAP
OpenLDAP
slapd
Standalone OpenLDAP daemon
/var/lib/ldap/
Files constituting the OpenLDAP database
/etc/openldap/slapd.conf
/usr/local/etc/openldap/slapd.conf
OpenLDAP configuration file
slapcat -l file.ldif
Dump the contents of an OpenLDAP database to a LDIF file
slapadd -l file.ldif
Import an OpenLDAP database from a LDIF file
slapindex
Regenerate OpenLDAP's database indexes
SSSD (the System Security Services Daemon) can be used to provide access to OpenLDAP as an authentication and identity
provider.
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
121/126
SELinux
SELinux
Security-Enhanced Linux (SELinux) is a Linux kernel security module that provides a mechanism for supporting access
control security policies.
Debian
Red Hat
Enter permissive
mode
echo 0 > /selinux/enforce
setenforce 0
Enter enforcing
mode
echo 1 > /selinux/enforce
setenforce 1
Display mode
cat /selinux/enforce
getenforce
Set mode
permanently
Mode can be configured permanently in /etc/selinux/config
(symlinked in /etc/sysconfig/selinux)
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of these two values:
# targeted - Only targeted network daemons are protected.
# strict - Full SELinux protection.
SELINUXTYPE=targeted
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
122/126
HTML components
HTMLcomponents
Tag
Attributes
<h1>...<h6> Heading
align=left|center|right|justify
Heading alignment
align=left|center|right
Line alignment
noshade
Solid rendering instead of 3D
size=npixels
Line height
width=npixels|percent%
Line width
align=left|center|right|justify
Paragraph or section alignment
charset=encoding
Character encoding of target URL
coords=left,top,right,bottom|
cx,cy,radius|x1,y1,...,xn,yn
Coordinates of region; depends on
shape
href=url
Target URL for the link
hreflang=language
Language of document at the
target URL
name=section
Name of anchor for document
bookmarking
rel|rev=alternate|stylesheet|
start|next|prev|contents|index|
glossary|copyright|chapter|
section|subsection|appendix|
help|bookmark
Relationship between this
document and the target URL
(rel) or vice versa (rev)
shape=rectangle|circle|polygon
Shape of region
target=_blank|_parent|_self|_top
Destination of target URL
type=mimetype
MIME type of target URL
<br> Line break
Line break and
carriage return
<hr> Horizontal line
<p> Paragraph
<div> Section
<span> Group
<a> Anchor
Group of elements
Hyperlink
<dl>
Definition list
<dt>
Definition term
<dd>
Definition description
Description of a
definition term
= deprecated
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
123/126
HTML text
HTMLtext
Tag
Attributes
<i> Italic
<b> Bold
<s>
<strike>
Strike-through
<u> Underlined
Strike-through text
Underlined text
<big> Bigger
<small> Smaller
<sub> Subscript
<sup> Superscript
<tt> Teletype
Monospaced text
<em> Emphasized
<strong> Strong
<del> Deleted
<ins> Inserted
Deleted/inserted text
<pre> Preformatted
<code> Code
Source code text
<samp> Sample
Sample code text
<kbd> Keyboard
Keyboard key
<var> Variable
Variable name
<cite> Citation
Citation block
<blockquote> Quotation
<q> Short quotation
<address> Address
cite=url
URL to document explaining
deletion/insertion
datetime=yyyy-mm-dd
When the text was deleted/inserted
width=ncharacters
Max number of characters per line
cite=url
URL to document containing the quote
Address block
<abbr> Abbreviation
<acronym> Acronym
<dfn> Definition
<font> Font
Definition term
Font
<bdo> Bidirectional override
<xmp> XMP
other tags
color=rgb(r,g,b)|#rrggbb|color
Text color
face=fontname
Text font
size=[1...7]|[-6...+6]
Text size
dir=ltr|rtl
Direction of text: left-to-right or rightto-left
class=class|style
Class of the element
id=id
Unique ID of the element
style=styledef
Inline style definition
title=tooltip
Text of the tooltip to display
dir=ltr|rtl
Direction of text: left-to-right or rightto-left
lang=language
Language of the content
accesskey=character
Keyboard shortcut for the element
tabindex=ntab
N of tab for the element
Non-formatted text ;
ignores other HTML tags
Attributes common to
almost all other tags
= deprecated
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
124/126
HTML images
HTMLimages
Tag
<img>
Image
<map>
Image map
<area>
Area of
image map
Attributes
align=top|bottom|left|middle|right
Image alignment with respect to surrounding text
alt=alternatetext
Description of the image for text-only browsers
border=npixels
Border width around the image
height=npixels|percent%
Image height
hspace=npixels
Blank space on the left and right side of image
ismap=url
URL for server-side image map
longdesc=url
URL containing a long description of the image
src=url
URL of the image
usemap=url
URL for client-side image map
vspace=npixels
Blank space on top and bottom of image
width=npixels|percent%
Image width
id=id
Unique ID for the map tag
name=name
Unique name for the map tag
alt=alternatetext
Description of area for text-only browsers
coords=left,top,right,bottom|
cx,cy,radius|x1,y1,...,xn,yn
Coordinates of clickable area; depends on shape
href=url
Target URL of area
nohref=true|false
Excludes or includes the area from image map
shape=rectangle|circle|polygon
Shape of area
target=_blank|_parent|_self|_top
Destination of target URL
= deprecated
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
125/126
HTML tables and lists
HTMLtablesandlists
Tag
Attributes
align=left|center|right
Table alignment
bgcolor=rgb(r,g,b)|#rrggbb|color
Table background color
border=npixels
Border width
cellpadding=npixels|percent%
Space around the content of each cell
cellspacing=npixels|percent%
Space between cells
frame=void|above|below|
lhs|rhs|hsides|vsides|box|border
Visibility of sides of the table border
rules=none|groups|rows|cols|all
Horizontal or vertical divider lines
summary=summary
Summary of the table for text-only browsers
width=npixels|percent%
Table width
align=left|center|right|justify|char
Horizontal text alignment
bgcolor=rgb(r,g,b)|#rrggbb|color
Row background color
char=character
Character to align text on, if align=char
charoff=npixels|percent%
Alignment offset to first character, if align=char
valign=top|middle|bottom|baseline
Vertical text alignment
abbr=content
Abbreviated content in a cell
align=left|center|right|justify|char
Horizontal text alignment
axis=category
Cell name
bgcolor=rgb(r,g,b)|#rrggbb|color
Cell background color
char=character
Character to align text on, if align=char
charoff=npixels|percent%
Alignment offset to first character, if align=char
colspan=ncolumns
Number of columns this cell spans on
headers=headerid
Cell header information for text-only browsers
height=npixels
Cell height
nowrap
Text in cell stays on a single line
rowspan=nrows
Number of rows this cell spans on
scope=col|colgroup|row|rowgroup
Target for cell header information
valign=top|middle|bottom|baseline
Vertical text alignment
width=npixels|percent%
Cell width
compact=compact
List must be more compact
start=firstnumber
Number to start the list on
type=A|a|I|i|1
List numbers type
<ul>
Unordered list
compact=compact
List must be more compact
type=disc|square|circle
List type
<li>
List item
type=disc|square|circle|A|a|I|i|1
List item type
value=itemno
List item value
<table>
Table
<tr>
Table row
<td>
Table cell
<th>
Table header
<ol>
Ordered list
= deprecated
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo
126/126
7-bit ASCII table
7bitASCIItable
Dec
Hex
Char
Dec
Hex
NUL
Null
32
20
SOH
Start of heading
33
STX
Start of text
ETX
Char
Dec
Hex
space
64
40
21
65
34
22
"
End of text
35
23
EOT
End of transmission
36
24
ENQ
Enquiry
37
ACK
Acknowledge
BEL
BS
10
Char
Dec
Hex
Char
96
60
41
97
61
66
42
98
62
67
43
99
63
68
44
100
64
25
69
45
101
65
38
26
&
70
46
102
66
Bell
39
27
'
71
47
103
67
Backspace
40
28
72
48
104
68
TAB
Horizontal tab
41
29
73
49
105
69
LF
Line feed
42
2A
74
4A
106
6A
11
VT
Vertical tab
43
2B
75
4B
107
6B
12
FF
Form feed
44
2C
76
4C
108
6C
13
CR
Carriage return
45
2D
77
4D
109
6D
14
SO
Shift out
46
2E
78
4E
110
6E
15
SI
Shift in
47
2F
79
4F
111
6F
16
10
DLE
Data link escape
48
30
80
50
112
70
17
11
DC1
Device control 1
49
31
81
51
113
71
18
12
DC2
Device control 2
50
32
82
52
114
72
19
13
DC3
Device control 3
51
33
83
53
115
73
20
14
DC4
Device control 4
52
34
84
54
116
74
21
15
NAK
Negative ACK
53
35
85
55
117
75
22
16
SYN
Synchronous idle
54
36
86
56
118
76
23
17
ETB
End of Tx block
55
37
87
57
119
77
24
18
CAN
Cancel
56
38
88
58
120
78
25
19
EM
End of medium
57
39
89
59
121
79
26
1A
SUB
Substitute
58
3A
90
5A
122
7A
27
1B
ESC
Escape
59
3B
91
5B
123
7B
28
1C
FS
File separator
60
3C
<
92
5C
124
7C
29
1D
GS
Group separator
61
3D
93
5D
125
7D
30
1E
RS
Record separator
62
3E
>
94
5E
126
7E
31
1F
US
Unit separator
63
3F
95
5F
127
7F
DEL
Delete
Characters 0-31 and 127 are non-printable.
Linux & LPIC Quick Reference Guide
3rd ed.
2015-07
Daniele Raffo
www.crans.org/~raffo