Refactored the application per some feedback on reddit.

This commit is contained in:
Chris Lane 2013-08-11 15:37:11 -04:00
parent 11ef3149cd
commit 39b1cf391f
22 changed files with 167 additions and 265 deletions

255
.cheat
View file

@ -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']

2
.cheat/apt-cache Normal file
View file

@ -0,0 +1,2 @@
To search for apt packages:
apt-cache search "whatever"

5
.cheat/bash Normal file
View file

@ -0,0 +1,5 @@
To implement a for loop:
for file in `ls .`;
do echo 'file';
echo 'found';
done

19
.cheat/convert Normal file
View 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

7
.cheat/dhclient Normal file
View file

@ -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.

14
.cheat/find Normal file
View file

@ -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

6
.cheat/git Normal file
View file

@ -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

2
.cheat/ln Normal file
View file

@ -0,0 +1,2 @@
To create a symlink:
ln -s path/to/the/target/directory name-of-symlink

8
.cheat/mysqldump Normal file
View file

@ -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

2
.cheat/netstat Normal file
View file

@ -0,0 +1,2 @@
To view which users/processes are listening to which ports:
sudo netstat -lnptu

4
.cheat/notify-send Normal file
View 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.

8
.cheat/sed Normal file
View file

@ -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/

13
.cheat/shred Normal file
View 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/sockstat Normal file
View file

@ -0,0 +1,2 @@
To view which users/processes are listening to which ports:
sudo sockstat -l

8
.cheat/split Normal file
View 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

11
.cheat/ssh Normal file
View file

@ -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

5
.cheat/ssh-copy-id Normal file
View file

@ -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

11
.cheat/ssh-keygen Normal file
View file

@ -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

5
.cheat/stdout Normal file
View 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

14
.cheat/tar Normal file
View file

@ -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
View file

@ -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.'

View file

@ -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