рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧреЛрдВ рдиреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛ рдерд╛, FreeBSD рдпрд╛ apt-get install рдореЗрдВ рд░рдирд┐рдВрдЧ рдореЗрдХ && рдореЗрдХ рдЗрдирд╕реНрдЯреЙрд▓, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдбреЗрдмрд┐рдпрди рдореЗрдВ, рдРрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдбрд╛рдпрд▓реЙрдЧреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХрд┐рддрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рд╡реЗ рдЕрдиреБрдЪрд┐рдд рд░реВрдк рд╕реЗ рднреВрд▓ рдЧрдП рд╣реИрдВ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд▓рдЧрднрдЧ рдХрднреА рднреА рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдмрд╣реБрдд, рдмрд╣реБрдд рд╡реНрдпрд░реНрдеред
рдЕрджреНрднреБрдд рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╕рдВрд╡рд╛рдж рдЗрд╕реЗ рдареАрдХ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдпрд╣ FreeBSD рдореЗрдВ рд╕рд╛рддрд╡реАрдВ рдФрд░ рдЖрдард╡реАрдВ рд╢рд╛рдЦрд╛рдУрдВ рдореЗрдВ рдореМрдЬреВрдж рд╣реИ, рдФрд░ рдбреЗрдмрд┐рдпрди рдореЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк apt-get install рдбрд╛рдпрд▓реЙрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпреЗ рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░реНрдпрдХреНрд░рдо рд╣реИрдВред
FreeBSD рдХрд╛ рдереЛрдбрд╝рд╛ рд╕рд░рд▓ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ:
$ dialog
dialog version 0.3, by Savio Lam (lam836@cs.cuhk.hk).
patched to version 0.4 by Stuart Herbert (S.Herbert@shef.ac.uk)
Changes Copyright (C) 1995 by Andrey A. Chernov, Moscow, Russia
patched by Anatoly A. Orehovsky (tolik@mpeks.tomsk.su)
* Display dialog boxes from shell scripts *
Usage: dialog --clear
dialog --create-rc <file>
dialog [--title <title>] [--clear] [--hline <line>] [--hfile <file>]\
<Box options>
Box options:
--yesno <text> <height> <width> [yes|no]
--msgbox <text> <height> <width>
--prgbox "<command line>" <height> <width>
--infobox <text> <height> <width>
--inputbox <text> <height> <width> [<init string>]
--textbox <file> <height> <width>
--menu <text> <height> <width> <menu height> <tag1> <item1>...
--checklist <text> <height> <width> <list height> <tag1> <item1> <status1>...
--radiolist <text> <height> <width> <list height> <tag1> <item1> <status1>...
--ftree <file> <FS> <text> <height> <width> <menu height>
--tree <FS> <text> <height> <width> <menu height> <item1>...
рд▓рд┐рдирдХреНрд╕ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ:
$ dialog
cdialog (ComeOn Dialog!) version 1.1-20080316
Copyright 2000-2006,2007 Thomas E. Dickey
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* Display dialog boxes from shell scripts *
Usage: dialog <options> { --and-widget <options> }
where options are "common" options, followed by "box" options
Special options:
[--create-rc "file"]
Common options:
[--ascii-lines] [--aspect <ratio>] [--backtitle <backtitle>]
[--begin <y> <x>] [--cancel-label <str>] [--clear] [--colors]
[--cr-wrap] [--default-item <str>] [--defaultno] [--exit-label <str>]
[--extra-button] [--extra-label <str>] [--help-button]
[--help-label <str>] [--help-status] [--ignore] [--input-fd <fd>]
[--insecure] [--item-help] [--keep-tite] [--keep-window]
[--max-input <n>] [--no-cancel] [--no-collapse] [--no-kill]
[--no-label <str>] [--no-lines] [--no-ok] [--no-shadow] [--nook]
[--ok-label <str>] [--output-fd <fd>] [--print-maxsize] [--print-size]
[--print-version] [--separate-output] [--separate-widget <str>]
[--shadow] [--single-quoted] [--size-err] [--sleep <secs>] [--stderr]
[--stdout] [--tab-correct] [--tab-len <n>] [--timeout <secs>]
[--title <title>] [--trace <file>] [--trim] [--version] [--visit-items]
[--yes-label <str>]
Box options:
--calendar <text> <height> <width> <day> <month> <year>
--checklist <text> <height> <width> <list height> <tag1> <item1> <status1>...
--dselect <directory> <height> <width>
--editbox <file> <height> <width>
--form <text> <height> <width> <form height> <label1> <l_y1> <l_x1> <item1> <i_y1> <i_x1> <flen1> <ilen1>...
--fselect <filepath> <height> <width>
--gauge <text> <height> <width> [<percent>]
--infobox <text> <height> <width>
--inputbox <text> <height> <width> [<init>]
--inputmenu <text> <height> <width> <menu height> <tag1> <item1>...
--menu <text> <height> <width> <menu height> <tag1> <item1>...
--mixedform <text> <height> <width> <form height> <label1> <l_y1> <l_x1> <item1> <i_y1> <i_x1> <flen1> <ilen1> <itype>...
--mixedgauge <text> <height> <width> <percent> <tag1> <item1>...
--msgbox <text> <height> <width>
--passwordbox <text> <height> <width> [<init>]
--passwordform <text> <height> <width> <form height> <label1> <l_y1> <l_x1> <item1> <i_y1> <i_x1> <flen1> <ilen1>...
--pause <text> <height> <width> <seconds>
--progressbox <height> <width>
--radiolist <text> <height> <width> <list height> <tag1> <item1> <status1>...
--tailbox <file> <height> <width>
--tailboxbg <file> <height> <width>
--textbox <file> <height> <width>
--timebox <text> <height> <width> <hour> <minute> <second>
--yesno <text> <height> <width>
рджрд░рдЕрд╕рд▓, рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рд╕реВрдЪреА рд╕реЗ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд░рдо рдЖрдкрдХреЛ рдХреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реВрдВрдЧрд╛ред
рдлрд╝рд╛рдЗрд▓ рдмреИрдХрдЕрдк рдФрд░ рдЪрдпрдирд┐рдд рдбреЗрдЯрд╛рдмреЗрд╕ (рдпрд╛ рд╕рднреА) MySQL рдХреЗ рдбрдВрдк рдбрдВрдк рдордЬрдмреВрд░:
$ cat ./xbackup.sh
#!/bin/sh
SRC = "/usr/home/dev/"
SITE = "${SRC}_Web/"
PROJECT = "${SRC}_Project/"
#
DST = "/usr/home/share/BACKUP/"
# Mysql
SQLLOGIN = "root"
SQLPASS = "TopSecretPassword"
SQLHOST = "localhost"
/* --------------------------------------------------------------------------------------------------------- */
#
DATE = ` date "+%Y.%m.%d_%H-%M-%S"`
DSRC = ""
# ( )
backupType = 0
#
DIALOG = dialog
#
tempfile = ` mktemp /tmp/bkp.XXXXXX `
trap "rm -f $tempfile" 0 1 2 5 15
#
InfoDialog () {
${ DIALOG } --msgbox "$1" 5 70
}
#
BackupFiles () {
if [ ! -d ${ 2 } ] ; then
mkdir -p ${ 2 }
fi
tar -c --gzip -f "${2}${DATE}.tar.gz" "${1}"
InfoDialog "OK -> ${2}${DATE}.tar.gz"
}
#
BackupMySQL () {
case ${ 1 } in
"All_Database" )
mysqldump -R -E --triggers -u "${SQLLOGIN}" -p "${SQLPASS}" --all-databases > "${tempfile}"
;;
"" )
InfoDialog "Backup has been canceled"
exit
;;
* )
mysqldump -R -E --triggers -u "${SQLLOGIN}" -p "${SQLPASS}" ${ DBase } > "${tempfile}"
;;
esac
cp "${tempfile}" "${DST}${1}-${DATE}.sql"
# gzip, тАФ
echo tar -c --gzip -f "${2}${DATE}.dump" "${tempfile}"
InfoDialog "OK -> ${2}${DATE}.dump"
}
#
ChooseDatabase () {
#
DBases = ` echo "SHOW DATABASES" | mysql -u "${SQLLOGIN}" -p "${SQLPASS}" `
# All_Database
List = "All_${DBases}"
#
$DIALOG --title "Please choose a Database " --tree "FS" "List of existing databases" 14 78 7 ${ List } 2> ${ tempfile }
case $? in
0 )
#
DBase = ` cat ${ tempfile } `
BackupMySQL ${ DBase }
;;
1|255 )
# ( )
InfoDialog "Backup has been canceled"
exit
;;
esac
}
# ( )
ChooseDomain () {
Paths = ` ls ${ 1 } `
List = ""
isEmpty = true
for dName in ${ Paths }
do
# www ( )
if [ -d "${1}${dName}/www" ] || [ -d "${1}${dName}/htdocs" ] ; then
List = "${List} ${dName}"
isEmpty = false
fi
done
# ,
if ${ isEmpty } ; then
Count = ` echo ${ SRC } | wc -c | tr -d ' '`
DSRC = ` echo ${ 1 } | awk "{ print substr($ 1, ${Count}) }"`
return 0;
fi
#
$DIALOG --title "Please choose a path " --tree "FS" "List of existing domains" 14 78 7 ${ List } 2> ${ tempfile }
case $? in
0 )
DName = ` cat ${ tempfile } `
ChooseDomain "${1}${DName}/"
;;
1|255 )
InfoDialog "Backup has been canceled"
exit
;;
esac
}
ProcessBackup () {
case $1 in
Site )
ChooseDomain ${ SITE }
BackupFiles "${SRC}${DSRC}" "${DST}${DSRC}"
;;
MySQL )
ChooseDatabase
;;
* )
;;
esac
}
TypeDialog () {
${ DIALOG } --title "Choose backup type:" --menu "This is backup types" 12 50 4 \
"Site" "backup web-site" \
"MySQL" "Mysql database" 2> ${ tempfile }
case $? in
0 )
ProcessBackup ` cat ${ tempfile } `
TypeDialog
;;
1|255 )
InfoDialog "Backup has been canceled"
exit
;;
esac
}
TypeDialog
рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
рд╡рд╣ рд╕рдм рд╣реИред рдЕрдм рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рдЖрдк рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ "рд╡рд┐рдВрдбреЛрдЬрд╝" рдХрд╛ рдЖрдирдВрдж рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред рдЙрд╕реА рддрд░рд╣, рдХрд┐рд╕реА рднреА рдХрдВрд╕реЛрд▓ рдХрдорд╛рдВрдб рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдФрд░ рдХреБрдВрдЬреА рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рд╕рд╛рде рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ рдкреЛрдЯреАрди рд▓рдЧрд╛рдиреЗ рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдХрд░рдХреЗ, рдЖрдк рдПрдХ рд╕реБрдВрджрд░ рдХрдВрд╕реЛрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рджреЗрд╡ рд╕рд░реНрд╡рд░ рдкрд░ рдЕрдкрд╛рдЪреЗ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ (рдмреЗрд╢рдХ, рдЧрдВрднреАрд░ рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЗ рд╕рд╛рде sudo рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ), рд╕рднреА рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдПред рдПрдХ рдЯреАрдо рдореЗрдВ, * рдирд┐рдХреНрд╕ рд╕рд┐рд╕реНрдЯрдо рд╕реЗ рднреА рдЕрдкрд░рд┐рдЪрд┐рддред
рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдЙрдирдХреЗ рд╕рд░реНрд╡рд░ рдХреЗ рдХрдВрд╕реЛрд▓ рдХреЛ "рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЕрдиреБрдХреВрд▓" рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдХреЛ рднреА рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рдЬреНрдЮрд╛рди рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред
PS рд▓реЗрдЦрди рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдореИрдВ рдЕрдЪреНрдЫреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдЖрдпрд╛ http://www.oszone.net/2833/ , рдореИрдВрдиреЗ рддреБрд░рдВрдд рд╡рд╣рд╛рдБ рд╕реЗ рдХреБрдЫ рдкреЗрд╢ рдХрд┐рдпрд╛ред