Ну, это мой очень личный способ читать страницы справочника:
Manpager
При открытии справочной страницы , используя man
команду, выход будет отображаться / оказанный less
или more
командами, или любой другой командой , которая будет установлена в качестве пейджера (manpager).
Если вы используете Linux, вам, вероятно, предоставлена инфраструктура man, уже настроенная для использования /usr/bin/less -is
(если вы не установили какой-либо минимальный дистрибутив), как man(1)
описано в разделе «Опции»:
-P pager
Specify which pager to use. This option overrides the MANPAGER environment variable,
which in turn overrides the PAGER variable. By default, man uses /usr/bin/less -is.
Во FreeBSD и OpenBSD это всего лишь вопрос редактирования MANPAGER
переменной среды, поскольку они в основном будут использоваться more
, а некоторые функции, такие как поиск и выделение текста, могут отсутствовать.
Существует хороший ответ на вопрос о том, какие различия more
, less
и most
не здесь (не используется most
). Возможность прокрутки назад и прокрутки вперед по странице с помощью Spaceили обоими способами по строке ↓или или ↑(также с использованием vi
привязок jи k) имеет важное значение при просмотре man-страниц. Нажмите hво время использования, less
чтобы увидеть список доступных команд.
И именно поэтому я предлагаю вам использовать в less
качестве вашего мужского пейджер. less
есть некоторые важные функции, которые будут использоваться во время этого ответа.
Как команда отформатирована?
Соглашения по коммунальным предприятиям : Открытые базовые спецификации групп, выпуск 7 - IEEE Std 1003.1, выпуск 2013 г. Вы должны посетить эту ссылку, прежде чем пытаться понять man-страницу. В этой онлайн-справке описывается синтаксис аргументов стандартных утилит и вводится терминология, используемая в POSIX.1-2017 для описания аргументов, обрабатываемых утилитами. Это также косвенно информирует вас о реальном значении слов, таких как параметры, аргументы, опция аргумента ...
Заголовок любой man-страницы будет выглядеть для вас менее загадочно после понимания обозначений утилит:
utility_name[-a][-b][-c option_argument]
[-d|-e][-f[option_argument]][operand...]
Имейте в виду, что вы хотите сделать.
Когда вы занимались своими исследованиями, xargs
вы делали это для мошенничества, верно? У вас была особая потребность в чтении стандартного вывода и выполнении команд на основе этого вывода.
Но когда я не знаю, какую команду я хочу?
Используйте man -k
или apropos
(они эквивалентны). Если я не знаю , как найти файл: man -k file | grep search
. Прочитайте описания и найдите тот, который будет лучше соответствовать вашим потребностям. Пример:
apropos -r '^report'
bashbug (1) - report a bug in bash
df (1) - report file system disk space usage
e2freefrag (8) - report free space fragmentation information
filefrag (8) - report on file fragmentation
iwgetid (8) - Report ESSID, NWID or AP/Cell Address of wireless network
kbd_mode (1) - report or set the keyboard mode
lastlog (8) - reports the most recent login of all users or of a given user
pmap (1) - report memory map of a process
ps (1) - report a snapshot of the current processes.
pwdx (1) - report current working directory of a process
uniq (1) - report or omit repeated lines
vmstat (8) - Report virtual memory statistics
По умолчанию Apropos работает с регулярными выражениями (( man apropos
прочитайте описание и узнайте, что -r
делает), и в этом примере я ищу каждую страницу руководства, где описание начинается с «report».
Чтобы найти информацию, связанную с чтением стандартной обработки ввода / вывода и достижением xargs
в качестве возможного варианта:
man -k command| grep input
xargs (1) - build and execute command lines from standard input
Всегда читайте DESCRIPTION
перед началом
Найдите время и прочитайте описание. Просто прочитав описание xargs
команды, мы узнаем, что:
xargs
читает из STDIN и выполняет необходимую команду. Это также означает, что вам нужно будет иметь некоторые знания о том, как работает стандартный ввод, и о том, как манипулировать им через каналы для цепочки команд.
- Поведение по умолчанию - вести себя как
/bin/echo
. Это дает вам небольшой совет, что если вам нужно связать несколько цепочек xargs
, вам не нужно использовать echo для печати.
- Мы также узнали, что имена файлов unix могут содержать пробелы и символы новой строки, что это может быть проблемой, и аргумент
-0
является способом предотвращения взрыва вещей, используя нулевые символьные разделители. Описание предупреждает вас, что команда, используемая в качестве ввода, должна также поддерживать эту функцию, и что GNU find
поддерживает ее. Отлично. Мы используем много найти с xargs
.
xargs
остановится, если будет достигнут статус выхода 255.
Некоторые описания очень короткие, и это в основном потому, что программное обеспечение работает очень просто. Даже не думайте пропустить эту часть справочной страницы ;)
На другие вещи стоит обратить внимание ...
Вы знаете, что вы можете искать файлы с помощью find
. Есть множество вариантов, и если вы только посмотрите на них SYNOPSIS
, вы будете поражены ими. Это только верхушка айсберга. Исключая NAME
, SYNOPSIS
и DESCRIPTION
, у вас будут следующие разделы:
AUTHORS
: люди, которые создали или помогли в создании команды.
BUGS
: перечисляет все известные дефекты. Могут быть только ограничения реализации.
ENVIRONMENT
: Аспекты вашей оболочки, на которые может повлиять команда, или переменные, которые будут использоваться.
EXAMPLES
или NOTES
: не требующий пояснений.
REPORTING BUGS
С кем вам придется связаться, если вы обнаружите ошибки в этом инструменте или в его документации.
COPYRIGHT
: Человек, который создал и отказ от ответственности о программном обеспечении. Все связано с лицензией самого программного обеспечения.
SEE ALSO
Другие команды, инструменты или рабочие аспекты, которые относятся к этой команде и не могут поместиться ни в одном из других разделов.
Скорее всего, вы найдете интересную информацию об аспектах инструмента в разделе примеров / заметок.
пример
На следующих шагах я возьму find
в качестве примера, поскольку его концепции «более просты», чем xargs
объяснения (одна команда находит файлы, а другая имеет дело с stdin и конвейерным выполнением других командных выходных данных). Давайте просто притворимся, что ничего не знаем (или очень мало) об этой команде.
У меня есть конкретная проблема: мне нужно искать каждый файл с .jpg
расширением и размером 500 КБ (KiB = 1024 байт, обычно называемый кибибайт) или более в папке ftp-сервера.
Сначала откройте руководство man find
. Это SYNOPSIS
тонкий. Давайте поищем что-то внутри руководства: введите /плюс нужное вам слово ( size
). Он будет индексировать много записей, -size
которые будут рассчитывать конкретные размеры. Застрял. Не знаю, как искать с «больше» или «меньше» заданного размера, и мужчина не показывает это мне.
Давайте попробуем и поищем следующую найденную запись, нажав n. ХОРОШО. Нашел что то интересное find
\( -size +100M -fprintf /root/big.txt %-10s %p\n \)
. Может быть, этот пример показывает нам, что с -size +100M
его помощью найдутся файлы размером 100 МБ или более. Как я могу подтвердить? Переход к заголовку страницы и поиск других слов.
Опять давайте попробуем слово greater
. Нажатие gприведет нас к руководству страницы. /greater
и первая запись:
Numeric arguments can be specified as
+n for **greater** than n,
-n for less than n,
n for exactly n.
Звучит здорово. Кажется, этот блок руководства подтвердил то, что мы подозревали. Однако это относится не только к размерам файлов. Он будет применяться ко всем, n
что можно найти на этой странице руководства (как сказано в фразе: «Числовые аргументы могут быть указаны как»).
Хороший. Найдем способ фильтрации по имени: g /insensitive
. Почему? Нечувствительность? WTF? У нас есть гипотетический FTP - сервер, где «что другие ОС» люди могли бы дать имя файла с расширениями , как .jpg
, .JPG
, .JpG
. Это приведет нас к:
-ilname pattern
Like -lname, but the match is case insensitive. If the -L
option or the -follow option is in effect, this test returns
false unless the symbolic link is broken.
Однако после поиска lname
вы увидите, что это будет искать только символические ссылки. Мы хотим настоящие файлы. Следующая запись:
-iname pattern
Like -name, but the match is case insensitive. For example, the
patterns `fo*' and `F??' match the file names `Foo', `FOO',
`foo', `fOo', etc. In these patterns, unlike filename expan‐
sion by the shell, an initial '.' can be matched by `*'. That
is, find -name *bar will match the file `.foobar'. Please note
that you should quote patterns as a matter of course, otherwise
the shell will expand any wildcard characters in them.
Отлично. Мне даже не нужно читать, -name
чтобы увидеть, что -iname
это аргумент без учета регистра. Давайте соберем команду:
Команда: find /ftp/dir/ -size +500k -iname "*.jpg"
Что подразумевается здесь: знание, что подстановочный знак ?
представляет «любой символ в одной позиции» и *
представляет «ноль или более любого символа». -name
Параметр даст вам краткое изложение этого знания.
Советы, которые применяются ко всем командам
Некоторые опции, мнемоника и «стиль синтаксиса» проходят через все команды, заставляя вас тратить время на то, чтобы вообще не открывать man-страницу. Те, которые изучаются на практике, и наиболее распространенными являются:
- Вообще,
-v
значит многословно. -vvv
это вариант "очень очень многословный" в некоторых программах.
- Следуя стандарту POSIX, обычно можно сложить один аргумент тире. Пример:
tar -xzvf
, cp -Rv
.
- Обычно
-R
и / или -r
означает рекурсивный.
- Почти все команды имеют краткую справку с
--help
опцией.
--version
показывает версию программного обеспечения.
-p
, на копирование или перемещение утилиты означает «сохранить права».
-y
означает ДА или «продолжить без подтверждения» в большинстве случаев.
Обратите внимание, что вышеупомянутое не всегда верно, хотя. Например, -r
переключатель может означать очень разные вещи для разных программ. Всегда полезно проверить и убедиться, что команда может быть опасной, но это стандартные значения по умолчанию.
Значения команд по умолчанию.
В пейджерной части этого ответа мы увидели, что less -is
это пейджер man
. Поведение команд по умолчанию не всегда отображается в отдельном разделе на страницах man, или в разделе, который находится выше всех.
Вам нужно будет прочитать варианты, чтобы узнать значения по умолчанию, или, если вам повезет, ввод /pager
приведет вас к этой информации. Это также требует, чтобы вы знали концепцию пейджера (программное обеспечение, которое прокручивает man-страницу), и это то, что вы приобретете только после прочтения большого количества man-страниц.
Почему это важно? Это откроет ваше восприятие, если вы обнаружите различия в поведении прокрутки и цвета при чтении, например, man(1)
в Linux ( less -is
пейджер) или FreeBSD man(1)
.
А как насчет SYNOPSIS
синтаксиса?
После получения всей информации, необходимой для выполнения команды, вы можете комбинировать опции, аргументы-опции и встроенные операнды, чтобы выполнить свою работу. Обзор концепций:
- Опции - это переключатели, которые определяют поведение команды. « Делай это », « не делай этого » или « действуй так ». Часто называют выключатели.
- Аргументы-опции используются в большинстве случаев, когда опция не двоичная (вкл / выкл), как
-t
при монтировании, которая указывает тип файловой системы ( -t iso9660
, -t ext2
). « Делай это с закрытыми глазами » или « корми животных, но только львов ». Также называется аргументами.
- Операнды - это то, что вы хотите, чтобы эта команда действовала. Если вы используете
cat file.txt
, операнд - это файл в вашем текущем каталоге, и его содержимое будет показано на STDOUT
. ls
это команда, в которой операнд является необязательным Три точки после операнда неявно говорят вам, что cat
могут воздействовать на несколько операндов (файлов) одновременно. Вы можете заметить, что некоторые команды установили тип операнда, который он будет использовать. Пример:cat [OPTION] [FILE]...
Связанные синопсис вещи:
Когда этот метод не будет работать?
- Manpages, которые не имеют примеров
- Страницы, где варианты имеют краткое объяснение
- При использовании общих ключевых слов , как
and
, to
, for
в страницах руководства
- Manpages, которые не установлены. Это кажется очевидным, но, если у вас не установлено
lftp
(и его man-страницы), вы не можете знать, что это подходящий вариант в качестве более сложного ftp-клиента, запустивman -k ftp
В некоторых случаях примеры будут довольно простыми, и вам придется выполнить некоторые команды для тестирования или, в худшем случае, Google его.
Другое: Языки программирования и его модули:
Если вы программируете или просто создаете сценарии, имейте в виду, что некоторые языки имеют свои собственные системы manpages, такие как perl
( perldocs
), python ( pydocs
) и т. Д., Содержащие конкретную информацию о методах / функциях, переменных, поведении и другую важную информацию о модуле. Вы пытаетесь использовать и учиться. Это было полезно для меня, когда я создавал скрипт для загрузки непрочитанных электронных писем IMAP с помощью perl Mail::IMAPClient
модуля.
Вы должны будете выяснить эти конкретные страницы с помощью man -k
или поиска в Интернете. Примеры:
[root@host ~]# man -k doc | grep perl
perldoc (1) - Look up Perl documentation in Pod format
[root@host ~]# perldoc Mail::IMAPClient
IMAPCLIENT(1) User Contributed Perl Documentation IMAPCLIENT(1)
NAME
Mail::IMAPClient - An IMAP Client API
SYNOPSIS
use Mail::IMAPClient;
my $imap = Mail::IMAPClient->new(
Server => ’localhost’,
User => ’username’,
Password => ’password’,
Ssl => 1,
Uid => 1,
);
... тонны других вещей здесь, с разделами, как обычная man-страница ...
С питоном:
[root@host ~]# pydoc sys
Help on built-in module sys:
NAME
sys
FILE
(built-in)
MODULE DOCS
http://www.python.org/doc/current/lib/module-sys.html
DESCRIPTION
This module provides access to some objects used or maintained by the
interpreter and to functions that interact strongly with the interpreter.
...again, another full-featured manpage with interesting info...
Или, help()
функция внутри оболочки Python, если вы хотите прочитать более подробную информацию о каком-либо объекте:
nwildner@host:~$ python3.6
Python 3.6.7 (default, Oct 21 2018, 08:08:16)
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> help(round)
Help on built-in function round in module builtins:
round(...)
round(number[, ndigits]) -> number
Round a number to a given precision in decimal digits (default 0 digits).
This returns an int when called with one argument, otherwise the
same type as the number. ndigits may be negative.
Бонус:wtf
команда может помочь вам с аббревиатурами и она работает , как whatis
если бы не аббревиатуры на нем нет базы данных найдена, но то , что вы ищете является частью базы данных человека. В Debian эта команда является частью bsdgames
пакета. Примеры:
nwildner@host:~$ wtf rtfm
RTFM: read the fine/fucking manual
nwildner@host:~$ wtf afaik
AFAIK: as far as I know
nwildner@host:~$ wtf afak
Gee... I don't know what afak means...
nwildner@host:~$ wtf tcp
tcp: tcp (7) - TCP protocol.
nwildner@host:~$ wtf systemd
systemd: systemd (1) - systemd system and service manager