ディレクトリを '/home/corey/scripts' に変更できません: 権限が拒否されました。

ディレクトリを '/home/corey/scripts' に変更できません: 権限が拒否されました。

エラーメッセージが表示されます...

could not change directory to "/home/corey/scripts": Permission denied

...次のスクリプトを実行すると...

#!/bin/bash
sudo -u postgres psql < setup_dev_db.sql
read -rsp $'Press any key to continue...\n' -n 1 key

... setup_dev_db.sqlの内容は問題なく実行されますが、エラーが発生したため面倒です。

私はそれを削除できますか?

ベストアンサー1

Postgresは、クライアントからのすべてのクエリとコマンドが保存される$HOME/.psql_historyファイルを生成しようとします。psql何か別の作業をしたいのかもしれませんが$HOME、他の隠されたファイルの形ではそのような証拠も見えません。対話的に使用しないと、実際には履歴ファイルは生成されませんが、実際にはpsqlそうではありません。

私は同じ問題があり、これを見つけましたが、許可された答えは私に受け入れられませんでした。スクリプトで実行されているディレクトリにクエリ追跡を残すためにpostgres権限を与えてはいけません!

@Corey、あなたのコメントで言及した解決策(cd /tmp電話する前sudo...)はおそらく最高です。psqlこのファイルは作成されていません/tmp(権限のないユーザーがファイルを読み取ることができるため、意図的なものであると確信しています)。

私が考えることができる2つの異なるソリューションがあります。

  1. コマンドに追加してpsqlログインシェルで実行-i

    sudo -i -u postgres psql < setup_dev_db.sql
    

    これにより、リストされたディレクトリに$HOME設定されます。 Ubuntuの場合はこれです。ただし、コマンドを入力するため、ファイルは生成されません。ただし、Interactiveを使用している場合は、コンピュータ権限を持つ他の人は誰でもpostgresHOME/etc/passwd/var/lib/postgres.psql_historypsqlsudo〜するコマンド履歴にアクセスできます。

    この状況でログインシェルを実行すると、他の否定的な結果があるかどうかはわかりません。

  2. psql権限の低いユーザーとして実行します。

    $ psql dev_db -hlocalhost corey_dev -W < setup_dev_db.sql
    

    setup_dev_db.sqlPostgresユーザーの作成をスクリプトに任せ、まだユーザーがいないために問題が発生した場合は、createuserまず次のようにスクリプトにコマンドを追加するだけです。

    $ sudo -u postgres createuser corey_dev -P
    

    おそらく...

    $ sudo -u postgres createdb dev_db "Dev database"
    

注:psqlクライアントをインタラクティブに使用する場合could not change directory to "/home/corey/scripts": Permission denied(ここではあなたではありません)、message****のようなメッセージが表示されたら、psql はい/var/lib/postgres/.psql_history(またはどこにいても)手紙を書くでしょう$HOME!インタラクティブを使用しているときにこの警告を表示した場合は、psql詳しく確認してください。隠し履歴ファイルを見つけることができます。

おすすめ記事