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
ownCloud — система для организации хранения, синхронизации и обмена данными, размещенными на внешних серверах.
В отличии от Dropbox и ему подобных, ownCloud отличается предоставлением пользователю полного контроля над своими данными — информация размещается на подконтрольных пользователю системах. Доступ к данным в ownCloud может осуществляться при помощи web-интерфейса или протокола WebDAV.
Особенности ownCloud
- Open source;
- Поддержка шифрования передачи данных;
- Автоматическое резервное копирование;
- Поддержка WebDAV позволяет организовать доступ к данным из любых операционных систем;
- Поддержка синхронизации данных с другими web-приложениями, поддерживающими протокол remoteStorage;
- Управление пользователями и группами;
- В web-интерфейс встроены средства для работы с синхронизированной адресной книгой, календарем-планировщиком, коллекцией фотографий, архивом музыкальных произведений;
- Для ownCloud подготовлен сервер Ampache, что позволяет организовать потоковое вещание музыки;
Интересные факты фильма 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-команды whoami, uname, ls и тд.
- Когда Сэм набирает команды в текстовой консоли, на фоне слева сверху видна программа top, в ней — запущенный графический сервер Xorg (вместе с демоном hald). Первая версия Xorg официально появилась 6 апреля 2004, то есть через 15 лет после того, как компьютер был в последний раз использован.
- Когда главный герой крадёт и выкладывает в Интернет EncomOS 12, Эд Диллинджер открывает консоль с надписью «ENCOM LINUX CONSOLE».
- Главный герой пытается получить рут-доступ в систему отца, войдя под учётной записью «backdoor».
запланированная проверка дисков
# sudo touch /forcefsck
часто используемые команды в 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