Архив за месяц: мая 2013

Как вывести конфигурационный файл без пустых строк и комментариев в Linux

Довольно-таки часто в работе бывает необходимо вывести содержимое конфигурационного файла без пустых строк и комментариев в Linux. Это можно сделать такой последовательность команд:

# cat /etc/my.cnf |sed '/^$/d' |grep -v "#" |more

Можно заменить # на любой другой символ комментария, например ;

Логирование консоли в Linux

Постоянно работая с консолью в Linux необходимо логировать свои действия, чтобы потом можно было вернуться и составить отчет. Чтобы просмотреть историю введенных команд существует команда:

# history

Но она не покажет вывод. Для подобных целей я пользуюсь командой:

# script -a /path/to/file.log

Script started, file is /path/to/file.log

Далее работаем в консоли с логированием. В конце работы выходим из консоли, как обычно, но только появится сообщение типа:

Script done, file is /path/to/file.log

Теперь у на есть лог ;)

Исправить проблемы с консолью reset

Иногда просматривая бинарные файлы из консоли возникает ситуация, когда консоль “ломается”:
появляются странные символы, вместо нормальных символов появляются какие-то иероглифы, иногда возникают даже звуковые сигналы или странные смешения цветов. Вообщем работать дальше в такой консоли становится невозможно. Чтобы исправить подобную проблему используйте команду:

# reset

Linux find поиск файлов измененных в интервале дат

Часто возникает необходимость найти файлы измененные в определенном интервале времени. Например, измененные сегодня:

# find /dir -type f -mtime -1

Точно n дней назад:

# find /dir2 -type f -mtime n

Измененные более m дней и удалить их:

# find /dir3 -type f -mtime m -exec rm -fv {} /;

Linux rsync: создание и перенос бекапа файлов и папок через ssh

Довольно часто возникает задача перенести сайт с одного сервера на другой. Обычно к обеим серверам есть ssh доступ. Эту задачу помогает эффективно решить утилита rsync.

Пример использования и описание используемых в примере опций ниже:

# rsync --progress -a -e "ssh" user@host:/var/www/vhosts /var/www/

–progress show progress during transfer
-a, –archive archive mode; equals -rlptgoD (no -H,-A,-X)
-e, –rsh=COMMAND specify the remote shell to use

-r, –recursive recurse into directories
-l, –links copy symlinks as symlinks
-p, –perms preserve permissions
-t, –times preserve modification times
-g, –group preserve group
-o, –owner preserve owner (super-user only)
-D same as –devices –specials
–devices preserve device files (super-user only)
–specials preserve special files

-H, –hard-links preserve hard links
-A, –acls preserve ACLs (implies -p)
-X, –xattrs preserve extended attributes

Linux безопасное копирование файла через ssh scp

Часто возникает необходимость скопировать файл с одного сервера на другой. В Linux это можно сделать командой:

# scp /file/to/copy.zip user@host:/where/to/store/

Команда указанная выше позволит скопировать файл /file/to/copy.zip на сервер host с правами пользователя user в папку /where/to/store/ (если она существует и у пользователя достаточно прав, чтобы это сделать. Откуда и куда можно поменять местами. Все доступные опции команды scp читайте на man странице.

Linux find xargs grep: найти текст в php файлах

Часто возникает необходимость найти какой-либо текст в проекте в php-файлах. Для этого я пользуюсь командой:

# find /var/www/html/ -type f -iname '*.php' -print0 | xargs -0 grep "some text"

Не буду описывать значения всех опций очень подробно (для этого есть страницы справки man find, man xargs и man grep), но вкратце это сочетание команд означает: найти все php-файлы без учета регистра, даже если в имени папки или файла будут пробелы, команда не завершится с ошибкой, что файл не найден. Провести поиск искомой строки, и если она будет найдена – вывести имя файла.

Linux найти файлы, которые изменялись в диапазоне дат

Часто возникает необходимость найти файлы в Linux, которые изменялись в диапазоне дат.
Для этого можно воспользоваться такими командами:

1. Создать файл-метку начала диапазона дат:

# touch --date "2012-10-01" ~/tmp/2012-10-01.txt

2. Создать файл-метку конца диапазона дат:

# touch --date "2012-10-08" ~/tmp/2012-10-08.txt

3. Найти все файлы, которые изменялись в диапазоне дат:

# find ~ -type f -newer ~/tmp/2012-10-01.txt -not -newer ~/tmp/2012-10-08.txt

Как создать zip архив с паролем в Linux

Иногда в работе с Linux возникает необходимость запаковать файлы с паролем в zip. Можно сделать это командой:

# zip -e secret_archive.zip secret_filename.txt
Ener password:
Verify password:
adding: secret_filename.txt (deflated 2%)

Вот и все.

Распаковываем архив Linux shell tar

В предыдущем посте мы создали архив backup.tar.bz2. Теперь, мы его скопировали на нужный сервер, переходим в папку и распаковываем командой:

# tar xjvf backup.tar.bz2

Мы используем такие ключи программы tar:
Extract from archive – x – разархивировать.
Use bzip2 decompression – j – использовать алгоритм bzip2.
Be verbose – v – показывать распаковываемые файлы и папки.
File name to extract from – f – имя файла.

В результате выполнения команды мы получим все запакованные файлы и папки, которые были на другом сервере, с которого мы делали перенос, включая те же права доступа – поскольку при архивировании мы использовали ключ p.

Архивируем файлы сайта. Linux bash tar bzip

В работе часто возникает необходимость что-либо заархивировать, чтобы потом можно было восстановить из бекапа.

В Linux (unix) есть много различных архиваторов, но я отдаю предпочтение tar с методом сжатия bzip2.

Пример команды на архивирования всего в текущей папке:

# tar cpjf /backup.tar.bz2 ./

Manual page tar хорошо и подробно описывает все возможные методы архивирования. Я лишь кратко расскажу, что делает команда из моего примера.
Create archive – c – создать архив.
Preserve permissions – p – с сохранением установленных разрешений на папки и файлы.
Use bzip2 compression – j – использовать метод сжатия bzip2.
File name – f – имя файла, куда сохранить бекап нужно указать после пробела. Желательно сохранять архив в другую папку в моем примере это файл в корне системы / с именем backup.tar.bz2
Архивировать все, что находится внутри текущей папки ./