PostgreSQL
coub
express.js
freeware
git
jquery
laravel
links
linux
macos
mysql
node.js
php
powershell
python
ubuntu
vim
virtualbox
анекдот
блог
игры
интересно
стихи
цитаты
Linux: как быстро создать структуру папок
November 19, 2013
Врядли это для кого-то открытие конечно, но тем не менее.
У mkdir (man mkdir) есть ключик -p который позволяет создавать довольно интересные структуры подпапок одним движением. Например
Можно сделать несколько интереснее
У mkdir (man mkdir) есть ключик -p который позволяет создавать довольно интересные структуры подпапок одним движением. Например
mkdir -p ./one/two/threeсоздаст три вложенных друг в друга папки внутри текущей директории.
Можно сделать несколько интереснее
mkdir -p ./one/{two1,two2,two3}/threeчто даст нам такую структуру (допустим что мы запускали это все из домашней папки)
~/one/two1/three ~/one/two2/three ~/one/two3/threeНу и ещё раз если вдруг кто не понял что происходит
mkdir -p ./one/{two1,two2,two3}/{th1,th2,th3}Создает такую структуру
~/one/two1/th1 ~/one/two1/th2 ~/one/two1/th3 ~/one/two2/th1 ~/one/two2/th2 ~/one/two2/th3 ~/one/two3/th1 ~/one/two3/th2 ~/one/two3/th3Ну и понятное дело фигурные скобки можно использовать не только с mkdir, в этом примере мы чистим папки с кешем и логами для трех типовых проектов лежащих в текущей папке
#!/bin/bash rm -rf {proj1,proj2,proj3}/{logs,cache}/*
Как посчитать количество строк в файлах
April 21, 2013
Пример рекурсивно ищет файлы с расширением .php в выбранной директории, читает их и считает в них строки.
cd ~/projects/project find . -type f -name *.php -exec cat {} \; | wc -l
Ubuntu: как получить PID запущенного процесса
March 26, 2013
Маленькие "хитрости" bash. На примере перезапуска приложения node.js
Из переменной (правильно называть это переменными??) $$ - можно получить PID текущего скрипта, то есть если вы планируете в нем зависнуть то имеет смысл положить куда-то PID-файл чтобы потом что-то с этим процессом делать. Баш вообще интересная штука, жаль почти не остается времени на глубокие раскопки в этих шаманствах.
#!/bin/bash # чтобы было легче жить, добавим все нужные пути в переменные DAEMON="/usr/local/bin/node" ROOT_DIR="/home/user/project-copy-folder" # тут на основании базовых путей выставляем пути к файлам PID, # логов и скрипта, запускающего само приложение PIDFILE="$ROOT_DIR/pidfile" SERVER="$ROOT_DIR/app.js" LOG_FILE="$ROOT_DIR/app.js.log" # останавливаемся, обратите внимание на то, как получается и обрабатывается PID echo -n "Stopping $SERVER: " kill -9 $(cat $PIDFILE) && echo 'ok stoped' || echo 'error on stop my-funny app' # чистим логи и убираем старый PID (это опционально) >$LOG_FILE >$PIDFILE # стартуем. тут самое как мне кажется, непонятное — это конструкция echo $! > $PIDFILE # здесь $! это PID последнего запущенного приложения (читаем ман по bash), с пониманием # этого нюанса становится понятно все остальное echo -n "Starting $SERVER: " `$DAEMON $SERVER > $LOG_FILE & echo $! > $PIDFILE &` && echo 'ok, started' || echo 'error on start my-funny app'Интересная особенность как мне показалось состоит в том, что если мы выполним например вот такой код
/usr/local/bin/node /home/user_name/project/app.js & echo $!То увидим напечатанный PID. А вот если исполнить тоже самое, но через eval
NODE='/usr/local/bin/node' APP='/home/user_name/project/app.js' `$NODE $APP &` echo $!То не увидим ничего. То есть eval где-то у себя это значение закусывает и нам оно нормально не доезжает. Соответственно решением (скорее всего одним из решений, так как я никакой не специалист по bash), будет получение PID-а прямо внутри этого самого eval-a как показано в первом примере.
Из переменной (правильно называть это переменными??) $$ - можно получить PID текущего скрипта, то есть если вы планируете в нем зависнуть то имеет смысл положить куда-то PID-файл чтобы потом что-то с этим процессом делать. Баш вообще интересная штука, жаль почти не остается времени на глубокие раскопки в этих шаманствах.
Ubuntu: как запустить скрипт от имени другого пользователя
March 24, 2013
Мне это понадобилось для автоматического подъема сервиса после внештатной перезагрузки сервера.
Как всегда, все просто:
Как всегда, все просто:
su USER -c '/home/USER/folder/script.sh'Собственно man su рассказывает всё в примерах.
su man -c catman # Runs the command catman as user man. You will be asked for man's password unless your real UID is 0. su man -c 'catman /usr/share/man /usr/local/man' # Same as above, but the target command consists of more than a single word and hence is quoted for use # with the -c option being passed to the shell. (Most shells expect the argument to -c to be a single word). su -l foo # Simulate a login for user foo. su - foo # Same as above.
Как восстановить пароль в Ubuntu
March 06, 2013
Наконец это случилось и со мной. Я умудрился забыть пароль от ноута.
Слава зайцам восстановить доступ в убунте довольно просто. Я раза с третьего нагуглил нормальное решение.
На всякий случай здесь тоже напишу.
Слава зайцам восстановить доступ в убунте довольно просто. Я раза с третьего нагуглил нормальное решение.
На всякий случай здесь тоже напишу.
- При загрузке системы удерживая 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!