This is an old revision of the document!
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
- 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.
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' <input >output # same with _ sed '/range/ s_find_replace_g' <input >output #line range ^start, $end sed '1,100 s/find/replace/'
remove all comments in bash script
sed '/start/,/stop/ s/#.*//'
awk
awk is a words grabber, like grep for lines grabber
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=<format>" +wqa <files>
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 gif
convert -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 filezip -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 (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