DEV Community

Aisalkyn Aidarova
Aisalkyn Aidarova

Posted on

Linux Package Management & Job Control – Practice Exercises

PART 1 — Bash Jobs & Process Control


Exercise 1 — Job vs Process (Foreground job)

Goal
Understand what a job is vs a process and why pipelines are one job.

Task

ping -c 5 google.com | wc -l
Enter fullscreen mode Exit fullscreen mode

Observe

  • Two processes (ping, wc)
  • One job (single command)

Why it matters

  • Bash job control operates on jobs, not individual processes
  • Important for debugging pipelines

Exercise 2 — Foreground Job Blocking the Shell

Task

ping google.com
Enter fullscreen mode Exit fullscreen mode

Try typing another command.

Observe

  • Shell is blocked
  • Keyboard input goes to the job

Stop it:

Ctrl + C
Enter fullscreen mode Exit fullscreen mode

Production relevance

  • Long-running commands can block automation scripts

Exercise 3 — Background Job (&)

Task

ping -c 10 google.com &
Enter fullscreen mode Exit fullscreen mode

Observe

  • Shell returns immediately
  • Output still appears

Check job list:

jobs
Enter fullscreen mode Exit fullscreen mode

Why it matters

  • Background execution without output control can clutter logs

Exercise 4 — Redirect Background Output

Task

ping -c 10 google.com > ping.log &
Enter fullscreen mode Exit fullscreen mode

Observe

  • No terminal noise
  • Output captured safely

Production relevance

  • Standard practice for background jobs

Exercise 5 — Using /dev/null

Task

ping google.com > /dev/null &
Enter fullscreen mode Exit fullscreen mode

Observe

  • Output discarded completely

Why

  • Useful for health checks, keep-alive scripts

Exercise 6 — Job Listing

Task

jobs
Enter fullscreen mode Exit fullscreen mode

Start multiple jobs:

ping google.com > /dev/null &
ping bing.com > /dev/null &
Enter fullscreen mode Exit fullscreen mode

Observe

  • Job IDs ([1], [2])

Exercise 7 — Bringing Job to Foreground (fg)

Task

fg %1
Enter fullscreen mode Exit fullscreen mode

Stop it:

Ctrl + C
Enter fullscreen mode Exit fullscreen mode

Key rule

  • Only foreground jobs receive keyboard signals

Exercise 8 — Suspending a Job (Ctrl + Z)

Task

ping google.com
Ctrl + Z
jobs
Enter fullscreen mode Exit fullscreen mode

Observe

  • Job state: Stopped

Exercise 9 — Resume Job in Background (bg)

Task

bg %1
jobs
Enter fullscreen mode Exit fullscreen mode

Observe

  • Job runs again
  • Still no keyboard input

Exercise 10 — Killing a Job

Task

kill %1
Enter fullscreen mode Exit fullscreen mode

Force kill:

kill -9 %1
Enter fullscreen mode Exit fullscreen mode

Production relevance

  • Safely terminating runaway jobs

Exercise 11 — wait Command

Task

ping -c 5 google.com > /dev/null &
ping -c 5 bing.com > /dev/null &
wait
echo "All jobs finished"
Enter fullscreen mode Exit fullscreen mode

Observe

  • echo runs only after jobs finish

Why

  • Parallel execution control in scripts

Exercise 12 — wait -n (any job finishes)

Task

ping -c 10 google.com > /dev/null &
ping -c 3 bing.com > /dev/null &
wait -n
echo "One job finished"
Enter fullscreen mode Exit fullscreen mode

Exercise 13 — Notification with Terminal Bell

Task

ping -c 5 google.com > /dev/null &
wait
tput bel
echo "Download complete"
Enter fullscreen mode Exit fullscreen mode

Why

  • Useful in long manual tasks

Exercise 14 — nohup Survival After Logout

Task

nohup ping -c 30 google.com > nohup.out &
exit
Enter fullscreen mode Exit fullscreen mode

Login again:

ps aux | grep ping
Enter fullscreen mode Exit fullscreen mode

Observe

  • Job survives logout

Production relevance

  • Remote server operations

Exercise 15 — Parent Process Change (Re-parenting)

Task

ps -o pid,ppid,cmd -p <PID>
Enter fullscreen mode Exit fullscreen mode

Observe

  • Parent changes to PID 1 after logout

PART 2 — RPM (Low-Level Package Management)


Exercise 16 — Inspect RPM Without Installing

Task

rpm -qpl zsh*.rpm
Enter fullscreen mode Exit fullscreen mode

Observe

  • Files installed by package

Exercise 17 — Manual RPM Install

Task

sudo rpm -i zsh*.rpm
Enter fullscreen mode Exit fullscreen mode

Observe

  • No dependency resolution

Exercise 18 — RPM Removal

Task

sudo rpm -e zsh
Enter fullscreen mode Exit fullscreen mode

Why

  • Understand why RPM alone is dangerous in production

PART 3 — DNF Core Usage


Exercise 19 — Search Packages

Task

dnf search links
Enter fullscreen mode Exit fullscreen mode

Exercise 20 — Install with Dependencies

Task

