Google グループは Usenet の新規の投稿と購読のサポートを終了しました。過去のコンテンツは引き続き閲覧できます。
表示しない

hard link & mv (fileutils-4.1)

閲覧: 0 回
最初の未読メッセージにスキップ

yok...@yynet.tama.tokyo.jp

未読、
2003/08/13 20:48:262003/08/13
To:
よこた です。

fileutils-4.1 の mv を使っています。(Debian GNU/Linux woody)

% mv --version
mv (fileutils) 4.1
Written by Mike Parker, David MacKenzie, and Jim Meyering.
<snip>

ハードリンクのファイルの扱いなんですけど、

% mkdir tmp
% touch A tmp/A tmp/B
% ln A B
% ls -lRi
.:
total 4
2232056 -rw-r--r-- 2 yokota yokota 0 Aug 14 09:37 A
2232056 -rw-r--r-- 2 yokota yokota 0 Aug 14 09:37 B
2232055 drwxr-xr-x 2 yokota yokota 4096 Aug 14 09:37 tmp

./tmp:
total 0
2232057 -rw-r--r-- 1 yokota yokota 0 Aug 14 09:37 A
2232058 -rw-r--r-- 1 yokota yokota 0 Aug 14 09:37 B

ここで、A と B を tmp/ に移動しようとすると、

% mv -f A B tmp
mv: cannot create hard link `tmp/B' to `tmp/A': File exists

怒られちゃうんですけど、そういうモンなんでしょうか?
fileutils の以前のバージョンは怒らずにできていたと思うんだけど ...。

IKEDA Kenji

未読、
2003/08/13 21:20:392003/08/13
To:
In article <0308140948...@sapphire.yynet.tama.tokyo.jp>,
yok...@yynet.tama.tokyo.jp wrote:

> 怒られちゃうんですけど、そういうモンなんでしょうか?

* `mv DIR EXISTING-FILE' no longer removes EXISTING-FILE. Now it gets an error
as POSIX says it must.

なんてのを、http://www.geocrawler.com/archives/3/323/2001/4/0/5665735/
で見つけました。きっとアーカイブの CHANGES とかにも入っているのでは?

まぁ、私の知ってる範囲だと、上書きする方が普通なんで気持ち悪いですが。

--
池田研二 稲城駅前在住

IKEDA Kenji

未読、
2003/08/13 21:22:592003/08/13
To:
In article <867k5hk...@poe.mob.or.jp>,
IKEDA Kenji <noro...@mob.or.jp> wrote:

> * `mv DIR EXISTING-FILE' no longer removes EXISTING-FILE. Now it gets an error
> as POSIX says it must.

> なんてのを、http://www.geocrawler.com/archives/3/323/2001/4/0/5665735/
> で見つけました。きっとアーカイブの CHANGES とかにも入っているのでは?

失礼、source は DIR じゃなかったですね。ううむ。

--
池田研二 稲城駅前在住

MAEDA Atusi

未読、
2003/08/14 0:35:332003/08/14
To:
yok...@yynet.tama.tokyo.jp writes:

> ここで、A と B を tmp/ に移動しようとすると、
>
> % mv -f A B tmp
> mv: cannot create hard link `tmp/B' to `tmp/A': File exists
>
> 怒られちゃうんですけど、そういうモンなんでしょうか?
> fileutils の以前のバージョンは怒らずにできていたと思うんだけど ...。

「すでに目的のディレクトリにmoveしたファイルと(inodeが)同じファイルを
moveするときは,単にhard linkを作る」という最適化(?)をしてますね.

rename("A", "tmp/A");
rename("B", "tmp/B");
でなくて,
rename("A", "tmp/A");
link("tmp/A", "tmp/B");
unlink("B");
の順でやろうとして,linkで失敗しています.

レポートしてあげると良いんじゃないかな.

4.0だと,ちょっと違う結果になりますが,やっぱり怒られます.

$ mv --version
mv (GNU fileutils) 4.0
$ touch A tmp/A tmp/B
$ ln A B
$ ls -li {tmp/,}[AB]
373251 -rw-r--r-- 2 mad users 0 Aug 14 11:01 A
373251 -rw-r--r-- 2 mad users 0 Aug 14 11:01 B
459047 -rw-r--r-- 1 mad users 0 Aug 14 11:01 tmp/A
459211 -rw-r--r-- 1 mad users 0 Aug 14 11:01 tmp/B
$ mv -f A B tmp
mv: tmp/B: No such file or directory
$ ls -li {tmp/,}[AB]
373251 -rw-r--r-- 2 mad users 0 Aug 14 11:01 B
373251 -rw-r--r-- 2 mad users 0 Aug 14 11:01 tmp/A

straceしてみると,
unlink("tmp/A");
rename("A", "tmp/A");
unlink("tmp/B");
link("tmp/B", "tmp/B");
とかやってます.何なんだ.

前田敦司

yok...@yynet.tama.tokyo.jp

未読、
2003/08/14 4:37:332003/08/14
To:
よこた です。

<m3smo4h...@maedapc.cc.tsukuba.ac.jp>の記事において
ma...@cc.tsukuba.ac.jpさんは書きました。

>> > % mv -f A B tmp
>> > mv: cannot create hard link `tmp/B' to `tmp/A': File exists
>> >
>> > 怒られちゃうんですけど、そういうモンなんでしょうか?
>> > fileutils の以前のバージョンは怒らずにできていたと思うんだけど ...。
>>
>> 「すでに目的のディレクトリにmoveしたファイルと(inodeが)同じファイルを
>> moveするときは,単にhard linkを作る」という最適化(?)をしてますね.

<snip>
>> レポートしてあげると良いんじゃないかな.

今日 bug-fileutils@ にレポート出してみました。けど、
出したあとに www.gnu.org を見て知ったんですけど、fileutils は
coreutils に含まれるようになったんですね。

で coreutils-5.0 の mv を使ってみたところ、問題なくできました。

strace で見ると、

rename("A", "tmp/A") = 0
link("tmp/A", "tmp/B") = -1 EEXIST (File exists)
unlink("tmp/B") = 0
link("tmp/A", "tmp/B") = 0
unlink("B") = 0

だそうで。

## あぁ、レポート送る前にもっと調べればよかった ...

新着メール 0 件