Linuxで「install」コマンドを使用してファイルをコピーする方法
公開: 2022-01-29
installは、LinuxおよびmacOSでの用途の広いファイルコピーコマンドです。 効率を求めるパワーユーザーに最適です。 この記事を読んで、難しくはなく、よりスマートに作業する方法を見つけてください。
待ってください—ソフトウェアをインストールするためではありませんか?
installコマンドには、Linuxコマンドの中で最も誤解を招くような名前が付いている可能性があります。 実際にはソフトウェアはインストールされません。 Ubuntuまたは別のDebianベースのディストリビューションのコマンドラインからソフトウェアパッケージをインストールしようとしている場合は、 apt-getコマンドを使用します。 他のLinuxディストリビューションでは、代わりにLinuxディストリビューションのパッケージ管理ツールを使用してください。たとえば、FedoraのdnfやopenSUSEのzypperなどです。
では、インストールは何をしますか?
一言で言えば、 installは、 cp (コピー)、 chown (所有者の変更)、 chmod (モードの変更)、 mkdir (ディレクトリの作成)、およびstrip (シンボルの削除)コマンドの要素を組み合わせます。 これらすべての機能を1つのアクションで使用できます。
installコマンドは次のことができます。
-
cpコマンドのようにファイルをコピーします。 - 既存のファイルを上書きするかどうかを選択します。
-
mkdirのように、ターゲットディレクトリが存在しない場合は作成します。 -
chmodコマンドと同様に、ファイルのユーザー権限フラグを設定します。 -
chownコマンドと同様に、ファイルの所有者を設定します。 -
stripコマンドと同様に、実行可能ファイルから不要な手荷物を削除します。
そのすべての機能にもかかわらず、 installコマンドには競合するオプションがあまりありません。

いつ使用しますか
installコマンドはおそらく毎日使用されることはありません。 これは便利ですが、特定の状況でのみ使用できます。 installが独自に行われるシナリオの1つは、ソフトウェア開発です。 新しいユーティリティをプログラミングしているとしましょう。 開発環境の外でテストを行う必要があります。 これを行うには、新しいプログラムファイルをテストディレクトリにコピーする必要があります。 テストディレクトリを作成する必要がある場合があり、ファイルの正しいアクセス許可と所有権を設定する必要があります。
開発は反復的なアクティビティであるため、この一連のアクションを何度も実行することになります。 installコマンドは、すべての面倒な作業を自動的に実行します。 最後に、新しいユーティリティを展開する準備ができたら、 installを使用して、正しい権限で最終的な作業場所にコピーできます。
例
プログラマーは、 anaと呼ばれるまさにそのような新しいユーティリティに取り組んでいます。 実行可能バイナリファイルとデータベースで構成されています。 テスト後、Linuxシステムのすべてのユーザーが利用できるように、 /usr/local/binにコピーする必要があります。 installを使用するときに、コンピューターで使用しているファイルとパスを、この例のファイル名とディレクトリパスに置き換える必要があります。
リリースの準備ができるまで、 ~/test/anaというディレクトリでテストされます。 geekグループのメンバーには、読み取りと実行の権限があります。 他のユーザーにも読み取りと実行のアクセス許可があります。 installコマンドは、 chmodと同じ数値表現をパーミッションに使用します。 私たちのプログラマーは、パーミッションを次のように設定する必要があると判断しました。
- 所有者:読み取り、書き込み、および実行。
- グループ:読み取りと実行。
- その他:実行のみ。
installコマンドの使用方法
私たちの架空のプログラマーの作業ディレクトリは~/workです。 彼はプログラムを作成し、コンパイルし、 anaというバイナリを作成しました。 彼は、 anaが使用するデータベースファイルWords.dbをすでに作成しています。 したがって、両方のファイルをテストする準備ができています。 それらを見てみましょう:
ls -l ana Words.db

彼が書いたanaユーティリティは、コマンドラインで提供されたフレーズからアナグラムを作成します。 検証テストは非常に簡単です。

私たちのプログラマーは「ビスケット」というフレーズでanaを呼び出しましたが、すべて順調に見えます。 彼は今、これら2つのファイルを~/test/anaディレクトリにコピーして、新しいユーティリティが開発環境から離れて正しく機能するかどうかを確認したいと考えています。 彼は次のコマンドを発行します。
インストール-D-v ana Words.db -t〜 / test / ana

コマンドラインで使用されるオプションは次のとおりです。
- D :必要に応じて、親ディレクトリを含むディレクトリを作成します。
- v :詳細、作成された各ディレクトリーと実行された各ファイルのコピーをリストします。
- t :ターゲットディレクトリ。
installによって~/testディレクトリが作成され、次に~/test/anaディレクトリが作成されることがわかります。 ファイルは、ターゲットディレクトリにコピーされるときに、1つずつ一覧表示されます。
~/test/anaにファイルをリストすると、ファイルが正しくコピーされていることが確認できます。
ls -l

次のステップは、 ~/test/anaディレクトリでanaユーティリティを呼び出してテストすることです。

ユーティリティは期待どおりに動作します。これはすばらしいことです。 ただし、権限が正しくありません。 要件は、グループgeekのメンバーに読み取りと実行のアクセス許可を設定し、他のユーザーには実行のみを設定することです。
次のコマンドを使用すると、これらの問題の両方に非常に簡単に対処できます。 root権限でコマンドを実行するためにsudoを使用していることに注意してください。 -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(mode)オプションは、標準のchmod数値構文を使用して、ファイルのファイルモードを設定します。
テストディレクトリがすでに存在することがわかっているため、 -D (ディレクトリの作成)オプションを使用する必要はなくなりました。 -v (verbose)オプションも省略しました。 ~/test/anaディレクトリにファイルをリストすると、ファイルの詳細が表示されます。
ls -l

これにより、すべての要件が満たされていることが確認されます。
- ファイルはテストディレクトリにコピーされました。
- 権限が正しく設定されています。
-
daveはファイルの所有者です。 -
geekグループは、2つのファイルの所有者グループです。 - ana.bakおよびWords.db.bakと呼ばれる各ファイルのバックアップコピーが作成されています。
これらはすべて、1つのコマンドを使用することで達成されました。 きちんとした。

私たちのプログラマーは、ユーティリティにいくつかの最終的な変更を加えて、再コンパイルします。 変更されたファイルは、 ~/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から実行されていることを意味します。 任務完了。
インストールにより、バイナリファイル内から冗長なシンボルテーブルやその他の手荷物を取り除き、サイズを小さくすることができると述べました。 今それをしましょう。 以下のコマンドには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・strings・type・rename・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・タイムアウト・wall・yes・kill・sleep・sudo・su・time・groupadd・usermod・groups・lshw・shutdown・reboot・halt・poweroff・passwd・lscpu・crontab・date・bg・fg | |
| ネットワーキング | netstat・ping・traceroute・ip・ss・whois・fail2ban・bmon・dig・finger・nmap・ftp・curl・wget・who・whoami・w・iptables・ssh-keygen・ufw |
関連:開発者と愛好家のための最高のLinuxラップトップ
