Архив рубрики: Администрирование

Bash скрипт для удаления старых файлов

Существует много решений в Linux по хранению бэкапов. Есть и готовые решения в виде программ, есть скрипты.
Так уже получилось, что бэкапы складывать в определенную папку задача не сложная (архиватор + cron) но как следить чтобы архивы не плодились? Опять же, есть готовые решения, но я предпочитаю самому управлять процессом. Простой скрип на bash решает проблему удаления старых бэкапов. Например, когда надо, чтобы хранились последние 5 копий, удаляются самые старые файлы бэкапов, а 5 новых остается.
Скрипт не блещет гениальными решениями, более того, я уверен, что это можно было сделать проще, но я как новичок в баше сделал это вот так:

#!/bin/bash

#Проверяем количество входных параметров
if [ $# -lt 3 ]
then
 echo Something wrong with parameters
 exit
fi

x=1  # Счетчик файлов
path=$1 # Путь к удаляемым файлам
filemask=$2 # маска файлов
keep=$3 # сколько файлов (бэкапов) надо оставлять

for i in `ls -t $path/$filemask`
        do
          if [ $x -le $keep ]
                then
                ((x++))
                continue
          fi
        rm $i
  done

Запускаю этот скрипт в кроне раз в неделю, например, с такими параметрами:

/etc/rotate.sh /var/backup/ etc* 3

Это значит что самые старые файлы, начинающиеся с etc в папке /var/backup, кроме трёх самых свежих, будут удалены.

Тонкий клиент на базе Linux Xubuntu

Давно хотел попробовать бесплатную ОС для работы в терминале. Выбирал между Lubuntu и Xubuntu. остановил свой выбор на последней, т.к. Lubuntu еще не входит в список основных дистрибутивов Ubuntu, а это значит что в нем еще что-то не устраивает команду одного из самых дружественных Linux.
Итак, конфигурация компьютера:

  • Процессор Pentium-III 500Mhz
  • ОЗУ 384Mb
  • HDD есть какой-то 🙂

Да, тонкий клиент получился чуть толстоват, но зато можно локально работать в интернете и при желании даже с офисными документами.
После установки ОС, обновления пакетов и установки rdesktop всё работает отлично.
Добавляем rdesktop в автоматическую загрузку, получаем просто отличнейший тонкий клиент для терминального доступа к Windows серверу на базе бесплатной ОС Linux Xubuntu.

Как отключить автозапуск дисков в Windows

Как и обещал в статье о Лечение “вируса” usb.wsf опишу метод гарантированного отключения автозапуска (autorun) съемных и сетевых дисков в Windows.
Для чего это надо? Во-первых, для меня это изначально было сомнительным удобством, я бы даже сказал напрягало всегда то, что после ставки диска/флэшки появлялось окно с выбором действий или просто молча поверх остальных окон появлялось окно с содержимым диска/флэшки. Во-вторых, с появлением различных autorun-вирусов это стало реальной проблемой, особенно если есть локальная сеть.
Можно через редактор реестра, а можно через импорт в реестр этого файла.
Этот файл в реестре меняет следующие строки:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\IniFileMapping\Autorun.inf]
@="@SYS:DoesNotExist"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\Explorer]
"NoDriveTypeAutoRun"=dword:000000DF

Первая строка

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\IniFileMapping\Autorun.inf] @="@SYS:DoesNotExist"

заменяет в реестре значение файла Autorun.inf на значение «не существует» и система просто не воспринимает эти файлы.

Вторая строка

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\Explorer] "NoDriveTypeAutoRun"=dword:000000DF

отключает автозапуск всем дискам, кроме CD-ROM’a
Значение DF формируется из следующих данных:

0x01 (DRIVE_UNKNOWN) — привод, тип которого не может быть определен
0x02 (DRIVE_NO_ROOT_DIR) — диск с невалидным корнем (сетевые “шары”?)
0x04 (DRIVE_REMOVABLE) — съемный диск (дискеты, флешки)
0x08 (DRIVE_FIXED) — несъемный диск (жесткий диск)
0x10 (DRIVE_REMOTE) — сетевой диск
0x20 (DRIVE_CDROM) — CD-привод
0x40 (DRIVE_RAMDISK) — виртуальный диск (RAM-диск)
0x80 (DRIVE_FUTURE) — будущие типы устройств

Сумма всех этих значений равна 0xFF, но 0xFF0x20 = 0xDF и таким образом оставляем автозапуск для CD-привода.

Как создать файл с именем равным текущей дате и времени

Чтобы создать из командной строки файл с именем равным текущей дате и времени создадим cmd файл с таким содержимым:

rem @echo off

set dd=%DATE%
set tt=%TIME%

set /a ddd=%dd:~0,2%
IF %ddd% LSS 10 (
  SET day=0%ddd%) else (
  SET day=%ddd%)
set month=%dd:~3,2%
set year=%dd:~6,4%

set /a ttt=%tt:~0,2%

IF %ttt% LSS 10 (
  SET hour=0%ttt%) else (
  SET hour=%ttt%)
 
SET minute=%tt:~3,2%
SET sec=%tt:~6,2%
   
echo %day% %month% %year% %hour% %minute% %sec%

