ひよっこの学習記録

【Linux】find: failed to restore initial working directory: Permission deniedのエラー原因と解決策 

本日は、かなり久々ですがエンジニアらしく学んだことのアウトプットを書いていこうと思います^^

業務でShellを書いていた時に、中々調べてもわからず英語のサイトなどを翻訳してみながら解決してわかった事を纏めていきます!

 

今回、自分がはまってしまったエラーは、findコマンドを実行した際の次のエラーメッセージです・・・

『find: failed to restore initial working directory: Permission denied』←がcronのログに出力されていました。

 

 

このエラーを解決するためにgoogle先生をかなり調べたので、同じく困っている人の為少しでもなれれば幸いです!

意外とlinux関係は情報が埋もれていて検索に引っかかってくれないので、今後そこら辺を綺麗にまとめていければ良いなと思います。

↓今回参考にした記事は以下の記事

https://hkzo.org/2010/10/find/

https://unix.stackexchange.com/questions/474741/find-failed-to-restore-initial-working-directory-permission-denied

https://www.experts-exchange.com/questions/26553499/Linux-find-cannot-stat-current-directory-Permission-denied.html

スポンサーリンク




今回やろうとしていた事

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.txt

結果: 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.txt

sudo find /filearea -type f > /home/put/putarray.txt

で解決します。

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ですが、少しずつ知識を増やして行こうと思います。

この記事がもし同じ所で躓いていた人の役に少しでも立てれば幸いです^^

スポンサーリンク




初心者がProgateでプログラミングGo(golang)の入門を学んだ感想!

こんにちは!

ひよっこエンジニアです。

 

先日、先週8月7日にビズリーチが『プログラミング言語別年収ランキング2018』を発表して、
その中で第一位を獲得したプログラミング言語『Go』が話題になっていますね^^

 

コンテナとして有名なDockerにも使われているプログラミング言語『Go』ですが、実際どんなコーディングを行うのか

やってみたいなと思い、『Go』初心者ですが、ちょっくらさわりだけでも勉強してみようかな~と思いました!

 

修了時間2h30mと書いてありましたが全部で1h30m位で終わったので、特に他の言語が既に書ける人はあまり時間はかからないと思います。

 

また、年収ランキング1番って事はかなり難しいのかな…と少しびびりながらでしたが、基本的な所はjavaとかとそう変わりなかったので

安心しました。

 

今のところ、プログラミングスクールなどで『Go』を扱っている所は無さそうという事で、皆さんも
オンラインの学習ツールなどを使って勉強すると思うのでレベル感など少しでも参考にして頂ければ幸いです^^

ProgateのGo(golang)のコース内容の詳細は?

ProgateのGo(golang)のコースはいつから後悔されているのかわかりませんが、有料コースはまだ開設されていないので

無料の基本的なコースのみとなっています。

この無料のコースは4章に分かれていて、基本的な数値の計算、変数の使い方、条件文の書き方を勉強することができます!

ProgateのGoコースの第一章:Goに触れてみよう

  • Goに触れてみよう

ProgateのGoコースの第二章:Goの基礎を学ぼう

  • GoのFormat
  • Goの基本
  • 数値
  • 数値の計算
  • 文字列の連結

ProgateのGoコースの第三章:変数を使ってみよう

  • 変数の基本
  • 変数の更新
  • 色々な変数の作り方
  • 変数とエラー
  • 変数と自己代入

ProgateのGoコースの第四章:真偽値と条件分岐

  • if文を使ってみよう
  • 真偽値
  • else
  • else if
  • 条件式を組み合わせよう
  • switch

以上のようなコースとなっています。(2018/8/13時点)

気になるは、コースのレベルだと思うので次を読んでみてください!

スポンサーリンク




ProgateのGo(golang)のコース内容のレベルは高い?

ProgateのGo(golang)のコースのレベルは高いのか?というの質問ですが、
結論から言うと全然難しくないです!

冒頭にも述べましたが、他の言語を習得している方に取っては簡単すぎる内容かもしれないです。

ただ、少し構文が異なったりするので、目を通す感じでパパッと終わらのが経験者は良いでしょう!

 

Goが初めてのプログラミングだよという方も前から順番に解説読んで行けば問題なくできる内容となっているので

気負う事はないかと思います^^;

という事で早速やってみましょう!

スポンサーリンク




ProgateでGo(golang)を学んでみた感想とまとめ

今回、Progateを使うことが初めてでしたが非常に分かりやすく丁寧な解説でびっくりしました^^;

一番初めにプログラミングってどんなものか勉強したいよって人にはProgateをおすすめしたいなと思います!

 

ProgateのGo(golang)のコースの感想としてはちょっと簡単すぎたなといった印象でした><

ただ、他の言語と同様に有料コースで難しいコースが今後出るだろうと思うのでそちらが開設したら

受講してみようと思います^^

ProgateのGo(golang)のコースを受けて知ったGoとJavaの基本的な書き方の異なる部分

if文の条件で否定の時の書き方が違う?

Javaの場合だと、

if (time !=18){}

だと思いますが、Goだと上記の書き方だとエラーになってしまいました^^;

Javaより変数宣言が楽!

上の画像を見てもらってもわかるようにGoの場合、

time :=9で変数宣言と初期化ができてしまいます。

Javaの場合、

int time := 9;

といった形になりますよね^^;

 

以上、少しでしたが、私がProgateのGo(golang)のコースを受けて知ったGoとJavaの基本的な書き方の異なる部分でした!

 

最後まで読んで頂きありがとうございました^^

スポンサーリンク