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]#