Bash: Was ist die Verwendung von Typ (Bash Builtins)?

16

Ich bin auf einen Befehl im Bash-Skript gestoßen, in dem ich Folgendes gefunden habe:

find /var/log/abcd -type f

Der obige Befehl befand sich im Zusammenhang mit der Bereinigung der Protokolldateien. Ich weiß was findtut.

Nachdem ich es gesehen hatte -type f, suchte ich die Handbuchseite danach. Ich muss es in der Manpage von BASH_BUILTINS (1) sehen

Die Beschreibung des typeBefehls -f flag lautet: -

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

Im Folgenden sind meine Fragen:

  1. Wofür ist das gut type?
  2. Welche Bedeutung hat die -fFlagge?
  3. Was nützt die Verwendung von typewith findcommand?

[EDIT]: - Nachdem ich alle Kommentare und Antworten bis jetzt gelesen habe, möchte ich die Ursache für meine Fehlinterpretation von -type option in command findVs erwähnen type command. Dies alles geschah, weil ich angenommen habe und bis dato nur die kurzen Optionen (Tests im Falle des findBefehls) mit einem einzelnen Minuszeichen '-' gesehen habe , zum Beispiel ls -l. Die meisten der Zeit habe ich lange Optionen mit gesehen ‚-‘ Doppelminuszeichen , beispielsweise ls --version.

Akshay Patil
quelle
1
Der typeeingebaute Befehl wird von nicht verwendet find. Die -typeOption, findetwas anderes zu tun. Sehen help typeund man finderhalten Sie Ihre Antworten.
1
Diese spezielle Fehlinterpretation ist sehr spezifisch und wird anderen wahrscheinlich nicht als Frage weiterhelfen
Anthon,
9
Warum Downvoting? Obwohl die Frage zeigt, dass das OP nicht viel über Unix weiß, ist es nicht richtig, eine Frage aus diesen Gründen abzulehnen. Akshay ging sogar so weit, eine Manpage zu lesen, was die meisten Leute, die hier Fragen stellten, nicht tun.
Stéphane Chazelas
Bitte überlegen Sie, Ihren Fragentitel neu zu formulieren, da Ihr aktueller Titel verhindert, dass Personen, die wirklich nach der Verwendung von Bash-Typ suchen, eine genaue Antwort erhalten.
Sajuuk,

Antworten:

21

In diesem Fall typehat das nichts mit der eingebauten Bash zu tun type, aber dazu später mehr.

Ein bisschen über "Typ"

Mit dem integrierten typeBefehl BASH erhalten Sie Informationen zu Befehlen. Somit:

$ type type
type is a shell builtin

Die Syntax lautet:

type [-tap] [name ...]
  • -t: Nur Typ drucken, falls gefunden
  • -a: Gibt alle Vorkommen des Befehls aus, sowohl die eingebauten als auch die anderen.
  • -p: druckt die Disk-Datei, die beim Aufruf des Befehls ausgeführt werden würde, oder nichts.

Wenn wir betrachten time, killund catals Beispiel:

$ 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

Nun geben Sie an, dass, wenn Sie sich in einer Bash-Shell befinden und tippen time some_cmd, die integrierte Bash timeverwendet wird. Um das System zu benutzen, können timeSie tun /usr/bin/time some_cmd.

Eine häufig verwendete Methode, um sicherzustellen, dass der Systembefehl und nicht der integrierte Befehl verwendet wird, ist die Verwendung von which.

tt=$(which time)

und dann verwenden $tt, um das System aufzurufen time.


Der fragliche Befehl

In diesem Fall -typeist das eine Option zum Befehl find. Die Option akzeptiert ein Argument, mit dem der Entitätstyp angegeben wird. Beispiel

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

Es gibt mehr, überprüfen Sie man findden Rest.

So suchen Sie nach einer bestimmten Option, die Sie (während Sie im Mann sind) ausführen können:

/ ^ \ s * -TypEnter

Dann benutze nfür nächstes, bis du es findest.


Ein wenig über den Shell-Befehl

Dies ist eine persönliche Interpretation.

Einige der Dinge, die in diesem speziellen Fall erwähnenswert sind, sind Befehle, Optionen, Argumente und Pipes.

Dies wird etwas locker verwendet, aber in meinem Wortschatz haben wir kurz gesagt:

  • Befehl: ein Programm oder eingebaut .
  • Parameter: eine Entität nach dem Befehlswort.
  • Option: Ein optionaler Parameter.
  • Argument: Ein erforderlicher Parameter.

In einer Befehlsspezifikation werden eckige Klammern verwendet, um Optionen anzugeben, und optional weniger / mehr, um Argumente anzugeben. Somit:

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

Gibt -a -bund -sals optionale Parameter an und fileeinen erforderlichen. -tist optional, verwendet aber, falls angegeben, das erforderliche Argument bar. Punkte stehen dafür, dass es mehrere Dateien aufnehmen kann.

Dies ist keine genaue Spezifikation und wird häufig manoder helpzur Sicherheit benötigt.

Optionen und Eingaben für die Positionierung von Argumenten können häufig verwechselt werden. Es ist jedoch im Allgemeinen am besten, einen positionsbasierten Ansatz beizubehalten, da einige Systeme die gemischte Positionierung von Argumenten nicht verarbeiten. Als Beispiel:

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

Beide funktionieren auf einigen Systemen, während letzteres auf anderen nicht funktioniert.


In Ihrem genauen Befehl gehören alle Parameter dazu find- also, wenn Sie sich über eine Immobilie wundern, man findist der richtige Ort zu suchen. In Fällen, in denen Sie sich Manpages für die Shell usw. ansehen müssen, kann dies beispielsweise sein:

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

Das -execist ein spezielles, bei dem -exec some_command {} \;alle Parameter angegeben werden find, der some_command {} \;Teil jedoch innerhalb von findto erweitert wird some_command string_of_found_entity.


Weiter

  • Zitat
  • Erweiterung
  • Befehlsersetzung
  • und so viel mehr

Das könnte hilfreich sein .

Runium
quelle
Sehr informativ.
Fredrick Gauß
7

Du sollst reinschauen man find, nicht rein help typeoder man bash. typeIn findwird angegeben, welchen Dateityp Sie benötigen:

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

Und Builtin typeist eine völlig andere Sache und es ist NICHT die, die im Inneren verwendet wird find.

eilen
quelle
0

Sie haben auf die falsche Handbuchseite geschaut. Dies ist nicht der type -fBefehl, sondern find -type feine ganz andere Option. findWeitere Erklärungen finden Sie im Handbuch.

jlliagre
quelle
0

-type fMit find werden nur Dateien vom Typ f gedruckt, dh einfache Dateien, keine Verzeichnisse, keine symbolischen Links und keine Gerätedateien. man finddann suche nach -fOption.

X Tian
quelle
0

Dies ist nicht die richtige Handbuchseite, die Sie sich ansehen. Sie sollten verwenden

man find

Das wird Ihnen sagen, dass mit -type fdem -typePrädikat nur die regulären Dateien ausgewählt werden.

Zelda
quelle