Администрирование
Поиск в unix. Часть 1
Написал Алхимик   
Среда, 20 Июль 2005

Программа поиска «find» является одной из самых полезных утилит, всегда находящихся в любой UNIX-системе.

В этой статье я расскажу вам о синтаксисе команды find и продемонстрирую ее применение на нескольких практических примерах.

Сама по себе команда find имеет очень простой синтаксис:

find где_искать ключи

Часть команды, которую мы назвали «ключи», на первых порах может показаться вам запутанной.

(0 Комментарии)

Подробнее...
 
Резервное копирование баз MySQL
Написал Алхимик   
Вторник, 19 Июль 2005

Вы работаете над веб-проектом, в котором используется СУБД MySQL. Конечно, каждый серьезный проект предполагает, что периодически будет создаваться резервная копия всех данных, используемых в работе. Это де факто стандартный подход. Более того, без этого невозможно гарантировать посетителям сайта бесперебойность работы Вашего ресурса. В случае, если сайт предоставляет коммерческие услуги, наличие резервного копирования является просто-таки жизненной необходимостью.

Вообще, почти все хостинг-провайдеры производят резервное копирование всех файлов пользователей. Однако, не стоит забывать о том, что провайдеры делают backup, в основном, для себя, на случай аварии у себя. Именно по этой причине пользователи в условиях хостинга могут, конечно, рассчитывать на восстановление в случае удаления каких-то данных по вине самого пользователя, но вовсе не факт, что провайдер сделает восстановление MySQL-базы сразу по получению запроса. Лучше делать для себя копию и в случае чего ее использовать. Можно даже периодически копировать этот свой backup на другую, не провайдерскую машину - так надежнее, на всякий случай.

Сделать копию всех статических HTML- и прочих документов просто. Так же несложно периодически "откладывать в сторонку" и копии скриптов. Гораздо более сложной представляется задача создания копии (далее backup) такой динамичной структуры, как база данных MySQL. Основные трудности, которые возникают перед администратором размещенного на хостинге сайта, обычно бывают такие:

1. Отсутствие физического доступа к файлам базы данных. Как правило, провайдеры хостинга предоставляют возможность работы с базой данных только через скрипты или специальный mysql-клиент, но не дают прав на доступ непосредственно к файлам, в которых содержатся данные из MySQL-базы.

2. Отсутствие у администратора знаний о том, как вообще надо делать backup. Обычно такая задача возникает только, когда "клюнул жареный петух". То есть, в случае аварии, вторжения хакеров или в других внештатных ситуациях. Веб-мастеры просто не готовы к немедленному backup и начинают судорожно изучать документацию по MySQL, а время идет...

3. В случае, если веб-мастер не владеет в достаточной мере навыками работы со специализированными утилитами из пакета MySQL, могут возникать трудности, связанные с ограничениями, налагаемыми хостинг-провайдером на пользовательские аккаунты. Например, если база очень большая и ее размер превышает лимит на доступную пользователю память (RAM), backup сделать будет сложно. Нужно пользоваться тонкими настройками утилит резервного копирования, что иногда тоже вызывает трудности на практике.

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

Как сделать копию базы MySQL mysqldump, позволяющая быстро и просто производить операции по созданию резервных копий баз MySQL. Также mysqldump дает возможность делать очень тонкие настройки для управления процессом создания резервных копий баз данных или отдельных таблиц. Можно сказать, что mysqldump - это основной инструмент, которым Вам придется пользоваться в том случае, если Вы будете делать backup MySQL.

Существует программа

Сразу возьмем простую задачу, которую будем решать с помощью mysqldump, и разберемся, что к чему. Есть хостинг, есть база данных DBNAME, которую выделил Вам хостинг-провайдер. Есть хост HOST, на котором размещен сервер MySQL, логин LOGIN к нему, порт PORT, на котором работает сервер, а также пароль PASS. Имея все эти данные, можно сделать dump (дамп, копию) базы DBNAME так (выполняем в unix shell):

> mysqldump -uLOGIN -PPORT -hHOST -pPASS DBNAME > dump.txt

