Существует ли различие между чтением, голова-1, и sed 1q?

Возможно, объедините правила udev и прием iptables?

Когда целевое USB-устройство будет добавлено, выполниться iptables -D OUTPUT -j DROP; при удалении выполниться iptables -I OUTPUT DROP

Для детали о сценарии смотрите на руководство здесь

(Используйте lsusb получать информацию о поставщике)

Править

Ну, это разработано для некорневых пользователей, так как иначе, невозможно заблокировать пользователя root от восстановления его, если флеш-карта не является медиа доступа в Интернет.

7
26.09.2014, 21:00
4 ответа

Ни эффективность, ни вместимость - не самая большая разница. Все они будут возвращать разные выходные данные для определенных входных данных.

  • head -n1 предоставит завершающую новую строку, только если она есть на входе.

  • sed 1q всегда будет предоставлять завершающую новую строку, но в остальном сохранит ввод.

  • read никогда не предоставит завершающую новую строку и будет интерпретировать последовательности обратной косой черты.

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

6
27.01.2020, 20:15

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

echo "foo:bar:baz" | {
  IFS=: read one two three
  echo $two
}
5
27.01.2020, 20:15

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

Цитата из здесь ,

Эти встроенные команды являются частью оболочки и реализованы как часть исходного кода оболочки. Оболочка распознает, что команда то, что его попросили выполнить, было одной из его встроенных функций, и он выполняет это действие само по себе, без вызова отдельного исполняемого файла. Разные оболочки имеют разные встроенные функции, хотя будет целая много перекрытий в базовой комплектации.

Я бы хотел, чтобы вы поэкспериментировали с этим, чтобы вы могли понять, почему read присутствует как встроенная оболочка.

Обычно вы не могли выполнить strace для встроенных команд оболочки. Однако и для этого есть обходной путь. Это довольно четко объясняется в этом ответе .

  1. В первой оболочке запустите команду как stty -echo .
  2. Откройте другую оболочку и выполните команду как cat | strace bash> / dev / null .
  3. Теперь оболочка будет ждать, пока пользователь введет команды и там, когда пользователь вводит команды, вы могли видеть, что происходит и на системном уровне.
  4. Когда вы даете 3 команды выше, вы можете увидеть, что чтение имеет меньше системных вызовов, чем оставшиеся 2 команды. Я не наклеиваю вывод из strace , поскольку он довольно большой.
5
27.01.2020, 20:15

Если файловой системой является ext2, ext3 или ext4, можно использовать команду tune2fs для получения сведений о данной файловой системе на устройстве.

$ sudo tune2fs -l <dev>

Пример

$ sudo tune2fs -l /dev/sda2
tune2fs 1.42.8 (20-Jun-2013)
Filesystem volume name:   <none>
Last mounted on:          /boot
Filesystem UUID:          xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super huge_file uninit_bg dir_nlink extra_isize
Filesystem flags:         signed_directory_hash 
Default mount options:    user_xattr acl
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              128016
Block count:              512000
Reserved block count:     25600
Free blocks:              355130
Free inodes:              127934
First block:              1
Block size:               1024
Fragment size:            1024
Reserved GDT blocks:      256
Blocks per group:         8192
Fragments per group:      8192
Inodes per group:         2032
Inode blocks per group:   254
Flex block group size:    16
Filesystem created:       Tue Jul 15 21:26:21 2014
Last mount time:          Fri Sep  5 08:17:04 2014
Last write time:          Fri Sep  5 08:17:04 2014
Mount count:              38
Maximum mount count:      -1
Last checked:             Tue Jul 15 21:26:21 2014
Check interval:           0 (<none>)
Lifetime writes:          172 MB
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:           128
Journal inode:            8
Default directory hash:   half_md4
Directory Hash Seed:      xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Journal backup:           inode blocks

Параметр «Функции файловой системы» перечислять то, что требуется.

Какие у меня устройства?

Для вывода их списка можно использовать команду lsblk .

85 .9G 0 lvm

$ lsblk | head -8 | column -t
NAME           MAJ:MIN  RM  SIZE    RO  TYPE  MOUNTPOINT
sda            8:0      0   238.5G  0   disk
├─sda1         8:1      0   200M    0   part  /boot/efi
├─sda2         8:2      0   500M    0   part  /boot
└─sda3         8:3      0   237.8G  0   part
├─fedora-root  253:0    0   50G     0   lvm   /
├─fedora-swap  253:1    0   2G      0   lvm   [SWAP]
└─fedora-home  253:2    0   185.9G  0   lvm
-121--86145-

Поскольку вы не можете добавить репозиторий, их всегда можно добавить с терминала с помощью командной строки. Перейдите к списку репозиториев на веб-сайте WebUpd8 . Скопируйте адрес главного репозитория - Главный репозиторий . Вы хотите добавить его, потому что он содержит все остальные.

  1. sudo cp/etc/apt/sources.list/etc/apt/sources.list.backup
  2. sudo gedit/etc/apt/sources.list
  3. Посетите Главное хранилище в веб-браузере.
  4. Найдите стрелку раскрывающегося списка, которая гласит:

    Технические сведения об этом PPA

  5. Выберите версию Ubuntu в списке Выберите версию
  6. Добавьте полученные выходные данные в файл на шаге 2.
  7. Сохраните файл
  8. sudo apt-get update . Теперь эта команда обновления должна получить закрытые ключи нового репозитория. При получении ошибки, указанной в комментарии, этот репозиторий не имеет закрытого ключа. В этот пункт вы можете связаться с сопровождающим PPA, который либо выдаст вам ключ, либо попросит проигнорировать предупреждение.
-121--54825-

Читать varname можно только внутри сценария оболочки, а два других можно использовать без записи сценария оболочки.

Например,

можно использовать varname = $ (head -1) и varname = $ (sed 1q) просто в качестве команды в терминале, но вы должны предоставить свой аргумент, а именно, какие файлы вы ссылаетесь на самую верхнюю строку, т.е. varnam = $ (head -1 file1) .

0
27.01.2020, 20:15

Теги

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