Как сделать вывод GIT цветным?

Это очень просто:
git config --global --add color.ui true
Эта инструкция добавит глобальную настройку в ваш конфигурационный файл ~/.gitconfig и сделает вывод цветным для всех операций со всеми вашими репозиториями.
Это я нагуглил и решил записать. А то голова как унитаз..

И раз пошла такая пьянка..
# установить имя пользователя для всех своих репов
config --global user.name ijin

# установить email
config --global user.email mail@mail.com

# посмотреть лог коммитов за последнее время
git log --since="30 minute ago"

# откатить последний коммит в git (поправить коммент например)
git reset --soft HEAD^

# посмотреть список локальных тегов
git tag -l

# удалить все локальные теги и получить все теги с удаленного репозитория
git tag -l | xargs git tag -d
git fetch

# создать тег
git tag tagName
# отправить новые теги в удаленный репозиторий вместе с новыми коммитами
git push --tags 

# удалить локальный тег
git tag -d tagName
# удалить тег в удаленном репозитории (origin)
git push --delete origin tagName

# выкатиться с тега
git fetch --tags
git checkout tagName

# откатиться на предыдущий установленный тег, круто для отката на боевой при контроле установки тегов
git checkout tagName^

# посмотреть текущий тег проекта
git describe --tags

# посмотреть настройки для текущего репозитория
git config -l

# посмотреть глобальные настройки Git
git config --global -l

# установить простой глобальный алиас для вывода лога, см. git help log
# теперь в репозиториях будет работать git ll
git config --global alias.ll "log -20 --pretty='%Cred%h %Cblue%an %ar %Cgreen%s'"

# смотрим путь к удаленному репозиторию
git remote -v
git config -l

# правим путь к удаленному репозиторию
git config remote.origin.url "git@192.168.1.100:repo.git"

# если нужно добавить файлы к последнему коммиту или поправить комментарий 
git commit --amend
Вообще Git очень нравится. Очень продвинутая VCS, просто песня.
Книжка со всем необходимым про Git живет тут.
Онлайн курсы по Git можно найти например тут.

Ubuntu настройка локального DNS сервера

UPD: Таже самая цель, но меньшей кровью — настройка dnsmasq

Зачем это надо.
Надо это затем что есть например 10 локально поднятых проектов на рабочей станции разработчика. Этот разработчик

  1. Для работы с локальной копией проекта редактирует конфиг своего веб сервера (apache, lighttpd etc.) и указывает в конфиге имя хоста для этого локального проекта.
  2. Потом перезапускает веб сервер.
  3. Потом тащится редактировать /etc/hosts Прописывает там имя хоста и локальный ip.
  4. Потом выясняет что этот прописанный хост перекрывает тот который был в интернете или он ошибся когда прописал имя в конфиге веб-сервера или в hosts.

В итоге всего этого занудства как правило тратится драгоценная нервная энергия которую можно потратить более эффективно на что-то поинтереснее.

Что я предлагаю сделать.
Я предлагаю сделать локальный домен (в примере .mydev) и сократить процедуру выше до двух шагов:

  1. Прописываем конфиг веб-сервера с хостом вида projectname.mydev
  2. Перезапускаем веб-сервер.

И всё. И радостно начинаем допиливать наш проект по заданному имени.

Что будем делать, TODO

  1. Установим DNS сервер.
    sudo apt-get install bind9
  2. Идем разглядывать собственно конфиги. Принцип нашей этой гадости состоит в том что на данный момент при обращении к какому-либо хосту (это грубая схема) наша машинка ломится на провайдерский DNS выданный ему провайдером или прописанный иным образом это не суть. Получает собственно у DNS-а айпишник хоста ну и соответственно отправляется за данными в его сторону. Дальше нам не интересно.
    Как будет. Будет так: при обращении к какому-либо хосту, мы будем обращаться к локальному DNS серверу, который будет проверять наши правила и если запрос не попадает под наши правила, то наш локальный DNS идет и спрашивает тоже самое у провайдерского DNS-а. И отдает нам уже собственно его (провайдера) ответ. Итак, идем к конфигам
    cd /etc/bind
    Я пользуюсь mc, это удобно, рекомендую. Нам понадобятся права суперпользователя, так что либо sudo mc, либо sudo mcedit filename при редактировании каждого файла, вопрос с правами я далее затрагивать не буду.
  3. Открываем на редактирование named.conf.options
    Тут нас интересует секция forwarders её нам нужно раскомментировать и указать IP адрес(а) DNS сервера провайдера (или может быть роутера, смотря как организован выход в интернет). Сохраняем, выходим.
  4. Открываем на редактирование named.conf.default-zones
    Тут нам вниз нужно добавить новую зону. Выглядеть новая секция будет вот так:
    zone "mydev" {
        type master;
        file "/etc/bind/db.mydev";
    };
    
  5. По указанному пути создаем файлик
    sudo cp /etc/bind/db.local /etc/bind/db.mydev
    То есть просто делаем копию описания локальной зоны. Нам нужно будет в ней кое-что отредактировать. Итак копию сделали, теперь:
  6. Открываем на редактирование db.mydev
    Там нам нужно исправить всего несколько строк. В итоге наш db.mydev будет выглядеть вот так:
    $TTL    604800
    @       IN      SOA     mydev. root.mydev. (
        2 ; Serial
        604800 ; Refresh
        86400 ; Retry
        2419200 ; Expire
        604800 ) ; Negative Cache TTL
    
    @       IN      NS      mydev.
    @       IN      A       127.0.0.1
    *        IN      A       127.0.0.1
    @       IN      AAAA    ::1
    
    Жирным отмечены строки которые были отредактированы или добавлены. Сравните с оригинальным db.local для того чтоб было понятно что произошло. По сути ничего особенного.
  7. Теперь остается только перезапустить наш DNS
    sudo /etc/init.d/bind9 restart
  8. Ну и проверяем теперь как эта карусель работает.
    ping 11.mydev
    ping 22.mydev
    Если работает то IP должен быть тот что вы указали (в примере 127.0.0.1) Но сейчас ничего не работает. Потому что..
  9. Забыл рассказать про грабли. Наш уважаемый NetworkManager автоматом прописывает в /etc/resolv.conf адрес DNS провайдера. Если там будет прописан внешний DNS то наша поделка пролетит как фанера над Парижем. Обращения в сеть просто пойдут мимо неё. Чтобы это дело устранить, нужно зайти в свойства текущего подключения к интернету, "Изменить соединения" => Выбираем наше соединение => "Параметры IPv4". Тут указываем IP нашего локального DNS (в примере 127.0.0.1), сделать это можно выбрав метод "DHCP, только адрес". Этого должно быть достаточно. После этого через NetworkManager соединение разрываем и снова устанавливаем. Если все ок, то в /etc/resolv.conf мы должны увидеть наш искомый IP, тот что прописали как DNS в NetworkManager.
  10. Вот теперь проверяем результат.

