install
install和cp類似,都可以將文件/目錄拷貝到指定的地點。但是,install允許你控制目標文件的屬性。install通常用於程序的makefile(在RPM的spec里面也經常用到),使用它來將程序拷貝到目標(安裝)目錄
- --backup[=CONTROL]:為每個已存在的目的地文件進行備份。
- b:類似 --backup,但不接受任何參數。
- d,--directory:所有參數都作為目錄處理,而且會創建指定目錄的所有主目錄。
- D:創建<目的地>前的所有主目錄,然后將<來源>復制至 <目的地>;在第一種使用格式中有用。
- g,--group=組:自行設定所屬組,而不是進程目前的所屬組。
- m,--mode=模式:自行設定權限模式 (像chmod),而不是rwxr-xr-x。
- o,--owner=所有者:自行設定所有者 (只適用於超級用戶)。
- p,--preserve-timestamps:以<來源>文件的訪問/修改時間作為相應的目的地文件的時間屬性。
- s,--strip:用strip命令刪除symbol table,只適用於第一及第二種使用格式。
- S,--suffix=后綴:自行指定備份文件的<后綴>
- t, --target-directory=目錄 將源文件所有參數復制到指定目錄
示例
1. 創建目錄:
install -d /usr/bin
2. 將源文件復制到目錄目錄,后面的參數是目錄,如果目錄不存在,則會文件處理
install source_file dest_dir
3. 將源文件復制到目標目錄,后面的參數是目錄,如果目錄不存在,則命令失敗
install source_file dest_dir/
4. 復制文件,並設置權限,自動創建目錄:
install -p -D -m 0755 targets /usr/bin/targets
相當於:
mkdir -p /usr/bin cp targets /usr/bin chmod 755 /usr/bin/targets touch /usr/bin/targets
install和cp完成同樣的任務–拷貝文件,它們之間的區別主要如下:
- 最重要的一點,如果目標文件存在,cp會先清空文件后往里寫入新文件,而install則會先刪除掉原先的文件然后寫入新文件。這是因為往正在使用的文件中寫入內容可能會導致一些問題,比如說寫入正在執行的文件可能會失敗,再比如說往已經在持續寫入的文件句柄中寫入新文件會產生錯誤的文件。而使用install先刪除后寫入(會生成新的文件句柄)的方式去安裝就能避免這些問題了;
- install命令會恰當地處理文件權限的問題;
- install命令可以打印出更多更合適的debug信息,還會自動處理SElinux上下文的問題。