Compare commits

...

47 Commits

Author SHA1 Message Date
307c4e6ad6 Merge pull request #472 from asamarin/master
Add: sqlite3 - describe table schema
2019-10-16 06:13:40 -04:00
1333703a49 Merge pull request #471 from thezeroalpha/master
ssh-keygen: add commands to print the fingerprint
2019-10-16 06:09:44 -04:00
184c200936 Merge pull request #473 from extend1994/Fix-netstat
Add missing spaces for netstat command comment
2019-10-16 06:06:13 -04:00
Ann
f1837b4c59 Add missing spaces for netstat command comment 2019-10-15 13:58:57 +08:00
77d0f6d9a0 Add: sqlite3 - describe table schema 2019-10-14 09:54:38 +01:00
5b2518b3fe ssh-keygen: add commands to print the fingerprint 2019-09-08 23:32:13 -04:00
60bf61c82f Merge branch 'TomasKorbar-installation-issues' 2019-09-03 12:48:51 -04:00
b1dabec129 Merge pull request #468 from FlorianKempenich/master
Add cheatsheet for `z`
2019-08-28 08:39:47 -04:00
d10290541d Add cheatsheet for z 2019-08-03 13:29:18 +01:00
12e8059025 Edit appdirs site_config_dir function
This change causes site_config_dir function to return
/etc/cheat on linux systems. This is right because most
linux distributions follow FHS where /etc is a directory
which contains system-wide configuration files.
2019-07-24 14:23:46 +02:00
ea07b6ad0e Merge pull request #455 from rengoo/patch-1
Update zip
2019-07-01 18:54:53 -04:00
c50b236b80 Merge pull request #366 from Asta1986/master
improved command to export query result to csv file
2019-07-01 18:53:44 -04:00
42a39449b3 Merge pull request #459 from rafaelbernard/vim-multiple-windows
Add: vim - multiple windows
2019-07-01 18:51:56 -04:00
087a076f74 Merge pull request #462 from santosomar/patch-1
Addition additional nmap options
2019-07-01 18:50:31 -04:00
a15ea7fc3e Merge pull request #433 from shanahanjrs/issue-334-emacs-fix
Emacs sheet now uses the proper prefix
2019-07-01 18:47:24 -04:00
f33e6cd602 Merge pull request #444 from dogsleg/patch-1
Fix typo, action (-I -> -l)
2019-07-01 18:38:57 -04:00
95f648cc2d Merge pull request #456 from jellymann/patch-1
fix: typo in vagrant sheet
2019-07-01 18:33:16 -04:00
0db660347b Merge pull request #463 from sullivant/patch-1
Updated tmux cheat to include swapping windows
2019-07-01 18:32:47 -04:00
432461a075 Updated tmux cheat to include swapping windows
Because I always forget.
2019-06-13 07:36:11 -05:00
93df3b3f20 Update nmap
Added Nmap Scripting Engine Categories
2019-06-02 18:56:31 -04:00
c548ded02d Addition additional nmap options
Added "Port Status Information" and Additional Scan Types
2019-06-02 18:53:03 -04:00
4c12d66546 Add: vim - multiple windows 2019-05-04 20:43:26 -03:00
6ce53370e7 fix: typo in vagrant sheet 2019-04-16 13:50:58 +02:00
bde74c701f Update zip
added command for creating a zip archive from a folder/directory
2019-04-13 20:59:08 +02:00
fdc414ede3 Fix import of appdirs in Configuration class
Import of appdirs without reference to cheat module caused
ModuleNotFoundError
2019-03-21 16:47:51 +01:00
5c23f374e4 Fix action (-I -> -l)
dpkg -I (capital i) is for showing information about a package.
dpkg -l (lowercase l) is for listing packages matching given pattern.

So, here is a fix for the typo.
2019-03-09 10:17:46 +05:00
c1fceb5f0d Merge branch 'installation-issues' of github.com:cheat/cheat into installation-issues 2019-02-13 12:55:30 -05:00
d0faf1a3e3 Included appdirs in project
The prior attempt to resolve #420 and #431 relied on `appdirs` to
determine the appropriate directories into which to install files.
Previously, `setup.py` dynamically attempted to install `appdirs` via
`pip` during installation if necessary.

This attempt to failed on multiple platforms, however, due to
backwards-incompatible `pip` interfaces.

As a workaround, I have now directly included `appdirs` (a small module)
within `cheat` itself. This approach is explicitly supported per the
`appdirs` documentation:

https://pypi.org/project/appdirs/
2019-02-13 12:53:19 -05:00
fdddedb8bd Installation issues
Resolves the following:

- #351 (use of `sudo` when installing)
- #420 (failure to install on Windows)
- #431 (failure to install on MacOS)

Application now relies on `appdirs` module to identify the appropriate
locations for storing configuration and data, both during installation
and runtime.
2019-02-13 12:51:18 -05:00
5487314676 Version bump: 2.5.1 2019-02-13 12:42:58 -05:00
ec360ccddd Merge pull request #435 from roachsinai/master
Expand ~ for 'CHEAT_USER_DIR', 'CHEAT_DEFAULT_DIR' and 'DEFAULT_CHEAT…
2019-02-13 12:40:25 -05:00
bb7dfd1028 Merge pull request #436 from avsej/patch-1
Fix typo in gcc sheet
2019-02-13 12:31:31 -05:00
b348724082 Update gcc 2019-02-13 13:52:33 +00:00
5053f07fd8 Expand ~ for 'CHEAT_USER_DIR', 'CHEAT_DEFAULT_DIR' and 'DEFAULT_CHEAT_DIR'. 2019-02-12 15:16:59 +08:00
f692c8e1d8 Addressing cross-platform installation issues
Attempted to address various cross-platform installation issues:

