************************************************
Yoshiaki Kawabe / 川部 喜朗 <k...@jgi.co.jp>
(株)地球科学総合研究所
************************************************
In article <BD2D934D.57C0%k...@momo.so-net.ne.jp>, "Kawabe, Y." <k...@momo.so-net.ne.jp> writes
> Solarisでリードオンリー属性のファイルをviで編集後、!wで強制上書きしようとして
> も「permission denied」エラーで、上書きできないことに気づきました。
本当に権限がなければ上書きできないので、そういうことなんじゃないかと。
owner が root だったとかさ。
そういう時は、/tmp に書いてcpするのが普通かな。
(で、passwd のジャンクが/tmpに残ったりする...)
---
Shinji KONO @ Information Engineering, University of the Ryukyus
河野真治 @ 琉球大学工学部情報工学科
> 本当に権限がなければ上書きできないので、そういうことなんじゃないかと。
単に vi と nvi(などの viクローン)の仕様の差でしょう。
nvi/common/exf.c の file_write() の当該部分には、
/*
* If the user owns the file but does not
* have write permission on it, grant it
* automatically for the duration of the
* opening of the file, if possible.
*/
などというコメントがあり、chmod して write して chmod し戻してます。
オリジナルはそんなことしてくれないからエラーになる。
--
池田研二 稲城駅前在住
Kawabe, Y. wrote:
> Solarisでリードオンリー属性のファイルをviで編集後、!wで強制上書きしようとして
> も「permission denied」エラーで、上書きできないことに気づきました。普通はでき
> るもんだと思ってたんですが、そうじゃないんでしょうか?
できないのが普通です。
viewで起動したときなどviをreadonlyモードで動かしているときには、
うっかり、ZZなどでファイルを書き換えないように、書き込みコマンドを
受け付けないようになっています。
:w!
は、書き込みを行いますが、実際に成功するかどうかはOS側の問題です。
chmodして勝手に書くのは、改悪だと思うがなぁ。便利かもしれんが。
齊藤明紀 saitoh at kankyo-u . ac . jp
ownerは実行者(私)ですので、権限はあります。
in article 86wu0on...@poe.mob.or.jp, IKEDA Kenji at noro...@mob.or.jp
wrote on 04.7.28 09:20 PM:
> 単に vi と nvi(などの viクローン)の仕様の差でしょう。
> nvi/common/exf.c の file_write() の当該部分には、
>
> /*
> * If the user owns the file but does not
> * have write permission on it, grant it
> * automatically for the duration of the
> * opening of the file, if possible.
> */
>
> などというコメントがあり、chmod して write して chmod し戻してます。
> オリジナルはそんなことしてくれないからエラーになる。
「そんなことしてくれない」のであれば、「w」コマンドと「w!」コマンドの違いって
何なのでしょう?
in article ce8ec1$8gv$1...@caraway.media.kyoto-u.ac.jp, SAITOH Akinori at
sai...@kankyo-u.ac.jp.nospam wrote on 04.7.28 11:48 PM:
> viewで起動したときなどviをreadonlyモードで動かしているときには、
> うっかり、ZZなどでファイルを書き換えないように、書き込みコマンドを
> 受け付けないようになっています。
「ZZ」「w」「wq」など、普段書き込みに使用するコマンドで書き込めないのは当然で
すが、そのために「w!」があるんじゃないんでしょうか?
> :w!
> は、書き込みを行いますが、実際に成功するかどうかはOS側の問題です。
Solarisのviのmanページでは、
:w!CR forced write, if permission originally not valid
とあります。普通に読めば、これはreadonlyであっても強制的に書き込む、と考えら
れますから、内部でchmodするしかないと思うんですけど。
ちなみに、rootであれば、w!は問題なく強制書き込みできます。
ーー
川部
ですよね。
> :w!
> は、書き込みを行いますが、実際に成功するかどうかはOS側の問題です。
>
> chmodして勝手に書くのは、改悪だと思うがなぁ。便利かもしれんが。
ふつーは「^Zで中断して、chmodしてfgしてw!」じゃないんですか。
--
___ わしは、山吹色のかすてーらが大好きでのぅ
[[o o]] ふぉっふぉっふぉ
'J' 森下 お代官様 MaNMOS 英夫@ステラクラフト
PGP Finger = CD EA D5 A8 AD B2 FE 7D 02 74 87 52 7C B7 39 37
> 「そんなことしてくれない」のであれば、「w」コマンドと「w!」コマンドの違いって
> 何なのでしょう?
w だと、編集中のファイル(もちろん write 権限のある)に上書きするか、
存在しないファイルを新規に作って書くことしかできない。
w!だと、存在してる編集中でないファイル(もちろん write 権限のある)にも
上書きできる。
つうんじゃなかったでしたっけ?
ZZ で read only になったら、suspend して chmod +w してから戻って wq! で
書き直す癖が付いているので、たぶんこうだったんではないかと。
> :w!CR forced write, if permission originally not valid
>
> とあります。普通に読めば、これはreadonlyであっても強制的に書き込む、と考えら
> れますから、内部でchmodするしかないと思うんですけど。
どこにも、chmod するとは書いてない。!付きだと、permission のチェックを
せずに書きにいくってだけ。
readonly かどうかは、ファイルを読み込むときに記録されてるので、
後から chmod +w しても、単なる w ではチェックにひっかかってしまう。
w! はそういうチェックせずに書きたい時に使う。
--
池田研二 稲城駅前在住
「:w!CR forced write, if permission originally not valid」
この「originally」とは「読み込み時」のことなんですね。つまり、「w!」は読み込
み時のpermissionのチェックをせず書き込もうとするだけで、読み込んでから「w!」
するまでの間に、permissionが書き込み可能に変化していた場合のみ有効な訳ですね。
あるいは、permission設定に関わらず書き込めるスーパユーザなら問題ないと。
結局通常のユーザの場合は、皆さんがされているように、「^Z」→「chmod +w」→「fg」
を過程を踏まないと「w!」は役に立たないわけで、今風のviクローンではそれを「w!」
に含めちゃっている訳ですな。「改善」なのか「改悪」なのかどうかはよくわかりま
せんが、確かにこれ以外に使える状況が思いつきませんね。
ーー
In article <86n01jr...@poe.mob.or.jp>
IKEDA Kenji <noro...@mob.or.jp> writes:
> w だと、編集中のファイル(もちろん write 権限のある)に上書きするか、
> 存在しないファイルを新規に作って書くことしかできない。
> w!だと、存在してる編集中でないファイル(もちろん write 権限のある)にも
> 上書きできる。
> ZZ で read only になったら、suspend して chmod +w してから戻って wq! で
> 書き直す癖が付いているので、たぶんこうだったんではないかと。
root だと chmod なくても w! で書けます。root なら一般的にモー
ドが無視できるので。
ただ、root でも w モードがないファイルを w や ZZ で保存しよ
うとすると失敗します。root でも vi としては、起動時に
readonly として認識しているのでしょう。
\\ 新城 靖 (しんじょう やすし) \\
\\ 筑波大学 電子・情報 \\
Kawabe, Y. wrote:
> ownerは実行者(私)ですので、権限はあります。
それは、chmodする権限があるのであって、write permissionは
出てないですよね。
> 「そんなことしてくれない」のであれば、「w」コマンドと「w!」コマンドの違いって
> 何なのでしょう?
私の記事をよく読んでください。
viのバッファ(とはいわないが)のモードにreadonlyがあるのです。
ファイルのモードとは別に。それをoverrideするかどうか。
> in article ce8ec1$8gv$1...@caraway.media.kyoto-u.ac.jp, SAITOH Akinori at
> sai...@kankyo-u.ac.jp.nospam wrote on 04.7.28 11:48 PM:
> :w!CR forced write, if permission originally not valid
> とあります。普通に読めば、これはreadonlyであっても強制的に書き込む、と考えら
> れますから、内部でchmodするしかないと思うんですけど。
そうですよ。viのreadonlyモードを無視して、ファイルの書き込みを
行います。あとはOS(ファイルパーミッション)がそれを許すかどうかの
問題ですが。
書き込み権のあるファイルを、readonlyモードで viで編集/閲覧することが
あるということを理解してください。
齊藤明紀 saitoh at kankyo-u