2009年4月5日日曜日

visdo, vim(root), view

sudoコマンドを使えるように設定

(ubuntuはsudoで全て行うポリシーなのでデフォルトで設定済みかと思うけど)
# visudo
...
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
okap    ALL=(ALL)       ALL
...

ちなみに、visudoは/etc/sudoersをviで編集しているだけだが、排他のため/etc/sudoers.tmpを編集している。vipwやvigrも同様に排他をかけている。

rootユーザでもvimを

Fedora(というよりRedHat)ではrootユーザではviがvimにリンクされていない。
「vim」と打てば良いだけだが意外と面倒である。(rootでvimを使うときって大概設定ファイルをいじる時だからカラー表示してくれるだけでも違う!)

そこで、rootでもviでvimが起動出来るようにする。
# vi /etc/profile.d/vim.sh
if [ -n "$BASH_VERSION" -o -n "$KSH_VERSION" -o -n "$ZSH_VERSION" ]; then
  [ -x //usr/bin/id ] || return
  [ `//usr/bin/id -u` -le 100 ] && return
  # for bash and zsh, only if no alias is already set
  alias vi >/dev/null 2>&1 || alias vi=vim
fi

このスクリプトを見ると、uidが100以下の場合は以降のaliasが設定されない。
rootは当然uid=0なので、その判定をコメントアウトしてしまう。
  [ `//usr/bin/id -u` -le 100 ] && return
                    ↓
# [ `//usr/bin/id -u` -le 100 ] && return

これで、この設定を読み込むか新しいセッションではrootでviとしてもvimが起動するようになる。

viewでもvimに

viewとは "vi -R" つまりRead-onlyでファイルを開くコマンドである。"view:眺める(Read-only)"と"vi"をかけているのだと思う(笑
Vimerが言うのも何だがvimでファイルを閲覧中にキーを触って(vimのコマンド・モードが幸いし)変更してしまうことがる。なのでソースやスクリプトを見るときはviewを使用している。
でも上記同様Fedoraでは、viewは一般ユーザでもviにリンクされているのでviewとしてもカラー表示されない。
# which view
/bin/view
# ll `!!`
ll `which view`
lrwxrwxrwx 1 root root 2 2009-03-23 17:54 /bin/view -> vi

なので、vimにリンクを張り直す。
# rm /bin/view
rm: remove シンボリックリンク `/bin/view'? y
# which vim
/usr/bin/vim
# ln -s /usr/bin/vim /bin/view
# ll `which view`
lrwxrwxrwx 1 root root 12 2009-04-05 22:19 /bin/view -> /usr/bin/vim

これで、新しいセッションではviewでもvimが起動するようになる。

ちなみにこのリンクでコマンド名を変える手法はbusyboxのに似ている。
lsなら、"busybox ls"と引数指定でも実行出来るけど、/bin/busybox を /bin/ls にリンクを張っておくと、lsで実行出来るようになる。argv[0]で判別しているのだと思う。



0 件のコメント:

コメントを投稿