PermLUG |
Пермская группа пользователей Linux |
|
|
|
||
Вход в систему |
Если хочешь быть здоров - сохраняйся и не слушай докторов...
CORPSE, 04.12.2009 — 17:15
Я принёс вам ещё одну небольшую полезняшку, тоже связанную с резервным копированием. Давно ей пользуюсь и на работе и дома. Иногда бывает, когда редактируешь какой-нибудь конфигурационный файлик, мысли о том, что надо было сначала сделать его резервную копию, приходят как-то после того, как ты его уже сохранил с изменениями, не оправдавшими твоих ожиданий. У кого такого никогда не было, может кинуть в меня чем-нибудь не очень тяжёлым. :) Так вот, однажды напоровшись на вышеобозначенные грабли, я решил избавиться от них раз и навсегда. Принцип боевых действий: вместо редактора (я использую vim), запускаем скрипт, указывая в качестве параметра файл, который мы хотим отредактировать. Скрипт проверяет, существует ли этот файл и есть ли у нас права на запись, если нет - вежливо посылает пользователя лесом. Если же мы можем его отредактировать, то он вычисляет контрольную сумму, архивирует файл и сохраняет в специальную директорию для бекапов, добавляя к его имени путь и дату со временем, чтобы не пришлось играть в игру "Что? Где? Когда?", после чего запускает редактор, уже упомянутый вим. После того, как редактор закрыт, скрипт снова вычисляет контрольную сумму файла. Если файл не изменился, то хранить его резервную копию нет смысла, она будет удлена, о чём пользователь будет предупреждён. Скрипт я добавил в PATH и назвал vimm (кто хочет, может сделать симлинк или алиас - без разницы). Уже привык набирать vim , а теперь просто ещё раз задеть кнопку с буквой m и мы получим в результате изменения резервную копию. Надеюсь, кому-нибудь пригодится. :))
#!/bin/bash
#Формат даты и времени, добавляемых к файлу
DT="$( date +%Y.%m.%d-%H.%M.%S )"
#Путь для создания резервных копий
PREF="/path/to/backup"
if [ -w "$1" ]; then
case "$1" in
/*)
FNAME="$1"
;;
*)
FNAME="$(pwd)""/$1"
;;
esac
MD5B="$(md5sum $1)"
FNAME="$(echo $FNAME- | sed s#/#_#g )$DT.gz"
gzip -c "$1" > "$PREF/$FNAME"
vim "$1"
MD5A="$(md5sum $1)"
if [ "$MD5B" = "$MD5A" ]; then
rm "$PREF/$FNAME" > /dev/null
echo "Контрольные суммы файлов совпадают, резервная копия удалена."
fi
else
echo "В качестве параметра должно быть указано имя файла, доступного для записи."
fi
|
Тэги в ТегиНовые записи в блогах
Активные обсуждения форума
Новости Linux
|
| Пермская группа пользователей Linux, 2003—2011 | ||
Сочетание "система контроля версий" - весьма полезные 3 слова ;)
http://hlabs.spb.ru/development/versions
Да, я знаю о её существовании. Но пользоваться не приходилось, поэтому под конкретную задачу проще было написать скрипт. Да и раскидать его по моим машинам ничего не стоит, после чего всё сразу везде работает.
Кстати, провентилировал вопрос системы контроля версий и вот что обнаружил помимо CVS:
1. Bazaar http://bazaarvcs.org
2. Subversion http://subversion.tigris.org
3. Git http://gitscm.com
Про существование (1) и (3) вообще не знал.
Ну ты даёшь. На git ядро разрабатывается!
FА ссылочка-то такая: http://git-scm.com
Есть ещё не менее известная система mercurial. Список проектов большой:
http://ru.wikipedia.org/wiki/Mercurial
CVS сдох в прошлом веке :)
если нужно следить за конкретным файлом, то есть RCS
А если нужно за "коллекцией файлов" то есть SVN (aka Subversion) и git.
SVN максимально наследует CVS и для нее есть очень толковая документация, где все растусовано по полочкам. Если нужно решение чтобы раобтало из коробки, сразу же и с минимумом затрат на освоение, то ਂਂSVN то что нужно਼
git. --- это более функциональная и фичистая система контроля версий, но соотвественно и более сложная਼ Документация для git есть, но не такая качественная, как для SVN਼਼ Концепция, которая лежит в основе git довольно сильно отличается :) git --- это настоящий юниксвей :)
Есть правда всякая экзотика типа tla итп, но ее имеет смысл испльзовать только в случае необходимости.
ЗЫ: вроде бы не первый год никсы пользуешь :) так что даже странно, что системы контроля версий прошли стороной. Реально удобная и нужная вещь. Я не раз и не два наказывался за лень и пренебрежение ими...
Капитан Очевидность, вы?
О чем это Вы?
стандартный алгоритм. ничего нового.