Bash: Qual é o uso do tipo (Bash builtins)?

14

Eu encontrei um comando no script Bash no qual encontrei:

find /var/log/abcd -type f

O comando acima estava no contexto da limpeza dos arquivos de log. Eu sei o que find faz.

Depois de ver -type f , procurei na página de manual. Eu tenho que ver na man page de BASH_BUILTINS (1)

A descrição do sinalizador -f sob o comando type é: -

The -f option suppresses shell function lookup, as with the command builtin.

A seguir estão minhas perguntas:

  1. Qual é o uso de type ?
  2. Qual é o significado de -f flag?
  3. Qual é a utilidade de usar o comando type with find ?

[EDITAR]: - Depois de ler todos os comentários e respostas até agora, gostaria de mencionar a causa da minha má interpretação de -type option in command find Vs type command . Isso tudo aconteceu porque eu estava assumindo e até a data ter visto apenas as opções curtas (Testes no caso do comando find ) com um único sinal de menos '-' , por exemplo, ls -l . Na maior parte das vezes, tenho visto opções longas com sinal de subtração dupla '-' , por exemplo, ls --version .

    
por Akshay Patil 18.11.2013 / 11:07

5 respostas

19

Nesse caso, type não tem nada a ver com o bash type embutido, mas mais sobre isso depois.

Um pouco sobre "tipo"

O comando type do BASH fornece informações sobre comandos. Assim:

$ type type
type is a shell builtin

A sintaxe é:

type [-tap] [name ...]
  • -t : imprime somente o tipo, se encontrado
  • -a : imprime todas as ocorrências do comando, internas e outras.
  • -p : imprime o arquivo do disco que seria executado na chamada para o comando ou nada.

Se olharmos para time , kill e cat como exemplo:

$ type time kill cat
time is a shell keyword
kill is a shell builtin
cat is /bin/cat

$ type -t time kill cat
keyword
builtin
file

$ type -a time kill cat
time is a shell keyword
time is /usr/bin/time
kill is a shell builtin
kill is /bin/kill
cat is /bin/cat

$ type -ta time kill cat
keyword
file
builtin
file
file

Agora, especifique que, se você estiver em um shell Bash e digitar time some_cmd , o bash builtin time será usado. Para usar o sistema time você pode fazer /usr/bin/time some_cmd .

Uma maneira freqüentemente usada para garantir que o comando do sistema, e não interno, seja usado é usando which .

tt=$(which time)

e, em seguida, use $tt para chamar o sistema time .

O comando em questão

Nesse caso, o -type é uma opção para o comando find . A opção aceita um argumento pelo qual especifica o tipo de entidade. Exemplo

find . -type f  # File
find . -type d  # Directory

Há mais, confira man find para o resto.

Para procurar a opção específica que você pode fazer (enquanto no homem):

/^\s*-typeEnter

Em seguida, use n para seguinte até encontrá-lo.

Um pouco sobre o comando shell

Esta é uma interpretação pessoal.

Algumas das coisas que vale a pena mencionar, neste caso específico, são comandos, opções, argumentos e canais.

Isso é usado de forma um pouco frouxa, mas no meu vocabulário temos em resumo:

  • comando: um programa ou integrado .
  • parâmetro: uma entidade após a palavra de comando.
  • Opção
  • : um parâmetro opcional .
  • argumento: um parâmetro obrigatório.

Em uma especificação de comando, colchetes são usados para especificar opções e, opcionalmente, menor ou maior que, usado para especificar argumentos. Assim:

foo [-abs] [-t <bar>] <file> ...
foo [-abs] [-t bar] file ...

Concede -a -b e -s como parâmetros opcionais e file como obrigatório. -t é opcional, mas, se especificado, aceita o argumento necessário bar . Os pontos representam que pode levar vários arquivos.

Esta não é uma especificação exata e, geralmente, man ou help é necessário para ter certeza.

O posicionamento de opções de argumentos e entrada muitas vezes pode ser confundido, mas geralmente é melhor manter uma abordagem baseada em posição, já que alguns sistemas não manipulam posicionamento misto de argumentos. Como exemplo:

chmod -R nick 722 foo
chmod nick 722 foo -R

Ambos trabalham em alguns sistemas, enquanto o segundo não em outro.

Em seu comando exato, todos os parâmetros pertencem a find - assim, se você quer saber sobre uma propriedade man find é o lugar correto para procurar. Nos casos em que você precisa consultar as páginas do manual para o shell, etc., pode estar em, por exemplo:

find . $(some command)
find . 'some command'
find . $some_var
find . -type f -exec some_command {} \;
find . -type f | some_command
...

O -exec é especial onde -exec some_command {} \; são todos os parâmetros fornecidos para find , mas a some_command {} \; é expandida, dentro de find a some_command string_of_found_entity .

Mais adiante

  • citando
  • expansão
  • substituição de comandos
  • e muito mais

Você pode achar isso útil .

    
por 18.11.2013 / 16:25
7

Você deve procurar em man find , não em help type ou man bash . type in find especificará qual tipo de arquivo você precisa:

   -type c
          File is of type c:

          b      block (buffered) special

          c      character (unbuffered) special

          d      directory

          p      named pipe (FIFO)

          f      regular file

          l      symbolic link; this is never true if the -L option or the
                 -follow option is in effect, unless the symbolic link  is
                 broken.  If you want to search for symbolic links when -L
                 is in effect, use -xtype.

          s      socket

          D      door (Solaris)

E type embutido é completamente diferente e NÃO é o usado dentro de find .

    
por 18.11.2013 / 11:13
0

Você olhou para a página de manual errada, este não é o comando type -f , mas a opção find -type f é bem diferente, dê uma olhada no manual find para explicações adequadas.

    
por 18.11.2013 / 11:13
0

-type f informa ao find para imprimir apenas arquivos do tipo f, ou seja, arquivos simples, não diretórios, não links simbólicos e não arquivos de dispositivos. man find , em seguida, pesquise a opção -f .

    
por 18.11.2013 / 11:14
0

Esta não é a página manual correta que você está vendo. Você deveria estar usando

man find

que lhe dirá que, com -type f , o predicado -type seleciona apenas os arquivos regulares.

    
por 18.11.2013 / 11:14