## List and manage kernel modules

# Every loaded module
lsmod

# Find one module
lsmod | grep -i nvidia

# Count loaded modules
lsmod | tail -n +2 | wc -l

# Modules sorted by memory use
lsmod | tail -n +2 | sort -k2 -rn | head

# Which modules depend on this one
lsmod | awk '$1 == "ext4" {print $4}'

# Detailed information about a module
modinfo ext4

# Just the module's file path
modinfo -n ext4

# The module's description
modinfo -d ext4

# The module's parameters
modinfo -p ext4

# The module's dependencies
modinfo -F depends ext4

# Which kernel version it was built for
modinfo -F vermagic ext4

# Is a module loaded?
lsmod | grep -qw '^nf_tables' && echo loaded

# Load a module
sudo modprobe nf_tables

# Load with a parameter
sudo modprobe usbcore autosuspend=-1

# Load, printing what it does
sudo modprobe -v nf_tables

# Dry run: show what would be loaded
sudo modprobe -n -v nf_tables

# Unload a module
sudo modprobe -r nf_tables

# Unload a module and its unused dependencies
sudo modprobe -rv nf_tables

# The older, dependency-unaware pair
sudo insmod /lib/modules/$(uname -r)/kernel/fs/ext4/ext4.ko

# Force-unload with rmmod
sudo rmmod nf_tables

# Current parameters of a loaded module
ls /sys/module/ext4/parameters/

# Read one parameter's value
cat /sys/module/usbcore/parameters/autosuspend

# Load a module at every boot
echo 'nf_tables' | sudo tee /etc/modules-load.d/nftables.conf

# Set a module parameter persistently
echo 'options usbcore autosuspend=-1' | sudo tee /etc/modprobe.d/usb.conf

# Blacklist a module so it never loads
echo 'blacklist nouveau' | sudo tee /etc/modprobe.d/blacklist-nouveau.conf

# Blacklist more firmly, by aliasing it away
echo 'install nouveau /bin/false' | sudo tee -a /etc/modprobe.d/blacklist-nouveau.conf

# Rebuild the initramfs after a blacklist change
sudo update-initramfs -u

# Rebuild on Fedora and RHEL
sudo dracut -f

# Rebuild the module dependency map
sudo depmod -a

# Which module drives a piece of hardware?
lspci -k | grep -A3 -i ethernet

# Which module drives a network interface?
ethtool -i eth0

# Modules available for the running kernel
find /lib/modules/$(uname -r) -name '*.ko*' | wc -l

# Search the available modules by name
find /lib/modules/$(uname -r) -name 'nf_tables*'

# Why did a module fail to load?
sudo dmesg -T | tail -n 20

# Is the kernel tainted by an out-of-tree module?
cat /proc/sys/kernel/tainted
