Ubuntu
Published:
All instructions written for Ubuntu 16.04 and 18.04
Download Ubuntu iso
Activate superuser permissions
Activating superuser permissions in Ubuntu will require root privileges on the account being accessed from, or access to the root password
Open a terminal with Ctrl+Alt+T. Enter sudo -i or sudo -s and enter your password (or the root password if missing root privileges)
Mount a hard drive
This requires root permissions
Create a folder to mount the drive to sudo mkdir /mnt/hdd1
Open fstab with nano/vim with sudo active sudo nano /etc/fstab
Add the following to the end of the file: /dev/drive-partition-name /mnt/hdd1 ext4 defaults 0 0 Save and close the file.
Mount the drive sudo mount /dev/drive-partition-name /mnt/hdd1
Backup between local hard drives using cron and rsync
rsync to backup files between local hard drives
Execute rsync in terminal with archive mode active (recommended) rsync -a from_dir to_dir
-r, --recursive recurse into directories
-v, --verbose increase verbosity
-q, --quiet suppress non-error messages
-a, --archive archive mode
-u, --update skip files that are newer on the receiver
-d, --dirs transfer directories without recursing
-n, --dry-run perform a trial run with no changes mode
rsync to backup files between remote hard drives
Syncing a local file or directory to a remote destination
rsync -a /path/to/local/dir username@remote_host:/path/to/remote/destination
Syncing a remote file or directory to a local destination
rsync -a username@remote_host:/path/to/remote/dir /path/to/local/destination
cron scheduling
Tutorial on using cron in Linux
The cron utility can be used to schedule command execution. This is particularly useful for scheduling backups with rsync, which is the principal use here
cron runs in /etc/cron.d
Individual cron runs can be made within /etc/cron.d/. These files can execute SHELL commands
cron runs in crontab
crontab is a user-specific table of cron runs to be executed. Access crontab with crontab -e command in terminal. A prompt will appear asking for an editor. Select whichever number corresponds to /bin/nano and the crontab will appear. It will have instructions for adding a scheduled cron run to the end of the file. This is the most practical way to make a cron run
A useful outline of a job definition by David Both is
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
If no user-name is provided, then the cron run is executed as the user who the crontab file (/var/spool/cron/crontabs) belongs to
There are many other utilities which can make cron more useful, for example emailing the user when the command is executed with MAILTO
View all users crontabs on a computer
In a terminal, access all users crontabs in /var/spool/cron/crontabs. Each users crontab will be a single file accessible with nano, vim, etc.
Ex. If my username were dc, my crontabs could be read with nano /var/spool/cron/crontabs/dc
Select a block of text in nano
While the cursor is at the line of the section to be selected, press Alt+A, then move the cursor with the arrow keys to select the desired block of text
Indent or unindent multiple lines of text in nano
Indent
Alt+Shift+] (also written Alt+})
Unindent
Alt+Shift+[ (also written Alt+{)
See directory and file sizes in terminal with du
General usage
du /path/to/dir will report estimates for the size of all files and folders (including specific files/subfolders therein) in /path/to/dir
From the manual:
Display values are in units of the first available SIZE from --block-size, and the
DU_BLOCK_SIZE, BLOCK_SIZE and BLOCKSIZE environment variables. Otherwise, units default
to 1024 bytes (or 512 if POSIXLY_CORRECT is set).
Human-readable
du -h /path/to/dir will print the estimated sizes in human readble formats (e.g., K, M, G for kilobyte, megabyte, and gigabyte)
Total size
du -s /path/to/dir will print the summarized size of /path/to/dir
Max depth
du /path/to/dir -d N where N is an integer, will report the total size for files and directories N or fewer levels from /path/to/dir
Examples
Report the summarized size of files and folders in the current directory in human-readable format:
du -h . -d 1
This is particularly useful when ls can only show a folders dir name data block (4096 bytes), not the actual folder size
Local installation of python
This method does not require sudo privileges, just an internet connection. Following along with Installation of Python in your home directory
Select desired version of python from the Official Python Website. I am currently installing Python v.3.8.9 (to run some analysis with the statsmodels package), so I will select Python-3.8.9 and identify the installation file I need, specifically Python-3.8.9.tgz
In terminal, orient to the Downloads directory and download the compressed folder there with wget http://www.python.org/ftp/python/3.8.9/Python-3.8.9.tgz
Uncompress the folder wtih tar -zxvf Python-3.8.9.tgz
Orient to the new directory cd Python-3.8.9
Create a destination folder for the installation. I wanted to install in my home directory, so I did mkdir ~/.localpython
Configure the environment with ./configure --prefix=/mnt/hdd1/Dan/.localpython, then build with make and install with make install
To manually use this version of python, I would need to execute ~/.localpython/bin/python3 or ~/.localpython/bin/python3.8
An easier way is to add this to your PATH variable. Do so by opening ~/.bashrc and appending export PATH=$PATH:~/.localpython/bin then running source ~/.bashrc. Now you can start python3.8 just by typing python3 (may fail if you have several python3 versions) or python3.8
Create an alias to set your python version exactly to python3.8.9 and be able to be called with just python. There are many ways to do this, depending on needs. If you want to have this alias be permanent, and still don’t have sudo privileges, open ~/.bash_aliases and write alias python="python3.8", then run source ~/.bashrc.
