\documentstyle[epsf,ascmac,alltt,fancybox]{jarticle}
\title{フロッピーディスクの扱い}
\date{}
\author{}
\newcommand{\dg}{\gt}
\newcommand{\dm}{\min}
\setlength{\topmargin}{-12mm}
\setlength{\textheight}{24.5truecm}
\setlength{\textwidth}{17truecm}
\setlength{\oddsidemargin}{-8.5mm}
\setlength{\evensidemargin}{-8.5mm}
\newcommand{\丸数字}[1]
{{\ooalign{\hfill\(\scriptstyle#1\)\hfill\crcr\(\bigcirc\)}}}
\newcommand{\CR}{\ovalbox{\ooalign{\hfill\(\scriptstyle\hookleftarrow\)\hfill\crcr}}}
\begin{document}
\maketitle
フロッピーディスクに，ファイルを保存したり，読みだしたりする
ためには，(昔使われていた) MS-DOS というオペレーティングシステム用の
形式で読み書きすることが前提である．

この形式は，Windows 95 や，Windows 98 へファイルを転送するときにも
使うことができる．最も，ネットワークへ繋がれたコンピュータへは，
ネットワークを利用してファイルを転送する方がよい．

UNIX では，そのために {\tt Mtools} というパッケージがインストールされて
いる\footnote{この M は，MS-DOS の M，つまり，マイクロソフトの M 
である．}．
フロッピーディスクをフロッピーディスクドライブに挿入したら，
次に説明する Mtools のコマンドを使う．

\section{Mtools}
Mtools は UNIX で MS-DOS のディスクを取り扱うためのコマンドコレクショ
ンである．次に示すコマンドがあり，MS-DOS コマンドをエミュレートする．
\begin{center}\begin{tabular}{l|l|l}
\hline
Mtools     & MS-DOS     & 説明 \\
\hline
{\tt mattrib} & {\tt ATTRIB}  & MS-DOS ファイルのファイル属性フラグを
変更する \\
{\tt mcd}     & {\tt CD}      & MS-DOS ディレクトリの移動する \\
{\tt mcopy}   & {\tt COPY}    & MS-DOS ファイルから/へファイルをコピー
する \\
{\tt mdel}    & {\tt DEL}     & MS-DOS ファイルの削除する \\
{\tt mdir}    & {\tt DIR}     & MS-DOS ディレクトリの表示する \\
{\tt mformat} & {\tt FORMAT}  & MS-DOS ファイルシステムのフォーマット
する \\
{\tt mlabel}  & {\tt LABEL}   & MS-DOS ボリュームラベルの作成する \\
{\tt mmd}     & {\tt MD/MKDIR}& MS-DOS サブディレクトリの作成する \\
{\tt mrd}     & {\tt RD/RMDIR}& MS-DOS サブディレクトリの削除する \\
{\tt mread}   & {\tt COPY}   & MS-DOS ファイルから UNIX への低レベル読
みだしする \\
{\tt mren}    & {\tt REN}     & MS-DOS ファイルの名前変更する \\
{\tt mtype}   & {\tt TYPE}    & MS-DOS ファイルの内容表示する \\
{\tt mwrite}  & {\tt COPY}    & UNIX から MS-DOS への低レベル書きこみ
する \\
\hline
\end{tabular}\end{center}
ディレクトリの{\dg\bf 区切り字}(セパレータ)として
{\tt /}と \verb:\: のどちらも利用することができる．
ただし \verb:\: やワイルドカード({\tt *}，アスタリスク，
星印のこと) を使うときは，
シェルによる置換を防ぐためにクォートでファイル名を囲む必要がある．
ファイル名置換は UNIX の規則に従う．例えば {\tt *} は MS-DOS 
における {\tt *.*} とマッチングをする．

この Mtools は，以下の形式のフロッピディスクをはじめとして
さまざまな形式に対応している．
\begin{quote}
\begin{enumerate}
\item 512bytes/sector,   8sectors/track, 80tracks/side, 2sides;  640KB
\item 512bytes/sector,   9sectors/track, 80tracks/side, 2sides;  720KB
\item 1024bytes/sector,  8sectors/track, 77tracks/side, 2sides; 1232KB
\item 512bytes/sector,  18sectors/track, 80tracks/side, 2sides; 1440KB
\end{enumerate}
\end{quote}
最近の PC で使う形式は(Windows など) は，一番下の
1440KB (1440 キロバイト) であるのでその形式についてのみ説明する．
なお，以下では代表的なコマンドのみ説明する．

\section{フォーマット}
\begin{itembox}[l]{注意}
{\large このフォーマットは，フロッピーディスクの情報を消去するので注意しよう．}
\end{itembox}

最初に，フロッピーディスクを扱うためには，{\dg\bf フォーマット}(format)
をする必要がある．フォーマットとは，「初期化」とも訳すが，「区画化」
の方が適切であろう．
フロッピーディスクは，購入時には，ビデオテープなどと同様の磁性体が
表面に塗ってあるだけなので，情報をそれに書き込む前に，同心円の
何十かの輪のような区画をつける必要がある．それがフォーマットである．

なお，フォーマットをすると，「区画化」を行うのでフロッピーディスクに
保存されている情報はすべて，消去されてしまうので注意しよう．
\begin{center}\begin{figure}
\epsfile{file=wa.eps,width=12cm,height=12cm}
\caption{フォーマット}
\end{figure}\end{center}
最近の Windows では，両面(2 heads)，80 トラック(80 tracks)，18 セクタ
(18 sectors) が主流である．

では，実際のフロッピーディスクをフォーマットしよう．フロッピディスクを
ドライブにセットし，特権ユーザ(root) になる必要がある．

\begin{itembox}[l]{フロッピーディスクをドライブにセットする}
\begin{alltt}
prompt\% \underline{su}\CR
Password: \underline{\ \ \ \ \ \ \ }\CR
root-prompt\% \underline{fdformat /dev/fd0H1440}\CR
Double-sided, 80 tracks, 18 sec/track. Total capacity 1440 kB.
Formatting ...  80
\end{alltt}
\end{itembox}

この処理により，{\dg\bf (低レベル)フォーマット} が終了する．
次に，管理情報をフロッピーディスクに書き込む，
{\dg\bf (高レベル)フォーマット} が必要である．
このためには {\tt mformat} コマンドを使う．また，両面，80 トラック，18 セクタ
という情報も指定する必要がある．
なお，{\tt mformat} コマンドなど {\tt m} のついたコマンドは，Mtools の
コマンドなので，フロッピードライブは {\tt a:} のように，
{\tt a}，{\tt b}，{\tt c} のように認識する
\footnote{この演習では，フロッピドライブは，1 台のため 
{\tt a} ドライブ(または，{\tt A} ドライブ) しか使わない．}
 
\begin{itembox}[l]{高レベルフォーマット}
\begin{alltt}
root-prompt\% \underline{mformat a: -h 2 -t 80 -s 18}\CR
root-prompt\% \underline{mdir a:}\CR
 Volume in drive A has no label
 Volume Serial Number is 040D-1EBA
Directory for A:/

No files
                          1 457 664 bytes free
\end{alltt}
\end{itembox}
高レベルフォーマットが終了したら，{\tt mdir} コマンドを使って，
フロッピーディスクの状態を調べてみよう．

なお，この {\tt mformat} コマンド例では，フロッピディスクのラベルを
指定していないが，{\tt -l} によりラベル名を指定することもできる．
さらに，{\tt mlabel} コマンドによりラベルをつけることができる．

フォーマット処理は，Windows などでするものと同じなので，そちらの
オペレーティングシステムの機能を用いて実行してもよい．

\section{{\tt mdir} コマンド}
UNIX の {\tt ls} コマンドに相当するコマンドが {\tt mdir} コマンドである．
フロッピーディスクのディレクトリの内容を表示する．

\begin{itembox}[l]{{\tt mdir} コマンド}
\begin{alltt}
prompt\% \underline{mdir}\CR\ \ \ \ \ \(\leftarrow\)ディレクトリの内容を表示
 Volume in drive A has no label
 Volume Serial Number is 040D-1EBA
Directory for A:/

test     txt        36 05-20-2000  17:45  test.txt
        1 file                   36 bytes
                          1 457 152 bytes free

prompt\% \underline{mdir a:}\CR
 Volume in drive A has no label
 Volume Serial Number is 040D-1EBA
Directory for A:/

test     txt        36 05-20-2000  17:45  test.txt
        1 file                   36 bytes
                          1 457 152 bytes free
\end{alltt}
\end{itembox}
この例では，すでに {\tt mcopy} コマンドにより {\tt test.txt} ファイルを
フロッピーにコピーした後の例である．

\section{{\tt mcopy} コマンド}
ファイルを，フロッピディスクにコピーしたり，フロッピーディスクから UNIX
にコピーしたりするコマンドは，{\tt mcopy} である．

\begin{itembox}[l]{{\tt mcopy} コマンド(1)}
\begin{alltt}
root-prompt\% \underline{ls test.txt}\CR
test.txt
root-prompt\% \underline{mcopy test.txt a:}\CR\ \ \ \ \(\leftarrow\) UNIX から フロッピーへコピー
root-prompt\% \underline{mcopy a:test.txt .}\CR\ \ \ \ \ \(\leftarrow\) フロッピーから UNIX  へコピー
\end{alltt}
\end{itembox}
フロッピーディスクの {\tt a} ドライブへのコピーであるので，{\tt a:test.txt}
を指定する．

結果として UNIX から，UNIX にファイルを移動させる場合は，問題ないが，
元もと，MS-DOS(Windows を含む) で生成されたファイルを UNIX に移動する
場合は(その逆も問題である)，テキストファイルの扱いの違いにより
{\tt mcopy} コマンドでは {\tt -t} オプションをつけた方がよい．

\begin{itembox}[l]{{\tt mcopy} コマンド(2)}
\begin{alltt}
root-prompt\% \underline{ls test.txt}\CR
test.txt
root-prompt\% \underline{mcopy -t test.txt a:}\CR\ \ \ \ \(\leftarrow\) UNIX からフロッピーへコピー
root-prompt\% \underline{mcopy -t a:test.txt .}\CR\ \ \ \ \ \(\leftarrow\) MS-DOS からフロッピーへコピー
\end{alltt}
\end{itembox}

フロッピーディスクから，ファイルをコピーして来たときは，ファイルの
{\dg\bf 所有者}(owner)，{\dg\bf グループ} が {\tt root}
になっているので変更しよう．
\begin{itembox}[l]{所有者，グループの変更}
\begin{alltt}
root-prompt\% \underline{chown {\it yourname} test.html}\CR
root-prompt\% \underline{chgrp {\it yourgroup} test.html}\CR
root-prompt\% \underline{ls -l test.html}\CR
-rw-rw-r--   1 root     root       36 May 21 19:10 test.html
\end{alltt}
\end{itembox}
例えば，ユーザアカウント名が {\tt 00it999} のときは以下のようにタイプすれば
よい．
\begin{itembox}[l]{所有者，グループの変更(例)}
\begin{alltt}
root-prompt\% \underline{chown 00it999 test.html}\CR
root-prompt\% \underline{chgrp 00it999 test.html}\CR
root-prompt\% \underline{ls -l test.html}\CR
-rw-rw-r--   1 00it999  00it999    36 May 21 19:10 test.html
\end{alltt}
\end{itembox}

\section{{\tt mmd} コマンド，{\tt mrd} コマンド}
MS-DOS のファイルシステムは，UNIX と同様に，ディレクトリ構造を
形成しているので，ディレクトリ作成コマンド {\tt mmd}，
ディレクトリ削除コマンド {\tt mrd} がある．
さらに，ディレクトリを移動する場合は，{\tt mcd} コマンドを使う．

しかし，フロッピーディスクは，ハードディスクに比べ，非常に容量が少ないので
あまり，ディレクトリを作るのは繁雑になるだけの傾向があるので，注意しよう．

\begin{itembox}[l]{{\tt mmd} コマンド}
\begin{alltt}
root-prompt\% \underline{mmd a:tmp}\CR
root-prompt\% \underline{mdir}\CR
 Volume in drive A has no label
 Volume Serial Number is 040D-1EBA
Directory for A:/

test     txt        36 05-20-2000  17:45  test.txt
tmp          <DIR>     05-20-2000  17:58  tmp
        2 files                  36 bytes
                          1 456 640 bytes free
root-prompt\% \underline{mcd tmp}\CR
root-prompt\% \underline{mdir}\CR
 Volume in drive A has no label
 Volume Serial Number is 040D-1EBA
Directory for A:/tmp

.            <DIR>     05-20-2000  17:58 
..           <DIR>     05-20-2000  17:58 
        2 files                   0 bytes
                          1 456 640 bytes free
\end{alltt}\end{itembox}

さらに，ディレクトリを削除するときは {\tt mrd} コマンドを使う．
\begin{itembox}[l]{{\tt mrd} コマンド}
\begin{alltt}
root-prompt\% \underline{mcd ..}\CR
root-prompt\% \underline{mdir}\CR
 Volume in drive A has no label
 Volume Serial Number is 040D-1EBA
Directory for A:/

test     txt        36 05-20-2000  17:45  test.txt
tmp          <DIR>     05-20-2000  17:58  tmp
        2 files                  36 bytes
                          1 456 640 bytes free

root-prompt\% \underline{mrd a:tmp}\CR
root-prompt\% \underline{mdir}\CR
 Volume in drive A has no label
 Volume Serial Number is 040D-1EBA
Directory for A:/

test     txt        36 05-20-2000  17:45  test.txt
        1 file                   36 bytes
                          1 457 152 bytes free
\end{alltt}
\end{itembox}

\section{{\tt exit} コマンド}
Mtools のコマンドを駆使して，フロッピディスクへのファイルの
受渡しが終了したら，{\tt exit} コマンドにより一般ユーザに戻ろう．
\begin{itembox}[l]{{\tt exit} コマンド}
\begin{alltt}
root-prompt\% \underline{exit}\CR
prompt\%
\end{alltt}
\end{itembox}

\section{{\tt minfo} コマンド}
フロッピディスクの状態を知るためには，{\tt minfo} コマンドを使う．
このコマンドは，特権ユーザ(root) にならなくても表示させることができる．
\begin{itembox}[l]{{\tt minfo} コマンド}
\begin{alltt}
prompt\% \underline{minfo a:}\CR
device information:
===================
filename="/dev/fd0"
sectors per track: 18
heads: 2
cylinders: 80

mformat command line: mformat -t 80 -h 2 -s 18 a:

bootsector information
======================
banner:"MTOOL391"
sector size: 512 bytes
cluster size: 1 sectors
reserved (boot) sectors: 1
fats: 2
max available root directory slots: 224
small size: 2880 sectors
media descriptor byte: 0xf0
sectors per fat: 9
sectors per track: 18
heads: 2
hidden sectors: 0
big size: 0 sectors
physical drive id: 0x0
reserved=0x0
dos4=0x29
serial number: 40D1EBA
disk label="NO NAME    "
disk type="FAT12   "
\end{alltt}
\end{itembox}

このコマンドにより，両面，80 トラック，18 セクタであるという情報や，
フォーマット時のコマンドなどが示されるので忘れた場合などには便利である．

\section{漢字コードの変換}
日本語を扱うときには注意が必要である．日本語には文字コード体系が複数存
在し，JISコード，シフトJISコード，EUC が漢字コードとして存在する．
UNIX で使われている漢字コードは主に {\bf EUC}(Enhanced Unix Code)
といわれる．
MS-DOS や MacOS(Macintosh) で用いている漢字コードは シフト JIS コード
である．また電子メイルや電子ニュースなどは JIS コードでネットワークに
送られる．
Windows 95，Windows 98 などでは Unicode が使われている．
これらの漢字コードを目的とするコード体系に変換するために {\tt nkf} と
いうコマンドがある．{\tt nkf} は入力された漢字コードを自動的に判別する．
その指定は次に示すオプションで行う．何も指定をしないと JIS コードに変換する．

\begin{alltt}
    -j              {\it JIS コード}
    -s              {\it シフト JIS コード}
    -e              {\it EUC}
\end{alltt}
例えば {\tt foo} の漢字コードを EUC に変換し {\tt foo.euc}に保存するには，
\begin{itembox}[l]{{\tt nkf} コマンド}
\begin{alltt}
prompt\% \underline{nkf -e < foo > foo.euc}\CR
\end{alltt}
\end{itembox}
とすればよい．
\end{document}
