Score:3

ฉันจะค้นหาแพ็คเกจที่มีนามแฝงได้อย่างไร

ธง bn

โดยใช้ apt-ไฟล์ ฉันสามารถค้นหาแพ็คเกจที่ให้ไฟล์ปฏิบัติการบางอย่างเช่นนี้:

ค้นหา sudo apt-file {/bin,/sbin,/usr/bin/,/usr/sbin}/wget

จริงๆแล้ว:

ค้นหา sudo apt-file {/bin,/sbin,/usr/bin/,/usr/sbin}/wget | เกรป "/wget$"

(เพราะมิฉะนั้นก็จะส่งคืนแพ็คเกจทั้งหมดที่มีไฟล์ปฏิบัติการที่ขึ้นต้นด้วย ว้าว.)

ตอนนี้ฉันกำลังวิ่ง:

EXEC_NAME="x86_64-w64-mingw32-g++"
ค้นหา sudo apt-file {/bin,/sbin,/usr/bin/,/usr/sbin}/${EXEC_NAME} | เกรป "${EXEC_NAME}$"

และน่าแปลกที่มันไม่ได้คืนอะไรเลย ทำไม เนื่องจากไม่มีแพ็คเกจใดให้ไฟล์ที่มีชื่อนั้น

ถ้าฉันวิ่ง:

EXEC_NAME="x86_64-w64-mingw32-g++"
ค้นหา sudo apt-file {/bin,/sbin,/usr/bin/,/usr/sbin}/${EXEC_NAME}

ฉันได้รับผลลัพธ์ต่อไปนี้:

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

หมายความว่าไม่มีแพ็คเกจให้บริการ x86_64-w64-mingw32-g++.

แต่หลังจากนั้นไม่นานฉันก็พบว่า g++-mingw-w64-x86-64-posix ไม่เพียงแค่จัดเตรียมไฟล์ปฏิบัติการเท่านั้น g++-mingw-w64-x86-64-posixแต่ยังเรียกนามแฝงหรือสัญลักษณ์เชื่อมโยง g++-mingw-w64-x86-64.

ในกรณีนี้ มันง่ายที่จะเข้าใจเพราะแพ็คเกจมีไบนารีอื่นที่มีชื่อคล้ายกันมาก ตอนนี้ปัญหาของฉันคือฉันต้องทำให้สิ่งนี้เป็นอัตโนมัติในแบบที่ใช้ได้กับนามแฝง/symlink ใดๆ แม้กระทั่งสำหรับอันที่มีชื่อต่างกันโดยสิ้นเชิง

ฉันจะทำสิ่งนี้ได้อย่างไร

แก้ไข:

นามแฝงถูกสร้างขึ้นในไฟล์ g++-mingw-w64-x86-64-posix.postinst ของ g++-mingw-w64-x86-64-posix แพ็คเกจในกรณีที่ช่วย:

ทางเลือกในการปรับปรุง -- ติดตั้ง /usr/bin/x86_64-w64-mingw32-g++ x86_64-w64-mingw32-g++ /usr/bin/x86_64-w64-mingw32-g++-posix 30 \
  --ทาส /usr/bin/x86_64-w64-mingw32-c++ x86_64-w64-mingw32-c++ /usr/bin/x86_64-w64-mingw32-c++-posix

แก้ไข 2: อาจมีวิธีค้นหาเนื้อหาไฟล์ของแพ็คเกจทั้งหมดหรือไม่' .postinst ไฟล์? อาจจะโดยการดาวน์โหลดทั้งหมด .postinst ไฟล์ลงในแคช? อาจทำได้โดยการดาวน์โหลดส่วนหัวของไฟล์ของแต่ละแพ็คเกจก่อนเพื่อดูว่าไฟล์ .postinst อยู่ที่ไบต์ใดในไฟล์เก็บถาวร จากนั้นใช้คำขอช่วง HTTP เพื่อดาวน์โหลด

แก้ไข 3:

สิ่งนี้ไม่ได้เปลี่ยนแปลงอะไร แต่ฉันพบว่าแทนที่จะเป็น grep และ cut คุณสามารถใช้ -x และ -l ธง. สิ่งนี้ทำให้คำสั่งสั้นลงเล็กน้อย:

