Linux Commands
From TheBeard Science Project Wiki
Updated 8/2/2020
exit #TO PREVENT EXECUTION OF THIS FILE
su <user> - switch user
-c 'command' - execute a command as user
-l - setup environment like user instead of keeping your own
gksudo - use for graphical applications
-u <user> - do command as user
-k - preserve environment variables
-D <text> - name of program to display
-m <text> - replace whole message with text
-p - print password to stdout
man <command> - searches manual
-k <keyword> - search man for keyword
; - separate multiple commands
# comment
: - produces no output. Can be used as a "non-value" like:
while :;do something forever;done
: '<comments with new-line characters>' - allows multiple-line comments
shift + page up or down - scroll
-- - signifies end of command and beginning of arguments (or last argument)
ctrl + c - kill process (SIGINT)
ctrl + \ - kill and core dump (SIGQUIT)
ctrl + z - suspend process (SIGTSTP)
ctrl + t - send SIGINFO
ctrl + u - clear a line
ctrl + l - clear terminal
ctrl + alt + f1 - bypass gui
ctrl + alt + f7 - return to gui
ctrl + d - logout (in GUI) or EOF in terminal
esc + . - insert all parameters from last command
ctrl + alt + e - expand all string expansions and show it before executing it
ctrl + r - search command history
tab - auto-complete
hold shift during boot to get grub menu
put commands in .bashrc in home dir to run command at login
gconf-editor - "registry" for Gnome
use to remove desktop folders from fedora. go to /apps/nautilus/desktop.
dconf-editor - similar to gconf-editor
alacarte - graphical gnome menu editor
cheese - webcam program
webcamoid - better webcam program
find <location> -name <file> - look for file
-iname - case insensitive (use instead of -name)
-type <type> - d=directory, f=file, l=link, b=block, c=character
-maxdepth <#> - number of directories down to look
-regex <pattern> - look for pattern (matches whole file path, not just name)
-iregex - case insensitive regex
find . -xdev -type f | cut -d "/" -f 2 | sort | uniq -c | sort -n - list directories and the number of files they contain
find /u1/database/prod/arch -type f -mtime +3 -exec rm {} \; - find files that are older than 3 days and remove them
locate - search
-c - count instead of output
-i - ignore case (not case sensitive)
-r - regex
eog - graphical image/picture viewer
VBoxManage - virtual box manager
modifyhd --compact <file.vdi> - compact a dynamically expanding disk
list runningvms
list vms
startvm --type headless "VM Name"
pwd - print working directory
ls - alternative to dir
-a - show hidden
-l - more info
-R - recursive
-Q - enclose entries in double quotes
-d - list only directories
-h - human readable file size
-t - sort by most recent modification date
-r - reverse order (reverse alphabetical, or reverse mod time if used with -t)
-1 - list in one column
-i - list inodes
-f1 - can list directory with too many files
pushd - remember current directory (need to do "pushd ." the first time you use it per session)
popd - navigate to remembered directory
file <file> - list file info
-i - shows filetype and charset
stat <format> <file> - list file info (format if optional)
%a - permissions in octal
%s - size
getfacl <file/dir> - get ACL and umask info
setfacl -d <file/dir> - set ACL for default umask
-m <perm> - add ACL (ie. u::rwx [can do o::- to remove])
hachoir-metadata - show metadata of file
mv <file> <destination> - move/rename
<file> <newfile> - can be used to change name of file
-n - no clobber (do no overwrite file if it already exists)
-u - update: only move if source is newer than destination
-f - force
cp - copy
-r - recursive
-f - force
-i - interactive
-l - link
-n - no clobber (do no overwrite file if it already exists)
-u - update: only copy if source is newer than destination
-p - preserve permissions
-s - symbolic link
rm - remove/delete
-r - recursive
-f - force
-i - interactive
rmdir - delete directory (must be empty)
mkdir - make directory
-p - create parents (of dir1 does not exist, running mkdir -p dir1/dir2 will create it)
ln -s <file> [<link name>] <dir> - make a symbolic link of a file in this dir
tar <options> <archive.ext> <backupstuff> - archiving tool (combine)
-p - preserve permissions
-z - use gzip compression
-j - use bzip2 (add .bzip2 ext)
-c - create
-x - extract
-f - file to create/extract (must be last option as in -pjcf)
echo - print something
-e - interpret escape characters (ie. \\, \n, \r, \b, \t, \xHH; see more under "escape characters" in this file)
-n - no trailing noe-line character
echo 'message' | smbclient -M windows_box - Send popup to windows machine (off by default in XP sp2)
echo "error" >&2 - send "error" with rest of error output
echo $(( 100+(`od -An -N2 -i /dev/random` )%(1000-100+1) )) - random # between 100-1000
less - view text file
-i - ignore case in searches
PageUp or Ctrl+b - page up
PageDown or Ctrl+f - page down
g - top of page
G - bottom of page
/<pattern> - search for pattern
more - old line-by-line file reader
cat - print contents of text file
-n - print with line numbers
-b - number non-blank lines
-v - show non-printable characters
- - take from standard input (ie. echo "hello" | cat -)
tac - print lines in reverse order (similar to cat)
read - read user input (ie. 'read answer' puts user input into $answer, also 'read a b c' takes first 3 words, be careful because $c will contain any additional input, so you can do 'answer a b c x' if you only want 3 words so that $x will contain any junk input)
strings <file> - print any ascii characters in a binary file
<command> > <filename> - writes output of command to file
<command> >> <filename> - appends output of command to file
<command> < <filename> - sends contents of file to command
<command1> | <command2> - feed output of com1 into com2
<command1> |& <command2> - feed stderr and stdout of com1 into com2
|tee <file> - puts output into file and echos
1> <place> - redirect standard output
2> <place> - redirect standard error
2>&1 - redirect error to same place as output after output has been redirected
&> <place> - redirect both stdout and stderr
command < infile > outfile - combinations of redirects
command <(command2) - output of command2 is treated like a file descriptor for command
command >(command2) - output from command that would normally go to a file is redirected to command2
exec 3<>/file - set file as place to redirect 3
echo hi >&3 - redirect
3<&-;3>&- - disables
set -o xtrace;exec &>/file - set commands to echo before executing, and redirect all output to file. Good way to log everything you do.
sort -d - sort by alphanumeric
-u - sort and remove duplicates/repeats/doubles
uniq - show or omit repeat lines (lines must be sorted first)
-c - count number of occurrences
-d - only print duplicate lines
-u - only print unique lines
-cd - count duplicate lines
-cu - count unique lines
-i - ignore case
diff <file1> <file2> - difference between files
-y - side-by-side output
--suppress-common-lines - does what it says
basename <string> - strip/trim/cut filename in full pathname (ie. /dir/file --> file)
dirname <string> - strip/trim/cut pathname(ie. /dir/file --> /dir)
head - print the head of the input
-N - where N is the number of lines
-cN - where N is the number of characters
-c-N - where N is the number of characters to cut off at the end
tail - print the tail of the input
-N - where N is the number of lines (ie. "tail -2")
-n +N - print all except the last N-1 lines (so to print all lines except the first: "-n +2")
-cN - where N is the number of characters
-c+N - where N is the number of characters to cut off at the beginning
-f <filename> - continuously watch the bottom of a file. Good for monitoring log files or nohup files.
cut - cut text. Pipe or specify filename (|cut -cN where N represents bytes, or cut -cN file.txt).
by default, cut will output bytes specified.
--complement - will output all except specified bytes.
-cN,M,O - list of bytes
-cN-M - range of bytes
-dC -fN - delimiter character C, pull field N (cut -d: -f1 /etc/passwd will give you usernames)
fold - wrap each input line to fit in specified width
-w N - wrap with a screen width of N columns
-s - wrap on spaces
aspell - spell checker. Can be used like "cat file.txt|aspell list"
grep specific line: <output> | head -2 | tail -1 | grep <string>
-r - recursive
-B<#> -A<#> - display # number of lines before and after pattern
-E - extended regex
-e - enter multiple expressions like: -e "EXP1" -e "EXP2"
-G - basic regex
-P - perl regex
-v - show non-matching lines
-i - ingore case
-c - count lines instead of output
-n - include line numbers in output
-l - list files that contain matching lines
-L - list files that do not contain matching lines
-o - print only matching string
-q - no output
-s - no error messages
egrep - uses regex. same as grep -E
fgrep - does not use regex
pgrep - grep process tree
grep -i "$1" <<+ - uses everything between the +'s as input.
thing1
thing2
+
sed 's/hello/goodbye/g' - replace
's/hello/goodbye/g;s/hi/bye/g' - multiple statements (delimited by a ';')
's/hello/goodbye/n' - replace the nth occurrence
'/string/ s/hello/goodbye/g' - search first for line that matches 'string' then replace within that line
'/string1/,/string2/p' - search all lines between tags string1 and string2, then print them
'/^\s*\?string1/' - match string1 with zero or more spaces before it
'/^\s*$/d' - delete empty lines
'/./,$\!d' - delete empty lines at beginning of stream (ie. at top of file)
NOTE: Non-standard versions of sed may require [[:space:]] instead of \s for whitespace.
sed -i 's/apple/banana/g' file.txt - replace string in a file "in place" (changes the file). Use '-i.bak" to save a backup of the original with a .bak extension.
cat file | sed -n '/string1/,$p' | sed '/string2/,$d' - print all lines between string1 and string2
(including string1, excluding string2)
awk -F, '{print $3}' file.csv - print 3rd column in comma-delimited file
od -t x1 -w 32 <file-or-output> - display ascii in hex(1byte) width of 32bytes (16 default)
hd, hexdump, xd, xxd - other common hex dump programs
ghex - good graphical hex editor
nl - count line numbers (ie. cat file|nl)
tr - translate (pipe output to tr)
tr '123' 'abc' - turn 1>a 2>b 3>c in a file (pipe from cat)
tr '[A-Z]' '[a-z]' - uppercase to lowercase
tr -d '[0-9]' - delete
tr -cd '[0-9]' - delete all except these characters
tr -d '[:print:]\r\n\t' - delete non-printable characters
wc - count length of something
-c - bytes
-m - characters
-l - lines
-L - length of longest line
-w - words
exit 0 - exit with normal status
exit 1 - exit with error status
true - produce 0
false - produce 1
dmesg - bootup message dump
last - login log
who - who is currently logged on
w - who is currently logged on and more
finger <user name> - user info
will show the contents of .plan, .project, and .pgpkey files in home folder
id <user> - user details
users - list of users currently logged on
date - the date
+%s - epoch time
+%Y%m%d%H%M%S - Year Month Day Hour Minute Second
+%Y-%m-%d_%H:%M:%S - character delimited
+"$Y %m" - quoted to allow space
+%T - same as %H%M%S
+%r - 12 hour time
+%u - day of week
d=`date +"%F %s"`;dt=`echo $d|awk '{print $1}'`;ep=`echo $d|awk '{print $2}'` - get date and epoch in one date command
cal - display calendar
-3 - show 3 months (previous, current, next)
-y - show whole year
dpkg-reconfigure tzdata - set timezone
info - info on things
help - find info for bash built-in commands
free -m - memory info in MB
lshw - list hardware
lspci [-d <vendor>:<device>:<class>] - PCI bus/device info (/proc/bus/pci/*/* and /sys/bus/pci/devices/pci0000::00/*)
-v, -vv, -vvv - verbose output levels
-m - display in different format
-n, -nn - display vendor/device codes (required to use -d option)
-t - display a tree view of the PCI bus
-k - display kernel drivers used by each device
-x, -xxx, -xxxx - hex dump of PCI configurations (displays little-endian, so every 2 bytes are reversed)
-d <vendor>:<device> - choose which device to query (use -n to get vendor/device codes)
-s [[[[<domain>]:]<bus>]:][<slot>][.[<func>]] - tell it what device to query
setpci - query and configure PCI devices
-v - verbose
--dumpregs - dump all config space registers (including human friendly names)
-O <param>=<value> - set a parameter of the device (-O is capital "O", not zero)
-d <vendor>:<device> - tell it what device to query/configure (use "lspci -n" to get vendor/device codes)
-s [[[[<domain>]:]<bus>]:][<slot>][.[<func>]] - tell it what device to query/configure
-O help - list known parameters that can be configured with "-O <param>=<value>" (-O is capital "O", not zero)
lsusb - list USB devices
ipcs -a - list IPC ramdisk usage. Ramdisk is mounted at /run. (IPC: Inter-Process Communication)
lscpu - list CPU info
nm-tool - network device report
df -h - disk space (human readable)
du - file sizes
-c - print total at the end (pipe to tail -1 to only see total)
-h - human readable
mount -t <type> -o <option,option...> //server/share /mnt/mountpoint
-t - type
cifs - better choice than smbfs
nfs
-o - options
ro - read-only
rw - read/write
dev - interpret special devices on filesystem
nodev - do not interpret devices
noperm - sometimes fixes permissions problems
exec - allow execute
noexec - do not allow execute
loop - allows an image file to be mounted
group - allow normal users to mount filesystem if they are in the same group as the device
owner - allow normal user to mount if they are the owner of the device
user - allows the ordinary mounting user to mount/unmount the fs
users - allows all ordinary users to mount/unmount the fs
remount - attempt to remount
suid - set uid
nosuid - do not set uid
uid=<name or #> - set uid
guid=<name or #> - set guid
guest - allow guest access
username=<name> = username for filesystem
password=<pass> - password
credentials=<file> - give credentials file instead of username and password
format: username=<name>
password=<pass>
umount /mnt/mountpoint - unmount the share
showmount <host> - shows hosts with shares or shows shares on <host>
-a - show all
fuser - identify processes using files or sockets (always use verbose "-v")
-vm <mount/device> - identify processes using a mount
losetup <target> <source> - setup a loop device, can map a partition from a disk image
-o <offset> - offset of partition from file (fdisk: sector size * start)
-d <devfile> - detach loop device (-D to detach all)
-l - list all attached loop devices
-r - attach as read-only device
-f - find next unused loop device
<target> - usually /dev/loop0 (or 1, 2, etc.)
<source> - the source file (ie. disk.img)
Note: after setting up the loop device, you can install a fs on it and mount it
shred -u <file/directory> - securely delete files
srm - securely delete files (part of package "secure-delete")
sfill - securely overwrite empty space. use tune2fs to free up reserved space. (part of package "secure-delete")
sswap - securely overwrite swap partition (part of package "secure-delete")
sdmem - securely overwrite free ram (part of package "secure-delete")
chkrootkit - rootkit scanner
rkhunter - rootkit scanner
clamav - anti-virus
lynis - vulnerability scanner
debsecan - vulnerability scanner
tiger - vulnerability scanner
yasat - audit tool
bleachbit - disk/cache cleaning, drive wiping, etc.
acct - process and login accounting (audit tool)
accton <filename> - start accounting and log to filename
accton off - turn accounting off
dump-acct <filename> - read an accounting file in human readable format
dvdbackup - great dvd ripping on the command line
steghide - steganography tool. hides/embeds data into other data.
ffmpeg -i <input.file> <output.file> - extract audio from video. Extension of output file determines output format.
gtk-recordmydesktop - desktop recorder
kazam - desktop recorder
growisofs -dvd-compat -Z /dev/dvd=/path/to/image.iso - burn image to DVD
convert file1.png file2.txt outfile.pdf - convert several different file formats to pdf pages
fdisk <device> - manipulate partition table (ie. fdisk /dev/sdb; can also provide filename)
-l - list disks (pipe to grep "^Disk" for sleekness)
echo -e "n\np\n1\n\n\n\nw\n" | fdisk <devname> - automatically create partition
sync - write changes to disk (do 'cat /proc/meminfo|grep Dirty' to watch progress)
dd if=inputfile of=outputfile bs=4M count=4 seek=2 conv=notrunc,noerror
bs - block size
count - copy only N blocks
seek - skip N blocks at start of output (where you are writing to)
skip - skip N blocks at start of input (where you are reading from)
notrunc - do not truncate
noerror - no halt on error
status=progress - display progress as dd runs
kill -USR1 $(pgrep ^dd) - send USR1 signal to dd to get output of its progress (run this from another terminal or with dd running in the background)
ddrescue <source> <destination> [<logfile>] - dd for damaged drives (from package "gddrescue")
-r <n-retries> - number or retries per block
-v - verbose
fsck <device> - check UNMOUNTED filesystem
hdparm <option> <device> - hard disk information
-t - benchmark transfer rate
-C - Check the state of a device
-g - show disk geometry
-y - Force the drive into standby (spin down)
-f - Sync and flush buffer cache
-F - Flush the on-drive write cache
-S[0-240] - Set disk timeout (spin down). Number is in seconds times 5. (eg. -S120 is 10 minutes)
iotop -botqqq - I/O monitoring of disk read/write. If you want to write the output to a log file, place the file in a ram disk (tmpfs) to prevent disk usage.
-b - batch (continuously log)
-o - only show active I/O
-t - timestamp
-qqq - quiet. No header or summary info.
iostat -m -p <dev1>,<dev2>,... - show I/O statistics
tune2fs <option> <device> - manipulate filesystem
-m <#> - change % of reserves blocks on partition (set to 0 to maximize storage space)
-l - show extensive filesystem info
-j - add journal
-L <label>
wipefs <device> - wipe filesystem signature. Alone, it shows a table of offsets of signatures on device.
-o <0x#> - offset of signature to delete
-a - erase all signatures
-n - dry run
addpart <device> <#> <start> <length> - add a partition (ie. addpart /dev/sdb 1 0 2048)
start - start point
length - length in 512 byte blocks
!still don't know how to write table to disk!
delpart <device> <#> - delete partition (ie. delpart /dev/sdb 1)
mkfs <device> - make a file system
-m <#> - % of reserves blocks on partition (set to 0 to maximize storage space)
-t <type> - ext2, ext3, ext4, msdos, vfat
-L <label>
-j - create journal
-c - check for bad blocks before write
-q - quiet
blkid - list file systems
lsblk - list file systems in a tree format
mkswap <file> <bytes> - make the file into a swap file. follow it with 'sync' command to finalize.
mkswap <device file> - make a partition into swap space. Partition but be "Linux swap / Solaris" type.
swapon <file> - initialize the swap file. To make permanent, add swap to fstab (/dev/sda2 swap swap defaults 0 0).
badblocks -s /dev/sda - test main drive for bad blocks
ntfsprogs - a collection of ntfs tools for working with and fixing ntfs.
ntfsfix <device> - one of the tools in ntfsprogs. very useful.
dmidecode - view ALL hardware info
uname -a - kernel/system info
hostname - show hostname of system
hostname <name> - temporarily change hostname to <name>
-f - show fqdn of system
arch - system architecture
route - manage routing table
route add -net 0.0.0.0 netmask 0.0.0.0 gw <gtwy-addr> - set default gateway
route del <route> - deletes route
routel - route with nicer output (more verbose)
routef - flush routing table
ldd <file> - show library dependencies of a program file
vbetest - test screen resolution
add 512 to number in bracket and put as vga=XXX to set res at boot
chntpw - change password for windows xp
calibre-bin - e-book converter
mknod <name> <type> <major> <minor> - make new device file
example: mknod /dev/new b 1 0
-m XXX - permissions
lsmod - list modules
modinfo <module> - information about module
rmmod <module> - remove module
insmod <module> - insert module
modprobe <module> - manipulate modules
-r - remove
-f - force
synclient - manage touchpad mouse settings
synclient MaxTapTime=0 - disable touchpad clicks. default: 180
ifconfig - network info
ifconfig <interface> <address> netmask <mask> - set static ip
ifconfig <interface> hw ether <mac addr> - spoof mac address
ifconfig <interface> <com> - configure interface
up
down
promisc - enable promiscuous mode
-promisc - disable promiscuous mode
iwconfig <interface> <options> - wireless interface configuration
mode monitor - enable monitor mode
mode managed - disable monitor mode
mode ad-hoc - enable ad-hoc
mode master - act as access point
mode repeater - act as repeater
mode secondary - act as master/repeater
nmcli - Redhat (CentOS)
nmcli d - brief stats
nmtui - Network Manager terminal UI.
hciconfig - bluetooth interface configuration
nmap - port scanner
nmap -A <host> - scan all the things
nmap -sn <network> - get only MAC addresses and IPs for all hosts
netstat - network info
-s - statistics
-l - listening ports and services
-r - routing table
-i - interfaces
-p - show pids
-t - tcp
-u - udp
-a - all
lsof - list open files
-i - list processes that are listening on the network
Example output:
less 19396 root 4r REG 253,17 16 1001045 /root/list.txt
You may be able to use this to recover deleted files.
Notice the 2nd column (PID), and the 4th column (FileDescriptor [without the "r"])
If the file is still open by a process, you can run: cp /proc/<PID>/fd/<FD> ~/recovered_file.txt
Example: cp /proc/19396/fd/4 ~/list.txt
nslookup <hostname/addr> - dns lookup
dig <hostname> - dns lookup
dig -x <addr> - reverse name lookup
tracepath - equivalent to traceroute or tracert
dhclient -4 <interface> - set interface to dhcp (ip4)
whois <hostname/addr> - domain info
wget <options> <url> - download into working dir
-r - recursive
-l <#> - depth for recursion
-H - span hosts for recursion
-np - no parent directories
-nd - no directories
-k - convert links for local viewing
-A <list> - accept
-R <list> - reject
-b - run in background
-i <file> - download from list of URLs
-m - mirror. use for downloading whole site
-p - page requirements. use for downloading whole page
-o <file> - log file
--user-agent=<text> - mask wget as a browser
to mask as firefox: "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.3) Gecko/2008092416 Firefox/3.0.3"
curl <url> - make http requests
--connect-timeout <seconds>
-m <seconds> - max time for whole operation
-i - include http header in output
-I - retrieve header only
-x <host:port> - proxy
-s - silent
--socks4a <host:port> - socks4a proxy
-o <filename> - output file
-O - output to file with same name as remote file
tsocks <command> - ports command through proxy
tor uses socks4a
use with tor - under /etc/tsocks.conf change lines to:
server = 127.0.0.1
server_type = 4
server_port = 9050
html2text - converts/parses html into text
dos2unix - convert DOS line delimiters (\r\n) to UNIX line delimiters (\n)
unix2dos - convert UNIX line delimiters (\n) to DOS line delimiters (\r\n)
unix2mac - convert UNIX line delimiters (\n) to Mac line delimiters (\r)
mac2unix - convert Mac line delimiters (\r) to UNIX line delimiters (\n)
minicom - use to configure routers via com/serial port.
nc <host> <port> - create tcp/udp connection (also called netcat)
ports can be specified as range x-y
-l - listen
-k - keep listening (must be used with -l)
-4 - ipv4
-6 - ipv6
-u - use udp
-w <#> - timeout in seconds
-n - no dns or service lookups
-x <address> <port> - proxy
-X - proxy protocol
4 - socks4
5 - socks5
connect - http
-s - source address
-p - source port
-z - scan host if port is open (only works if a service is listening on the host)
write <username> - write a message to someone logged on
mesg y - allow messages
mesg n - deny messages
vim - text editor
i - insert mode
r - replace mode
o - add new line under cursor and enter insert mode
esc - command mode
k j h l - up, down, left, right
yy - yank current line (nyy - yank n lines including current line)
p - put line (after current line)
u - undo
U - undo line
ctrl+r - redo
x - delete
dd - delete line (and save to clipboard; similar to cut)
J - delete newline at end of current line
~ (shift+grave) - toggle upper/lower case
G - go to last line
1G - go to first line
<n><x> - do x n number of times (ie. 100dd, 20x, 50yy)
:q - quit
:q! - force quit
:w - save
:wq! - save and quit (force)
:w !sudo tee % - magic way to save the file as root after the file was opened without root privileges
:set number - line numbers (set nu)
:set nonumber - no line numbers (set nonu)
:set mouse=a - enable mouse
:syntax on/off - enable/disable syntax highlighting
:set ignorecase - case insensitive searches (set ic)
:set noignorecase - case sensitive searches (set noic)
:set smartcase - enable smartcase searches
:set nosmartcase - enable smartcase searches
:s/string1/string2/g - search and replace a single instance on a single line
:%s/string1/string2/gc - search and replace (%s=search all lines, g=replace, c=ask for confirmation)
bvi - binary vi editor (hex editor)
nuitka --portable script.py - python compiler. Compiles a Linux executable from script.py
shc - Linux shell script compiler. Converts a shell script into C code, then compiles into binary.
-r - Relaxed security. Make binary portable to other systems.
-T - allow stack tracing (ie. strace, ptrace, etc.)
-v - verbose
-f <filename> - the filename of the script to compile
apt-get update - update package lists
apt-get upgrade - install latest package versions
apt-get install <package> - install a package
apt-get install -f - fix missing packages
apt-get source <package> - download source code
apt-get download <package> - download the package binaries
apt-get remove <package> - removes a package
apt-get purge <package> - removes a package and its all configs
apt-get clean - clears the local cache
apt-get autoclean - intelligently clear the cache of "useless" stuff only
apt-get autoremove - uninstall packages that are no longer necessary
-y, --yes - assume yes
--force-yes - more dangerous
--reinstall - reinstall a package
apt-cache search <regex> - search package names and descriptions
apt-cache show <package> - show info about package (including dependencies)
apt-cache depends <package> - show dependencies (and alternatives)
apt-cache rdepends <package> - reverse dependencies (packages that depend on this one)
-f, --full - show full package info in search results
apt-mark hold <package> - hold a package; prevent automatic updating
apt-mark unhold <package> - remove a package hold
apt-mark auto <package> - mark a package as automatically installed
apt-mark manual <package> - mark a package as manually installed
apt-mark showhold - show a list of holds
apt-mark showauto - show a list of automatically installed packages
apt-mark showmanual - show a list of manually installed packages
apt-config dump - show all apt configurations
dpkg - debian package manager
-l - view all packages installed
-i <file> - install deb file
-I <file> - info about file, including dependencies.
-r <package> - remove package
-P <package> - purge package
-C - audit. search for partially installed packages.
--configure <package> - configure a package
--force-all - force the operation
dpkg-query -W - view all packages installed (full package name)
do-release-upgrade - upgrade distro (debian)
export DEBIAN_FRONTEND=noninteractive - disable confirmations during apt-get install
rpm - red hat package manager
-i - install
-U - update
-e - erase/uninstall
-qa - list packages in Red Hat
-ql <package> - list files owned by package
-qi <package> - more info on package
-qf <file> - which package a file belongs to
--initdb - initialize database
yum - package installer for Red Hat
yum check-update - list packages with available updates
yum clean all - cleans packages
yum search <word> - searches repositories
yumdownloader - downloads, not installs, rpm packages
--destdir <dir>
--source
--resolve - download dependencies as well
yum-utils - package contains several yum tools, including yumdownloader
./configure && make && make install - install form source, first cd into directory
createrepo <dir> - make a software repository
ps - active processes
-e - all processes
-f - full info
-l - even more info
aux - a good long-list format
pstree -r - process tree
pgrep -l <string> - grep process tree
pmap -x <pid> - show how a process is using memory
top - system monitor
z - toggle colors
Z - change color mapping
B - toggle bold
b - toggle bold/reverse
<,> - change sort field
x - toggle highlight sort field
y - toggle highlight running processes
c - toggle full command names
k - kill process
r - renice. change NI value to alter priority
d or s - set update interval
W - write config file
h - help
q - quit
l,t,m - toggle summaries at top
1 - toggle CPU display
I - irix/solaris mode
i - idle processes
f - change fields
o - change display filter (FIELD=STRING)
F or O - sort field
R - reverse sort
H - toggle threads
S - toggle cumulative time
u - show specific user only
n or # - set max tasks displayed
atop - another tool for monitoring system activity
mpstat - CPU usage (performance, system status)
iostat - display disk/drive stats
-m - display in Megabytes
-p <hd1,hd2,...> - display only these devices
ioping <dev> - a ping-like tool for block devices
jobs -l - active jobs
jobs -p - jobs by process #
bg <job#> - starts a paused job and runs in background
fg <job#> - brings job to foreground
<command> & - run in background
ctrl+z - pauses job
kill <pid> - kill process ID
%<#> - kill job number
-N - where N is a number that represents a signal (ie. -9 is SIGKILL)
-s <signal> - send specified signal to process (ie. TERM)
-<signal> - short form of -s <signal>
-USR1 - user-defined signal 1. dd responds by printing its progress!
killall <process name> - kill process by name (extremely dangerous! Don't run without a parameter!)
-I - ignore case
-i - interactive
-r - regex
-u <user> - kill all processes for user. command name is optional
xkill - xfce4 tool to kill and unresponsive program. Create a launcher in the panel and put 'xkill' as the command.
for x in 'jobs -p';do kill -9 $x;done - kill all jobs
coproc [NAME] command [redirections - spawn a "co-process" or asynchronous subshell (like ruunning 'command &') and establish a 2-way pipe between parent and child shells.
NAME - an array variable created in the parent and child shells.
NAME[0] - standard output of command (child shell)
NAME[1] - standard input of command (child shell)
NAME_PID - process ID of child shell
wait - the wait command can be used to wait for coprocess to finish
exit status of coproc is always 0, check status of command instead
parallel <command> - run in parallel
Example: find . -type f -name '*.mp4' | parallel gzip - zip many mp4 files in parallel
Installed with package 'parallel' (Debian), not from package 'moreutils' (it's different).
WHITESPACE PROBLEM - $IFS is used to determine field separator. It usually includes all whitespace, so to process line by line, do this:
s=$IFS
IFS=`echo -en "\n\b"`
for x in $whatever;do something;done
IFS=$s
# A shorter way, but not yet POSIX compliant: IFS=$'\n\b'
# The \b is necessary to prevent \n from being removed.
# Using IFS=$'\n' method might actually work without the \b.
history - list of previous commands
-c - clear current history
fc -l - list of previous commands
fc -s <#> - re-execute command
!! - previous command
!<#> - execute command # from history
!command - execute most recent 'command'
!string - execute most recent command that starts with 'string' (ie. !c)
!$ - last word of previous line (ie. mkdir test;cd !$ #creates/navigates to test)
!^ - the first argument of previous line (second word, ie. $1)
!* - all the arguments of previous line (i.e $*)
!:2 - the second argument of previous line (can be any number)
!# - the current command line. (ie. 'ls hello !#' expands to 'ls hello ls hello')
!#^ - first argument of current command (also try $, :1, etc.)
^string1^string2 - execute last command and replace string1 with string2
!!:s/string1/string2/ - execute last command and replace string1 with string2
!!:gs/string1/string2/ - execute last command and replace ALL INSTANCES of string1 with string2
esc + . - insert last parameter from last command
adduser <options> <user> - add a user
-m - make a home directory
-d <path> - home directory
-s <path> - shell
-p <pass> - password
-g <group> - primary group
-G <groups> - secondary groups (comma separated list)
(example) useradd -m fred
usermod <options> <user> - modify user or add it to a group
-d <path> - home directory
-s <path> - shell
-p <pass> - password
-g <group> - primary group
-G <groups> - secondary groups (comma separated list)
(example) usermod -G admin bob
userdel -r <user> - delete user, home folder, and mail spool
groupadd <name> - add new group
restorecon /dir - restores selinux labels. use on dirs like /var if you move them.
fixfiles relabel /dir - same as restorecon. worked before.
wmctrl -r <WINDOW_ID> -e <POSTION/DIMENSIONS> - move/resize window
-r :ACTIVE: ... - use the :ACTIVE: keyword to select the active window
-e g,x,y,w,h - window position and dimensions as follows
g - gravity (just set this to 0)
x - x positon of window origin (top-left)
y - y positon of window origin (top-left)
w - width of window
h - height of window
-b <ACTION>,<PROPERTY>,... - add/remove window properties
wmctrl -r :ACTIVE: -b add,maximized_vert,maximized_horz - maximize window
wmctrl -r :ACTIVE: -b remove,maximized_horz
-lG - list window geometry information
xdotool <ACTION> <WINDOW_ID> <PARAMS> - automate windows, mouse, and keys. Can create macro scripts.
xdotool getactivewindow - get the active window ID
xdotool windowmove $(xdotool getactivewindow) 0 0 - move to top-left of screen
xdotool windowmove $(xdotool getactivewindow) 100% 100% - maximize window
xdotool windowsize $(xdotool getactivewindow) 50% 100% - half width
xdotool getwindowgeometry $(xdotool getactivewindow)
Other actions available: key, keydown, keyup, type, mousemove, click, etc.
xdpyinfo - show display/screen information
xprop - show display, screen, and window information. Running without arguments lets you select a window with the mouse.
xprop -id <WINDOW_ID> - get info about window
chmod <perms> <file> - set a file's permissions
-R - recursive
apply to:
u - user
g - group
o - other
a - all
permissions:
r - read
w - write
x - execute
s - SetUID (suid) AND SetGID (sgid)
t - Sticky Bit. Files in a directory with the sticky bit set can only be deleted or renamed by the root user or the owner of the directory.
examples:
u+rwx
g-w
o=rx
+s
u=rwx,g=rx,o=rx (can be comma separated)
octal permissions:
rwx rwx rwx
111 101 101
7 5 5
if four octal digits are used, the first digit is:
0 - no special permissions
1 - sticky bit (do not allow rename or delete, but will allow write if file has +w)
2 - set group ID (other can run as group)
4 - set user ID (other can run as user)
example:
chmod 6755 file (setuid and setgid, looks like: rwsr-sr-x)
if it shows capital 'S' it means it has setid, but not execute permissions (useless)
chmod 1777 file (sticky bit, looks like: rwxrwxrwt)
if it shows capital 'S' it means it has sticky, but not execute permissions
chown - change ownership if files/directories
-R - recursive
examples:
chown -R user:group /this/folder
chown user file
chown :group file (only change group)
add user to sudoers file:
echo '<user> ALL=(ALL) ALL' >> /etc/sudoers
You should use 'visudo' to edit /etc/sudoers instead
passwd <user> - set password
-d - delete password
-e - expire password
-l - lock password
-u - unlock password
-S - status of password
update-grub - updates grub config
shutdown <option> <time> <message>
-h - hault
-r - reboot
-P - poweroff
-c - cancel
time
now - shutsdown now
n - shuts down in n minutes
n:00 - shuts down at n o'clock
telinit <#> - change runlevel
init <#> - change runlevel
runlevels:
0 halt
1 1user text
2 multiuser text
3 multiuser text, network
4 user defined
5 multiuser with x
6 reboot
service <opt> <daemon> <command> - manage daemon
start
stop
restart
status
--status-all
chkconfig <opt> <daemon> <command> - make daemon run on startup
on
off
--list
--level <#s> - specify runlevels command pertains to (ie --level 35 for 3 and 5)
--add <name> - add as service
--del <name> - delete as service
place this at beginning of file to make usable with chkconfig (most are optional):
### BEGIN INIT INFO
# Provides: name
# Required-start: parent-name
# Default-start: runlevels (0 1 2)
# Default-stop: runlevels (0 1 2)
# Description: description
### END INIT INFO
systemctl <opt> <command> <daemon> - manage daemons in systemd
start
stop
reload
restart
status
enable
disable
mask - extreme disable (makes it impossible to start the service; use with caution)
unmask - remove the mask
journalctl -f - follow the systemd event log
systemd-analyze blame - look at individual service boot times
update-rc.d <opt> <daemon> <command> [S|1|2|3|4|5] - old init service control
-n - dry-run
-f - force
defaults - enable the daemon with default startup configurations
enable
disable
<runlevels> - specify runlevels to enable/disable for (ie "23" will specify runlevels 2 and 3)
read - pause and wait for input
to make a function (2 different ways):
function_name(){
commands
}
function function_name {
commands
}
declare -f function - prints out the code behind 'function'
to carry a function over to a subshell (ie. just doing bash -c "function" doesn't work):
bash -c "$(declare -f function); function"
to make a function read from standard input (stdin) so that you can pipe something to a function:
function(){
read stdinput
echo "This was piped in from stdin: " $stdinput
}
to catch errors:
if 'command';then
echo SUCCESS
else
echo ERROR
fi 2>/dev/null
to create exit condition and capture ctrl+c:
# run if user hits control-c
exit_f(){
<commands>
}
# trap keyboard interrupt (control-c)
trap exit_f SIGINT
# can also trap exit of any kind
trap exit_f EXIT
SIGNALS:
SIGHUP 1 Hangup (POSIX)
SIGINT 2 Terminal interrupt (ANSI) - CTRL+C
SIGQUIT 3 Terminal quit (POSIX)
SIGILL 4 Illegal instruction (ANSI)
SIGTRAP 5 Trace trap (POSIX)
SIGIOT 6 IOT Trap (4.2 BSD)
SIGBUS 7 BUS error (4.2 BSD)
SIGFPE 8 Floating point exception (ANSI)
SIGKILL 9 Kill(can't be caught or ignored) (POSIX)
SIGUSR1 10 User defined signal 1 (POSIX)
SIGSEGV 11 Invalid memory segment access (ANSI)
SIGUSR2 12 User defined signal 2 (POSIX)
SIGPIPE 13 Write on a pipe with no reader, Broken pipe (POSIX)
SIGALRM 14 Alarm clock (POSIX)
SIGTERM 15 Termination (ANSI)
SIGSTKFLT 16 Stack fault
SIGCHLD 17 Child process has stopped or exited, changed (POSIX)
SIGCONTv 18 Continue executing, if stopped (POSIX)
SIGSTOP 19 Stop executing(can't be caught or ignored) (POSIX)
SIGTSTP 20 Terminal stop signal (POSIX) - CTRL+Z
SIGTTIN 21 Background process trying to read, from TTY (POSIX)
SIGTTOU 22 Background process trying to write, to TTY (POSIX)
SIGURG 23 Urgent condition on socket (4.2 BSD)
SIGXCPU 24 CPU limit exceeded (4.2 BSD)
SIGXFSZ 25 File size limit exceeded (4.2 BSD)
SIGVTALRM 26 Virtual alarm clock (4.2 BSD)
SIGPROF 27 Profiling alarm clock (4.2 BSD)
SIGWINCH 28 Window size change (4.3 BSD, Sun)
SIGIO 29 I/O now possible (4.2 BSD)
SIGPWR 30 Power failure restart (System V)
EXIT -- Exit signal of any kind
if <!> [ <!> <?> yada yada ] - tests
-e - if exist
-f - if file
-d - if directory
-r - if readable
-w - if writable
-x - if executable
-b - if block device
-c - if character device (tty)
-p - if pipe
-s - if exist with size greater that 0
-L - if symbolic link (also -h)
-S - if socket
-O - if you are owner
-G - if you are in group
-N - if modified since last read
-z - if zero length
-n - if non-zero length
! - negation (also tests if command produces error)
if <!> [ <!> expr1 <?> expr2 ] - combining expressions
file1 -nt file2 - if newer than
file1 -ot file2 - if older than
file1 -ef file2 - if both links to same file
expr1 -a expr1 - boolean AND
expr1 -o expr1 - boolean OR
! - negation (also tests if command produces error)
if [ $test1 ];then
do 1
elif [ $test2 ];then
do 2
else
do 3
fi
|| - or
&& - and
! - not
simplified if statement (good for switching debug mode on/off):
a=true
$a && echo "This will echo"
a=false
$a && echo "This will not"
debug=false
$debug && echo "This only echoes if debug mode is ON"
$debug || echo "This only echoes if debug mode is OFF"
() - sub-shell
{ a;} - run command 'a' in current shell (first space and ';' are necessary)
$() - command substitutions
(()) - arithmetic, "let", used when it contains an 'equals' sign
$(()) - arithmetic expansion, no 'equals' sign enclosed
[] - test
[[]] - test with string comparison
[[ $str =~ $regex ]] - string compare regex
!(not-this) - anything but this, invert
example: ls -d !(Downloads) - list everything EXCEPT Downloads
for item in $LIST;do
echo $item
done
for (( i=0; i<5; i++ ));do
echo $i
done
# Prompts the user with a numbered selection menu
# PS3 is the prompt, REPLY is the number selected by the user
# you can do nested select statements
# break exits the current nested select
# you can do 'break n' where n is the number of times you want to break
# selection menu doesn't display again if you go back to it, so put it in a loop
#
PS3="Choose a snack: "
select food in apple banana pear;do
echo "$REPLY - $food"
break
done
parallel processing; wait for sub-shells:
wait - do not continue until all sub-shells complete
Example: ( (sleep 2;echo p1) & (sleep 1;echo p2) & wait ); echo DONE
Note: putting everything in a sub-shell suppresses job output.
$0 - Filename of script
$1 - Positional parameter #1
$2 - $9 - Positional parameters #2 - #9
${10} - Positional parameter #10
$# - Number of positional parameters
$* - All the positional parameters (as a single word) *
$@ - All the positional parameters (as separate strings)
${#*} - Number of positional parameters
${#@} - Number of positional parameters
$? - Return value or exit status
$$ - Process ID (PID) of script
$- - Flags passed to script (using set)
$_ - Last argument of previous command
$! - Process ID (PID) of last job run in background
wildcards:
* - anything
? - any single character
[abc] - single character matching a, b, or c
[a-e] - single character matching a, b, c, d, or e
[!a-e] - single character NOT matching a, b, c, d, or e
let a+=b - add
let a-=b - subtract
let a*=b - multiply
let a/=b - divide
let a**b - exponent (a to the b)
let a%b - modulo
let a++ - increment
let a-- - decrement
let a<<b - bitwise shift left
let a>>b - bitwise shift right
let a&b - bitwise AND
let a|b - bitwise OR
let a^b - bitwise XOR
let a&&b - logical AND: returns true if a AND b
let a||b - logical OR: returns true if a OR b
let a?b:c - conditional: if a then b else c
Most of these expressions can also be used in arithmetic brackets (())
# Bitwise operations
printf "0x%x\n" $(( 0x01 << 1 )) - left bit shift
printf "0x%x\n" $(( 0x01 >> 1 )) - right bit shift
printf "0x%02x\n" $(( 0x0a << 1 )) - pad with zeros (2 digits)
printf "0x%d\n" $(( 0x0a << 1 )) - print in decimal
expr - resolve math and string expressions. doesn't work with float numbers.
expr ARG1 < ARG2 - outputs 0 if false, and 1 if true
expr ARG1 \< ARG2 - sometimes you need to escape the operator to avoid conflict with shell operators, including parentheses
+, -, *, /, % - math operators
<, >, =, !=, <=, >=, |, & - other operators
expr match STRING REGEXP - string matching
expr substr STRING POS LENGTH - substring, POS counted from 1
expr index STRING CHARS - find CHARS in STRING
( EXPRESSION ) - parenthetical expression
bc - Precise calculator. Works with floats.
-l - use full precision
echo "2/5*(3.14*8)-2" | bc -l | sed 's/0*$//g' - trim trailing zeros
bc -l <<< "2/5*(3.14*8)-2"
while (("$#"));do - cycle parameters through $1 until none left
<commands>
shift
done
continue - put in loop to return to top of loop
case $string1 in
strA | srtB )
commands;;
srtC | strD )
commands;;
*)
commands;;
esac
echo "This is the best way to accept user input."
echo -n "Do you agree? [y,N] ";read ans
if [[ ${ans,,} =~ y.* ]];then
echo "Then you are wise."
else
echo "I see..."
fi
echo "You can also use a 'case' rather than an 'if' for user input."
echo -n "Do you see? ";read ans
case $ans in
[yY]|[yY][Ee][Ss])
echo "Then you are insightful.";;
*)
echo "I see...";;
esac
# you can use "shopt -s nocaseglob" to make case insensitive ("shopt -u nocaseglob" to unset)
# you can also do ${ans,,} for all lowercase, or ${ans^^} for all uppercase
put commands in .bashrc in home dir to run command at login
. <file> OR source <file> - run script such as '.bashrc' as part of current process
bash -x <script> - execute script in debug mode
source <file> - execute file in shell environment (ie. .bashrc)
reset - reset shell defaults
complete <parameters> <command> - configures shell auto-complete terms (complete command need to be sourced in the shell)
complete (with no parameters) - displays all existing auto-complete terms
complete -W "word list hello world" command - add the wordlist to the command
complete -A directory command - add the directory listing action to the command
complete -A file command - add the file listing action to the command
complete -A hostname command - add the hostname listing action, takes listing from a file defined by $HOSTFILE variable
complete -A service command - add the service listing action to the command
complete -C command2 command - executes command2 in subshell and displays output
complete -F function command - executes function, from the function's perspective: $1=command, $2=word_being_completed, $3=preceding_word, function should put listing in variable $COMPREPLY
complete -P prefix command - added to beginning of each completion listed
complete -S suffix command - added to end of each completion listed
-o <option>
bashdefault - perform the default Bash completion if no matches
default - use default filename completion if no matches
dirnames - directory name completion if no matches
filenames - file name completion if no matches
noquote - do not quote filenames
nosort - do not alphabetically sort listing
nospace - do not append spaces to end of lines
/etc/bash_completion.d - you can place completion scripts in here, and they will be sourced when an new bash shell is executed.
Example of a completion script with multi-level word lists:
have vb &&
_vb_complete()
{
local cur prev
COMPREPLY=()
cur=${COMP_WORDS[COMP_CWORD]}
prev=${COMP_WORDS[COMP_CWORD-1]}
if [ $COMP_CWORD -eq 1 ]; then
COMPREPLY=( $(compgen -W "list listall start stop halt" -- $cur) )
elif [ $COMP_CWORD -eq 2 ]; then
case "$prev" in
"list"|"listall")
COMPREPLY=( $(compgen -W "long short" -- $cur) )
;;
"start"|"stop"|"halt")
COMPREPLY=( $(compgen -W "force" -- $cur) )
;;
*)
;;
esac
fi
return 0
} &&
complete -F _vb_complete vb
set - set command
-x - set debug mode inside the script (xtrace on)
+x - unset debug mode (xtrace off)
-v - verbose on
+v - verbose off
-e - place at beginning of script to always exit upon error (then use ||true for commands that are allowed to err)
+e - temporarily bypass set -e
-C - enable noclobber
+C - disable noclobber
-H - enable histexpand (i. "!" notation)
+H - disable histexpand (i. "!" notation)
-f - disable pathname expansion, like using asterisk '*' (noglob on)
+f - enable pathname expansion, like using asterisk '*' (noglob off)
-o <option> - enable option name (ie. -o noclobber)
+o <option> - disable option name (ie. +o noclobber)
-o history - enable command history
+o history - disable command history
-o pipefail - enable fail on piped commands
+o pipefail - disable fail on piped commands
-u - do not allow the use of undeclared variables
+u - allow the use of undeclared variables
completion-ignore-case on - tab completion ignores case
set <option_name> - another way to set things
unset <option_name> - another way to unset things
useful examples for set:
set -e; set -o pipefail
setterm -powersave off -blank 0 - make the X Window not blank the screen
setterm -reset - go back to default settings
setterm -msg off - disable printing kernel messages to console
shopt - shell options
-s <opt> - set the option
-u <opt> - unset the option
-s nocaseglob - make the shell case insensitive
tty - print the device file of the current tty
stty - terminal parameters
-a - list all parameters
<param> "<value" - set a param value
<(-)param> - enable/disable a param (ie. ofdel enables, -ofdel disables)
infocmp <term> - get info about terminal (terminfo, termcap)
showkey -a - enter keys to get their dec/oct/hex value as seen by the terminal (must be root).
terminator - multiple terminals in one window, customizable
tmux - multiplexed terminals in one terminal
ctrl+b - run a command (type the command after)
? - list key bindings
c - create new window
arrow keys - move between panes
0 to 9 - select a window
n - next window
p - previous window
o - next pane
" - split pane top/bottom
% - split pane left/right
x - kill the current pane
& - kill the current window
[ - enter copy mode
] - paste most recent buffer
= - paste from buffer of choice
r - force redraw of screen
: - enter tmux command prompt
alt+<1-5> - select a layout preset
space - next layout preset
alias <com alias>='<com>' - make alias command
\command - run a command ignoring aliases
which -a - all instances of executable in PATH locations
{1..10} {A..Z} {a..z} - ranges
{10..100..5}% - range 10-100 in units of 5 with "%" after each one (ie. 10% 15% 20% ...)
{000..999} - range with leading zeros
bash{e{s,d}} - yields "bashes bashed"
bash{,e{s,d}} - yields "bash bashes bashed"
${var:-value} - make var default to value if not set or empty (temporary; doesn't save the value)
${var-value} - make var default to value if only not set (empty doesn't count)
${var:=value} - set var default to value if not set (saves the value)
${var:+message} - if var is set, print message. if var is not set, print nothing
${var:?message} - if var is set, print var. if var is not set, print error with message
SCRIPT=$(readlink -f $0) - the script that is running
SCRIPTPATH="dirname $SCRIPT" - the dir of the script
${#var} - number of characters in var
${var#pattern} - removes shortest possible match from the left
${var##pattern} - removes longest possible match from the left
${var%pattern} - removes shortest possible match from the right
${var%%pattern} - removes longest possible match from the right
${var%?} - ? is single character wild card. To cut 3 characters from the right, use: ${x%???}
examples:
get file extension ${FILE##*.} file.txt -> txt
get file name from path ${FILEPATH##*.} /dir/file.txt -> file.txt
remove file extension ${FILE%.*} file.txt -> file
get directory name from path ${FILEPATH##*.} /dir/file.txt -> /dir
${var/pattern/string} - substitute pattern with string
${var//pattern/string} - substitute pattern with string (greedy)
${var//pattern/string} - substitute pattern with string (greedy)
${var/#pattern/string} - substitute pattern with string (start at left edge)
${var/%pattern/string} - substitute pattern with string (start at right edge)
${var,} - make first character lowercase
${var,,} - make var all lowercase
${var^} - make first character uppercase
${var^^} - make var all uppercase
${var~} - reverse case of first character in var
${var~~} - reverse case of var
${var,pattern} - lowercase first character if matches pattern
${var,,pattern} - lowercase any character if matches pattern
${var^pattern} - uppercase first character if matches pattern
${var^^pattern} - uppercase any character if matches pattern
${var~pattern} - reverse first character if matches pattern
${var~~pattern} - reverse any character if matches pattern
${var:n:m} - substring of var from character n to m (starting at 0; ${var:0:3} = first 3 chars)
${var::m} - blank implies 0 (ie. ${var::4} is the same as ${var:0:4})
${var:n} - cut off n characters from beginning (n=2; hello -> llo)
${var: -n} - cut off all but n characters from end (n=2; hello -> lo)
${var:n: -m} - cut off m characters from end of string starting at n (n=0,m=2; hello -> hel)
${!var} - indirection: if content of var is another variable name, then print the content of other variable
(ie a=b; b=c; echo ${a} #echoes "b"; echo ${!a} #echoes "c")
can also display variable names like: echo ${!BASH*} #echoes name of all vars that begin with BASH
x**y - y is exponent of x
% - remainder ie. $((15%7))
$((<base>#<value>)) - define a number's base
$((2#<value>)) - define binary number
$((8#<value>)) - define octal number
$((10#<value>)) - define decimal number
$((0x<hex>)) - define hex number
export <var>=<value> - set environment variable
declare <option> <var> OR <var=value> - set attributes for a variable (don't use $)
-a - array
-f - function name
-i - integer
-r - readable
-x - make global variable
+<?> - removes attribute
number=$RANDOM ; let "number %= 500" - chooses random number =< 500
while (( $number < 100 )) - sets a floor of 100
set range to 2 to generate binary (true/false). using let "number >>= 14" gives better random distribution
$((RANDOM%range)) - random # up to "range"
string{1,2,3} - expands to: string1 string2 string3
string{01..03} - expands to: string01 string02 string03
cp file.txt{,.old} - expands to: cp file.txt file.txt.old
placing the name of a variable into another variable:
two=2
num=two
echo ${!num} #echoes '2'
formatting 2 digit numbers:
i=2
printf "%02d" $i #echoes '02'
CHAR="[:graph:]";cat /dev/urandom|tr -cd $CHAR|head -c 8 #creates random 8 character password.
array:
list="a b c" - not an array, treated as whole string
array=(a b c) - array, treated as set of items
array=($list) - turn variable into array
${array[2]} - choose item 2 (starting at 0), chooses c in this example
${array[@]} - all items in array form
${array[*]} - all items in
${array[0]:n:m} - string splice (ie. x=(foo bar);echo ${x[1]:0}#echoes "bar";echo ${x[1]:1}#echoes "ar")
syntax - ${array[#]:begin:number} (ie x=(hello);echo {x[0]:0:3}#echoes "hel")
${array[0]:3:2} - specific characters (:3:2 starts at character 3 then goes 2 characters (including 1st) from there, displaying characters 3 and 4.) this can be used to show a range of items. (${list[*]:0:3} #echoes first 3 characters)
(ie x=(foo bar);echo ${x[1]:0:1}#echoes "b";echo ${x[1]:1:1}#echoes "a";echo ${x[1]:2:2}#echoes "r")
${array[@]:0:${#array[@]}-1} - display all items in list except the last one.
${array[@]:n:m} - similar to string splice, but works with array items instead of characters
(ie x=(foo man chu); echo ${x[0]:0:2}#echoes "fo"; echo ${x[@]:0:2}#echoes "foo man")
${#array[*]} - count # of items
${#array[0]} - length of first item
${array[$((RANDOM%num_of_item))]} - choose random item from list
${array[@]^} - make first char in each item uppercase (ie "hi bob" -> "Hi Bob")
unset array[0] - remove array item 0 (no "$" or braces)
array+=( "something new" ) - add another item to an existing array
list="11 22 33"
if [[ $list =~ $item ]];then echo yes;fi - checks if $item is contained in $list
escape characters:
\\ backslash
\a alert
\b backspace
\c no further output
\e escape
\f form feed
\n new line
\r carriage return
\t horizontal tab
\v vertical tab
\0 null
\0NNN octal number (0-7; 1-3 digits)
\xHH hex byte value (0-F; 1-2 digits)
line endings (EOL, delimiter):
\n \x0a UNIX/Linux
\r\n \x0d\x0a DOS/Windows
\r \x0d MacOS
POSIX character classes (translations, bracketed)
[:alnum:] all letters and digits
[:alpha:] all letters
[:blank:] all horizontal whitespace
[:cntrl:] all control characters
[:digit:] all digits
[:graph:] all printable characters, not including space
[:lower:] all lower case letters
[:print:] all printable characters, including space
[:punct:] all punctuation characters
[:space:] all horizontal or vertical whitespace
[:upper:] all upper case letters
[:xdigit:] all hexadecimal digits
updating a line of text (progress bar):
i=0
while (( $i <= 5 ));do
string=`echo -n "Progress: $i%"`
count=${#string}
echo -n $string
sleep 1
printf '%0.s\x08' $(seq 1 $count)
let i++
done && echo Complete
POWER SAVING:
apt-get install laptop-mode-tools
sudo vim /etc/laptop-mode/conf.d/cpufreq.conf
CONTROL_CPU_FREQUENCY=0
sudo service laptop-mode restart
selinux - see file "selinux"
iptables - see file "iptables"
samba (smbd/netbios/nmbd) - see file "samba"
nfs - see file "nfs"
cisco - see file "cisco"
bind (dns) - see file "bind"
gdb - see file "gdb"
nmap - see file "nmap"
regex (regular expression) - see file "regex"
ssh - see file "ssh"
tor - see file "tor"
tsocks - see file "tor"
zenity - see file "zenity"
wine - see file "wine"
unicode - see file "unicode"
ftp - see file "ftp"
ldap - see file "ldap"
nis - see file "ldap"
html - see file "html"
grub - see file "grub"
apache (httpd) - see file "apache"
cups/printing/lpr/lpd - see file "cups"
at (atd) - see file "at"
cron (crond) - see file "cron"
raid/mdadm - see file "raid"