После выполнения данной команды в файле dump.txt у нас будет копия MySQL-базы DBNAME. Это произойдет только в том случае, конечно, если все параметры Вы зададите верно, в соответствии с настройками своего хостинга. Сразу нужно сказать, что программа mysqldump производит вывод результатов прямо Вам на STDIN, то есть, на экран. Нужно перенаправлять вывод в какой-либо файл. Например, как в данном случае - " > dump.txt ". Если этого не сделать, а база большая, Вы получите на экран все те мегабайты информации, которые в ней содержатся.

Немного расскажем о том, что же делает mysqldump. Эта программа создает сценарий восстановления Ваших данных. То есть, вывод mysqldump - это не какие-то абстрактные и нечитаемые двоичные данные, а осмысленный текст сценария. Например, если в Вашей базе была таблица test, в которой было поле test2 с типом данных integer и одна-единственная запись "1111", то mysqldump создаст примерно такой сценарий:

# MySQL dump 8.14
#
# Host: HOST Database: DBNAME
#--------------------------------------------------------
# Server version 3.23.39-log

#
# Table structure for table 'test'
#

CREATE TABLE test (
 test2 int(11) default NULL
) TYPE=MyISAM;

#
# Dumping data for table 'test2'
#

INSERT INTO test2 VALUES ('1111');

Таким образом, mysqldump "опишет" все Ваши таблицы и создаст INSERT-команды для восстановления данных в таблицах. Итак, мы перенаправляем вывод mysqldump в текстовый файл, который потом будем использовать для восстановления. Рассмотрим и этот процесс - воссоздание базы из резервной копии.

Для восстановления будем пользоваться стандартной программой mysql, которая входит в комплект поставки MySQL наряду с mysqldump. Допустим, у нас имеется backup в файле dump.txt. Нам нужно восстановить его в рабочую базу. Например, мы случайно удалили нашу базу данных, а теперь пытаемся исправить эту незадачу. Делаем так :

> mysql -uLOGIN -PPORT -hHOST -pPASS DBNAME < dump.txt

То есть, заставляем mysql-клиент соединиться с сервером и выполнить сценарий, который у нас имеется. После выполнения этой команды в Вашей базе появятся таблицы и данные из резервной копии. Учитывайте то, что данные будут просто восстанавливаться по сценарию из dump.txt. То есть, если таблицы, которые упоминаются в дампе базы, уже существуют и имеют другую структуру, тут явно возникнет ошибка. Просто посмотрите на сценарий и на рабочую базу и представьте, что Вы вручную выполняете команды из сценария. Если уверены, что все будет хорошо - смело восстанавливайте.

Рассмотрим более тонкие настройки mysqldump:

  • --databases позволяет сделать так, что mysqldump включит в сценарий восстановления команды CREATE DATABASE /*!33333 IF NOT EXISTS*/ DBNAME и USE DBNAME. Это позволит создавать рабочие базы "с нуля". То есть, без использования --databases подразумевается, что пользователь восстанавливает одну базу данных и явно указывает, куда нужно помещать восстанавливаемые данные. Если же backup создается с целью сделать полностью рабочую копию данных, например, на другом MySQL-сервере, то нужно использовать этот ключ;
  • --all-databases позволяет сделать копии всех баз данных, которые существуют на данном MySQL-сервере. Если же нужно сделать копии только некоторых баз, нужно просто указать их через пробел при вызове mysqldump из командной строки (см. выше);
  • Ключ --help. Программа mysqldump имеет множество версий. Посмотреть, какие возможности поддерживаются конкретно Вашей версией, можно с помощью этого ключа;
  • --add-drop-table - ключ, который заставит mysqldump добавлять в итоговый сценарий команду drop table перед созданием таблиц. Это позволит избежать некоторых ошибок при восстановлении базы из резервной копии. Конечно, нужно учитывать то, что таблицы, находящиеся в рабочей копии (если таблицы с таким же именем существуют в backup), перед восстановлением из резервной копии будут удалены из основной базы и пересозданы из backup;
  • --no-data. С помощью этого ключа можно быстро сделать копию структуры таблицы/баз без самих данных. Например, Вы создали сложную таблицу и хотели бы сохранить на будущее ее структуру, а сами данные, которые находятся в этой таблице, Вам в резервной копии не нужны;
  • --result-file=... - этот ключ можно использовать для перенаправления вывода в файл. Можно использовать обычное unix-перенаправление командой ">", а можно - вот этот ключ. Кому что нравится;

