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"