LinuxサーバからWindowsの共有フォルダ(SMB)に手頃にアクセスするための手段に「smbclient」があります。触れる機会があったためご紹介します。
私の備忘録も兼ねてますが、お役に立てれば幸いです。
手順
コネクション確立
■対話モード
# 書式
smbclient -m [最高位のSMBプロトコル] //[接続先のIPアドレス]/[接続する共有フォルダ] -U [ドメイン]\\[ユーザ名]%[パスワード]
# 例
smbclient -m SMB2 //192.168.1.10/share -U domainA\\userA%password
コネクションが確立すると以下のようにプロンプトが表示される。
smb: \>
■非対話モード(バッチ向け)
# 書式
smbclient -m [最高位のSMBプロトコル] //[接続先のIPアドレス]/[接続する共有フォルダ] -D [初期ディレクトリ] -U [ドメイン]\\[ユーザ名]%[パスワード] -c [コマンド]
# 例
smbclient -m SMB2 //192.168.1.10/share -U domainA\\userA%password -c "ls"
⇒ プロンプトは表示されずに-c指定のコマンドが実行される。
なお、接続時に「-D」オプションで初期フォルダを指定することも出来ます。
smbclient -m SMB2 //192.168.1.10/share -U domainA\\userA%password -D 初期フォルダ -c “ls”
コマンド
詳細は以下で確認可能ですが、メジャーなものを載せておきます。
http://www.samba.gr.jp/project/translation/current/htmldocs/manpages/smbclient.1.html
用途 | コマンド | 補足 |
---|---|---|
ファイル一覧表示 | ls [フォルダ] | 省略はカレント表示 ls -lのような表示変更オプションは無い。 |
ディレクトリ移動 | cd フォルダ | |
ファイル削除 | rm ファイル | |
フォルダ削除 | rmdir フォルダ | 空ではない場合は実行不可。 サブフォルダまとめて削除はdeltreeを使う。 |
ファイル取得 (Linux ← Smb) | mget ファイル/フォルダ | |
ファイル転送 (Linux → Smb) | mput ファイル/フォルダ | |
ファイル名の確認 (mget/mput用) | prompt | デフォルトON 対話モードの場合は実行毎にOFF/ONが切り替わる。 |
再帰的を有効 (mget/mput用) | recurse | デフォルトOFF 対話モードの場合は実行毎にON/OFFが切り替わる。 |
フォルダ削除 (サブフォルダ含) | deltree | smbclientが「ver4.7.0~」サポートであることに注意。 |
非対話モードでよく使うもののコマンド部を載せておきます。
# 指定フォルダ(サブ含む)を取得(クライアント側にコピー)
prompt;recurse;mget 指定フォルダ
# 指定フォルダ(サブ含む)を転送(サーバ側のコピー)
prompt;recurse;mput 指定フォルダ
※ファイル名確認は不要で、サブフォルダを含めるため「prompt」「recurse」を併用しています。
注意点
- mget/mputの場合、タイムスタンプは実行時の値になります(維持されない)。
- rmで日付指定等は出来ない。
※コマンド「ls」の結果をshell(awkやdate等を駆使)で解析ですかね。 - deltreeはsmbclientが古いと利用出来ません。
rmdirでrecurseの組み合わせとかも残念ながら出来ません。
(参考) mountは?
mountコマンドは・・・?
windows共有フォルダをmountコマンドでマウントする手段もあるにはありますが、サーバ側なのかクライアント側なのか、敷居が高いことがあります(上手くいかないことがある)。
実行例:sudo mount -t cifs -o username=ドメイン\ユーザ,password=パスワード //192.168.10.10/share /home/share/hoge
- mount: cannot mount //x.x.x.x/share read-only
⇒cifs-utilsインストールで回避 - mount error(112): Host is down
⇒vers=2.0を追加(vers=2.0,username=…) - mount error(13): Permission denied
⇒sec=krb5を追加(sec=krb5,vers=2.0,username=…) - password specified twice, ignoring second
mount error(126): Required key not available
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
⇒・・・?
こんな感じでスムーズに事が運ばない場合、mountは結構大変です・・・。バッチ処理の延長などで単純なファイル取得や転送等で事足りるのであればsmbclientで十分なのではないでしょうか。
まとめ
本記事ではsmbclientについてご紹介しました。
Windows共有フォルダ上のファイル操作を簡易的に簡単に行うのであれば十分に使えます。
最後までご覧いただき、ありがとうございました。
コメント