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