ความแตกต่างระหว่างการติดตั้ง -c และ cp คืออะไร? การติดตั้งส่วนใหญ่มักจะใช้การติดตั้ง -c แต่จากหน้าคนมันไม่ได้ดูเหมือนว่ามันจะทำอะไรที่แตกต่างจาก cp (ยกเว้นอาจตั้งค่าสิทธิ์) เมื่อใดที่ฉันควรใช้ install -c และ cp เมื่อใด
ความแตกต่างระหว่างการติดตั้ง -c และ cp คืออะไร? การติดตั้งส่วนใหญ่มักจะใช้การติดตั้ง -c แต่จากหน้าคนมันไม่ได้ดูเหมือนว่ามันจะทำอะไรที่แตกต่างจาก cp (ยกเว้นอาจตั้งค่าสิทธิ์) เมื่อใดที่ฉันควรใช้ install -c และ cp เมื่อใด
คำตอบ:
ข้อแตกต่างที่สำคัญอย่างหนึ่งคือ cp จะตัดทอนไฟล์ปลายทางและเริ่มคัดลอกข้อมูลจากแหล่งข้อมูลลงในไฟล์ปลายทาง
ในทางกลับกันการติดตั้งจะลบไฟล์ปลายทางก่อน
สิ่งนี้มีความสำคัญเนื่องจากหากไฟล์ปลายทางถูกใช้งานแล้วสิ่งที่ไม่ดีอาจเกิดขึ้นกับผู้ใช้กำลังใช้ไฟล์นั้นในกรณีที่คุณcp
มีไฟล์ใหม่อยู่ด้านบน เช่นการเขียนทับปฏิบัติการที่กำลังทำงานอยู่อาจล้มเหลว การตัดทอนไฟล์ข้อมูลที่กระบวนการที่มีอยู่กำลังยุ่งอยู่กับการอ่าน / เขียนอาจทำให้เกิดพฤติกรรมแปลก ๆ หากคุณเพิ่งลบไฟล์ปลายทางก่อนเช่นเดียวกับการติดตั้งสิ่งต่างๆจะดำเนินต่อไปตามปกติ - ไฟล์ที่ถูกลบจะไม่ถูกลบออกจริง ๆ จนกว่ากระบวนการทั้งหมดจะปิดไฟล์นั้น
เทคนิค, ความแตกต่างระหว่างinstall -c
และcp
เป็นที่ชุดสิทธิ์ของไฟล์เป้าหมายไปยัง install
สงวนสิทธิ์ของไฟล์ต้นฉบับลบ umask พฤติกรรมเริ่มต้นเหล่านี้มีประโยชน์ในสถานการณ์ต่าง ๆ เห็นได้ชัดว่าด้วยตัวเลือกทั้งหมดที่ทั้งสองและเสนอในปัจจุบันฟังก์ชันได้แปรสภาพrwxr-xr-x
cp
cp
install
ปัจจุบันinstall
มีการใช้กันอย่างแพร่หลายใน makefiles cp
ทุกที่อื่น ความแตกต่างนี้มีประโยชน์ในบางครั้งเนื่องจากระบบปฏิบัติการหรือระบบติดตั้งบางตัวอนุญาตให้คุณเชื่อมต่อเข้ากับinstall
โปรแกรมเพื่อลงทะเบียนแพ็คเกจที่ติดตั้ง ระบบการจัดการบรรจุภัณฑ์ที่ทันสมัยทำให้สิ่งนี้ล้าสมัย แต่บางคนยังคงใช้มันอยู่ นอกจากนี้ความเป็นไปได้ในการตั้งค่าการอนุญาตไฟล์เป้าหมายในเวลาเดียวกันก็สะดวกมาก
ยูทิลิตี้ที่ฐานของมันเป็นแฟนซีinstall
cp
แต่เป็นเครื่องมือติดตั้งโดยเฉพาะมันมีคุณสมบัติบางอย่างที่cp
ไม่ได้ ของฉัน/usr/bin/install
จาก coreutils GNU ไม่เพียงสำเนา แต่ยังสามารถเปลี่ยน perms / เป็นเจ้าของธงหาเรื่อง (ประหยัดchgrp
, chown
, chmod
สวด) ตัวเลือกในการแก้ปัญหาแถบข้อมูล (ประหยัดstrip
ภาวนา) และโมโจบางอย่างสำหรับบริบท SELinux
มันให้ความสะดวกที่เป็นประโยชน์สำหรับการติดตั้งซอฟต์แวร์ ไม่มีการเปลี่ยนแปลงชีวิตทุกอย่างมีประโยชน์และทำให้สคริปต์ของคุณสะอาดขึ้น
cp --remove-destination
ใน coreutils GNU