Bash: Do czego służy typ (wbudowane Bash)?


16

Natrafiłem na polecenie w skrypcie Bash, w którym znalazłem:

find /var/log/abcd -type f

Powyższe polecenie było w kontekście czyszczenia plików dziennika. Wiem co findrobi.

Po obejrzeniu -type fprzejrzałem stronę podręcznika. Widziałem to na stronie podręcznika BASH_BUILTINS (1)

Opis flagi -f pod typepoleceniem to: -

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

Oto moje pytania:

  1. Jakie jest zastosowanie type?
  2. Jakie jest znaczenie -fflagi?
  3. Jaki jest pożytek z korzystania typez findpolecenia?

[EDIT]: - Po przeczytaniu wszystkich komentarzy i odpowiedzi Do tej pory chciałbym wspomnieć przyczynę mojej błędnej interpretacji -type option in command findVs type command. To wszystko się wydarzyło, ponieważ zakładałem i do tej pory widziałem tylko krótkie opcje (Testy w przypadku findpolecenia) z pojedynczym znakiem minus „-” , przykład ls -l. Przez większość czasu widziałem długie opcje z podwójnym znakiem minus „-” , na przykład ls --version.


1
typeWbudowanego polecenia nie jest używany przez find. -typeOpcja findrobi coś innego. Zobacz help typei man finduzyskaj odpowiedzi.

1
Ta konkretna błędna interpretacja jest bardzo specyficzna i mało prawdopodobne, aby pomogła innym jako pytanie
Anthon

9
Dlaczego głosowanie? Chociaż pytanie pokazuje, że OP nie wie wiele o Uniksie, nie jest to właściwe, aby głosować na pytanie z tych powodów. Akshay posunął się nawet do przeczytania strony podręcznika, której większość ludzi zadających pytania tutaj nie robi.
Stéphane Chazelas,

Odpowiedzi:


21

W tym przypadku typenie ma to nic wspólnego z wbudowanym bash type, ale o tym później.

Trochę o „typie”

Wbudowane typepolecenie BASH zapewnia informacje o poleceniach. A zatem:

$ type type
type is a shell builtin

Składnia jest następująca:

type [-tap] [name ...]
  • -t: wpisz tylko typ wydruku, jeśli znaleziono
  • -a: wydrukuj wszystkie wystąpienia polecenia, zarówno wbudowane, jak i inne.
  • -p: wydrukuj plik dyskowy, który zostałby wykonany przy wywołaniu polecenia lub nic.

Jeśli przyjrzymy się time, killa catjako przykład:

$ 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

Teraz określ, że jeśli jesteś w powłoce Bash i time some_cmdpiszesz, timeużywane jest wbudowane bash . Aby skorzystać z systemu, timemożesz to zrobić /usr/bin/time some_cmd.

Jednym ze sposobów często używanych w celu zapewnienia, że ​​system, a nie wbudowane polecenie, jest używany, jest użycie which.

tt=$(which time)

a następnie użyj $ttdo wywołania systemu time.


Polecenie, o którym mowa

W tym przypadku -typejest to opcja polecenia find. Opcja przyjmuje jeden argument, za pomocą którego określa się typ jednostki. Przykład

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

Jest więcej, sprawdź man findresztę.

Aby wyszukać konkretną opcję, którą możesz zrobić (będąc w człowieku):

/ ^ \ s * -typEnter

Następnie użyj przycisku ndo następnego, aż go znajdziesz.


Trochę o poleceniu powłoki

To trochę osobista interpretacja.

Niektóre z rzeczy, o których warto wspomnieć, w tym konkretnym przypadku, to polecenia, opcje, argumenty i potoki.

Jest to nieco luźno używane, ale w moim słowniku mamy w skrócie:

  • polecenie: program lub wbudowany .
  • parametr: jednostka po słowie polecenia.
  • opcja: parametr opcjonalny .
  • argument: wymagany parametr.

W specyfikacji polecenia nawiasy kwadratowe służą do określania opcji, a opcjonalnie mniej / więcej niż, służą do określania argumentów. A zatem:

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

Daje -a -bi -sjako opcjonalne parametry, a filewymagany jeden. -tjest opcjonalny, ale jeśli jest określony, pobiera wymagany argument bar. Kropki oznaczają, że może zająć kilka plików.

Nie jest to dokładna specyfikacja i często manlub helpjest wymagana dla pewności.

Pozycjonowanie opcji argumentów i danych wejściowych często można pomieszać, ale ogólnie najlepiej jest stosować podejście oparte na pozycji, ponieważ niektóre systemy nie obsługują mieszanego pozycjonowania argumentów. Jako przykład:

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

Oba działają na niektórych systemach, podczas gdy ten drugi nie działa na innych.


W twoim dokładnym poleceniu wszystkie parametry należą find- więc jeśli zastanawiasz się nad właściwością, man findto jest właściwe miejsce do szukania. W przypadkach, w których musisz zajrzeć na strony podręcznika użytkownika w poszukiwaniu powłoki itp., Mogą to być np .:

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

-execJest szczególna, gdzie -exec some_command {} \;są wszystkie parametry podane find, ale some_command {} \;część jest rozszerzona, w terminie finddo some_command string_of_found_entity.


Co więcej

  • cytowanie
  • ekspansja
  • zastępowanie poleceń
  • i wiele więcej

Może ci się to przydać .


Bardzo informujące.
Fredrick Gauss

8

Powinieneś zaglądać man find, nie w help typelub man bash. typew findokreśli, jakiego typu pliku potrzebujesz:

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

Wbudowana typejest zupełnie inna rzecz i NIE jest ona używana w środku find.


0

Patrzyłeś na niewłaściwą stronę podręcznika, to nie jest type -fpolecenie, ale find -type fopcja, która jest zupełnie inna, zajrzyj do findinstrukcji, aby uzyskać odpowiednie wyjaśnienia.


0

-type fkaże znaleźć, aby drukowało tylko pliki typu f, tj. zwykłe pliki, nie katalogi, nie dowiązania symboliczne, a nie pliki urządzeń. man findnastępnie wyszukaj -fopcję.


0

To nie jest właściwa strona podręcznika, na którą patrzysz. Powinieneś używać

man find

że powie, że z -type ftych -typebazowych wybiera tylko zwykłe pliki.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.