Linuxコマンド install(ファイルをコピーしてアクセス権限を設定)

installコマンドはファイルをコピーするという点ではcpと似ているが、コピー先ファイルの所有者、グループ、パーミッションを制御することができる。 プログラムを指定ディレクトリにコピーするために、 Makefile 内で使われることが多い。

RHEL Fedora CentOS Vine Deblan Ubuntu Plamo

参考サイト:Man page of INSTALL

使用方法

ファイルやディレクトリをコピーする場合は、installコマンドを使用する。一般的にはファイルの所有者やグループ、タイムスタンプ情報は、コマンド実行ユーザや実行時間に変更される。installコマンドは、インストールするためのコピーコマンドの意味合いが強い。

書式

$ install [オプション] コピー元ファイル名 コピー先ファイル名
$ install [オプション] -d ディレクトリ名・・・
$ install [オプション] -t ディレクトリ名 ファイル名・・・

オプション

–backup[=コントロール]コピー先ファイルが既に存在する場合は、指定したコントロール名によって
バックアップを作成する。移動先に同じファイル名がある場合のバックアップ
を指定する。
※フラグは、指定可能なバックアップ方法の表を参照
-d ディレクトリ名,
–directory ディレクトリ名
指定したディレクトリを作成する。そのディレクトリに親ディレクトリが
ない場合は、親ディレクトリを作成する。
ディレクトリの所有者やアクセス権限を指定しない場合は
実行者が設定される
-v,
–verbose
コピー時にファイル名を表示する
-C,
–compare
コピー元とコピー先を比較し、同じ場合はコピーしない
-Dコピー先に必要なディレクトリ構造をあらかじめ作成してからコピーする
-g グループ名,
–group=グループ名
グループ名やグループIDを指定して所有グループを指定する。
-m モード,
–mode=ユーザー名
アクセス権限を指定する。8進数、chmodのシンボルモードの両方が指定できる。
※デフォルト:0775
-o ユーザー名,
–owner=ユーザ名
管理者権限で所有ユーザーを指定できる。
-p,
–preserve-timestamps
ファイルのatime/mtimeを、コピー元ファイルに設定する
-S 拡張子,
–suffix=拡張子
コピー先ファイルが存在する場合はファイルをバックアップ、ファイル名に
指定した拡張子を追加する。
-t ディレクトリ名指定したディレクトリに、後に続くファイルをすべてコピーして属性を変更する。
このオプションを使う場合のみ「install[オプション]」-t ディレクトリ 
ファイル・・・の引数順になり、コピー対象のファイルを後に複数指定する。
オプション一覧
フラグ説明
none/offバックアップを作成しない
numbered/t常に数字の拡張子を持つバックアップを作成する
existing/nil数字つきのバックアップファイルがある場合は加算、ない場合は「~」だけ付加する
simple/never「~」をつけるだけのバックアップを行う
指定可能なバックアップ方法

サンプル

samplerun.shファイルを/usr/local配下のディレクトリにコピーする。

$ install samplerun.sh /usr/local

実行結果

[root@ sample]$ ls -lF /usr/local
total 44
drwxr-xr-x 2 root root 4096 Apr 11  2018 bin/
drwxr-xr-x 2 root root 4096 Apr 11  2018 etc/
drwxr-xr-x 2 root root 4096 Apr 11  2018 games/
drwxr-xr-x 2 root root 4096 Apr 11  2018 include/
drwxr-xr-x 2 root root 4096 Apr 11  2018 lib/
drwxr-xr-x 2 root root 4096 Apr 11  2018 lib64/
drwxr-xr-x 2 root root 4096 Apr 11  2018 libexec/
drwxr-xr-x 2 root root 4096 Apr 11  2018 sbin/
drwxr-xr-x 2 root root 4096 Oct 19  2018 sh/
drwxr-xr-x 5 root root 4096 Apr 11  2018 share/
drwxr-xr-x 2 root root 4096 Apr 11  2018 src/
[root@ sample]$ install samlerun.sh /usr/local
[root@ sample]$ ls -lF /usr/local
total 48
drwxr-xr-x 2 root root 4096 Apr 11  2018 bin/
drwxr-xr-x 2 root root 4096 Apr 11  2018 etc/
drwxr-xr-x 2 root root 4096 Apr 11  2018 games/
drwxr-xr-x 2 root root 4096 Apr 11  2018 include/
drwxr-xr-x 2 root root 4096 Apr 11  2018 lib/
drwxr-xr-x 2 root root 4096 Apr 11  2018 lib64/
drwxr-xr-x 2 root root 4096 Apr 11  2018 libexec/
-rwxr-xr-x 1 root root   12 Apr  9 17:20 samlerun.sh*
drwxr-xr-x 2 root root 4096 Apr 11  2018 sbin/
drwxr-xr-x 2 root root 4096 Oct 19  2018 sh/
drwxr-xr-x 5 root root 4096 Apr 11  2018 share/
drwxr-xr-x 2 root root 4096 Apr 11  2018 src/
[root@ sample]$

