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

Наконец это случилось и со мной. Я умудрился забыть пароль от ноута.
Слава зайцам восстановить доступ в убунте довольно просто. Я раза с третьего нагуглил нормальное решение.
На всякий случай здесь тоже напишу.
  • При загрузке системы удерживая Shift попадаем в меню Grub, из него входим в режим восстановления (он же "recovery mode", через "доп параметры" в 12.10 на других могут быть различия)
  • Далее при загрузке появится меню режима восстановления, в нем выбираем строку root (в 12.10 "root - Drop to root shell prompt")
  • Откроется рутовая консоль, теперь чтобы изменить пароль надо перемонтировать файловую систему для записи, выполняем команду
    mount -rw -o remount /
  • Если забыли ещё и логин то можно выполнить
    cat /etc/passwd
    В появившемся выводе поискать знакомые имена пользователей :)
  • Теперь собственно меняем пароль
    passwd userName
    Где UserName - логин пользователя, для которого меняется пароль.
  • Теперь перезагружаемся
    shutdown -r now
  • Profit!




Очень удобная фишка скрина. Скрин вообще здорово упрощает жизнь двуногим. Стоит освоить, тем более что осваивать совсем не много. Если диагональ экрана позволяет можно одновременно смотреть несколько tail-ов логов и чего-нибудь ещё править, выкатывать тут же и т.п. Остается только снять шляпу перед разработчиками этой замечательной штуки.

Может быть кому-то будет полезен мой набор шоткатов, не идеально (как и все в этом мире), но мне хватает:

Ctrl+a - c - создаст новую "вкладку", ещё один терминал
Ctrl+a - n - переход к следующей вкладке
Ctrl+a - 1..0 - переход к вкладке по её номеру, т.е. если я хочу перейти ко второй вкладке то я должен выполнить Ctrl+a - 2
Clrl+a - a - переход к предыдущей открытой вкладке, то есть вы в пятой а предыдущая была вторая, так можно быстро перейти без ввода номера вкладки
Ctrl+a - " - выбор активного терминала для текушей "вкладки" (двойная кавычка через шифт)
Ctrl+a - Shift+a - переименование текущей вкладки, бывает удобно именовать вкладки
Ctrl+a - k - "убить" текущую вкладку, в случае если по каким-то причинам сеанс завис или сломался вывод например
Ctrl+d - это стандартный выход из сеанса, "вкладка" скрина тоже будет закрыта
Ctrl+a - ? - шпаргалка по хоткеям

Ctrl+a - Esc - перемещение по выводу screen, оно же режим копирования, скроллим вверх и вниз стрелками или PgUp/PgDn
В режиме копирования/скроллинга:
q - выход в нормальный режим
0 - переход в начало строки
$ - переход в конец строки
Ctrl+b - на страницу вверх
Ctrl+d - на страницу вниз
Space - первое нажатие - начало выделения, второе нажатие после перемещения скопирует выделенное в буфер обмена screen
Ctrl+] - вставить содержимое буфера screen
Копирование происходит в некий "внутренний" буфер screen, а не в глобальный клипборд вашей OS. Если у вас macos или linux, то есть варианты.

Разделения экрана (из видео)
Ctrl+a - Shift+s - разделяем по горизонтали
Ctrl+a - | - разделяем по вертикали (пайп вводится с шифтом конечно, посмотрите на свою клавиатуру)
Ctrl+a - Shift+x - удалить текущее разделение (ту зону, в которой сейчас находится курсор)
Ctrl+a - Tab - перейти к следующей области разделения
С этими функциями нужно поэкспериментировать чтобы до конца понять принцип действия.


Ставим скрин (если вдруг его нет):
sudo apt-get install screen

Запускаем screen:
tatuin@luke# screen

Выходим из screen, но оставляем его в процессах, чтобы при следующем заходе на сервер снова подключиться к нему (это по-модному называется detach):
Ctrl+a - d

