learn/linux-plus/distributions

395 differences from 70 topics, in reading order. This is the material a vendor-neutral exam exists to test, and it is the part you cannot reason your way to: the same software under a different package name, a different service name, and a different path. Each table links back to the topic that explains why the difference is there.

Linux fundamentals and the FHS

RPM familydpkg family
Examples on this examRHEL, AlmaLinux, Rocky, Fedora, openSUSE, SLESDebian, Ubuntu
Low-level toolrpmdpkg
Resolverdnf (zypper on SUSE)apt
Which package owns a pathrpm -qf PATHdpkg -S PATH
Package file extension.rpm.deb
Web server packagehttpdapache2

Reading and editing files

RHEL familyDebian family
vi present on a minimal installUsually, as vim-minimalOften not; vim.tiny when it is
nano present on a minimal installFrequently notFrequently not
Install an editordnf install nanoapt install nano
EDITOR defaultvivi, sometimes nano on Ubuntu

Users, root and sudo

RHEL familyDebian family
Admin groupwheelsudo
Grant itusermod -aG wheel samusermod -aG sudo sam
Auth log/var/log/secure/var/log/auth.log
Create a useruseradd -m samuseradd -m sam or adduser sam
Root login enabled by defaultUsually yesUbuntu locks it; Debian asks you

Reading and setting permissions

AlmaLinux 10.2Debian 13
Umask a regular user actually gets00220002
So a new file is644664
UMASK in /etc/login.defs022not set, PAM decides
USERGROUPS_ENAByesyes
HOME_MODE07000700
Extra character after the mode. for an SELinux label+ for an ACL, if present

How Linux boots

RHEL familyDebian family
GRUB config/boot/grub2/grub.cfg/boot/grub/grub.cfg
Regenerate itgrub2-mkconfig -o ...update-grub
Global settings/etc/default/grub/etc/default/grub
Build the initramfsdracut -fupdate-initramfs -u
Per-kernel entriesgrubby, /boot/loader/entries//boot/grub/grub.cfg
Commands are prefixedgrub2-grub-

The kernel and modules