パーミッションを設定しコピーする。

(-mオプション)を使用することにより、ファイルのパーミッションを指定してコピーすることができる。

サンプル

samplerun.shをパーミッションを755(所有者:読み取り、書き込み、実行+グループ:読み取り、実行、その他:読み取り、実行)の権限を付与して/usr/local配下にコピーする。

$ install -m 755 samplerun.sh /usr/local

実行結果

[root@engraku sample]# ls -lF /usr/local
total 44
drwxr-xr-x 2 root root 4096 Apr 11  2018 bin/
drwxr-xr-x 2 root root 4096 Apr 11  2018 etc/
drwxr-xr-x 2 root root 4096 Apr 11  2018 games/
drwxr-xr-x 2 root root 4096 Apr 11  2018 include/
drwxr-xr-x 2 root root 4096 Apr 11  2018 lib/
drwxr-xr-x 2 root root 4096 Apr 11  2018 lib64/
drwxr-xr-x 2 root root 4096 Apr 11  2018 libexec/
drwxr-xr-x 2 root root 4096 Apr 11  2018 sbin/
drwxr-xr-x 2 root root 4096 Oct 19  2018 sh/
drwxr-xr-x 5 root root 4096 Apr 11  2018 share/
drwxr-xr-x 2 root root 4096 Apr 11  2018 src/
[root@engraku sample]# install -m 755 samlerun.sh /usr/local
[root@engraku sample]# ls -lF /usr/local
total 48
drwxr-xr-x 2 root root 4096 Apr 11  2018 bin/
drwxr-xr-x 2 root root 4096 Apr 11  2018 etc/
drwxr-xr-x 2 root root 4096 Apr 11  2018 games/
drwxr-xr-x 2 root root 4096 Apr 11  2018 include/
drwxr-xr-x 2 root root 4096 Apr 11  2018 lib/
drwxr-xr-x 2 root root 4096 Apr 11  2018 lib64/
drwxr-xr-x 2 root root 4096 Apr 11  2018 libexec/
-rwxr-xr-x 1 root root   12 Apr  9 17:27 samlerun.sh*
drwxr-xr-x 2 root root 4096 Apr 11  2018 sbin/
drwxr-xr-x 2 root root 4096 Oct 19  2018 sh/
drwxr-xr-x 5 root root 4096 Apr 11  2018 share/
drwxr-xr-x 2 root root 4096 Apr 11  2018 src/
[root@engraku sample]# 

親ディレクトリを作成してファイルをコピー

(-mオプション)コピー先に親ディレクトリが存在しない場合は、存在しない親ディレクトリを作成してコピーする。

サンプル

$ install -m 755 -D samlerun.sh /usr/local/sample/samlerun.sh

実行結果

[root@engraku sample]# ls -lF /usr/local
total 44
drwxr-xr-x 2 root root 4096 Apr 11  2018 bin/
drwxr-xr-x 2 root root 4096 Apr 11  2018 etc/
drwxr-xr-x 2 root root 4096 Apr 11  2018 games/
drwxr-xr-x 2 root root 4096 Apr 11  2018 include/
drwxr-xr-x 2 root root 4096 Apr 11  2018 lib/
drwxr-xr-x 2 root root 4096 Apr 11  2018 lib64/
drwxr-xr-x 2 root root 4096 Apr 11  2018 libexec/
drwxr-xr-x 2 root root 4096 Apr 11  2018 sbin/
drwxr-xr-x 2 root root 4096 Oct 19  2018 sh/
drwxr-xr-x 5 root root 4096 Apr 11  2018 share/
drwxr-xr-x 2 root root 4096 Apr 11  2018 src/
[root@engraku sample]# install -m 755 -D samlerun.sh /usr/local/sample/samlerun.sh

