================================================================================ Terminal hotkeys =============================================================== Ctrl+U # cut all before cursor Ctrl+K # cut all after cursor Ctrl+W # cut word before cursor Ctrl+Y # paste Ctrl+L # clear screen Ctrl+S # freeze output Ctrl+Q # unfreeze Ctrl+C # SIGINT - interrupt current task Ctrl+Z # SIGTSTP - pause current task Ctrl+D # EOF, exit ================================================================================ FHS ============================================================================ /boot/ # boot loaders vmlinuz-x.x.x-x grub/grub.conf /dev/ # essential devices /proc/ # virtual filesystem providing info about processes and kernel info /mnt/ # temporarily mounted filesystems /media/ # mount points for removable media /bin/ # essential command binaries available for single user mode /sbin/ # same for root /lib/ # libraries for /bin and /sbin /opt/ # optional software packages /etc/ # system-wide configs init.d/ # init scripts and daemons rc # do runlevel changes (run rcN.d/ scripts) rcN.d/ # init scripts running at certain runlevel N (links to init.d/) # 0 - shutdown # 1 - single user mode # 2 - multiuser, no network # 3 - multiuser, with network # 5 - multiuser, GUI # 6 - reboot crontab cron.d/ fstab # filesystems table hostname hosts network/ interfaces resolv.conf passwd # list of users shadow # passwords group # list of groups gshadow # group passwords sudoers skel/ # default user's configs apt/ sources.list /usr/ # secondary hierarchy for readonly files (unix system resources) bin/ sbin/ lib/ include/ local/ # tertiary hierarchy for local data specific to this host /tmp/ # temp files (usually removed on reboot (see $TMPTIME env var)) /var/ # variable files (logs, spool files, emails, etc.) cache/ tmp/ # temp files to be preserved between reboots lib/ # state information, e.g. databases mail/ lock/ run/ spool/ cron/crontabs/ # users' crontabs log/ dmesg kern.log daemon.log auth.log messages syslog /root/ # root's home directory /home/ # users' home directories ================================================================================ Package management ============================================================= dpkg # debian package manager -i $deb_file # install -r $package # remove package --purge $package # remove package and its dependencies -s # print package status details apt-get # APT package handling utility update # update index upgrade # install newest versions of all packages install $package # install package -f # attempt to fix broken dependencies remove $package purge $package -y # automatic "yes" to prompts apt-cache show $package # print package records search $regex # search package in index ================================================================================ Bash basics ==================================================================== # Bash is a dialect of Shell. # To make file an executable bash script: # 1. Add at first line shebang ("#!") with path to bash interpreter: #!/bin/bash # or: #!/bin/bash args # or: #!/bin/sh # for posix shell compatible scripts # 2. Set executable permission for file # comment ; # statements delimeter # 0 - success exit code. # true (or :) is NOP command that always returns 0. # false - command that always returns 1. # Bash has no types. Any command is a string. # Command and arguments separates by whitespaces. # Command becomes meaningful because how it uses. # Ex: echo "-n abc" # "-n abc\n" echo -n abc # "abc" echo -n `abc` # command not found \ # escape specchar. also uses to escape newline. "some_val" # escape most of specchars in expression. Exclude "$", "`", "\". 'some_val' # escape all specchars. Exclude only "'". ================================================================================ Statements groups ============================================================== { statement1; statement2; ...; } # statements group # Group interpretes as one command and returns output, so can be used # for IO redirection. # Ex: { expr1 expr2 } > dir/file ( statement1; statement2; ...; ) # statements group # Executes in a subshell (child process). Has local scope, so vars # will not be available in parent scope. $( command1; command2; ...; ) # command substitution # Executes commands and substitutes result. # Ex: a=$( echo "List of files:" ls -l ) echo "$a" # quoted to save whitespaces command1 && command2 # reduced logical AND by exitcode command1 || command2 # OR {$val1,$val2} # variants substitution {$m..$n} # by range # Command will be interpreted as command with list of arguments # provided by {...}. # Could not contain unescaped spaces! # Ex: v=2 mkdir ./d{"1"," $v", " 3 "} # same as `mkdir "./d1" "./d 2" "./d 3 "` (( expr1, expr2, ... )) # arithmetic expressions group $(( expr1, expr2, ... )) # arith expr substitution (returns result of last) # Ex: echo $(( a = 1 + 1, b = 6 / 2 )) # 3 echo $a # 2 ================================================================================ Variables ====================================================================== # (!) Always quote variable substitution! varname=some_value # put|set value # Without spaces! $varname # substitution of value ${varname} # same ${varname:-default} # value if defined and not empty, default otherwise ${#varname} # length ${varname:offset:length} # substring ${varname/pattern/str} # replace first match by str ${varname//pattern/str} # replace all matches by str ${varname#pattern} # delete shortest match ${varname##pattern} # delete longest match ${varname%pattern} # delete shortest match from end ${varname%%pattern} # delete longest match from end unset varname # delete variable ================================================================================ Arrays ========================================================================= arr=() # new empty array arr=($val1 $val2 ...) # create and fill declare -A arr=([$key]=$val1 ...) # associative array arr[$key]=$value # put|set value arr+=($value) # append value ${arr[$key]} # get item by index|key ${#arr[@]} # get length ${arr[*]} # join values. Uses IFS as delimeter. ${!arr[*]} # join indexes|keys ${arr[@]} # iterate by values ${!arr[@]} # iterate by indexes|keys # Ex: files=(./*.txt) # get filenames by glob pattern # Iterate: for val in "${arr[@]}"; do # remember to quote! echo "$val" done seq $end # generate sequence of numbers [1; $end] seq $start $end # [$start; $end] seq $start $step $end # [$start; $end] with step $step ================================================================================ Control statements ============================================================= if command; then ... elif command; then ... else ... fi case $str in pattern1) command1 ;; pattern2) command2 ;; ... *) commandDefault ;; esac while command; do ... done # Ex: cancel= # false n=0 # repeat every 5 seconds until cancelled: while [ ! $cancel ] && sleep 5; do (( n++ )) echo "iter $n" [ $n -ge 5 ] && cancel=true done until command; do ... done for item in $range; do ... done # Ex: for v in "one" "two" "three"; do echo "$v" done for (( init; check; step; )); do ... done select selected in item1 item2 ...; do # will ask user to select item # uses PS3 as prompt # selected variable will contain selected item value or "" # REPLY will contain number of selected item (from 1) ... break # will ask again without break done # Cancel loop: break # Cancel current iteration: continue ================================================================================ Test command =================================================================== [ expr ] # test command. Unix-shell-compatible. # [] operators: -e $path # is exists -s $path # is file exists and not empty -f $path # is file -d $path # is dir -h $path # is symlink -r|-w|-x $path # is readable|writable|executable -t $fd # is file descriptor opened on a terminal # e.g. [ -t 0 ] - true if it's an interactive shell -z $str # is string empty -n $str # not empty $str1 = $str2 $str1 != $str2 $str1 \< $str2 # ascii sorting $str \> $str2 ! expr # NOT expr1 -a expr2 # AND (not reduced) expr1 -o expr2 # OR (not reduced) $num1 -eq $num2 # is numbers are equal $num1 -ne $num2 # not equal $num1 -lt $num2 # less than $num1 -le $num2 # less or equal $num1 -gt $num2 # greater than $num1 -ge $num2 # greater or equal # Ex: if [ $a = "a" ]; then ... [[ expr ]] # test keyword. It's more powerful but not shell-compatible. # [[]] operators (additional to []): $str1 = glob_pattern # dont quote! $str1 != glob_pattern $str1 =~ regex_pattern # dont quote! $str1 < $str2 # ascii sorting $str > $str2 expr1 && expr2 # AND (reduced) expr1 || expr2 # OR (reduced) ( expr ) # group to change precedence ================================================================================ Regex ========================================================================== # Glob # Glob can be used to match string or filenames. # There spec characters: * # any number of any chars (exclude "/" when matching filenames) ** # any dir|file and its subdirs (recursive *) ? # any single char [a-z] # single char from range [^a-z] # inversed # Glob pattern implicitly anchored from start to end of line. # Ex: ls -l ~/*.txt # list all txt files in home dir rm -r ./* # remove all files and dirs from cwd if [[ filename = *.png ]]; then ... # Extended glob # To enable it: `shopt -s extglob` # Also supports: ?(pattern1|pattern2|...) # zero or one occurence *(pattern1|pattern2|...) # zero or more +(pattern1|pattern2|...) # one or more @(pattern1|pattern2|...) # one !(pattern1|pattern2|...) # inverse # Ex: ls !(*.jpg|*.gif) # Regex in test command # Since bash3.0 supports =~ operator for [[]] keyword. # It matches string from left side by regex from right side and # returns 0 (matched), 1 (not matched) or 2 (incorrect pattern syntax). # Ex: if [[ some =~ ([a-z]{2})([a-z]{2}) ]]; then echo ${BASH_REMATCH[0]} # "some" echo ${BASH_REMATCH[2]} # "me" fi # Basic regex (BRE dialect) ^ # beginnig of line $ # end of line . # any char [a-z] # single char from range [^a-z] # inversed # word (space-separated sequence) * # zero or more occurences # Extended regex (ERE dialect) # additionally to BRE it supports: + # one or more occurences ? # zero or one occurence {n} # n occurences of previous char or group {n,} # n or more occurences {n,m} # from n to m [n; m] occurences | # logical OR () # grouping # (!) Do not quote glob or regex. ================================================================================ Functions ====================================================================== function func_name() { # declare function # func body echo $1 # first argument } func_name # invoke func_name $arg1 $arg2 ... # invoke with arguments unset func_name # delete function # Inside function are available: $FUNCNAME $1, $2, ... # arguments $# # number of args local varname=$value # define local variable # By default all variables defined inside function are available # in caller's scope and can overwrite existing vars. return $n # return from function # Function can return only number, it's like an exitcode. ================================================================================ Script ========================================================================= $0 # command|script name $1, $2, ..., ${10}, ... # arguments # Ex: sn=`basename $0` echo "Script name: $sn" $# # number of arguments $@ # all arguments as string (separated by IFS) # Ex: args=("$@") # args as array IFS="," echo "${args[*]}" # print args separated by "," unset IFS shift $n # shift arguments list to left (exclude $0) # n = 1 by default set $arg1 $arg2 ... # set command line arguments getopts $format arg # parse one command line argument (invoke in while # to get all args) # format - string like "a:bc:" # ":" after key means that value required for this key # arg - variable that will contain key # to get value - OPTARG variable # Ex: while getopts "ad:" arg; do case $arg in a) a=true ;; d) if [ -d "$OPTARG" ]; then dir=$OPTARG fi ;; esac done exit $code # quit script with exitcode [0-255]. 0 means normal exit. $? # stores exitcode returned by last command trap 'command1; command2; ...' $signal # trap incoming signals trap - $signal # restore trap to default trap # print traps list # It can be used to perform cleanup. # where signal: HUP INT QUIT TERM EXIT # Ex: trap 'rm -f tmpfile' EXIT exec $path # run external program. Process will be replaced source $path # run script in the current environment (like an import) . $path # same eval $cmd ... # concat and evaluate given command, return its exit code set -x # enable debug mode set +x # disable debug mode ================================================================================ Environment variables ========================================================== export VARNAME= # export env var to child processes # Predefined global env vars: BASH_VERSION # string describing the version HOSTNAME # hostname of your computer PPID # PID of the parent process PWD # current working directory RANDOM # random number between 0 and 32767 (new on each expanding) UID # ID number of the current user COLUMNS # width of terminal in characters LINES # height of terminal in characters HOME # current user's home directory PATH # colon-separated list of paths PS1 # string that describes the format of shell prompt TMPDIR # directory that is used to store temporary files IFS # args separator (' \t\n' by default) # To set env vars need to add|change it in: # global: /etc/environment # login shell: /etc/profile ~/.profile # nonlogin shell: /etc/bashrc ~/.bashrc # interactive shell: /etc/profile ~/.profile ~/.bashrc # noninteractive shell: /etc/bashrc ================================================================================ History ======================================================================== history N # print list of N last commands !N # run command number N !-N # -N'th command !xyz # last command beginning with 'xyz' !xyz:p # print instead of run !! # last command !$ # last word|argument of last command !* # arguments of last command ^a^b # replace 'a' to 'b' in last command and run # precede command by the space to prevent saving in history ================================================================================ Processes ====================================================================== some_command & # run command in background $! # stores PID of recently started background task # Ex: ( sleep 10; ) & p=$! # run and save pid kill -INT $p bg $pid # switch paused task to background and resume it # $pid - PID or %task_number fg $pid # switch task to foreground jobs # list of background tasks top # live task manager -d $sec # update interval (10 seconds by default) $$ # PID of current process ps # list processes # options: -A # all u # user-oriented format a # all with TTY, include other users x # all without TTY r # only running -t $tty # by TTY -p $pid # by PID -u $user # by user id or name # Ex: ps uaxf | grep "glob_to_filter" kill signal $pid # send signal to process # where signal: -1 # SIGHUP -2 # SIGINT -3 # SIGQUIT -15 # SIGTERM (default) -9 # SIGKILL # $pid - PID or %task_number killall $name # kill process by name -s $signal -i # interactive sleep $n # put current process to sleep for $n seconds ================================================================================ IO ============================================================================= echo $value # print line to stdout # options: -n # without ending newline -e # enable escape-sequences -E # supress escape-sequences exec N< $file # create|replace file descriptor N read varname # read line from stdin and put to variable # options: -p $prompt # show prompt -s # hide input -r # dont allow backslash escaping -a # split to array -d $char # specify delimeter char -t $sec # timeout -n $n # read max n chars if delimeter not received before -N $n # read exactly n chars. Ignore delimeter. -u $fd # specify FD instead of stdin # Ex: exec 3< "file_to_read" read -u 3 line echo "first line: $line" less [$file] # view file|input with pagination -N # show line numbers -M # show prompt (number of lines, percent, filename) head [$file] # print first part of file|input # options: -n $lines # number of lines to print -c $bytes # bytes to print tail [$file] # print last part # options: -n $lines -c $bytes -f # watch for updates sort [$file] # print lines sorted # options: -u # unique -n # numeric sort -r # reverse -k # sort by field n (from 1) tr $str1 $str2 # filter input - replace all chars from $str1 to # appropriate chars from $str2 $target N< $source # input redirection # N = 0 by default $source N> $target # output redirection (rewrite, create if doesnt exists) # N = 1 by default $source N>> $target # append # N = 1 by default # where: $source, $target # input|output (file, statements group, etc.) N # FD number # Ex: cat >> file iconv -f cp1251 -t utf8 < album_cp1251.cue > album_utf8.cue # Predefined FDs: 0 # stdin 1 # stdout 2 # stderr # Redirection can be filtered. # Ex: wrongCmd 2> $file # write stderr to file cmd > $file 2>&1 # write both stdout and stderr to file cmd &> $file # same cmd > $fileOut 2> $fileErr # write stdout and stderr to different files cmd 1>&2 # write stdout to stderr cmd1 | cmd2 # pipe, conveyer. Uses for chaining - get stdout from # first and send it to stdin of next command. Each command executes # in a subshell. # Ex: cat somefile | grep "word_to_search" cat somefile | tr abc ABC > file2 /dev/null # path to system's black hole # It can be used e.g. to silence stdout|stderr. # Ex: { command1; command2; } 2> /dev/null # errors will be suppressed /dev/tty # current terminal. Can be used to guarantee that output will reach # terminal although stdout redirection sync # flush any buffered data out to disk ================================================================================ FS ============================================================================= fuser $file # list users that are using filesystem|file -m $mp # mountpoint -k # kill all found processes -v # verbose fdisk -l # list devices fdisk -l $device # list partitions # $device - block device, e.g. /dev/sdb df [$mp] # show fs usage -h # human readable lsblk # list block devices -o $output # comma-separated options: "name", "rm", "size", "ro", # "type", "fstype", "mountpoint", "label", "uuid", # "log-sec", "phy-sec", etc (optionally with + sign to append). # default: name,maj:min,rm,size,ro,type,mountpoint mount $fs $mountpoint # mount filesystem # $fs - filesystem # $mountpoint - target directory to mount # options: -t $type # fs type: "ext4", "ntfs", "vfat", "smbfs", etc, -o $rights # options, "rw" (read,write), "ro" (readonly), # "force" (for repair), "remount" (change mountpoint or rights) --bind $dir # create mirror # Ex: sudo mkdir /mnt/somemp sudo mount /dev/sdb1 /mnt/somemp umount $fs|$mountpoint # unmount filesystem fdisk $device # change partition table of this device mkfs -t $type $fs # format # $fs - filesystem mlabel -i $fs ::$label # change FAT label ntfslabel $fs $label # change NTFS label e2label $fs $label # change EXT label # Ex: # create bootable usb sudo -s umount /dev/sdb1 mkfs -t vfat /dev/sdb1 dd bs=4M if=./someimage.iso of=/dev/sdb && sync # or # cat ./someimage.iso > /dev/sdb && sync fdisk /dev/sdb # then select option "a" to set boot flag mlabel -i /dev/sdb1 ::LIVE ================================================================================ Files ========================================================================== chmod value $file # set privileges # where value can be: ABC # where: # A - "u" (user,owner), "g" (group), "o" (others), "a" (all), # "ug", "uo", etc. # B - "+" (add permission), "=" (rewrite permission), # "-" (remove permission) # C - "r" (read), "w" (write), "x" (execute), "rw", "rwx", etc. # Special flags: # "s" - setuid|setguid (execute with owner's # permissions) # "t" - sticky bit (only owners can delete|rename # files in this directory) # e.g. `chmod ug+x file` UGO # where: # U - number 0-7 - permission for owner # G - number 0-7 - permission for group # O - number 0-7 - permission for others # where: # 0 - forbidden # 4 - read # 5 - read and execute # 6 - read and write # 7 - read, write and execute # e.g. `chmod 754 file` # options: -R # recursive --reference $file # copy privileges from another file -v # verbose -f # silent chown $user:$group $path # options: -R # recursive # Ex: sudo chown -R $(whoami) some/dir pwd # print current working directory cd $dir # change current directory ls $dir|$file... # print list of items in directory or # info about file # options: -a # show hidden (beginning with '.') -A # without ./ and ../ -l # with info (chmod, size, mtime) -F # show "/" after dir, "*" after executable file -h # human-readable size (kb, mb, gb) -t # sort by modified time (desc) -r # reverse order -s # show blocks number -d # directory itself instead of its content du $dir|$file # print size of file or directory recursively (disk usage) # options: -d $n # max depth -c # show grand total -h # human readable -s # print only total for each argument dd # copy and convert bytes bs=$c # read|write up to $c bytes at a time (e.g. "1M") if=$source # file or device of=$dest # file or device cp $source... $target # copy file|dir # options: -r # recursive - to copy directory -i # interactive mode (prompt before overwrite) -u # update mode -P # dont follow symbolic links in source -L # always follow symlinks in source --preserve=$attrs # preserve attributes # available params: mode, ownership, timestamps, context, # links, xattr, all -p # same as --preserve=mode,ownership,timestamps -v # verbose mv $source... $target # move file|dir # options: -v # verbose -i # interactive mode -u # update mode touch $file # create empty file # options: -c # do not create if doesnt exists -a # only update access time -m # only update modified time -d $rel_date # change modified time mkdir $dir # create empty dir # options: -r # recursive -v # verbose rm $file # remove file|dir # options: -r # recursive - to remove dir -f # force - without prompt for subdirs -v # verbose ln $file_target $link_path # create link (hard by default) # options: -s # symbolic -v # verbose file $filename # identify file type locate $file # quick file search # options: -i # ignore case -b # match only basename -c # print only count of found --regex # use extended regex find $dir search action # recursively search files|dirs in $dir by search # pattern and perform action for each item # where $dir is a path # where search can contain: \( expr \) # group expressions to change precedence ! expr expr -o expr # OR expt -a expr # AND -name "glob_pattern" # search by filename -path "glob_pattern" # search by path or filename -mtime $n # by date modified (days) # where $n: N # N days +N # more than N -N # less than -type $type # by type # where $type: f # file d # directory -size $size # by size (blocks) # where $size: N # N blocks Nc # N bytes +N|+Nc # more than -N|-Nc # less than # and where action: -print # simple print found list (default) -exec command {} \; # execute command(s). {} is a placeholder # for found path # Ex: find ./* -exec touch -m {} \; # update modified time recursively grep $pattern [$file...] # search by pattern in contents of each # file or stdin # options: -r # resursive -G # use basic regular expression (BRE) (default) -E # use extended regular expression (ERE) -P # use perl regex -F # fixed string, dont interpret pattern as regex -m $n # specify max count of matches -v # invert match -i # ignore case -w # match whole words -x # match whole lines -C $n # show $n lines around (context) -H # show filenames -h # dont show filenames -n # show line numbers -l # print only filenames -L # print only filenames of not matched -c # print only count of matched lines per file -q # supress output (return only exit code) -s # supress warnings # Ex: ls -a | grep ".bash*" sed $expression [$file] # SED - stream editor # expression applies for each line -e $expression # to specify multiple expressions # ; can be used as delimeter instead -f $script_file # file containing sed expressions # also uses for interpreter script: #!/bin/sed -f -n [$print_command] # no printing unless an explicit request to print -r # use extended regex -i[suffix] # save backup and rewrite file # expression syntax:
# address lines to work width (at beginning of expression) # where address: # line number (count from 1) # $ - specchar for last line // , # address range ! # invert address restriction { } # group commands p # print line = # print line number d # delete line a # append line after current i # insert line before current c # replace current line or range s/// # substitute (first occurence by default) # regex - basic regular expression # & - specchar - found substring to past in replacement pattern # flags: # address occurence g # global I # ignore case y/// # transform (like tr shell command) h # put pattern buffer to hold buffer H # append to hold buffer x # exchange pattern buffer and hold buffer g # put hold buffer to pattern buffer G # append to pattern buffer r # read file and paste contents after current line w # write to file n # skip line q # quit # Ex: sed "2 ! s/([a-z]+)/(\1)/g w out.txt" -r # wrap words into parentheses # on every lines exclude line 2 and write modified lines to file sed "1,2 { i qwe a rty }" # wrap 1 and 2 lines and print to stdout find ./static/ -type f -name "*.es6" | \ xargs -i sed -r -i \ "s/import ([a-z0-9_]+) from '(.+)'/import * as \1 from '\2'/I" {} # modify imports and rewrite files, recursively wc [$file] # tells how many lines, words and bytes in file|input -l # count lines -w # count words -m # count chars -c # count bytes cut [$file] # parse fields from file|input -c $selec # select characters -b $selec # select bytes -f $selec # select fields, e.g. '-f 1,3' - first and third -d $char # fields delimeter (default - tab) -s # do not print lines without delimeters diff $file1 $file2 # show differs -u # unified output (+, -, @@) md5sum [$file] # md5 hash of file|input shed [$file] # hex editor -r # readonly -s $n # cursor offset tar $file... # tar archiving # options: -f $file # archive file -C $file # destination -x # extract -c # create -r # append files -u # update mode. Append files if they are newer -t # list contents -z # through gzip compression -j # through bzip2 compression # Ex: tar -xz -f ./archive.tar.gz -C ./target tar -xj -f ./archive.tar.bz2 -C ./target tar -xJ -f ./archive.tar.xz -C ./target tar -cz -f "../${PWD##*/}.tar.gz" . zip $archive_file $file... # zip archiving # options: -d $file... # delete files from archive -r # recursively -u # update mode # Ex: zip -r ./archive.zip ./file1 ./file2 ./dir unzip $archive # options: -d $path # specify target dir dump -N $fs # backup filesystem, N - backup level (0 - full) -u # save date and level in /etc/dumpdates -f $dumpfile -a # auto-size, fill dest device restore # restore|view dump -f $dumpfile -x $filename # restore specified file -r # restore to cwd -i # interactive restore # commands: # cd, ls, pwd, add $filename, extract ================================================================================ Network ======================================================================== netstat # print network connections, routing tables, statistics, etc. -t # tcp -u # udp -x # unix sockets -l # only listening -a # all, any status -p # display pid and program names -n # dont resolve hosts or usernames, use numeric (for speed up) -s # print statistics -r # print kernel routing table -i # print list of network interfaces # Ex: netstat -tulpn # print listening ports lsof -i :$port # search processes by listening port -t # print only pid ifconfig [$interface] # configure|view network interface(s) -a # show all, even if down ifconfig $interface [$addr] [options] # options: up|down # up or down certain interface mtu $n # set max transmission unit netmask $mask # set mask broadcast [$addr] # set|reset broadcast address pointopoint [$addr] # enable|disable p2p mode hw $type $mac # set hardware address # $type - "ether", "ax25", "ARCnet", "netrom" ifup|ifdown [$interface] # bring interface(s) up or down -a # all interfaces ping $addr -s $bytes # packet size traceroute $addr -n # dont resolve names telnet $addr $port -l $user -n $tracefile # record trace info -S $tos # type of service # commands: mode line|character|isig|-isig|edit|-edit send eof|eor|el|escape|nop|susp close quit # Ex (smtp): $ telnet 123.123.123.123 25 HELO smtp.example.com MAIL FROM: sender@host RCPT TO: receiver@host DATA Subject: some subject some message . wget $url # download files via http, https or ftp # options: -t $num # number tries -O $path # output file -c # continue partially downloaded file -r # recursively -D $domain # restrict only for specified domain -S # collect headers --spider # do not load content tcpdmp [filter] # dump traffic -i $interface -c $n # limit number of puckets -n # dont resolve names -A # print as ascii -X # print both numeric and ascii -l # make stdout line buffered -w $file # dump to file -r $file # read dump from file # filter: host $addr port $n nmap $target # port scanner -sL # list scan -sn # ping scan -Pn # no ping (skip discovery stage) -PS # TCP SYN/ACK --disable-arp-ping -n # no DNS resolution --dns-servers $dns_servers --traceroute # trace hop path -sS, -sT, -sA, -sW, -sM # SYN, Connect, ACK, Window, Maimon # TCP scan technique -sN, -sF, -sX # Null, FIN, Xmas TCP scan technique -sY # INIT scan SCTP technique -sU # UDP scans -sI $zombie $host[:$port] # iddle scan -sV # probe to determine service version, info -p $range # set range of ports to scan -iL $file # list of hosts from file ================================================================================ SSH ============================================================================ apt-get install openssh-server apt-get install openssh-client ssh $user@$hostname [$commands] # connect # commands - single quoted commands # options: -i $path # private key for authentication (default: ~/.ssh/id_rsa) -p $number # port number -A # forward key ssh-keygen # generate key pair # options: -t dsa|rsa -b $n # length (1024 (def), 2048, 4096) -f $path # file to save keys (default: ~/.ssh/id_rsa and # ~/.ssh/id_rsa.pub) ssh-copy-id $user@$hostname # send public key to server # to remote ~/.ssh/autorized_keys dir # options: -i $path # public key file (default: ~/.ssh/id-rsa.pub) -p $number # port number puttygen -o $destfile -O $type $keyfile # convert ssh key # type - output format. "private" - putty format, # "private-openssh", "public" - standart ssh.com, # "public-openssh", "fingerprint" scp [$user_from@$host_from:]$path_src [$user_to@$host_to:]$path_dst # copy files locally or to|from remote system over ssh # options: -i $path # private key (passes to ssh) -P $number # port number -p # preserve mtime and modes -r # recursive -v # verbose rsync [$user_from@$host_from:]$path_src [$user_to@$host_to:]$path_dst # copy files locally or to|from remote system over ssh. Uses delta # transfer algorithm. # options: -A # with ACL -a # recursive with symlinks and devices saving mtime, owner, group -b # backup files instead of rewriting (uses "~" prefix by def) -u # skip files which target mtime > source mtime -r # recursive -z # compress --exclude $pattern # prevent syncing (root - root of src) --delete # delete extraneous files from target (absent in source) --ignore-errors # delete even if there IO errors --existing # skip creating new files --ignore-existing # skip updating files --devices # copy devices --specials # copy special files --links # copy symlinks as symlinks --times # preserve mtime --perms # preserve access permissions --group # preserve groups info -v # verbose # if $path_src have trailing slash - it will be same as /* glob # Ex: rsync -auv --delete \ --exclude "/files/*" --exclude "/logs" \ ./ "$user@$host:$dest" # client config: ~/.ssh/config or /etc/ssh/ssh_config # server config: /etc/ssh/sshd_config ================================================================================ Tmux =========================================================================== # Tmux - terminal manager. # Tmux has three levels of hierarchy: Sessions, windows, and panes. # Sessions are groups of windows, and a window is a layout of panes. tmux # start the tmux session tmux new -s # In Tmux press the ctrl+b, then: d # detach s # list sessions $ # rename session c # new window , # rename window & # kill window tmux ls # list of the running sessions tmux a # attach to the tmux session -t tmux kill-session -t ================================================================================ Services ======================================================================= # Systemd - create and manage services. # To create service put unit file # into /etc/systemd/system/.service directory. systemctl daemon-reload # index new unit files enable # enable autostart at boot start # start manually status # view service info and status # Example of unit file: [Unit] Description=My Service After=network.target [Service] Type=simple # simple, forking, oneshot, dbus, notify, idle Restart=always # always, on-success, on-failure, on-abnormal, on-watchdog, on-abort RestartSec=0 # delay ExecStart=/usr/local/bin/myservice.sh [Install] WantedBy=runlevel3.target ================================================================================ Vim ============================================================================ vim $file # open file in vim editor # options: -R # readonly -r # restore from temp backup # Vim will be launched in command mode. # commands: CTRL+G # show filename, size and status a # edit after cursor (add) i # edit before cursor (insert) # will be switched to editor mode ESC # switch back to command mode . # repeat last command gg # go to start G # go to EOF CTRL+V # selection d # delete selection y # copy selection dd # delete current line D # delete chars from current pos to EOL yy # copy current line yG # from current line to the EOF NY # N lines p # paste below current line P # paste above current line :w # save :w $file # save to file :w>> $file # append to file :Nw>> $file # append line N to file :N,Mw>> $file # append lines [N; M] to file :r $file # read file and append below current line :Nr $file # read and append below line N :q # quit :q! # quit without save :cq # quit with non-zero exit code u # undo CTRL+R # redo / # search after ? # search before n # find next :set number # show line numbers (nonumber to disable) :set incsearch # enable inremental search :set autoindent # enable indentaion :set syntax=some_lang|off # enable|disable syntax highlighting # settings can be defined in VIMINIT environment variable: # Ex: export VIMINIT='set number incsearch' ================================================================================ Miscellaneous ================================================================== while ( nc -l 80 < $some_response_file > : ) ; do $some_cmd ; done # simple server curl ifconfig.co # get public ip while true; do inotifywait -r -e MODIFY $some_dir && $some_cmd done # watch on directory and run command when any file changed date +%T # print time (%H:%M:%S) date +%s # print timestamp date -d "12/31/2016 23:59:59" +%s # date to timestamp cat url.txt | xargs wget # pass stdout to argument cat url.txt | xargs -i wget "{} something" # with placeholder which $name # search executable in PATH whereis $name # search executable in system dirs locate $name # search file using precompiled index whoami # current username id $username # user id and groups useradd $username # create user -d $dir # set home directory -m # create home if not exists -g $group # set primary group usermod $username # edit user passwd $username # change password userdel $username -r # delete home dir crontab # view|edit user's crontab -u $username # for specified user -e # edit -l # print content -r # remove lscpu # display info about cpu lshw # display info about hardware -short lsblk # list block devices free # display free memory