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
Ця специфічна неправильна інтерпретація є дуже специфічною і навряд чи допоможе оточуючим у питанні
Антон

9
Чому зволікають? Хоча питання показує, що ОП не знає багато про Unix, це не правильно, щоб спростувати питання з цих причин. Акшай навіть зайшов до того, щоб прочитати чоловічу сторінку, на яку більшість людей, які задають питання, не роблять.
Стефан Хазелас

будь ласка, перегляньте перефразируйте заголовок свого запитання, оскільки ваш поточний заголовок заважає людям, які справді шукають використання вбудованого 'типу' bash, отримати точну відповідь ..
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- це правильне місце для пошуку. У випадках, коли вам потрібно переглянути сторінки man для оболонки тощо, можливо, наприклад:

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.


Далі

  • цитуючи
  • розширення
  • підміна команд
  • і багато іншого

Вам це може бути корисним .


Дуже інформативні.
Фредрік Гаус

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посібником для правильних пояснень.


0

-type fповідомляє знайти лише друковані файли типу f, тобто звичайні файли, а не каталоги, не символічні посилання та не файли пристроїв. man findпотім шукайте -fваріант.


0

Це не потрібна сторінка керівництва, яку ви переглядаєте. Ви повинні використовувати

man find

що буде вам сказати , що з -type fтим -typeпредикативними вибираєш тільки звичайні файли.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.