Skip to content

Instantly share code, notes, and snippets.

@dmackerman
Last active December 14, 2015 16:39
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dmackerman/5117156 to your computer and use it in GitHub Desktop.
Save dmackerman/5117156 to your computer and use it in GitHub Desktop.
UNIX Tips & Tricks

SOURCE: http://mmb.pcb.ub.es/~carlesfe/unix/tricks.txt (I`ve just formatted it for easy reading)

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
  • 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 http://tiny.cc/8zbltw
  • 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
  • Add set editing-mode vi in your ~/.inputrc to use the vi keybindings for bash and all readline-enabled applications (python, mysql, etc)

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
  • 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
  • sort | uniq 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 Dropboxs API if you cant 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
  • never run chmod o+x * -R, capitalize the X to avoid executable files. If you want only executable folders: find . -type d -exec chmod g+x {} \;
  • xargs gets its input from a pipe and runs some command for each argument
  • run jobs in parallel easily: ls *.png | parallel -j4 convert {} {.}.jpg

NETWORKING

  • Dont know where to start? SMB is usually 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.coms port 12345 to your local ssh port, even if you machine is not externally visible on the net. Now you can ssh localhost -p 12345from 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" or even better, use rsync

(CC) by-nc, Carles Fenollosa carles.fenollosa@bsc.es Retrieved from http://mmb.pcb.ub.es/~carlesfe/unix/tricks.txt Last modified: vie 08 mar 2013 10:52:46 CET

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment