This page contains Bash cmd info in general, and specific binary tool command in Mac and Linux. ====== Bash profile ====== user profile located at : ~/.bash_profile edit user profile environment variable in the bash profile: * display: echo $PATH * display with escape echo \$PATH * display raw text: echo '$PATH' * display with variable: echo "Path is $PATH" * display block of text: echo << EOF Block of text here Text for $PATH EOF * display block of raw text: echo << "EOF" Block of text here Text Again but no $PATH EOF * ref: http://en.wikipedia.org/wiki/Here_document * session based variable set:path=/myPath:$PATH * permanently change to path in profile file:export PATH=/myPath:$PATH Note: by adding your_Path_To_3rd_Party_Binary to the $PATH variable, you can directly call them in terminal. **My linux bash profile code** # User specific aliases and functions alias fx='cd ~/App/firefox;./firefox' # refresh fx installation alias fxnew='cd ~/App;rm -r firefox;tar xjvf firefox-91.9.1esr.tar.bz2' ====== Bash tips ====== * find path to a command file which ls * escape by "\" * create a txt file echo "hello" > text.txt * create a empty file or update a file touch empty.txt * append to a txt file echo "127.0.0.1\thome" >> /etc/hosts * create a symbolic link ln -s ~/real_dir ~/Desktop/alias_name * make folder accessible to all sudo chmod 777 /your_folder_name * batch file rename for i in *.JPG ; do mv $i ${i/-[0-9.]*.JPG/.JPG} ; done * Vi text editor vi # cmd mode # i : enter text edit mode # dd: delete line # x : delete a char # w : write file wq: save & quit # q : quite q!: quit without save # edit mode # esc: back to cmd mode # ':':enter cmd mode ^ shortcut ^^ | ctrl + z | suspend | | ctrl + a | goto cmd line start | | ctrl + e | goto cmd line end | Full bash terminal shortcuts: http://www.shell-tips.com/2006/10/29/working-quickly-with-some-usefull-bash-shortcuts/ ^ quick list ^^ | man | manual, q:quit man; space: next | | ls | ls -la: long list directory; ls -sh: list size human read | | cp | cp -R: recursive copy directory | | mv | move file | | rm | rm -R: recursive delete directory | | mkdir | make directory | | source | source a shell script file | | %%|%% | pipe prev cmd to next cmd | | cmd& | run cmd background | | clear | clear screen | ====== bash - computer management: user, admin, network ====== # check users: w, who, users # #<-----------------------------------> # ifconfig wifi(){ #os x version ifconfig en1 | grep 'inet ' | cut -d ' ' -f 2 # linux version # ifconfig en1 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}' } #<----------------------------------> # kill # kill by name alias kbn=ka; ka(){ for X in `ps acx | grep -i $1 | awk {'print $1'}`; do kill $X; done } alias ki='ka itunes' ====== bash - file operation ====== #<----------------------------------> # ls lss(){ ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/ /' -e 's/-/|/' } lsss(){ ls -trR } # ls -file tools # ref: http://www.thegeekstuff.com/2009/07/linux-ls-command-examples/ alias a='ls' alias aa='ls -AF' alias aaa='ls -lF' alias ll='ls -lF' alias lt='ls -ltF' # by time alias lt.='ls -ltrF' # by time reverse alias lsB='ls -S' alias lsS='ls -Sr' alias lh='ls -lhF' alias l='ls' alias ld='ls -d */' alias 1='ls -1F' # find and remove all # sudo find * -type d -name .svn -exec rm -rf {} \; # #<--------check md5--------------------------> md5(){ openssl md5 "$1" # tip: quote $1 } # print directory structure graph(){ set `pwd` set `basename $1` ls -FR>~/Desktop/$1.txt } # clean ._mac file #find . -name ._* -exec rm '{}' # advanced sys function uflat(){ find . -not -type d -print0 | xargs -0J % mv -f % . find . -type d -depth 1 -print0 | xargs -0 rm -rf } # replace text; usage: urep \[array of file] [find] [replace] urep(){ for i in $1; do j=`echo $i | sed 's/$2/$3/g'`; mv "$i" "$j"; done #for i in *.txt; do j=`echo $i | sed 's/2010/2011/g'`; mv "$i" "$j"; done } urep2(){ rename 's/$2/$3/' $1 } # rename prefix; usage: upre/upost \[array of file] [pre/post] upre(){ for i in $1; do mv "$i" $2."$i"; done } upost(){ for i in $1; do mv "$i" "$i".$2; done } # switch ext; usage: uext \[array of file] [old ext] [new ext] uext(){ for i in $1; do mv "$i" "${i/.$2}".$3; done } uext2(){ for i in $1; do mv "$i" "`basename $i .$2`".$3; done } uext3(){ rename 's/\.$2/\.$3/' $1 } # rename case switch; usage: ucase \[array of file] ucaseUnix(){ rename 'y/A-Z/a-z/' $1 } # clean space in name; usage: uclean \[array of file] ucleanUnix(){ rename 's/ //' $1 } # working (test) # add date to pre/post; usage: udate \[array of file] [pre/post] [ext] udate(){ if [ $2 ] && [ $3 ]; then if [ $2 == "e" ] || [ $2 == "b" ] || [ $2 == "p" ] || [ $2 == "post" ]; then for i in $1 do mv "$i" "${i/.$3}".`date '+%Y-%m-%d'`.$3 done fi else for i in $1; do mv "$i" `date '+%Y-%m-%d'`."$i";done fi } Get running script directory #!/bin/bash echo "The script you are running has basename `basename $0`, dirname `dirname $0`" echo "The present working directory is `pwd`" * get file list find *.jpg #find all jpg in fold * rename find list for i in `find *v10*.jpg`; do j=`echo $i | sed 's/v10/v010/g'`; mv "$i" "$j"; done # for each file, generate new name, replace old name with new name ====== bash - utility ====== ===== grep ===== * get lines contains word A grep wordA sample.txt * ignore case grep -i wordA sample.txt * match exact word grep -w wordA sample.txt * inverse selection, lines without word A grep -v wordA sample.txt * count grep -c wordA sample.txt * line number grep -n wordA sample.txt * list file grep -l wordA *.txt * Pattern * ^wordA: line starts with wordA * wordA$: line ends with wordA * ^$: blank line * [set]: match one from set [0-9][A-Za-z] [abc] [x-z] * [:class:]: match one from class [:alnum:] [:alpha:] [:blank:] [:digit:] [:lower:] [:upper:] [:space:] * escape: \ * .: any char * \< \>: begin/end of word * wordA|wordB: wordA or wordB * {n}: how many times appera in line {min,max} * ?: at most once * *: none to unlimited * +: at least once * ^: inverse range; begin of line ref:http://www.cyberciti.biz/faq/howto-use-grep-command-in-linux-unix/ ===== sed ===== line editor sed '/range/s/find/replace/g' output # same with _ sed '/range/ s_find_replace_g' output #line range ^start, $end sed '1,100 s/find/replace/' remove all comments in bash script sed '/start/,/stop/ s/#.*//' ref: http://www.grymoire.com/Unix/Sed.html#uh-0 ===== awk ===== awk is a words grabber, like grep for lines grabber ref: http://www.grymoire.com/Unix/Awk.html ===== Vi ===== # vi # --- change current line to lower case # :s/.*/\L&/ # -- set file ending with DOS or Unix # :set ff=dos or :set ff=unix # -- mass converting dos<->unix # vim +"argdo set ff=" +wqa ====== Mac specific binary tool ====== An A-Z Index of the Mac OS X command line : http://ss64.com/osx/ enable root on mac : http://support.apple.com/kb/HT1528 * osascript osascript theScript.scpt * open : open cmd opens every thing, like "start" in DOS ===== mac specific cmd - disk related operation ===== * mount smb share folder (Windows,Linux,Mac share folder by SMB) if [ ! -d /Volumes/me ]; then mkdir /Volumes/me; mount_smbfs //username@PCNAME/shareFolderName /Volumes/me; fi * Dmg file creation and convertion # make an DMG image name $2 from folder called $1 dmgF(){ echo "CMD: hdiutil create -srcdir \"$1\" $2.dmg" hdiutil create -srcdir "$1" "$2.dmg" } # make an ISO image named as $2 from folder called $1 isoF(){ hdiutil makehybrid -iso -o "$2.iso" "$1" } # burn DMG file $1 burn(){ hdiutil burn $1 } # create a DMG file with size $1 MB named as $2 dmg(){ hdiutil create -size $1m $2.dmg -fs HFS+ -volname $2 } # convert DMG file of $1 to an ISO image file dmg2iso(){ hdiutil convert $1.dmg -format UDTO -o $1.iso } * other disk related cmds ################################ # force reject disk #drutil tray open #drutil eject #<----------------------------------> vo(){ cd /Volumes/"$1";. } #<----------------------------------> # dd function for disk dump # # dd back cd # dd if=/dev/disk1 of=myDVDcopy.img bs=2048 # dd if=/dev/disk1 of=dvd.iso # dd backup disk # dd bs=512 if=/dev/rXX# of=/some_dir/foo.dmg conv=noerror,sync # dd bs=512 if=/dev/rdisk2s3 conv=noerror,sync | gzip -9 > foo.dmg.gz # file rescue # dd bs=512 if=/Volumes/HD1/badfile.mpg of=/Volumes/HD2/newrecoveredfile.txt conv=noerror,sync # back and split # dd if=/dev/hda# | gzip -9 | split -b 4096m /dev/sda#/somedir/macosx # cat # cat /dev/sda#/somedir/macosx* | gzip -d | dd of=/dev/hda# # list disk and device # disktool -l # df -k # diskutil list #<----------------------------------> # disktool eject2 () { /usr/sbin/disktool -e $(df | grep $1 | awk '{print $1}' | sed 's/\/dev\///') } eject(){ eject2 /Volumes/$1 } #<----------------------------------> # tar #create tar #tar -czvf MyArchive Source_file #tar --create --gzip --verbose --file=MyArchive Source_file #extract tar #tar -xzvf MyArchive Source_file #tar --extract --gunzip --verbose --file=MyArchive Source_file #tar xjvf filename.tar.bz2 #tar -pvczf BackUpDirectory.tar.gz /path/to/directory #tar --exclude=".*" -pvczf BackUpDirectory.tar.gz /path/to/directory #tar -xvzf filename.tar.gz -C /desired/path tarp(){ tar -xvzf $1 -C $2 } tard(){ tar czvf $1.$(date +%Y%m%d-%H%M%S).tgz $1 exit $? } #tar -czvf my_backup.$(date +%Y%m%d-%H%M%S).tgz source_file # unrar x test.part1.rar ===== mac specific bash cmd - others===== # convert to pdf alias pdf2="/System/Library/Printers/Libraries/convert" pdf(){ pdf2 -f "$1" -o "$1.pdf"; } #<----------------------------------> # man function wman() { url="man -w ${1} | sed 's#.*\(${1}.\)\([[:digit:]]\).*\$#http://developer.apple.com/documentation/Darwin/Reference/ManPages/man\2/\1\2.html#'" open `eval $url` } xman() { url="http://bashcurescancer.com/man/cmd/" open $url$1 } ====== Linux specific binary tool ====== * convert * convert image sequence into gifconvert -delay 50 -loop 1 render.*.jpg animation.gif * convert big image into small tile parts convert -crop 64x64 +repage big.tif small_%02d.tif * convert several images into one big image horizontally or vertically \\ convert +append 1.jpg 2.jpg out.jpg # horizontally convert -append 1.jpg 2.jpg out.jpg # vertically * zip \\ zip a folder into a zip file zip -9 -r myZipFile.zip myFileOrFolderName * xwininfo \\ get window info * sha1sum \\ get sha1 sum of a file like md5 * 7zip \\ 7z file opener # install or http://p7zip.sourceforge.net/ sudo apt-get install p7zip # extract p7zip e example.7z # more ref: http://www.dotnetperls.com/7-zip-examples ====== Other 3rd Party tool ====== * lame - convert aiff to mp3 lame --r3mix -q0 --id3v2-only --tt \"[title]\" --ta \"[artist]\" \"123.aiff\" \"123.mp3\" * ffmpeg - convert image & video formats ([[http://ffmpeg.org/ffmpeg.html|ref]]) // convert image seq into avi ffmpeg -f image2 -i seq.%04d.jpg -r 30 -s 640x480 -vcodec mpeg4 test.avi // -f: format; -i: input, %04d means 0001 like pattern; -r: framerate; -b:v video bitrate; -fs: file size limite; -s resolution; -vcodec: encode format // get info ffmpeg -i video.avi // img seq to video ffmpeg -f image2 -i image.%04d.jpg video.mpg // ref: https://ffmpeg.org/trac/ffmpeg/wiki/UbuntuCompilationGuide ffmpeg -r 8 -i frame.%04d.jpeg -vcodec libx264 -vpre medium -crf 24 -threads 0 -s 640x480 output.mp4 // video to img seq ffmpeg -i video.mpg image.%04d.jpg // video to iphone mp4 or psp ffmpeg -i source_video.avi -acodec aac -ab 128kb -vcodec mpeg4 -b 1200kb -mbd 2 -flags +4mv+trell -aic 2 -cmp 2 -subcmp 2 -s 320x180 -title X final_video.mp4 ffmpeg -i source_video.avi -b 300 -s 320x240 -vcodec xvid -ab 32 -ar 24000 -acodec aac final_video.mp4 // save sound ffmpeg -i source_video.avi -vn -ar 44100 -ac 2 -ab 192 -f mp3 sound.mp3 // wav to mp3 ffmpeg -i son_origine.avi -vn -ar 44100 -ac 2 -ab 192 -f mp3 son_final.mp3 // mpg to avi, avi to mpg ffmpeg -i video_origine.avi video_finale.mpg ffmpeg -i video_origine.mpg video_finale.avi // video to gif ffmpeg -i video_origine.avi gif_anime.gif // add souble ffmpeg -i son.wav -i video_origine.avi video_finale.mpg // video to flv ffmpeg -i video_origine.avi -ab 56 -ar 44100 -b 200 -r 15 -s 320x240 -f flv video_finale.flv // video to dvd ffmpeg -i source_video.avi -target pal-dvd -ps 2000000000 -aspect 16:9 finale_video.mpeg // ogm to mpg ffmpeg -i film_sortie_cinelerra.ogm -s 720x576 -vcodec mpeg2video -acodec mp3 film.mpg