本日は、かなり久々ですがエンジニアらしく学んだことのアウトプットを書いていこうと思います^^
業務でShellを書いていた時に、中々調べてもわからず英語のサイトなどを翻訳してみながら解決してわかった事を纏めていきます!
今回、自分がはまってしまったエラーは、findコマンドを実行した際の次のエラーメッセージです・・・
『find: failed to restore initial working directory: Permission denied』←がcronのログに出力されていました。
このエラーを解決するためにgoogle先生をかなり調べたので、同じく困っている人の為少しでもなれれば幸いです!
意外とlinux関係は情報が埋もれていて検索に引っかかってくれないので、今後そこら辺を綺麗にまとめていければ良いなと思います。
↓今回参考にした記事は以下の記事
https://hkzo.org/2010/10/find/
スポンサーリンク
Contents
今回やろうとしていた事
usrというユーザでログイン後、usrのcrontab -eで puthoge.shを動かす。
cronの中身:***** /program/main/puthoge.sh >> puthoge.log
実行ディレクトリ:/home/usr ←userでログインしてcronを動かしたときの実行ディレクトリになる。
puthoge.shの中の実行コマンド:sudo -u put find /filearea -type f > /home/put/putarray.
結果: puthoge.logに『find: failed to restore initial working directory: Permission denied』
が出力された。
findで検索は問題なく出来ていた事とputarray.txtにもリダイレクトもできていたので、それが逆に解決を遅らせる結果となってしまいました。(ただ、頭が回らなかっただけ)
スポンサーリンク
find: failed to restore initial working directory: Permission deniedのエラーの解決策
早速、解決策からですが、
sudo -u put find /filearea -type f > /home/put/putarray.
↓
sudo find /filearea -type f > /home/put/putarray.
で解決します。
sudo find に変えることで、rootユーザでの実行となりますがこれでエラーは出なくなります。
ただ、何故このようなエラーが初めは出てきてしまっていたのか?原因を解説していきます。
find: failed to restore initial working directory: Permission deniedのエラーの原因
linuxのfindの仕様と言っても良いのかもしれませんが、
findを実行するユーザーが、findを実行するディレクトリに書き込み権限を所有していないと『find: failed to restore initial working directory: Permission denied』のエラーが出てしまうと言うことです。
つまり、今回エラーになってしまった理由は、sudo -u hoge find で実行ユーザーがusrからhogeに変わっていますが、hogeはこの時実行ディレクトリである
/home/usrに対して書き込み権限が無いのが原因だったということになります。
まとめ
findでファイルを参照しに行くディレクトリが実行ユーザが違い権限が無い場合、sudo -u でユーザー変更を行うと思いますが、
その際は、ユーザ変更した後のユーザが、実行ディレクトリに書き込み権限があるかが重要になってくるので意識した方が良いです!
仕事でも少ししか触らないLinuxですが、少しずつ知識を増やして行こうと思います。
この記事がもし同じ所で躓いていた人の役に少しでも立てれば幸いです^^
スポンサーリンク