Bem, esta é minha maneira muito pessoal de ler páginas de manual:
O manpager
Quando você abre uma página de manual usando o man
comando, a saída será exibido / prestados pelos less
ou more
comandos, ou qualquer outro comando que será definido como o pager (manpager).
Se você estiver usando Linux, provavelmente será atendido com sua infraestrutura man já configurada para uso /usr/bin/less -is
(a menos que você tenha instalado uma distribuição mínima) man(1)
, como explica na seção Opções:
-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.
No FreeBSD e no OpenBSD é apenas uma questão de editar a MANPAGER
variável de ambiente, uma vez que elas serão usadas principalmente more
, e alguns recursos, como pesquisa e destaque de texto, podem estar ausentes.
Há uma boa resposta para a pergunta de quais diferenças more
, less
e most
tem aqui (nunca usado most
). A capacidade de rolar para trás e avançar por página com Spaceou nos dois sentidos por linha com ↓ou ↑(também, usando vi
ligações je k) é essencial durante a navegação nas páginas de manual. Pressione henquanto estiver usando less
para ver o resumo dos comandos disponíveis.
E é por isso que sugiro que você use less
como seu pager manual. less
possui alguns recursos essenciais que serão usados durante esta resposta.
Como um comando é formatado?
Convenções de utilitários : The Open Group Base Specifications Edição 7 - IEEE Std 1003.1, 2013 Edition. Você deve visitar esse link antes de tentar entender uma página de manual. Esta referência online descreve a sintaxe do argumento dos utilitários padrão e apresenta a terminologia usada em todo o POSIX.1-2017 para descrever os argumentos processados pelos utilitários. Isso também o indiretamente atualizará o significado real de palavras como parâmetros, argumentos, opção de argumento ...
O cabeçalho de qualquer página de manual parecerá menos enigmático para você depois de entender a notação das convenções de utilidade:
utility_name[-a][-b][-c option_argument]
[-d|-e][-f[option_argument]][operand...]
Tenha em mente o que você quer fazer.
Ao fazer sua pesquisa sobre xargs
você, fez isso para um investidor, certo? Você tinha uma necessidade específica que estava lendo a saída padrão e executando comandos com base nessa saída.
Mas quando não sei qual comando quero?
Use man -k
ou apropos
(eles são equivalentes). Se eu não sei como encontrar um arquivo: man -k file | grep search
. Leia as descrições e encontre uma que melhor atenda às suas necessidades. Exemplo:
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
Por padrão, o Apropos trabalha com expressões regulares ( man apropos
leia a descrição e descubra o que -r
faz). Neste exemplo, estou procurando todas as páginas de manual em que a descrição começa com "report".
Para procurar informações relacionadas à leitura do processamento padrão de entrada / saída e ao alcance xargs
como uma opção possível:
man -k command| grep input
xargs (1) - build and execute command lines from standard input
Leia sempre o DESCRIPTION
antes de começar
Reserve um tempo e leia a descrição. Apenas lendo a descrição do xargs
comando, aprenderemos que:
xargs
lê STDIN e executa o comando necessário. Isso também significa que você precisará ter algum conhecimento de como a entrada padrão funciona e como manipulá-la através de pipes para encadear comandos
- O comportamento padrão é agir como
/bin/echo
. Isso fornece uma pequena dica de que, se você precisar encadear mais de um xargs
, não precisará usar eco para imprimir.
- Também aprendemos que os nomes de arquivos unix podem conter linhas em branco e novas linhas, que isso pode ser um problema e o argumento
-0
é uma maneira de impedir que as coisas explodam usando separadores de caracteres nulos. A descrição avisa que o comando que está sendo usado como entrada também precisa suportar esse recurso e que o GNU o find
suporta. Ótimo. Nós usamos muitas informações com xargs
.
xargs
irá parar se o status de saída 255 for alcançado.
Algumas descrições são muito curtas e isso geralmente ocorre porque o software funciona de uma maneira muito simples. Nem pense em pular esta parte da página de manual ;)
Outras coisas para prestar atenção ...
Você sabe que pode procurar arquivos usando find
. Há uma tonelada de opções e, se você apenas olhar SYNOPSIS
, ficará impressionado com elas. É apenas a ponta do iceberg. Excluindo NAME
, SYNOPSIS
e DESCRIPTION
, você terá as seguintes seções:
AUTHORS
: as pessoas que criaram ou ajudaram na criação do comando.
BUGS
: lista todos os defeitos conhecidos. Pode haver apenas limitações de implementação.
ENVIRONMENT
: Aspectos do seu shell que podem ser afetados pelo comando ou variáveis que serão usadas.
EXAMPLES
ou NOTES
: auto-explicativo.
REPORTING BUGS
: Quem você terá que entrar em contato se encontrar erros nesta ferramenta ou em sua documentação.
COPYRIGHT
: Pessoa que criou e se isenta de responsabilidade do software. Tudo relacionado à licença do próprio software.
SEE ALSO
: Outros comandos, ferramentas ou aspectos de trabalho que estão relacionados a este comando e não cabiam em nenhuma das outras seções.
Você provavelmente encontrará informações interessantes sobre os aspectos que deseja de uma ferramenta na seção de exemplos / notas.
Exemplo
Nas etapas a seguir, tomarei find
como exemplo, uma vez que seus conceitos são "mais simples" do xargs
que explicar (um comando encontra arquivos e o outro lida com a execução stdin e em pipeline de outra saída de comando). Vamos apenas fingir que não sabemos nada (ou muito pouco) sobre esse comando.
Eu tenho um problema específico: é preciso procurar todos os arquivos com a .jpg
extensão e 500KiB (KiB = 1024 bytes, comumente chamado kibibyte) ou mais em uma pasta de servidor ftp.
Primeiro, abra o manual: man find
. O SYNOPSIS
é magro. Vamos procurar coisas dentro do manual: Digite /mais a palavra que você deseja ( size
). Ele indexará muitas entradas -size
que contarão tamanhos específicos. Fiquei preso. Não sei como pesquisar com "mais que" ou "menos que" um determinado tamanho, e o homem não mostra isso para mim.
Vamos tentar e procurar a próxima entrada encontrada pressionando n. ESTÁ BEM. Algo achei interessante: find
\( -size +100M -fprintf /root/big.txt %-10s %p\n \)
. Talvez este exemplo esteja nos mostrando que com -size +100M
ele encontrará arquivos com 100 MB ou mais. Como eu poderia confirmar? Indo para o cabeçalho da página de manual e procurando por outras palavras.
Mais uma vez, vamos tentar a palavra greater
. Pressionar gnos levará à cabeça da página de manual. /greater
e a primeira entrada é:
Numeric arguments can be specified as
+n for **greater** than n,
-n for less than n,
n for exactly n.
Parece bom. Parece que este bloco do manual confirmou o que suspeitávamos. No entanto, isso não se aplica apenas aos tamanhos de arquivo. Será aplicado a qualquer um n
que possa ser encontrado nesta página de manual (como a frase dizia: "Argumentos numéricos podem ser especificados como").
Boa. Vamos encontrar uma maneira de filtrar por nome: g /insensitive
. Por quê? Insensível? Wtf? Temos um servidor ftp hipotética, onde "que outro sistema operacional" as pessoas poderia dar um nome de arquivo com extensões como .jpg
, .JPG
, .JpG
. Isso nos levará a:
-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.
No entanto, depois de pesquisar, lname
você verá que isso procurará apenas links simbólicos. Queremos arquivos reais. A próxima entrada:
-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.
Ótimo. Nem preciso ler -name
para ver que essa -iname
é a versão que não diferencia maiúsculas de minúsculas desse argumento. Vamos montar o comando:
Comando: find /ftp/dir/ -size +500k -iname "*.jpg"
O que está implícito aqui: O conhecimento de que o curinga ?
representa "qualquer caractere em uma única posição" e *
representa "zero ou mais de qualquer caractere". O -name
parâmetro fornecerá um resumo desse conhecimento.
Dicas que se aplicam a todos os comandos
Algumas opções, mnemônicos e "estilo de sintaxe" percorrem todos os comandos, fazendo com que você ganhe algum tempo por não precisar abrir a página de manual. Esses são aprendidos pela prática e os mais comuns são:
- Geralmente,
-v
significa detalhado. -vvv
é uma variação "muito, muito detalhada" em alguns softwares.
- Seguindo o padrão POSIX, geralmente um argumento de traço pode ser empilhado. Exemplo:
tar -xzvf
, cp -Rv
.
- Geralmente
-R
e / ou -r
significa recursivo.
- Quase todos os comandos têm uma breve ajuda com a
--help
opção.
--version
mostra a versão de um software.
-p
, em copiar ou mover utilitários significa "preservar permissões".
-y
significa SIM ou "prossiga sem confirmação" na maioria dos casos.
Observe que os itens acima nem sempre são verdadeiros. Por exemplo, a -r
opção pode significar coisas muito diferentes para diferentes softwares. É sempre uma boa idéia verificar e certificar-se de quando um comando pode ser perigoso, mas esses são padrões comuns.
Valores padrão de comandos.
No pedaço de pager desta resposta, vimos que less -is
é o pager de man
. O comportamento padrão dos comandos nem sempre é mostrado em uma seção separada nas páginas de manual ou na seção mais bem colocada.
Você precisará ler as opções para descobrir os padrões ou, se tiver sorte, digitar /pager
o levará a essas informações. Isso também exige que você conheça o conceito de pager (software que rola a página de manual), e isso é algo que você só adquirirá depois de ler muitas páginas de manual.
Por que isso é importante? Isso abrirá sua percepção se você encontrar diferenças no comportamento de rolagem e cor ao ler man(1)
no Linux ( less -is
pager) ou no FreeBSD, man(1)
por exemplo.
E a SYNOPSIS
sintaxe?
Depois de obter todas as informações necessárias para executar o comando, você pode combinar opções, argumentos de opção e operandos em linha para fazer seu trabalho. Visão geral dos conceitos:
- As opções são as opções que determinam o comportamento de um comando. " Faça isso " " não faça isso " ou " aja dessa maneira ". Muitas vezes chamado de switches.
- Os argumentos das opções são usados na maioria dos casos quando uma opção não é binária (liga / desliga) como
-t
na montagem, que especifica o tipo de um sistema de arquivos ( -t iso9660
, -t ext2
). " Faça isso com os olhos fechados " ou " alimente os animais, mas apenas os leões ". Também chamado de argumentos.
- Operandos são coisas sobre as quais você deseja que esse comando atue. Se você usar
cat file.txt
, o operando é um arquivo dentro do diretório atual e seu conteúdo será mostrado em STDOUT
. ls
é um comando em que um operando é opcional. Os três pontos após o operando informam implicitamente que cat
podem atuar em vários operandos (arquivos) ao mesmo tempo. Você pode perceber que alguns comandos definiram que tipo de operando ele usará. Exemplo:cat [OPTION] [FILE]...
Coisas relacionadas à sinopse:
Quando esse método não funcionará?
- Manpages que não têm exemplos
- Manpages em que as opções têm uma breve explicação
- Quando você usa palavras-chave genéricas como
and
, to
, for
dentro das manpages
- Páginas de manual que não estão instaladas. Parece ser óbvio, mas, se você não tiver
lftp
(e suas páginas de manual) instaladas, não poderá saber que é uma opção adequada como um cliente ftp mais sofisticado executandoman -k ftp
Em alguns casos, os exemplos serão bem simples, e você precisará executar algumas execuções do seu comando para testar ou, no pior dos casos, pesquisar no Google.
Outros: Linguagens de programação e seus módulos:
Se você estiver programando ou apenas criando scripts, lembre-se de que algumas linguagens possuem seus próprios sistemas de páginas de manual, como perl
( perldocs
), python ( pydocs
), etc., mantendo informações específicas sobre métodos / funções, variáveis, comportamento e outras informações importantes sobre o módulo você está tentando usar e aprender. Isso foi útil para mim quando eu estava criando um script para baixar emails IMAP não lidos usando o perl Mail::IMAPClient
módulo.
Você terá que descobrir essas páginas de manual específicas usando man -k
ou pesquisando online. Exemplos:
[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,
);
... toneladas de outras coisas aqui, com seções como uma página de manual regular ...
Com python:
[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...
Ou, a help()
função dentro do shell python se você quiser ler mais detalhes de algum objeto:
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.
Bônus: O wtf
comando pode ajudá-lo com acrônimos e funciona como whatis
se nenhum acrônimo em seu banco de dados fosse encontrado, mas o que você está pesquisando faz parte do banco de dados man. No Debian, este comando faz parte do bsdgames
pacote. Exemplos:
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