วัตถุประสงค์ของคำสั่ง 'ติดตั้ง' คืออะไร?


49

ฉันเคยเห็นinstallคำสั่งที่ใช้ใน Makefiles จำนวนมากและการมีอยู่และการใช้งานของมันค่อนข้างสับสน จาก manpages ก็ดูเหมือนว่าชุ่ยของcpที่มีคุณสมบัติที่น้อยลง cpแต่ฉันคิดว่ามันจะไม่ถูกนำมาใช้จนกว่าจะมีข้อได้เปรียบบางกว่า ตกลงคืออะไร?

คำตอบ:


50

installไม่เพียง แต่คัดลอกไฟล์ แต่ยังเปลี่ยนความเป็นเจ้าของและการอนุญาตและเลือกที่จะลบสัญลักษณ์การดีบักจากไฟล์เรียกทำงาน มันรวมcpกับchown, และchmod stripเป็นเครื่องมือระดับสูงที่สะดวกในการทำภารกิจพื้นฐานตามลำดับให้สำเร็จ

ข้อได้เปรียบของinstallover cpสำหรับการติดตั้ง executables คือถ้าเป้าหมายมีอยู่แล้วมันจะลบไฟล์เป้าหมายและสร้างขึ้นมาใหม่ สิ่งนี้จะกำจัดคุณสมบัติในปัจจุบันเช่นรายการการควบคุมการเข้าถึงและความสามารถซึ่งสามารถมองเห็นได้ทั้งในลักษณะกลับหัวและมีข้อเสีย เมื่ออัปเดตไฟล์เรียกทำงานหากมีการใช้งานอินสแตนซ์ของไฟล์เรียกทำงานนี้ไฟล์จะไม่ได้รับผลกระทบใด ๆ ในทางตรงกันข้ามcpอัพเดทไฟล์ให้เข้าที่หากมี สำหรับตัวแปร Unix ส่วนใหญ่สิ่งนี้จะล้มเหลวด้วยข้อผิดพลาดEBUSY¹หากเป้าหมายนั้นทำงานได้ ในบางครั้งมันสามารถทำให้เป้าหมายผิดพลาดได้เนื่องจากมันจะโหลดส่วนของโค้ดแบบไดนามิกและการแก้ไขไฟล์ทำให้โหลดโค้ดแบบไร้สาระ

installคือคำสั่ง BSD (เพิ่มใน4.2BSDเช่นในช่วงต้นทศวรรษ 1980) มันไม่ได้รับการรับรองจาก POSIX

¹ “ ไฟล์ข้อความไม่ว่าง” ในบริบทนี้“แฟ้มข้อความ” หมายถึง“ไฟล์ไบนารี” สำหรับเหตุผลทางประวัติศาสตร์ปิดบัง


หมายเหตุสำคัญ (เท่าที่ผมสามารถเข้าใจมัน) ก็คือว่ามันยังรวมไปพร้อมกับrm cpซึ่งหมายความว่าสามารถเขียนทับไฟล์ที่ใช้งานโดยยกเลิกการเชื่อมโยง ( rm) ก่อน cpเพียงอย่างเดียวจะให้ข้อผิดพลาด
code_fodder

10

มันมีวิธีการมาตรฐานในการจัดการความเป็นเจ้าของและการอนุญาตของไฟล์หรือไดเรกทอรีในขณะที่คัดลอกไฟล์หรือสร้างไดเรกทอรีในคำสั่งเดียว


9
มันไม่ใช่อะตอม อะตอมหมายถึงไม่มีสถานะกลางที่มองเห็นได้สำหรับกระบวนการอื่น ๆ installทำสำเนาตามด้วย chown และ chmod, syscalls ที่แยกต่างหากทั้งหมดและไม่ใช้การเปลี่ยนชื่อเข้าแทนที่ (อย่างน้อยเป็น coreutils 8.13 รุ่น GNU ไม่ได้) หากคุณคิดว่ามันเกิดขึ้นแบบอะตอมคุณอาจได้รับความประหลาดใจที่น่ารังเกียจ

3

ด้วยinstallคำสั่งเราสามารถคัดลอกไฟล์ที่มีสิทธิ์ปรารถนา

ตัวอย่างที่ส่วนใหญ่ใช้ในขณะตั้งค่า ldap

install -o ldap -g ldap /etc/openldap/DB_CONFIG_EXAMPLE  /var/lib/ldap/DB_CONFIG

สิ่งนี้ช่วยให้เราประหยัดchown ldap. /var/lib/ldap/DB_CONFIGหากคุณคัดลอกโดยใช้cpคุณจำเป็นต้องทำchownในสถานการณ์นี้เช่นกัน


1

ดู man page สำหรับinstall:

$ man install

สิ่งที่สกัดมา

SYNOPSIS
       install [OPTION]... [-T] SOURCE DEST
       install [OPTION]... SOURCE... DIRECTORY
       install [OPTION]... -t DIRECTORY SOURCE...
       install [OPTION]... -d DIRECTORY...


DESCRIPTION
       This  install  program  copies  files  (often just compiled) into 
       destination locations you choose.  If you want to download and
       install a ready-to-use package on a GNU/Linux system, you should instead 
       be using a package manager like yum(1) or apt-get(1).

       In the first three forms, copy SOURCE to DEST or multiple SOURCE(s) to 
       the existing DIRECTORY, while  setting  permission  modes and 
       owner/group.  In the 4th form, create all components of the given 
       DIRECTORY(ies).

       Mandatory arguments to long options are mandatory for short options too.

สิ่งที่มีประโยชน์อื่น ๆ เช่นการติดตั้งกับเจ้าของที่เฉพาะเจาะจงสิทธิ์และรักษาไฟล์ต้นฉบับ timestamps installยังสามารถทำได้ผ่านการใช้งานของ

   -g, --group=GROUP
          set group ownership, instead of process' current group

   -m, --mode=MODE
          set permission mode (as in chmod), instead of rwxr-xr-x

   -o, --owner=OWNER
          set ownership (super-user only)

   -p, --preserve-timestamps
          apply access/modification times of SOURCE files to corresponding 
          destination files

อ้างอิง


4
อย่างที่ฉันพูดในคำถามฉันอ่านหน้าหลัก; มันทำให้ฉันไม่ได้รับความสว่างว่าสิ่งนี้จะเพิ่มการทำงานของ cp
azernik

slm เน้นฟังก์ชั่นเฉพาะที่แยกออกเป็นสองส่วน: คุณสามารถตั้งค่าเจ้าของกลุ่มและโหมดเฉพาะสำหรับไฟล์ปลายทางด้วยinstallแทนที่จะเก็บรักษาสิทธิ์ที่มีอยู่เช่นเดียวกับcp
Joshua Miller
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.