sponge от moreutils - в чем разница в перенаправлении оболочки? полезные примеры?

man mke2fs состояния

Допустимые значения размера блока 1024, 2048 и 4 096 байтов за блок

Если мы взглянули к fs/block_dev.c мы могли найти следующее:

int set_blocksize(struct block_device *bdev, int size)
{
        /* Size must be a power of two, and between 512 and PAGE_SIZE */
        if (size > PAGE_SIZE || size < 512 || !is_power_of_2(size))
                return -EINVAL;

И наконец мы можем определить PAGE_SIZE:

# getconf -a| grep PAGE_SIZE
PAGE_SIZE                          4096
15
06.06.2015, 12:03
2 ответа

Предположим, что у вас есть файл с именем вход , вы хотите удалить все строки, начинающиеся с # во входе . Вы можете получить, что все строки не начинаются с #, используя:

grep -v '^#' input

Но как внести изменения во вход ? Со стандартным сундуком POSIX вам нужно использовать временный файл, что-то вроде:

grep -v '^#' input >/tmp/input.tmp
mv /tmp/input.tmp ./input

с перенаправлением оболочки:

grep -v '^#' input >input

усечет вход перед тем, как вы будете читать из него.

С помощью губки вы можете:

grep -v '^#' input | sponge input
32
27.01.2020, 19:49

сама домашняя страница moreutils документирует типичный случай использования:

sed "s/root/toor/" /etc/passwd | grep -v joey | sponge /etc/passwd

Здесь /etc/passwd и записывается, и читается, и изменяется. Не нажимая stdin перед записью, /etc/passwd может быть поврежден (так как файл изменился во время чтения).

7
27.01.2020, 19:49

Теги

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