# A list of terminal commands/hacks for Mac OS X/BSD # For a more comprehensive list: # https://github.com/mathiasbynens/dotfiles/blob/master/.osx # # For another list # http://www.commandlinefu.com/commands/browse/sort-by-votes/ # To search commandlinefu using the API: cmdfu(){ curl "http://www.commandlinefu.com/commands/matching/$@/$(echo -n $@ | openssl base64)/plaintext"; } # # For a list of Mac OS X keyboard shortcuts: # http://support.apple.com/kb/HT1343?viewlocale=en_US&locale=en_US # # Lots of interesting stuff: # http://cb.vu/unixtoolbox.xhtml#other ##################### ### Bash ##################### # List all bash shortcuts bind -P ## Bash expansions: !$ # expands to the last argument to the previous command !* # expands to all the arguments to the previous command !! # expands to the entirety of the last command # you can mix all kinds of stuff, which makes history expansion super powerful: !-2$: # the last argument to the next-to-last command !ls:*: # all the arguments to the last command that starts with ls !!:gs/foo/bar: # the last command with all instances of foo replaced with bar # Re-run last command substituing the string 'before' with 'after' in the command ^before^after^ # Report the size of 'name' du -sh name # Quickly rename a file mv filename.{old,new} # Print only certain columns of a file: cut -f column[,column1,...] filename # Suppress command output (should be equivalent to 'noisycommand >> /dev/null' ) noisy_command >&- # Run 'command' and convert output to png command | convert label:@- ip.png # Remove every file which has not extension foo, bar or baz rm !(*.foo|*.bar|*.baz) # Get info about filesystem hierarchy man hier # Define a calculator, exmaple of call '? 1+1' yields 2 ? () { echo "$*" | bc -l; } # Copy your public key to user@machine for ssh-key-based login cat ~/.ssh/id_rsa.pub | ssh user@machine "mkdir -p ~/.ssh; chmod 0700 .ssh; cat >> ~/.ssh/authorized_keys" # Intercept stdout,err of $PID. This might require root or special configurations strace -ff -e trace=write -e write=1,2 -p PID # Pause process, send it to the background and disown it, so that it keeps running after closing the shell. ^Z $bg $disown # Repeat previous command until it exists successfully until !!; do :; done # Print every Nth line function every() { N=$1; S=1; [ "${N:0:1}" = '-' ] && N="${N:1}" || S=0; sed -n "$S~${N}p"; } # Print all available terminal colors (and codes) for code in {0..255}; do printf "\[\e[38;05;${code}m $code: Test\n" && echo -e "Code: \[\e[38;05;${code}m $code: "; done # Search for a string inside all files in the current directory grep -RnisI * ##################### ### Generic commands ##################### # Dump hex/ascii table of a binary file hexdump -C filename # List open TCP/UDP connections and commands that are using them (+c 15 flag shows 15 characters, what OS X uses) lsof +c 50 -r -i TCP -i UDP # Shut down computer in 45 minutes sudo shutdown -h +45 # Show apps that use internet connection at the moment ss -p # Get PID of processes which have 'filename' open fuser filename # KILL PID of processes which have 'filename' open fuser -k filename # Run 'long and slow terminal command' when the load is below 0.8 (schedule for a quiet time) echo "long and slow terminal command" | batch # Start command and kill it if it doesn't finish before 5 seconds timeout 5s command # Show output of COMMAND in the top right corner of the shell, updating every $SECONDS seconds # This can be used with date (shows a clock!) uptime, or others DOESN'T WORK ON OSX while true; do echo -ne "\e[s\e[0;$((COLUMNS-27))H$(COMMAND)\e[u"; sleep $SECONDS; done & # This does the same thing, but uses tput instead of escape codes while sleep 1;do tput sc;tput cup 0 $(($(tput cols)-29));date;tput rc;done & ##################### ### Mac OS X ##################### # Configuration: scutil configd # Disk: diskutil # Create a RAM disk, the size has to be specified in units of 512-byte sectors, # to have a 4 GB RAM disk, one has to use ram://8388608, which is the result of (4*(1024^3))/512 diskutil erasevolume HFS+ ‘RAM Disk’ $(hdiutil attach -nomount ram://2097152) # CPU Clock/Power info (must be called as superuser) sudo powermetrics # Speak: say "This is just a test." # Send say output to Airplay (to list available services say -a ?) say -a "AirPlay" "hello world" # Copy command output to clipboard: command_name | pbcopy # Paste command output: pbpaste # Execute applescript osascript -e osascript # Play audio files from the command line afplay fil_ename # Convert audio files from the command line afconvert # Conversion example (to core audio file, caff, from mp3) afconvert -f caff -d LEI16@22050 Bottle\ Opener.mp3 Bottle\ Opener.caf # Screensaver as background: /System/Library/Frameworks/ScreenSaver.framework/Resources/ScreenSaverEngine.app/Contents/MacOS/ScreenSaverEngine -background & # Change speed of Mission Control Animation (default is 0.24) defaults write com.apple.dock expose-animation-duration -float 0.24 # Prevent a system from sleeping for one hour caffeinate -u -t 3600 # Prevent sleep until the process has completed: caffeinate -s $PROCESS # Convert any document type to any document type textutil # Show filesystem usage by processes: sudo fs_usage # Find files created after a timestamp: touch timestamp find -x / -newer timestamp ##################### # File Conversion ##################### # Convert image size to 100x100 sips -Z 100x100 image.jpg # Convert image to type png # (WARNING: this modifies the original file and DOES NOT CHANGE EXTENSION, use --out to specify an output) sips -s format png test.jpg # Convert image to jpg and resize (better performance than sips) mogrify -filter lanczos2 -resize 50% -format jpg -quality 92 -path $output_path # Convert Audio file (to formats known by CoreAudio) afconvert track.aiff -o track.m4a -q 127 -b 160000 -f 'm4af' -d 'aac ' #(look up afplay) ## sox, the swiss army knife of audio manipulation (custom installed) man sox # Convert any type of (text) file to PDF cupsfilter file_name > output.pdf # Create a video from a list of images # -r gives the framerate, the images are numbered # the formatting is given by the classic c string formatting # Output is out.mp4 ffmpeg -r 10 -i image-06d.png -c:v libx264 -vf "fps=25,format=yuv420p" out.mp4 ##### SED #### ## The -n option below prints line numbers for the original file ## Use -i [ext] to apply substitution to $filename, ext is the ## extension of the backup file used. # Print lines between 10 and 20 of $filename sed [-n|-i [ext]] '10,20p' $filename # Print line 5 of $filename sed [-n|-i [ext]] 5p $filename # Delete line 5 of $filename sed [-n|-i [ext]] 5d $filename # Delete lines between 10 and 20 of $filename sed [-n|-i ''[ext]] '10,20d' $filename # Delete lines matching foo sed '/foo/d' # Delete 5 lines after a pattern (including the line with the pattern): sed -e '/pattern/,+5d' file.txt # Delete 5 lines after a pattern (excluding the line with the pattern): sed -e '/pattern/{n;N;N;N;N;d}' file.txt # Replace first occurrence of foo with bar sed 's|foo|bar|' sed 's/foo/bar/' sed 's-foo-bar-' # To replace all occurrences add g (global) before the end of the command: sed 's/foo/bar/g' ##################### # Random Stuff ##################### # ASCII Star Wars telnet towel.blinkenlights.nl # Zork-like game emacs -batch -l dunnet # BINARY CLOCK! watch -n 1 'echo "obase=2;`date +%s`" | bc'