copy nul %day%%month%%year%_%hour%%minute%%sec%.txt

Необходимо помнить, что получение даты и времени зависит от региональных настроек Windows. Поэтому первая строка закомментирована для возможности смотреть на результат каждой команды.
Рассмотрим команды.

  • В переменные dd и tt получаем текущую дату и время.
  • В переменную ddd из переменной с датой dd получаем теекущее число. Команда %dd:~0,2% значит взять из переменной dd 2 символа с начала строки (0 это первый символ строки). Например, на моем компьютере числа всегда двучначные и я не нуждаюсь в такой проверке и эта конструкция у меня заменяется на команду set day=%dd:~0,2%
  • Далее с 7 по 9 строку кода идет проверка текущего числа. Если число меньше 10, то начале числа добавляем символ 0. Это надо на случай если у нас дата выглядит например так: 1.12.2010. Чтобы все составляющие даты были одинаковой длины. Тут же получаем готовую переменную day, в которой хранится значение текущего числа
  • Строка 10. В переменную month из dd получаем текущий месяц. Берем два символа, начиная с третьего. Здесь можно так же как и с числом сделать проверку на меньше или больше 10. Но у меня почему-то на всех компах месяц всегда двузначный. Но этот момент надо учитывать.
  • Строка 11. В переменную year из dd получаем текущий год. Для этого берем 4 символа, начиная с шестого. Вообще с какого символа брать и сколько символов надо брать, легко отследить после команд из 3 и 4 строк кода. После выполнения cmd файла смотрим какие строки выдает ОС и отсчитываем с какого символа идет число, месяц и год.
  • Со строки 13 по 20 описаны аналогичные действия по получению текущего времени в переменные hour, minute и sec.

Приготовления закончены, команда в строке 22 выводит полученные значения. Если всё выводится корректно, то можно приступить к созданию файла.
Команда

copy nul %day%%month%%year%_%hour%%minute%%sec%.txt

создает пустой текстовый файл 09092010_102428.txt
Для создания архивов я обычно делаю чтобы год был в начале имени файла, затем месяц, а уже потом число. Это удобно для сортировки архивов.

copy nul %year%%month%%day%_%hour%%minute%%sec%.txt

Результат такой команды: 20100909_102441.txt

Как узнать размер и дату файла из командной строки

Супер мини статья 🙂

Простейший способ получить размер файла из командной строки Windows:

for %I in (file.ext) do echo %~zI

из хелпа по команде For в Cmd:


%~zI - переменная %I расширяется до размера файла

Аналогично для даты (модификации) файла:

for %I in (file.ext) do echo %~tI

из хелпа по команде For в Cmd:


%~tI - переменная %I расширяется до даты /времени файла

А вообще команда for /? очень полезная.

Отправка электронного письма из командной строки Windows

Отправка электронного письма из командной строки Windows

Возникла необходимость отправлять данные через почтовый сервис, но чтобы не загружать пользователя ненужными действиями решил прибегнуть к консольной утилите для отправки e-mail под Windows — blat
Т.к. для отправки письма по протоколу SMTP без аутентификации уже не обойтись, то я для себя составил такой формат командной строки и вывел его в пакетный cmd файл:

blat.exe -server server.ru -f e-mail-from@server.ru -u e-mail-from@server.ru -pw pass  -to e-mail-to@server.ru -subject SUBJ -body "Текст сообщения" -attach FILE

Немного пояснений:

  • -server server.ru — сервер Исходящей почты. Несмотря на то, что мы отправляем из командной строки, но сервер, с которого будет уходить письмо, должен быть!
  • -f e-mail-from@server.ru — адрес отправителя. Как и в случае с сервером. Письмо должно быть от кого-то 😉
  • -u e-mail-from@server.ru — имя пользователя (логин) для сервера Исходящей почты. Используется для упомянутой выше SMTP аутентификации. В моем случае логин должен состоять из имени пользователя на сервере (то есть имя@сервер), это зависит от сервера. На других серверах может быть просто e-mail-from
  • -pw pass — пароль для той же аутентификации.
  • -to e-mail-to@server.ru — адрес получателя
  • -subject SUBJ — тема письма. Должна быть в кавычках, если есть пробелы!
  • -body "Текст сообщения" — текст письма. Должен быть в кавычках, если есть пробелы!
  • -attach FILE — собственно то, ради чего это всё я затеял. Путь к файлу и имя файла FILE 🙂

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

ODBC из командной строки Windows

ODBC алиас из командной строки Windows
В этой статье хочу рассказать как просто создать ODBC из командной строки в Windows XP.
ODBC строки подключения бывают Пользовательские, то есть доступны для текущего пользователя; Системные — доступны для всех пользователей компьютера и Файловые. Я использую системные. Для чего вообще нужно создавать из командной строки? Ведь можно просто зайти в Панель управления — Администрирование — Источники данных (ODBC) и создать нужное соединение с базой вручную. Да, совершенно верно, можно и так. Но! Если у вас много компьютеров? А если вы передаете свой дистрибутив программы заказчику на самостоятельную установку? Проще делать это из командной строки.
Читать далее ODBC из командной строки Windows