[root@engraku sample]# tree /usr/local/sample/
/usr/local/sample/
└── samlerun.sh

0 directories, 1 file
[root@engraku sample]#

複数のファイルを特定のディレクトリにコピー

(-tオプション)を使用することにより、複数のファイルを特定のディレクトリにコピーすることができます。

サンプル

$ install -t /usr/local samlerun1.sh samlerun2.sh

実行結果

[root@engraku sample]# ls -lF /usr/local
total 44
drwxr-xr-x 2 root root 4096 Apr 11  2018 bin/
drwxr-xr-x 2 root root 4096 Apr 11  2018 etc/
drwxr-xr-x 2 root root 4096 Apr 11  2018 games/
drwxr-xr-x 2 root root 4096 Apr 11  2018 include/
drwxr-xr-x 2 root root 4096 Apr 11  2018 lib/
drwxr-xr-x 2 root root 4096 Apr 11  2018 lib64/
drwxr-xr-x 2 root root 4096 Apr 11  2018 libexec/
drwxr-xr-x 2 root root 4096 Apr 11  2018 sbin/
drwxr-xr-x 2 root root 4096 Oct 19  2018 sh/
drwxr-xr-x 5 root root 4096 Apr 11  2018 share/
drwxr-xr-x 2 root root 4096 Apr 11  2018 src/

[root@engraku sample]# install -t /usr/local samlerun1.sh samlerun2.sh 

[root@engraku sample]# ls -lF /usr/local
total 52
drwxr-xr-x 2 root root 4096 Apr 11  2018 bin/
drwxr-xr-x 2 root root 4096 Apr 11  2018 etc/
drwxr-xr-x 2 root root 4096 Apr 11  2018 games/
drwxr-xr-x 2 root root 4096 Apr 11  2018 include/
drwxr-xr-x 2 root root 4096 Apr 11  2018 lib/
drwxr-xr-x 2 root root 4096 Apr 11  2018 lib64/
drwxr-xr-x 2 root root 4096 Apr 11  2018 libexec/
-rwxr-xr-x 1 root root   12 Apr  9 17:43 samlerun1.sh*
-rwxr-xr-x 1 root root   12 Apr  9 17:43 samlerun2.sh*
drwxr-xr-x 2 root root 4096 Apr 11  2018 sbin/
drwxr-xr-x 2 root root 4096 Oct 19  2018 sh/
drwxr-xr-x 5 root root 4096 Apr 11  2018 share/
drwxr-xr-x 2 root root 4096 Apr 11  2018 src/
[root@engraku sample]# 

コピーするファイル名を表示する

(-vオプション)を指定することにより、コピーしている進行状況がわかる。

サンプル

$ install -v -t /usr/local samlerun1.sh samlerun2.sh 

実行結果

[root@engraku sample]# install -v -t /usr/local samlerun1.sh samlerun2.sh 
‘samlerun1.sh’ -> ‘/usr/local/samlerun1.sh’
‘samlerun2.sh’ -> ‘/usr/local/samlerun2.sh’

[root@engraku sample]# ls -lF /usr/local
total 52
drwxr-xr-x 2 root root 4096 Apr 11  2018 bin/
drwxr-xr-x 2 root root 4096 Apr 11  2018 etc/
drwxr-xr-x 2 root root 4096 Apr 11  2018 games/
drwxr-xr-x 2 root root 4096 Apr 11  2018 include/
drwxr-xr-x 2 root root 4096 Apr 11  2018 lib/
drwxr-xr-x 2 root root 4096 Apr 11  2018 lib64/
drwxr-xr-x 2 root root 4096 Apr 11  2018 libexec/
-rwxr-xr-x 1 root root   12 Apr  9 17:48 samlerun1.sh*
-rwxr-xr-x 1 root root   12 Apr  9 17:48 samlerun2.sh*
drwxr-xr-x 2 root root 4096 Apr 11  2018 sbin/
drwxr-xr-x 2 root root 4096 Oct 19  2018 sh/
drwxr-xr-x 5 root root 4096 Apr 11  2018 share/
drwxr-xr-x 2 root root 4096 Apr 11  2018 src/
[root@engraku sample]#

