Linux news

GNOME умер, MATE и CINNAMON гальванизируют труп, KDE всё так же плох, XFCE становится единственным прибежищем «красноглазых», а сами они начинают превращаться в новых луддитов. Compiz, Beryl, Emmerald — нам будет вас не хватать. Wayland шестой год не может появиться на свет. И все эти шесть лет ходят сильно преувеличенные слухи о смерти X.Org.

Ubuntu стремительно движется в /dev/null вслед за Windows, Mint пытается этого избежать и успеть пересесть на Debian, последний оплот настоящего, «столлмановского» Linux-а, Gentoo потерял обаяние «скомпилируй свой собственный мир», остальные дистрибутивы всё так же бьются в святых войнах за свое собственное, единственно верное светлое будущее.

Все по-прежнему…

Поиск текста в файлах


#!/bin/bash
cmd="find -type f -print "
set_color_cmd="set_color"
if [ $2 ]; then cmd="$cmd -name \"$2\""; fi
color="green"
if [ $3 ]; then color=$3; fi

is_colored=1
hh=$(which "$set_color_cmd")
if [ $? -ne 0 ]; then is_colored=''; fi

$cmd | while read f; do
cnt=$(grep -c "$1" "$f")
if [ $cnt -gt 0 ]; then
if [ $is_colored ]; then "$set_color_cmd" "$color"; fi
echo "$f"
if [ $is_colored ]; then "$set_color_cmd" normal; fi
grep -n "$1" "$f"
fi
done

GIT deployment

… или «нестандартное использование системы управления версиями».

Возможности GIT выходят за пределы управления версиями. Я использую его в качестве инструмента для развертывания проекта на сервере. Требуется: идентичные настройки среды проекта на рабочей станции (или испытательном стенде) и «боевом» сервере, GIT на клиенте, SSH на сервере и два простеньких скрипта.

Прежде всего создайте GIT-репозиторий в своей рабочей директории и поместите в него исходный код.

git init
git add .
git commit -m "Let there be light!"

Потом создайте GIT-репозиторий на боевом сервере.

ssh user@example.com
cd path/to/site
git init

Затем отредактируйте (там же, в директории проекта на «боевом» сервере) файл .git/hooks/post-receive так, чтобы он был примерно таким:

#!/bin/sh
cd ..
env -i /path-to-git/git reset --hard

… и сделайте его исполнимым.

chmod a+x .git/hooks/post-receive

Путь к git можно узнать, выполнив команду:

whereis git

После этого отключитесь от сервера и в локальной консоли выполните команду:

git push --force ssh://user@example.com/path/to/project/.git master:master

…и ваш локальный проект будет развернут на боевом сервере. А чтобы автоматизировать операцию, создайте исполняемый файл git-deploy.sh c таким содержанием:

#!/bin/bash
git add .
git commit -a --amend --reuse-message=HEAD
git push --force ssh://user@example.com/path/to/project/.git master:master

Каждый раз, когда вы будете выполнять этот файл, все внесенные изменения добавятся к последнему комиту и выгрузятся на сервер. То есть в истории вашего проекта не будет лишних комитов, связанных с выгрузкой на сервер, а будет только история разработки. Все эксперименты можно проводить в параллельных ветках, выгружаться на сервер они будут только после того, как вы «сольете» изменения в ветку master.