[Asianux3] Samba 3.0 : Windowsの共有フォルダとファイルを送受信 | Server OS Cafe

Server OS Cafe

Server OSの紹介等

今回よりAsianux Server 3に搭載されているSamba でWindowsとのファイル共有や認証の統合等を

いろいろ試して見たいと思います。

ミラクルリナックス社はSambaの国際化でいろいろ貢献してきたみたいで

(ミラクルリナックス: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でテキストファイルを作成し以下の文字を書き込みます。


Samba_1014_1


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というファイル名で保存します。


Samba_1014_2


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でファイルのコピーを実施
Samba_1014_3
("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でマウントしてファイルのコピーを実施
Samba_1014_5

● 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つのファイルを開くと、いずれも以下の様にファイルの中身が正しく表示されます。

Samba_1014_6

またWindows側のファイルも改行文字がLFのままコピーされているので、


Samba_1014_4

秀丸エディタ等の高機能なエディタで改行文字を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で開いたものです。


Samba_1014_7

LinuxからWindows、WindowsからLinuxのどちらの場合も機種依存文字も文字化けせずにコピーが

できるようですね。