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
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
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
orranger
) - browse through a filesystem using commands
ls
andcd
- 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
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
andcat <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
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
andgit commit
commands) - upload new commits to Git server or download new ones to a working copy\n(assuming single user project,
git push
andgit 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
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
(andpull
andpush
) 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
andtraceroute
as basic tools for debugging networking issues - optional: use NetworkManager to set up static IP addressing
Lab #6
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 checkout
) - 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
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
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
andnobody
) - 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 #9
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
.
andsource
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 #10
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
Makefile
s - create and use simple regular expressions to filter text with
grep
- perform pattern substitution using
sed
Lab #11
Conceptual knowledge
- explain basic access rights in Unix operating systems
- explain what individual access rights
r
,w
andx
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
andgzip
) - 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
oratool
to work with standard Linux archives - use
find
with basic predicates (-name
,-type
) and actions (-exec
,-delete
)