Вот собственно и всё. Теперь можно не трогать /etc/hosts. Прошу обратить внимание, что решение я нашел сам и возможно оно неоптимальное или даже неправильное, но однозначно рабочее. Ничего подходящего я в интернете по форумам не нашел.

Ubuntu, массовое переименование файлов в папке

Это простой пример. Исходим из того что нам в одной папке надо переименовать все файлы совпадающие по имени с заданной маской. Для этого воспользуемся командой rename (тут желательно немного шарить в регулярных выражениях).
Во-первых конечно же man rename там нет ничего хитрого. rename [режим] [регулярка] [маска_файлов]
Например, в выбранной папке добавляем всем файлам расширение .torrent
cd ~
cd torrents/_torrents
pwd
# /home/user/torrents/_torrents/ , ok
ls -la
# приедет список файлов, ок мы там где надо, это точно
rename -v 's/.*/$_.torrent/' *
Насчет как работает perlexpr извините, придется почитать :) man rename койчем поможет в общих случаях да и этот пример тоже.

А в этом примере в текущей папке у имен файлов *.jade меняется хвост, становится *.html.jade
for file in *.jade ; do new=`echo $file | sed 's/.jade/.html.jade/g'`; echo $file $new ; done

Midnight Commander (mc), памятка хоткеев

Сие есть краткая памятка хоткеев к популярному файловому менеджеру mc. Сейчас мне приходится работать с ним постоянно и первое время я здорово маялся. Замечу что чаще всего я пользуюсь им из под виндового Putty, соответственно все приведенные хоткеи должны теоретически нормально работать под WinXP\Win7 + Putty при условии что нет каких-то глобально перекрытых хоткеев (у меня например были проблемы, когда "Типографская раскладка Ильи Бирмана" вещь же классная, не давала мне нормально пользоваться путёвыми хоткеями, пришлось сносить). Ну, с преамбулой закончили, теперь собственно сабж:

  • F9 - вызов главного меню mc :)
  • F2 - вызов меню пользователя
  • Ctrl+\ - вызов меню каталогов быстрого доступа (туда же можно сохранять sftp ssh и ftp соединения)
  • Ctrl+R - обновить папку (например когда заливали в текущую папку файлы по фтп или кидали туда файлы-результаты)
  • Ctrl+U - поменять панели местами
  • Ctrl+x c - вызов диалога chmod (такая запись хоткеев здесь и далее означает, что нужно нажать сочетание клавиш, записанных через "+", затем отпустить его и нажать клавишу, записанную через пробел, то есть фактически это такой сложный хоткей получается)
  • Ctrl+x o - вызов диалога chown
  • Ctrl+o - показать "субконсоль", в ней можно работать, но есть небольшие нюансы. Вообще обычно это нужно чтобы убрать панели с экрана и посмотреть результаты работы какой-то запущеной программы, но на разных ос (фря, дебиан\убунту) я много раз ловил глюки с этой ф-ей. То есть видел черный экран или результаты выполнения чего-то другого. Ну зато эту ф-ю удобно использовать когда надо просто обновить рабочий экран. В командной строке периодически появляется какой-то графический мусор, который быстрее всего сбросить как раз вот так. 
  • Ctrl+x i - включить\выключить отображение быстрой информации о файле под курсором в неактивной панели
  • Alt+h - показать историю комманд
  • Esc p - повторить в коммандной строке предыдущую комманду (многократное нажатие ведет к проходу по истории комманд)
  • Esc i - отобразить ту же директорию в неактивной панели
  • Alt+t - сменить вид текущей панели
  • Shift+* - инвертировать текущее выделение файлов (* которая на кнопенции 8)
  • Ctrl+x s - создать симлинк файла под курсором

Буду пополнять периодически. Думаю вспомнил я не всё чем пользуюсь.

UBUNTU: как удалить пользователя

Серьёзнейшее дело!!

man deluser

Удаление с хомяком вместе без восстановления:

sudo deluser --remove-home user_name
# или короче
sudo deluser -r user_name
Можно сделать бекап, чтобы узнать как, но всё же придётся посмотреть ман.
Добавить пользователя соответственно: man adduser.