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.
mcorranger) - browse through a filesystem using commands
lsandcd - use basic switches of the
lscommand such as-l,-hor-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
catutility - view contents of binary files in hexadecimal using the
hexdumputility - identify file type by using
fileutility - 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.txtandcat <foo.txtdiffers - explain how standard inputs/outputs of several programs can be chained together
- optional: explain why
cdcannot be a normal executable file like/usr/bin/ls
Practical skills
- create a Linux script with correct shebang
- set the executable script using the
chmodutility - 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 -Fto 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
EDITORin~/.bashrc) - clone a Git repository over HTTPS in shell
- review changes in a Git working copy (
git statuscommand) - create a Git commit from command-line (
git addandgit commitcommands) - upload new commits to Git server or download new ones to a working copy\n(assuming single user project,
git pushandgit pullcommands)\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
PS1variable
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
nmapis often prohibited/limited by network administrators
Practical skills
- set
PS1variable to distinguish different machines - use
sshcommand to login to a remote machine - execute commands on a remote machine using SSH
- use
hostnamecommand - 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(andpullandpush) over SSH - optional: configure SSH shortcuts
- optional: use basic functions of
tmuxterminal multiplexer - use
ncfor basic operations - use
nmapfor basic network scanning - use
ipcommand to query current network configuration - use
pingandtracerouteas 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 switch) - merge Git branches locally using
git merge - fix merge conflicts
- setup Git remotes
- optional: use the
youtube-dlutility - 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
$PATHvariable is used in shell - explain how changing
$PATHaffects 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
$PATHvariable
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 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
readcommand - use
getoptfor parsing command line arguments - use
.andsourceto load functions from different files - use
scpto copy individual files to (or from) a remote machine - optional: use
rsyncto synchronize whole directories