ルートファイルを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
)を使用して、1つのルートファイルと1つの非ルートファイルをvimdiffする方法はありますか?
そのsudoeditエラーメッセージに関連して役立つ場合があります。
sudoedit:...書き込み可能なディレクトリ内のファイルの編集は許可されていません
Sudo visudo
を使用してsudoersファイルを変更してみて、次の行を追加してください。
Defaults !sudoedit_checkdir
もっと ここ 。
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
sudoedit
はすべてのSudo以外の引数のファイル名を処理するため、ラッパースクリプトを使用できます。
$ 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