Path: sran124!katsu
From: katsu@sra.co.jp (WATANABE Katsuhiro)
Message-ID: <KATSU.90Aug21211508@sran14.sra.co.jp>
Date: 21 Aug 90 21:15:08
Organization: Software Research Associates, Inc.,Japan
Newsgroups: sra.test, junk
Subject: Today's junk article.(How to read symlink directly.)
Distribution: sra
FollowUp-To: sra.test


四谷~本社間 64Kbps 回線開通記念特別企画

			「本日のゴミ記事」


この投稿の趣旨:
	ftp いはく、「5.4 Kbytes/s」だそうです。うれしい。



  少し前にこの企画で

>     「しまった!backup をとっていない!!」なんとかしてこのファイルシステムを
> 修復せねばなりません。
>   まずは落ち着いて ls -l /usr/mmb/katsu/Mail/akemi してみて、驚きました。
> 		: : :
> 	-rw-------  1 katsu        1989 Apr 11 13:42 6
> 	drw-------  1 katsu        1897 Apr 11 15:28 7
> 	-rw-------  1 katsu        1308 Apr 11 15:22 8
>		: : :

>   このファイルは本来、(mh で管理している)mail のはずなのにディレクトリに
> なってしまっています。

>  ともかく、ただのファイルが何らかの原因でディレクトリに化けて
> しまったのです。

  なんていう記事を投稿した記憶があります。あの時は大騒ぎして、わざわざ
raw device を書き換えたりしたもんでしたが、その後度々同じ事態が発生して
経験値が上がった結果、最近ではあわてることもなくなりました。

  さて、今日四谷と本社間が 64Kbps でつながったのに関連して、
ネットワーク関係の設定を調べていた時のことです。

sran14# cat /etc/networks
/etc/networks: File name too long

  あれあれあれあれ?

sran14# ls -l /etc/networks
lrw-r--r--  1 root          640 Jul  8 13:56 /etc/networks -> # SRA ネットワーク・アドレス・データベース?#?loopback-net??127??software-loopback-net?localnet?wide-net??133.4??wide-center-net?sra-net???133.137??sra-net?sra-wide-net??133.137.4?sra-widegateway-net?sra-backbone-net?133.137.8?sra-honsha-net??133.137.12?sra-bekkan-net??133.137.16?sra-otsuka-net??133.137.20?sra-osaka-net??133.137.24?sra-nagoya-net??133.137.28?sra-fukuoka-net??133.137.32?sra-yotsuya-net??133.137.36?sra-sendai-net??133.137.40?sra-kohoku-net??133.137.44?sra-makuhari-net?133.137.48?sra-hiroshima-net?133.137.52?sra-kawasaki-net?133.137.56?sra-labo1-net??133.137.196?sra-labo2-net??133.137.200?sra-labo3-net??133.137.204?

  なんと今度は普通のファイルが symbolic link に化けてしまいました。
でも今度は以前の時と違って、

(1) ファイルシステムとしては矛盾がない
(2) symbolic link だから簡単に rm できる。

という点で大変に楽です。要するに rm してファイルを作り直せば良いのです。
さらに /etc/networks はSRAじゅうで同じですから、どこからでも持ってくる
ことができ、バックアップがないなどと悩むこともありません。



						drum roll......

	「SRA提供:UNIX ひゃくまんえん QUUUUIZ!」

						fanfare! fanfare! fanfare!


  もし他のどの機械にもなく、バックアップもとられていないような普通の
ファイルが symbolic link に化けてしまったような場合に、その symbolic link
から元のファイルを復活できるでしょうか?

#  ls -l の結果を利用するというのは、上のように特殊文字が「?」にかわって
# しまいますから不適当です。

  (わかった方はここでさようなら。次にヒントをいきます。)






ヒント:

  symbolic link があった場合にリンク先のファイルではなくリンク自体を
参照する(つまりは stat(2) ではなく lstat(2) をしていると思われる)
コマンドのうちで、ls のように何らかの形でそれを出力してくれるコマンドを
さがせばいいわけです。

  (次に答え ? をいきます。)




というわけで、私がやってみたこと。

sran14# file /etc/networks
/etc/networks:	symbolic link to # SRA ネットワーク・アドレス・データベース
#
loopback-net		127		software-loopback-net	localnet
wide-net		133.4		wide-center-net
sra-net			133.137		sra-net
        :  :  :  :
sra-labo2-net		133.137.200
sra-labo3-net		133.137.204

  ときれいに出るので、これをファイルに移して最初の数文字と最後の余分な
改行1つを vi でけずったのでした。

  もっとも、目で見てうまくいったことが確かに確認できる短いテキストファイル
だったからやったのであって、/bin/csh がこういうことになったからとしても、
file /bin/csh ... してemacs で直すなんてことをする自信はありません。


--
----____----____
渡邊克宏 ソフトウェア工学研究所(四谷)
今月の標語「私の過去は真っ白よっ。」