- Removed all hard-coded references to file-paths, and replaced them
  with paths provided by `appdirs`.

- Removed (erroneously inserted) default file paths which would never be
  checked due to application logic.

- Modified `setup.py` to no longer install a configuration file. The
  mechanics are still in place to **read** a configuration file, but
  after examination, I've concluded that the installation of that file
  is best left to package maintainers rather than `cheat` itself.
2019-02-09 13:27:58 -05:00
89bb9aaf13 Included appdirs in project
The prior attempt to resolve #420 and #431 relied on `appdirs` to
determine the appropriate directories into which to install files.
Previously, `setup.py` dynamically attempted to install `appdirs` via
`pip` during installation if necessary.

This attempt to failed on multiple platforms, however, due to
backwards-incompatible `pip` interfaces.

As a workaround, I have now directly included `appdirs` (a small module)
within `cheat` itself. This approach is explicitly supported per the
`appdirs` documentation:

https://pypi.org/project/appdirs/
2019-02-08 11:21:09 -05:00
574deeabc0 Emacs sheet now uses the proper prefix 2019-02-07 14:16:08 -05:00
482161f8e9 Installation issues
Resolves the following:

- #351 (use of `sudo` when installing)
- #420 (failure to install on Windows)
- #431 (failure to install on MacOS)

Application now relies on `appdirs` module to identify the appropriate
locations for storing configuration and data, both during installation
and runtime.
2019-02-07 13:34:20 -05:00
4dd55105d2 Merge pull request #361 from aroonav/master
Enable starting the cheat python script on windows.
2019-02-06 10:25:29 -05:00
6148d64599 Merge pull request #430 from movd/rename
Update rename
2019-02-05 08:59:06 -05:00
cde8bcaa1d Update rename
Add cheat for mass rename with search and replace
2019-02-05 10:57:43 +01:00
fcb82778e4 * Corrected the logic to execute the cheat script.
* Check VISUAL, CHEAT_EDITOR, EDITOR environment variables before falling
back to wordpad as the default editor.
2019-02-05 12:18:26 +05:30
da92421948 Merge remote-tracking branch 'upstream/master' 2019-02-05 10:14:39 +05:30
d6c7863573 Merge pull request #428 from dufferzafar/patch-2
ssh: Improve SOCKS command
2019-02-04 14:54:52 -05:00
5812bca6b7 ssh: Improve SOCKS command
This doesn't give an SSH shell, but just forwards the ports - which is what one usually requires when setting up a SOCKS proxy.

The -q is to suppress messages etc.
2019-02-04 23:45:16 +05:30
9c53e2ba10 improved command to export query result to csv file 2017-12-05 15:44:49 -03:00
d048ea5a10 Enable starting the cheat python script on windows.
For this add a small batch script in the same directory as the
cheat script.
2017-11-12 18:48:04 +05:30
24 changed files with 787 additions and 73 deletions

View File

@ -50,9 +50,12 @@ Installing
It is recommended to install `cheat` with `pip`:
```sh
[sudo] pip install cheat
pip install cheat --user
```
(You must ensure that the `Location` identified by `pip show cheat` exists on
your `PATH`.)
[Other installation methods are available][installing].

9
Vagrantfile vendored
View File

@ -8,10 +8,13 @@ Vagrant.configure("2") do |config|
vb.memory = "512"
end
config.vm.provision "shell", inline: <<-SHELL
config.vm.provision "shell", privileged: false, inline: <<-SHELL
sudo apt-get update
sudo apt-get install -y python-pip
su vagrant && sudo -H pip install docopt pygments termcolor flake8
cd /vagrant && sudo python setup.py install
sudo -H pip install flake8
pip install --user docopt pygments termcolor
cd /vagrant/ && python setup.py install --user
echo 'export PATH=$PATH:/home/vagrant/.local/bin' >> /home/vagrant/.bashrc
SHELL
end

View File

@ -47,7 +47,7 @@ import os
if __name__ == '__main__':
# parse the command-line options
options = docopt(__doc__, version='cheat 2.5.0')
options = docopt(__doc__, version='cheat 2.5.1')
# initialize and validate configs
config = Configuration()

8
bin/cheat.bat Normal file
View File

@ -0,0 +1,8 @@
@echo OFF
if not defined CHEAT_EDITOR if not defined EDITOR if not defined VISUAL (
set CHEAT_EDITOR=write
)
REM %~dp0 is black magic for getting directory of script
python %~dp0cheat %*

618
cheat/appdirs.py Normal file
View File