sudo apt-file search -l -x "^/(bin|sbin|usr/bin|usr/sbin)/${EXEC_NAME}$" | หัว -1
mook765 avatar
cn flag
ตรวจสอบคำสั่ง grep `grep "${EXEC_NAME}$"` อย่างใกล้ชิด เครื่องหมายดอลลาร์ที่สองเป็นผู้ร้าย
N0rbert avatar
zw flag
ฉันคิดว่าคุณต้องทนทุกข์ทรมานจากคุณลักษณะ symlink ที่ทันสมัย ดู [ถาม-ตอบ](https://askubuntu.com/a/1313596/66509) ของฉันเกี่ยวกับปัญหาที่คล้ายกันกับ `dpkg -S` คุณกำลังพูดถึง *ทางเลือก* จริงๆ ซึ่งไม่ใช่ *นามแฝง* จริงๆ
Forivin avatar
bn flag
@mook765 เครื่องหมายดอลลาร์ที่สองจะเป็นตัวการได้อย่างไร? การลบออกจะทำให้เกิดปัญหามากยิ่งขึ้นตามที่อธิบายไว้ในคำถาม
sudodus avatar
jp flag
ดูเหมือนจะพอรู้คำขึ้นต้นของชื่อ คุณสามารถลองใช้บรรทัดคำสั่งต่อไปนี้: `apt-file search {/bin,/sbin,/usr/bin/,/usr/sbin}/name`; คุณไม่จำเป็นต้องใช้ `sudo` สำหรับคำสั่งนี้
Forivin avatar
bn flag
ไม่เท่านั้นยังไม่พอ มันจะส่งคืนแพ็คเกจทั้งหมดที่มีไบนารีที่ขึ้นต้นด้วยชื่อนั้น การปฏิบัติที่แย่มาก ไม่น่าเชื่อถืออย่างยิ่ง และควรหลีกเลี่ยงค่าใช้จ่ายทั้งหมดในสคริปต์ทุบตี
sudodus avatar
jp flag
ฉันคิดว่าคุณใช้มันเพื่อค้นหาแพ็คเกจโปรแกรมที่เกี่ยวข้อง ดังนั้นโดยพื้นฐานแล้ว การดำเนินการแบบแมนนวลจึงรองรับโดยบรรทัดคำสั่งขนาดเล็ก ไม่ชัดเจนสำหรับฉันว่าคุณต้องการอะไร กรุณาอธิบาย.
Forivin avatar
bn flag
ฉันต้องการรหัสที่ใช้ชื่อปฏิบัติการ/นามแฝง/... เป็นอินพุตและส่งคืนชื่อแพ็คเกจที่จะติดตั้ง
sudodus avatar
jp flag
หากไฟล์เรียกทำงานเป็นลิงก์สัญลักษณ์ คุณอาจต้องไปตามลิงก์จนกว่าจะพบไฟล์ปฏิบัติการจริง จากนั้นฉันคิดว่า `apt-file search /full/path/filename` จะใช้งานได้ ฉันสามารถทำได้ด้วยตนเอง แต่ต้องใช้โปรแกรมบางอย่างเพื่อทำใน shellscript ตัวอย่างเช่น ฉันมี `rename`: /usr/bin/rename -> /etc/alternatives/rename -> /usr/bin/file-rename (ซึ่งเป็นสคริปต์ perl ของ Larry Wall)
Forivin avatar
bn flag
สิ่งนี้จะไม่ทำงานเนื่องจาก symlink ถูกสร้างขึ้นโดยสคริปต์ postinst ไม่ใช่ไฟล์ที่อยู่ในแพ็คเกจ
muru avatar
us flag
ฉันคิดว่าระบบทางเลือก (`update-alternatives`) ได้รับการจัดการผ่านสคริปต์ผู้ดูแลเกือบทั้งหมด ดังนั้นข้อมูลนี้จึงไม่ถูกบันทึกในฐานข้อมูลที่ค้นหาได้ง่าย
James S. avatar
de flag
นามแฝงไม่ใช่ลิงก์สัญลักษณ์ และลิงก์สัญลักษณ์ไม่ใช่นามแฝง ระบบการตั้งชื่อมีความสำคัญเพื่อป้องกันความสับสน
Score:1
ธง it

หากคุณดาวน์โหลด dwww ด้วยคำสั่ง

sudo apt ติดตั้ง dwww

คุณสามารถใช้ dwww-quickfind ซึ่งเป็นหนึ่งในแพ็คเกจย่อยเพื่อค้นหาได้อย่างรวดเร็ว ต่อไปนี้มาจากหน้าคน dwww:

dwww-หาด่วน(8)

        ใช้โดย dwww-find(8) เพื่อค้นหาอย่างรวดเร็ว
        แพ็คเกจโปรแกรมที่เป็นของ

เพียงเพื่อทดสอบอินเทอร์เฟซ จากเทอร์มินัล ให้รันคำสั่ง 10 - 15 คำสั่ง บาง GNU บางอันไม่มี โดยไม่มีปัญหา ตัวอย่างเช่นเมื่อฉันวิ่ง

:~$ dwww-คนด่วน

และผลที่ได้คือ

คนฐานข้อมูล
เสมือน: man-db

เห็นได้ชัดว่าเป็นไปตาม symlinks ดังนั้นฉันเดาว่ามันติดตามนามแฝงด้วย ทั้งสองวิธี มันคุ้มค่าที่จะยิงแม้ว่าจะไม่เพียงแค่ได้รับ dwww คุ้มค่ากับปัญหา พิมพ์ dwww <ใดๆ-pkg> แล้วคุณจะเข้าใจ

มันเหมือนกับว่า ผู้ชาย คำสั่งเกี่ยวกับสเตียรอยด์

Score:1
ธง cn

ปัญหาเกี่ยวกับ symlinks คือไม่จำเป็นต้องติดตั้งโดยแพ็คเกจ

คุณสามารถใช้ได้ readlink -f [/พาธ/ไฟล์] เพื่อ (พยายาม) รับเส้นทางไปยังไฟล์จริง ถ้า /เส้นทาง/ไฟล์ เป็นสัญลักษณ์เชื่อมโยง อ่านลิงค์ จะส่งคืนไฟล์ที่ symlink ชี้ไป หากมีห่วงโซ่ของสัญลักษณ์เชื่อมโยง อ่านลิงค์ จะติดตามไปจนแตกเป็นห่วงโซ่หรือแฟ้มจริง

จากนั้นคุณสามารถใช้ apt-ไฟล์ เพื่อค้นหาแพ็คเกจ

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา