Bash: ¿De qué sirve el tipo (Bash builtins)?

16

Encontré un comando en el script Bash en el que encontré:

find /var/log/abcd -type f

El comando anterior fue en el contexto de la limpieza de los archivos de registro. Se lo que findhace.

Después de haberlo visto -type f, busqué en la página del manual. Tengo que verlo en la página de manual de BASH_BUILTINS (1)

La descripción de la bandera -f bajo typecomando es: -

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

Las siguientes son mis preguntas:

  1. ¿De qué sirve type?
  2. ¿Cuál es el significado de la -fbandera?
  3. ¿De qué sirve usar typecon el findcomando?

[EDIT]: - Después de haber leído todos los comentarios y respuestas hasta ahora, me gustaría hablar de la causa de la mala interpretación de mi -type option in command findVs type command. Todo esto sucedió porque estaba asumiendo y hasta la fecha solo he visto las opciones cortas (Pruebas en el caso del findcomando) con un solo signo menos '-' , por ejemplo ls -l,. La mayoría de las veces he visto opciones largas con doble signo menos '-' , por ejemplo ls --version,.

Akshay Patil
fuente
1
El typecomando incorporado no es utilizado por find. La -typeopción de findhacer otra cosa. Vea help typey man findpara obtener sus respuestas.
1
Esta interpretación errónea específica es muy específica y es poco probable que ayude a otros como una pregunta
Anthon
99
¿Por qué downvoting? Si bien la pregunta muestra que el OP no sabe mucho sobre Unix, no es correcto rechazar una pregunta por esos motivos. Akshay incluso llegó a leer una página de manual que la mayoría de las personas que hacen preguntas aquí no hacen.
Stéphane Chazelas
por que no vuelva a escribir el título de la pregunta, porque su título actual está impidiendo que la gente que realmente está buscando el uso de fiesta incorporada 'tipo' de conseguir respuesta precisa ..
Sajuuk

Respuestas:

21

En este caso typeno tiene nada que ver con el bash incorporado type, sino más adelante.

Un poco sobre "tipo"

El typecomando incorporado BASH le brinda información sobre los comandos. Así:

$ type type
type is a shell builtin

La sintaxis es:

type [-tap] [name ...]
  • -t: solo tipo de impresión, si se encuentra
  • -a: imprime todas las apariciones del comando, tanto incorporadas como otras.
  • -p: imprime el archivo de disco que se ejecutará en la llamada al comando, o nada.

Si miramos time, killy catcomo ejemplo:

$ 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

Ahora, esto especifica que si está en un shell Bash y escribe time some_cmd, timese usa bash builtin . Para usar el sistema timeque puedes hacer /usr/bin/time some_cmd.

Una forma de uso frecuente para garantizar que se use el sistema, y ​​no el comando incorporado, es mediante el uso which.

tt=$(which time)

y luego usar $ttpara llamar al sistema time.


El comando en cuestión

En este caso, -typees una opción para el comando find. La opción toma un argumento de por el cual se especifica el tipo de entidad. Ejemplo

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

Hay más, verifique man findel resto.

Para buscar la opción específica que puede hacer (mientras está en el hombre):

/ ^ \ s * -tipoEnter

Luego use npara el siguiente hasta que lo encuentre.


Un poco sobre el comando de shell

Esta es una interpretación un poco personal.

Algunas de las cosas que vale la pena mencionar, en este caso específico, son comandos, opciones, argumentos y canalizaciones.

Esto se usa de manera un tanto flexible, pero en mi vocabulario tenemos en resumen:

  • comando: un programa o incorporado .
  • parámetro: una entidad después de la palabra de comando.
  • opción: un parámetro opcional .
  • argumento: un parámetro requerido.

En una especificación de comando, los corchetes se usan para especificar opciones y, opcionalmente, menor / mayor que, se usan para especificar argumentos. Así:

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

Da -a -by -scomo parámetros opcionales, y fileuno requerido. -tes opcional, pero si se especifica toma el argumento requerido bar. Los puntos representan que puede tomar varios archivos.

Esta no es una especificación exacta, y a menudo mano helpes necesaria para estar seguro.

El posicionamiento de las opciones de argumentos y la entrada a menudo se pueden mezclar, pero generalmente es mejor mantener un enfoque basado en la posición, ya que algunos sistemas no manejan el posicionamiento mixto de los argumentos. Como ejemplo:

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

Ambos funcionan en algunos sistemas, mientras que el último no en otros.


En su comando exacto, todos los parámetros pertenecen, por lo findtanto, si se pregunta si una propiedad man findes el lugar correcto para buscar. En los casos en los que necesita mirar las páginas del manual para el shell, etc. podría estar en, por ejemplo:

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

El -execes uno especial donde se -exec some_command {} \;dan todos los parámetros find, pero la some_command {} \;parte se expande, dentro findde some_command string_of_found_entity.


Más allá

  • citando
  • expansión
  • sustitución de comando
  • y mucho más

Puede encontrar esto útil .

Runium
fuente
Muy informativo.
Fredrick Gauss el
8

Debes mirar adentro man find, no adentro help typeo man bash. typeen findespecificará qué tipo de archivo necesita:

   -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)

Y typeconstruir es algo completamente diferente y NO es el que se usa en el interior find.

prisa
fuente
0

Buscaste en la página del manual equivocada, este no es el type -fcomando, pero la find -type fopción es bastante diferente, mira el findmanual para obtener explicaciones adecuadas.

jlliagre
fuente
0

-type fle dice a find que solo imprima archivos de tipo f, es decir, archivos simples, no directorios, no enlaces simbólicos y no archivos de dispositivo. man findluego busque la -fopción.

X Tian
fuente
0

Esta no es la página de manual correcta que estás viendo. Deberías estar usando

man find

eso le dirá que con -type fel -typepredicado selecciona solo los archivos normales.

Zelda
fuente