@ -0,0 +1,618 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Copyright (c) 2005-2010 ActiveState Software Inc.
# Copyright (c) 2013 Eddy Petrișor
"""Utilities for determining application-specific dirs.
See <https://github.com/ActiveState/appdirs> for details and usage.
"""
# Dev Notes:
# - MSDN on where to store app data files:
# http://support.microsoft.com/default.aspx?scid=kb;en-us;310294#XSLTH3194121123120121120120
# - Mac OS X: http://developer.apple.com/documentation/MacOSX/Conceptual/BPFileSystem/index.html
# - XDG spec for Un*x: https://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html
__version__ = "1.4.4"
__version_info__ = tuple(int(segment) for segment in __version__.split("."))
import sys
import os
PY3 = sys.version_info[0] == 3
if PY3:
unicode = str
if sys.platform.startswith('java'):
import platform
os_name = platform.java_ver()[3][0]
if os_name.startswith('Windows'): # "Windows XP", "Windows 7", etc.
system = 'win32'
elif os_name.startswith('Mac'): # "Mac OS X", etc.
system = 'darwin'
else: # "Linux", "SunOS", "FreeBSD", etc.
# Setting this to "linux2" is not ideal, but only Windows or Mac
# are actually checked for and the rest of the module expects
# *sys.platform* style strings.
system = 'linux2'
else:
system = sys.platform
def user_data_dir(appname=None, appauthor=None, version=None, roaming=False):
r"""Return full path to the user-specific data dir for this application.
"appname" is the name of application.
If None, just the system directory is returned.
"appauthor" (only used on Windows) is the name of the
appauthor or distributing body for this application. Typically
it is the owning company name. This falls back to appname. You may
pass False to disable it.
"version" is an optional version path element to append to the
path. You might want to use this if you want multiple versions
of your app to be able to run independently. If used, this
would typically be "<major>.<minor>".
Only applied when appname is present.
"roaming" (boolean, default False) can be set True to use the Windows
roaming appdata directory. That means that for users on a Windows
network setup for roaming profiles, this user data will be
sync'd on login. See
<http://technet.microsoft.com/en-us/library/cc766489(WS.10).aspx>
for a discussion of issues.
Typical user data directories are:
Mac OS X: ~/Library/Application Support/<AppName>
Unix: ~/.local/share/<AppName> # or in $XDG_DATA_HOME, if defined
Win XP (not roaming): C:\Documents and Settings\<username>\Application Data\<AppAuthor>\<AppName>
Win XP (roaming): C:\Documents and Settings\<username>\Local Settings\Application Data\<AppAuthor>\<AppName>
Win 7 (not roaming): C:\Users\<username>\AppData\Local\<AppAuthor>\<AppName>
Win 7 (roaming): C:\Users\<username>\AppData\Roaming\<AppAuthor>\<AppName>
For Unix, we follow the XDG spec and support $XDG_DATA_HOME.
That means, by default "~/.local/share/<AppName>".
"""
if system == "win32":
if appauthor is None:
appauthor = appname
const = roaming and "CSIDL_APPDATA" or "CSIDL_LOCAL_APPDATA"
path = os.path.normpath(_get_win_folder(const))
if appname:
if appauthor is not False:
path = os.path.join(path, appauthor, appname)
else:
path = os.path.join(path, appname)
elif system == 'darwin':
path = os.path.expanduser('~/Library/Application Support/')
if appname:
path = os.path.join(path, appname)
else:
path = os.getenv('XDG_DATA_HOME', os.path.expanduser("~/.local/share"))
if appname:
path = os.path.join(path, appname)
if appname and version:
path = os.path.join(path, version)
return path
def site_data_dir(appname=None, appauthor=None, version=None, multipath=False):
r"""Return full path to the user-shared data dir for this application.
"appname" is the name of application.
If None, just the system directory is returned.
"appauthor" (only used on Windows) is the name of the
appauthor or distributing body for this application. Typically
it is the owning company name. This falls back to appname. You may
pass False to disable it.
"version" is an optional version path element to append to the
path. You might want to use this if you want multiple versions
of your app to be able to run independently. If used, this
would typically be "<major>.<minor>".
Only applied when appname is present.
"multipath" is an optional parameter only applicable to *nix
which indicates that the entire list of data dirs should be
returned. By default, the first item from XDG_DATA_DIRS is
returned, or '/usr/local/share/<AppName>',
if XDG_DATA_DIRS is not set
Typical site data directories are:
Mac OS X: /Library/Application Support/<AppName>
Unix: /usr/local/share/<AppName> or /usr/share/<AppName>
Win XP: C:\Documents and Settings\All Users\Application Data\<AppAuthor>\<AppName>
Vista: (Fail! "C:\ProgramData" is a hidden *system* directory on Vista.)
Win 7: C:\ProgramData\<AppAuthor>\<AppName> # Hidden, but writeable on Win 7.
For Unix, this is using the $XDG_DATA_DIRS[0] default.
WARNING: Do not use this on Windows. See the Vista-Fail note above for why.
"""
if system == "win32":
if appauthor is None:
appauthor = appname
path = os.path.normpath(_get_win_folder("CSIDL_COMMON_APPDATA"))
if appname:
if appauthor is not False:
path = os.path.join(path, appauthor, appname)
else:
path = os.path.join(path, appname)
elif system == 'darwin':
path = os.path.expanduser('/Library/Application Support')
if appname:
path = os.path.join(path, appname)
else:
# XDG default for $XDG_DATA_DIRS
# only first, if multipath is False
path = os.getenv('XDG_DATA_DIRS',
os.pathsep.join(['/usr/local/share', '/usr/share']))
pathlist = [os.path.expanduser(x.rstrip(os.sep)) for x in path.split(os.pathsep)]
if appname:
if version:
appname = os.path.join(appname, version)
pathlist = [os.sep.join([x, appname]) for x in pathlist]
if multipath:
path = os.pathsep.join(pathlist)
else:
path = pathlist[0]
return path
if appname and version:
path = os.path.join(path, version)
return path
def user_config_dir(appname=None, appauthor=None, version=None, roaming=False):
r"""Return full path to the user-specific config dir for this application.
"appname" is the name of application.
If None, just the system directory is returned.
"appauthor" (only used on Windows) is the name of the
appauthor or distributing body for this application. Typically
it is the owning company name. This falls back to appname. You may
pass False to disable it.
"version" is an optional version path element to append to the
path. You might want to use this if you want multiple versions
of your app to be able to run independently. If used, this
would typically be "<major>.<minor>".
Only applied when appname is present.
"roaming" (boolean, default False) can be set True to use the Windows
roaming appdata directory. That means that for users on a Windows
network setup for roaming profiles, this user data will be
sync'd on login. See
<http://technet.microsoft.com/en-us/library/cc766489(WS.10).aspx>
for a discussion of issues.
Typical user config directories are:
Mac OS X: ~/Library/Preferences/<AppName>
Unix: ~/.config/<AppName> # or in $XDG_CONFIG_HOME, if defined
Win *: same as user_data_dir
For Unix, we follow the XDG spec and support $XDG_CONFIG_HOME.
That means, by default "~/.config/<AppName>".
"""
if system == "win32":
path = user_data_dir(appname, appauthor, None, roaming)
elif system == 'darwin':
path = os.path.expanduser('~/Library/Preferences/')
if appname:
path = os.path.join(path, appname)
else:
path = os.getenv('XDG_CONFIG_HOME', os.path.expanduser("~/.config"))
if appname:
path = os.path.join(path, appname)
if appname and version:
path = os.path.join(path, version)
return path
def site_config_dir(appname=None, appauthor=None, version=None, multipath=False):
r"""Return full path to the user-shared data dir for this application.
"appname" is the name of application.
If None, just the system directory is returned.
"appauthor" (only used on Windows) is the name of the
appauthor or distributing body for this application. Typically
it is the owning company name. This falls back to appname. You may
pass False to disable it.
"version" is an optional version path element to append to the
path. You might want to use this if you want multiple versions
of your app to be able to run independently. If used, this
would typically be "<major>.<minor>".
Only applied when appname is present.
"multipath" is an optional parameter only applicable to *nix
which indicates that the entire list of config dirs should be
returned. By default, the first item from XDG_CONFIG_DIRS is
returned, or '/etc/xdg/<AppName>', if XDG_CONFIG_DIRS is not set
Typical site config directories are:
Mac OS X: same as site_data_dir
Unix: /etc/xdg/<AppName> or $XDG_CONFIG_DIRS[i]/<AppName> for each value in
$XDG_CONFIG_DIRS
Win *: same as site_data_dir
Vista: (Fail! "C:\ProgramData" is a hidden *system* directory on Vista.)
For Unix, this is using the $XDG_CONFIG_DIRS[0] default, if multipath=False
WARNING: Do not use this on Windows. See the Vista-Fail note above for why.
"""
if system == 'win32':
path = site_data_dir(appname, appauthor)
if appname and version:
path = os.path.join(path, version)
elif system == 'darwin':
path = os.path.expanduser('/Library/Preferences')
if appname:
path = os.path.join(path, appname)
elif system == 'linux':
path = os.path.join('/etc/', appname)
else:
# XDG default for $XDG_CONFIG_DIRS
# only first, if multipath is False
path = os.getenv('XDG_CONFIG_DIRS', '/etc/xdg')
pathlist = [os.path.expanduser(x.rstrip(os.sep)) for x in path.split(os.pathsep)]
if appname:
if version:
appname = os.path.join(appname, version)
pathlist = [os.sep.join([x, appname]) for x in pathlist]
if multipath:
path = os.pathsep.join(pathlist)
else:
path = pathlist[0]
return path
def user_cache_dir(appname=None, appauthor=None, version=None, opinion=True):
r"""Return full path to the user-specific cache dir for this application.
"appname" is the name of application.
If None, just the system directory is returned.
"appauthor" (only used on Windows) is the name of the
appauthor or distributing body for this application. Typically
it is the owning company name. This falls back to appname. You may
pass False to disable it.
"version" is an optional version path element to append to the
path. You might want to use this if you want multiple versions
of your app to be able to run independently. If used, this
would typically be "<major>.<minor>".
Only applied when appname is present.
"opinion" (boolean) can be False to disable the appending of
"Cache" to the base app data dir for Windows. See
discussion below.
Typical user cache directories are:
Mac OS X: ~/Library/Caches/<AppName>
Unix: ~/.cache/<AppName> (XDG default)
Win XP: C:\Documents and Settings\<username>\Local Settings\Application Data\<AppAuthor>\<AppName>\Cache
Vista: C:\Users\<username>\AppData\Local\<AppAuthor>\<AppName>\Cache
On Windows the only suggestion in the MSDN docs is that local settings go in
the `CSIDL_LOCAL_APPDATA` directory. This is identical to the non-roaming
app data dir (the default returned by `user_data_dir` above). Apps typically
put cache data somewhere *under* the given dir here. Some examples:
...\Mozilla\Firefox\Profiles\<ProfileName>\Cache
...\Acme\SuperApp\Cache\1.0
OPINION: This function appends "Cache" to the `CSIDL_LOCAL_APPDATA` value.
This can be disabled with the `opinion=False` option.
"""
if system == "win32":
if appauthor is None:
appauthor = appname
path = os.path.normpath(_get_win_folder("CSIDL_LOCAL_APPDATA"))
if appname:
if appauthor is not False:
path = os.path.join(path, appauthor, appname)
else:
path = os.path.join(path, appname)
if opinion:
path = os.path.join(path, "Cache")
elif system == 'darwin':
path = os.path.expanduser('~/Library/Caches')
if appname:
path = os.path.join(path, appname)
else:
path = os.getenv('XDG_CACHE_HOME', os.path.expanduser('~/.cache'))
if appname:
path = os.path.join(path, appname)
if appname and version:
path = os.path.join(path, version)
return path
def user_state_dir(appname=None, appauthor=None, version=None, roaming=False):
r"""Return full path to the user-specific state dir for this application.
"appname" is the name of application.
If None, just the system directory is returned.
"appauthor" (only used on Windows) is the name of the
appauthor or distributing body for this application. Typically
it is the owning company name. This falls back to appname. You may
pass False to disable it.
"version" is an optional version path element to append to the
path. You might want to use this if you want multiple versions
of your app to be able to run independently. If used, this
would typically be "<major>.<minor>".
Only applied when appname is present.
"roaming" (boolean, default False) can be set True to use the Windows
roaming appdata directory. That means that for users on a Windows
network setup for roaming profiles, this user data will be
sync'd on login. See
<http://technet.microsoft.com/en-us/library/cc766489(WS.10).aspx>
for a discussion of issues.
Typical user state directories are:
Mac OS X: same as user_data_dir
Unix: ~/.local/state/<AppName> # or in $XDG_STATE_HOME, if defined
Win *: same as user_data_dir
For Unix, we follow this Debian proposal <https://wiki.debian.org/XDGBaseDirectorySpecification#state>
to extend the XDG spec and support $XDG_STATE_HOME.
That means, by default "~/.local/state/<AppName>".
"""
if system in ["win32", "darwin"]:
path = user_data_dir(appname, appauthor, None, roaming)
else:
path = os.getenv('XDG_STATE_HOME', os.path.expanduser("~/.local/state"))
if appname:
path = os.path.join(path, appname)
if appname and version:
path = os.path.join(path, version)
return path
def user_log_dir(appname=None, appauthor=None, version=None, opinion=True):
r"""Return full path to the user-specific log dir for this application.
"appname" is the name of application.
If None, just the system directory is returned.
"appauthor" (only used on Windows) is the name of the
appauthor or distributing body for this application. Typically
it is the owning company name. This falls back to appname. You may
pass False to disable it.
"version" is an optional version path element to append to the
path. You might want to use this if you want multiple versions
of your app to be able to run independently. If used, this
would typically be "<major>.<minor>".
Only applied when appname is present.
"opinion" (boolean) can be False to disable the appending of
"Logs" to the base app data dir for Windows, and "log" to the
base cache dir for Unix. See discussion below.
Typical user log directories are:
Mac OS X: ~/Library/Logs/<AppName>
Unix: ~/.cache/<AppName>/log # or under $XDG_CACHE_HOME if defined
Win XP: C:\Documents and Settings\<username>\Local Settings\Application Data\<AppAuthor>\<AppName>\Logs
Vista: C:\Users\<username>\AppData\Local\<AppAuthor>\<AppName>\Logs
On Windows the only suggestion in the MSDN docs is that local settings
go in the `CSIDL_LOCAL_APPDATA` directory. (Note: I'm interested in
examples of what some windows apps use for a logs dir.)
OPINION: This function appends "Logs" to the `CSIDL_LOCAL_APPDATA`
value for Windows and appends "log" to the user cache dir for Unix.
This can be disabled with the `opinion=False` option.
"""
if system == "darwin":
path = os.path.join(
os.path.expanduser('~/Library/Logs'),
appname)
elif system == "win32":
path = user_data_dir(appname, appauthor, version)
version = False
if opinion:
path = os.path.join(path, "Logs")
else:
path = user_cache_dir(appname, appauthor, version)
version = False
if opinion:
path = os.path.join(path, "log")
if appname and version:
path = os.path.join(path, version)
return path
class AppDirs(object):
"""Convenience wrapper for getting application dirs."""
def __init__(self, appname=None, appauthor=None, version=None,
roaming=False, multipath=False):
self.appname = appname
self.appauthor = appauthor
self.version = version
self.roaming = roaming
self.multipath = multipath
@property
def user_data_dir(self):
return user_data_dir(self.appname, self.appauthor,
version=self.version, roaming=self.roaming)
@property
def site_data_dir(self):
return site_data_dir(self.appname, self.appauthor,
version=self.version, multipath=self.multipath)
@property
def user_config_dir(self):
return user_config_dir(self.appname, self.appauthor,
version=self.version, roaming=self.roaming)
@property
def site_config_dir(self):
return site_config_dir(self.appname, self.appauthor,
version=self.version, multipath=self.multipath)
@property
def user_cache_dir(self):
return user_cache_dir(self.appname, self.appauthor,
version=self.version)
@property
def user_state_dir(self):
return user_state_dir(self.appname, self.appauthor,
version=self.version)
@property
def user_log_dir(self):
return user_log_dir(self.appname, self.appauthor,
version=self.version)
#---- internal support stuff
def _get_win_folder_from_registry(csidl_name):
"""This is a fallback technique at best. I'm not sure if using the
registry for this guarantees us the correct answer for all CSIDL_*
names.
"""
if PY3:
import winreg as _winreg
else:
import _winreg
shell_folder_name = {
"CSIDL_APPDATA": "AppData",
"CSIDL_COMMON_APPDATA": "Common AppData",
"CSIDL_LOCAL_APPDATA": "Local AppData",
}[csidl_name]
key = _winreg.OpenKey(
_winreg.HKEY_CURRENT_USER,
r"Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
)
dir, type = _winreg.QueryValueEx(key, shell_folder_name)
return dir
def _get_win_folder_with_pywin32(csidl_name):
from win32com.shell import shellcon, shell
dir = shell.SHGetFolderPath(0, getattr(shellcon, csidl_name), 0, 0)
# Try to make this a unicode path because SHGetFolderPath does
# not return unicode strings when there is unicode data in the
# path.
try:
dir = unicode(dir)
# Downgrade to short path name if have highbit chars. See
# <http://bugs.activestate.com/show_bug.cgi?id=85099>.
has_high_char = False
for c in dir:
if ord(c) > 255:
has_high_char = True
break
if has_high_char:
try:
import win32api
dir = win32api.GetShortPathName(dir)
except ImportError:
pass
except UnicodeError:
pass
return dir
def _get_win_folder_with_ctypes(csidl_name):
import ctypes
csidl_const = {
"CSIDL_APPDATA": 26,
"CSIDL_COMMON_APPDATA": 35,
"CSIDL_LOCAL_APPDATA": 28,
}[csidl_name]
buf = ctypes.create_unicode_buffer(1024)
ctypes.windll.shell32.SHGetFolderPathW(None, csidl_const, None, 0, buf)
# Downgrade to short path name if have highbit chars. See
# <http://bugs.activestate.com/show_bug.cgi?id=85099>.
has_high_char = False
for c in buf:
if ord(c) > 255:
has_high_char = True
break
if has_high_char:
buf2 = ctypes.create_unicode_buffer(1024)
if ctypes.windll.kernel32.GetShortPathNameW(buf.value, buf2, 1024):
buf = buf2
return buf.value
def _get_win_folder_with_jna(csidl_name):
import array
from com.sun import jna
from com.sun.jna.platform import win32
buf_size = win32.WinDef.MAX_PATH * 2
buf = array.zeros('c', buf_size)
shell = win32.Shell32.INSTANCE
shell.SHGetFolderPath(None, getattr(win32.ShlObj, csidl_name), None, win32.ShlObj.SHGFP_TYPE_CURRENT, buf)
dir = jna.Native.toString(buf.tostring()).rstrip("\0")
# Downgrade to short path name if have highbit chars. See
# <http://bugs.activestate.com/show_bug.cgi?id=85099>.
has_high_char = False
for c in dir:
if ord(c) > 255:
has_high_char = True
break
if has_high_char:
buf = array.zeros('c', buf_size)
kernel = win32.Kernel32.INSTANCE
if kernel.GetShortPathName(dir, buf, buf_size):
dir = jna.Native.toString(buf.tostring()).rstrip("\0")
return dir
if system == "win32":
try:
import win32com.shell
_get_win_folder = _get_win_folder_with_pywin32
except ImportError:
try:
from ctypes import windll
_get_win_folder = _get_win_folder_with_ctypes
except ImportError:
try:
import com.sun.jna
_get_win_folder = _get_win_folder_with_jna
except ImportError:
_get_win_folder = _get_win_folder_from_registry
#---- self test code
if __name__ == "__main__":
appname = "MyApp"
appauthor = "MyCompany"
props = ("user_data_dir",
"user_config_dir",
"user_cache_dir",
"user_state_dir",
"user_log_dir",
"site_data_dir",
"site_config_dir")
print("-- app dirs %s --" % __version__)
print("-- app dirs (with optional 'version')")
dirs = AppDirs(appname, appauthor, version="1.0")
for prop in props:
print("%s: %s" % (prop, getattr(dirs, prop)))
print("\n-- app dirs (without optional 'version')")
dirs = AppDirs(appname, appauthor)
for prop in props:
print("%s: %s" % (prop, getattr(dirs, prop)))
print("\n-- app dirs (without optional 'appauthor')")
dirs = AppDirs(appname)
for prop in props:
print("%s: %s" % (prop, getattr(dirs, prop)))
print("\n-- app dirs (with disabled 'appauthor')")
dirs = AppDirs(appname, appauthor=False)
for prop in props:
print("%s: %s" % (prop, getattr(dirs, prop)))

