Recent update of GitLab brought renaming of several things. Most notably for us, Issues were generalized into Work items. We will try to update the materials to reflect the new naming as soon as possible.

This page contains an overview of expected learning outcomes from all labs. It can be useful if you are searching for a particular topic but do not remember in which lab the topic was covered.

Lab #1

Go to lab page

Conceptual knowledge

  • explain why graphical user interface is not a fixed part of Linux
  • list several differences between various graphical interfaces available in Linux
  • explain in broad terms what is a Linux distribution
  • explain what can be understood under the term of unix family of operating systems
  • list a few types of assets that are typically needed for software projects
  • explain in broad terms what is a versioning tool
  • explain fundamental high-level operations of versioning tools

Practical skills

  • boot your own machine into Linux (either via USB, dual-boot or virtualized)
  • log in to a graphical Linux environment
  • log in to the faculty instance of GitLab
  • create a new project in GitLab
  • upload a new file to GitLab via its web user interface and create a commit from it
  • edit existing files in a GitLab project using its web interface
  • customize a selected graphical environment
  • create a basic GitLab issue in a given project

Lab #2

Go to lab page

Conceptual knowledge

  • list pros and cons of using a command-line interface vs a graphical one
  • explain the difference between a terminal (emulator) and a shell
  • explain what is a path to a file
  • explain difference between a relative and an absolute file path
  • explain what are shell (filename) wildcards
  • explain what are command-line options (switches)
  • explain usefulness of -- delimiter (when using wildcards on specifically named files)
  • explain what is a home directory

Practical skills

  • start and close (exit) a terminal emulator
  • customize a selected terminal emulator
  • browse through a filesystem via text user interface tools (e.g. mc or ranger)
  • browse through a filesystem using commands ls and cd
  • use basic switches of the ls command such as -l, -h or -a
  • use wildcards to apply commands to specific subsets of filenames
  • run own Python programs from the command line
  • view contents of text files using the cat utility
  • view contents of binary files in hexadecimal using the hexdump utility
  • identify file type by using file utility
  • use (basic operations) of the built-in manual pages
  • use clipboards available in a graphical interface on Linux
  • use tab completion to effectively write file names and paths
  • use irregularly named files

Lab #3

Go to lab page

Conceptual knowledge

  • explain what is a script in a Linux environment
  • explain what is a shebang (hashbang) and how it influences script execution
  • understand the difference when script has or does not have executable bit set
  • explain what is a working directory
  • explain why working directory is private to a running program
  • explain how are parameters (arguments) passed in a script with a shebang
  • explain what is standard input and output
  • explain why standard input or output redirection is not (directly) observable from within the program
  • explain how execution of cat foo.txt and cat <foo.txt differs
  • explain how standard inputs/outputs of several programs can be chained together
  • optional: explain why cd cannot be a normal executable file like /usr/bin/ls

Practical skills

  • create a Linux script with correct shebang
  • set the executable script using the chmod utility
  • access command-line arguments in a Python program
  • redirect standard input and standard output of a program in shell
  • use standard input and output in Python
  • use the pipe | to chain multiple programs together
  • use basic text filtering tools: cut, sort, …
  • use grep -F to filter lines matching provided pattern

Lab #4

Go to lab page

Conceptual knowledge

  • explain what is a Git working copy (clone)
  • explain why there are two output streams: stdout and stderr
  • explain what is program exit code
  • explain differences and typical uses for the main five interfaces of a\ncommand-line program: command-line arguments, stdin, stdout, stderr, and exit code\n
  • optional: explain what is a file descriptor (from the perspective of a userland developer)

Practical skills

  • configure author information in Git
  • setup default editor in a shell (set EDITOR in ~/.bashrc)
  • clone a Git repository over HTTPS in shell
  • review changes in a Git working copy (git status command)
  • create a Git commit from command-line (git add and git commit commands)
  • upload new commits to Git server or download new ones to a working copy\n(assuming single user project, git push and git pull commands)\n
  • view summary information about previous commits using git log
  • optional: customize Git with aliases
  • redirect standard output and standard error output of a program in shell
  • set exit code of a Python script
  • use the special file /dev/null
  • use standard error output in Python
  • optional: customize shell script with aliases
  • optional: store custom shell configuration in .bashrc (or .profile) scripts
  • optional: customize prompt with the PS1 variable

Lab #5

Go to lab page

Conceptual knowledge

  • explain basic principles of network communication (in OS agnostic manner)
  • explain basic principles of asymmetric cryptography
  • explain in detail how asymmetric cryptography (public and private key)\ncan be used to authenticate a user\n
  • explain what is SSH and what functions it offers
  • explain how differs execution of programs locally vs over SSH remotely
  • explain difference between using Git over HTTPS vs Git over SSH
  • explain why use of nmap is often prohibited/limited by network administrators

Practical skills

  • set PS1 variable to distinguish different machines
  • use ssh command to login to a remote machine
  • execute commands on a remote machine using SSH
  • use hostname command
  • transfer files over SSH using cat
  • setup password-less authentication on a remote Linux machine using a private/public key pair
  • setup publickey-based authentication to GitLab
  • use git clone (and pull and push) over SSH
  • optional: configure SSH shortcuts
  • optional: use basic functions of tmux terminal multiplexer
  • use nc for basic operations
  • use nmap for basic network scanning
  • use ip command to query current network configuration
  • use ping and traceroute as basic tools for debugging networking issues
  • optional: use NetworkManager to set up static IP addressing

