\( \newcommand{\P}[]{\unicode{xB6}} \newcommand{\AA}[]{\unicode{x212B}} \newcommand{\empty}[]{\emptyset} \newcommand{\O}[]{\emptyset} \newcommand{\Alpha}[]{Α} \newcommand{\Beta}[]{Β} \newcommand{\Epsilon}[]{Ε} \newcommand{\Iota}[]{Ι} \newcommand{\Kappa}[]{Κ} \newcommand{\Rho}[]{Ρ} \newcommand{\Tau}[]{Τ} \newcommand{\Zeta}[]{Ζ} \newcommand{\Mu}[]{\unicode{x039C}} \newcommand{\Chi}[]{Χ} \newcommand{\Eta}[]{\unicode{x0397}} \newcommand{\Nu}[]{\unicode{x039D}} \newcommand{\Omicron}[]{\unicode{x039F}} \DeclareMathOperator{\sgn}{sgn} \def\oiint{\mathop{\vcenter{\mathchoice{\huge\unicode{x222F}\,}{\unicode{x222F}}{\unicode{x222F}}{\unicode{x222F}}}\,}\nolimits} \def\oiiint{\mathop{\vcenter{\mathchoice{\huge\unicode{x2230}\,}{\unicode{x2230}}{\unicode{x2230}}{\unicode{x2230}}}\,}\nolimits} \)

A collection of notes on using Linux systems, in particular Ubuntu.


Basic Terminal Commands

Disk Space

  • du Disk Usage
    • du -sh Show size of current directory
    • du -h --max-depth=1
    • Flags:
      • -h human readable (adds M or G)
  • df Disk Filesystems
    • Shows usage, total space available, and mount position
    • df -Ph . See free space in current directory

Package Management

List all installed packages

# List everything
sudo dpkg -l

# List things with apache in the name
sudo dpkg -l | grep apache

Repositories

Repos are stored in

  • /etc/apt/sources.list
  • A file in /etc/apt/sources.list.d/

apt

apt list --installed

SSH

SSH Keys

Generate an ssh-key for every client

ssh-keygen -t ed25519 -a 100 [-C "comment your client name"] [-f output_path]

Some older software such as Solid file explorer require RSA keys in PEM key format

ssh-keygen -t rsa -b 4096 -a 100 -m PEM [-C "comment your client name"] [-f output_path]

You can also convert existing keys to PEM format

ssh-keygen -p -m PEM [-C "comment your client name"] [-f output_path]

Manage ssh keys

# On the client
ssh-copy-id [email protected]
# On the server
vim ~/.ssh/authorized_keys

Notes:

  • According to this you should avoid using ECDSA and DSA keys.

Port Forwarding

Also: SSH Tunneling, SSH Proxy, SSH Reverse Proxy
If you need to access a port on the remote computer, you can use the -L option to forward ports from the remote to the local machine.

ssh -L <localport>:localhost:<remoteport> <remoteurl>
# E.g. ssh -L 8080:localhost:80 [email protected]

You can also do the reverse, giving the remote access to a local port using -R

ssh -R <localport>:host:<remoteport> <remoteurl>
# E.g. ssh -R 8080:localhost:80 [email protected]

alias

You can create aliases in your .ssh/config

Host my_alias
  User my_username
  Hostname my_server@my_domain.com
  Port 52

VNC

x11vnc

Reference I recommend not exposing VNC. Set it to localhost only and use ssh port forwarding.

Remmina

How to use Remmina to connect to over ssh tunnel

Nvidia

Driver Installation

  • Run ubuntu-drivers list to get a list of drivers
  • Install the latest driver
    • E.g. sudo apt install nvidia-driver-440
  • If you have secure boot enabled, you will be asked for a password during installation
    • This is because the driver is a DKMS module.
    • After installation, reboot your computer and select "Enroll MOK" and enter that password in.
    • Note Failure to do this will result in the driver not working
  • Validate your installation by running nvidia-smi

Cuda Installation

Download cuda from the nvidia website.

Switching between Nvidia and Intel

Reference
Make sure the Nvidia graphics drivers are installed. Then you can select between Nvidia and Intel GPUs using the Nvidia X Server Settings application nvidia-settings. Alternatively, you can use the following commands in the terminal.
To switch to the Nvidia GPU:

sudo prime-select nvidia

To switch back to the Intel GPU:

sudo prime-select intel

prime-select query will print either nvidia or intel to stdout.

Environment Variables

Ubuntu Help Reference

Tmux

Tmux cheat sheet
Tmux, or Terminal Multiplexer is an alternative to screen.
Use it to keep terminals open and tasks running after you disconnect your SSH connection.
Getting Started:

# Make a new session
tmux
# Make a new named session
tmux new -s my_session
# Rename a session
# Keybinding: Ctrl + b, $
tmux rename-session [-t current-name] [new-name]
# Detach from a session
# Keybinding: Ctrl + b, d
tmux detach
# List windows
tmux ls
# Attach to a session
tmux attach -t my_session

File Manager

Add to context menu

Link

Etcher

Github
Installing etcher

echo "deb https://deb.etcher.io stable etcher" | sudo tee /etc/apt/sources.list.d/balena-etcher.list
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 379CE192D401AB61
sudo apt update
sudo apt install balena-etcher-electron

Logs

Logs are stored under /var/log. These can end up taking up a lot of space.
You can delete logs in the journal folder Reference

Default gcc/g++ version

See https://askubuntu.com/questions/26498/how-to-choose-the-default-gcc-and-g-version.

# Install
sudo update-alternatives --remove-all gcc 
sudo update-alternatives --remove-all g++
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 10
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 20
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-8 10
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 20
sudo update-alternatives --install /usr/bin/cc cc /usr/bin/gcc 30
sudo update-alternatives --set cc /usr/bin/gcc
sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++ 30
sudo update-alternatives --set c++ /usr/bin/g++

# Select
sudo update-alternatives --config gcc
sudo update-alternatives --config g++

Power Management

tlp

Website
Battery power management

Virtual Machines (VM)

Using Ubuntu as a guest:

  • Install open-vm-tools-desktop

Services and Scheduling

crontab

File Management

rsync

Documentation
Use this to sync folders between directories of across networks

Common Flags
  • -a, --archive archive mode; equals -rlptgoD

rclone

Similar to rsync but for cloud services such as Dropbox and Google Drive

sudo apt install rclone
rclone config
Resources

Mount on startup

scp

Usage

scp [source_machine]:[source_file] [target_machine]:[target_file]
Flags
  • -r recursive, needed to scp directories
  • -P [port]
Notes
  • The machine can be an alias or user@domain

7z

7zip CLI
Install with sudo apt install p7zip-full

# Archive
7z a <output_file> <input_file/folder>

# Extract 
7z x <file> [-o{dir}]