View File

@ -5,7 +5,7 @@ dpkg -i test.deb
dpkg -P test.deb
# List all installed packages with versions and details
dpkg -I
dpkg -l
# Find out if a Debian package is installed or not
dpkg -s test.deb | grep Status

View File

@ -6,59 +6,59 @@
# Basic usage
Indent Select text then press TAB
Cut CTRL-w
Copy ALT-w
Paste ("yank") CTRL-y
Begin selection CTRL-SPACE
Search/Find CTRL-s
Replace ALT-% (ALT-SHIFT-5)
Save CTRL-x CTRL-s
Save as CTRL-x CTRL-w
Load/Open CTRL-x CTRL-f
Undo CTRL-x u
Highlight all text CTRL-x h
Directory listing CTRL-x d
Cancel a command CTRL-g
Font size bigger CTRL-x CTRL-+
Font size smaller CTRL-x CTRL--
Cut C-w
Copy M-w
Paste ("yank") C-y
Begin selection C-SPACE
Search/Find C-s
Replace M-% (M-SHIFT-5)
Save C-x C-s
Save as C-x C-w
Load/Open C-x C-f
Undo C-x u
Highlight all text C-x h
Directory listing C-x d
Cancel a command C-g
Font size bigger C-x C-+
Font size smaller C-x C--
# Buffers
Split screen vertically 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
Move to the next screen CTRL-x o
Kill the current buffer CTRL-x k
Select a buffer CTRL-x b
Run command in the scratch buffer CTRL-x CTRL-e
Split screen vertically C-x 2
Split screen vertically with 5 row height C-u 5 C-x 2
Split screen horizontally C-x 3
Split screen horizontally with 24 column width C-u 24 C-x 3
Revert to single screen C-x 1
Hide the current screen C-x 0
Move to the next screen C-x o
Kill the current buffer C-x k
Select a buffer C-x b
Run command in the scratch buffer C-x C-e
# Navigation ( backward / forward )
Character-wise CTRL-b , CTRL-f
Word-wise ALT-b , ALT-f
Line-wise CTRL-p , CTRL-n
Sentence-wise ALT-a , ALT-e
Paragraph-wise ALT-{ , ALT-}
Function-wise CTRL-ALT-a , CTRL-ALT-e
Line beginning / end CTRL-a , CTRL-e
Character-wise C-b , C-f
Word-wise M-b , M-f
Line-wise C-p , C-n
Sentence-wise M-a , M-e
Paragraph-wise M-{ , M-}
Function-wise C-M-a , C-M-e
Line beginning / end C-a , C-e
# Other stuff
Open a shell 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
Open a shell M-x eshell
Goto a line number M-x goto-line
Word wrap M-x toggle-word-wrap
Spell checking M-x flyspell-mode
Line numbers M-x linum-mode
Toggle line wrap M-x visual-line-mode
Compile some code M-x compile
List packages M-x package-list-packages
# Line numbers
To add line numbers and enable moving to a line with CTRL-l:
To add line numbers and enable moving to a line with C-l:
(global-set-key "\C-l" 'goto-line)
(add-hook 'find-file-hook (lambda () (linum-mode 1)))

View File

@ -10,7 +10,7 @@ gcc -g
# Debug with all symbols.
gcc -ggdb3
# Build for 64 bytes
# Build for 64 bits
gcc -m64
# Include the directory {/usr/include/myPersonnal/lib/} to the list of path for #include <....>

View File

@ -18,11 +18,11 @@ sudo netstat -vtlnp --listening -4
# Replace it by:
ss
# For netstat-r
# For netstat -r
ip route
# For netstat -i
ip -s link
# For netstat-g
# For netstat -g
ip maddr

View File

@ -67,3 +67,38 @@ nmap -T5 --min-parallelism=50 -n --script "ssl-heartbleed" -pT:443 127.0.0.1
# Show all informations (debug mode)
nmap -d ...
## Port Status Information
- Open: This indicates that an application is listening for connections on this port.
- Closed: This indicates that the probes were received but there is no application listening on this port.
- Filtered: This indicates that the probes were not received and the state could not be established. It also indicates that the probes are being dropped by some kind of filtering.
- Unfiltered: This indicates that the probes were received but a state could not be established.
- Open/Filtered: This indicates that the port was filtered or open but Nmap couldnt establish the state.
- Closed/Filtered: This indicates that the port was filtered or closed but Nmap couldnt establish the state.
## Additional Scan Types
nmap -sn: Probe only (host discovery, not port scan)
nmap -sS: SYN Scan
nmap -sT: TCP Connect Scan
nmap -sU: UDP Scan
nmap -sV: Version Scan
nmap -O: Used for OS Detection/fingerprinting
nmap --scanflags: Sets custom list of TCP using `URG ACK PSH RST SYN FIN` in any order
### Nmap Scripting Engine Categories
The most common Nmap scripting engine categories:
- auth: Utilize credentials or bypass authentication on target hosts.
- broadcast: Discover hosts not included on command line by broadcasting on local network.
- brute: Attempt to guess passwords on target systems, for a variety of protocols, including http, SNMP, IAX, MySQL, VNC, etc.
- default: Scripts run automatically when -sC or -A are used.
- discovery: Try to learn more information about target hosts through public sources of information, SNMP, directory services, and more.
- dos: May cause denial of service conditions in target hosts.
- exploit: Attempt to exploit target systems.
- external: Interact with third-party systems not included in target list.
- fuzzer: Send unexpected input in network protocol fields.
- intrusive: May crash target, consume excessive resources, or otherwise impact target machines in a malicious fashion.
- malware: Look for signs of malware infection on the target hosts.
- safe: Designed not to impact target in a negative fashion.
- version: Measure the version of software or protocols on the target hosts.
- vul: Measure whether target systems have a known vulnerability.

View File

@ -16,8 +16,9 @@ psql -U postgres -d dbName -c 'select * from tableName;' -o fileName
# Execute query and get tabular html output:
psql -U postgres -d dbName -H -c 'select * from tableName;'
# Execute query and save resulting rows to csv file:
psql -U postgres -d dbName -t -A -P fieldsep=',' -c 'select * from tableName;' -o fileName.csv
# Execute query and save resulting rows to csv file
# (if column names in the first row are not needed, remove the word 'header'):
psql -U postgres -d dbName -c 'copy (select * from tableName) to stdout with csv header;' -o fileName.csv
# Read commands from file:
psql -f fileName

View File

@ -1,2 +1,5 @@
# Lowercase all files and folders in current directory
rename 'y/A-Z/a-z/' *
# Replace 'sometext' with 'replacedby' in all files in current directory
rename 's/sometext/replacedby/' *

View File

@ -10,6 +10,9 @@ sqlite3 example.db "INSERT INTO 'Os' VALUES(1,'Linux',1991);"
# list tables
sqlite3 example.db ".tables"
# describe table
sqlite3 example.db ".schema 'Os'"
# view records in table
sqlite3 example.db "SELECT * FROM 'Os';"

View File

@ -21,7 +21,7 @@ ssh -f -L 8080:remote.example.com:5000 user@personal.server.com -N
ssh -X -t user@example.com 'chromium-browser'
# To create a SOCKS proxy on localhost and port 9999
ssh -D 9999 user@example.com
ssh -qND 9999 user@example.com
# To tunnel an ssh session over the SOCKS proxy on localhost and port 9999
ssh -o "ProxyCommand nc -x 127.0.0.1:9999 -X 4 %h %p" username@example2.com

View File

@ -12,3 +12,9 @@ ssh-keygen -p -P old_passphrase -N '' -f /path/to/keyfile
# To generate a 4096 bit RSA key with a passphase and comment containing the user and hostname
ssh-keygen -t rsa -b 4096 -C "$USER@$HOSTNAME" -P passphrase
# To print the fingerprint of a public key
ssh-keygen -lf /path/to/keyfile
# To print the Github-style (MD5) fingerprint of a public key
ssh-keygen -E md5 -lf /path/to/keyfile

View File

@ -51,3 +51,6 @@ Ctrl-b %
# Split windows vertically:
Ctrl-b "
# Swap windows
Ctrl-b :swap-window -s [0-9] -t [0-9]

View File

@ -30,4 +30,4 @@ vagrant suspend
vagrant destroy
# Restart vm with new provision script
vagran reload --provision
vagrant reload --provision

View File

@ -63,3 +63,18 @@ d{motion} delete text that {motion} moves over
2dw deletes 2 words
5yy copies 5 lines
42G go to line 42
# Multiple windows
:e filename - edit another file
:split filename - split window and load another file
ctrl-w up arrow - move cursor up a window
ctrl-w ctrl-w - move cursor to another window (cycle)
ctrl-w_ - maximize current window
ctrl-w= - make all equal size
10 ctrl-w+ - increase window size by 10 lines
:vsplit file - vertical split
:sview file - same as split, but readonly
:hide - close current window
:only - keep only this window open
:ls - show current buffers
:b 2 - open buffer #2 in this window

14
cheat/cheatsheets/z Normal file
View File

@ -0,0 +1,14 @@
# To `cd` to most frecent dir matching `foo`
z foo
# To `cd` to most frecent dir matching `foo`, then `bar`
z foo bar
# To `cd` to highest ranked dir matching `foo`
z -r foo
# To `cd` to most recently accessed dir matching `foo`
z -t foo
# To list all dirs matching `foo` - By frecency
z -l foo

View File

@ -1,6 +1,9 @@
# Create zip file
zip archive.zip file1 directory/
# Create zip file from directory
zip -r archive.zip directory/
# Create zip file with password
zip -P password archive.zip file1

View File

@ -1,4 +1,5 @@
from cheat.utils import Utils
import cheat.appdirs as appdirs
import json
import os
@ -9,11 +10,11 @@ class Configuration:
# compute the location of the config files
config_file_path_global = self._select([
os.environ.get('CHEAT_GLOBAL_CONF_PATH'),
'/etc/cheat',
appdirs.site_config_dir('cheat', 'cheat'),
])
config_file_path_local = self._select([
os.environ.get('CHEAT_LOCAL_CONF_PATH'),
os.path.expanduser('~/.config/cheat/cheat'),
appdirs.user_config_dir('cheat', 'cheat'),
])
# attempt to read the global config file
@ -49,15 +50,13 @@ class Configuration:
]).strip().lower()
# self.cheat_user_dir
self.cheat_user_dir = self._select([
os.environ.get('CHEAT_USER_DIR'),
os.environ.get('CHEAT_DEFAULT_DIR'),
os.environ.get('DEFAULT_CHEAT_DIR'),
# TODO: XDG home?
os.path.expanduser(
os.path.expandvars(os.path.join('~', '.cheat'))
),
])
self.cheat_user_dir = self._select(
map(os.path.expanduser,
filter(None,
[os.environ.get('CHEAT_USER_DIR'),
os.environ.get('CHEAT_DEFAULT_DIR'),
os.environ.get('DEFAULT_CHEAT_DIR'),
os.path.join('~', '.cheat')])))
# self.cheat_editor
self.cheat_editor = self._select([
@ -82,7 +81,7 @@ class Configuration:
os.environ.get('CHEAT_PATH'),
os.environ.get('CHEATPATH'),
config.get('CHEAT_PATH'),
'/usr/share/cheat',
appdirs.user_data_dir('cheat', 'cheat'),
])
def _read_config_file(self, path):

