ルートファイルが必要な場合は、vimdiff
次のエイリアスを使用します。この提案。
alias sudovimdiff='SUDO_EDITOR=vimdiff sudoedit'
その後、次のコマンドを使用できます。
$ sudovimdiff /root/a /root/b
しかし、私のユーザーがファイルの1つを書き込めば、コマンドは失敗します。
$ sudovimdiff /root/a /tmp/b
sudoedit: /tmp/b: editing files in a writable directory is not permitted
sudoedit
自分の環境設定(つまり)を使用してルートファイルと非ルートファイルをvimdiffする方法はありますか?
答え1
役に立つかもしれないsudoeditエラーメッセージに関連して:
sudoedit:...書き込み可能なディレクトリのファイル編集を許可しません。
sudo visudo
次の行を追加してsudoersファイルを修正してみてください。
Defaults !sudoedit_checkdir
もっとここ。
答え2
~からman sudo
、説明セクション-e
(別名sudoedit
):
To help prevent the editing of unauthorized files, the
following restrictions are enforced unless explicitly allowed
by the security policy:
· Symbolic links may not be edited (version 1.8.15 and
higher).
· Symbolic links along the path to be edited are not
followed when the parent directory is writable by the
invoking user unless that user is root (version 1.8.16
and higher).
· Files located in a directory that is writable by the
invoking user may not be edited unless that user is root
(version 1.8.16 and higher).
したがって、次のいずれかを実行してください。
- 私たちは
sudoedit
それをルートと呼びますが、これは目的を崩したり、 ユーザーが編集できない新しいディレクトリにユーザーのファイルをコピーします。
mkdir /tmp/foo cp /tmp/b /tmp/foo chmod a-w /tmp/foo sudoedit /root/a /tmp/foo/b
ルートファイルを編集して内部で比較します。
sudoedit /root/a # in Vim :vert diffsplit /tmp/b
sudo以外のすべてのパラメータファイル名が処理されるため、
sudoedit
ラッパースクリプトを使用できます。$ cat foo.sh #! /bin/sh exec vimdiff "$@" "$DIFF_FILE" $ SUDO_EDITOR ="$PWD/foo.sh" DIFF_FILE="$PWD/.zshrc" sudoedit /etc/zsh/zshrc [sudo] password for muru: 2 files to edit sudoedit: /etc/zsh/zshrc unchanged