社内se × プログラマ × ビッグデータ

プログラミングなどITに興味があります。

なぜ、sudo rm でワイルドカード指定できないのか

sudo rm でワイルドカード指定したのに動かない。

$ sudo rm /var/log/elasticsearch/elasticsearch.*.log
rm: cannot remove `/var/log/elasticsearch/elasticsearch*log': No such file or directory

ワイルドカード拡張は、rmではなくシェルによって行われる。
また、シェルにはsudo権限はなく、rmのみにある。
したがって、シェルには/var/log/elasticsearch/を読み取る権限がないため
展開は行われず、rmはファイル(ワイルドカードではない)/var/log/elasticsearch/*(存在しない)を削除しようとする。

これを回避するには、rmを実行するsudo権限を持つシェルが必要となる。

sudo sh -c 'rm /var/log/elasticsearch/elasticsearch*.log'