linux полезные команды


// перенос с удаленного сервера на локальный (pull) recursive, verbose, compress, human readable, archive mode, progress
// В rsync слеш на конце имеет значение - будет выгружено содержимое директории.
rsync -vrzhaP man@site.ru:www/sitedir/site.ru site.local
// тоже самое scp
scp user@site.ru:www/sitedir/site.ru site.local
// скачать пропуская существующие файлы, и исключить директорию upload, cache
rsync --ignore-existing --exclude "upload" --exclude "cache"
// если нет ssh, есть ftp. Закачать с локального на удаленный (ключ -R)
lftp -e 'mirror -R local/ /home/user/remote/ ' -u user,PassWorD dev10.ru
// скачать с удаленного на локальный
lftp -e 'mirror  remote/ local/ ' -u user,PassWorD dev10.ru
//  скачать/закачать исключая некоторые директории, а также пропуская уже существующие
mirror --only-newer --exclude "upload/" --exclude "bitrix/cache/"
// монтировать фтп сервер как локальный для манипуляции с файлами
curlftpfs ftp.server.ru /mnt/ftp/ -o user=username:password

// поиск в файле 
grep 'string' path/to/file/file.txt 
// поиск в директории 
grep -r 'string' dir 
//поиск с подсчетом строк 
grep -oni 'string' file.txt | wc -l 
// поиск по части файла
sed -n 5000,5005p error.log | grep 'size'
// копирование, перемещение 
cp -r my/dir new/dir 
mv old/dir new/dir 
// символическая ссылка 
ln -s /path/to/link link_name 
// быстро заменить в файле строку 
sed -i 's/string/new_string/g' file.txt 
// удалить всю строку содержащую текст 
sed -i '/some string/d' file.txt 
// bitrix поиск измененных файлов за 22-е число, исключая папки кеша 
find . -type f ! -path "*/cache/*" ! -path "*/managed_cache*" ! -path "*/upload/*" ! -path "*/html_pages/*" -ls |grep 'мая 22' > may22_bez_cache.log 
// дамп БД с сжатием 
mysqldump -u user -pupasswd my-database | gzip > one.sql.gz 
// импорт сжатой бд 
gunzip < myfile.sql.gz | mysql -u root -p 
mydb zcat /path/to/file.sql.gz | mysql -u 'root' -p your_database 
// быстро просмотреть строки от n - m 
sed -n '500,505p;' backup.sql 
// импорт части файла в бд
sed -n 101,110p filename > /tmp/mysql.pipe & mysql –uusername -p -Ddatabasename 
// просмотр архива 
tar -tf archive.tar.gz 
// сортировка вывода по 5 колонке 
ls -la | sort -k 5 
// вывод прогресса с помощью pv , tee 
unzip -q upload.zip | pv -l > /dev/null 
// быстро закачать файл по протоколу webdav 
curl -T backup.tar -umyname:mypass https://webdav.yandex.ru/dir | tee /dev/null 
// быстро скачать файл по webdav
curl --user <username>:<password> -o filename https://webdav.yandex.ru/filename
// продолжить прерванную скачку (опция -с)
wget -r -nH -np -c --cut-dirs=1 --no-check-certificate -U Mozilla --user=user@site.ru --password='123passs_w_d456' webdav.yandex.ru/backups/2000-03-10/site.ru_files-2000-03-10--01-03.tar.gz 
// монтировать webdav как файловую сист. (утилита davfs2)
mount -t davfs http(s)://addres:<port>/path /mount/point
// поделить файл на части и вывести n-й столбец. awk по сути это split. 
awk -Fuser '{print $2}' /var/log/auth.log 
// вывести имена файлов в столбик, без атрибутов
ls -1 admin_*
// распаковать конкретную папку 
unzip archive.zip /path/need/extract 
tar -xzf archive.tar.gz /path/need/extract 
// распаковать в конкретную папку (ключ -C) 
tar -xzf archive.tar.gz -С /path/to/ /path/need/extract 
// распаковать пропуская существующие ( --keep-old-files)
tar -k some.tar
// вывести 5 самых крупных директорий 
du -h some/dir/path | sort -nr | head -n 5 


// быстро создать несколько файлов
array=(header.php footer.php styles.css template_styles.css description.php);for i in ${array[@]};do touch $i;done;
// битрикс бэкап
cat *.tar.gz* >> mysite_backup.tar.gz
// рекурсивно заменить строки. ключ -l выводит совпадения списком
grep -rl oldtext . | xargs sed -i -e 's/oldtext/newtext/g'
// сжать картинки формата png
for i in some/dir/*.png; do optipng  -p "$i" ; done;
// сжать картинки формата jpg 
for i in some/dir/*.jpg; do jpegoptim -p "$i" ; done; 
// сжать css
for i in *.css; do cleancss -o `echo $i | sed  's/css/min\.css/g'` $i ; done;
// сжать js
uglifyjs -o script.min.js script.js

// убить процессы 1 дневной давности
killall -o 1d php
// размер дискового пространства
ncdu /media/aaa/part1
// вывести рекурсивно последние измененные файлы(напр. для поиска вирусов)
find $1 -type f -exec stat --format '%Y :%y %n' "{}" \; | sort -nr | cut -d: -f2- | head
// поиск файлов по пользователю
find /dir/ -user aaa -type d
// Скачать гит репозиторий без Гита
wget --no-check-certificate --content-disposition https://github.com/joyent/node/tarball/v0.7.1
# --no-check-cerftificate was necessary for me to have wget not puke about https
curl -LJO https://github.com/joyent/node/tarball/v0.7.1

проверка сервера на bash

Мониторить сервер можно так: создадим bash-скрипт, который будет проверять ответ заголовков с помощью curl. Ответ сохраню в temp файле. При ошибке отправлю письмо.

 
#!/bin/bash

tmp_file=$(mktemp)
# параметр -L делает переход по редиректам
curl -I -L 'phpjs.ru' >> tmp_file
resp=$(cat tmp_file) 
if [[ "${resp}" == "" ]]; then
	#statements
	echo 'err resp var not founded!!'
	#exit 1
fi
rm -rf tmp_file

if echo "${resp}" | grep 'HTTP/1.1 200 OK' > /dev/null  ; then
	echo 'GOOD!'
	#exit 0
else
	/usr/bin/php -r "echo(mail( 'recipient@mail.ru' , 'server not working' , 'server not working' , 'From: sender@gmail.com'));"
	/usr/sbin/sendmail -t 'recipient@mail.ru' < /home/user/mail.txt
	echo 'error!'
	#exit 1
fi

И запись в крон


0 * * * * sh /home/user/check_server.sh > /dev/null

не забываем


service crond restart

Cron

Добавляем запись в крон.


crontab -e

// для centos
crontab /etc/crontab

Сама команда задается в таком формате

минута час день_месяца месяц день_недели команда



Напишу пример на ночной крон без сохранения вывода
(далее…)