Table of Contents

CLI: Commands & Usage

apt

# [1] Update package repo
apt update

# [2] Upgrade your distro
apt full-upgrade -y

# [3] Remove obsolete packages left after the upgrade 
apt autoremove

# [4] Clear local repo of useless package files
apt autoclean

# Or do it all in one line:
apt update && apt full-upgrade -y && apt autoremove && apt autoclean

arp

Running arp at the command line will print the arp table (shows the IPs mapped to MAC addresses).


check distro

lsb_release tells you which gnu/linux distro you are using

lsb_release -a

uname -a tells you which linux kernel you are using

uname -a

cut

pending


dd

wipe a disk

Fill the disk with all zeros (may take a while; it switches every bit to 0):

dd if=/dev/zero of=/dev/sdX bs=1M 

# replace X with the target drive letter.

To secure wipe, populate the entire disk with random data rather than zeros (takes longer):

dd if=/dev/urandom of=/dev/sdX bs=1M 

# replace X with the target drive letter.

Sincd dd does not have a verbose setting, you can get some visual feedback with this (run each in a separate term window):

watch vmstat -d
htop

find

Basic Syntax:

find /path/to/search/ -name searchTerm

If you get a bunch of garbage on the screen, send it all to /dev/null:

find /path/to/search/ -name searchTerm 2>/dev/null

More details here.


grep

Syntax: grep [options…] pattern-spec [files…]

Purpose: To print lines of text from the named files that match one or more of the pattern specifications.

Main Options:

Behavior: Read through each file named on the command line. When a line contains a match of the pattern being searched for, print that line.


netstat

Print network connections, routing tables, interface statistics, masquerade connections, and multicast memberships

netstat -ano  # shows the active connections running on your machine

PATH

echo $PATH             # to see your current path
PATH=$PATH:$HOME/bin   # add the home dir /bin subdir to your PATH

To make changes to your PATH permanent, add /paths/to/directories to your .profile file (read each time you login).


printf

Syntax: printf format-string [arguments…]

format-string = a string describing your desired output (best supplied as a string constant in quotes.)

arguments = a list of arguments like strings or variable values that will correspond to the format specificatons.

Example:

printf "The first program always prints '%s, %s\!'\n" Hello world
# prints: The first program always prints 'Hello, world!'

printf vs. echo

echo $var             # is the same as...
printf '%s\n' "$var"

echo -n $var          # is the same as...
printf '%s' "$var"

printf is better than echo because of portability and reliability.

You cannot use echo to display uncontrolled data. In other words, if you're writing a script and it is taking external input (from the user as arguments, or file names from the file system…), you cannot use echo to display it.

printf '%\n' "$var"
# this will output the content of $var followed by a newline character
# regardless of what character it may contain

printf '%\n' "$var"
# this will output the content of $var without a newline character

All in all, you do not know what echo “$var” will output unless you can make sure that $var does not contain backslash characters and does not start with a hyphen/dash ( - ). The POSIX specification tells us to use printf instead in that case.

https://unix.stackexchange.com/questions/65803/why-is-printf-better-than-echo


sed

Clean up carriage returns from Linux to Windows (e.g., you download and edit a script on Windows machine so you can use something like Notepad++ to edit the file and then dump it back into Linux to run it). Source.

sed -i -e 's/\r$//' [script name]

showmount

The showmount command shows information about an NFS server.

Syntax:

/usr/sbin/showmount -e [Target IP]

Options:

Option Description
-a Print all remote mounts in the format hostname:directory, where hostname is the name of the client and directory is the root of the filesystem that has been mounted.
-d List directories that have been remotely mounted by clients.
-e Print the list of exported filesystems.
-h Provide a short help summary.
–no-headers Do not print headers.
-v Report the current version of the program.

tar

Use the following command to compress an entire directory or a single file on Linux. It’ll also compress every other directory inside a directory you specify–in other words, it works recursively.

tar -cvzf name-of-archive.tar.gz /path/to/directory-or-file

# c - create an archive
# v - verbose
# z - zip / gnuzip
# f - file (name follows)

tee

Reads from the standard input and writes to both standard output and one or more files at the same time.

Syntax:

tee [OPTIONS] [FILE_NAMES]
#
# OPTIONS :
#  -a (--append) - Do not overwrite the files instead append to the given files
#  -i (--ignore-interrupts) - Ignore interrupt signals
# FILE_NAMES - One or more files. Each of which the output data is written to.

Usage: The most basic usage of the tee command is to display the standard output (stdout) of a program and write it in a file.

[cli program] | tee output_file.txt

To strip off the color codes, pipe through sed:

[cli program] | sed -r 's/\x1b\[[0-9;]*m//g' | tee output_file.txt

#  -r   use extended regular expressions
#   s   s/regexp/replacement/
# \x1b  The ASCII "escape" character (octal: \033, hex: \x1B or ^[ , or in decimal: 27).
#       Used to start a series of characters called a control sequence or escape sequence

And you could always alias that in your .bashrc file:

alias tee="sed -r 's/\x1b\[[0-9;]*m//g' | tee"

tr

Translate: Use this to (among other things) convert lower case to upper case. Example:

sha256sum filename.ext | tr [:lower:] [:upper:]

untar

tar xvzf filename

# x - extract
# v - verbose
# z - zip / gnuzip
# f - file (name follows)