Кроме перечисленных ключей mysqldump имеет и еще некоторое количество очень полезных возможностей, которые Вы можете применять по обстоятельствам.

Еще один очень полезный совет по использованию mysqldump в хостинговой среде. Как правило, при использовании хостинга на пользователя налагаются некоторые ограничения. Например, нельзя занять больше некоторого количества физической памяти (RAM, ОЗУ). mysqldump по умолчанию помещает все полученные от MySQL-сервера данные в память, а потом записывает все это на диск. Соответственно, если провайдер дает Вам занять, например, 30Мб памяти, а база, копию которой Вы делаете с помощью mysqldump, занимает 50Мб, конечно, тут возникнет ошибка - mysqldump не сможет отработать корректно и завершится аварийно, о чем Вам сообщит. Чтобы "заставить" mysqldump писать данные сразу на диск, а не хранить их, пусть даже и временно, в памяти, используйте ключ --quick. Это решит проблему.

Автоматизация резервного копирования

Теперь подумаем, как бы нам автоматизировать процесс создания резервных копий базы данных. Итак, существует программа - cron. Она позволяет запускать процессы в указанное пользователем время или с определенной периодичностью. Сразу оговоримся - cron в общем случае существует только под Unix, так что, если Вы используете для хостинга ОС Windows, проконсультируйтесь со своим хостинг-провайдером о том, как лучше запускать процессы в нужное время. Да и вообще, пожалуй, этот пункт будет интересен только unix-пользователям.

В unix shell запускаем crontab -e и создаем такое правило запуска процесса создания копий базы:

0 0 * * * mysqldump -uLOGIN -PPORT -hHOST -pPASS DBNAME | gzip -c > `date "+%Y-%m-%d"`.gz

Эта команда, запускаясь из cron в полночь (00:00) каждых суток, делает дамп Вашей базы DBNAME и архивирует его архиватором gzip в файл-архив с именем, соответствующим текущей дате. Например, если мы делаем dump 3 января 2002 года, имя файла с архивом будет 2002-01-03.gz. Для того, чтобы получить файлы, по именам которых можно удобно узнать дату их создания, мы используем команду date, которая является стандартной для всех unix-систем. Эта команда позволяет задавать произвольный формат вывода даты, что мы и использовали - date "+%Y-%m-%d". Мы поместили эту команду в обратные одинарные кавычки (backticks), что в unix shell заставляет вставить в команду (утрируя) результат выполнения другой команды.

Сохраняем правило для cron и ждем результатов. Итак, каждый день мы будем иметь на диске заархивированную копию нашей базы данных. Можно быстро найти нужный архив по его названию и восстановить то, что испортилось, например. Кстати, если Вы хотите автоматизировать удаление старых архивов, попробуйте воспользоваться cron и командой find, которая обычно есть в unix. Запуская периодически find ~/каталог-с-архивами -name "*.gz" -mtime +7, Вы будете удалять архивы, которые "старше" семи дней. Прочитайте документацию по find - она доступна по команде man find в unix shell.

Если у Вас есть машина, постоянно подключенная к интернет, можно так же по cron копировать созданный Вами backup на нее. Конечно, провайдерская хостинг-машина - это очень надежная штука. Однако, как говорится, "береженого Бог бережет". Старая как мир истина в определенных условиях может и Вам помочь. Используйте для копирования на другую машину команды ftp и scp. Добавьте их запуск в cron. Если Ваша машина поддерживает соединение по протоколу ssh, используйте secure copy клиент для копирования файлов - scp. Читайте документацию по этой команде в man-странице man scp. Примерный запуск: scp 2002-01-03.gz Этот адрес e-mail защищен от спам-ботов. Чтобы увидеть его, у Вас должен быть включен Java-Script : - закачиваем файл 2002-01-03.gz на машину your.host.ru авторизовавшись там под логином login.

(0 Комментарии)
 
Как сбросить пароль root на сервере MySQL
Написал Алхимик   
Вторник, 19 Июль 2005

