Bash: Apa gunanya tipe (Bash builtins)?

16

Saya menemukan perintah dalam skrip Bash di mana saya menemukan:

find /var/log/abcd -type f

Perintah di atas adalah dalam konteks membersihkan file log. Saya tahu apa yang harus finddilakukan.

Setelah melihat -type f, saya mencari halaman manual untuk itu. Saya melihatnya di halaman manual BASH_BUILTINS (1)

Deskripsi flag -f di bawah typekomando adalah: -

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

Berikut ini adalah pertanyaan saya:

  1. Apa gunanya type?
  2. Apa pentingnya -fbendera?
  3. Apa gunanya menggunakan typedengan findperintah?

[EDIT]: - Setelah membaca semua komentar dan jawaban sampai sekarang, saya ingin menyebutkan penyebabnya untuk salah tafsir saya -type option in command findVs type command. Ini semua terjadi karena saya berasumsi dan sampai saat ini hanya melihat opsi pendek (Tes dalam kasus findperintah) dengan tanda minus tunggal '-' , misalnya ls -l,. Sebagian besar waktu saya telah melihat opsi panjang dengan tanda minus ganda '-' , misalnya ls --version,.

Akshay Patil
sumber
1
The typeperintah builtin tidak digunakan oleh find. The -typepilihan untuk findmelakukan sesuatu yang lain. Lihat help typedan man finddapatkan jawaban Anda.
1
Salah tafsir khusus ini sangat spesifik dan tidak mungkin membantu orang lain sebagai pertanyaan
Anthon
9
Mengapa downvoting? Meskipun pertanyaannya memang menunjukkan OP tidak tahu banyak tentang Unix, itu tidak benar untuk menurunkan pertanyaan dengan alasan itu. Akshay bahkan lebih jauh membaca halaman manual yang tidak dilakukan oleh sebagian besar orang di sini.
Stéphane Chazelas
tolong pertimbangkan ulangi judul pertanyaan Anda, karena judul Anda saat ini mencegah orang-orang yang benar-benar mencari penggunaan 'tipe' bash untuk mendapatkan jawaban yang akurat ..
Sajuuk

Jawaban:

21

Dalam hal typeini tidak ada hubungannya dengan bash built-in type, tetapi lebih pada nanti.

Sedikit tentang "ketik"

Perintah BASH bawaan typememberi Anda informasi tentang perintah. Jadi:

$ type type
type is a shell builtin

Sintaksnya adalah:

type [-tap] [name ...]
  • -t: ketik hanya cetak, jika ditemukan
  • -a: cetak semua kemunculan perintah, baik yang terpasang maupun yang lain.
  • -p: cetak file disk yang akan dieksekusi saat dipanggil ke perintah, atau tidak sama sekali.

Jika kita melihat time, killdan catsebagai contoh:

$ 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

Sekarang, ini menentukan bahwa jika Anda berada dalam Bash shell dan ketik time some_cmd, bash builtin timedigunakan. Untuk menggunakan sistem timebisa Anda lakukan /usr/bin/time some_cmd.

Salah satu cara yang sering digunakan untuk memastikan bahwa sistem, dan bukan built-in, perintah yang digunakan adalah dengan menggunakan which.

tt=$(which time)

dan kemudian gunakan $ttuntuk memanggil sistem time.


Perintah yang dimaksud

Dalam hal ini -typeadalah opsi untuk perintah find. Opsi ini mengambil satu argumen yang menentukan jenis entitas. Contoh

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

Masih ada lagi, periksa man findsisanya.

Untuk mencari opsi tertentu yang dapat Anda lakukan (sementara di tangan):

/ ^ \ s * -typeEnter

Kemudian gunakan nuntuk selanjutnya sampai Anda menemukannya.


Sedikit tentang perintah shell

Ini sedikit interpretasi pribadi.

Beberapa hal yang layak disebutkan, dalam kasus khusus ini, adalah perintah, opsi, argumen dan pipa.

Ini agak longgar digunakan, tetapi dalam kosakata saya singkatnya:

  • perintah: program atau bawaan .
  • parameter: entitas setelah kata perintah.
  • opsi: parameter opsional .
  • argumen: parameter yang diperlukan.

Dalam spesifikasi perintah kurung kotak digunakan untuk menentukan opsi dan, secara opsional kurang / lebih besar dari itu, digunakan untuk menentukan argumen. Jadi:

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

Memberikan -a -bdan -ssebagai parameter opsional, dan fileyang diperlukan. -tadalah opsional, tetapi jika ditentukan membutuhkan argumen yang diperlukan bar. Dots menyatakan bahwa ia dapat mengambil beberapa file.

Ini bukan spesifikasi yang pasti, dan sering manatau helpdiharuskan untuk dipastikan.

Posisi opsi argumen dan input sering dapat digabungkan, tetapi umumnya terbaik untuk tetap menggunakan pendekatan berbasis posisi karena beberapa sistem tidak menangani posisi campuran argumen. Sebagai contoh:

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

Keduanya bekerja pada beberapa sistem, sedangkan yang kedua tidak pada yang lain.


Dalam perintah persis Anda semua parameter milik find- jadi jika Anda bertanya-tanya tentang properti man findadalah tempat yang tepat untuk mencari. Dalam kasus di mana Anda perlu melihat halaman manual untuk shell, dll. Bisa di misalnya:

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

Ini -execadalah yang spesial di mana -exec some_command {} \;semua parameter diberikan find, tetapi some_command {} \;bagian diperluas, findke dalam some_command string_of_found_entity.


Selanjutnya

  • mengutip
  • ekspansi
  • substitusi komando
  • dan masih banyak lagi

Anda mungkin menemukan ini berguna .

Runium
sumber
Sangat informatif.
Fredrick Gauss
8

Anda harus melihat man find, tidak masuk help typeatau man bash. typedi findakan menentukan jenis file apa yang Anda butuhkan:

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

Dan builtin typeadalah hal yang sangat berbeda dan BUKAN yang digunakan di dalam find.

buru-buru
sumber
0

Anda melihat ke halaman manual yang salah, ini bukan type -fperintah tetapi find -type fopsi yang sangat berbeda, lihat findmanual untuk penjelasan yang tepat.

Jlliagre
sumber
0

-type fmemberitahu find untuk hanya mencetak file tipe f yaitu file biasa, bukan direktori, bukan tautan simbolik dan bukan file perangkat. man findlalu cari -fopsi.

X Tian
sumber
0

Ini bukan halaman manual yang tepat yang Anda lihat. Anda harus menggunakan

man find

yang akan memberitahu Anda bahwa dengan -type fsatu -typemenyeleksi predikat hanya file biasa.

Zelda
sumber