Как указать размер блока для vFAT файловой системы?

Если Вы только хотите первую строку или два, следующий тип приема работает и избегает проблем буферизации, заставленных при помощи двух различных команд считать поток вывода:

$ ps -eF   | { IFS= read -r x ; echo "$x" ; grep worker; }
$ ls -la / | { IFS= read -r x ; echo "$x" ; grep sbin; }

read встроено к оболочке и не использует весь буфер входа только для вывода одной строки, таким образом с помощью read листы вся остальная часть вывода для следующей команды.

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

$ ps -eF   | { sleep 5 ; head -n 1 ; grep worker; }
$ ls -la / | { sleep 5 ; head -n 1 ; grep sbin; }

Теперь, оба вышеупомянутые примеры перестали работать таким же образом - head читает весь буфер вывода только для продолжения одной линии, и что буфер не доступен следующему grep.

Вы видите проблему буферизации еще более ясно при помощи некоторых примеров, которые нумеруют выходные строки, таким образом, можно сказать, какие строки отсутствуют:

$ ps -eF          | cat -n | { sleep 5 ; head -n 1 ; head ; }
$ ls -la /usr/bin | cat -n | { sleep 5 ; head -n 1 ; head ; }

Простой способ видеть проблему буферизации состоит в том, чтобы использовать seq это генерирует список чисел. Мы можем легко сказать, какие числа пропадают:

$ seq 1 100000    | { sleep 5 ; head -n 1 ; head ; }
1

1861
1862
1863
1864
1865
1866
1867
1868
1869

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

$ seq 1 100000 | { sleep 5 ; IFS= read -r x ; echo "$x" ; head ; }
1
2
3
4
5
6
7
8
9
10
11

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

$ seq 1 100000 | { sleep 5 ; head -5 ; head -5 ; head -5 ; head -5 ; }
1
2
3
4
5

1861
1862
1863
1864
499
3500
3501
3502
3503
7
5138
5139
5140
5141

Рассмотрение числа 1861 выше, мы можем вычислить размер буфера, используемого head путем подсчета seq вывод от 1 кому: 1860:

$ seq 1 1860 | wc -c
8193

Мы видим это head буферизует путем чтения полных 8 КБ (8*1024 байта) вывода канала за один раз, даже для продолжения всего нескольких линий его собственного вывода.

3
18.10.2014, 16:20
1 ответ
mkfs.vfat -s 64 /dev/scd1

Предположим, вы хотите отформатировать с 64 Сектор на кластер, да, вы можете сделать это с вышеуказанной командой. / dev / scd1 относительно вашего устройства.

3
27.01.2020, 21:23

Теги

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