Lab #6

Go to lab page

Conceptual knowledge

  • explain main differences between a project fork and repository working copy (clone)
  • explain what is a Git branch
  • explain what is a feature branch
  • explain what is branch merging in Git
  • explain what is a merge (pull) request and when it can be used
  • explain what is a Git remote
  • explain when Git merge conflict can arise and how it can be resolved
  • explain what is usually meant by upstream project (repository)

Practical skills

  • create Git branch locally using git branch
  • push new Git branch to remote server
  • create merge request from a feature branch in GitLab
  • switch between branches (git switch)
  • merge Git branches locally using git merge
  • fix merge conflicts
  • setup Git remotes
  • optional: use the youtube-dl utility
  • optional: use VLC media player from command-line

Lab #7

Go to lab page

Conceptual knowledge

  • explain what is an environment variable
  • explain how variable scoping works in shell
  • explain the difference between a normal and exported shell variable
  • explain how $PATH variable is used in shell
  • explain how changing $PATH affects program execution
  • explain how shell expansion and splitting into command-line arguments is performed
  • explain concurrency issues that can occur when using temporary files
  • explain what is a linter and style checker
  • explain what kind of issues can be detected by style checkers
  • optional: explain why current directory is usually not part of $PATH variable

Practical skills

  • use Pandoc to convert between various text formats
  • set (assign) and read environment variables
  • compute mathematical expressions directly in shell using $(( )) construct
  • use command substitution ($( ))
  • use composition operands && and || in shell scripts
  • create and use shell functions
  • use subshell to group multiple commands
  • use and interpret results of ShellCheck
  • use temporary files securely in shell scripts
  • optional: read environment variables in Python
  • optional: create custom templates for Pandoc

Lab #8

Go to lab page

Conceptual knowledge

  • explain how program exit code is used to drive control flow in shell scripts
  • explain what commands are executed and how is evaluated a shell construct if true; then echo "true"; fi
  • explain what considerations are important when deciding between use of shell vs Python

Practical skills

  • use control flow in shell scripts (for, while, if, case)
  • use read command
  • use getopt for parsing command line arguments
  • use . and source to load functions from different files
  • use scp to copy individual files to (or from) a remote machine
  • optional: use rsync to synchronize whole directories

Lab #9

Go to lab page

Conceptual knowledge

  • explain how and why is software distributed in the forms of packages
  • explain what account types exist on Linux and how they differ (e.g. johndoe, root and nobody)
  • explain difference between the root account and other accounts
  • explain why doing non-administrative tasks with root account is generally discouraged
  • explain in broad terms how sudo can be used for system administration
  • understand the dangers of using sudo
  • explain what is a service (daemon)
  • explain life cycle and possible states of a service
  • explain what is a program log and how it can be managed

Practical skills

  • use getent to retrieve information about user accounts
  • use sudo to elevate privileges of an executed program
  • use a package manager to install or uninstall packages
  • use a package manager to perform a system update
  • use systemctl to start and stop services
  • use systemctl to ensure service is automatically started at machine boot
  • use printing and scanning in Linux
  • optional: use journalctl to view service logs
  • optional: use useradd to create a new user account

Lab #10

Go to lab page

Conceptual knowledge

  • name several steps that are often required to create distributable software\n(e.g. a package or an installer) from source code and other basic artifacts\n
  • explain why software build should be a reproducible process
  • explain how it is possible to capture a software build
  • explain concepts of languages that are used for capturing steps needed\nfor software build (distribution)\n
  • explain what is a regular expression (regex)

Practical skills

  • build make-based project with default settings
  • create Makefile that drives build of a simple project
  • use wildcard rules in Makefile
  • optional: use variables in a Makefile
  • optional: use basic GNU extensions to simplify complex Makefiles
  • create and use simple regular expressions to filter text with grep
  • perform pattern substitution using sed

Lab #11

Go to lab page

Conceptual knowledge

  • explain basic access rights in Unix operating systems
  • explain what individual access rights r, w and x mean for normal\nfiles and what for directories\n
  • explain what is a process signal
  • explain difference between normal files, directories, symbolic links,\ndevice files and system-state files (e.g. from /proc filesystem)\n
  • list fundamental top-level directories on a typical Linux installation and describe their function
  • explain in general terms how the directory tree is formed by mounting individual (file) subsystems
  • explain why Linux maintains separation of archiving and compression programs (e.g. tar and gzip)
  • explain what is a set-uid bit
  • explain what is a process and how it differs from an executable file
  • explain difference of ownership of a file and a running process
  • optional: provide a high-level overview of POSIX ACLs

Practical skills

  • view and change basic access permissions of a file
  • use ps to view list of existing processes (including -e, -f and --forest switches)
  • use pgrep to find specific processes
  • send a signal to a running process
  • use htop to interactively monitor existing processes
  • mount disks using the mount command (both physical disks as well as images)
  • get summary information about disk usage with df command
  • use either tar or atool to work with standard Linux archives
  • use find with basic predicates (-name, -type) and actions (-exec, -delete)