2 # my weird function file
3 # lots of this coming from http://www.kfirlavi.com/blog/2012/11/14/defensive-bash-programming
6 # return the service on port
11 my_mount_set_of_partition
(){
12 # Mount set of partitions for recovery.
14 mkdir
/media
/sdd
$i && mount
-o ro
/{dev
,media
}/sdd
$i ||
rmdir /media
/sdd
$i ;
18 my_copy_file_to_clipboard
() {
20 [ -f $file ] && xclip
-sel clip
< $filecontent
26 usage: $PROGNAME options
28 Program deletes files from filesystems to release space.
29 It gets config file that define fileystem paths to work on, and whitelist rules to
33 -c --config configuration file containing the rules. use --help-config to see the syntax.
34 -n --pretend do not really delete, just how what you are going to do.
35 -t --test run unit test to check the program
36 -v --verbose Verbose. You can specify more then one -v to have more verbose
38 -h --help show this help
39 --help-config configuration help
47 $PROGNAME --test test_string.sh
50 $PROGNAME --config /path/to/config/$PROGNAME.conf
52 Just show what you are going to do:
53 $PROGNAME -vn -c /path/to/config/$PROGNAME.conf
58 my_change_owner_of_files
() {
71 my_template_function
() {
73 local PROGNAME
=$
(basename $0)
74 local PROGDIR
=$
(readlink
-m $
(dirname $0))
79 #readonly local second_arg=$2;
81 # if no args, print usage
82 is_empty_string
$ARGS && my_usage
93 local env
=$HOME"/envs/"$dir"/source/"
94 #if source dir not exists, create & cd
95 [ -d $env ] && cd $env || mkdircd
-p $env
97 source $HOME"/envs/"$dir"/bin/activate"
100 # Taken from http://aaroncrane.co.uk/2009/03/git_branch_prompt/
103 until [ "$dir" -ef / ]; do
104 if [ -f "$dir/.git/HEAD" ]; then
105 GIT_REPO
=`readlink -e $dir`/
115 head=$
(< "$1/.git/HEAD")
116 if [[ $head == ref
:\ refs
/heads
/* ]]; then
117 GIT_BRANCH
=${head#*/*/}
118 elif [[ $head != '' ]]; then
119 GIT_BRANCH
='(detached)'
121 GIT_BRANCH
='(unknown)'
125 # Taken from https://github.com/jimeh/git-aware-prompt
127 local status
=$
(git status
--porcelain 2> /dev
/null
)
128 if [[ "$status" != "" ]]; then
136 if [ -e "$1/.git/refs/stash" ]; then
143 cdls
() { cd "$@" && clear && ls; }
160 mkdir
-p "$@" && eval cd "\"\$$#\"";
164 local serverdir
="${TMPDIR:-/tmp}/emacs${UID}"
166 for file in ${serverdir}/*; do
167 if [[ -S ${file} ]]; then
168 servers
+=("${file##*/}")
192 printf '%s ' "$result";
199 echo "[$(date + '%Y-%m-%dT%H:%M:%S%z')]: $@ >&2"
208 my_err
"unable to my_test"
209 exit "${E_DID_NOTHING}"
213 my_pretty_print_json
() {
217 my_not_start_service_on_boot
(){
218 # service to not start on boot
220 update-rc.d
$service disable
;
223 my_install_new_font
(){
230 sudo ip link
set eth0 up
;
231 # ask for an ip via dhcp
235 #function to show the current branch
236 my_show_current_branch
(){
237 git rev-parse
--abbrev-ref HEAD
243 echo $
(pdftk
$filename dump_data \
244 |
grep -i numberofpages \
250 echo $
(pdftk
$filename burst
);
254 for i
in $
(ls |
grep .pdf$
); do
259 # function to show one line of file
261 local line_number
=$1;
265 echo $
(sed -n $line_number$p $filename);
268 # function to extract in one command
272 if is_file
$filename ; then
274 *.
tar.xz
) tar xvfJ
$filename ;;
275 *.xz
) tar xf
$filename ;;
276 *.
tar.bz2
) tar xvjf
$filename ;;
277 *.
tar.gz
) tar xvzf
$filename ;;
278 *.bz2
) bunzip2
$filename ;;
279 *.rar
) unrar x
$filename ;;
280 *.gz
) gunzip
$filename ;;
281 *.
tar) tar xvf
$filename ;;
282 *.tbz2
) tar xvjf
$filename ;;
283 *.tgz
) tar xvzf
$filename ;;
284 *.
zip) unzip $filename ;;
285 *.Z
) uncompress $filename ;;
286 *.7z
) 7z x
$filename ;;
287 *) echo "'$filename' cannot be extracted via extract" ;;
290 echo "'$filename' is not a valid file"
294 # function to list the content of an archive
295 my_list_archive_content
() {
298 if is_file
$filename ; then
300 *.
tar.xz
) tar tvfJ
$filename ;;
301 *.
tar.bz2
) tar tvjf
$filename ;;
302 *.
tar.gz
) tar tzvf
$filename ;;
303 *.bz2
) bunzip2
$filename ;;
304 *.gz
) gunzip
-l $filename ;;
305 *.
tar) tar tvf
$filename ;;
306 *.tbz2
) tar tvjf
$filename ;;
307 *.tgz
) tar tvzf
$filename ;;
308 *.
zip) unzip -l $filename ;;
309 *.Z
) uncompress -l $filename ;;
310 *.7z
) 7z l
$filename ;;
311 *) echo "content of '$filename' cannot be listed :(" ;;
314 echo "'$filename' is not a valid file"
318 # dump a mysql database
322 echo "dumping database '$database' ..."
323 mysqldump
-u patrick
-ppatrick $database > $databse_dump_$
(date +%m
%d
%Y
).sql
327 my_dump_mysql_table
() {
331 echo "dumping table '$table' from database '$database' ..."
332 mysqldump
-u patrick
-ppatrick $database $table > $table_dump_$
(date +%m
%d
%Y
).sql
341 echo "upload of '$filename' to '$ftp_url' by '$user' ..."
342 #curl -T $filename ftp://dev.africafilms.tv/movies/ --user dev.africafilms.tv:dev/aftv/DAK2602
343 curl
-T $filename $ftp_url --user $user:$password
347 local string_to_find
=$1;
350 echo "recursive looking for the string '$string' inside '$directory' directory"
351 grep -l -R -i -r $string_to_find $directory;
355 local string_to_find
=$1;
358 echo "recursive looking for the string '$string' inside '$directory' directory"
359 find $directory |
xargs grep $string -sl;
362 # extract md5 hash from a string
366 echo "md5 hash of '$string' is: "
367 echo -n "$string" |
md5sum;
370 # Creates an archive (*.tar.gz) from given directory.
374 tar cvzf
"${directory%%/}.tar.gz" "${directory%%/}/";
377 # Create a ZIP archive of a file or folder.
381 zip -r "${file%%/}.zip" "$file";
384 # Make your directories and files access rights sane.
385 my_sanitize
() { chmod -R u
=rwX
,g
=rX
,o
= "$@" ;}
387 # Get IP adress on ethernet.
389 local my_ip
=$
( /sbin
/ifconfig eth0 \
390 |
awk '/inet/ { print $2 } ' \
392 local my_gtw
="gtw: "$
(netstat
-nr |
awk '{print $2}' |
sed -n 3p
);
393 echo ${my_ip:-"Not connected"}
394 echo ${my_gtw:-"Not connected"}
397 # Get current host related info.
399 echo -e "\nYou are logged on ${BRed}$HOST"
400 echo -e "\n${BRed}Local IP Address :$NC" ; my_ip
401 echo -e "\n${BRed}Current date :$NC " ; date; calendar |
head -1
402 echo -e "\n${BRed}Additionnal information:$NC " ; uname
-a
403 echo -e "\n${BRed}Users logged on:$NC " ; \
408 echo -e "\n${BRed}Machine stats :$NC " ; uptime
409 echo -e "\n${BRed}Memory stats :$NC " ; free
-h
410 echo -e "\n${BRed}Diskspace :$NC " ; mydf
/ $HOME
411 echo -e "\n${BRed}Open connections :$NC "; netstat
-pan --inet;
415 # Pretty-print of 'df' output. Inspired by 'dfc' utility.
423 echo -e $fs" :No such file or directory" ; continue
426 local info
=( $
(command df
-P $fs |
awk 'END{ print $2,$3,$5 }') )
427 local free
=( $
(command df
-Pkh $fs |
awk 'END{ print $4 }') )
428 local nbstars
=$
(( 20 * ${info[1]} / ${info[0]} ))
430 for ((j
=0;j
<20;j
++)); do
431 if [ ${j} -lt ${nbstars} ]; then
437 out
=${info[2]}" "$out"] ("$free" free on "$fs")"
443 # debootstrap --verbose \
444 # --variant=minbase \
445 # --arch=i386 --include ifupdown,locales,libui-dialog-perl,dialog,dhcp3-client,netbase,net-tools,iproute,openssh-server \
446 # sid /var/lib/lxc/sid http://ftp.debian.org/debian
452 local rememberfile
="$HOME/.remember"
453 # if the file not exists, touch it
454 [[ ! -f $rememberfile ]] && touch $rememberfile
455 if [ $# -eq 0 ] ; then
456 echo "Type what you want to remember then, hit ^D: "
457 cat - >> $rememberfile;
459 #echo $(date +%m%d%Y)" -- $@" >> $rememberfile
460 echo $
(date +%F
)" -- $@" >> $rememberfile
465 local rememberfile
="$HOME/.remember"
467 #is_not_file $remberfile && echo 'nothing to do' ||
468 #is_empty $rememberfile && echo 'nothing to do' ||
470 is_not_file
$rememberfile ||
[[ $
(cat $rememberfile |
wc -l) = 0 ]] && echo "nothing to do" || my_display_todo
"$@";
475 local rememberfile
="$HOME/.remember"
477 #[[ $# -eq 0 ]] && more $rememberfile || grep -i "$@" $rememberfile | more;
478 [[ $# -eq 0 ]] && is_file
$rememberfile && is_not_empty_file
$rememberfile && cat $rememberfile ||
grep -i "$@" $rememberfile;
483 #lsbytesum - sum the number of bytes in a directory listing
485 for Bytes
in $
(ls -l |
grep "^-" |
awk '{ print $5 }')
487 let TotalBytes
=$TotalBytes+$Bytes
489 TotalMeg
=$
(echo -e "scale=3 \n$TotalBytes/1048576 \nquit" |
bc)
496 declare -a $listname;
501 sensonet_create_event
() {
502 curl
-i -X "POST" -k -H "Content-Type: application/x-www-form-urlencoded; charset=UTF-8" -H "Accept: application/json" -d "name=$1" http
://projects.emerginov.orange.sn
/sensonet
/resources
/events
/"$2"
505 sensonet_update_event
() {
506 curl
-i -X "PUT" -k -H "Content-Type: application/x-www-form-urlencoded; charset=UTF-8" -H "Accept: application/json" -d "name=$1" http
://projects.emerginov.orange.sn
/sensonet
/resources
/events
/"$2"
510 [[ $# -eq 0 ]] && curl
-i -X "GET" -k -H "Accept: application/json" http
://projects.emerginov.orange.sn
/sensonet
/resources
/events
/ || \
511 curl
-i -X "GET" -k -H "Accept: application/json" http
://projects.emerginov.orange.sn
/sensonet
/resources
/events
/"$1"
514 sensonet_del_event
() {
515 curl
-i -X "DELETE" -k -H "Accept: application/json" http
://projects.emerginov.orange.sn
/sensonet
/resources
/events
/"$1"
518 sensonet_create_sensor
() {
519 curl
-i -X "POST" -k -H "Content-Type: application/x-www-form-urlencoded; charset=UTF-8" -H "Accept: application/json" -d "description=$1" http
://projects.emerginov.orange.sn
/sensonet
/resources
/sensors
/"$2"
522 sensonet_update_sensor
() {
523 curl
-i -X "PUT" -k -H "Content-Type: application/x-www-form-urlencoded; charset=UTF-8" -H "Accept: application/json" -d "description=$1" http
://projects.emerginov.orange.sn
/sensonet
/resources
/sensors
/"$2"
526 sensonet_del_sensor
() {
527 curl
-i -X "DELETE" -k -H "Accept: application/json" http
://projects.emerginov.orange.sn
/sensonet
/resources
/sensors
/"$1"
531 [[ $# -eq 0 ]] && curl
-i -X "GET" -k -H "Accept: application/json" http
://projects.emerginov.orange.sn
/sensonet
/resources
/sensors
/ || \
532 curl
-i -X "GET" -k -H "Accept: application/json" http
://projects.emerginov.orange.sn
/sensonet
/resources
/sensors
/"$1"
535 sensonet_create_network
(){
536 curl
-i -X "POST" -k -H "Content-Type: application/x-www-form-urlencoded" -H "Accept: application/json" -d "name=$1" http
://projects.emerginov.orange.sn
/sensonet
/resources
/networks
/"$2"
539 sensonet_update_network
(){
540 curl
-i -X "PUT" -k -H "Content-Type: application/x-www-form-urlencoded" -H "Accept: application/json" -d "name=$1" http
://projects.emerginov.orange.sn
/sensonet
/resources
/networks
/"$2"
543 sensonet_del_network
(){
544 curl
-i -X "DELETE" -k -H "Accept: application/json" http
://projects.emerginov.orange.sn
/sensonet
/resources
/networks
/"$1"
548 [[ $# -eq 0 ]] && curl
-i -X "GET" -k -H "Accept: application/json" http
://projects.emerginov.orange.sn
/sensonet
/resources
/networks
/ || \
549 curl
-i -X "GET" -k -H "Accept: application/json" http
://projects.emerginov.orange.sn
/sensonet
/resources
/networks
/"$1"
552 sensonet_network_probes
() {
553 curl
-i -X "GET" -k -H "Accept: application/json" http
://projects.emerginov.orange.sn
/sensonet
/resources
/networks
/"$1"/probes
556 sensonet_create_probe
() {
557 curl
-i -X "POST" -k -H "Content-Type: application/x-www-form-urlencoded" -H "Accept: application/json" \
558 -d "name=${1}&latitude=0.0&longitude=0.0&monitorMe=1&sleepingTime=0&networkId=univlab" http
://projects.emerginov.orange.sn
/sensonet
/resources
/probes
/%2B221
"${2}"
561 sensonet_update_probe
() {
562 curl
-i -X "PUT" -k -H "Content-Type: application/x-www-form-urlencoded" -H "Accept: application/json" \
563 -d "name=${1}&latitude=48.0&longitude=-1.0&monitorMe=1&sleepingTime=0" http
://projects.emerginov.orange.sn
/sensonet
/resources
/probes
/%2B221
"${2}"
567 [[ $# -eq 0 ]] && curl
-i -X "GET" -k -H "Accept: application/json" http
://projects.emerginov.orange.sn
/sensonet
/resources
/probes
/ || \
568 curl
-i -X "GET" -k -H "Accept: application/json" http
://projects.emerginov.orange.sn
/sensonet
/resources
/probes
/%2B221
"${1}"
571 sensonet_del_probe
() {
572 curl
-i -X "DELETE" -k -H -H "Accept: application/json" http
://projects.emerginov.orange.sn
/sensonet
/resources
/probes
/%2B221
"${2}"
575 sensonet_probe_neighborhood
(){
576 curl
-i -X "GET" -k -H "Accept: application/json" http
://projects.emerginov.orange.sn
/sensonet
/resources
/probes
/%2B221
"${1}"/neighborhood
579 sensonet_probe_set_sleeping_time
(){
580 curl
-i -X "POST" -k -H "Content-Type: application/x-www-form-urlencoded" -H "Accept: application/json" -d "duration=${2}" http
://projects.emerginov.orange.sn
/sensonet
/resources
/probes
/%2B221
"${1}"/sleepingtime
583 sensonet_probe_sensors
(){
584 [[ $# -eq 1 ]] && curl
-i -X "GET" -k -H "Accept: application/json" http
://projects.emerginov.orange.sn
/sensonet
/resources
/probes
/%2B221
"${1}"/sensors || \
585 curl
-i -X "GET" -k -H "Accept: application/json" http
://projects.emerginov.orange.sn
/sensonet
/resources
/probes
/%2B221
"${1}"/sensors
/"${2}"
588 sensonet_probe_sensor_values
(){
589 curl
-i -X "GET" -k -H "Accept: application/json" http
://projects.emerginov.orange.sn
/sensonet
/resources
/probes
/%2B221
"${1}"/sensors
/"${2}"/values
593 # Show top 10 history command on screen
595 history |
awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' |
sort -rn |
head
598 # Wrapper for host and ping command
599 # Accept http:// or https:// or ftps:// names for domain and hostnames
600 _getdomainnameonly
(){
603 # remove protocol part of hostname
610 # remove username and/or username:password part of hostname
613 # remove all /foo/xyz.html*
615 # show domain name only
621 local array
=( $@
) # get all args in an array
622 local len
=${#array[@]} # find the length of an array
623 local host=${array[$len-1]} # get the last arg
624 local args
=${array[@]:0:$len-1} # get all args before the last arg in $@ in an array
625 local _ping
="/bin/ping"
626 local c
=$
(_getdomainnameonly
"$host")
627 [ "$t" != "$c" ] && echo "Sending ICMP ECHO_REQUEST to \"$c\"..."
634 local len
=${#array[@]}
635 local host=${array[$len-1]}
636 local args
=${array[@]:0:$len-1}
637 local _host
="/usr/bin/host"
638 local c
=$
(_getdomainnameonly
"$host")
639 [ "$t" != "$c" ] && echo "Performing DNS lookups for \"$c\"..."