Редактирование текста в Linux с помощью команд Vi, cat, less

Памятка по основным командам для терминала Linux. Добавь в закладки, чтобы не потерять!

Команды cat и tac

Если вам нужно открыть файл в терминале Linux, то для этого предусмотрено множество простых и эффективных способов. Пожалуй, самая часто используемая команда такого рода – это команда «cat».

Чтобы использовать ее просто введите «cat» и название файла. Например, если вам нужно просмотреть содержимое файла «file_name.txt», то команда должна выглядеть вот так:

cat file_name.txt

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

команда cat

При использовании команды «cat» может понадобиться нумерация строк. В этом случае команду нужно вводить с параметром «-n».

команда cat

Также есть команда «tac», которая открывает файлы точно также как «cat», но выводит строки в обратном порядке (начиная с конца).

tac text.txt

команда tac

Обратите внимание, для того чтобы узнать больше о «cat» и «tac», а также других командах Linux, введите в терминал «man» (от англ. manual) и через пробел название интересующей вас команды, например, «man tac». Это выведет подробную информацию о команде и список всех поддерживаемых параметров.

Команды Linux для навигации в терминале

Команды Linux для навигации в терминале

  1. &&. Строго говоря, это не команда. Если вы хотите выполнить сразу несколько команд, поставьте между ними двойной амперсанд вот так: первая_команда && вторая_команда. Терминал выполнит команды по порядку. Вы можете ввести столько команд, сколько захотите.
  2. alias. Присваивает созданные вами названия длинным командам, которые вы не можете запомнить. Введите alias длинная_команда короткая_команда.
  3. cd. Изменяет текущую терминальную папку. Когда вы запускаете терминал, он использует вашу домашнюю папку. Введите cd адрес_папки, и терминал будет работать с файлами, которые там находятся.
  4. clear. Очищает окно терминала от всех сообщений.
  5. history. Отображает все недавно введённые вами команды. Кроме того, вы можете переключаться между недавними командами с помощью клавиш «Вверх» и «Вниз». Если вы не хотите, чтобы введённая вами команда была записана, поставьте перед ней пробел так: ваша_команда.
  6. man. Отображает руководство по программам и командам Linux. Введите man имя_пакетаили man ваша_команда.
  7. whatis. Отображает краткое описание какой-либо программы. Введите команду и название программы whatis имя_пакета.

Просмотр файла в Linux полностью

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

$ cat опции адрес_файла

Например просмотр содержимого файла linux /etc/passwd:

cat /etc/passwd

Также можно посмотреть сразу несколько файлов:

cat /etc/passwod /etc/group

Если файл доступен только для пользователя root, то нужно перед командой написать sudo:

sudo cat /etc/shadow

Опция -n включает нумерацию строк:

cat -n /var/log/Xorg.0.log

Для удобства, можно включить отображение в конце каждой строки символа $

cat -e /var/log/Xorg.0.log

А также отображение табуляций, все табуляции будут заменены на символ ^I:

cat -T /var/log/Xorg.0.log

Больше о ней говорить не будем, потому что большинство её опций направлены на форматирование вывода, более подробную информацию вы можете посмотреть в статье: Команда cat в Linux.

Где я? Как понять, где находишься

Команда pwd:

pwd — мы ввели команду/home/test — ответ системы, мы находимся в домашней директории пользователя test

Очень полезная команда, когда у вас нет ничего, кроме командной строки под рукой. Расшифровывается как

P

rint

W

orking

D

irectory. Запомните ее, пригодится.

Базовые команды для работы с терминалом

То, что поможет при работе с консолью в целом.

  • clear — очищает всю выведенную в консоль информацию. Пригодится на тот случай, если терминал будет забит выводом других команд или содержимом ранее открытых документов. Помогает «начать с чистого листа».
  • history — отображает ранее введенные команды. По умолчанию показывает 10 последних, но при желании это значение можно изменить, добавив в качестве параметра любое число. Например, history 17, чтобы показать 17 последних выполненных операций.
  • whatis — вкратце описывает любую установленную программу. Вводим whatis и скармливаем ей в качестве аргумента название интересующей утилиты. Чтобы узнать, что такое wget, напишем whatis wget и получим краткую справку одной строкой.
  • man — демонстрирует подробное руководство по выбранной программе или команде. Чтобы выяснить, как работает wget и какие опции для него доступны, введем man wget. Получим массивное полотно со всей документацией для выбранной утилиты. P.S. Выйти из нее можно нажав на клавишу Q.