Подключаемся к оставленному включенным на сервере screen:
tatuin@luke# screen -x

Уже этого небольшого набора мне хватает чтобы полностью отказаться от вкладок терминала с разными переключениями от системы к системе, если они вообще предусмотрены в клиенте :)
Если знаете ещё что-то полезное - пишите в комментариях - я дополню заметку.

P.S.: ещё хорошо бы для удобства немного донастроить скрин, чтобы показывать вкладки, для этого нужно добавить в файл ~/.screenrc следующие настройки:
startup_message off
caption always
caption string "%{kw}%-w%{wr}%n %t%{-}%+w"
defutf8 on
defscrollback 5000
Все пока. Настройки легко гуглятся, как обычно :) Большая дока есть например тут, надеюсь будет живо.


Спрайт (в вебмастерской терминологии) есть фиговина призванная уменьшить количество запросов к серверу путем аккамулирования в себе кучи картинок которые используются в верстке. При помощи "хитрых" приемов верстки в нужном месте появляется нужный кусочек изображения из спрайта и выглядит как полагается, но при этом на 100 показанных картинок (например) реально у сервера запрашивается только одна - спрайт который всю эту мелочевку содержит. Как ими правильно пользоваться, как верстать и как не злоупотреблять ими - читайте у настоящих Верстальщиков. "Я не настоящий сварщик" ©

Я тут хочу написать о другом. Допустим есть у нас NN картинок для спрайта. Как спрайт сделать. Ну как, берём открываем там фотошоооп или гимп или ещё какой-нибудь графический редактор и начинаем все засовывать туда и записывать координаты где чего лежит. Теоретически все так и должно быть, профессионалы я думаю так примерно и делают. Я не профессионал-верстальщик и вообще не верстальщик, но зато я большой лентяй. Поэтому рассмотрим лентяйский пример ниже :)

Вообще-то для этой цели есть ещё куча онлайн генераторов спрайтов, но все что я нашел мне не понравилось, а то что понравилось - просило денег. Они легко гуглятся - решайте сами как быть.

В общем суть примера. Есть NN картинок одинакового разрешения и типа. У меня это было 4 png-шки 128x128. Когда я поставил и открыл Gimp мне сделалось нехорошо. Опять надо все это вспоминать, считать, двигать подгонять.. Пошел гуглить на предмет того как бы это в гимпе сделать автоматически а нагуглил вот что. Есть консольная утилитка convert, часть пакета imagemagick, я даже когда-то давно ей пользовался но забыл уже про это. Она замечательно с этой задачей справляется.

ставим imagemagick
sudo apt-get install imagemagick
это у нас ман по конверту, ага
man convert
идем в папку с файлами из которых будем лепить спрайт
cd 4sprite-test/
ls
facebook.png  github.png  google.png  twitter.png
теперь берем и все эти файлы склеиваем вот так
convert *.png +append sp-big.png
ls
facebook.png  github.png  google.png  sp-big.png  twitter.png
если надо ещё и изменить размер исходных файлов то делаем так
convert *.png -resize 64x64 +append sp-med.png
Думаю даже не надо пояснять что к чему, все понятно из ключей к конверту. Единственное что в примере под маску попадают все файлы *.png в папке. И если оттуда не убрать сгенеренный спрайт то при повторном запуске в новый созданный спрайт он попадет тоже. Повнимательнее с рекурсией и маской:)

з.ы. Ещё стоит помнить что конверт умный, по расширению результирующего файла определяет результирующий тип файла, соот-но если вы например из png склеите jpg то логично потеряете прозрачность.


Это полная ерунда понятное дело, но я забываю постоянно. Поэтому законспектирую.
# для файла совсем просто
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
Ну вот примерно так. Прошу не воспринимать эту заметку как полное руководство к действию, вполне возможно что для вашего случая все будет значительно отличаться. Но возможно это как-то поможет или хотя бы наведет на мысли в нужном направлении :) Успехов!

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


aghr