In a Unix environment, the procedure for resetting the root password is as follows:

  1. Log on to your system as either the Unix root user or as the same user that the mysqld server runs as.

  2. Locate the .pid file that contains the server's process ID. The exact location and name of this file depend on your distribution, hostname, and configuration. Common locations are /var/lib/mysql/, /var/run/mysqld/, and /usr/local/mysql/data/. Generally, the filename has the extension of .pid and begins with either mysqld or your system's hostname.

    You can stop the MySQL server by sending a normal kill (not kill -9) to the mysqld process, using the pathname of the .pid file in the following command:

    shell> kill `cat /mysql-data-directory/host_name.pid`
    

    Note the use of backticks rather than forward quotes with the cat command; these cause the output of cat to be substituted into the kill command.

  3. Create a text file and place the following command within it on a single line:

    SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPassword');
    

    Save the file with any name. For this example the file will be ~/mysql-init.

  4. Restart the MySQL server with the special --init-file=~/mysql-init option:

    shell> mysqld_safe --init-file=~/mysql-init &
    

    The contents of the init-file are executed at server startup, changing the root password. After the server has started successfully you should delete ~/mysql-init.

  5. You should be able to connect using the new password.

Alternatively, on any platform, you can set the new password using the mysql client(but this approach is less secure):

  1. Stop mysqld and restart it with the --skip-grant-tables --user=root option (Windows users omit the --user=root portion).

  2. Connect to the mysqld server with this command:

    shell> mysql -u root
    

  3. Issue the following statements in the mysql client:

    mysql> UPDATE mysql.user SET Password=PASSWORD('newpwd')
        ->                   WHERE User='root';
    mysql> FLUSH PRIVILEGES;
    

    Replace ``newpwd'' with the actual root password that you want to use.

  4. You should be able to connect using the new password.

(0 Комментарии)
 
Как правильно установить связку Apache+PHP+MySQL
Написал Алхимик   
Вторник, 19 Июль 2005

Недавно у меня возникла потребность в установке веб-сервера Apache 2 на Unix-системе (FreeBSD) с поддержкой PHP и MySQL. Поиски статей в Интернете не дали положительного результата, и я решил написать эту статью.

(0 Комментарии)

Подробнее...
 
В лесу далеком клад зарыт
Написал Алхимик   
Вторник, 12 Июль 2005

В лесу далеком клад зарыт.
Над ним скала - сплошной гранит
Кирка в бессилии визжит
От взоров жадных клад укрыт.

И в нашем первозданном лесу под именем Линукс могут скрываться невидимые клады. Прежде всего, мы сами можем их зарыть. И не понадобится нам ни лопата, ни кирка, как в одноименном произведении. А вот отыскание их - задача нетривиальная, а проще и совсем безнадежная. Если конечно исключить, что в вашей семье все хакеры и даже утро начинается с того, что кто-то сделал "дефейс" вашего завтрака из микроволновки.

Но это оставим на крайний случай - тогда вы и так знаете, как укрыть свои персональные (то есть личные) данные от посторонних глаз. Да-да. Как раз об этом и пойдет речь. Когда-то, во времена безраздельного господства унылой однозадачной DOS я с сожалением мечтал о возможности спрятать одну из директорий от чужого взгляда. У кого-то это могли быть картинки энного содержания, у кого-то код программы, а кто-то просто жадный и когда друг приходит - ничего давать не хочет. А если бы была такая возможность недоступного клада - сказал бы нет ничего - видишь, под голой осью сижу.

В те времена ничего лучше придания атрибута невидимости каталогу не существовало (по крайней мере, мне попадалась всего одна программка якобы скрывающая директории не через атрибут, но я не смог ее заставить работать). А вот действительно великого и светлого - не было. Чтобы спрятать и знать, что никто не найдет.

Возможность такая появилась, когда мы стали пользоваться уникальным явлением - Линукс. Я расскажу несколько способов подобного кладозарывательства. Они не претендуют на какой-то великий подход и непередаваемые уму алгоритмы. Тем они в общем и хороши. Если вы уже прошли эти ступени, то вряд ли это может заинтересовать вас. Вы и без меня давно рулите послушной Линуксой носящейся где-то на скорости близкой к сверхсветовой. (У меня, например под Линуксом 700 Мб файл (да, тот самый в котором кино) переписывается за 40 секунд, что приводит в неописуемый восторг).

А вот остальные может и почитают. Зима на носу. Делать нечего. Ну раз нечего, приготовьте свои лопаты. Клавиатуры, конечно хотел сказать. Лопаты виртуальные. Будем клад зарывать.

ПРЕДПОСЫЛКА