所有者を変更してコピーする

(-oオプション)を使用することにより、コピー先の所有者を変更するしてコピーすることができる。

サンプル

$  install -o apache samlerun1.sh /usr/local/

実行結果

[root@engraku sample]# install -o apache samlerun1.sh /usr/local/

[root@engraku sample]# ls -lF /usr/local
total 48
drwxr-xr-x 2 root   root 4096 Apr 11  2018 bin/
drwxr-xr-x 2 root   root 4096 Apr 11  2018 etc/
drwxr-xr-x 2 root   root 4096 Apr 11  2018 games/
drwxr-xr-x 2 root   root 4096 Apr 11  2018 include/
drwxr-xr-x 2 root   root 4096 Apr 11  2018 lib/
drwxr-xr-x 2 root   root 4096 Apr 11  2018 lib64/
drwxr-xr-x 2 root   root 4096 Apr 11  2018 libexec/
-rwxr-xr-x 1 apache root   12 Apr  9 17:52 samlerun1.sh*
drwxr-xr-x 2 root   root 4096 Apr 11  2018 sbin/
drwxr-xr-x 2 root   root 4096 Oct 19  2018 sh/
drwxr-xr-x 5 root   root 4096 Apr 11  2018 share/
drwxr-xr-x 2 root   root 4096 Apr 11  2018 src/
[root@engraku sample]# 

グループを変更してコピーする

(-gオプション)を使用することにより、コピー先のグループを変更するしてコピーすることができる。

サンプル

$ install -g apache samlerun1.sh /usr/local/

実行結果

[root@engraku sample]# install -g apache samlerun1.sh /usr/local/
[root@engraku sample]# ls -lF /usr/local
total 48
drwxr-xr-x 2 root root   4096 Apr 11  2018 bin/
drwxr-xr-x 2 root root   4096 Apr 11  2018 etc/
drwxr-xr-x 2 root root   4096 Apr 11  2018 games/
drwxr-xr-x 2 root root   4096 Apr 11  2018 include/
drwxr-xr-x 2 root root   4096 Apr 11  2018 lib/
drwxr-xr-x 2 root root   4096 Apr 11  2018 lib64/
drwxr-xr-x 2 root root   4096 Apr 11  2018 libexec/
-rwxr-xr-x 1 root apache   12 Apr  9 17:53 samlerun1.sh*
drwxr-xr-x 2 root root   4096 Apr 11  2018 sbin/
drwxr-xr-x 2 root root   4096 Oct 19  2018 sh/
drwxr-xr-x 5 root root   4096 Apr 11  2018 share/
drwxr-xr-x 2 root root   4096 Apr 11  2018 src/
[root@engraku sample]# 

コピー先にファイルが存在する場合は、バックアップを作成する

(-bオプション)を使用することにより、コピー先の同名のファイルがすでに存在する場合は、ファイルの末尾に~(チルダ)が付けられバックアップされる。

サンプル

$ install -b samlerun1.sh /usr/local/

実行結果

[root@engraku sample]# ls -lF /usr/local
total 48
drwxr-xr-x 2 root root   4096 Apr 11  2018 bin/
drwxr-xr-x 2 root root   4096 Apr 11  2018 etc/
drwxr-xr-x 2 root root   4096 Apr 11  2018 games/
drwxr-xr-x 2 root root   4096 Apr 11  2018 include/
drwxr-xr-x 2 root root   4096 Apr 11  2018 lib/
drwxr-xr-x 2 root root   4096 Apr 11  2018 lib64/
drwxr-xr-x 2 root root   4096 Apr 11  2018 libexec/
-rwxr-xr-x 1 root apache   12 Apr  9 17:53 samlerun1.sh*
drwxr-xr-x 2 root root   4096 Apr 11  2018 sbin/
drwxr-xr-x 2 root root   4096 Oct 19  2018 sh/
drwxr-xr-x 5 root root   4096 Apr 11  2018 share/
drwxr-xr-x 2 root root   4096 Apr 11  2018 src/

