Передача значений через каналы

Используйте mdadm, проверьте страницу справочника. Однако я перечислю один глюк здесь. Если Вы делаете это и действительно хотите надежность, необходимо удостовериться, что главная загрузочная запись копируется в оба диска. По умолчанию это будет, вероятно, только скопировано в один диск. Если тот диск перестает работать, Вы не можете загрузиться от другого диска, даже при том, что все Ваши данные безопасны.

Для копирования mbr в оба диска используйте что-то как dd для копирования первых 446 байтов одного диска к другому.

dd if=/dev/sda of=/dev/sdb bs=446 count=1

Если Вы создаете RAID сверху устройств (/dev/sda), а не сверху партонов на устройствах (/dev/sda1), то Вы, вероятно, не должны делать то, что я предлагаю, потому что Вы пишете данные непосредственно в устройство под md драйвером. По крайней мере, я никогда не пробовал его тот путь.

3
13.12.2011, 08:32
2 ответа

Каналы работают путем отправки вывода одной программы во вход другой программы. Это означает, что программа, получающая вывод другого, должна смочь читать из STDIN (стандартные потоки).

В этом случае, grep может считать вывод ll потому что это разработано тот путь. du ожидает параметр командной строки, указывающий на каталог, который он должен запустить в (если каталог не будет дан, то он примет значение по умолчанию к текущему рабочему каталогу ./).

Что касается наблюдения размеров .pdf файлы, если все файлы находятся в каталоге, можно работать du -h -d1 /path/to/pdf/dir или locate *.pdf | xargs | du -h. Если они будут в различных каталогах, то Вы захотите использовать -exec и find вместе (другой пользователь, вероятно, даст Вам руку с этим, я не совсем уверен, как сделать это).

7
27.01.2020, 21:10
  • 1
    Между прочим, можете Вы давать мне некоторые команды в качестве примера, которые разработаны для чтения из STDIN –  xiaohan2012 13.12.2011, 08:59
  • 2
    Вместо du -h -d1 /path/to/pdf/dir, также возможно использовать locate *.pdf | xargs | du -h –  bbaja42 13.12.2011, 10:46
  • 3
    @bbaja42 благодарит, я добавлю это к сообщению. –  n0pe 13.12.2011, 23:18
  • 4
    @bbaja42 Там является слишком многими | символы там. попробовать locate *.pdf | xargs du -h вместо этого (т.е. нет | между xargs и du). Кроме того, если какие-либо из имен файлов содержат пробелы или новые строки, более безопасно использовать locate -0 *.pdf | xargs -0 -r du -h (принятие Вашего locate на самом деле mlocate или некоторый другой locate это имеет -0 опция). Наконец, это не будет работать правильно если там любой .pdf файлы в текущем каталоге, потому что оболочка развернет шарик прежде, чем передать его locate - использовать locate -0 .pdf вместо этого. –  cas 15.03.2016, 12:42

То, что я имею в виду, является выводом первой команды, вход следующего.

Это корректно. Однако в Ваших двух примерах, различие - это grep действия на его входе, тогда как du не делает. При передаче по каналу работ как ожидалось, только если первая команда дает что-то стандартному выводу и вторым взятиям что-то от стандартного входа, в этом случае эти два потока будут соединены через "канал". Можно узнать, возможно ли это путем поиска "стандартного входа" и "стандартного вывода" в страницах справочника команд.

2
27.01.2020, 21:10
  • 1
    я действительно не совсем понимаю почему grep действия на его входе, тогда как du не делает. Как может судить это grep может в то время как du не может. Или, учитывая другую программу, как я могу определить, может ли она или не действовать на его вход? –  xiaohan2012 13.12.2011, 08:57
  • 2
    Оба man grep и grep --help скажите Вам в первых строках, что стандартный вход принят этой командой. Это должно иметь место для любого принятия команды STDIN. –  Dalker 13.12.2011, 09:12

Теги

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