Path: sran124!katsu From: katsu@sra.co.jp (WATANABE Katsuhiro) Message-ID: 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 で直すなんてことをする自信はありません。 -- ----____----____ 渡邊克宏 ソフトウェア工学研究所(四谷) 今月の標語「私の過去は真っ白よっ。」