mirror of https://github.com/cheat/cheat.git
Refactored the application per some feedback on reddit.
This commit is contained in:
parent
11ef3149cd
commit
39b1cf391f
255
.cheat
255
.cheat
|
@ -1,255 +0,0 @@
|
||||||
#!/usr/bin/env python
|
|
||||||
|
|
||||||
cheatsheets = {
|
|
||||||
|
|
||||||
# @todo:
|
|
||||||
# - adb
|
|
||||||
# - at
|
|
||||||
# - dd
|
|
||||||
# - df
|
|
||||||
# - du
|
|
||||||
# - fdisk
|
|
||||||
# - fstab
|
|
||||||
# - mount
|
|
||||||
# - mongodump
|
|
||||||
# - mongoimport
|
|
||||||
# - nc
|
|
||||||
# - rsync
|
|
||||||
# - useradd / adduser
|
|
||||||
# - xargs
|
|
||||||
|
|
||||||
########## apt-cache ##########################################################
|
|
||||||
'apt-cache' : '''
|
|
||||||
To search for apt packages:
|
|
||||||
apt-cache search "whatever"
|
|
||||||
''',
|
|
||||||
|
|
||||||
########## bash ###############################################################
|
|
||||||
'bash' : '''
|
|
||||||
To implement a for loop:
|
|
||||||
for file in `ls .`;
|
|
||||||
do echo 'file';
|
|
||||||
echo 'found';
|
|
||||||
done
|
|
||||||
|
|
||||||
@todo: if (esp. file/directory)
|
|
||||||
''',
|
|
||||||
|
|
||||||
########## convert ###########################################################
|
|
||||||
'convert' : '''
|
|
||||||
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
|
|
||||||
''',
|
|
||||||
|
|
||||||
########## dd ################################################################
|
|
||||||
'dd' : '''
|
|
||||||
@todo
|
|
||||||
''',
|
|
||||||
|
|
||||||
########## dhclient ##########################################################
|
|
||||||
'dhclient' : '''
|
|
||||||
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.
|
|
||||||
''',
|
|
||||||
|
|
||||||
########## find ##############################################################
|
|
||||||
'find' : '''
|
|
||||||
To find files by extension (ex: .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
|
|
||||||
''',
|
|
||||||
|
|
||||||
########## git ###############################################################
|
|
||||||
'git' : '''
|
|
||||||
To set your identify:
|
|
||||||
git config --global user.name "John Doe"
|
|
||||||
git config --global user.email johndoe@example.com
|
|
||||||
|
|
||||||
To enable color:
|
|
||||||
git config --global color.ui true
|
|
||||||
''',
|
|
||||||
|
|
||||||
########## ln ################################################################
|
|
||||||
'ln' : '''
|
|
||||||
To create a symlink:
|
|
||||||
ln -s path/to/the/target/directory name-of-symlink
|
|
||||||
''',
|
|
||||||
|
|
||||||
########## mysqldump #########################################################
|
|
||||||
'mysqldump' : '''
|
|
||||||
To dump a database to a file:
|
|
||||||
mysqldump -uusername -ppassword the-database > db.sql
|
|
||||||
|
|
||||||
To dump a database to a .tgz file:
|
|
||||||
mysqldump -uusername -ppassword the-database | gzip -9 > db.sql
|
|
||||||
|
|
||||||
To dump all databases to a file:
|
|
||||||
mysqldump -uusername -ppassword --all-databases > all-databases.sql
|
|
||||||
''',
|
|
||||||
|
|
||||||
########## netstat ###########################################################
|
|
||||||
'netstat' : '''
|
|
||||||
To view which users/processes are listening to which ports:
|
|
||||||
sudo netstat -lnptu
|
|
||||||
''',
|
|
||||||
|
|
||||||
########## notify-send #######################################################
|
|
||||||
'notify-send' : '''
|
|
||||||
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.
|
|
||||||
''',
|
|
||||||
|
|
||||||
########## sed ################################################################
|
|
||||||
'sed' : '''
|
|
||||||
To replace all occurrences of "day" with "night" and write to stdout:
|
|
||||||
sed s/day/night file.txt
|
|
||||||
|
|
||||||
To replace all occurrences of "day" with "night" within file.txt:
|
|
||||||
sed s/day/night file.txt > file.txt
|
|
||||||
|
|
||||||
To replace all occurrences of "day" with "night" on stdin:
|
|
||||||
echo 'It is daytime' | sed s/day/night/
|
|
||||||
''',
|
|
||||||
|
|
||||||
########## shred ##############################################################
|
|
||||||
'shred' : '''
|
|
||||||
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.
|
|
||||||
''',
|
|
||||||
|
|
||||||
########## split #############################################################
|
|
||||||
'split' : '''
|
|
||||||
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
|
|
||||||
''',
|
|
||||||
|
|
||||||
########## sockstat ##########################################################
|
|
||||||
'sockstat' : '''
|
|
||||||
To view which users/processes are listening to which ports:
|
|
||||||
sudo sockstat -l
|
|
||||||
''',
|
|
||||||
|
|
||||||
########## ssh ###############################################################
|
|
||||||
'ssh' : '''
|
|
||||||
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'
|
|
||||||
|
|
||||||
For more information, see:
|
|
||||||
http://unix.stackexchange.com/q/12755/44856
|
|
||||||
''',
|
|
||||||
|
|
||||||
########## ssh-copy-id ########################################################
|
|
||||||
'ssh-copy-id' : '''
|
|
||||||
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
|
|
||||||
''',
|
|
||||||
|
|
||||||
########## ssh-keygen ########################################################
|
|
||||||
'ssh-keygen' : '''
|
|
||||||
To generate an SSH key:
|
|
||||||
ssh-keygen -t rsa
|
|
||||||
|
|
||||||
To generate a 4096-bit SSH key:
|
|
||||||
ssh-keygen -t rsa -b 4096
|
|
||||||
|
|
||||||
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
|
|
||||||
''',
|
|
||||||
|
|
||||||
########## stdout #############################################################
|
|
||||||
'stdout' : '''
|
|
||||||
To redirect stderr to stdout:
|
|
||||||
some-command 2>&1
|
|
||||||
|
|
||||||
To redirect stderr to a file
|
|
||||||
some-command 2> errors.txt
|
|
||||||
''',
|
|
||||||
|
|
||||||
########## tar ###############################################################
|
|
||||||
'tar' : '''
|
|
||||||
To extract an uncompressed archive:
|
|
||||||
tar -xvf /path/to/foo.tar
|
|
||||||
|
|
||||||
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 extract a .bz2 archive:
|
|
||||||
tar -xjvf /path/to/foo.tgz
|
|
||||||
|
|
||||||
To create a .bz2 archive:
|
|
||||||
tar -cjvf /path/to/foo.tgz /path/to/foo/
|
|
||||||
''',
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
# Cheatsheets can be aliased under a different keyphrase like this:
|
|
||||||
cheatsheets['dbus'] = cheatsheets['notify-send']
|
|
||||||
cheatsheets['imagick'] = cheatsheets['convert']
|
|
||||||
cheatsheets['redirection'] = cheatsheets['stdout']
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
To search for apt packages:
|
||||||
|
apt-cache search "whatever"
|
|
@ -0,0 +1,5 @@
|
||||||
|
To implement a for loop:
|
||||||
|
for file in `ls .`;
|
||||||
|
do echo 'file';
|
||||||
|
echo 'found';
|
||||||
|
done
|
|
@ -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
|
|
@ -0,0 +1,7 @@
|
||||||
|
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.
|
|
@ -0,0 +1,14 @@
|
||||||
|
To find files by extension (ex: .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
|
|
@ -0,0 +1,6 @@
|
||||||
|
To set your identify:
|
||||||
|
git config --global user.name "John Doe"
|
||||||
|
git config --global user.email johndoe@example.com
|
||||||
|
|
||||||
|
To enable color:
|
||||||
|
git config --global color.ui true
|
|
@ -0,0 +1,2 @@
|
||||||
|
To create a symlink:
|
||||||
|
ln -s path/to/the/target/directory name-of-symlink
|
|
@ -0,0 +1,8 @@
|
||||||
|
To dump a database to a file:
|
||||||
|
mysqldump -uusername -ppassword the-database > db.sql
|
||||||
|
|
||||||
|
To dump a database to a .tgz file:
|
||||||
|
mysqldump -uusername -ppassword the-database | gzip -9 > db.sql
|
||||||
|
|
||||||
|
To dump all databases to a file:
|
||||||
|
mysqldump -uusername -ppassword --all-databases > all-databases.sql
|
|
@ -0,0 +1,2 @@
|
||||||
|
To view which users/processes are listening to which ports:
|
||||||
|
sudo netstat -lnptu
|
|
@ -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.
|
|
@ -0,0 +1,8 @@
|
||||||
|
To replace all occurrences of "day" with "night" and write to stdout:
|
||||||
|
sed s/day/night file.txt
|
||||||
|
|
||||||
|
To replace all occurrences of "day" with "night" within file.txt:
|
||||||
|
sed s/day/night file.txt > file.txt
|
||||||
|
|
||||||
|
To replace all occurrences of "day" with "night" on stdin:
|
||||||
|
echo 'It is daytime' | sed s/day/night/
|
|
@ -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.
|
|
@ -0,0 +1,2 @@
|
||||||
|
To view which users/processes are listening to which ports:
|
||||||
|
sudo sockstat -l
|
|
@ -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
|
|
@ -0,0 +1,11 @@
|
||||||
|
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'
|
||||||
|
|
||||||
|
For more information, see:
|
||||||
|
http://unix.stackexchange.com/q/12755/44856
|
|
@ -0,0 +1,5 @@
|
||||||
|
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
|
|
@ -0,0 +1,11 @@
|
||||||
|
To generate an SSH key:
|
||||||
|
ssh-keygen -t rsa
|
||||||
|
|
||||||
|
To generate a 4096-bit SSH key:
|
||||||
|
ssh-keygen -t rsa -b 4096
|
||||||
|
|
||||||
|
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
|
|
@ -0,0 +1,5 @@
|
||||||
|
To redirect stderr to stdout:
|
||||||
|
some-command 2>&1
|
||||||
|
|
||||||
|
To redirect stderr to a file
|
||||||
|
some-command 2> errors.txt
|
|
@ -0,0 +1,14 @@
|
||||||
|
To extract an uncompressed archive:
|
||||||
|
tar -xvf /path/to/foo.tar
|
||||||
|
|
||||||
|
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 extract a .bz2 archive:
|
||||||
|
tar -xjvf /path/to/foo.tgz
|
||||||
|
|
||||||
|
To create a .bz2 archive:
|
||||||
|
tar -cjvf /path/to/foo.tgz /path/to/foo/
|
27
cheat
27
cheat
|
@ -1,23 +1,32 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
from os.path import expanduser
|
import os
|
||||||
import imp
|
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
# assemble a keyphrase out of all params passed to the script
|
# assemble a keyphrase out of all params passed to the script
|
||||||
keyphrase = ' '.join(sys.argv[1:])
|
keyphrase = ' '.join(sys.argv[1:])
|
||||||
|
cheat_dir = os.path.expanduser('~') + '/.cheat/'
|
||||||
|
|
||||||
# load the dictionary of cheatsheets
|
# verify that the ~/.cheat directory exists
|
||||||
config = imp.load_source('config', expanduser('~') + '/.cheat');
|
if not os.path.isdir(cheat_dir):
|
||||||
|
print >> sys.stderr, 'The ~/.cheat directory does not exist.'
|
||||||
|
exit()
|
||||||
|
|
||||||
|
# list the files in the ~/.cheat directory
|
||||||
|
cheatsheets = os.listdir(cheat_dir)
|
||||||
|
cheatsheets.sort()
|
||||||
|
|
||||||
# print help if requested
|
# print help if requested
|
||||||
if keyphrase in ['', 'help', '--help', '-h']:
|
if keyphrase in ['', 'help', '--help', '-h']:
|
||||||
cheatsheets_sorted = config.cheatsheets.keys()
|
|
||||||
cheatsheets_sorted.sort()
|
|
||||||
|
|
||||||
print "Usage: cheat [keyphrase]\n"
|
print "Usage: cheat [keyphrase]\n"
|
||||||
print "Available keyphrases:"
|
print "Available keyphrases:"
|
||||||
print "\n".join(cheatsheets_sorted)
|
print "\n".join(cheatsheets)
|
||||||
exit()
|
exit()
|
||||||
|
|
||||||
# print the cheatsheet if it exists
|
# print the cheatsheet if it exists
|
||||||
print config.cheatsheets[keyphrase] if keyphrase in config.cheatsheets.keys() else 'No cheatsheet found.'
|
if keyphrase in cheatsheets:
|
||||||
|
with open (cheat_dir + keyphrase, 'r') as cheatsheet:
|
||||||
|
print cheatsheet.read()
|
||||||
|
|
||||||
|
# if it does not, say so
|
||||||
|
else:
|
||||||
|
print 'No cheatsheet found.'
|
||||||
|
|
4
install
4
install
|
@ -5,7 +5,9 @@ import sys
|
||||||
|
|
||||||
try:
|
try:
|
||||||
shutil.copy('./cheat', '/usr/local/bin/')
|
shutil.copy('./cheat', '/usr/local/bin/')
|
||||||
shutil.copy('./.cheat', expanduser('~'))
|
shutil.copy('./.cheat/', expanduser('~'))
|
||||||
except IOError as e:
|
except IOError as e:
|
||||||
print >> sys.stderr, "This installer must be run as root."
|
print >> sys.stderr, "This installer must be run as root."
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
|
# don't forget to chown back to the normal user
|
||||||
|
|
Loading…
Reference in New Issue