I have marked with a * those which I think are absolutely essential Items for each section are sorted by oldest to newest. Come back soon for more! BASH * In bash, 'ctrl-r' searches your command history as you type - Add "set -o vi" in your ~/.bashrc to make use the vi keybindings instead of the Emacs ones. Takes some time to get used to, but it's fantastic! - Input from the commandline as if it were a file by replacing 'command < file.in' with 'command <<< "some input text"' - '^' is a sed-like operator to replace chars from last command 'ls docs; ^docs^web^' is equal to 'ls web'. The second argument can be empty. * '!!:n' selects the nth argument of the last command, and '!$' the last arg 'ls file1 file2 file3; cat !!:1-2' shows all files and cats only 1 and 2 - More in-line substitutions: http://tiny.cc/ecv0cw - 'nohup ./long_script &' to leave stuff in background even if you logout - 'cd -' change to the previous directory you were working on - 'ctrl-x ctrl-e' opens an editor to work with long or complex command lines * Use traps for cleaning up bash scripts on exit http://tiny.cc/traps * 'shopt -s cdspell' automatically fixes your 'cd folder' spelling mistakes PSEUDO ALIASES FOR COMMONLY USED LONG COMMANDS - function lt() { ls -ltrsa "$@" | tail; } - function psgrep() { ps axuf | grep -v grep | grep "$@" -i --color=auto; } - function fname() { find . -iname "*$@*"; } VIM - ':set spell' activates vim spellchecker. Use ']s' and '[s' to move between mistakes, 'zg' adds to the dictionary, 'z=' suggests correctly spelled words - check my .vimrc http://tiny.cc/qxzktw and here http://tiny.cc/kzzktw for more TOOLS * 'htop' instead of 'top' - 'ranger' is a nice console file manager for vi fans - Use 'apt-file' to see which package provides that file you're missing - 'dict' is a commandline dictionary - Learn to use 'find' and 'locate' to look for files - 'find . -type d -exec chmod g+x {} \;' let people in your group access folders without messing up file permissions (never do 'chmod g+x * -R'!) - Compile your own version of 'screen' from the git sources. Most versions have a slow scrolling on a vertical split or even no vertical split at all * 'trash-cli' sends files to the trash instead of deleting them forever. Be very careful with 'rm' or maybe make a wrapper to avoid deleting '*' by accident (e.g. you want to type 'rm tmp*' but type 'rm tmp *') - 'file' gives information about a file, as image dimensions or text encoding - 'awk '!x[$0]++'' to check for duplicate lines - 'echo start_backup.sh | at midnight' starts a command at the specified time - Pipe any command over 'column -t' to nicely align the columns * Google 'magic sysrq' and learn how to bring you machine back from the dead - 'diff --side-by-side fileA.txt fileB.txt | pager' to see a nice diff * 'j.py' http://tiny.cc/62qjow remembers your most used folders and is an incredible substitute to browse directories by name instead of 'cd' - 'dropbox_uploader.sh' http://tiny.cc/o2qjow is a fantastic solution to upload by commandline via Dropbox's API if you can't use the official client - learn to use 'pushd' to save time navigating folders (j.py is better though) - if you liked the 'psgrep' alias, check 'pgrep' as it is far more powerful NETWORKING - SMB is better than NFS for most cases. 'sshfs_mount' is not really stable, any network failure will be troublesome - 'python -m SimpleHTTPServer 8080' shares all the files in the current folder over HTTP, port 8080 - 'ssh -R 12345:localhost:22 server.com "sleep 1000; exit"' forwards server.com's port 12345 to your local ssh port, even if you machine is not externally visible on the net. Now you can 'ssh localhost -p 12345' from server.com and you will log into your machine. 'sleep' avoids getting kicked out from server.com for inactivity * Read on 'ssh-keygen' to avoid typing passwords every time you ssh - 'socat TCP4-LISTEN:1234,fork TCP4:192.168.1.1:22' forwards your port 1234 to another machine's port 22. Very useful for quick NAT redirection. * Configure postfix to use your personal Gmail account as SMTP: http://tiny.cc/n5k0cw. Now you can send emails from the command line. 'echo "Hello, User!" | mail user@domain.com' - Some tools to monitor network connections and bandwith: 'lsof -i' monitors network connections in real time 'iftop' shows bandwith usage per *connection* 'nethogs' shows the bandwith usage per *process* * Use this trick on .ssh/config to directly access 'host2' which is on a private network, and must be accessed by ssh-ing into 'host1' first Host host2 ProxyCommand ssh -T host1 'nc %h %p' HostName host2 * Pipe a compressed file over ssh to avoid creating large temporary .tgz files 'tar cz folder/ | ssh server "tar xz"' -~- (CC) by-nc, Carles Fenollosa Retrieved from http://mmb.pcb.ub.es/~carlesfe/unix/tricks.txt Last modified: jue 07 mar 2013 04:21:12 CET