Counts system calls and displays execution time of the calls:
strace -c dd if=/dev/urandom of=/dev/null count=1000
Runs specified program and saves to a strace.out file all system calls that the program used:
strace -o strace.out -f ./program
Creates a file of size 4MB, formats it as a swap file and attaches it as an additional swap space:
dd if=/dev/zero of=/tmp/swap.dat bs=1k count=4096
mkswap /tmp/swap.dat
swapon /tmp/swap.dat
Turns on core file dumps:
ulimit -c unlimited
Displays PID of the command cmd:
pgrep -n cmd
Displays current working directory with all symlinks replaced by their's destinations:
pwd -P
Makes gcc not to delete an assembler file which the C code was translated to. The file is placed
in the /tmp directory (ex. /tmp/ccQrSAQZ.s):
gcc -v -c main.c
Compiles an assembler file into the object file:
as -V -Qy -o main.o /tmp/ccQrSAQZ.s
Lists all opened files in the operating system:
lsof
Lists all opened by a process of specified PID files in the operating system:
lsof -p 1234
Displays processes that have specified file opened:
fuser some_file.txt
Kills all processes that have specified file opened:
fuser -k -KILL some_file.txt
Displays all processes that have opened any files located on the specified filesystem:
fuser -m /media/flash
Prints specified file's names and attributes in symbolic and numeric formats:
stat --format="%-15n %A,%a" /dev/log dev/sda /dev/zero
Prints file last access time in seconds since 1970-01-01 00:00:00 :
stat -c %X file.txt
Prints all at least 4 character strings that are found in specified file:
strings filename.dat
Prints all at least 4 character (in bytes) UTF-8 strings that are found in specified file:
strings -eS filename.dat
Prints hexadecimal content of the file, each word is built of 16-bit, in the right column it prints
counterparted ascii characters:
xxd filename.dat
Prints hexadecimal content of the file, each word is built of 32-bit, in the right column it prints
counterparted ascii characters:
xxd -g4 filename.dat
Prints hexadecimal content of the file, each word is built of 16-bit, in the right column it does not print
counterparted ascii characters:
hexdump filename.dat
Prints hexadecimal content of the file, each word is built of 32-bit, in the right column it neither prints
counterparted ascii characters nor prints offsets in the left column:
hexdump -e '6/4 "%8x "' -e '"\n"' filename.dat
Displays shared memory objects:
ipcs -m -m
Displays shared memory objects and information about which process (PID) has created which shared memory object
and which process bound to the given object last or removed binding to it:
ipcs -p
Checking for which processes use given shared memory object ([shmid] is shared memory object's id):
ipcs -m
ipcs -m -p
lsof | head -1 ; lsof | grep [shmid]
Displays additional information about specified shared memory object:
ipcs -m -i [shmid]
Prints System V message queues that exists in the system:
ipcs -q
Displays additional information about specified message queue (msqid is the numeric identifier of the message queue):
ipcs -q -i msqid
Removes message queue of specified identifier msqid:
ipcrm -q msqid
Prints System V seaphores that exists in the system:
ipcs -s
Displays additional information about specified semaphore (semid is the numeric identifier of the semaphore):
ipcs -s -i semid
Removes semaphore of specified identifier semid:
ipcrm -s semid
Checks if process is working (if the output is empty then the process is working):
kill -0 PID
Removes shared memory object of specified identifier shmid:
ipcrm -m [shmid]
Prints pid, effective user id, real user id and the command which started the process for every process in the system:
ps -eo pid,euser,ruser,comm
Displays system call that has blocked the process on a semaphore:
ps -o wchan -p PID
Mounts POSIX queue filesystem:
sudo mount -t mqueue none /mnt/mqs
Displays detailed information about specified POSIX queue:
cd /mnt/mqs
touch myqueue
cat myqueue
To remove specified POSIX queue just remove its file from the filesystem by using rm command:
rm myqueue
ls -l /dev
The result of above command is list of all files in /dev catalog together with some info abot the files.
Each file description takes one line in the resultset. If the line for a given file starts with
a letter:
b (block), c (character), p (pipe) lub s (socket),
then this means that the file is a device (b, c) or a special file (p, s).
Dispays detailed information about specified device, including it's path in /sys/devices directory:
udevadm info --query=all --name=/dev/sda
Monitoring uevent messages (about plugging or unplugging a device):
udevadm monitor
Monitoring uevent messages that comes from kernel and refers changes in SCSI subsystem:
udevadm monitor --kernel --subsystem-match=scsi
Displays a list of SCSI devices (it looks through the sysfs filesystem: /sys):
lsscsi
Displays a list of USB devices:
lsusb
Conventions in naming devices in the system:
/dev/sd* - | hard drives (ex. /dev/sda, /dev/sdb) Main partitions on a hard drive /dev/sda are represented by files: /dev/sda1 .. /dev/sda4. If you want to create logical partitions then one of the four main partitions must be an extended partition. Logical partitions placed in the extended partition are represented by following files: /dev/sda5, /dev/sda6, ... |
---|---|
/dev/sr* - | CD and DVD drives (ex. /dev/sr0, /dev/sr1) The device files have symbolink links as follows: /dev/cdrom, /dev/cdrom1, /dev/cdrw, /dev/cdrw1, /dev/dvd, /dev/dvdrw, ... |
/dev/hd* - | PATA hard drives (ex. /dev/hda, /dev/hdb, /dev/hdc, /dev/hdd) These are an aged devices rarely occured now: |
/dev/tty*, /dev/pts/*, /dev/tty - |
Terminals
/dev/tty1 - first virtual console
In Ubuntu system you can switch from the graphical environment to n-th (n from 1 to 6) virtual console
by pressing keyboard shortcut CTRL+Fn. Next you can switch between the virtual consoles by pressing
keyboard shortcuts Alt+Fn. You can at every moment return to the graphical environment by switching to
7-th virtual console: Alt+F7.When you are logged into a virtual console then you can to switch to another virtual console by issuing following command: chvt n - (where n is a destination virtual console's number).
|
/dev/ttyS* - | RS-232 serial ports
/dev/ttyS0 - counterpart of windows' COM1,
|
/dev/ttyUSB* and /dev/ttyACM* - | USB ports
/dev/ttyUSB0, /dev/ttyUSB1, ...,
|
/dev/lp0 and /dev/lp1 - | one-direction parallel ports
/dev/lp0 - counterpart of windows' LPT1
These ports are replaced by USB ports.
|
/dev/parport0 and /dev/parport1 - | two-direction parallel ports |
/dev/dsp, /dev/audio, /dev/snd/* - | audio devices ALSA devices' files are located in /dev/snd catalog. OSS devices' files are /dev/dsp and /dev/audio. |
You can create a device with a mknod command. As a parameters to the command you must pass its type,
main number and a minor number:
sudo mknod /dev/sda1 b 8 2 - first partition of a hard disk sda
Forces kernel to reread partition table of specified device:
blockdev -rereadpt /dev/sdb
Prints byte number counting from the beginning of the disk, which the specified partition (sda2) starts at:
cat /sys/block/sda/sda2/start
Prints list hard disks' partitons with identifiers UUID associated to them and theirs types:
sudo blkid
For a VFAT partitions theirs UUID are theirs serial numbers:
To mount a partition according to its UUID, ussue following command:
mount UUID=..... /mnt/disk
Umounts / directory and mounts it again using /etc/fstab settings. It is useful when the / directory
was mounted read-only and you want to mount it with full access rights:
mount -n -o remount /
Command for checking filesystems, if they have errors or not:
fsck
It is periodically run called by the operating system.
In interactive mode you call it by passing a full path to the checked device, ex:
fsck /dev/sda5
Inspected filesystem must be umounted otherwise it could cause filesystem errors and loss of data.
There is an exception from the rule: if you have run the system in a single user mode and mounted the / filesystem
in read-only mode then you can run the fsck command for the filesystem safely.
Inspecting filesystem without attempting to repair errors found:
fsck -n
Replacing corrupted superblock with its backup copy residing in a block with specified number:
fsck -b numer
If the filesystem was created with default options, then the command below will show a list of block's numbers
that store backup copies of a superblock:
mke2fs -n
Creating and activating a swap partition:
mkswap /dev/hda5
swapon /dev/hda5
Disabling a specified swap partition:
swapoff /dev/hda5
Preparing and activating a file as a swap space:
dd if=/dev/zero of=swap_file bs=1m count=megabytes_count
mkswap swap_file
swapon swap_file
Disabling a swap partition or a swap file:
swapoff swap_partition_or_swap_file
Process of a system startup:
Kernel parameters used during booting can be found in a file /proc/cmdline:
cat /proc/cmdline
ex.:
BOOT_IMAGE=/boot/vmlinuz-3.2.0-90-generic-pae root=UUID=4b43b290-bce6-478e-a245-997995a92c13 ro quiet splash vt.handoff=7
Parameter ro is used for the command fsck to safely inspect a root filesystem during booting.
When the checking will be completed then the init process will remount root filesystem to have full access rights.
GRUB - command line (it is accessed by pressing 'c' key in the GRUB's menu):
ls - | prints devices and disk's partitions found. Msdos keyword in the partition name means that there is a MBR partition table on the disk. Gpt keyword in the partition name means that there is a GPT partition table on the disk. |
---|---|
ls -l - | prints detailed information on devices found, ex. UUID ids, filesystems types, last modification time, etc. |
echo $root - | prints main partition's name |
ls ($root)/ lub ls (hd0,msdos1)/ - | prints file list on the main partition |
ls ($root)/boot - | prints /boot directory content on the main partition |
set - | displays list of GRUB variables. One of the most important variables is a $prefix variable. It holds the location of GRUB's configuration and a list of files it is accessing. |
Command for generating a GRUB's configuration. It dumps it to the standrad output:
grub-mkconfig
Saving generated configuration to a specified file:
grub-mkconfig -o /boot/grub/grub.cfg
Prints the system runlevel:
who -r
Guessing the kind of working init process in the system:
man 8 init
Prints a list of active units (services) in the system:
syssystemctl list-units
Writes to a system log a specified message and its type:
logger -p daemon.info It is a message written to a system log
Prints groups that current user belongs to:
groups
Lists all processes working in the system including threads:
ps axm -o pid,tid,command
Monitoring specified processes:
top -p PID_1 -p PID_2 ...
Measures the processor time that the command consumed:
/usr/bin/time polecenie
Prints the system uptime and the average processor load:
uptime
Prints information on major and minor processes' page faults:
ps -o pid,min_flt,maj_flt,command
Monitoring memory and processor usage in 5-seconds interval:
vmstat 5
Prints statistics of input/output devices and processor usage:
iostat
Prints statistics of only input/output devices usage:
iostat -d
Prints detailed information on the disk's usage (together with all theirs partitons):
iostat -p ALL
Prints information on the input/output devices usage for all threads running in the system.
The results are presented the same as for top command:
iotop
Displays processor usage statistics in 1 second interval in four steps:
sar 1 4
Displays virtual memory usage statistics in 1 second interval in four steps:
sar -r 1 4
Monitors paging and virtual memory operations in 1 second interval in four steps:
sar -B 1 4
Displays block devices usage statistics in 1 second interval in one step (-p option causes that in result data
there are devices' names instead of theirs major and minor numbers):
sar -d -p 1 1
Displays ethernet devices usage statistics in 1 second interval in four steps:
sar -n DEV 1 4
Displays ethernet devices errors statistics in 1 second interval in four steps:
sar -n EDEV 1 4
Displays NFS filesystem client statistics in 1 second interval in four steps:
sar -n NFS 1 4
Displays NFS filesystem server statistics in 1 second interval in four steps:
sar -n NFSD 1 4
Displays sockets statistics in 1 second interval in four steps:
sar -n SOCK 1 4
Displays all DEV, EDEV, NFS, NFSD, SOCK statistics in 1 second interval in one step:
sar -n ALL 1 1
Prints detailed information about x86 (Intel/AMD) processor installed in the system:
x86info
Prints statistics that describe source code efficiency coming within cache memory usage:
valgrind --tool=cachegrind ./a.out params
Prints dynamic libraries functions calls list, sorted by waiting time for a call:
ltrace -c command
ex.:
ltrace -c dd if=/dev/urandom of=/dev/null count=1000
Displays detailed information (including execution time, -T parameter) about specified (-e parameter)
shared library's functions:
ltrace -T -e read,write dd if=/dev/urandom of=/dev/null count=1
Lists system calls sorted by waiting time of the call:
strace -c command
ex.:
strace -c dd if=/dev/urandom of=/dev/null count=1000
Attaches strace program to a specified running process:
strace -ttt -p PID
Profiling the specified program (the program must be compiled with -pg parameter and without any optimalisation flags):
gprof ./progname
As above, but it does not display particular fields descriptions: gprof -b ./progname
Counts how many times particular rows of source code were executed:
gcc -fprofile-arcs -ftest-coverage test.c
./a.out
gcov test.c
less test.c.gcov
rm test.c.gcov test.gc*
Displays a list of processes that have ports in use or that are listening on the ones (-n parameers disables
host resolving):
sudo lsof -i -n
Displays a process that has specfied port in use:
sudo lsof -n -i:port
Displays all processes that are listening on TCP ports:
sudo lsof -iTCP -sTCP:LISTEN
Listens on the specified port:
netcat -l -p port
Displays a list of domain sockets that are currently in use together with processes that use them:
lsof -U
If a program needs during compilation the kernel headers (causes compilation error: Kernel Headers Not Found)
then you have to install following package:
sudo apt-get install linux-headers-amd64 (for a 64-bit operating system)
Lists all objects and functions that are provided by a specified static library:
nm library_name.a
Lists all shared libraries that are required by a specified program:
ldd program_name
Lists all shared libraries that specified program was built with but which are not used by it:
ldd -u program_name
Compilation and making of the shared object:
gcc -shared -fpic -o mylib.so mylib1.c mylib2.c
Analysis of the memory that are used by specified program:
valgrind --tool=memcheck ./program_name
Examination of the specified program about memory leaks:
valgrind --quiet --leak-check=full ./program_name
Examination of the specified program about memory usage by its functions:
valgrind --tool=massif ./nazwa_programu
Displays information about selected window:
xwininfo
Displays X server events:
xev
Displays a list of all input devices:
xinput --list
Displays properties of the input device with specified identifier ID:
xinput --list-props ID
Monitoring the events sent by a D-Bus service in a system mode:
dbus-monitor --system
Monitoring the events sent by a D-Bus service in a session mode:
dbus-monitor --session
Scans the specified disk drive for a bad blocks:
sudo badblocks -n /dev/sda
Displays all libraries that are provided by a pkg-config command:
pkg-config --list-all
That is how to inspect computer's hardware:
Processor: | cat /proc/cpuinfo |
---|---|
Hardware: |
sudo dmidecode sudo lshw sudo lshw -c display (only graphic cards) |
Sample source files that are in use below:
------------------------------------------------------------------------
hello.c
------------------------------------------------------------------------
#include <stdlib.h>
#include <stdio.h>
void message(void);
int main(void) {
printf("Hello world\n");
message();
return 0;
}
------------------------------------------------------------------------
dynamic_library.c
------------------------------------------------------------------------
#include <stdlib.h>
#include <stdio.h>
void message(void) {
printf("Hello world from dynamic_library.so\n");
}
------------------------------------------------------------------------
------------------------------------------------------------------------
Compilation with displaying detailed information about program/static library being compiled and linked:
gcc -v -o hello hello.c
Displays dependencies (required libraries) for specified program/library:
ldd hello
There are static and shared libraries. Static ones (*.a) are ar archives which contain object files (*.o).
They can be created as showed below:
ar clq libname.a file1.o file2.o file3.o ...
Static libraries' content can be extracted with command:
ar x libname.a
Compilator links a program only with that object files from the library which are needed by it.
Dynamic libraries (*.so) are not linked with the program. They are loaded to process memory during its startup
(just before calling main function). Program only contains information about shared libraries it requires
to load them and run properly.
Shared library can be built as follows:
gcc -shared -fpic -o libdynamic_library.so dynamic_library.c
Program can be built with any libraries in following way:
gcc -o hello hello.c libname.a libdynamic_library.so
or so:
gcc -o hello hello.c -L ./ -lname -ldynamic_library
Now let's compile the hello program together with shared library it needs:
gcc -shared -fpic -o libdynamic_library.so dynamic_library.c
gcc -o hello hello.c libdynamic_library.so
When we run the built application now, we sticks to following error message:
./hello: error while loading shared libraries: dynamic_library.so: cannot open shared object file: No such file or directory
To run program properly we have to apply the path to the directory with our library in system variable
LD_LIBRARY_PATH, for example:
LD_LIBRARY_PATH=. ./hello
We can also copy the library to /usr/lib or to /usr/local/lib directory.
In Ubuntu system we can alternatively create a file /etc/ld.so.conf.d/mylibraries.conf that holds
directories containing our libraries: one directory per line. Next we have to refresh the libraries cache by issuing
following command:
sudo ldconfig
Note that in order to it successfully worked the library file must start with lib prefix, ex:
libdynamic_library.
Displays information about executable elf's sections size:
size hello
Displays symbols and theirs size in the object or executable file:
nm -S hello
Displays undefined symbols in the object file:
nm -u hello.o
Removes symbols from the library file:
strip --strip-debug libname
Removes symbols from the executable file:
strip --strip-unneeded program
Displays the specified process' memory map:
pmap PID
The Makefile.in file is read and processed by the configure script in order to generate proper Makefile file.
Displays successive commands from the Makefile file without executing them:
make -n
Makes the compiler to generate warnings:
CFLAGS=-Wall ./configure