Интернет Unix, снабжает файлы сокетом?

И теперь, в ударе и sed только:

cat test.txt| while IFS="|" read i t ; do echo $i | sed "s/\([0-9]\+\)/\1$t/g;s/,/\n/g" ; done

И в ударе только (любезность Nahuel Fouilleul):

 while IFS="|" read i t;do while read -d, j;do echo "$j$t";done <<<"$i,";done <test.txt
24
08.11.2014, 10:52
4 ответа

Розетки используют разные API

, которые не совсем правда. Существуют некоторые дополнительные функции для использования с розетками, но вы можете использовать, например, Normal READ () и Написать () на сокете FD.

Как это «все файл» применим здесь?

В том смысле, что дескриптор файлов участвует.

Если ваше определение «файла» - это дискретная последовательность байтов, хранящихся в файловой системе, то не все является файлом. Тем не менее, если ваше определение файла - это больше, например, трубопровод для информации, то есть подключение ввода / вывода - то «все является файлом» начинает иметь больше смысла. Эти вещи неизбежно связаны с последовательностями байтов, но откуда они появляются или ходят, могут отличаться контекстами.

Это не очень предназначено буквально, однако. А демон не является файлом, демон - это процесс; Но если вы делаете IPC , ваш метод относится к другому процессу, вполне может быть смягчен по файловым субъектам стиля.

26
27.01.2020, 19:40

«Все - это файл» - это просто преувеличение. Это было романом в 1970-х годах и его было первичной отличительной характеристикой UNIX. Но это просто концепция маркетинга, а не настоящий фундамент Unix, потому что это, очевидно, не правда. Это не выгодно или разумно лечить все как файл.

это CPU файл? Прочитает ли ваша программа () CPU, чтобы получить новую инструкцию? Ram файл? Прочитает ли ваша программа () следующий байт?

затем, появились виды ОС, которые дали вам одну API для дискеты и другой API для жесткого диска, другой API для магнитной ленты и кучу Различные API для разных терминалов и так далее. IBM Mainframe Systems имели различные типы файлов на жестких дисках и дали вам другую API каждому из них, поверьте, или нет! Так что Unix «это файл» подход, вместе с подходом «stdin / Stdout / Stderr» принес очень элегантную абстракцию как для пользователей, так и для программистов.

С сетью эта особая абстракция просто не сработала. И нет никакого вреда, чуть менее общую элегантность и согласованность ОС. Но это работает. Вы видите файл под названием / dev / myinternernetz / www / google / com / tcp / 80 В любом месте в вашей системе сегодня? Можете ли вы открыть (), написать () запрос, и прочитайте () Ответ в хорошем HTML? Нет? Это потому, что это «это файл» абстракция не была очень удобной для взаимодействия по сети. Это не будет работать слишком хорошо на практике. Закон о нарушении абстракций в действии.

12
27.01.2020, 19:40

Можно использовать rsync с опцией --apend или --append-verify . Для получения дополнительной информации см. справочную страницу rsync (1) .

Примечание: даже без --apend или --append-verify , rsync будет намного эффективнее, чем scp (но поскольку ваши данные действительно большие, вам может понадобиться один из этих вариантов в любом случае).

-121--140021-

Очевидно, что настройка libata.force disable kernel применяется слишком поздно. Драйвер ATA сначала пытается сбросить устройство, прежде чем отключить его. Мне удалось отключить сброс, а также устройство с этим параметром ядра libata.force = 9: disable, 9: norst, 10: disable, 10: norst .

Я все еще получаю несколько записей журнала ядра для этих устройств, но они не беспокоят меня, пока на консоли ничего не отображается, и система немедленно загружается:

Nov 08 01:19:39 host kernel: ata9: FORCE: link flag 0x6 forced -> 0x6
Nov 08 01:19:39 host kernel: ata9: SATA max UDMA/133 abar m8192@0xfbffe000 port 0xfbffe100 irq 17
Nov 08 01:19:39 host kernel: ata10: DUMMY
Nov 08 01:19:39 host kernel: ata9: SATA link down (SStatus 0 SControl 300)
-121--92217-

Если вы запустите сокет , вы увидите, что он имеет номер inode и другие характеристики обычных файлов, поэтому я бы классифицировал его как файл в файловой системе. Пример:

# file live
live: socket
# stat live
File: `live'
  Size: 0               Blocks: 0          IO Block: 4096   socket
Device: fc03h/64515d    Inode: 198817      Links: 1
Access: (0660/srw-rw----)  Uid: (23129/  icinga)   Gid: (23130/icinga-cmd)
Access: 2014-11-07 09:27:59.000000000 -0800
Modify: 2014-11-05 09:27:03.000000000 -0800
Change: 2014-11-05 09:27:03.000000000 -0800

11/17. Дополнительная информация для Linux (ext3): Сокет имеет inode (который является 256-байтовым блоком на диске), но не имеет блоков данных (это можно проверить, извлекая inode и исследуя указатели блоков данных; или запуском отладки stat, который показывает блокконтур 0). Таким образом, у него есть метаданные файла (владелец, группа, разрешения и т.д.), но нет содержимого данных на диске. Он идентичен обычному пустому файлу ( touch/tmp/foo ), который также имеет блокконтур 0. В первом случае поле «type» в inode показывает «socket»; во втором случае он показывает «обычный файл».

Ссылки: ext2 inode structure ; команды stat , dumpe2fs и debugfs .

7
27.01.2020, 19:40

Можно просмотреть текущую конфигурацию с помощью

complete -p vi
complete -o bashdefault -o default -o filenames -o nospace -F _exp_ vi

и определение используемой функции оболочки с помощью

type _exp_

Существует полная функция/опция -X , которая позволяет фильтровать результаты. Проблема в том, что это относится только к завершенным действиям. Он не применяется к результатам -o по умолчанию (я не знаю о -o bashdefault ).

Вы можете изменить compspec:

complete -d -f -o filenames -o nospace -F _exp_ -X '@(config.log|config.doc)' vi

К сожалению

  1. вы можете иметь только один -X в вызове complete (прежние перезаписаны)

  2. для работы выше shopt -s extglob ; В противном случае вы ограничиваетесь одним именем или образцом ( «* .log» )

-121--79928-

Быстрый поиск Google открывает PDF Javascript Stripper , который, похоже, делает именно это.

Но имейте в виду, что PDF является подмножеством Postscript, который является Turing-полным языком. Так что могут быть и другие векторы атак, а не только встроенный JavaScript (даже если он, возможно, самый большой), и поэтому математически невозможно знать , что ваш PDF на самом деле «безопасен».

Если вредоносный PDF-файл нацелен на уязвимость в определенном устройстве чтения PDF или связанной с ним библиотеке, то «стерилизация» их в общем случае либо не сработает (и, таким образом, даст ложное чувство безопасности), либо будет излишней и удалит слишком много информации. Просто представьте себе, как удалить все JPEG из PDF-файлов, чтобы предотвратить уязвимость Microsoft GDI + JPEG ...

-121--56710-

Сокеты являются файлами. Можно использовать read и write на сокете: они эквивалентны вызову recv и send с флагами = 0 . Они закрываются при помощи close . Вы можете перемещать их с помощью dup и друзей, если вам нужно перетасовать дескрипторы файлов. Можно установить некоторые флаги с помощью fcntl и использовать буферизацию stdio после вызова fdopen . Список продолжается. Очень важно, что вы можете вызвать select и poll для любого типа файла, включая сокеты, поэтому эти функции позволяют программе блокировать до тех пор, пока она не получит ввод любыми способами, просто перечисляя дескрипторы файлов.

Существуют дополнительные системные вызовы для некоторых типов сокетов ( recv и send , shutdown и т.д.), как и дополнительный системный вызов для устройств ( ioctl ).

Не все файлы имеют имена , и из них они не всегда находятся в структуре каталогов. Трубы, созданные трубой (например, в конвейере оболочки) и сокеты, созданные socketpair , не имеют имен, но они все еще являются файлами. Сокеты, созданные сокетом , имеют имя, синтаксис которого зависит от домена. Это имя передается в struct sockaddr для привязки и других функций. Для сокета Unix ( AF _ UNIX ),имя - структурный sockaddr_un, представляющий собой семейство и последовательность; в зависимости от последовательности, это может быть имя файла (именованные сокеты могут создаваться с помощью mknod на множестве вариантов unix) или нет (абстрактное пространство имен). Для сокета IPv4 ( AF _ INET ) именем является struct sockaddr_in, содержащий номер порта и IP-адрес, а также протокол из вызова сокета .

7
27.01.2020, 19:40

Теги

Похожие вопросы