RHEL familyDebian family
Module directory/lib/modules/$(uname -r)//lib/modules/$(uname -r)/
Distribution defaults/usr/lib/modprobe.d//usr/lib/modprobe.d/, reachable as /lib/modprobe.d/
Your overrides/etc/modprobe.d//etc/modprobe.d/
Load at boot/etc/modules-load.d/*.conf/etc/modules-load.d/*.conf or /etc/modules
Rebuild initramfs after a changedracut -fupdate-initramfs -u
Kernel packagekernel, kernel-corelinux-image-*

Hardware and device discovery

RHEL familyDebian family
lscpu, lsblk, free, dmesgutil-linux, procps-ngutil-linux, procps
lspci, lsusbpciutils, usbutilspciutils, usbutils
dmidecodedmidecodedmidecode
lshwlshw, often via EPELlshw
Sensorslm_sensorslm-sensors

Disks, partitions and filesystems

RHEL familyDebian family
Default root filesystemXFSext4
ext toolse2fsprogse2fsprogs
XFS toolsxfsprogs, installedxfsprogs, often not
GPT toolsgdisk, partedgdisk, parted
Default layoutLVM, usuallyPlain partitions, usually

Mounting and fstab

RHEL familyDebian family
/etc/fstab formatIdenticalIdentical
SMB support packagecifs-utilscifs-utils
NFS client packagenfs-utilsnfs-common
autofs packageautofsautofs
Default root optionsdefaults plus SELinux relabellingerrors=remount-ro

LVM

RHEL familyDebian family
LVM by default on installYesNo, unless chosen
Packagelvm2lvm2
Typical root device/dev/mapper/rhel-root/dev/sda1
Root filesystemXFS, so xfs_growfsext4, so resize2fs

RAID

RHEL familyDebian family
Packagemdadmmdadm
Config file/etc/mdadm.conf/etc/mdadm/mdadm.conf
Monitoring servicemdmonitor.servicemdmonitor.service
Rebuild initramfs after changesdracut -fupdate-initramfs -u

Configuring networking

RHEL familyUbuntu serverDebian
Owns the configNetworkManagernetplan, via systemd-networkdifupdown
Files/etc/NetworkManager/system-connections//etc/netplan/*.yaml/etc/network/interfaces
Applynmcli connection upnetplan applysystemctl restart networking
Safe-apply optionnonenetplan trynone
Interactive toolnmtuinonenone

Name resolution and DNS

RHEL familyDebianUbuntu
Writes /etc/resolv.confNetworkManagerresolvconf or nothingsystemd-resolved
/etc/resolv.conf isA real fileA real fileA symlink to the stub
Caching resolver by defaultNoNoYes, systemd-resolved
Tools packagebind-utilsdnsutilsdnsutils
Query tooldig, hostdig, hostdig, host, resolvectl

The shell environment

RHEL familyDebian family
System-wide interactive/etc/bashrc/etc/bash.bashrc
System-wide login/etc/profile, /etc/profile.d/same
Service environment files/etc/sysconfig//etc/default/
Default user PATH includes sbinYes, for root; for users on recent releasesNo, for regular users
/bin/sha symlink to bashdash

Archiving and compression

RHEL familyDebian family
tar, gzipInstalledInstalled
bzip2, xzbzip2, xzbzip2, xz-utils
zip / unzipzip, unzip, often absentzip, unzip, often absent
7-Zip7zip7zip, with p7zip-full left as a transitional package
Package format compressionzstd on recent releaseszstd on recent releases

Backup and restore

RHEL familyDebian family
rsyncrsyncrsync
ddrescueddrescue, via EPELgddrescue
Common backup toolsbacula, amanda, restic, borgbackupsame
Snapshot sourceLVM, or Btrfs on SUSELVM, or Btrfs

Virtualization

RHEL familyDebian family
Packagesqemu-kvm, libvirt, virt-installqemu-kvm, libvirt-daemon-system, virtinst
Group for unprivileged uselibvirtlibvirt, sometimes kvm
Images default to/var/lib/libvirt/images/same
Web managementCockpit, with the VM pluginCockpit, packaged separately
Container toolingPodman, defaultDocker or Podman
RHEL familyDebian family
/bin, /sbin, /libSymlinks into /usrSymlinks into /usr
Alternatives systemalternativesupdate-alternatives
Alternatives directory/etc/alternatives/etc/alternatives
ls colours broken linksYes, usually redYes, usually red

Finding files

RHEL familyDebian family
find, xargsfindutilsfindutils
locate implementationplocate, or mlocateplocate
filefilefile, often not installed
Exclusions/etc/updatedb.conf/etc/updatedb.conf

Managing users and groups

RHEL familyDebian family
Low-level tooluseradduseradd
Friendly wrappernoneadduser, deluser
Admin groupwheelsudo
Defaults/etc/login.defs, /etc/default/useraddplus /etc/adduser.conf
HOME_MODE on current releases07000700

Account files and attributes

RHEL familyDebian family
Default hashyescrypt ($y$) on 10, SHA-512 ($6$) on 9 and earlieryescrypt, $y$
Set by/etc/login.defs, PAMPAM common-password
Auth log/var/log/secure/var/log/auth.log
Admin groupwheelsudo
HOME_MODE07000700

Job control and scheduling

RHEL familyDebian family
Packagecroniecron
User crontabs/var/spool/cron//var/spool/cron/crontabs/
System/etc/crontab, /etc/cron.d/same
anacronincluded in cronieseparate anacron package
atat, often not installedat, often not installed

Packages, repositories and signing

RHEL familyDebian family
Repo config/etc/yum.repos.d/*.repo/etc/apt/sources.list.d/*
Key storerpm --import, gpg-pubkey packages/usr/share/keyrings/, signed-by=
Verify a package filerpm -K file.rpmdpkg-sig --verify, or apt's own check
Verify installed filesrpm -Vdebsums -c
Community extrasEPELalready in main, contrib, non-free
Transaction rollbackdnf history undonone

Common network services

RHEL familyDebian family
Apache package and servicehttpdapache2
Apache config root/etc/httpd//etc/apache2/
Enabling a sitedrop a .conf in conf.d/a2ensite, a symlink
Enabling a moduleLoadModule in a conf filea2enmod
MariaDB servicemariadbmariadb
Firewallfirewalldufw, or nftables directly
Extra restrictionSELinux enforcingAppArmor, more permissive

systemd units and services

RHEL familyDebian family
Apache unithttpd.serviceapache2.service
Cron unitcrond.servicecron.service
Enabled on installNo, by presetYes, usually
Environment files/etc/sysconfig//etc/default/

systemd targets, timers and the journal

RHEL familyDebian family
Journal persistent by defaultYesHistorically no; now usually yes
Journal location/var/log/journal/same
rsyslog also installedUsuallyUsually
Default target on a servermulti-user.targetmulti-user.target

Containers: the basics

RHEL familyDebian family
Default toolingPodman, in the base repositoriesDocker, from Docker's own repo
Rootless defaultYesNo
Image storage, rootful/var/lib/containers//var/lib/docker/
Image storage, rootless~/.local/share/containers/,
Composepodman-compose, or Quadletdocker compose

Container images, volumes and networks

RHEL familyDebian family
Storage, rootful/var/lib/containers/storage//var/lib/docker/
Storage, rootless~/.local/share/containers/,
Mandatory access controlSELinux, needs :z/:ZAppArmor, more permissive
Volume location/var/lib/containers/storage/volumes//var/lib/docker/volumes/

Authentication and PAM

RHEL familyDebian family
Service files/etc/pam.d/<service>/etc/pam.d/<service>
Shared stackssystem-auth, password-authcommon-auth, common-account, common-password, common-session
Where they really liveSymlinks into /etc/authselect/Regular files in /etc/pam.d/
Who generates themauthselectpam-auth-update, from /usr/share/pam-configs/
Pulling them ininclude and substack, per type@include, whole file
Expressing "any of these"sufficient[success=N default=ignore] jumps
Module directory/usr/lib64/security//usr/lib/<triplet>/security/
Password qualitypam_pwquality, in the shipped stackpam_unix obscure until libpam-pwquality is installed
Lockoutpam_faillock, via authselect enable-feature with-faillockpam_faillock, added by editing or pam-auth-update

Central identity

RHEL familyDebian family
LDAP client toolsopenldap-clientsldap-utils
LDAP servernone since RHEL 8; 389-ds-base insteadslapd
SSSDsssd, sssd-ldap, sssd-adsssd, sssd-ldap, sssd-ad
Join toolingrealmd, adclirealmd, adcli
Home directory on first loginoddjob-mkhomedir, or pam_mkhomedir from pampam_mkhomedir from libpam-modules
Rewires PAM and NSSauthselect select sssd --forcepam-auth-update
Kerberos clientkrb5-workstationkrb5-user
Samba domain membersamba-winbind, samba-winbind-clientswinbind, libnss-winbind

Logging and auditing

RHEL familyDebian family
JournalPersistent by defaultHistorically volatile; check /var/log/journal
Syslog daemonOn server installs; absent on minimal and image-based onesrsyslog, installed
How rsyslog gets messagesimjournal, reading the journalimuxsock, reading /dev/log
Catch-all text log/var/log/messages/var/log/syslog
Authentication text log/var/log/secure/var/log/auth.log
logrotate state file/var/lib/logrotate/logrotate.status/var/lib/logrotate/status
Audit packageaudit, installed and enabledauditd, not installed by default

Firewall concepts and netfilter

RHEL familyDebian familyUbuntu
Default front endfirewalldnoneufw, installed and inactive
Underlying enginenftablesnftablesnftables
iptables presentAs a compatibility shimAs a compatibility shimAs a compatibility shim
Service unitfirewalld.servicenftables.serviceufw.service
Rules survive rebootYes, permanent configOnly if you save themYes

firewalld, ufw and nftables

RHEL familyDebian family
Installed and running by defaultfirewalld, enabledDebian: none. Ubuntu: ufw, installed and inactive.
Package to installfirewalldufw, nftables
Permanent configuration/etc/firewalld/**/*.xml/etc/ufw/*.rules, /etc/nftables.conf
Unit that loads itfirewalld.serviceufw.service, nftables.service
Apply a saved changefirewall-cmd --reloadufw reload, nft -f /etc/nftables.conf
Named service definitions/usr/lib/firewalld/services//etc/ufw/applications.d/
iptables back endiptables-nft onlyiptables-nft, with iptables-legacy selectable

sudo in depth

RHEL familyDebian family
Admin groupwheelsudo
Shipped rule%wheel ALL=(ALL) ALL%sudo ALL=(ALL:ALL) ALL
Grant itusermod -aG wheel samusermod -aG sudo sam
Policy file/etc/sudoers, mode 0440/etc/sudoers, mode 0440
Drop-in directory/etc/sudoers.d, empty/etc/sudoers.d, with a README
Include directive#includedir@includedir
secure_path includes /usr/localNoYes
Log lands in/var/log/secure/var/log/auth.log
visudo editorvi, unless EDITOR says otherwiseeditor, through update-alternatives, often nano
First account gets sudoOnly if the installer's box was tickedOnly if the root password was left empty

SSH and secure remote access

RHEL familyDebian family
Server packageopenssh-serveropenssh-server
Client packageopenssh-clientsopenssh-client
Service unitsshd.servicessh.service, with sshd.service as an alias
Config file/etc/ssh/sshd_config/etc/ssh/sshd_config
Drop-in directory/etc/ssh/sshd_config.d//etc/ssh/sshd_config.d/
Algorithm selectionSystem-wide crypto policy, injected as a drop-inPackage defaults, edited in place
Firewallfirewall-cmd --add-service=sshufw allow OpenSSH

SELinux

RHEL familyDebian family
Shipped and enforcing by defaultYesNo
Default MAC systemSELinuxAppArmor
ModelLabels on every objectPaths in per-program profiles
Enforcing stategetenforceaa-status
Adjust without policyBooleansEdit the profile
Config/etc/selinux/config/etc/apparmor.d/

Hardening a system

RHEL familyDebian family
MACSELinux, enforcingAppArmor
Firewallfirewalldnftables or ufw
Sysctl drop-ins/etc/sysctl.d//etc/sysctl.d/
Secure Boot shimshim-x64shim-signed
Benchmark toolingoscap, scap-security-guideoscap, with fewer shipped profiles
Unattended patchingdnf-automaticunattended-upgrades

Password policy and MFA

RHEL familyDebian family
Defaults at creation/etc/login.defs/etc/login.defs, plus /etc/adduser.conf
PAM file to changeNever edit directly/etc/pam.d/common-password
Managed byauthselectpam-auth-update
Strength modulepam_pwquality, installedlibpam-pwquality, not installed by default
Strength defaults live in/etc/security/pwquality.conf/etc/security/pwquality.conf
Lockoutauthselect enable-feature with-faillockAdd pam_faillock lines by hand
Default hashyescrypt on 10, SHA-512 on 9yescrypt on 13

Cryptography basics

RHEL familyDebian family
Default ENCRYPT_METHODYESCRYPT on 10, SHA512 on 9 and earlierYESCRYPT, giving $y$
Where that is set/etc/login.defs/etc/login.defs
System-wide algorithm switchupdate-crypto-policiesNone; per-application
OpenSSL configuration/etc/pki/tls/openssl.cnf/etc/ssl/openssl.cnf
Hash a password by handopenssl passwd -6mkpasswd -m yescrypt, from whois
mkpasswd isA different program, from expect, that *generates* passwordsThe hashing tool
CA trust store refreshupdate-ca-trustupdate-ca-certificates

TLS certificates and ACME

RHEL familyDebian family
Trust anchors go in/etc/pki/ca-trust/source/anchors//usr/local/share/ca-certificates/
Rebuild the store withupdate-ca-trustupdate-ca-certificates
Generated bundle/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem/etc/ssl/certs/ca-certificates.crt
System-wide crypto policyupdate-crypto-policiesnone; per-application configuration
Root packageca-certificatesca-certificates

Encrypting data at rest

RHEL familyDebian family
Packagecryptsetupcryptsetup
Installer option"Encrypt my data""Guided, use entire disk and set up encrypted LVM"
Boot mapping/etc/crypttab/etc/crypttab
Network unlockClevis and TangClevis and Tang, or dropbear-initramfs
TPM enrolmentsystemd-cryptenrollsystemd-cryptenroll

Compliance, auditing and integrity

RHEL familyDebian family
Package verificationrpm -V, rpm -Vadpkg -V, debsums
What is comparedNine attributes including mode, owner, mtimeRecorded md5sums only
Config filesReported, marked cExcluded from md5sums
Trusted keysrpm -qa gpg-pubkey/etc/apt/keyrings, Signed-By:
Security erratadnf updateinfo list --securityapt list --upgradable, the Security Tracker
Benchmark contentscap-security-guide, many profilesssg-debian, fewer profiles
Scanneroscaposcap
File integrityaide, rkhunteraide, rkhunter, debsums

Your first shell script

RHEL familyDebian family
/bin/sh isbash, in POSIX modedash
Bash syntax under #!/bin/shUsually worksFails
Bash version5.x5.x
Your scripts belong in/usr/local/bin/usr/local/bin
shellcheck packageShellCheck, via EPELshellcheck

Python for sysadmins

RHEL familyDebian family
Interpreter packagepython3python3
python aliaspython-unversioned-commandpython-is-python3
venv moduleIncludedpython3-venv, installed separately
pippython3-pippython3-pip
PEP 668 enforcedYesYes
Library packagespython3-requestspython3-requests

Git: the basics

RHEL familyDebian family
Packagegitgit
/etc trackingetckeeperetckeeper
Default branch namemain, if you set itmain, if you set it
Credential helpergit-credential-libsecret, a packageSame name, shipped as source under /usr/share/doc/git/contrib; you compile it

Git branching and collaboration

RHEL familyDebian family
Packagegitgit
Default branch namemain, once you set itmain, once you set it
Credential storagegit-credential-libsecret, a packageSame name, but Debian ships only the source in contrib
SSH agentssh-agent, from lesson 43The same

Infrastructure as code concepts

RHEL familyDebian familySUSE
Unattended installKickstartPreseedAutoYaST
Config fileks.cfgpreseed.cfgautoinst.xml
Cloud first bootcloud-initcloud-initcloud-init
Image-based variantRHEL CoreOS, bootcUbuntu CoreMicroOS
Config managementAnsible, PuppetAnsible, PuppetAnsible, Salt

Ansible

RHEL familyDebian family
Control node packageansible-core, or ansible for the full collection setThe same
Managed node needsPython 3, SSHThe same
Web server packagehttpdapache2
ansible_os_familyRedHatDebian
Escalationsudo, wheel groupsudo, sudo group

Puppet and OpenTofu

RHEL familyDebian family
Puppet packagepuppet-agent, from Puppet's repopuppet-agent, or puppet from Debian
Puppet config/etc/puppetlabs/puppet/The same, or /etc/puppet/ for the Debian package
OpenTofuTheir own repo, or a release archiveThe same
Factsfacterfacter

CI/CD and GitOps

RHEL familyDebian family
Container engine in the base repospodman, and buildah for buildsdocker.io, or Docker's own repository
Rootless containers out of the boxYes, podman is rootless by defaultDocker needs deliberate rootless setup
Self-hosted runner as a servicesystemd unit, identicalsystemd unit, identical
Bind-mounting a workspaceSELinux label needed, :ZAppArmor, usually no relabel
Build image baseubi, almalinux, rockylinuxdebian, ubuntu
Installing the CLI toolingdnf, sometimes needs a vendor repoapt, sometimes needs a vendor repo

Orchestration

RHEL familyDebian family
Container engine shippedpodman, daemonless and rootless by defaultdocker.io, or Docker's own repository
Compose implementationpodman-compose, or podman kube playdocker compose
Run a container as a servicepodman generate systemd, or a Quadlet filea systemd unit calling docker run
Pod as a first-class objectYes, podman pod createNo, Docker has no pod concept
Bind-mount a host directoryneeds :Z or :z for SELinuxusually no relabel needed
Registry configuration/etc/containers/registries.conf/etc/docker/daemon.json
kubectlvendor repository, or a binaryvendor repository, or a binary

AI-assisted administration

RHEL familyDebian family
The package exists at alldnf search <name>apt-cache search <name>
The command comes from a package you haverpm -qf $(which cmd)dpkg -S $(which cmd)
What a package would installdnf repoquery -l <name>apt-file list <name>
The service is called what it says`systemctl list-unit-files \grep <name>`
The file it named is realls -l, rpm -qf <path>ls -l, dpkg -S <path>

How to troubleshoot

RHEL familyDebian family
Authentication failures/var/log/secure/var/log/auth.log
General text log/var/log/messages/var/log/syslog
The journaljournalctl, identicaljournalctl, identical
Which package owns a filerpm -qf <path>dpkg -S <path>
Has a package's file been alteredrpm -V <pkg>, always availabledebsums <pkg>, rarely installed
Recent package activityrpm -qa --last/var/log/dpkg.log
Mandatory access controlSELinux, ausearch -m AVCAppArmor, journalctl -k

Monitoring concepts

RHEL familyDebian family
SNMP agentnet-snmp, service snmpdsnmpd, service snmpd
SNMP client toolsnet-snmp-utilssnmp
MIB filesnet-snmp-libs, some non-free ones absentsnmp-mibs-downloader, disabled by default
Agent configuration/etc/snmp/snmpd.conf/etc/snmp/snmpd.conf
Local resource metricssysstat, providing sar and iostatsysstat, not installed by default
Firewall front end for UDP 161firewall-cmd --add-service=snmpufw allow 161/udp

Reading logs to find a cause

RHEL familyDebian family
Authentication and sudo/var/log/secure/var/log/auth.log
General text log/var/log/messages/var/log/syslog
Journal commandsidenticalidentical
Syslog facility for authauthprivauthpriv
Rotationlogrotate, /etc/logrotate.dlogrotate, /etc/logrotate.d
Text logs present at allrsyslog, usually installedrsyslog, absent from minimal images

Boot failures and recovery

RHEL familyDebian family
GRUB configuration source/etc/default/grub/etc/default/grub
Regenerate GRUB configgrub2-mkconfig -o /boot/grub2/grub.cfgupdate-grub
GRUB config path on UEFI/boot/efi/EFI/<distro>/grub.cfg/boot/grub/grub.cfg
Rebuild the initramfsdracut -fupdate-initramfs -u
Initramfs debug shellrd.breakbreak=
Rescue media mount point/mnt/sysimage, via chrootmount and chroot by hand
SELinux relabel after repairtouch /.autorelabelnot applicable

Filesystem and mount failures

RHEL familyDebian family
Default root filesystemXFSext4
Repair tool for the defaultxfs_repair, unmounted onlye2fsck
Dry run that only reportsxfs_repair -ne2fsck -n
Shrink supportedNo, XFS cannot shrinkYes, resize2fs when unmounted
Growxfs_growfs, while mountedresize2fs, while mounted
Backup superblock locationsxfs_db, rarely neededmke2fs -n, then e2fsck -b
Extra toolingxfsprogs, installede2fsprogs, installed

Disk space and inode problems

RHEL familyDebian family
Default root filesystemXFSext4
Inode countAllocated dynamicallyFixed at mkfs time
Can run out of inodesEffectively noYes, and it is the classic surprise
Reserved space for root5 percent on ext4 volumes5 percent, tune2fs -m to change
Report inode usedf -i, meaningful but rarely a limitdf -i, worth checking every time
Journal size controljournalctl --vacuum-*, SystemMaxUse=identical

Process and service failures

RHEL familyDebian family
systemctl and exit codesidenticalidentical
Vendor unit files/usr/lib/systemd/system/lib/systemd/system, symlinked to /usr/lib
Local overrides/etc/systemd/system, systemctl editidentical
Service starts on installNo, enable and start by handYes, the package starts it
Common denial after a config changeSELinux, ausearch -m AVCAppArmor, journalctl -k
Service account shell/sbin/nologin/usr/sbin/nologin

Hardware and kernel issues

RHEL familyDebian family
Kernel logdmesg, journalctl -kidentical
SMART toolssmartmontools, install itsmartmontools, install it
PCI and USB inventorypciutils, usbutilsidentical package names
Non-free device firmwarelinux-firmware, installed by defaultfirmware-linux-nonfree and friends, often not
Sensor readingslm_sensorslm-sensors, note the hyphen
Hardware inventorydmidecode, lshwidentical
Taint flag reference/proc/sys/kernel/taintedidentical

Network connectivity troubleshooting

RHEL familyDebian family
ip, ss, pingiproute2, identicaliproute2, identical
What configures the interfaceNetworkManagernetplan on Ubuntu, ifupdown on Debian
Change an address persistentlynmcli con modnetplan apply, or /etc/network/interfaces
Firewall front endfirewalldufw, or nftables directly
traceroute installedOften not, traceroute packageOften not, traceroute package
tcpdump installedRarely, tcpdump packageRarely, tcpdump package
Rule that produces a timeoutfirewalld drops by defaultufw drops by default

DNS and routing problems

RHEL familyDebian family
Who writes /etc/resolv.confNetworkManagersystemd-resolved on Ubuntu, resolvconf or nothing on Debian
Is it a symlinkUsually a real fileUbuntu: symlink to ../run/systemd/resolve/stub-resolv.conf
Stub resolver on 127.0.0.53Not by defaultUbuntu, by default
Query what applications getgetent hostsgetent hosts, or resolvectl query
Inspect the resolver's own view`nmcli dev show \grep DNS`
dig installedbind-utils packagednsutils or bind9-dnsutils package
Flush the cacheUsually none to flushresolvectl flush-caches

Permission and access troubleshooting

RHEL familyDebian family
nameiutil-linux, installedutil-linux, installed
getfacl / setfaclacl, not always installedacl, not always installed
ACLs enabled by defaultYes, on ext4 and xfsYes, on ext4
Mandatory access controlSELinux, enforcingAppArmor, and it denies differently
Denials logged toauditd, ausearch -m AVCdmesg, or journalctl -k

Security and service access problems

RHEL familyDebian family
Mandatory access controlSELinux, enforcing by defaultAppArmor, enabled by default
Is it ongetenforce, sestatusaa-status
Where a denial is recordedauditd, ausearch -m AVCkernel log, `journalctl -k \
Scope of a profileEvery subject and object, by labelPer program, by path
Repository signing keys/etc/pki/rpm-gpg, rpm --import/etc/apt/keyrings, signed-by in the source
System CA trust store/etc/pki/ca-trust/source/anchors, then update-ca-trust/usr/local/share/ca-certificates, then update-ca-certificates
Certificate toolingopenssl, certbotopenssl, certbot

CPU and memory performance

RHEL familyDebian family
top, free, vmstat, psprocps-ng, installedprocps, installed
sar, iostat, mpstat, pidstatsysstat, install itsysstat, install it
Historical collection enabledsysstat collects once installedsysstat ships with collection off
Where history is kept/var/log/sa//var/log/sysstat/
Per-process memory detail/proc/<pid>/smaps_rollupidentical
OOM killer messagesjournalctl -k, and /var/log/messagesjournalctl -k, and /var/log/syslog
Default cgroup versionv2v2

I/O and network performance

RHEL familyDebian family
iostat, sar, pidstatsysstat, install itsysstat, install it
fiofio, from AppStreamfio
iperf3iperf3iperf3
ss, ip -s linkiproute2, installediproute2, installed
Default I/O scheduler, NVMenonenone
Default I/O scheduler, rotationalmq-deadlinemq-deadline
Default queue disciplinefq_codelfq_codel
Tuning profilestuned, with tuned-adm profiletuned available, not installed

Where the time actually goes

RHEL familyDebian family
Profiler packageperflinux-perf
Profiler versionFollows the kernel, so perf-6.12.0-211.el10_2 against a 6.12.0-211 kernelFollows the kernel too, with per-version packages behind the name
Tracer packagebpftracebpftrace
Userspace symbols-debuginfo packages, and debuginfod fetches them on demand-dbgsym packages, from a separate repository you have to enable

What a write actually guarantees

RHEL familyDebian family
Default root filesystemXFSext4
data= journal modesNot available. XFS journals metadata onlyThe three modes above, ordered by default
Read the journal configurationxfs_info /tune2fs -l /dev/...
Grow the filesystemxfs_growfs, and shrinking is impossibleresize2fs, which can shrink offline

How upstream becomes your distribution

RHEL familyDebian family
Read a package's changelogrpm -q --changelog NAMEzcat /usr/share/doc/NAME/changelog.Debian.gz
Where the distribution's work is countedThe release field, 2.39-124.el10_2The suffix, 2.41-12+deb13u3
Per-CVE status for your releaseRed Hat's advisory and CVE pagesThe Debian Security Tracker
Machine-readable feed for a scannerOVAL definitionsThe security tracker's JSON export

The system you cannot change

RHEL familyDebian family
The image-based systemFedora CoreOS, Silverblue, and RHEL image modeUbuntu Core
MechanismOSTree deployments, moving to bootc container imagesSnaps, with the operating system delivered as a read-only base snap
Add software to a running systemLayer a package, which applies at the next bootInstall a snap, which is confined rather than merged into the system
Roll backSelect the previous deployment at bootRevert to the previous snap revision