Так сложилась, что часть уникальных черт ОС Линукс приобрела благодаря революционному решению представить любые физические устройства (будь то звуковая карта или жесткий диск), как обычные файлы. Для жестких дисков это так называемые файлы блочных устройств. Но в конечном итоге - файлы - они файлы и есть - делать с ними можно то же, что и с обычными.
Звуковой файл просмотреть в звуковом же устройстве тем самым прослушав его: cat /home/mysound.wav < /dev/dsp , редактировать mbr hdd в обычном текстовом редакторе (vi /dev/hda) и т.д.

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

Способ первый

Создать файл командой touch и открыв его в редакторе набивать содержанием долго-долго.

touch my_file.

В итоге через несколько лет мы получим файл объемом в несколько десятков мегабайт - что уже подходит для наших целей. Недостатки: долго. Достоинства: можно стать самым знаменитым и плодовитым писателем. Что-то вроде Ленина.

Способ второй

Нужно найти в какой нибудь директории файл подходящего размера (ну мегабайт 50-100). Достоинства: минимум умственных усилий. Недостатки: такого файла может и не оказаться, если у тебя Винды припрятанной на дополнительной партиции нет. В Линуксе файлы достаточно миниатюрны. Философия такая.

Способ третий

Данный способ дает возможность получать файлы достаточно большого размера. 600-700 Мб. Делается это так. Вставляем под завязку набитый софтом или фильмами CD-ROM в привод. Пишем:
cp /dev/cdrom /home/my_file
в итоге все содержимое нашего сидиром будет скинуто в один файл. (Который кстати потом можно будет подключать к любой директории и свободно юзать).

Достоинства: удобно.
Недостатки: не универсально. Ну не надо мне 700 Мб. 40 хочу. Способ четвертый. Правильный.

Но думаю, если предыдущие способы показались тебе несколько лишенными стройности, то эта мысль абсолютно оправдана. Есть еще один способ. Он так и называется - "правильный". Для этого в Линукс существует команда dd (для всего на самом деле, лишь бы фантазии хватало, включая использование ее для записи звука с микрофона).

Нам нужен файл из которого мы рано или поздно создадим наш виртуальный клад. У каждого могут быть свои пожелания. Мне вполне хватит размера 40 Мб. Для текста вполне достаточно, а если вам для картинок - то впишите свое число (после count).

dd if=/dev/zero of=/home/clad bs=1k count=40000

"clad" - это название получившегося после нехитрой операции 40Мб файла в домашней директории. Конечно, для наших скрытных целей лучше бы его заменить, на что ни будь плохо ассоциируемое с "пользой". "Польза" - это софт лежащий где-нибудь. Как вам, например такое название: klsf2007.px
По-моему, очень содержательное, подобных файлов лежит не меряно в разных директориях. Для чего они пользователь может только догадываться. Ну что же, настало время приступить к священнодействию - превратить файл в полноценное устройство хранения данных - новый жесткий диск. Отпиливать кусочек от существующего мы не будем. Мы просто файл? ОТФОРМАТИРУЕМ!

Mke2fs clad

Наш файл готов к использованию. Внутри него - файловая система ext2. Подобному методу можно придумать и другое применение. Например, увеличение памяти путем добавления еще одного swap-файла для подкачки данных. Делается это аналогично, только форматируем мы не под ext2, а - swap и даем команду свап активизировать.

А как же использовать наш clad?
Как и всегда подмонтировать в любую директорию (а лучше создать папку Sys - например - и в нее), только предварительно указав, что это loop-файл.

mount -o loop /home/clad /Sys

На этом наши ухищрения почти закончены. Накидаем в папку /Sys всякой файловой ерунды, чтобы она не вызывала подозрений своим существованием. Плохо знакомый с Линуксом человек может даже предположить, что это некая важная Системная папка "и ничего воровать не станет".

Теперь закинем наш виртуальный жесткий диск clad (а я надеюсь вы пошли на поводу здравого смысла и переименовали его во что то трудно читаемое) в глушь директорий и путей. Куда нибудь в /usr/share/lib. В необходимый момент мы напишем:

mount -o loop /usr/share/lib/clad /Sys

и бредовое содержимое-прикрытие данной папки исчезнет бесследно открыв в первозданной красоте своей тайное наше устройство. Теперь можно смело сохранять на него важные для вас файлы - переписку, картинки, стихи?
Но стоит сказать:

umount /usr/share/lib/clad

и все исчезнет. Растворится в неведомых дебрях файловой системы, а папка Sys опять наполниться файлами-прикрытием.

Конечно, у этого метода есть некоторые уязвимости. В частности ничто не помешает вторгнувшемуся в ваши владения воспользоваться историей команд в bash и все понять. Но мы то конечно историю команд подчистим в соответствующем файле.
Заметем следы то есть.
Если вы любите ленится, то советую написать маленькие скрипты, которые также существенно добавят комфорт в управление вашим виртуальным устройством.
Делается это так.
Напишем скрипт для активизации тайного устройства. Создадим файл (название придумайте сами - самое глупое starthdd использую я). В любом редакторе (pico, vi, mc) напишем:

mount /usr/share/lib/clad /Sys

Сохраним файл и сделаем его исполняемым:

Chmod +x starthdd.

Кинем в любую директорию, куда в баше есть пути. Например, в /usr/bin (а умнее в ту, куда путей нет, а лучше - свою папку иметь со скриптами и из нее линковать на /bin например). Аналогично напишем скрипты для отключения виртуального hdd и подчистки истории команд (если кому надо).

Этот способ не дает 100% защиту, но как уже говорилось выше - это не для семейки хакеров. Для всех же остальных вероятность нахождения скрытого клада близка к нулю. Но это был самый банальный способ зарыть сокровища. Другой путь достаточно остроумен и неординарен, как мне кажется. А что если все сделать наоборот. Пусть себе важные файлы лежат на открытом месте, но?
Прикрытые файлом-заглушкой!!!
То есть мы всегда будем видеть некую директорию, где будут лежать какие-то файлы. Причем не обязательно мусор - вы можете пользоваться ей, хранить какие-то публичные файлы. Но в нужный момент мы сделаем унмаунт данной заглушки-прикрытия и нашему взору предстанут скрытые файлы, которые на самом то деле никуда и не исчезали!!! Как это сделать по шагам я напишу ниже.

  1. Создать директорию. Пусть Sys.
  2. Записать в нее ваши файлы.
  3. Создать файл-устройство-заглушку (отформатировать).
  4. Записать в /ets/fstab строку подмонтирующую заглушку в момент загрузки Линукс.
  5. Для пользования скрытой директорией отмонтировать заглушку.

Плюсы этого способа - размер устройства-заглушки может быть очень маленьким (но не переусердствуйте, а то вызовет много недоумения попытка копирования файла в паку и последующее сообщение, что не хватает места на "винте", в то время как там еще 10Gb!).
Минусы очевидны: если загрузится с дискетки, то лежащие в папке важные файлы не будут скрыты. Но тут опять же - метод не для хакеров.

А для хакеров. Никто же не мешает вам закриптовать ваш файл с ключом вплоть до 192 бит!!! Возможно, у вас хватит фантазии придумать что-то пооригинальнее, но главное - то что когда-то казалось недостижимым стоит у нас прямо на пороге и мило улыбается. Оно очень сильно похоже на пингвина.

Столетиями не угасает жажда поиска кладов. Люди собирают рюкзак и уходят в дремучие леса и знойные пустыни в надежде найти нечто невероятное. Подобное происходит и в компьютерном мире. Чем больше усилий прикладывает кладоискатель для поисков, тем тщательнее владелец пытается его скрыть. Иногда кладоискателям везет.
Иногда нет. Но если вы захотите зарыть клад - дело только за вашей сообразительностью.

В лесу далеком клад зарыт.
Над ним скала - сплошной гранит
Кирка в бессилии визжит
От взоров жадных клад укрыт.


И даже если б мы нашли
Далекий лес тот, где искать,
То место где сокрыт от глаз
Желанный клад, чудесный клад.


И нет ни карт, ни чьих то слов
Забыться лишь в объятьях снов
Но снова будет сниться клад
И снова в путь, в лесу искать.

На всякий случай: создание папки Sys: mkdir Sys.

(0 Комментарии)

 
<< В начало < Предыдущая 1 2 3 4 5 6 7 8 9 10 Следующая > В конец >>

Всего 73 - 81 из 128

 


Реклама | Контакты | ©2005-2013 Алхимик