[root@engraku sample]# install -b samlerun1.sh /usr/local/
[root@engraku sample]# ls -lF /usr/local
total 52
drwxr-xr-x 2 root root   4096 Apr 11  2018 bin/
drwxr-xr-x 2 root root   4096 Apr 11  2018 etc/
drwxr-xr-x 2 root root   4096 Apr 11  2018 games/
drwxr-xr-x 2 root root   4096 Apr 11  2018 include/
drwxr-xr-x 2 root root   4096 Apr 11  2018 lib/
drwxr-xr-x 2 root root   4096 Apr 11  2018 lib64/
drwxr-xr-x 2 root root   4096 Apr 11  2018 libexec/
-rwxr-xr-x 1 root root     12 Apr  9 17:58 samlerun1.sh*
-rwxr-xr-x 1 root apache   12 Apr  9 17:53 samlerun1.sh~*
drwxr-xr-x 2 root root   4096 Apr 11  2018 sbin/
drwxr-xr-x 2 root root   4096 Oct 19  2018 sh/
drwxr-xr-x 5 root root   4096 Apr 11  2018 share/
drwxr-xr-x 2 root root   4096 Apr 11  2018 src/
[root@engraku sample]# 

コピー元のタイムスタンプをコピー先と同じにする

(-pオプション)を使用することにより、コピー元と同じタイムスタンプにしてにコピーをする。最後にビルドした時間をコピー先に引き継ぐ場合やログの最後の更新時間を維持したままコピーする場合に使用できます。

サンプル

$ install -p samlerun1.sh /usr/local/

実行結果

[root@engraku sample]# ls -lF
total 8
-rw-r--r-- 1 root root 12 Apr  9 15:48 samlerun1.sh
-rw-r--r-- 1 root root 12 Apr  9 17:34 samlerun2.sh

[root@engraku sample]# install -p samlerun1.sh /usr/local/

[root@engraku sample]# ls -lF /usr/local
total 48
drwxr-xr-x 2 root root 4096 Apr 11  2018 bin/
drwxr-xr-x 2 root root 4096 Apr 11  2018 etc/
drwxr-xr-x 2 root root 4096 Apr 11  2018 games/
drwxr-xr-x 2 root root 4096 Apr 11  2018 include/
drwxr-xr-x 2 root root 4096 Apr 11  2018 lib/
drwxr-xr-x 2 root root 4096 Apr 11  2018 lib64/
drwxr-xr-x 2 root root 4096 Apr 11  2018 libexec/
-rwxr-xr-x 1 root root   12 Apr  9 15:48 samlerun1.sh*
drwxr-xr-x 2 root root 4096 Apr 11  2018 sbin/
drwxr-xr-x 2 root root 4096 Oct 19  2018 sh/
drwxr-xr-x 5 root root 4096 Apr 11  2018 share/
drwxr-xr-x 2 root root 4096 Apr 11  2018 src/
[root@engraku sample]# 

コピー元とコピー先が比較して同じであればコピーしない

(-Cオプション)を使用することにより、コピー元とコピー先を比較し同一であればコピーをしない。

サンプル

sample2.shがコピー元とコピー先が異なるためコピーされる。同一のものはコピーされない。

$ install -C samlerun1.sh samlerun2.sh  /usr/local/

実行結果

[root@engraku sample]# cat samlerun1.sh 
#! /bin/sh

[root@engraku sample]# cat samlerun2.sh 


[root@engraku sample]# cat /usr/local/samlerun1.sh 
#! /bin/sh

[root@engraku sample]# cat /usr/local/samlerun2.sh 
#! /bin/sh

[root@engraku sample]# install -C samlerun1.sh samlerun2.sh  /usr/local/
[root@engraku sample]# cat /usr/local/samlerun2.sh 


[root@engraku sample]# cat /usr/local/samlerun1.sh 
#! /bin/sh

[root@engraku sample]#