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
và -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