sudo dnf install links
Enter fullscreen mode Exit fullscreen mode

Exercise 21 — Remove Package

Task

sudo dnf remove links
Enter fullscreen mode Exit fullscreen mode

Exercise 22 — Repository Awareness

Task

dnf info neofetch
Enter fullscreen mode Exit fullscreen mode

Observe

  • Which repository provides it

PART 4 — Repositories (BaseOS, AppStream, EPEL, CRB)


Exercise 23 — List Repositories

Task

dnf repolist
Enter fullscreen mode Exit fullscreen mode

Exercise 24 — Enable CRB

Task

sudo dnf config-manager --set-enabled crb
Enter fullscreen mode Exit fullscreen mode

Exercise 25 — Enable EPEL

Task

sudo dnf install epel-release
Enter fullscreen mode Exit fullscreen mode

Install:

sudo dnf install htop
Enter fullscreen mode Exit fullscreen mode

PART 5 — Dependency Analysis


Exercise 26 — What a Package Provides

Task

dnf repoquery --provides bash
Enter fullscreen mode Exit fullscreen mode

Exercise 27 — What a Package Requires

Task

dnf repoquery --requires bash
Enter fullscreen mode Exit fullscreen mode

Exercise 28 — Who Requires a Package

Task

dnf repoquery --whatrequires bash
Enter fullscreen mode Exit fullscreen mode

Exercise 29 — Weak Dependencies (Recommends)

Task

dnf repoquery --recommends gimp
Enter fullscreen mode Exit fullscreen mode

Exercise 30 — Install Without Weak Dependencies

Task

sudo dnf install gimp --setopt=install_weak_deps=False
Enter fullscreen mode Exit fullscreen mode

Exercise 31 — Backward Weak Dependencies (Supplements)

Task

dnf repoquery --what-supplements langpacks-de
Enter fullscreen mode Exit fullscreen mode

PART 6 — Dependency Removal Dangers


Exercise 32 — Dependency Auto-Removal Problem

Task

sudo dnf install python3-matplotlib
python3 -c "import numpy"
sudo dnf remove python3-matplotlib
python3 -c "import numpy"
Enter fullscreen mode Exit fullscreen mode

Observe

  • App breaks

Exercise 33 — Fix Using dnf mark install

Task

sudo dnf install python3-numpy
sudo dnf mark install python3-numpy
sudo dnf remove python3-matplotlib
Enter fullscreen mode Exit fullscreen mode

PART 7 — Updates, Downgrades, Version Locking


Exercise 34 — System Upgrade

Task

sudo dnf upgrade
Enter fullscreen mode Exit fullscreen mode

Exercise 35 — Downgrade a Package

Task

dnf list python3 --showduplicates
sudo dnf downgrade python3-<version>
Enter fullscreen mode Exit fullscreen mode

Exercise 36 — Temporary Upgrade Exclusion

Task

sudo dnf upgrade --exclude=python3*
Enter fullscreen mode Exit fullscreen mode

PART 8 — Automatic Updates


Exercise 37 — Enable Automatic Updates

Task

sudo dnf install dnf-automatic
sudo systemctl enable --now dnf-automatic.timer
Enter fullscreen mode Exit fullscreen mode

Exercise 38 — Configure Security-Only Updates

Edit:

sudo vi /etc/dnf/automatic.conf
Enter fullscreen mode Exit fullscreen mode

Set:

upgrade_type=security
apply_updates=yes
Enter fullscreen mode Exit fullscreen mode

PART 9 — DNF Modules


Exercise 39 — List Modules

Task

dnf module list
Enter fullscreen mode Exit fullscreen mode

Exercise 40 — Enable NodeJS Stream

Task

sudo dnf module enable nodejs:18
sudo dnf upgrade
node --version
Enter fullscreen mode Exit fullscreen mode

Exercise 41 — Install Module Profile

Task

sudo dnf module install nodejs:18/development
Enter fullscreen mode Exit fullscreen mode

Exercise 42 — Remove Module Profile

Task

sudo dnf module remove nodejs:18/development
Enter fullscreen mode Exit fullscreen mode

Exercise 43 — Disable & Reset Module

Task

sudo dnf module disable nodejs
sudo dnf module reset nodejs
Enter fullscreen mode Exit fullscreen mode

PART 10 — Dependency Conflict Debugging


Exercise 44 — Broken RPM Install

Task

sudo dnf install https://example.com/foreign.rpm
Enter fullscreen mode Exit fullscreen mode

Analyze

  • Missing dependencies
  • Use:
dnf repoquery --whatprovides <library>
Enter fullscreen mode Exit fullscreen mode

PART 11 — Snap Packages


Exercise 45 — Install Snap

Task

sudo dnf install snapd
sudo systemctl enable --now snapd.socket
Enter fullscreen mode Exit fullscreen mode

Exercise 46 — Install Firefox via Snap

Task

sudo snap install firefox
snap run firefox
Enter fullscreen mode Exit fullscreen mode

Exercise 47 — Compare Versions

Task

firefox --version
snap run firefox --version
Enter fullscreen mode Exit fullscreen mode

Observe

  • Snap version is newer

Top comments (0)