Làm cách nào để xóa quyền của tôi bị từ chối các bản in ra khỏi chương trình tìm kiếm từ chương trình tìm kiếm?


38

find / -name netcdf

Đầu ra

find: `/root/.dbus': Permission denied
find: `/root/.gconf': Permission denied
find: `/root/.gconfd': Permission denied
find: `/root/.gnome': Permission denied
find: `/root/.gnome2': Permission denied
find: `/root/.gnome2_private': Permission denied

Câu trả lời:


35

Các tin nhắn đó được gửi đến stderr và hầu như chỉ có những tin nhắn thường được nhìn thấy trên luồng đầu ra đó. Bạn có thể đóng nó hoặc chuyển hướng nó trên dòng lệnh.

$ find / -name netcdf 2>&-

hoặc là

$ find / -name netcdf 2>/dev/null

Ngoài ra, nếu bạn định tìm kiếm thư mục gốc (/), thì thường là tốt để xử lý quá trình để tìm không tiêu thụ hết tài nguyên.

$ nice find / -name netcdf 2>&-

Điều này làm giảm mức độ ưu tiên của quy trình cho phép các tiến trình khác có nhiều thời gian hơn trên CPU. Tất nhiên, nếu không có gì khác đang sử dụng CPU, thì nó không làm gì cả. :) Về mặt kỹ thuật, giá trị NI (nhìn từ ps -l) làm tăng giá trị PRI. Giá trị PRI thấp hơn có mức độ ưu tiên cao hơn. So sánh ps -lvới nice ps -l.


1
Tôi không thích đưa ra cảnh báo. Nó là tốt hơn nhiều để xử lý chúng. Ngoài ra, không có lối thoát ở đây trong lĩnh vực này.
Léo Léopold Hertz

1
@ LéoLéopoldHertz 준영 CHÚNG TÔI ... nếu bạn không thể thấy đầu ra chương trình vì màn hình của bạn đầy lỗi .. đây là trường hợp ...
chrips

20

Tôi muốn chỉ ra câu trả lời này của @Gilles trong Loại trừ các đường dẫn khiến người ta phàn nàn về các quyền - Unix & Linux Stack Exchange ; về cơ bản nó liên quan đến một cấu trúc cho findnó làm cho nó không hạ xuống các thư mục không thể đọc được, và theo nghĩa đó, có lẽ cũng nhanh hơn một chút.

Điều này dường như làm việc cho tôi:

Với GNU findhoặc bất kỳ thứ gì khác findhỗ trợ -readablevà các -executablevị từ:

find / -type d ! \( -readable -executable \) -prune -o -type f -name netcdf -print

hoặc cũng thế này:

find / -type d ! -perm -g+r,u+r,o+r -prune -o -type f -name 'netcdf' -print

Vì một số lý do, tôi cần thêm tất cả g+r,u+r,o+r(phím tắt cho điều đó a+r), nếu không, nếu một trong số chúng bị bỏ lại, tôi vẫn có thể nhận được các lần truy cập "Quyền bị từ chối".

Dưới đây là một phân tích về làm thế nào tôi thấy điều này (lưu ý các -anhà điều hành (và) trong findtiềm ẩn giữa hai vị từ ):

find /         # find starting from path /
  -type d        # match type is directory
  ! -perm -a+r   # (and) match not permissions of `r`ead present 
  -prune         # ignore what matched above and do not descend into it
  -o             # or (whatever didn't match above)
  -type f        # match type is file
  -name 'netcdf' # (and) match name is 'netcdf'
  -print         # print what matched above

Lưu ý rằng không có lần cuối -print, tôi nhận được một số mục bổ sung được hiển thị (không liên quan gì -name 'netcdf'); những -printđảm bảo rằng chỉ phù hợp với tên được in (nếu có).


2
Nếu find(1)không thể truy cập vào một thư mục, nó sẽ không. Vì vậy, kiểm tra trước nếu nó có thể hoặc không sẽ chỉ thêm công việc (kiểm tra hai lần), và do đó làm chậm nó.
vonbrand

3
@vonbrand thật cần thiết nếu bạn dựa vào findtrạng thái thoát, vì những lỗi cấp phép này tạo findra lối thoát với trạng thái khác không
Ernest A

Tôi không thể nhận được đề xuất của bạn làm việc. Tôi không nhận được đầu ra khi đầu ra dự kiến ​​là đầy đủ. unix.stackexchange.com/q/290791/16920 Tuy nhiên, tôi nghĩ khác tôi nghĩ phương pháp của bạn là cách tốt nhất để đi.
Léo Léopold Hertz

1
Ồ, tôi không thể tin rằng thật khó để tìm ra câu trả lời này, bây giờ tôi ước mình có thể làm được nhiều hơn là chỉ nâng cao nó.
Wedge

8

Sử dụng locate(1)thay thế:

$ locate netcdf

Nó sẽ chỉ hiển thị cho bạn các tập tin người dùng của bạn có thể nhìn thấy.


1
Điều này giả định rằng updatedbđang chạy thường xuyên. Đó không phải là trường hợp trên tất cả các hệ thống Linux.
Arcege

3
Nếu định vị (1) được cài đặt, cơ sở dữ liệu của nó sẽ được cập nhật định kỳ. Nếu điều đó không xảy ra, tôi sẽ phân loại sai cấu hình thay vì lỗi định vị (1). Ngoài ra, chỉ mất vài phút để chạy nó bằng tay trong những trường hợp hiếm hoi mà bạn đang tìm kiếm một tệp đã được thêm vào kể từ lần cập nhật DB cuối cùng. Tôi thấy mình làm điều đó có thể là nửa tá mỗi năm, một khoản chi phí dễ dàng được trả cho từ lợi thế tốc độ của việc xác định vị trí (1) so với tìm kiếm (1).
Warren Young
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.