Нет, /dev/stdin
и /dev/stdout
являются неверными устройствами. Это не терминальные устройства, это псевдонимы для стандартного ввода и стандартного вывода соответственно. Стандартный ввод и стандартный вывод по определению являются файловыми дескрипторами, которые приложения ожидают открыть и которые имеют обычное значение (файловые дескрипторы 0 и 1 соответственно, есть также 2, что является стандартной ошибкой). Такие устройства, как /dev/stdin
и /dev/stdout
, полезны, когда приложению требуется имя файла, но пользователь приложения хочет, чтобы оно обращалось к определенному файловому дескриптору, а не открытие какого-то файла. В зависимости от варианта Unix они могут даже не быть файлами устройств; например, в Linux это символические ссылки на /proc/self/fd/0
и друзей, а это, в свою очередь, «волшебные» символические ссылки на любой файл, который процесс уже открыл в этом файле. дескриптор.
Изменение разрешений для /dev/stdin
и /dev/stdout
изменит только то, что происходит, когда эти имена файлов используются явно. Это не влияет ни на что, связанное с терминалом, и не влияет на обычное использование стандартного ввода и стандартного вывода, поскольку разрешения имеют значение только при открытии определенного имени файла.
Что делает mesg
, так это изменяет разрешения управляющего терминала процесса.Для приложения, работающего в терминале, терминал открыт при стандартном вводе, стандартном выводе и стандартной ошибке (файловые дескрипторы 0, 1 и 2). Вы можете использовать команду tty
, чтобы узнать, что такое терминальное устройство. mesg n
эквивалентно chmod gw "$(tty)"
и mesg y
эквивалентно chmod g+w "$(tty)"
.
Как уже упоминалось в комментариях, вы можете сделать это одной командой zgrep
:
zgrep -c "sent" /home/myname/April/*.tar.gz
Из руководства grep
:
-c, --count
Подавить нормальный вывод; вместо этого напечатайте количество совпадающих строк для каждого входного файла. С опцией -v, --invert-match (см. ниже) подсчитайте несовпадающие строки. (-c определяется POSIX.)