mirror of
https://github.com/cheat/cheat.git
synced 2025-09-05 19:42:55 +02:00
Performed a large refactoring
Performed an extensive refactoring on the entire application for the sake of code-cleanliness. - Refactored out of an ad-hoc Imperative paradigm into more of a functional/declarative paradigm. IMO, this makes the application signifcantly easier to understand. - Moved away from `argparse` and into `docopt` for argument parsing - Version bump to 2.0.0 - Performed extensive refactoring on the setup.py script. Script should install to the system more cleanly now. - Made minor formatting changes to the --list flag output - Updated the README Squashed commit of the following: commit e5681bd536aa0220cdeb7884cc248db55be408c9 Author: Chris Lane <chris@chris-allen-lane.com> Date: Sat Apr 26 23:30:21 2014 -0400 Fixed many bugs Everything seems to work now, I think. commit 764ec5950cee958eb1b8333ddfcb6bcd45c28429 Author: Chris Lane <chris@chris-allen-lane.com> Date: Sat Apr 26 21:51:31 2014 -0400 Restructuring for the sake of setup.py Seem to finally have a working install script commit 5a866c23857b77ec65070dd8023cd734f2b7c242 Author: Chris Lane <chris@chris-allen-lane.com> Date: Sat Apr 26 18:01:11 2014 -0400 Nits commit a79954ba5b33d992fa6a32abffb33b161d624e3d Author: Chris Lane <chris@chris-allen-lane.com> Date: Sat Apr 26 17:53:03 2014 -0400 Implemented search commit b570a897e9a12c15affe1a72628deae31836dee2 Author: Chris Lane <chris@chris-allen-lane.com> Date: Sat Apr 26 17:11:27 2014 -0400 Nits commit 1a8d85b44457f1b2131b3e8475c5270b5d0899e3 Author: Chris Lane <chris@chris-allen-lane.com> Date: Sat Apr 26 17:02:22 2014 -0400 Still refactoring across files Trying to make the program structure clearer commit 34dffd6462e492e81ea558e2009a71051b7663c9 Author: Chris Lane <chris@chris-allen-lane.com> Date: Sat Apr 26 16:40:37 2014 -0400 Breaking app into several files This is for the sake of code-cleanliness commit 4825d678ff5f9817ccbf727ef71e5dea15ff2586 Author: Chris Lane <chris@chris-allen-lane.com> Date: Sat Apr 26 15:55:19 2014 -0400 Got syntax highlighting working commit c37d7a626d451bfca3d4a072eb9fed604085170f Author: Chris Lane <chris@chris-allen-lane.com> Date: Sat Apr 26 15:29:22 2014 -0400 Reduced verbosity of function names commit 8e626045186b37dce2480f5af1994ddfa8db79b5 Author: Chris Lane <chris@chris-allen-lane.com> Date: Sat Apr 26 15:24:41 2014 -0400 Refactored argument passing Fewer arguments now need to be passed throughout the app. commit 807ba814650010b3dd1b59d27400b3fb4fcfede7 Author: Chris Lane <chris@chris-allen-lane.com> Date: Sat Apr 26 11:40:05 2014 -0400 Working through the refactor commit e34e6540d4f8cd727e98aac68289d515a02d5fe6 Author: Chris Lane <chris@chris-allen-lane.com> Date: Thu Apr 24 20:00:10 2014 -0400 Got a basic end-to-end refactor working Have re-implemented just the most basic functionality in the "cheat2" file.
This commit is contained in:
320
cheat
320
cheat
@ -1,320 +0,0 @@
|
||||
#!/usr/bin/env python
|
||||
"""
|
||||
cheat.py -- cheat allows you to create and view interactive cheatsheets on the
|
||||
command-line. It was designed to help remind *nix system
|
||||
administrators of options for commands that they use frequently,
|
||||
but not frequently enough to remember.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
"""
|
||||
|
||||
import os
|
||||
import sys
|
||||
import argparse
|
||||
import subprocess
|
||||
from textwrap import dedent
|
||||
|
||||
DEFAULT_CHEAT_DIR = (os.environ.get('DEFAULT_CHEAT_DIR') or
|
||||
os.path.join(os.path.expanduser('~'), '.cheat'))
|
||||
USE_PYGMENTS = False
|
||||
|
||||
# NOTE remove this check if it is confirmed to work on windows
|
||||
if os.name == 'posix' and 'CHEATCOLORS' in os.environ:
|
||||
try:
|
||||
from pygments import highlight
|
||||
from pygments.util import ClassNotFound
|
||||
from pygments.lexers import get_lexer_for_filename, TextLexer
|
||||
from pygments.formatters import TerminalFormatter
|
||||
USE_PYGMENTS = True
|
||||
except ImportError:
|
||||
pass
|
||||
|
||||
|
||||
def pretty_print(filename):
|
||||
"""Applies syntax highlighting to a cheatsheet and writes it to stdout"""
|
||||
try:
|
||||
if os.path.splitext(filename)[1]:
|
||||
lexer = get_lexer_for_filename(filename)
|
||||
else:
|
||||
# shell is a sensible default when there is no extension
|
||||
lexer = get_lexer_for_filename(filename + '.sh')
|
||||
|
||||
except ClassNotFound:
|
||||
lexer = TextLexer()
|
||||
|
||||
with open(filename) as istream:
|
||||
code = istream.read()
|
||||
|
||||
fmt = TerminalFormatter()
|
||||
highlight(code, lexer, fmt, sys.stdout)
|
||||
|
||||
|
||||
class CheatSheets(object):
|
||||
"""Cheatsheets database class."""
|
||||
dirs = None
|
||||
sheets = None
|
||||
|
||||
def __init__(self):
|
||||
self.dirs = self.__cheat_directories()
|
||||
# verify that we have at least one cheat directory
|
||||
if not self.dirs:
|
||||
error_msg = ('The {default} dir does not exist'
|
||||
' or the CHEATPATH var is not set.')
|
||||
print >> sys.stderr, error_msg.format(default=DEFAULT_CHEAT_DIR)
|
||||
exit(1)
|
||||
self.sheets = self.__cheat_files()
|
||||
|
||||
def __cheat_directories(self):
|
||||
"""Assembles a list of directories containing cheatsheets."""
|
||||
default_directories = [DEFAULT_CHEAT_DIR]
|
||||
try:
|
||||
import cheatsheets
|
||||
default_directories.append(cheatsheets.cheat_dir)
|
||||
except ImportError:
|
||||
pass
|
||||
|
||||
default = [default_dir for default_dir in default_directories
|
||||
if os.path.isdir(default_dir)]
|
||||
|
||||
if 'CHEATPATH' in os.environ and os.environ['CHEATPATH']:
|
||||
return [path for path in os.environ['CHEATPATH'].split(os.pathsep)
|
||||
if os.path.isdir(path)] + default
|
||||
else:
|
||||
return default
|
||||
|
||||
def __cheat_files(self):
|
||||
"""
|
||||
Assembles a dictionary of cheatsheets found in the above directories.
|
||||
"""
|
||||
cheats = {}
|
||||
for cheat_dir in reversed(self.dirs):
|
||||
cheats.update(dict([(cheat, cheat_dir)
|
||||
for cheat in os.listdir(cheat_dir)
|
||||
if not cheat.startswith('.')
|
||||
and not cheat.startswith('__')]))
|
||||
return cheats
|
||||
|
||||
def edit(self, cheat):
|
||||
"""Creates or edits a cheatsheet"""
|
||||
|
||||
# Assert that the EDITOR environment variable is set and that at least
|
||||
# 3 arguments have been given
|
||||
if 'EDITOR' not in os.environ:
|
||||
print >> sys.stderr, ('In order to create/edit a cheatsheet you '
|
||||
'must set your EDITOR environment variable '
|
||||
'to your favorite editor\'s path.')
|
||||
exit(1)
|
||||
elif os.environ['EDITOR'] == "":
|
||||
print >> sys.stderr, ('Your EDITOR environment variable is set '
|
||||
'to nothing, in order to create/edit a '
|
||||
'cheatsheet your must set it to a valid '
|
||||
'editor\'s path.')
|
||||
exit(1)
|
||||
else:
|
||||
editor = os.environ['EDITOR'].split()
|
||||
|
||||
# if the cheatsheet already exists, open it for editing
|
||||
try:
|
||||
if cheat in self.sheets:
|
||||
sheet_path = os.path.join(self.sheets[cheat], cheat)
|
||||
if os.access(sheet_path, os.W_OK):
|
||||
subprocess.call(editor + [sheet_path])
|
||||
else:
|
||||
print >> sys.stderr, ("Sheet '%s' [%s] is not editable."
|
||||
% (cheat, sheet_path))
|
||||
print ('Do you want to '
|
||||
'copy it to your user cheatsheets directory [%s] '
|
||||
'before editing?\nKeep in mind that your sheet '
|
||||
'will always be used before system-wide one.'
|
||||
% DEFAULT_CHEAT_DIR)
|
||||
awn = raw_input('[y/n] ')
|
||||
if awn != 'y':
|
||||
print ('Ok, if you want to edit system-wide sheet, '
|
||||
'please try `cheat -e <cheatsheet>` '
|
||||
'again with sudo.')
|
||||
exit(1)
|
||||
import shutil
|
||||
|
||||
# attempt to copy the cheatsheet to DEFAULT_CHEAT_DIR
|
||||
try:
|
||||
new_sheet = os.path.join(DEFAULT_CHEAT_DIR, cheat)
|
||||
shutil.copy(sheet_path, new_sheet)
|
||||
subprocess.call(editor + [new_sheet])
|
||||
|
||||
# fail gracefully if the cheatsheet cannot be copied. This
|
||||
# can happen if DEFAULT_CHEAT_DIR does not exist
|
||||
except IOError:
|
||||
print ('Could not copy cheatsheet for editing.')
|
||||
exit(1)
|
||||
|
||||
# otherwise, create it
|
||||
else:
|
||||
import cheatsheets as cs
|
||||
# Attempt to write the new cheatsheet to the user's ~/.cheat
|
||||
# dir if it exists. If it does not exist, attempt to create it.
|
||||
if os.access(DEFAULT_CHEAT_DIR, os.W_OK) or os.makedirs(DEFAULT_CHEAT_DIR):
|
||||
subprocess.call(editor
|
||||
+ [os.path.join(DEFAULT_CHEAT_DIR, cheat)])
|
||||
|
||||
# If the directory cannot be created, write to the python
|
||||
# package directory, though that will likely require the use
|
||||
# of sudo
|
||||
else:
|
||||
if os.access(sheet_path, os.W_OK):
|
||||
subprocess.call(editor
|
||||
+ [os.path.join(cs.cheat_dir, cheat)])
|
||||
else:
|
||||
error_msg = ("Couldn't create '%s' cheatsheet.\n"
|
||||
"Please retry usig sudo." % cheat)
|
||||
print >> sys.stderr, error_msg
|
||||
exit(1)
|
||||
except OSError as errno:
|
||||
print >> sys.stderr, ("Could not launch `%s` as your editor : %s"
|
||||
% (editor[0], errno.strerror))
|
||||
exit(1)
|
||||
|
||||
def list(self):
|
||||
"""Lists the cheatsheets that are currently available"""
|
||||
max_command = max([len(x) for x in self.sheets.keys()]) + 3
|
||||
return ('\n'.join(sorted(['%s [%s]' % (key.ljust(max_command), value)
|
||||
for key, value in self.sheets.items()])))
|
||||
|
||||
def __parse_cheat_command_block(self, cheat):
|
||||
"""Parse text blocks inside specified sheet file"""
|
||||
block = ""
|
||||
path = os.path.join(self.sheets[cheat], cheat)
|
||||
with open(path) as cheat_fp:
|
||||
for line in cheat_fp.readlines():
|
||||
if line == '\n':
|
||||
if block:
|
||||
yield block
|
||||
block = ""
|
||||
else:
|
||||
block += line
|
||||
if block:
|
||||
yield block
|
||||
|
||||
def search(self, term):
|
||||
"""Search for a term in sheetcheats"""
|
||||
for cheat in self.sheets.keys():
|
||||
output = ''
|
||||
for block in self.__parse_cheat_command_block(cheat):
|
||||
if term in block:
|
||||
if not output:
|
||||
output = cheat + ":\n"
|
||||
output += ''.join([" " + line + '\n' for line
|
||||
in block.split('\n')])
|
||||
if output:
|
||||
sys.stdout.write(output);
|
||||
|
||||
|
||||
# Custom action for argparse
|
||||
class ListDirectories(argparse.Action):
|
||||
"""List cheat directories and exit"""
|
||||
def __call__(self, parser, namespace, values, option_string=None):
|
||||
print("\n".join(sheets.dirs))
|
||||
parser.exit()
|
||||
|
||||
|
||||
class ListCheatsheets(argparse.Action):
|
||||
"""List cheatsheets and exit"""
|
||||
def __call__(self, parser, namespace, values, option_string=None):
|
||||
print(sheets.list());
|
||||
parser.exit()
|
||||
|
||||
|
||||
class EditSheet(argparse.Action):
|
||||
"""If the user wants to edit a cheatsheet"""
|
||||
def __call__(self, parser, namespace, values, option_string=None):
|
||||
sheets.edit(values[0])
|
||||
parser.exit()
|
||||
|
||||
|
||||
class SearchSheet(argparse.Action):
|
||||
"""If the user wants to search a term inside all cheatsheets"""
|
||||
def __call__(self, parser, namespace, values, option_string=None):
|
||||
sheets.search(values[0])
|
||||
parser.exit()
|
||||
|
||||
|
||||
def main():
|
||||
"""Main execution function"""
|
||||
global sheets
|
||||
sheets = CheatSheets()
|
||||
|
||||
desc = dedent('''
|
||||
cheat allows you to create and view interactive cheatsheets on the
|
||||
command-line. It was designed to help remind *nix system
|
||||
administrators of options for commands that they use frequently,
|
||||
but not frequently enough to remember.''').strip()
|
||||
|
||||
epi = dedent('''
|
||||
Examples:
|
||||
|
||||
To look up 'tar':
|
||||
cheat tar
|
||||
|
||||
To create or edit the cheatsheet for 'foo':
|
||||
cheat -e foo
|
||||
|
||||
To list the directories on the CHEATPATH
|
||||
cheat -d
|
||||
|
||||
To list the available cheatsheets:
|
||||
cheat -l
|
||||
''').strip()
|
||||
|
||||
parser = argparse.ArgumentParser(prog='cheat',
|
||||
description=desc, epilog=epi,
|
||||
formatter_class=argparse.
|
||||
RawDescriptionHelpFormatter)
|
||||
parser_group = parser.add_mutually_exclusive_group()
|
||||
parser_group.add_argument('sheet', metavar='cheatsheet',
|
||||
action='store', type=str, nargs='?',
|
||||
help='Look at <cheatseet>')
|
||||
parser_group.add_argument('-e', '--edit', metavar='cheatsheet',
|
||||
action=EditSheet, type=str, nargs=1,
|
||||
help='Edit <cheatsheet>')
|
||||
parser_group.add_argument('-s', '--search', metavar='term',
|
||||
action=SearchSheet, type=str, nargs=1,
|
||||
help='Search <term> inside all cheatsheets')
|
||||
parser_group.add_argument('-l', '--list',
|
||||
action=ListCheatsheets, nargs=0,
|
||||
help='List all available cheatsheets')
|
||||
parser_group.add_argument('-d', '--cheat-directories',
|
||||
action=ListDirectories, nargs=0,
|
||||
help='List all current cheat dirs')
|
||||
args = parser.parse_args()
|
||||
sheet = args.sheet
|
||||
|
||||
# Print the cheatsheet if it exists
|
||||
if not sheet or sheet in ['help', 'cheat']:
|
||||
parser.print_help()
|
||||
elif sheet in sheets.sheets:
|
||||
filename = os.path.join(sheets.sheets[sheet], sheet)
|
||||
if USE_PYGMENTS:
|
||||
pretty_print(filename)
|
||||
else:
|
||||
with open(filename) as istream:
|
||||
for line in istream:
|
||||
sys.stdout.write(line)
|
||||
|
||||
# if it does not, say so
|
||||
else:
|
||||
print >> sys.stderr, ('No cheatsheet found for %s.' % sheet)
|
||||
exit(1)
|
||||
exit()
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
3
cheat/__init__.py
Normal file
3
cheat/__init__.py
Normal file
@ -0,0 +1,3 @@
|
||||
import sheet
|
||||
import sheets
|
||||
import utils
|
5
cheat/autocompletion/_cheat.zsh
Normal file
5
cheat/autocompletion/_cheat.zsh
Normal file
@ -0,0 +1,5 @@
|
||||
#compdef cheat
|
||||
|
||||
declare -a cheats
|
||||
cheats=$(cheat -l | cut -d' ' -f1)
|
||||
_arguments "1:cheats:(${cheats})" && return 0
|
9
cheat/autocompletion/cheat.bash
Normal file
9
cheat/autocompletion/cheat.bash
Normal file
@ -0,0 +1,9 @@
|
||||
function _cheat_autocomplete {
|
||||
sheets=$(cheat -l | cut -d' ' -f1)
|
||||
COMPREPLY=()
|
||||
if [ $COMP_CWORD = 1 ]; then
|
||||
COMPREPLY=(`compgen -W "$sheets" -- $2`)
|
||||
fi
|
||||
}
|
||||
|
||||
complete -F _cheat_autocomplete cheat
|
12
cheat/autocompletion/cheat.fish
Normal file
12
cheat/autocompletion/cheat.fish
Normal file
@ -0,0 +1,12 @@
|
||||
#completion for cheat
|
||||
complete -c cheat -s h -l help -f -x --description "Display help and exit"
|
||||
complete -c cheat -l edit -f -x --description "Edit <cheatsheet>"
|
||||
complete -c cheat -s e -f -x --description "Edit <cheatsheet>"
|
||||
complete -c cheat -s l -l list -f -x --description "List all available cheatsheets"
|
||||
complete -c cheat -s d -l cheat-directories -f -x --description "List all current cheat dirs"
|
||||
complete -c cheat --authoritative -f
|
||||
for cheatsheet in (cheat -l | cut -d' ' -f1)
|
||||
complete -c cheat -a "$cheatsheet"
|
||||
complete -c cheat -o e -a "$cheatsheet"
|
||||
complete -c cheat -o '-edit' -a "$cheatsheet"
|
||||
end
|
29
cheat/cheatsheets/7z
Normal file
29
cheat/cheatsheets/7z
Normal file
@ -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
|
4
cheat/cheatsheets/__init__.py
Normal file
4
cheat/cheatsheets/__init__.py
Normal file
@ -0,0 +1,4 @@
|
||||
import os
|
||||
|
||||
def sheets_dir():
|
||||
return os.path.split(__file__)
|
5
cheat/cheatsheets/ab
Normal file
5
cheat/cheatsheets/ab
Normal file
@ -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/
|
14
cheat/cheatsheets/apk
Normal file
14
cheat/cheatsheets/apk
Normal file
@ -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
|
18
cheat/cheatsheets/apparmor
Normal file
18
cheat/cheatsheets/apparmor
Normal file
@ -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/
|
12
cheat/cheatsheets/apt-cache
Normal file
12
cheat/cheatsheets/apt-cache
Normal file
@ -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
|
25
cheat/cheatsheets/apt-get
Normal file
25
cheat/cheatsheets/apt-get
Normal file
@ -0,0 +1,25 @@
|
||||
# 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 update
|
||||
|
||||
# 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
|
15
cheat/cheatsheets/aptitude
Normal file
15
cheat/cheatsheets/aptitude
Normal file
@ -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
|
||||
|
22
cheat/cheatsheets/asciiart
Normal file
22
cheat/cheatsheets/asciiart
Normal file
@ -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
|
||||
#
|
17
cheat/cheatsheets/asterisk
Normal file
17
cheat/cheatsheets/asterisk
Normal file
@ -0,0 +1,17 @@
|
||||
# To connect to a running Asterisk session:
|
||||
asterisk -rvvv
|
||||
|
||||
# To issue a command to Asterisk from the shell:
|
||||
asterisk -rx "<command>"
|
||||
|
||||
# To originate an echo call from a SIP trunk on an Asterisk server, to a specified number:
|
||||
asterisk -rx "channel originate SIP/<trunk>/<number> 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"
|
17
cheat/cheatsheets/at
Normal file
17
cheat/cheatsheets/at
Normal file
@ -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}
|
2
cheat/cheatsheets/awk
Normal file
2
cheat/cheatsheets/awk
Normal file
@ -0,0 +1,2 @@
|
||||
# sum integers from a file or stdin, one integer per line:
|
||||
printf '1\n2\n3\n' | awk '{ sum += $1} END {print sum}'
|
14
cheat/cheatsheets/bash
Normal file
14
cheat/cheatsheets/bash
Normal file
@ -0,0 +1,14 @@
|
||||
# To implement a for loop:
|
||||
for file in `ls .`;
|
||||
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
|
36
cheat/cheatsheets/chmod
Normal file
36
cheat/cheatsheets/chmod
Normal file
@ -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 (---)
|
11
cheat/cheatsheets/chown
Normal file
11
cheat/cheatsheets/chown
Normal file
@ -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
|
19
cheat/cheatsheets/convert
Normal file
19
cheat/cheatsheets/convert
Normal file
@ -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 conerted/image/path/$new_file.png;
|
||||
done
|
20
cheat/cheatsheets/crontab
Normal file
20
cheat/cheatsheets/crontab
Normal file
@ -0,0 +1,20 @@
|
||||
# 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 * * * * /home/user/command.sh
|
||||
# every Saturday at 8:05 AM
|
||||
5 8 * * 6 /home/user/command.sh
|
35
cheat/cheatsheets/curl
Normal file
35
cheat/cheatsheets/curl
Normal file
@ -0,0 +1,35 @@
|
||||
# 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
|
2
cheat/cheatsheets/cut
Normal file
2
cheat/cheatsheets/cut
Normal file
@ -0,0 +1,2 @@
|
||||
# To cut out the third field of text or stdoutput that is delimited by a #:
|
||||
cut -d# -f3
|
2
cheat/cheatsheets/date
Normal file
2
cheat/cheatsheets/date
Normal file
@ -0,0 +1,2 @@
|
||||
# Printout date in format suitable for affixing to file names
|
||||
date +"%Y%m%d_%H%M%S"
|
17
cheat/cheatsheets/dd
Normal file
17
cheat/cheatsheets/dd
Normal file
@ -0,0 +1,17 @@
|
||||
# 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=512 bs=2
|
||||
|
||||
# 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
|
||||
|
||||
# DD with "graphical" return
|
||||
dcfldd if=/dev/zero of=/dev/null bs=500K
|
||||
|
2
cheat/cheatsheets/df
Normal file
2
cheat/cheatsheets/df
Normal file
@ -0,0 +1,2 @@
|
||||
# Printout disk free space in a human readable format
|
||||
df -h
|
10
cheat/cheatsheets/dhclient
Normal file
10
cheat/cheatsheets/dhclient
Normal file
@ -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
|
23
cheat/cheatsheets/diff
Normal file
23
cheat/cheatsheets/diff
Normal file
@ -0,0 +1,23 @@
|
||||
# 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)
|
29
cheat/cheatsheets/distcc
Normal file
29
cheat/cheatsheets/distcc
Normal file
@ -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
|
70
cheat/cheatsheets/emacs
Normal file
70
cheat/cheatsheets/emacs
Normal file
@ -0,0 +1,70 @@
|
||||
# Basic usage
|
||||
|
||||
Indent Select text then press TAB
|
||||
Cut CTRL-w
|
||||
Copy ALT-w
|
||||
Paste CTRL-y
|
||||
Search/Find CTRL-s
|
||||
Replace ALT-% (ALT-SHIFT-5)
|
||||
Save CTRL-x CTRL-s
|
||||
Load/Open CTRL-x CTRL-f
|
||||
Undo CTRL-x u
|
||||
Highlight all text CTRL-x h
|
||||
Directory listing CTRL-x d
|
||||
Cancel a command ESC ESC ESC
|
||||
Font size bigger CTRL-x CTRL-+
|
||||
Font size smaller CTRL-x CTRL--
|
||||
|
||||
# Buffers
|
||||
|
||||
Split screen vertically CTRL-x 2
|
||||
Split screen vertically with 5 row height CTRL-u 5 CTRL-x 2
|
||||
Split screen horizontally CTRL-x 3
|
||||
Split screen horizontally with 24 column width CTRL-u 24 CTRL-x 3
|
||||
Revert to single screen CTRL-x 1
|
||||
Hide the current screen CTRL-x 0
|
||||
Kill the current screen CTRL-x k
|
||||
Move to the next buffer CTRL-x O
|
||||
Select a buffer CTRL-x b
|
||||
Run command in the scratch buffer CTRL-x CTRL-e
|
||||
|
||||
# Other stuff
|
||||
|
||||
Open a shell ALT-x eshell
|
||||
Goto a line number ALT-x goto-line
|
||||
Word wrap ALT-x toggle-word-wrap
|
||||
Spell checking ALT-x flyspell-mode
|
||||
Line numbers ALT-x linum-mode
|
||||
Toggle line wrap ALT-x visual-line-mode
|
||||
Compile some code ALT-x compile
|
||||
List packages ALT-x package-list-packages
|
||||
|
||||
# Sudoing within eshell
|
||||
|
||||
By default when using the sudo command within eshell you'll just
|
||||
get "permission denied" messages. To overcome that type:
|
||||
|
||||
alias sudo '*sudo $*'
|
||||
|
||||
# Line numbers
|
||||
|
||||
To add line numbers and enable moving to a line with CTRL-l:
|
||||
|
||||
(global-set-key "\C-l" 'goto-line)
|
||||
(add-hook 'find-file-hook (lambda () (linum-mode 1)))
|
||||
|
||||
# Org-mode
|
||||
|
||||
To begin org-mode ALT-x org-mode
|
||||
Table column separator Vertical/pipe character
|
||||
Reorganize table TAB
|
||||
Section heading *
|
||||
Open/collapse section TAB
|
||||
Open/collapse All CTRL-TAB
|
||||
Export in other file formats (eg HTML,PDF) CTRL-c CTRL-e
|
||||
|
||||
To make org-mode automatically wrap lines:
|
||||
|
||||
(add-hook 'org-mode-hook
|
||||
'(lambda ()
|
||||
(visual-line-mode 1)))
|
44
cheat/cheatsheets/find
Normal file
44
cheat/cheatsheets/find
Normal file
@ -0,0 +1,44 @@
|
||||
# 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 Mb and sort them by size:
|
||||
find ./ -size +5M -type f -print0 | xargs -0 ls -Ssh
|
||||
|
||||
# To find files bigger thank 2 MB and list them:
|
||||
find / -type f -size +20000k -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
|
||||
|
||||
# Find all files that have the same node (hard link) as MY_FILE_HERE
|
||||
find / -type f -samefile MY_FILE_HERE 2>/dev/null
|
21
cheat/cheatsheets/gcc
Normal file
21
cheat/cheatsheets/gcc
Normal file
@ -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 bytes
|
||||
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
|
26
cheat/cheatsheets/gdb
Normal file
26
cheat/cheatsheets/gdb
Normal file
@ -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
|
53
cheat/cheatsheets/git
Normal file
53
cheat/cheatsheets/git
Normal file
@ -0,0 +1,53 @@
|
||||
# To set your identify:
|
||||
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 commit staged changes
|
||||
git commit -m "Your commit message"
|
||||
|
||||
# To edit previous commit message
|
||||
git commit --amend
|
||||
|
||||
# To removed staged and working directory changes
|
||||
git reset --hard
|
||||
|
||||
# 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 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
|
173
cheat/cheatsheets/gpg
Normal file
173
cheat/cheatsheets/gpg
Normal file
@ -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 <key ID> -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 <keyserver> --recv-keys <Key_ID>
|
||||
|
||||
Check its fingerprint against any previously stated value.
|
||||
|
||||
gpg --fingerprint <Key_ID>
|
||||
|
||||
Sign the key.
|
||||
|
||||
gpg --sign-key <Key_ID>
|
||||
|
||||
Upload the signed key to a server.
|
||||
|
||||
gpg --keyserver <keyserver> --send-key <Key_ID>
|
||||
|
||||
# Change the email address associated with a GPG key
|
||||
|
||||
gpg --edit-key <key ID>
|
||||
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 <list number>
|
||||
|
||||
Then delete it with:
|
||||
|
||||
deluid
|
||||
|
||||
To finish type:
|
||||
|
||||
save
|
||||
|
||||
Publish the key to a server:
|
||||
|
||||
gpg --send-keys <key ID>
|
||||
|
||||
# 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 <key ID>
|
||||
|
||||
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 <subkey ID> > subkeys
|
||||
gpg --export <key ID> > pubkeys
|
||||
gpg --delete-secret-key <key ID>
|
||||
|
||||
Import the keys back.
|
||||
|
||||
gpg --import pubkeys subkeys
|
||||
|
||||
Verify the import.
|
||||
|
||||
gpg -K
|
||||
|
||||
Should show sec# instead of just sec.
|
26
cheat/cheatsheets/grep
Normal file
26
cheat/cheatsheets/grep
Normal file
@ -0,0 +1,26 @@
|
||||
# Basic:
|
||||
grep pattern file
|
||||
|
||||
# case nonsensitive research:
|
||||
grep -i pattern file
|
||||
|
||||
# Recursively grep for string <pattern> in folder:
|
||||
grep -R pattern folder
|
||||
|
||||
# Getting pattern from file (one by 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 who contain {pattern} in the directory {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'
|
3
cheat/cheatsheets/gs
Normal file
3
cheat/cheatsheets/gs
Normal file
@ -0,0 +1,3 @@
|
||||
# To reduce the size of a pdf file:
|
||||
gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=output.pdf input.pdf
|
||||
|
8
cheat/cheatsheets/head
Normal file
8
cheat/cheatsheets/head
Normal file
@ -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
|
3
cheat/cheatsheets/history
Normal file
3
cheat/cheatsheets/history
Normal file
@ -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
|
||||
|
14
cheat/cheatsheets/ifconfig
Normal file
14
cheat/cheatsheets/ifconfig
Normal file
@ -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
|
2
cheat/cheatsheets/indent
Normal file
2
cheat/cheatsheets/indent
Normal file
@ -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
|
40
cheat/cheatsheets/iptables
Normal file
40
cheat/cheatsheets/iptables
Normal file
@ -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"
|
26
cheat/cheatsheets/irssi
Normal file
26
cheat/cheatsheets/irssi
Normal file
@ -0,0 +1,26 @@
|
||||
# To connect to an IRC server
|
||||
/connect <server domain name>
|
||||
|
||||
# To join a channel
|
||||
/join #<channel name>
|
||||
|
||||
# To set a nickname
|
||||
/nick <my nickname>
|
||||
|
||||
# To send a private message to a user
|
||||
/msg <nickname>
|
||||
|
||||
# To close the current channel window
|
||||
/wc
|
||||
|
||||
# To switch between channel windows
|
||||
ALT+<number>, eg. ALT+1, ALT+2
|
||||
|
||||
# To list the nicknames within a channel
|
||||
/names
|
||||
|
||||
# To change the topic
|
||||
/topic <description>
|
||||
|
||||
# To quit irssi
|
||||
/exit
|
8
cheat/cheatsheets/iwconfig
Normal file
8
cheat/cheatsheets/iwconfig
Normal file
@ -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}
|
21
cheat/cheatsheets/journalctl
Normal file
21
cheat/cheatsheets/journalctl
Normal file
@ -0,0 +1,21 @@
|
||||
# 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
|
||||
|
2
cheat/cheatsheets/less
Normal file
2
cheat/cheatsheets/less
Normal file
@ -0,0 +1,2 @@
|
||||
# To disable the terminal refresh when exiting
|
||||
less -X
|
2
cheat/cheatsheets/ln
Normal file
2
cheat/cheatsheets/ln
Normal file
@ -0,0 +1,2 @@
|
||||
# To create a symlink:
|
||||
ln -s path/to/the/target/directory name-of-symlink
|
11
cheat/cheatsheets/ls
Normal file
11
cheat/cheatsheets/ls
Normal file
@ -0,0 +1,11 @@
|
||||
# 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
|
23
cheat/cheatsheets/lsof
Normal file
23
cheat/cheatsheets/lsof
Normal file
@ -0,0 +1,23 @@
|
||||
# List all IPv4 network files
|
||||
sudo lsof -i4
|
||||
|
||||
# List all IPv6 network files
|
||||
sudo lsof -i6
|
||||
|
||||
# To find listening ports:
|
||||
lsof -Pnl +M -i4
|
||||
|
||||
# To find which program is using the port 80:
|
||||
lsof -i TCP:80
|
||||
|
||||
# List all processes accessing a particular file/directory
|
||||
lsof </path/to/file>
|
||||
|
||||
# List all files open for a particular user
|
||||
lsof -u <username>
|
||||
|
||||
# List all files/network connections a given process is using
|
||||
lsof -c <command-name>
|
||||
|
||||
# See this primer: http://www.danielmiessler.com/study/lsof/
|
||||
# for a number of other useful lsof tips
|
41
cheat/cheatsheets/markdown
Normal file
41
cheat/cheatsheets/markdown
Normal file
@ -0,0 +1,41 @@
|
||||
# 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.
|
||||
|
||||
# emphasis
|
||||
*em* _em_
|
||||
|
||||
**strong** __strong__
|
9
cheat/cheatsheets/mkdir
Normal file
9
cheat/cheatsheets/mkdir
Normal file
@ -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}}
|
||||
|
8
cheat/cheatsheets/mount
Normal file
8
cheat/cheatsheets/mount
Normal file
@ -0,0 +1,8 @@
|
||||
# To mount / partition as read-write in repair mode:
|
||||
mount -o remount,rw /
|
||||
|
||||
# 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
|
14
cheat/cheatsheets/mysql
Normal file
14
cheat/cheatsheets/mysql
Normal file
@ -0,0 +1,14 @@
|
||||
# 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;
|
23
cheat/cheatsheets/mysqldump
Normal file
23
cheat/cheatsheets/mysqldump
Normal file
@ -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
|
30
cheat/cheatsheets/ncat
Normal file
30
cheat/cheatsheets/ncat
Normal file
@ -0,0 +1,30 @@
|
||||
# Connect mode (ncat is client) | default port is 31337
|
||||
ncat <host> [<port>]
|
||||
|
||||
# Listen mode (ncat is server) | default port is 31337
|
||||
ncat -l [<host>] [<port>]
|
||||
|
||||
# Transfer file (closes after one transfer)
|
||||
ncat -l [<host>] [<port>] < file
|
||||
|
||||
# Transfer file (stays open for multiple transfers)
|
||||
ncat -l --keep-open [<host>] [<port>] < file
|
||||
|
||||
# Receive file
|
||||
ncat [<host>] [<port>] > file
|
||||
|
||||
# Brokering | allows for multiple clients to connect
|
||||
ncat -l --broker [<host>] [<port>]
|
||||
|
||||
# Listen with SSL | many options, use ncat --help for full list
|
||||
ncat -l --ssl [<host>] [<port>]
|
||||
|
||||
# Access control
|
||||
ncat -l --allow <ip>
|
||||
ncat -l --deny <ip>
|
||||
|
||||
# Proxying
|
||||
ncat --proxy <proxyhost>[:<proxyport>] --proxy-type {http | socks4} <host>[<port>]
|
||||
|
||||
# Chat server | can use brokering for multi-user chat
|
||||
ncat -l --chat [<host>] [<port>]
|
28
cheat/cheatsheets/netstat
Normal file
28
cheat/cheatsheets/netstat
Normal file
@ -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 <port>
|
||||
netstat -pln | grep <port> | 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
|
57
cheat/cheatsheets/nmap
Normal file
57
cheat/cheatsheets/nmap
Normal file
@ -0,0 +1,57 @@
|
||||
# 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:
|
||||
nmap -T5 --min-parallelism=50 [target]
|
||||
|
||||
# Traceroute:
|
||||
nmap -traceroute [target]
|
||||
|
||||
# Ping scan only: -sP
|
||||
# Don't ping: -PN
|
||||
# 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
|
||||
|
||||
# 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-*"
|
4
cheat/cheatsheets/notify-send
Normal file
4
cheat/cheatsheets/notify-send
Normal file
@ -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.
|
11
cheat/cheatsheets/od
Normal file
11
cheat/cheatsheets/od
Normal file
@ -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
|
21
cheat/cheatsheets/openssl
Normal file
21
cheat/cheatsheets/openssl
Normal file
@ -0,0 +1,21 @@
|
||||
# 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 view certificate expiration:
|
||||
echo | openssl s_client -connect <hostname>:443 2> /dev/null | \
|
||||
awk '/-----BEGIN/,/END CERTIFICATE-----/' | \
|
||||
openssl x509 -noout -enddate
|
48
cheat/cheatsheets/pacman
Normal file
48
cheat/cheatsheets/pacman
Normal file
@ -0,0 +1,48 @@
|
||||
# All the following command work as well with multiple package names
|
||||
|
||||
# To search for a package
|
||||
pacman -Ss <package name>
|
||||
|
||||
# To update the local package base and upgrade all out of date packages
|
||||
pacman -Suy
|
||||
|
||||
# To install a package
|
||||
pacman -S <package name>
|
||||
|
||||
# To uninstall a package
|
||||
pacman -R <package name>
|
||||
|
||||
# To uninstall a package and his depedencies, removing all new orphans
|
||||
pacman -Rcs <package name>
|
||||
|
||||
# To get informations about a package
|
||||
pacman -Si <package name>
|
||||
|
||||
# To install a package from builded package file (.tar.xz)
|
||||
pacman -U <file name/file url>
|
||||
|
||||
# To list the commands provided by an installed package
|
||||
pacman -Ql <package name> | sed -n -e 's/.*\/bin\///p' | tail -n +2
|
||||
|
||||
# To list explicitly installed packages
|
||||
pacman -Qe
|
||||
|
||||
# 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 <package file (.pkg.tar.xz)>
|
9
cheat/cheatsheets/pdftk
Normal file
9
cheat/cheatsheets/pdftk
Normal file
@ -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
|
||||
|
23
cheat/cheatsheets/php
Normal file
23
cheat/cheatsheets/php
Normal file
@ -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
|
15
cheat/cheatsheets/ps
Normal file
15
cheat/cheatsheets/ps
Normal file
@ -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'
|
16
cheat/cheatsheets/python
Normal file
16
cheat/cheatsheets/python
Normal file
@ -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
|
5
cheat/cheatsheets/rm
Normal file
5
cheat/cheatsheets/rm
Normal file
@ -0,0 +1,5 @@
|
||||
# Remove files and subdirs
|
||||
rm -rf path/to/the/target/
|
||||
|
||||
# Ignore non existent files
|
||||
rm -f path/to/the/target
|
6
cheat/cheatsheets/rsync
Normal file
6
cheat/cheatsheets/rsync
Normal file
@ -0,0 +1,6 @@
|
||||
# copy files from remote to local, maintaining file propertires 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/
|
2
cheat/cheatsheets/sam2p
Normal file
2
cheat/cheatsheets/sam2p
Normal file
@ -0,0 +1,2 @@
|
||||
# Concatenate all pdf files into one:
|
||||
sam2p *.pdf out.pdf
|
5
cheat/cheatsheets/scp
Normal file
5
cheat/cheatsheets/scp
Normal file
@ -0,0 +1,5 @@
|
||||
# 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
|
11
cheat/cheatsheets/screen
Normal file
11
cheat/cheatsheets/screen
Normal file
@ -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
|
14
cheat/cheatsheets/sed
Normal file
14
cheat/cheatsheets/sed
Normal file
@ -0,0 +1,14 @@
|
||||
# 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
|
||||
|
||||
# Remove empty lines and print results to stdout:
|
||||
sed '/^$/d' file.txt
|
13
cheat/cheatsheets/shred
Normal file
13
cheat/cheatsheets/shred
Normal file
@ -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.
|
2
cheat/cheatsheets/sockstat
Normal file
2
cheat/cheatsheets/sockstat
Normal file
@ -0,0 +1,2 @@
|
||||
# To view which users/processes are listening to which ports:
|
||||
sudo sockstat -l
|
11
cheat/cheatsheets/sort
Normal file
11
cheat/cheatsheets/sort
Normal file
@ -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
|
8
cheat/cheatsheets/split
Normal file
8
cheat/cheatsheets/split
Normal file
@ -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
|
45
cheat/cheatsheets/sqlmap
Normal file
45
cheat/cheatsheets/sqlmap
Normal file
@ -0,0 +1,45 @@
|
||||
# Test URL and POST data and return database banner (if possible)
|
||||
./sqlmap.py --url="<url>" --data="<post-data>" --banner
|
||||
|
||||
# Parse request data and test | request data can be obtained with burp
|
||||
./sqlmap.py -r <request-file> <options>
|
||||
|
||||
# Fingerprint | much more information than banner
|
||||
./sqlmap.py -r <request-file> --fingerprint
|
||||
|
||||
# Get database username, name, and hostname
|
||||
./sqlmap.py -r <request-file> --current-user --current-db --hostname
|
||||
|
||||
# Check if user is a database admin
|
||||
./sqlmap.py -r <request-file> --is-dba
|
||||
|
||||
# Get database users and password hashes
|
||||
./sqlmap.py -r <request-file> --users --passwords
|
||||
|
||||
# Enumerate databases
|
||||
./sqlmap.py -r <request-file> --dbs
|
||||
|
||||
# List tables for one database
|
||||
./sqlmap.py -r <request-file> -D <db-name> --tables
|
||||
|
||||
# Other database commands
|
||||
./sqlmap.py -r <request-file> -D <db-name> --columns
|
||||
--schema
|
||||
--count
|
||||
# Enumeration flags
|
||||
./sqlmap.py -r <request-file> -D <db-name>
|
||||
-T <tbl-name>
|
||||
-C <col-name>
|
||||
-U <user-name>
|
||||
|
||||
# Extract data
|
||||
./sqlmap.py -r <request-file> -D <db-name> -T <tbl-name> -C <col-name> --dump
|
||||
|
||||
# Execute SQL Query
|
||||
./sqlmap.py -r <request-file> --sql-query="<sql-query>"
|
||||
|
||||
# Append/Prepend SQL Queries
|
||||
./sqlmap.py -r <request-file> --prefix="<sql-query>" --suffix="<sql-query>"
|
||||
|
||||
# Get backdoor access to sql server | can give shell access
|
||||
./sqlmap.py -r <request-file> --os-shell
|
23
cheat/cheatsheets/ssh
Normal file
23
cheat/cheatsheets/ssh
Normal file
@ -0,0 +1,23 @@
|
||||
# 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 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
|
||||
|
||||
# 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 -D 9999 user@example.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
|
8
cheat/cheatsheets/ssh-copy-id
Normal file
8
cheat/cheatsheets/ssh-copy-id
Normal file
@ -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"
|
14
cheat/cheatsheets/ssh-keygen
Normal file
14
cheat/cheatsheets/ssh-keygen
Normal file
@ -0,0 +1,14 @@
|
||||
# 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
|
5
cheat/cheatsheets/stdout
Normal file
5
cheat/cheatsheets/stdout
Normal file
@ -0,0 +1,5 @@
|
||||
# To redirect stderr to stdout:
|
||||
some-command 2>&1
|
||||
|
||||
# To redirect stderr to a file
|
||||
some-command 2> errors.txt
|
24
cheat/cheatsheets/strace
Normal file
24
cheat/cheatsheets/strace
Normal file
@ -0,0 +1,24 @@
|
||||
# Basic stracing
|
||||
strace <command>
|
||||
|
||||
# save the trace to a file
|
||||
strace -o strace.out <other switches> <command>
|
||||
|
||||
# follow only the open() system call
|
||||
strace -e trace=open <command>
|
||||
|
||||
# follow all the system calls which open a file
|
||||
strace -e trace=file <command>
|
||||
|
||||
# follow all the system calls associated with process
|
||||
# management
|
||||
strace -e trace=process <command>
|
||||
|
||||
# follow child processes as they are created
|
||||
strace -f <command>
|
||||
|
||||
# count time, calls and errors for each system call
|
||||
strace -c <command>
|
||||
|
||||
# trace a running process (multiple PIDs can be specified)
|
||||
strace -p <pid>
|
36
cheat/cheatsheets/systemctl
Normal file
36
cheat/cheatsheets/systemctl
Normal file
@ -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
|
14
cheat/cheatsheets/tail
Normal file
14
cheat/cheatsheets/tail
Normal file
@ -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
|
26
cheat/cheatsheets/tar
Normal file
26
cheat/cheatsheets/tar
Normal file
@ -0,0 +1,26 @@
|
||||
# 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 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/
|
63
cheat/cheatsheets/tcpdump
Normal file
63
cheat/cheatsheets/tcpdump
Normal file
@ -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
|
47
cheat/cheatsheets/tmux
Normal file
47
cheat/cheatsheets/tmux
Normal file
@ -0,0 +1,47 @@
|
||||
# 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
|
||||
|
||||
# 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 "
|
26
cheat/cheatsheets/top
Normal file
26
cheat/cheatsheets/top
Normal file
@ -0,0 +1,26 @@
|
||||
# Update every <interval> samples:
|
||||
top -i <interval>
|
||||
|
||||
# Set the delay between updates to <delay> seconds:
|
||||
top -s <delay>
|
||||
|
||||
# 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 <key> in descending order
|
||||
top -o <key>
|
10
cheat/cheatsheets/truncate
Normal file
10
cheat/cheatsheets/truncate
Normal file
@ -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.)
|
27
cheat/cheatsheets/uname
Normal file
27
cheat/cheatsheets/uname
Normal file
@ -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
|
58
cheat/cheatsheets/vim
Normal file
58
cheat/cheatsheets/vim
Normal file
@ -0,0 +1,58 @@
|
||||
# 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
|
||||
|
||||
|
||||
# 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
|
||||
<Del> or x delete a character
|
||||
dd delete a line
|
||||
d{motion} delete text that {motion} moves over
|
||||
|
||||
|
||||
# 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
|
32
cheat/cheatsheets/wget
Normal file
32
cheat/cheatsheets/wget
Normal file
@ -0,0 +1,32 @@
|
||||
# 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
|
12
cheat/cheatsheets/xargs
Normal file
12
cheat/cheatsheets/xargs
Normal file
@ -0,0 +1,12 @@
|
||||
# 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 '&{}='
|
23
cheat/cheatsheets/yaourt
Normal file
23
cheat/cheatsheets/yaourt
Normal file
@ -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 <package name>
|
||||
yaourt -S <package name>
|
||||
# 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 <package name>
|
||||
|
||||
# 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 <package name>
|
||||
|
20
cheat/cheatsheets/youtube-dl
Normal file
20
cheat/cheatsheets/youtube-dl
Normal file
@ -0,0 +1,20 @@
|
||||
# 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
|
||||
|
||||
# For all video formats see
|
||||
# http://en.wikipedia.org/wiki/YouTube#Quality_and_codecs
|
28
cheat/cheatsheets/yum
Normal file
28
cheat/cheatsheets/yum
Normal file
@ -0,0 +1,28 @@
|
||||
# To install the latest version of a package:
|
||||
yum install <package name>
|
||||
|
||||
# To perform a local install:
|
||||
yum localinstall <package name>
|
||||
|
||||
# To remove a package:
|
||||
yum remove <package name>
|
||||
|
||||
# To search for a package:
|
||||
yum search <package name>
|
||||
|
||||
# To find what package installs a program:
|
||||
yum whatprovides </path/to/program>
|
||||
|
||||
# To find the dependencies of a package:
|
||||
yum deplist <package name>
|
||||
|
||||
# To find information about a package:
|
||||
yum info <package name>
|
||||
|
||||
# List currently enabled repositories:
|
||||
yum repolist
|
||||
|
||||
# To download the source RPM for a package:
|
||||
yumdownloader --source <package name>
|
||||
|
||||
# (You have to install yumdownloader first, which is installed by the yum-utils package)
|
94
cheat/sheet.py
Normal file
94
cheat/sheet.py
Normal file
@ -0,0 +1,94 @@
|
||||
from cheat import sheets
|
||||
from cheat import utils
|
||||
from cheat.utils import *
|
||||
import os
|
||||
import shutil
|
||||
import subprocess
|
||||
|
||||
|
||||
def copy(current_sheet_path, new_sheet_path):
|
||||
""" Copies a sheet to a new path """
|
||||
|
||||
# attempt to copy the sheet to DEFAULT_CHEAT_DIR
|
||||
try:
|
||||
shutil.copy(current_sheet_path, new_sheet_path)
|
||||
|
||||
# fail gracefully if the cheatsheet cannot be copied. This can happen if
|
||||
# DEFAULT_CHEAT_DIR does not exist
|
||||
except IOError:
|
||||
die ('Could not copy cheatsheet for editing.')
|
||||
|
||||
|
||||
def create_or_edit(sheet):
|
||||
""" Creates or edits a cheatsheet """
|
||||
|
||||
# if the cheatsheet does not exist
|
||||
if not exists(sheet):
|
||||
create(sheet)
|
||||
|
||||
# if the cheatsheet exists and is writeable...
|
||||
elif exists(sheet) and is_writable(sheet):
|
||||
edit(sheet)
|
||||
|
||||
# if the cheatsheet exists but is not writable...
|
||||
elif exists(sheet) and not is_writable(sheet):
|
||||
# ... ask the user if we should copy the cheatsheet to her home directory for editing
|
||||
yes = prompt_yes_or_no(
|
||||
'The ' + sheet + ' sheet is not editable. Do you want to copy it to '
|
||||
'your user cheatsheets directory before editing? Keep in mind that '
|
||||
'your sheet will always be used before system-wide one.'
|
||||
)
|
||||
|
||||
# if yes, copy the cheatsheet to the home directory before editing
|
||||
if yes:
|
||||
copy(path(sheet), os.path.join(sheets.default_path(), sheet))
|
||||
edit(sheet)
|
||||
|
||||
# if no, just abort
|
||||
else:
|
||||
die('Aborting.')
|
||||
|
||||
|
||||
def create(sheet):
|
||||
""" Creates a cheatsheet """
|
||||
new_sheet_path = os.path.join(sheets.default_path(), sheet)
|
||||
|
||||
try:
|
||||
subprocess.call([editor(), new_sheet_path])
|
||||
|
||||
except OSError:
|
||||
die('Could not launch ' + editor())
|
||||
|
||||
|
||||
def edit(sheet):
|
||||
""" Opens a cheatsheet for editing """
|
||||
|
||||
try:
|
||||
subprocess.call([editor(), path(sheet)])
|
||||
|
||||
except OSError:
|
||||
die('Could not launch ' + editor())
|
||||
|
||||
|
||||
def exists(sheet):
|
||||
""" Predicate that returns true if the sheet exists """
|
||||
return sheet in sheets.get() and os.access(path(sheet), os.R_OK)
|
||||
|
||||
|
||||
def is_writable(sheet):
|
||||
""" Predicate that returns true if the sheet is writeable """
|
||||
return sheet in sheets.get() and os.access(path(sheet), os.W_OK)
|
||||
|
||||
|
||||
def path(sheet):
|
||||
""" Returns a sheet's filesystem path """
|
||||
return sheets.get()[sheet]
|
||||
|
||||
|
||||
def read(sheet):
|
||||
""" Returns the contents of the cheatsheet as a String """
|
||||
if not exists(sheet):
|
||||
die('No cheatsheet found for ' + sheet)
|
||||
|
||||
with open (path(sheet)) as cheatfile:
|
||||
return cheatfile.read()
|
76
cheat/sheets.py
Normal file
76
cheat/sheets.py
Normal file
@ -0,0 +1,76 @@
|
||||
from cheat import cheatsheets
|
||||
from cheat.utils import *
|
||||
import os
|
||||
|
||||
|
||||
def default_path():
|
||||
""" Returns the default cheatsheet path """
|
||||
|
||||
# the default path becomes confused when cheat is run as root, so fail
|
||||
# under those circumstances. (There is no good reason to need to run cheat
|
||||
# as root.)
|
||||
if os.geteuid() == 0:
|
||||
die('Please do not run this application as root.');
|
||||
|
||||
return os.environ.get('DEFAULT_CHEAT_DIR') or os.path.join(os.path.expanduser('~'), '.cheat')
|
||||
|
||||
|
||||
# @todo: memoize result
|
||||
def get():
|
||||
""" Assembles a dictionary of cheatsheets as name => file-path """
|
||||
cheats = {}
|
||||
for cheat_dir in reversed(paths()):
|
||||
cheats.update(
|
||||
dict([
|
||||
(cheat, os.path.join(cheat_dir, cheat))
|
||||
for cheat in os.listdir(cheat_dir)
|
||||
if not cheat.startswith('.')
|
||||
and not cheat.startswith('__')
|
||||
])
|
||||
)
|
||||
|
||||
return cheats
|
||||
|
||||
|
||||
def paths():
|
||||
""" Assembles a list of directories containing cheatsheets """
|
||||
sheet_paths = [
|
||||
default_path(),
|
||||
cheatsheets.sheets_dir()[0],
|
||||
]
|
||||
|
||||
# merge the CHEATPATH paths into the sheet_paths
|
||||
if 'CHEATPATH' in os.environ and os.environ['CHEATPATH']:
|
||||
for path in os.environ['CHEATPATH'].split(os.pathsep):
|
||||
if os.path.isdir(path):
|
||||
sheet_paths.append(path)
|
||||
|
||||
if not sheet_paths:
|
||||
die('The DEFAULT_CHEAT_DIR dir does not exist or the CHEATPATH is not set.')
|
||||
|
||||
return sheet_paths
|
||||
|
||||
|
||||
def list():
|
||||
""" Lists the available cheatsheets """
|
||||
sheet_list = ''
|
||||
pad_length = max([len(x) for x in get().keys()]) + 4
|
||||
for sheet in sorted(get().items()):
|
||||
sheet_list += sheet[0].ljust(pad_length) + sheet[1] + "\n"
|
||||
return sheet_list
|
||||
|
||||
|
||||
def search(term):
|
||||
""" Searches all cheatsheets for the specified term """
|
||||
result = ''
|
||||
|
||||
for cheatsheet in sorted(get().items()):
|
||||
match = ''
|
||||
for line in open(cheatsheet[1]):
|
||||
if term in line:
|
||||
match += ' ' + line
|
||||
|
||||
if not match == '':
|
||||
result += cheatsheet[0] + ":\n" + match + "\n"
|
||||
|
||||
return result
|
0
cheat/test/__init__.py
Normal file
0
cheat/test/__init__.py
Normal file
56
cheat/utils.py
Normal file
56
cheat/utils.py
Normal file
@ -0,0 +1,56 @@
|
||||
import os
|
||||
import sys
|
||||
|
||||
|
||||
def colorize(sheet_content):
|
||||
""" Colorizes cheatsheet content if so configured """
|
||||
|
||||
# only colorize if so configured
|
||||
if not 'CHEATCOLORS' in os.environ:
|
||||
return sheet_content
|
||||
|
||||
try:
|
||||
from pygments import highlight
|
||||
from pygments.lexers import BashLexer
|
||||
from pygments.formatters import TerminalFormatter
|
||||
|
||||
# if pygments can't load, just return the uncolorized text
|
||||
except ImportError:
|
||||
return sheet_content
|
||||
|
||||
return highlight(sheet_content, BashLexer(), TerminalFormatter())
|
||||
|
||||
|
||||
def die(message):
|
||||
""" Prints a message to stderr and then terminates """
|
||||
warn (message)
|
||||
exit(1)
|
||||
|
||||
|
||||
def editor():
|
||||
""" Determines the user's preferred editor """
|
||||
if 'EDITOR' not in os.environ:
|
||||
die(
|
||||
'In order to create/edit a cheatsheet you must set your EDITOR '
|
||||
'environment variable to your editor\'s path.'
|
||||
)
|
||||
|
||||
elif os.environ['EDITOR'] == "":
|
||||
die(
|
||||
'Your EDITOR environment variable is set to an empty string. It must '
|
||||
'be set to your editor\'s path.'
|
||||
)
|
||||
|
||||
else:
|
||||
return os.environ['EDITOR']
|
||||
|
||||
|
||||
def prompt_yes_or_no(question):
|
||||
""" Prompts the user with a yes-or-no question """
|
||||
print(question)
|
||||
return raw_input('[y/n] ') == 'y'
|
||||
|
||||
|
||||
def warn(message):
|
||||
""" Prints a message to stderr """
|
||||
print >> sys.stderr, (message)
|
Reference in New Issue
Block a user