Tipin kullanımı nedir (Bash yerleşikleri)?


17

Bash betiğinde bulduğum bir komutla karşılaştım:

find /var/log/abcd -type f

Yukarıdaki komut, günlük dosyalarını temizleme bağlamındaydı. Ne yaptığını biliyorum find.

Gördükten sonra -type fbunun için manuel sayfa baktım. BASH_BUILTINS'in man sayfasında görmeliyim (1)

typeKomut altındaki -f bayrağının açıklaması : -

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

Sorularım şunlardır:

  1. Ne işe yarar type?
  2. -fBayrağın önemi nedir ?
  3. Kullanarak kullanımı nedir typeile findkomuta?

[EDIT]: - Şimdiye kadar tüm yorumları ve cevapları okuduktan sonra, -type option in command findVs yanlış yorumlama nedenini belirtmek istiyorum type command. Tüm bunlar, tarihin tek bir eksi işaretifind olan sadece kısa seçenekleri ( komut durumunda testler) gördüğünü varsayıyordum ve çünkü - - , örneğin ls -l,. Çoğu zaman çift ​​eksi işareti '-' ile uzun seçenekler gördüm , örnek ls --version,.


1
typeYerleşik komutu tarafından kullanılmaz find. -typeSeçeneği findbaşka bir şey yapar. Cevaplarınızı görün help typeve man findalın.

1
Bu özel yanlış yorumlama çok özeldir ve başkalarına soru olarak yardımcı olmayacaktır
Anthon

9
Neden indirilmiyor? Soru, OP'nin Unix hakkında fazla bir şey bilmediğini gösterse de, bu temelde bir soruyu aşağılamak doğru değil. Akshay bile burada soru soran çoğu insanın yapmadığı bir adam sayfasını okumak kadar ileri gitti.
Stéphane Chazelas

Lütfen mevcut başlığınız gerçekten de bash yerleşik 'tip' kullanımını arayan insanların doğru cevabı almasını engellediği için soru başlığınızı yeniden
yazmayı düşünün

Yanıtlar:


21

Bu durumda type, yerleşik bash ile ilgisi yoktur type, ancak daha sonra.

"Tip" hakkında biraz

Dahili BASH typekomutu size komutlar hakkında bilgi verir. Böylece:

$ type type
type is a shell builtin

Sözdizimi:

type [-tap] [name ...]
  • -t: bulunursa yalnızca türü yazın
  • -a: hem yerleşik hem de diğer komutların tüm örneklerini yazdırın.
  • -p: Komut çağrısı sırasında yürütülecek disk dosyasını yazdırın veya hiçbir şey yazdırmayın.

Biz bakarsak time, killve catörnek olarak:

$ 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

Şimdi, bu bir Bash kabuğunda ve türünde iseniz time some_cmd, bash yerleşiminin timekullanıldığını belirtir . Sistemi kullanmak için timeyapabilirsiniz /usr/bin/time some_cmd.

Sistemin yerleşik değil komutun kullanılmasını sağlamak için sık kullanılan bir yöntem kullanmaktır which.

tt=$(which time)

ve sonra $ttsistemi çağırmak için kullanın time.


Söz konusu komut

Bu durumda -type, komut için bir seçenektir find. Seçenek, varlık türünü belirten bir argüman alır. Misal

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

Dahası var man find, gerisini kontrol et .

Belirli bir seçeneği aramak için (erkekken) yapabilirsiniz:

/ ^ \ S * tipiEnter

Sonra kullanmak niçin bir sonraki bunu bulana kadar.


Kabuk komutu hakkında biraz

Bu biraz kişisel bir yorum.

Bahsetmeye değer bazı şeyler, bu özel durumda, komutlar, seçenekler, argümanlar ve kanallardır.

Bu biraz gevşek bir şekilde kullanılıyor, ancak kelime dağarcığımda kısaca var:

  • komut: bir program veya yerleşik .
  • parametresi: komut kelimesinden sonraki varlık.
  • seçenek: isteğe bağlı bir parametre.
  • argüman: gerekli bir parametre.

Komut spesifikasyonunda seçenekleri belirtmek için köşeli parantez kullanılır ve isteğe bağlı olarak argümanları belirtmek için daha az / daha büyük kullanılır. Böylece:

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

Verir -a -bve -sisteğe bağlı parametreleri ve filebir tane gerektiriyordu. -tisteğe bağlıdır, ancak belirtilirse gerekli bağımsız değişkeni alır bar. Noktalar birkaç dosya alabileceğini gösterir.

Bu kesin bir spesifikasyon değildir ve genellikle manveya helpemin olmak için gereklidir.

Bağımsız değişken seçeneklerinin ve girdilerinin konumlandırılması genellikle karıştırılabilir, ancak bazı sistemler bağımsız değişkenlerin karışık konumlandırmasını işlemediğinden, konum tabanlı bir yaklaşımı korumak genellikle en iyisidir. Örnek olarak:

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

Her ikisi de bazı sistemlerde çalışır, ikincisi diğerinde çalışmaz.


Tam komutunuzda tüm parametreler aittir find- bu nedenle bir özelliği merak ediyorsanız man find, bakmak için doğru yerdir. Kabuk vb. İçin man sayfalarına bakmanız gereken durumlarda, örneğin:

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

-execÖzel bir tanesidir -exec some_command {} \;verilen tüm parametreler find, ancak some_command {} \;parçası içinde, genişletilir findiçin some_command string_of_found_entity.


Ötede

  • alıntı yapmak
  • genişleme
  • komut ikamesi
  • ve çok daha fazlası

Bunu faydalı bulabilirsiniz .


Çok bilgilendirici.
Fredrick Gauss

8

Sen bak shoul man finddeğil de help typeya man bash. typein findhangi dosya türüne ihtiyacınız olduğunu belirleyecektir:

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

Ve yerleşik typetamamen farklı bir şeydir ve içeride kullanılan DEĞİLDİR find.


0

Yanlış manuel sayfaya baktınız, bu type -fkomut değil find -type f, oldukça farklı olan seçenek, finddoğru açıklamalar için kılavuza bir göz atın .


0

-type fyalnızca f türündeki dosyaları yazdırmayı bulur; yani düz dosyalar, dizinler değil, sembolik bağlantılar değil aygıt dosyaları değil. man findsonra -fseçeneği arayın .


0

Bu, baktığınız doğru manuel sayfa değil. Kullanıyor olmalısın

man find

Bu konuda size söyleyecektir yüklem seçer sadece normal dosyaları.-type f-type

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.