Bash: Какая польза от типа (встроенные функции Bash)?

16

Я наткнулся на команду в скрипте Bash, в которой я нашел:

find /var/log/abcd -type f

Вышеупомянутая команда была в контексте очистки файлов журнала. Я знаю , что findделает.

После того , как увидел -type f, я просмотрел страницу руководства для него. Я увидел это на странице руководства BASH_BUILTINS (1)

Описание флага -f под typeкомандой: -

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

Ниже приведены мои вопросы:

  1. Какая польза от type?
  2. Какое значение -fфлага?
  3. Какая польза от использования typeс findкомандой?

[EDIT]: - После того , как прочитал все комментарии и ответы до сих пор, я хотел бы упомянуть причину моего неправильного толкования -type option in command findVs type command. Все это произошло потому, что я предполагал, что до даты видел только короткие варианты (тесты в случае findкоманды) с одним знаком минус «-» , например ls -l,. В большинстве случаев я видел длинные варианты с двойным знаком минус «-» , например ls --version,.

Акшай Патил
источник
1
typeКоманда встроенный не используется find. -typeВариант findделает что - то еще. Смотрите help typeи man findполучите ваши ответы.
1
Эта конкретная неправильная интерпретация очень специфична и вряд ли поможет другим в качестве вопроса
Anthon
9
Зачем понижать? Хотя этот вопрос показывает, что OP мало что знает о Unix, неправильно утверждать вопрос по этим причинам. Акшай даже зашел так далеко, что прочитал справочную страницу, которую большинство людей, задающих вопросы, здесь не делают.
Стефан Шазелас
пожалуйста, попробуйте перефразировать заголовок вашего вопроса, потому что ваш текущий заголовок мешает людям, которые действительно ищут использование встроенного в bash 'type', получить точный ответ ..
Sajuuk

Ответы:

21

В этом случае не typeимеет ничего общего со встроенным bash type, но об этом позже.

Немного о "типе"

Встроенная typeкоманда BASH предоставляет вам информацию о командах. Таким образом:

$ type type
type is a shell builtin

Синтаксис:

type [-tap] [name ...]
  • -t: печатать только тип, если найден
  • -a: печатать все вхождения команды, как встроенные, так и другие.
  • -p: распечатать файл на диске, который будет выполнен при вызове команды, или ничего.

Если мы посмотрим time, killи catв качестве примера:

$ 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

Теперь это указывает, что если вы находитесь в оболочке Bash и вводите time some_cmd, используется встроенная команда bash time. Для использования системы timeвы можете сделать /usr/bin/time some_cmd.

Одним из способов, который часто используется для обеспечения использования системной, а не встроенной команды, является использование which.

tt=$(which time)

а затем использовать $ttдля вызова системы time.


Команда, о которой идет речь

В этом случае -typeэто опция команды find. Опция принимает один аргумент, по которому указывается тип объекта. пример

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

Есть еще, проверьте man findна остальное.

Для поиска конкретной опции вы можете сделать (пока в человеке):

/ ^ \ S * -типаEnter

Затем используйте nдля следующего, пока не найдете его.


Немного о командной оболочке

Это немного личной интерпретации.

В данном конкретном случае стоит упомянуть некоторые команды, опции, аргументы и каналы.

Это несколько свободно используется, но в моем словарном запасе мы имеем вкратце:

  • Команда: программа или встроенная .
  • параметр: сущность после командного слова.
  • опция: необязательный параметр.
  • Аргумент: обязательный параметр.

В спецификации команды квадратные скобки используются для указания параметров и, по выбору, меньше / больше, чем используются для указания аргументов. Таким образом:

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

Выдает -a -bи -sкак необязательные параметры, так и fileобязательный. -tнеобязательно, но если указано, принимает обязательный аргумент bar. Точки показывают, что это может занять несколько файлов.

Это не точная спецификация, и часто manили helpтребуется, чтобы быть уверенным.

Позиционирование параметров аргументов и ввод часто могут быть смешаны, но обычно лучше придерживаться позиционного подхода, поскольку некоторые системы не обрабатывают смешанное позиционирование аргументов. В качестве примера:

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

Оба работают на некоторых системах, в то время как последние не работают на других.


В вашей точной команде все параметры принадлежат find- таким образом, если вам интересно, какое свойство man findявляется правильным местом для поиска. В тех случаях, когда вам нужно просмотреть справочные страницы по оболочке и т. Д., Например:

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

-execЯвляется особенным , где -exec some_command {} \;все параметры , данные find, но some_command {} \;часть расширена, в пределах findдо some_command string_of_found_entity.


Далее

  • квотирование
  • расширение
  • подстановка команд
  • и многое другое

Вы можете найти это полезным .

Runium
источник
Очень информативно.
Фредрик Гаусс
8

Вы должны смотреть man find, а не в help typeили man bash. typeв findукажите, какой тип файла вам нужен:

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

И встроенный type- это совсем другое, и это НЕ тот, который используется внутри find.

порыв
источник
0

Вы обратились не к той странице справочника, это не type -fкоманда, а find -type fопция, которая совершенно иная, обратитесь к findруководству за правильными объяснениями.

jlliagre
источник
0

-type fуказывает find только печатать файлы типа f, то есть обычные файлы, а не каталоги, не символические ссылки и не файлы устройств. man findтогда ищите -fвариант.

X Тянь
источник
0

Это не та страница справочника, на которую вы смотрите. Вы должны использовать

man find

это скажет вам, что с -type fпомощью -typeпредиката выбираются только обычные файлы.

Zelda
источник