PostgreSQL coub express.js freeware git jquery laravel links linux macos mysql node.js php powershell python ubuntu vim virtualbox анекдот блог игры интересно стихи цитаты

Это полная ерунда понятное дело, но я забываю постоянно. Поэтому законспектирую.
# для файла совсем просто
md5sum file.txt

# для строки чуть замороченнее
echo -n 'string ololo jj' | md5sum
Чтобы понять почему так и что за ключи смотрим man md5sum и man echo.


Я не администратор, поэтому относитесь к этой заметке с осторожностью.
Рассматривается такя ситуация: надо заставить sendmail сервера отправлять почту, но ничего в ответ не принимать. Строго для оповещений с сайтов. У меня вдс-ка с предустановленным exim4 на который, насколько я понимаю, "ссылается" sendmail. Т.е. фактически работает exim4.

Сначала настраиваем хост (my-host-name это имя нашего хоста с которого все будет ездить)
sudo mcedit /etc/hosts
В файле должны быть строки вида
127.0.0.1 localhost
111.111.111.111 hostname.my-hoster.net my-host-name
Далее меняем имя хоста в файле
sudo mcedit /etc/hostname
Файл должен выглядеть вот так (полностью, т.е. только имя хоста и все)
my-host-name
Теперь перегружаем службу которая грубо говоря обновляет имя хоста глобально
sudo /etc/init.d/hostname.sh stop
sudo /etc/init.d/hostname.sh start
# если такого скрипта нет, то пробуем иначе:
sudo service hostname restart
REM ещё такой вариант есть, для Debian 9 (stretch)
hostnamectl set-hostname my-host-name
Теперь выполняем команды
hostname
hostname -f
Если все правильно сделано, то они обе должны вернуть значение my-host-name (т.е. имя вашего хоста)

Теперь надо настроить сам sendmail. В моем случае, нужно перенастроеить exim4. Делается это примерно так:
sudo dpkg-reconfigure exim4-config
После этого в мастере просто нужно выбирать значения (именно для exim4)
  • internet site..
  • вводим название вашего хоста (my-host-name)
  • ip для smtp устанавливаем только 127.0.0.1 т.к. нам не нужны внешние подключения по smtp
  • другие допустимые назначения оставляем по умолчанию
  • домены для разрешенного релея - оставляем пустым
  • машины для релея - оставляем пустым
  • кол-во днс запросов на ваше усмотрение, я не ограничивал
  • метод доставки я оставил тот же который был, т.е. /var/mail
  • разделять не разделять файлы конфигурации - на ваше усмотрение, аргументы там описаны, я разделять не стал
Теперь, чтобы проверить ходит ли почта делаем так
sendmail -i my-email@my-host.com
Далее вводим тект тестового сообщения. И по готовности нажимаем Ctrl+d
Идем проверяем свою почту. Если письмо пришло - все ок и ура. Если нет - идем гуглить дальше :)

Дальше надо убедиться что на нашем сервере недоступен smtp, для этого нам надо сходить с локальной машины постучаться в 25 порт сервера и получить отлуп. Делается это например так:
telnet my-host-name 25
Trying 111.111.111.111...
telnet: Unable to connect to remote host: Connection refused
Если все так, то все тип-топ. Порт закрыт.

Ещё маленькая фишка. Бывает так что по каким-то причинам, сервис рулящий веб-приложением надо перезапускать регулярно. В моем случае это node.js и делаю я это по крону раз в N времени. Так вот если перезапустить процесс кроном, то sendmail перестает работать, потому как приложение не знает где он, в path пути до него просто нет и соот-но он просто не находится. Точно так же можно передавать любые другие настройки переменных окружения. Как это делать смотрим ниже.

Сначала посмотрим где sendmail
which sendmail
/usr/local/bin/sendmail
Ок, видим путь. Если вдруг не видим то идем смотреть тоже самое но под sudo. Теперь идем в кронтаб и добавляем переменные окружения там.
crontab -e
Откроется редактирование заданий для текущего пользователя. То есть все задания будут выполнены с правами текущего пользователя и сервис запустится с правами этого пользователя, если он запускается конечно согласно вашему плану :)

# это переменная которая рассказывает где искать sendmail,
# другие нужные пути можно писать через разделитель - двоеточие
# там будут искаться необходимые нам утилиты
PATH=/usr/local/bin

# это пример переменной окружения которую будет использовать само приложение
NODE_ENV=production

# это собственно само задание, гуглим по формату crontab чтобы понять что к чему
# в данном случае скрипт будет срабатывать в 30 минут каждого четного часа
*/30 */2 * * * /home/user/blog/scripts/restart.sh
Ну вот примерно так. Прошу не воспринимать эту заметку как полное руководство к действию, вполне возможно что для вашего случая все будет значительно отличаться. Но возможно это как-то поможет или хотя бы наведет на мысли в нужном направлении :) Успехов!

Пользовался вот этим источником. Рекомендую на него взглянуть, надеюсь он ещё дышит.


Стыдно не знать таких вещей. Биты setuid и setgid, установленные для папок (chmod g+s) заставляет новые папки и файлы, созданные в ней, наследовать ID группы этой папки вместо ID группы пользователя создавшего файл. Новые подпапки также наследуют бит setgid. Это позволяет создать общее рабочее пространство для группы без неудобств членам группы явно менять их текущую группу для создания новых файлов и папок. Наследование устанавливается только для новых файлов и папок. Уже существующим файлам и папкам этот бит нужно устанавливать вручную, например:
find /path/to/directory -type d -exec chmod g+s {} \;
Вики: http://ru.wikipedia.org/wiki/Suid


Недавно искал бесплатный удобный таск-трекер. Чтобы поменьше интерфейса и побольше простоты и чтобы было похоже на тудушницу простую, но чтобы можно было таски комментировать и делать с ними всякое и чтобы можно было шарить проекты между людьми и хотел даже сам писать и вуаля, это уже сделано, причем в классном интерфейсе и бесплатно. Я опять опоздал с реализацией идеи, но пока я бы собирался уже бы борода выросла до колен, а тут уже таки велкам. В общем адрес этой замечательной штуки asana.com. Продуктивного вам планирования!


Это очень просто:
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 можно найти например тут.
git


aghr