如何在 Linux 上使用“安裝”命令複製文件
已發表: 2022-01-29 install
是 Linux 和 macOS 中的多功能文件複製命令。 它非常適合尋求效率的高級用戶。 閱讀這篇文章,了解如何更聰明地工作——而不是更努力地工作。
等等——不是為了安裝軟件?
install
命令的名稱可能是所有 Linux 命令中最容易引起誤解的名稱。 它實際上並沒有安裝任何軟件。 如果您嘗試從 Ubuntu 或其他基於 Debian 的發行版中的命令行安裝軟件包,請使用apt-get
命令。 在其他 Linux 發行版上,請改用 Linux 發行版的包管理工具,例如 Fedora 上的dnf
或 openSUSE 上的zypper
。
那麼安裝做什麼?
簡而言之, install
結合了cp
(複製)、 chown
(更改所有者)、 chmod
(更改模式)、 mkdir
(生成目錄)和strip
(刪除符號)命令中的元素。 它使您可以在一個操作中使用所有這些功能。
install
命令可以:
- 複製文件,如
cp
命令。 - 選擇是否覆蓋現有文件。
- 如果目標目錄不存在,則創建它,例如
mkdir
。 - 設置文件的用戶權限標誌,就像
chmod
命令一樣。 - 設置文件的所有者,就像
chown
命令一樣。 - 從可執行文件中刪除不必要的包袱,就像
strip
命令一樣。
儘管有所有這些功能,但install
命令並沒有太多可供選擇的選項。
你什麼時候使用它
install
命令可能不會每天都使用。 它很有用,但僅適用於某些情況。 install
本身的一種情況是軟件開發。 假設您正在編寫一個新的實用程序。 您需要在開發環境之外進行測試。 為此,您需要將新程序文件複製到測試目錄。 可能需要創建測試目錄,並且您需要為文件設置正確的權限和所有權。
因為開發是一個迭代活動,所以您最終可能會多次執行此操作序列。 install
命令為您完成所有繁重的工作。 最後,當您的新實用程序準備好部署時,您可以使用install
以正確的權限將其複製到其最終工作位置。
一個例子
一位程序員正在開發一個名為ana
的新實用程序。 它由一個可執行的二進製文件和一個數據庫組成。 測試後,必須將其複製到/usr/local/bin
,以供Linux系統的所有用戶使用。 當您使用install
時,您需要將我們示例中的文件名和目錄路徑替換為您在計算機上使用的文件和路徑。
在它準備好發布之前,它將在一個名為~/test/ana
的目錄中進行測試。 geek
組的成員將具有讀取和執行權限。 其他用戶也將具有讀取和執行權限。 install
命令使用與chmod
相同的數字表示權限。 我們的程序員決定必須將權限設置為:
- 所有者:讀取、寫入和執行。
- 組:閱讀和執行。
- 其他:僅執行。
如何使用install
命令
我們虛構的程序員的工作目錄是~/work
。 他編寫了程序,編譯了它,並生成了一個名為ana
的二進製文件。 他已經創建了ana
使用的數據庫文件Words.db
。 所以這兩個文件都準備好進行測試了。 讓我們來看看它們:
ls -l ana Words.db
他剛剛編寫的ana
實用程序根據命令行上提供的短語創建字謎。 驗證測試非常簡單。
我們的程序員使用短語“餅乾”調用了ana
,一切看起來都很好。 他現在想將這兩個文件複製到~/test/ana
目錄,以查看新實用程序在遠離開發環境的情況下是否正常運行。 他發出以下命令:
install -D -v ana Words.db -t ~/test/ana
命令行上使用的選項是:
- D :如果需要,創建目錄,包括父目錄。
- v :詳細,列出創建時的每個目錄以及執行時的每個文件副本。
- t :目標目錄。
我們可以看到install
創建了~/test
目錄,然後創建了~/test/ana
目錄。 這些文件在被複製到目標目錄時被一一列出。
列出~/test/ana
中的文件確認它們已被正確複製。
ls -l
下一步是通過在~/test/ana
目錄中調用ana
實用程序來測試它。
該實用程序按預期運行,這很棒。 但是,權限不正確。 要求是設置geek
組的成員具有讀取和執行權限,其他用戶只能執行。
我們可以使用以下命令非常簡單地解決這兩個問題。 注意使用sudo
以 root 權限運行命令。 -o
和-g
和選項需要這個。 當我們發出命令時,我們會被要求輸入密碼。
sudo install -b -S .bak -o dave -g geek -m 751 ana Words.db -t ~/test/ana
-
-b
(備份)選項在文件被覆蓋之前創建文件備份。 -
-S
(後綴)選項定義備份文件的後綴。 如果您不提供後綴,則使用~
(波浪號)。 我們要求install
使用.bak
的後綴。 - 我們使用
-o
(所有者)選項將文件的所有者設置為dave
。 -
-g
(組)選項需要組名。 這將成為文件的所有者組。 我們將使用的組稱為geek
。 -
-m
(模式)選項使用標準chmod
數字語法設置文件的文件模式。
我們不再需要使用-D
(創建目錄)選項,因為我們知道測試目錄已經存在。 我們還省略了-v
(詳細)選項。 列出~/test/ana
目錄中的文件向我們展示了文件詳細信息:
ls -l
這證實我們的所有要求都已得到滿足。
- 這些文件已被複製到測試目錄。
- 權限設置正確。
-
dave
是文件的所有者。 -
geek
組是這兩個文件的所有者組。 - 已為每個文件(稱為 ana.bak 和 Words.db.bak)製作了備份副本。
所有這一切都是通過使用一個命令來實現的。 整潔的。
我們的程序員對實用程序進行了一些最終更改並重新編譯。 已更改的文件需要從~/work
目錄複製到~/test/ana
目錄。 我們可以通過使用-C
(比較)選項來做到這一點。 如果源文件和目標文件相同,則不復制源文件。
sudo install -C -b -S .bak -o dave -g geek -m 751 ana Words.db -t ~/test/ana
列出目標目錄中的文件向我們展示了ana
文件的文件大小已更改。 它比ana.bak
文件大。 ana
上的時間戳也發生了變化。 這些更改是因為這裡複製了新版本的文件。
ls -l
Words.db
文件的文件大小和時間戳未更改。 沒有對Words.db
文件進行任何更改,因此它沒有被複製過來。 在包含許多文件的項目中, -C
(比較)選項可以節省大量時間和硬盤驅動器流失,只需複制那些已更改的文件。
程序員再次測試了ana
實用程序是否繼續運行。
是時候使用install
將文件複製到/usr/local/bin
目錄了。 這將使該 Linux 計算機的所有用戶都可以使用新實用程序。 我們知道/usr/local/bin
存在,所以我們不需要創建那個目錄。 我們可以使用上一個命令的修改版本。
我們已將目標目錄更改為/usr/local/bin
。 我們刪除了-C
(比較)選項,因為目標目錄中還沒有這些文件的副本,所以沒有什麼可比較的。 同樣,沒有什麼要備份的,所以我們可以刪除-b
(備份)選項和-S
(後綴)選項。
sudo install -o dave -g geek -m 751 ana Words.db -t /usr/local/bin
我們可以列出文件已到達/usr/local/bin
:
ls -l
作為最後的測試,讓我們將目錄更改為我們的主目錄,看看我們是否可以從那裡調用我們的新實用程序。
請注意,我們不需要在ana
命令前面加上./
,這意味著它是從/usr/local/bin
運行的。 任務完成。
我們提到 install 可以從二進製文件中去除多餘的符號表和其他包袱,以減小它的大小。 現在讓我們這樣做。 請注意,下面的命令不包括 Words.db。 這是因為 Words.db 是數據庫文件,而不是二進制可執行文件。 要復制和縮小ana
文件,我們可以使用以下命令。 我們添加了帶有小寫“s”的 -s(收縮)選項。 我們在 -b(備份)選項和 -S(後綴)選項中添加了一個大寫的“S”。
sudo install -s -b -S .bak -o dave -g geek -m 751 ana -t /usr/local/bin
列出/usr/local/bin
中的文件允許我們比較ana
文件的大小與其備份版本。 ana
文件已減小到其先前大小的近 60%。
ls -l /usr/local/bin
總之
install
命令迎合了一個非常小眾的用途。 對於許多人來說,它不會日復一日地使用,或者可能每個月都不會使用。 儘管如此, install
命令是一個很好的工具,可以讓您熟悉並在您的技巧庫中使用。 對於您需要它的那些場合,它會通過提高效率、簡單性和更少的擊鍵來獎勵您的學習曲線。
Linux 命令 | ||
文件 | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look ·字符串·類型·重命名· zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm | |
流程 | 別名· screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat ·超時·牆·是·殺死·睡眠· sudo · su ·時間· groupadd · usermod ·組· lshw ·關機·重啟·暫停·關機· passwd · lscpu · crontab ·日期· bg · fg | |
聯網 | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw |
相關:適合開發人員和愛好者的最佳 Linux 筆記本電腦