今回よりAsianux Server 3に搭載されているSamba でWindowsとのファイル共有や認証の統合等を
いろいろ試して見たいと思います。
ミラクルリナックス社はSambaの国際化でいろいろ貢献してきたみたいで
Asianux Server 3においてもSambaは目玉の1つになっています。
なお、Asianux Server 3にはバージョン3.0.24が入っているようです。
$ rpm -qa | grep samba
samba-swat-3.0.24-6AX
samba-common-3.0.24-6AX
samba-3.0.24-6AX
samba-client-3.0.24-6AX
Sambaにはsmbd、nmbd、winbinddの3つのデーモンがありますが、Asianux Server 3では(Red Hat系では)
以下の起動スクリプトで起動できます。
smb・・・smbd、nmbd
winbind・・・winbindd
とりあえずsmbdとnmbdを起動して、ランレベル3、5の場合に自動起動するようにしておきます。
# /sbin/service smb start
# chkconfig --level 35 smb on
各デーモンの機能については以下のサイトを参照。
Red Hat Enterprise Linux 5.0 導入ガイド:7.2.1.Sambaデーモン
さて今回はLinux側からWindowsの共有フォルダに接続してファイルのコピーを実施してみたいと思います。
今回はLinux、WindowsともWORKGROUPに所属しています。
● Windows側での準備作業
今回はWindows XPを使用します。
C:\Shareというフォルダを作成しShareという共有名で公開します。
その下にnotepadでテキストファイルを作成し以下の文字を書き込みます。
4行目の文字がWindowsのShift-Jis(CP932、Windows-31J) の機種依存文字になります。
これをShift-Jis、UTF-8、UTF-16の3種類の文字コードで保存し
それぞれファイル名を"テキスト_Shift-Jis.txt"、"テキスト_UTF-8.txt"、"テキスト_UTF-16.txt"とします。
●Asianux側での準備作業
こちらでも同様のテキストファイルを作成しTextFromLinux.txtというファイル名で保存します。
Asianux Server 3のデフォルトロケールはUTF-8となっていますので、このファイルの文字コードはUTF-8に
なります。
Shift-JisのファイルをWindowsに送信したい場合は後述するnkfコマンドでShift-Jisに変換します。
またSambaの設定ファイル(/etc/samba/smb.conf)を開いて[global]セクションに以下の設定を記述して
おきます。
[global]
dos charset = CP932
unix charset = UTF-8
dos charset : Windows側で使用される文字コード
unix charset : Unixファイルシステムで使用される文字コード
(ただしunix charsetはUTF-8がデフォルトなので今回の場合では記述しなくても良いです)
設定ファイルを更新したらSambaを再起動しておきます。
# /sbin/service smb restart
● 共有フォルダへのアクセスとファイルコピーの実施
SambaでWindowsの共有フォルダとファイルのコピーを行う方法にはsmbclientコマンド を使用する方法と
SMB/CIFSでマウントする方法があります。
1. smbclientを使用する場合
以下の構文でWindowsの共有フォルダに接続します。
smbclient //<ホスト名>/<共有名> -U <ユーザー名>
ログインした後は対話形式で以下のコマンドを使用します。
cd : カレントディレクトリの変更
pwd : カレントディレクトリの表示
dirもしくはls : ディレクトリのファイルの一覧を表示
put : put <自マシン上のファイル名> <相手先のファイル名> でファイルを相手先にコピーします。
get : get <接続先のファイル名> <自マシンのファイル名> でファイルを相手先からコピーします。
delもしくはrm : ファイルを削除
exitもしくはquit : 接続を終了
smbclientでファイルのコピーを実施
("nao"というユーザーは共有Shareの共有アクセス権限とC:\ShareのNTFSアクセス権限の両方で
書き込み権限を持っています)
また smbclientで-cオプションを使用すればコマンドを対話形式ではなく自動実行することができます。
$ smbclient //nao-desktop1/Share -U nao -c 'get テキスト_Shift-Jis.txt text-shift-jis.txt'
2. CIFSでマウントする
Samba共有をマウントする場合、以前はsmbmountコマンド を使用してSMBFSでマウントするのが普通でしたが、
Asianuxに限らず最近のディストリビューションではSMBFSは使用せず、CIFSを使用するように
カーネルオプションが設定されていますのでCIFSでマウントを行います。
$ cat /usr/src/kernels/2.6.18-8.10AX-PAE-i686/.config | grep SMB
# CONFIG_SMB_FS is not set
$ cat /usr/src/kernels/2.6.18-8.10AX-PAE-i686/.config | grep CIFS
CONFIG_CIFS=m
# CONFIG_CIFS_STATS is not set
CONFIG_CIFS_WEAKPW_HASH=y
CONFIG_CIFS_XATTR=y
CONFIG_CIFS_POSIX=y
# CONFIG_CIFS_DEBUG2 is not set
# CONFIG_CIFS_EXPERIMENTAL is not set
CIFSでマウントする構文は以下の様になります。
# mount -t cifs //<ホスト名>/<共有名> /<マウントポイント> -o <オプション>
より詳細な情報は以下のサイト(man mount.cifsの日本語訳)を参照して下さい。
http://www.samba.gr.jp/project/translation/current/htmldocs/mount.cifs.8.html
CIFSでマウントしてファイルのコピーを実施
● nkfでの文字コードと改行文字の変換
さてこれでLinux、Windows間のファイルのコピーができましたが、smbclient、CIFSでマウントしてコピーの
どちらで実施した場合でもファイルはバイナリでコピーされます。
Asianuxに限らず最近のLinuxのディストリビュータのロケールはUTF-8ですから、Shift-Jis(CP932)や
UTF-16のファイルをLinux側でそのまま開くと文字化けしますのでUTF-8に変換する必要があります。
またUTF-8で作成されたファイルでもWindowsとLinuxでは改行文字が異なるので
(LinuxではLF、WindowsではCR + LF)、改行文字は変換する必要があります。
そこでnkfコマンド を使用して変換を実施します。
Linux側にコピーしたファイルの文字コードをUTF-8に変換し、改行文字をCR+LFからLFに変換
$ nkf -w -Lu text-shift-jis.txt > textFromSjisToUtf8.txt
$ nkf -w -Lu text-utf-16.txt > textFromUtf16ToUtf8.txt
$ nkf -w -Lu text-utf-8.txt > textutf-8_u.txt
これで変換後の3つのファイルを開くと、いずれも以下の様にファイルの中身が正しく表示されます。
またWindows側のファイルも改行文字がLFのままコピーされているので、
秀丸エディタ等の高機能なエディタで改行文字をCR + LFに変換する必要があります。
また前述のnkfコマンドを使用してLinux側でコピー前にあからじめ変換しておくこともできます。
・文字コードをUTF-8で改行文字をCR + LFに変換
$ nkf -w -Lw TextFromLinux.txt > TextFromLinux2.txt
・文字コードをShift-Jisにして改行文字をCR + LFに変換
$ nkf -s -Lw TextFromLinux.txt > TextFormLinux2.txt
以下はnkfで文字コードをShift-Jisに、改行文字をCR + LFに変換してからsmbclientでWindowsの共有フォルダ
にコピーしたファイルをnotepadで開いたものです。
LinuxからWindows、WindowsからLinuxのどちらの場合も機種依存文字も文字化けせずにコピーが
できるようですね。



