Linux pipes tips & tricks

Pipe — что это?

Pipe (конвеер) – это однонаправленный канал межпроцессного взаимодействия. Термин был придуман Дугласом Макилроемдля командной оболочки Unix и назван по аналогии с трубопроводом. Конвейеры чаще всего используются в shell-скриптах для связи нескольких команд путем перенаправления вывода одной команды (stdout) на вход (stdin) последующей, используя символ конвеера ‘|’:

cmd1 | cmd2 | .... | cmdN

Например:

$ grep -i “error” ./log | wc -l
43

grep выполняет регистронезависимый поиск строки “error” в файле log, но результат поиска не выводится на экран, а перенаправляется на вход (stdin) команды wc, которая в свою очередь выполняет подсчет количества строк.

Логика

Конвеер обеспечивает асинхронное выполнение команд с использованием буферизации ввода/вывода. Таким образом все команды в конвейере работают параллельно, каждая в своем процессе.

Размер буфера начиная с ядра версии 2.6.11 составляет 65536 байт (64Кб) и равен странице памяти в более старых ядрах. При попытке чтения из пустого буфера процесс чтения блокируется до появления данных. Аналогично при попытке записи в заполненный буфер процесс записи будет заблокирован до освобождения необходимого места.
Важно, что несмотря на то, что конвейер оперирует файловыми дескрипторами потоков ввода/вывода, все операции выполняются в памяти, без нагрузки на диск.
Вся информация, приведенная ниже, касается оболочки bash-4.2 и ядра 3.10.10.

Простой дебаг

Утилита strace позволяет отследить системные вызовы в процессе выполнения программы:

$ strace -f bash -c ‘/bin/echo foo | grep bar’
....
getpid() = 13726                   <– PID основного процесса
...
pipe([3,  4])                       <– системный вызов для создания конвеера
....
clone(....) = 13727                <– подпроцесс для первой команды конвеера (echo)
...
[pid 13727] execve("/bin/echo",  ["/bin/echo",  "foo"],  [/* 61 vars */] 
.....
[pid 13726] clone(....) = 13728    <– подпроцесс для второй команды (grep) создается так же основным процессом
...
[pid 13728] stat("/home/aikikode/bin/grep",   
...

Видно, что для создания конвеера используется системный вызов pipe(), а также, что оба процесса выполняются параллельно в разных потоках.
Читать далее «Linux pipes tips & tricks»

Свое облачное хранилище на основе ownCloud

d2202679b359b8ed7d307d6c648ee8de

ownCloud — система для организации хранения, синхронизации и обмена данными, размещенными на внешних серверах.
В отличии от Dropbox и ему подобных, ownCloud отличается предоставлением пользователю полного контроля над своими данными — информация размещается на подконтрольных пользователю системах. Доступ к данным в ownCloud может осуществляться при помощи web-интерфейса или протокола WebDAV.

Особенности ownCloud

  • Open source;
  • Поддержка шифрования передачи данных;
  • Автоматическое резервное копирование;
  • Поддержка WebDAV позволяет организовать доступ к данным из любых операционных систем;
  • Поддержка синхронизации данных с другими web-приложениями, поддерживающими протокол remoteStorage;
  • Управление пользователями и группами;
  • В web-интерфейс встроены средства для работы с синхронизированной адресной книгой, календарем-планировщиком, коллекцией фотографий, архивом музыкальных произведений;
  • Для ownCloud подготовлен сервер Ampache, что позволяет организовать потоковое вещание музыки;

Читать далее «Свое облачное хранилище на основе ownCloud»

Интересные факты фильма Tron: Legacy

  • Обложка Tron: Legacy почти в точности повторяет обложку первого фильма.
  • Джефф Бриджес — первый актёр в истории кино, появляющийся на экране с компьютерно-омоложенным прототипом.
  • В одной из эпизодических ролей — бармена в клубе End of Line, появляется Стивен Лисбергер, режиссёр первой части.
  • Диктор новостей говорит о том, что Кевин Флинн стал руководить Encom в 1982 году. В этом же году вышел первый фильм «Трон».
  • Клуб «Конец строки», владение Кастора, был построен специально для фильма в павильоне киностудии. В нём помещались сотни статистов, не считая группы Daft Punk на сцене.
  • Участники Daft Punk — Ги-Мануэль де Омем-Кристо (фр. Guy-Manuel de Homem-Christo) и Том Бангальте (фр. Thomas Bangalter) — сыграли диджеев клуба «Конец строки» (фактически камео, в тех же костюмах, в которых они выступают на сцене).
  • Брюс Бокслейтнер играл в обоих фильмах, и исполнял одну и ту же роль защитной программы Трона и сотрудника компании Алана Брэдли.
  • В эпизодической роли в фильме появляется Киллиан Мёрфи. Он играет Эдварда Диллинжера, сына Эда Дилленжера, одного из персонажей фильма 1982 года.
  • Виртуальная реальность, в которой происходит действие фильма, работает под управлением UNIX-подобной ОС SolarOS (намек на Solaris); видно, как главный герой запускает на ней UNIX-команды whoamiunamels и тд.
  • Когда Сэм набирает команды в текстовой консоли, на фоне слева сверху видна программа top, в ней — запущенный графический сервер Xorg (вместе с демоном hald). Первая версия Xorg официально появилась 6 апреля 2004, то есть через 15 лет после того, как компьютер был в последний раз использован.
  • Когда главный герой крадёт и выкладывает в Интернет EncomOS 12, Эд Диллинджер открывает консоль с надписью «ENCOM LINUX CONSOLE».
  • Главный герой пытается получить рут-доступ в систему отца, войдя под учётной записью «backdoor».

снимок6 Читать далее «Интересные факты фильма Tron: Legacy»

часто используемые команды в lvm

Отключение диска lvm

fsck.ext4 -f /dev/vg/lv
resize2fs /dev/vg/lv 130G
lvreduce -L 130G /dev/vg/lv
pvmove /dev/sda
vgreduce vg /dev/sda
pvscan
pvremove /dev/sda

Увеличение логического тома

vgdisplay
lvextend -L +20G /dev/ubuntu-vg/ubuntu-lv
lvextend -l +100%free /dev/ubuntu-vg/ubuntu-lv fsck.ext4 -f /dev/ubuntu-vg/ubuntu-lv resize2fs /dev/ubuntu-vg/ubuntu-lv fsck.ext4 -f /dev/vg/lv

Добавление диска к LVM

pvcreate /dev/sdc3
vgextend vg /dev/sdc3
vgdisplay
lvextend -L 320G /dev/vg/lv
fsck.ext4 -f /dev/vg/lv
resize2fs /dev/vg/lv
fsck.ext4 -f /dev/vg/lv

Уменьшение логического тома

vgdisplay
fsck.ext4 -f /dev/vg/lv
resize2fs /dev/vg/lv 130G
fsck.ext4 -f /dev/vg/lv
lvreduce -L 130G /dev/vg/lv
fsck.ext4 -f /dev/vg/lv

Создание логического тома

vgdisplay
lvcreate -L 12G -n lv vg
lvdisplay
lvscan
mkfs.ext4 /dev/vg/lv

Удаление логического тома

lvdisplay
lvremove /dev/vg/lv

Клонирование

lvcreate -L 8G -s -n homebackup /dev/vg/lv

Создать снапшот:

lvcreate -L 1G -s -n snap01 /dev/vg/vmtemplate