Команда Linux для вывода документации в терминал

Работа с процессами

Для начала создайте список процессов по имени, идентификационного номеру процесса и т. д. (обычно используемый признак состояния aux).

Учитывайте особенности реализации программных потоков: POSIX, GNU и BSD, а также то, что они отличаются в работе и применении. Вышеуказанные реализации отличаются различными опциями: POSIX (-), GNU (–), BSD (без тире).

Индикаторы процесса в данной системе: top, htop, atop.

Понижайте приоритет процесса, используя nice. Например, следующим образом:

nice -n 19 tar cvzf archive.tgz large_dir

Чтобы аннулировать процесс, введите kill <pid>. Данная команда используется для завершения процессов-зомби или прекращения зависших сеансов.

Далее идут команды терминала Linux, которые спасут положение в затруднительных ситуациях:

  • man nano — данная команда обеспечивает доступ к организованным по разделам справочным страницам. Итого на каждый раздел — одна страница. Например: 5 passwd #5й раздел;
  • wget —help — весьма удобная команда, которая позволит быстро получить справку по синтаксису;
  • info curl — позволяет получить информацию о команде (в данном случае о curl);
  • /usr/share/doc — используйте в браузере. В случае проблемы, не забывайте, что обычно файлы README содержат информацию и примеры команд. Просмотр осуществляется с помощью браузера.

Команды для управления правами на файлы и директории

Все, что нужно для разрешения проблем, связанных с правами в Linux.

  • sudo — выдает права суперпользователя. Используется перед любой другой командой в терминале, если нужно выполнить ее от имени администратора. Многие программы и операции запускаются исключительно при наличии этих прав, так что sudo используется часто. Например, чтобы обновить список пакетов в Ubuntu, введем: sudo apt-get update. При этом система запросит пароль администратора.
  • sudo su — переводит терминал в режим суперпользователя. В нем каждая введенная команда будет восприниматься системой так, будто перед ней ввели sudo. Помогает запускать несколько скриптов и утилит, требующих права администратора, без необходимости постоянно корректировать их или вводить пароль от учетной записи.
  • sudo gksudo — используется для запуска графических утилит от имени администратора. В Windows для этого есть специальная кнопка в контекстном меню, а в Linux — префикс. Синтаксис такой:

​sudo gksudo название приложения, нуждающееся в запуске от имени администратора

  • sudo !! — запускает предыдущую команду от имени администратора. Используется, если до этого была неудачная попытка запустить программу. Помогает не тратить время на повторный ввод большого количества символов.
  • chmod — корректирует права доступа к выбранному файлу. Применяется исключительно с набором аргументов, обозначающих список прав. Допустим, я хочу выдать права на чтение и запись файла Timeweb.html на рабочем столе. Для этого введу в терминал: chmod 777 ~/Desktop/timeweb.html. Теперь его можно открывать и редактировать. Аналогичным образом пользователи поступают с системными файлами, когда приходит время что-то в них менять. По умолчанию большая их часть защищена от записи.
  • chown — назначает владельца для выбранной директории, документа, картинки или любого другого элемента в файловой системе. Синтаксис следующий:

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

Другие команды для терминала Ubuntu

Существует множество других записей:

  1. Для создания каталога: mkdir dir.
  2. Для создания архива: tar cf file.tar files.
  3. Для распаковки архива: tar xf file.tar.
  4. Для установки и обновления пакета: dpkg -i package.deb.
  5. Перевести содержимое объекта на какое-нибудь устройство: cat file1.
  6. Восстановить целостность файловой системы: fsck.vfat /dev/hda1.

И множество других выражений для более гибкой работы с системой.

Команды more и less

Для открытия больших файлов в терминале Linux можно использовать команды «more» и «less». Команда «more» открывает файл в терминале Linux и позволяет пролистывать его только вниз при помощи клавиш Enter (одна строка вниз) и Space (страница вниз). Пролистывания вверх нет, поэтому, если вы случайно проскочили нужное вам место в файле, то вернуться назад не получится.