View File

@ -7,4 +7,4 @@ APPROOT=`realpath "$SCRIPTPATH/.."`
flake8 $APPROOT/setup.py
flake8 $APPROOT/bin/cheat
flake8 $APPROOT/cheat/*.py
flake8 $APPROOT/cheat/*.py --exclude=appdirs.py

View File

@ -1,10 +1,11 @@
from cheat.appdirs import user_data_dir
from distutils.core import setup
import os
# determine the directory in which to install system-wide cheatsheets
# KLUDGE: It would be better to read `/usr/share/cheat` from `config/cheat`
# rather than hard-coding it here
cheat_path = os.environ.get('CHEAT_PATH') or '/usr/share/cheat'
# determine the path in which to install the cheatsheets included with the
# package
cheat_path = os.environ.get('CHEAT_PATH') or \
user_data_dir('cheat', 'cheat')
# aggregate the systme-wide cheatsheets
cheat_files = []
@ -14,7 +15,7 @@ for f in os.listdir('cheat/cheatsheets/'):
# specify build params
setup(
name='cheat',
version='2.5.0',
version='2.5.1',
author='Chris Lane',
author_email='chris@chris-allen-lane.com',
license='GPL3',
@ -35,6 +36,5 @@ setup(
],
data_files=[
(cheat_path, cheat_files),
('/etc', ['config/cheat']),
],
)