install - ファイルの権限などを設定してコピーする

スポンサーリンク

installコマンドは、cpコマンドによく似たコマンドですがファイルをコピーすると同時にパーミッションを設定できる点がcpコマンドと異なります。

Makefileで実行プログラムをインストールディレクトリにコピーするとき利用することができます。

スポンサーリンク

installコマンドの利用例

ファイルのコピー
(オプションなし)

installコマンドは、cpコマンドとよく似たコマンドで、ファイルをコピーするコマンドになります。ただし、ファイルのパーミッションなどを設定することができます。

例えば、installコマンドは以下のような構文で使用することができます。

sourcefileはコピー元のファイル、destfileはコピー先のファイルになります。

オプションなしでファイルをコピーするとパーミッションは755(rwxr-xr-x)に設定されてファイルがコピーされます。

また、コマンド例のhelloというファイルは「Hello World!!」を表示する実行プログラムになります。

コマンド例

実行結果(確認)

 

 

 

ディレクトリを作成
(-dオプション)

installコマンドはディレクトリを作成することもできます。また、親ディレクトリが存在しない場合はその存在しない親ディレクトリも同時に作成されます。

構文は以下のようになります。

 

ディレクトリのパーミッションはデフォルトでは755(rwxr-xr-x)に設定されます。

コマンド例

実行結果

 

 

複数のファイルを特定のディレクトリにコピー
(-tオプション)

installコマンドは、特定のディレクトリが存在するときに複数のファイルを同時にコピーすることができます。その場合の構文は以下のようになります。sourcefileは1つ以上のコピーするファイルで、destdirはコピー先のディレクトリになります。

以下の構文でもコピーができます。

 

コマンド例は以下のようになります。ただし、コマンド例のhello2,hello3,...,hello5はhelloという実行プログラムのコピーになります。

コマンド例

コマンド例実行前

実行結果

 

 

ディレクトリが存在しない場合に複数のファイルをコピー
(-Dオプション)

ディレクトリが存在しない場合に、ディレクトリを作成してファイルをコピーする場合は、-Dオプションを用います。

コマンド例

コマンド例実行前

実行結果

以下の構文では、ディレクトリを作成するために-Dオプションを使用することはできません。

-Dオプションは、-tオプション(--target-directory)でディレクトリを指定した時に、ディレクトリが存在しない場合にディレクトリが作成されます。

 -Dオプションは、ファイルをコピーするときに親ディレクトリが存在しない場合、その親ディレクトリを作成するオプションです。ファイルを一つコピーする場合は以下のように使用できます。
コマンド例

コマンド例実行前

実行結果

 

 

コピーするファイル名を表示
(-vオプション)

installコマンドの冗長モード(詳細な情報を表示するモード)で、installコマンドがコピーするファイル名や作成するディレクトリ名を表示します。

コマンド例と実行結果

 

 

 

デバック情報を削除してプログラムをコピー
(-sオプション)

-sオプションは、プログラムをコピーする際に実行ファイルのシンボルテーブルを削除して、ファイルをコピーすることができます。

例えば、hello.cというファイルからhelloという実行ファイルを作成し、installコマンドでstrip-helloという名前でプログラムをコピーしてみます。

hello.c

hello.cのコンパイル

 

installコマンドのコマンド例

実行結果

また、gccオプションでプログラム作成時に-sオプションを用いるとシンボルテーブルを削除して実行ファイルを生成することができます。

 

 

 

権限を変更してファイルをコピー
(-mオプション)

-mオプションを用いるとファイルの権限(パーミッション)を変更して、ファイルをコピーすることができます。installコマンドのデフォルトでは、755(rwxr-xr-x)の権限がデフォルトで、正確には「u=rwx,go=rx,a-s」で「a-s」はset-user-IDやset-group-IDを取り除くことを意味します。

コマンド例

コマンド例実行前

実行結果

 

 

 

所有者の変更
(-oオプション)

もし適切な権限を持っているなら、-oオプションでファイルをコピーするときに所有者の変更を行うことができます。もし適切な権限を持っている場合は、所有者のデフォルトはrootになります。

コマンド例ではownerという名前のユーザの所有権としてファイルをコピーします。
また、グループは特に設定していないため、デフォルトになります。

コマンド例

コマンド例実行前

実行結果

 

 

 

グループの変更
(-gオプション)

-gオプションでグループの変更を行うことができます。デフォルトはプロセスを処理するときのグループになります。

コマンド例では、groupという名前のグループに変更します。ただし、現在のユーザであるubuntuがgroupという名前のグループに属していないため、root権限として実行しています。
また、所有者は特に設定していないため、デフォルトになります。

コマンド例

コマンド例実行前

実行結果

 

 

 

バックアップ
(-bオプション)

-bオプションで、ファイルが上書きされるときに、その上書きされる前のファイルをバックアップとして保存することができます。

バックアップされるファイルはファイル名の末尾に~(チルダ)がつけられたファイルとして保存されます。

コマンド例

コマンド例実行前

実行結果

 

また、バックアップを作成するときに-Sオプションで接尾辞を指定することもできます。

コマンド例

実行結果

 

 

 

タイムスタンプをコピー前のファイルと同じに
(-pオプション)

-pオプションで、コピー前のファイルと同じタイムスタンプのファイルをコピーすることができます。

これは、最後にインストールされた時間ではなく、最後にプログラムをビルドした時間を記録したいときに役立ちます。

コマンド例

コマンド例実行前

実行結果

 

 

 

比較して修正するかどうか決定
(-Cオプション)

-Cオプションは、コピー先とコピー元のファイルを比較して、同じ内容で指定した所有者、グループ、権限ならばコピー先のファイルを修正しません。

コマンド例では、まずディレクトリを確認してコピー先のファイルと同じファイルの存在を確認しています。その後に、通常のinstallコマンドを-vオプションで情報を表示する状態でどのように実行されているかを確認しています。

その後に-Cオプションを追加したinstallコマンドを使用して、何も動作していないことを確認しています。

最後に-Cオプションをつけた状態でコピー先とは違う権限を指定し、指定された権限がコピー先と違うためファイルがコピーされるのを確認した後にもう一度ディレクトリを確認しています。

コマンド例と実行結果

 

 

 

参考

外部リンク GNU Coreutils: install invocation