Điểm:3

Làm cách nào để tìm gói cung cấp bí danh?

lá cờ bn

sử dụng tập tin apt Tôi có thể tìm thấy các gói cung cấp một số tệp thực thi nhất định như thế này chẳng hạn:

sudo apt-file search {/bin,/sbin,/usr/bin/,/usr/sbin}/wget

Thực ra:

sudo apt-file search {/bin,/sbin,/usr/bin/,/usr/sbin}/wget | grep "/wget$"

(Bởi vì nếu không, nó sẽ chỉ trả về tất cả các gói chứa các tệp thực thi bắt đầu bằng quên đi.)

Bây giờ tôi đang chạy:

EXEC_NAME="x86_64-w64-mingw32-g++"
sudo apt-file search {/bin,/sbin,/usr/bin/,/usr/sbin}/${EXEC_NAME} | grep "${EXEC_NAME}$"

Và đáng ngạc nhiên là nó không trả lại bất cứ điều gì. Tại sao? Bởi vì không gói nào cung cấp tệp có tên đó.

Nếu tôi chạy:

EXEC_NAME="x86_64-w64-mingw32-g++"
sudo apt-file search {/bin,/sbin,/usr/bin/,/usr/sbin}/${EXEC_NAME}

tôi nhận được kết quả sau:

g++-mingw-w64-x86-64-posix: /usr/bin/x86_64-w64-mingw32-g++-posix
g++-mingw-w64-x86-64-win32: /usr/bin/x86_64-w64-mingw32-g++-win32

ngụ ý không có gói cung cấp x86_64-w64-mingw32-g++.

Nhưng sau một thời gian tôi thấy rằng g++-mingw-w64-x86-64-posix không chỉ cung cấp khả năng thực thi g++-mingw-w64-x86-64-posix, mà còn là bí danh hoặc liên kết tượng trưng được gọi là g++-mingw-w64-x86-64.

Trong trường hợp này, thật dễ dàng để tìm ra vì gói tình cờ chứa một tệp nhị phân khác có tên rất giống. Bây giờ vấn đề của tôi là tôi cần tự động hóa việc này theo cách phù hợp với bất kỳ bí danh/liên kết tượng trưng nào, ngay cả đối với những bí danh có tên hoàn toàn khác.

Tôi có thể làm cái này như thế nào?

Chỉnh sửa:

Bí danh được tạo trong tệp g++-mingw-w64-x86-64-posix.postinst sau đó g++-mingw-w64-x86-64-posix gói, trong trường hợp giúp:

update-alternatives --install /usr/bin/x86_64-w64-mingw32-g++ x86_64-w64-mingw32-g++ /usr/bin/x86_64-w64-mingw32-g++-posix 30 \
  --slave /usr/bin/x86_64-w64-mingw32-c++ x86_64-w64-mingw32-c++ /usr/bin/x86_64-w64-mingw32-c++-posix

Chỉnh sửa2: Có cách nào để tìm kiếm nội dung tệp của tất cả các gói' .postinst các tập tin? Có thể bằng cách tải xuống tất cả .postinst tập tin vào một bộ nhớ cache? Có lẽ điều đó có thể được thực hiện bằng cách tải xuống tiêu đề tệp của từng gói trước để xem các byte trong kho lưu trữ chứa các tệp .postinst và sau đó sử dụng các yêu cầu phạm vi HTTP để tải xuống chúng?

Chỉnh sửa3:

Điều này không thay đổi bất cứ điều gì, nhưng tôi thấy thay vì grep và cut, bạn chỉ có thể sử dụng -x-l lá cờ. Điều này làm cho lệnh ngắn hơn một chút:

sudo apt-file search -l -x "^/(bin|sbin|usr/bin|usr/sbin)/${EXEC_NAME}$" | đầu -1
mook765 avatar
lá cờ cn
Hãy xem kỹ lệnh grep của bạn `grep "${EXEC_NAME}$"`. Ký hiệu đô la thứ hai là thủ phạm.
N0rbert avatar
lá cờ zw
Tôi cho rằng bạn bị ảnh hưởng bởi tính năng liên kết tượng trưng hiện đại. Xem [Hỏi & Đáp](https://askubuntu.com/a/1313596/66509) của tôi về vấn đề tương tự với `dpkg -S`. Thực sự thì bạn đang nói về *alternative*, đây không thực sự là một *bí danh*.
Forivin avatar
lá cờ bn
@ mook765 Làm thế nào mà ký hiệu đô la thứ hai lại là thủ phạm? Loại bỏ nó sẽ gây ra nhiều vấn đề hơn như được giải thích trong câu hỏi.
sudodus avatar
lá cờ jp
Nó dường như là đủ để biết sự khởi đầu của tên. Bạn có thể thử với dòng lệnh sau: `apt-file search {/bin,/sbin,/usr/bin/,/usr/sbin}/name`; Bạn không cần `sudo` cho lệnh này.
Forivin avatar
lá cờ bn
Không, điều này là không đủ. Nó sẽ trả về tất cả các gói chứa nhị phân bắt đầu bằng tên đó. Thực hành rất tồi, cực kỳ không đáng tin cậy và nên tránh bằng mọi giá trong một tập lệnh bash.
sudodus avatar
lá cờ jp
Tôi nghĩ rằng bạn đã sử dụng nó để tìm gói chương trình có liên quan, do đó, về cơ bản, đây là một thao tác thủ công được hỗ trợ bởi một dòng lệnh nhỏ. Nó không rõ ràng với tôi những gì bạn muốn. Vui lòng giải thích.
Forivin avatar
lá cờ bn
Tôi cần mã lấy tên của tệp thực thi/bí danh/... làm đầu vào và trả về tên gói sẽ cài đặt nó.
sudodus avatar
lá cờ jp
Nếu tệp thực thi là một liên kết tượng trưng, ​​bạn có thể phải đi theo (các) liên kết đó cho đến khi tìm thấy tệp thực thi thực sự, và sau đó tôi nghĩ `tìm kiếm tệp apt /đầy đủ/đường dẫn/tên tệp` sẽ hoạt động. Tôi có thể làm điều đó theo cách thủ công, nhưng sẽ cần một số chương trình để thực hiện điều đó trong shellscript. Ví dụ: tôi có `rename`: /usr/bin/rename -> /etc/alternatives/rename -> /usr/bin/file-rename (là tập lệnh Perl của Larry Wall).
Forivin avatar
lá cờ bn
Điều này sẽ không hoạt động vì liên kết tượng trưng được tạo bởi tập lệnh postinst. Nó không phải là một tập tin chứa trong gói.
muru avatar
lá cờ us
Tôi nghĩ rằng hệ thống lựa chọn thay thế (`cập nhật-thay thế`) được quản lý gần như độc quyền thông qua tập lệnh bảo trì, vì vậy thông tin này không được thu thập trong một số cơ sở dữ liệu có thể tìm kiếm dễ dàng.
James S. avatar
lá cờ de
Bí danh không phải là liên kết tượng trưng và liên kết tượng trưng không phải là bí danh. Danh pháp là quan trọng để tránh nhầm lẫn.
Điểm:1
lá cờ it

Nếu bạn tải xuống chết tiệt với lệnh

sudo apt cài đặt dwww

bạn có thể sử dụng dwww-quickfind, một trong các gói phụ của nó, để nhanh chóng tìm thấy nó. Sau đây là từ trang dwww:

dwww-tìm nhanh(8)

        Được sử dụng bởi dwww-find(8) để tìm nhanh
        gói một chương trình thuộc về.

Chỉ để kiểm tra giao diện, từ thiết bị đầu cuối, đã chạy nó trong 10 - 15 lệnh, một số GNU, một số khác thì không, không có vấn đề gì. Ví dụ, khi tôi chạy

:~$ dwww-người tìm nhanh

và kết quả là

man-db
ẢO: man-db

Rõ ràng là nó theo các liên kết tượng trưng, ​​vì vậy tôi đoán rằng nó cũng theo dõi các bí danh. Dù bằng cách nào, nó đáng để thử.Ngay cả khi nó không, chỉ nhận được chết tiệt là giá trị rắc rối. Loại dwww <any-pkg> và bạn sẽ hiểu.

Nó giống như Đàn ông lệnh trên steroid.

Điểm:1
lá cờ cn

Vấn đề với các liên kết tượng trưng là chúng không nhất thiết phải được cài đặt bởi các gói.

Bạn có thể dùng liên kết đọc -f [/ đường dẫn/tệp] để (cố gắng) lấy đường dẫn đến tệp thực. Nếu /đường dẫn/tệp là một liên kết tượng trưng, liên kết đọc sẽ trả về tệp mà liên kết tượng trưng trỏ tới. Nếu có một chuỗi các liên kết tượng trưng, liên kết đọc sẽ theo dõi chúng cho đến khi nó bị đứt trong chuỗi hoặc tệp thực.

Sau đó, bạn có thể sử dụng tập tin apt để tìm kiếm các gói.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.