Чтобы открыть файл в терминале Linux с помощью команды «more» и «less» нужно ввести следующее:

more file_name.txtless file_name.txt

команда more

Команда «less» также позволяет открывать большие файлы в терминале Linux, но она уже предоставляет больше возможностей. С помощью «less» можно пролистывать содержимое документа как вниз (Page Down), так и вверх (Page Up), переходить в конец (End) и начало файла (Home), пролистывать текст по одной строке (Enter), а также выполнять поиск в обоих направлениях.

Для того чтобы выполнить поиск после выполнения «less» нужно ввести слеш (/) и любой кусок текста. Чтобы перейти к следующему найденному отрывку нужно нажать N, а Shift-N возвращает к предыдущему найденному отрывку. Для поиска в обратном направлении вместо знака слеш (/) нужно вводить знак вопроса (?) и после этого любой текст.

команда less

Учитывая большие возможности команды «less», для открытия файлов в терминале Linux в основном используют именно ее, а не команду «more».

Подстановочные символы

Далее приведены подстановочные символы, которые расширяют объём команды терминала Linux во время её выполнения:

  • *  позволяет расширить команду до любого количества символов:
    ls -lh /etc/*.conf — все элементы с расширением .conf;
  • ? позволяет расширить команду до одного символа:
    ls -ld ? ?? ??? — сюда относятся элементы, длина которых составляет 1, 2 или 3 символа;
  • ! — отрицание:
    ls -ld [!0-9]* — элементы, которые не начинаются с числовых значений;
  • Экранирование и цитирование с целью предотвращения расширения:
    • для экранирования подстановочного знака;
    • ‘ для цитирования подстановочного знака.

Как удалить файл

С помощью команды

rm (remove)

:

rm test.txt — удалит файл test.txt

Если нужно удалить все файлы в текущей директории (скажем, вычищаем старые логи перед переустановкой приложения), используйте «*»:

rm * — удалит все файлы в текущей директории

bvgehkv_nem0hjbwejfbjqbhzke.png

Если нужно удалить папку, надо добавить флаг

-r (recursive)

:

rm -r test_folder

Если вы пытаетесь удалить файлы, которые уже используются в программе или доступны только для чтения, система будет переспрашивать:

v3ziyjvzslyu5doqy0t8nmxxajo.png

А теперь представьте, что вы чистите много файлов. И на каждый система переспрашивает, и надо постоянно отвечать «да, да, да…»

(y – enter, y – enter, y – enter)

… Чтобы удалить все без вопросов, используйте флаг

-f (force)

:

rm -rf test_folder — просто все удалит без разговоров
mvrf79hvjxkvysckdzxemfpnl7s.png

Но учтите, что это довольно опасная команда! Вот так надоест подстверждать удаление и введешь «-rf», а директорию неправильно укажешь… Ну и все, прости-прощай нужные файлы. Аккуратнее с этой командой, особенно если у вас есть root-полномочия!

Опция

-v

показывает имена удаляемых файлов:

rm -rfv test_folder — удалит папку со всем содержимым, но выведет имена удаляемых файлов
kx_khxmcvbrxsrljkauwllaxita.png

Тут вы хотя бы можете осознать, что натворили )))

См также:
Как удалить каталог Linux

Хитрости, которые сэкономят время

Этот список полезных знаков позволит вам в разы ускорить работу с командами:

  • !! — повторяет последнюю команду;
  • !$ — позволяет изменить команду, сохраняя последний аргумент:
    • cat states.txt — используется, если файл слишком длинный, чтобы поместиться на экране;
    • less !$ — используется для повторного открытия в меньшем объёме;
  • !* —позволяет изменить команду, сохраняя при этом все аргументы:
    • head states.txt | grep ‘^Al’ — при использовании должен быть хвост;
    • tail !* — нет необходимости вводить остальную часть команды;
  • >x.txt — используется для создания пустого файла или очистки существующего.
  • lsof -P -i -n — позволит определить, к каким скриптам идёт обращение со стороны веб-сервера.

Установка, удаление и обновление пакетов

Для установки программ в Linux используются менеджеры пакетов. Они разнятся от дистрибутива к дистрибутиву, поэтому команды для управления ими тоже отличаются. Рассмотрим наиболее популярные.

Debian/Ubuntu

  • sudo apt-get install название пакета — устанавливает программу на выбор. Главное знать, как она называется.
  • sudo apt remove название пакета — стирает с жесткого диска имеющийся в системе пакет.
  • sudo apt-get update — обновляет информацию о пакетах, имеющихся в системе, и тех, что хранятся в подключенных репозиториях.
  • sudo apt-upgrade — обновляет установленные пакеты до самых свежих версий, доступных в подключенных репозиториях.

Red Hat Linux/CentOS

  • sudo dnf install название пакета — устанавливает программу на выбор.
  • sudo dnf upgrade — обновляет установленные пакеты до самых свежих версий.
  • sudo dnf remove название пакета — стирает с жесткого диска имеющийся в системе пакет.

Что делать, если не вводится пароль в терминале Ubuntu

Алгоритм решения прост:

  1. Открыть объект настройки sudo с помощью такого выражения: sudo visudo.
  2. Найти строчку: Defaults env_reset.
  3. Заменить ее на: Defaults env_reset,pwfeedback.

Готово проблема пароль не вводится sudo решена. Далее просто надо сохранить изменения (Ctrl+O) и закрыть документ.

Команды Linux для работы с разделами

Команды Linux для работы с разделами

  1. lsblk. Эта команда демонстрирует, какие диски есть в вашей системе и на какие разделы они поделены. Также команда отображает имена ваших разделов и накопителей, в формате sda1, sda2 и так далее.
  2. mount. Монтирует накопители, устройства или файловые системы Linux, чтобы вы могли с ними работать. Обычно устройства подключаются автоматически, как только вы щёлкнете по ним в файловом менеджере. Но иногда может понадобиться примонтировать что-то вручную. Вы можете подключать что угодно: диски, внешние накопители, разделы и даже ISO-образы. Эту команду нужно выполнять с правами суперпользователя. Чтобы примонтировать имеющийся диск или раздел, введите mount sdX.
  3. umount. Демонтирует файловые системы. Команда umount sdX отключит файловую систему внешнего носителя, чтобы вы могли извлечь его.
  4. dd. Эта команда копирует и преобразовывает файлы и разделы. У неё множество различных применений. Например, dd if=/dev/sda of=/dev/sdb сделает точную копию раздела sda на разделе sdb. dd if=/dev/zero of=/dev/sdX затрёт содержимое указанного носителя нулями, чтобы информацию было невозможно восстановить. А dd if=~/Downloads/ubuntu.iso of=/dev/sdX bs=4M сделает загрузочный носитель из скачанного вами образа с дистрибутивом.

Монтирование и отмонтирование дисков

mount [параметры] устройство путь  Монтирование устройства.Пример: mount /dev/sda1 /mnt/Disk1.umount устройство/путь  Размонтирование.Пример: umount /mnt/Disk1.eject  Размонтирование и выброс CDROM.

Каналы

Канал — это особая концепция системы Linux, которая автоматизирует перенаправление вывода одной команды посредством использования входных данных на следующую команду. Такое использование каналов приводит к эффективным комбинациям независимых команд. Ниже приведены некоторые из них:

  • find .| less — позволяет прокручивать длинный список файлов постранично;
  • head prose.txt | grep -i ‘little’ echo $PATH | tr ‘:’ ‘n’ — переводит на новую строку;
  • history | tail — отображает последние 10 команд;
  • free -m|grep Mem:|awk ‘{print $4}’ — отображает доступную память;
  • du -s *|sort -n|tail — отображает 10 наиболее больших файлов/каталогов в pwd.

Расшифровка и отладка команд каналов

free -m|grep Mem:|awk ‘{print $4}’

Приведённая выше команда эквивалентна выполнению следующих 4 команд:

  • free -m > tmp1.txt
  • grep Mem: tmp1.txt > tmp2.txt
  • awk ‘{print $4}’ tmp2.txt
  • rm tmp1.txt tmp2.txt

Сокращение этапов работы с командами зачастую является эффективным и более простым способом, который позволяет сэкономить время и упростить процесс. Например, вышеупомянутый конвейер можно уменьшить следующим образом:

free -m|awk ‘/Mem:/{print $4}’

Ниже приведено ещё несколько примеров каналов:

Чтобы получить доступ к pdf-файлам страниц справочника man:

man -t diff | ps2pdf — diffhelp.pdf 

Чтобы получить актуальные на сегодняшний день файлы:

ls -al —time-style=+%D | grep `date +%D`

Топ-10 самых часто используемых команд:

history | awk ‘{a[$2]++}END{for(i in a){print a[i] » » i}}’ | sort -rn | head

Далее будут команды терминала Linux, которые принимают только литеральные аргументы.

Большинство команд получают входные данные, например, из stdin (канала) и файла:

wc < states.txt #ок 

wc states.txt #ок

Однако, существуют определённые исключения. Например, некоторые команды получают входные данные только из stdin, а не из файла:

tr ‘N’ ‘n’ states.txt #работать не будет

tr ‘N’ ‘n’ < states.txt #работать будет

Некоторые команды не получают входные данные ни из stdin, ни из файла. Например, следующие:

  • echo < states.txt  — не подходит. Предполагается, что вы собираетесь распечатать содержимое файла;
  • echo states.txt  — не подходит. Предполагается, что вы собираетесь распечатать содержимое файла;
  • echo «Привет, как дела?» —  принимает литеральные аргументы.

cp, touch, rm, chmod относятся к другим примерам.

Просмотр файлов Linux в сжатом виде

Иногда можно встретить в системе текстовые файлы в сжатом виде, формате gz. Это, например, конфигурационный файл ядра, или логи некоторых программ. Для того чтобы открыть файл в linux через терминал не распаковывая его есть целый ряд аналогов вышеописанных утилит с приставкой z. Это zcat, zless, zgerp, zegrep.

Например, открываем сжатый файл для просмотра:

zcat /var/log/syslog.2.gz

Или более практичный пример, распаковываем и копируем конфигурационный ядра в текущую директорию:

zcat /porc/cofig.gz .config

Так же можно использовать less, для просмотра сжатых файлов с прокруткой:

zless /porc/cofig.gz

А для фильтрации сжатых файлов по шаблону есть zgrep и zegrep. Например, ищем в сжатом логе ошибки:

zgrep ‘EE’ /var/log/Xorg.log.gz

Как запустить приложение

Некоторые приложения запускаются через скрипты. Например, чтобы запустить сервер приложения WildFly, нужно перейти в папку bin и запустить там

standalone.sh

. Файл с расширением .sh — это скрипт.

Чтобы запустить скрипт, нужно указать полный путь к нему:

/opt/cdi/jboss/bin/standalone.sh — запустили скрипт standalone.sh

Это важно! Даже если вы находитесь в той папке, где и скрипт, он не будет найден, если просто указать название sh-скрипта. Надо написать так:

./standalone.sh — запустили скрипт, если мы в той же директории

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

standalone.sh — запустили скрипт standalone.sh, путь к которому прописан в PATH
См также:
Запуск скрипта sh в Linux

— подробнее о скриптах

k9uiiqzlj6zgl4i5sfn_9q8byx0.png

Если же приложение запускается как сервис, то все еще проще:

service test start — запустить сервис под названием «test»service test stop — остановить сервис

Чтобы сервис test запускался автоматически при рестарте системы, используйте команду:

chkconfig test on

Она добавит службу в автозапуск.

Текстовый редактор Nano

Если вам нужно не просто открыть файл в терминале Linux, но и отредактировать его, то лучше всего использовать не «most», а какой-нибудь более продвинутый текстовый редактор для терминала. Например, это может быть редактор Nano.

В Ubuntu Linux текстовый редактор Nano установлен по умолчанию, но если его нет в вашей системе, то вы можете его установить следующими командами:

Для CentOS, Fedora:

yum install nano

Для Gentoo:

install app-editors/nano

Для Debian, Ubuntu:

apt-get install nano

Чтобы открыть файл в терминале Linux при помощи редактора Nano нужно выполнить следующую команду:

nano file_name.txt

Интерфейс программы Nano включает в себе верхнюю строку с информацией о редакторе и открытом файле, область редактирование с содержимым открытого файла, нижнюю панель с информацией о комбинациях клавиш.

программа Nano

Для управления текстовым редактором Nano используются следующие комбинации клавиш:

  • Ctrl-G или F1 – просмотр справки;
  • Ctrl-X или F2 – выход из программы;
  • Ctrl-O или F3 – сохранение открытого файла;
  • Ctrl-J или F4 – выровнять текущий абзац;
  • Ctrl-R или F5 – загрузить содержимое другого файла в текущий;
  • Ctrl-W или F6 – выполнить поиск;
  • Ctrl-Y или F7 – пролистать страницу вперед;
  • Ctrl-V или F8 – пролистать страницу назад;
  • Ctrl-K или F9 – вырезать строку и запомнить;
  • Ctrl-U или F10 – вставить;
  • Ctrl-C или F11 – положение курсора;
  • Ctrl-T или F12 – проверить орфографию;

Список ключей для команды ls.

Для повседневной работы, одни из самых используемых ключей для команды ls:

  • -l — вывод подробной информации о содержимом каталога в виде списка;
  • -a (—all) — вывод информации о всех имеющихся объектах явных и скрытых;
  • -A (—allmost-all) — вывод информации о всех имеющихся явных и скрытых объектах (за исключением объектов «.» и «..»);
  • -d (—directory) — вывод информации о директории без вывода его содержимого;
  • -F — к объектам являющимся каталогами добавит в конце символ слеш «/», к объектам являющимися исполняемыми файлами добавляется «*», к объектам являющимися символьными ссылками — «@»;
  • -r (—reverse) — данные ключи меняют сортировку на обратную;
  • -i — отображение номера индексных дескрипторов объектов;
  • -S — сортировка объектов по размеру от большого к меньшему;
  • -Sr — сортировка объектов по размеру от меньшего;
  • -t — сортировка объектов по времени модификации файлов;
  • -R (—recursive) — вывод информации об имеющихся объектах в том числе и объектах во вложенных каталогах.

Способы работы с командой ls и ее ключи, упоминаемые в статье это далеко не весь список. Если вы желаете использовать всю мощь этой на первый взгляд простой команды, то как уже упоминалось ранее, более подробную информацию можно получить при вызове встроенного мануала $ man ls .

Параллельность в GNU

В данном случае речь идёт о параллельном выполнении задач из командной строки. В некотором смысле похожее на xargs. Что по итогу это даёт?

  • Позволяет обрабатывать параметры как независимые аргументы команды и выполнять параллельно команду.
  • Осуществляет синхронизированный вывод — как если бы команды в Linux-терминале выполнялись последовательно.
  • Обеспечивает настраиваемое количество параллельных заданий.
  • Хорошо подходит для выполнения простых команд или скриптов на вычислительных узлах для использования многоядерной архитектуры.

Необходимо учитывать, что, возможно, потребуется специальная установка, так как по умолчанию это недоступно.

Примеры параллельного выполнения в GNU:

Для того, чтобы найти все html-файлы и переместить их в каталог:

find . -имя ‘*.html’ | parallel mv {} web/

Для того, чтобы удалить файл pict0000.jpg и заменить его на pict9999.jpg (здесь подразумевается одновременное выполнение 16 параллельных заданий):

seq -w 0 9999 | parallel -j 16 rm pict{}.jpg

Создание миниатюр для всех файлов изображений (требуется программное обеспечение imagemagick):

ls *.jpg | parallel convert -geometry 120 {} thumb_{}

Загрузка из списка URL-адресов и отчёт о неудачных загрузках:

cat urlfile | parallel «wget {} 2>errors.txt»

Для дополнительной информации можно ознакомиться с книгой GNU parallel 2018.

Как посмотреть свободное место

Сколько места свободно на дисках

df -h

Сколько весит директория

du -shdu -sh * — с разбиением

Как сделать симлинк

Сделать симлинк

ln -s /var/log/httpd/domains/domain.error.log domain.error.log

Сделать жесткую (обычную) ссылку:

ln /var/log/httpd/domains/domain.error.log domain.error.log

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: