バックアップのスクリプトをcronで毎日実行しているがバックアップできていないという相談を受けて調べたときのメモ。
結論から言うと、
標準で設定されているaliasには気をつけましょう、ということとスクリプトに記載するコマンドはフルパスで記載しておくのが無難である、ということです。
開発の人から言わせると当たり前なのかもしれないが、インフラ周り(主に基盤しかみない人間が書いたのでそこまで確認できていなかったということにしときましょう。。。
確認したこと
実際にバックアップするコマンドはCPコマンドを使用していたのでコンソールでコマンドを実行してみる。そもそもcpじゃなくてtarだろ、というつっこみは無しで。
すると、上書きメッセージがでてきた。
1 2 |
cp -pr /usr/local/hoge /var/backup cp: `/var/backup/hoge/test.txt' を上書きしますか? |
なるほど、では強制でコピーできるオプションはないかと調べてみるとありました。
これでやってみよう。
1 2 |
cp -fpr /usr/local/hoge /var/backup cp: `/var/backup/hoge/test.txt' を上書きしますか? |
なぜ??
普段からlsコマンドを打つときに ll と打つのでもしかしてalias?と思って確認してみたところ、ありました。
1 2 |
alias | grep cp alias cp='cp -i' |
-i,--interactive 上書きされるファイルがあるときは問い合わせする
気をつけるべきは、-f と -i の両方がある場合は -i が優先される( -f を付けても意味がない)ということ。
ちなみに、aliasの設定は、以下のどちらかで回避できます。
- コマンドをフルパスで指定する
- コマンドの前に \ をつける(\cp -pr /hoge /foo)
フルパスは、which コマンドで確認できます。aliasも表示されるので便利ですね。
1 2 3 |
which cp alias cp='cp -i' /usr/bin/cp |
補足
標準で設定されているaliasはaliasコマンドで確認できます。
※以下はCentOS7.2で確認
1 2 3 4 5 6 7 8 9 10 11 |
alias alias cp='cp -i' alias egrep='egrep --color=auto' alias fgrep='fgrep --color=auto' alias grep='grep --color=auto' alias l.='ls -d .* --color=auto' alias ll='ls -l --color=auto' alias ls='ls --color=auto' alias mv='mv -i' alias rm='rm -i' alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde' |