Bash: Việc sử dụng loại (Bash dựng) là gì?


16

Tôi bắt gặp một lệnh trong Bash script mà tôi tìm thấy:

find /var/log/abcd -type f

Lệnh trên là trong bối cảnh làm sạch các tệp nhật ký. Tôi biết những gì findkhông.

Sau khi nhìn thấy -type f, tôi tìm trang hướng dẫn cho nó. Tôi đã thấy nó trong trang man của BASH_BUILTINS (1)

Mô tả của cờ -f theo typelệnh là: -

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

Sau đây là những câu hỏi của tôi:

  1. Việc sử dụng là typegì?
  2. Ý nghĩa của -fcờ là gì?
  3. Việc sử dụng typevới findlệnh là gì?

[EDIT]: - Sau khi đọc tất cả các ý kiến và câu trả lời cho đến bây giờ, tôi muốn đề cập đến nguyên nhân cho hiểu sai của tôi về -type option in command findVs type command. Tất cả điều này xảy ra bởi vì tôi đã giả sử và cho đến nay chỉ thấy các tùy chọn ngắn (Thử nghiệm trong trường hợp findlệnh) với một dấu trừ duy nhất '-' , ví dụ , ls -l. Hầu hết các lần tôi đã thấy các tùy chọn dài với dấu trừ đôi '-' , ví dụ , ls --version.


1
Lệnh typedựng sẵn không được sử dụng bởi find. Các -typetùy chọn để findlàm điều gì đó khác. Xem help typeman findđể có được câu trả lời của bạn.

1
Giải thích sai cụ thể này là rất cụ thể và không có khả năng sẽ giúp người khác như một câu hỏi
Anthon

9
Tại sao hạ cấp? Mặc dù câu hỏi cho thấy OP không biết nhiều về Unix, nhưng điều đó không đúng khi đưa ra một câu hỏi dựa trên những lý do đó. Akshay thậm chí đã đi xa đến mức đọc một trang người đàn ông mà hầu hết mọi người đặt câu hỏi ở đây không làm.
Stéphane Chazelas

vui lòng xem xét việc viết lại tiêu đề câu hỏi của bạn, bởi vì tiêu đề hiện tại của bạn đang ngăn những người thực sự tìm kiếm việc sử dụng 'loại' bash tích hợp để có câu trả lời chính xác ..
Sajuuk

Câu trả lời:


21

Trong trường hợp typenày không có gì để làm với bash tích hợp type, nhưng nhiều hơn về điều đó sau này.

Một chút về "loại"

Lệnh tích hợp BASH typecung cấp cho bạn thông tin về các lệnh. Như vậy:

$ type type
type is a shell builtin

Cú pháp là:

type [-tap] [name ...]
  • -t: chỉ in loại, nếu tìm thấy
  • -a: in tất cả các lần xuất hiện của lệnh, cả tích hợp và khác.
  • -p: in tệp đĩa sẽ được thực thi theo lệnh gọi hoặc không có gì.

Nếu chúng ta nhìn vào time, killcatnhư một ví dụ:

$ 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

Bây giờ, điều này xác định rằng nếu bạn đang ở trong vỏ và kiểu Bash time some_cmd, thì hàm bash timeđược sử dụng. Để sử dụng hệ thống, timebạn có thể làm /usr/bin/time some_cmd.

Một cách thường được sử dụng để đảm bảo rằng hệ thống, và không tích hợp, lệnh được sử dụng là sử dụng which.

tt=$(which time)

và sau đó sử dụng $ttđể gọi hệ thống time.


Lệnh trong câu hỏi

Trong trường hợp này, đây -typelà một tùy chọn cho lệnh find. Tùy chọn này lấy một đối số theo đó chỉ định loại thực thể. Thí dụ

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

Có nhiều hơn, kiểm tra man findphần còn lại.

Để tìm kiếm tùy chọn cụ thể bạn có thể làm (trong khi ở người đàn ông):

/ ^ \ s * -typeEnter

Sau đó sử dụng ncho tiếp theo cho đến khi bạn tìm thấy nó.


Một chút về lệnh shell

Đây là một chút giải thích cá nhân.

Một số điều đáng nói, trong trường hợp cụ thể này, là các lệnh, tùy chọn, đối số và đường ống.

Điều này được sử dụng một cách lỏng lẻo, nhưng trong từ vựng của tôi, chúng tôi có tóm tắt:

  • lệnh: một chương trình hoặc tích hợp .
  • tham số: một thực thể sau từ lệnh.
  • tùy chọn: một tham số tùy chọn .
  • đối số: một tham số bắt buộc.

Trong một đặc tả lệnh, dấu ngoặc vuông được sử dụng để chỉ định các tùy chọn và sau đó, tùy chọn ít hơn / lớn hơn, được sử dụng để chỉ định các đối số. Như vậy:

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

Cung cấp -a -b-snhư các tham số tùy chọn, và filemột tham số bắt buộc. -tlà tùy chọn, nhưng nếu được chỉ định sẽ lấy đối số được yêu cầu bar. Dấu chấm đại diện rằng nó có thể mất một số tập tin.

Đây không phải là đặc điểm kỹ thuật chính xác, và thường manhoặc helpđược yêu cầu phải chắc chắn.

Định vị các tùy chọn đối số và đầu vào thường có thể bị lẫn lộn, nhưng nói chung, tốt nhất là giữ theo cách tiếp cận dựa trên vị trí vì một số hệ thống không xử lý định vị hỗn hợp của đối số. Ví dụ:

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

Cả hai đều hoạt động trên một số hệ thống, trong khi cái sau không hoạt động trên hệ thống khác.


Trong lệnh chính xác của bạn, tất cả các tham số thuộc về find- do đó nếu bạn tự hỏi về một thuộc tính man findlà nơi chính xác để tìm. Trong trường hợp bạn cần xem các trang man cho shell, v.v. có thể là: vd:

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

Các -execlà một người đặc biệt mà -exec some_command {} \;là tất cả các thông số cho find, nhưng some_command {} \;một phần được mở rộng, trong phạm vi findđến some_command string_of_found_entity.


Hơn nữa về

  • trích dẫn
  • sự bành trướng
  • thay thế lệnh
  • và nhiều hơn nữa

Bạn có thể thấy điều này hữu ích .


Rất nhiều thông tin.
Fredrick Gauss

7

Bạn shoul nhìn vào man find, không phải trong help typehoặc man bash. typetrong findsẽ chỉ định loại tệp bạn cần:

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

Và dựng sẵn typelà điều hoàn toàn khác và nó KHÔNG phải là thứ được sử dụng bên trong find.


0

Bạn đã xem trang hướng dẫn sai, đây không phải là type -flệnh nhưng find -type ftùy chọn khá khác biệt, hãy xem findhướng dẫn để giải thích thích hợp.


0

-type fyêu cầu tìm chỉ in các tệp loại f tức là tệp đơn giản, không phải thư mục, không liên kết tượng trưng và không phải tệp thiết bị. man findsau đó tìm kiếm -ftùy chọn.


0

Đây không phải là trang hướng dẫn đúng mà bạn đang xem. Bạn nên sử dụng

man find

mà sẽ nói với bạn rằng với -type fsự -typeSelects ngữ chỉ các tập tin thông thường.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.