每一年,Linux 新闻记者和爱好者都会公开讨论,下一年是否会成为 “Linux 桌面” 之年。尽管购买一台已在运行 Linux 的新机器或将现有的 Windows 系统迁移到 Linux 比以往更加容易,但简单地安装和启动 Linux 还不足以将其打造为日常使用的操作系统。您可能已开始在桌面上使用 Linux,但您使用新 Linux 系统的环境可能不那么现代化。大部分企业、中小型企业,以及小型办公室/家庭办公环境都拥有必须考虑的 Windows 相关需求。您可能还需要将仅在 Windows 平台上能得到有效支持的硬件用于 Linux 系统。所幸,这些问题已存在各种各样的解决方案。
访问共享的 Windows 文件系统
访问共享的 Windows 文件系统可能是 Linux 系统用户最常见的业务需求。许多企业仍在使用 Windows 作为基础架构的核心,以支持企业邮件和日历系统(比如 Microsoft Exchange Server),以及通过导出的文件系统(一般称为 Windows 共享)来支持简单的文件和数据共享。
Linux 提供了多种方式来访问 Windows 共享。具体选择哪种机制,依赖于您需要访问 Windows 共享上的数据的频率,以及您配置的 Linxu 系统是个人、单用户系统还是多个用户共享的系统。
从命令行访问 Windows 共享
Samba Project是一个开源项目,支持 Linux、UNIX 和其他类似 UNIX 的操作系统与 Windows 互操作。大部分 Linux 发行版的存储库中都包含 Samba,而且一般通过安装和配置来支持 Linux 系统能够加入一个现有的 Windows 工作组或域并与其互操作,常常用作一个可供 Windows 系统使用的通用互联网文件系统 (Common Internet File System, CIFS) 文件服务器。Samba 4.x 安装还允许 Samba 服务器充当 Windows 域的一个活动目录域服务 (Active Directory Domain Service) 控制器和集成的域名系统 (Domain Name System)。
尽管 Samba 服务器提供了一种优秀机制来从 Windows 系统提供 Linux 资源,使 Linux 系统可打印到 Windows 打印机,但如果您感兴趣的只是偶尔从 WIndows 共享检索文件,安装和配置 Samba 服务器可能会大材小用。Samba 客户端包 (samba-client) 包含多个专为这类偶尔交互所设计的实用程序,包括 smbclient 应用程序,该应用程序提供了一个交互式命令行接口 (CLI) 来远程访问 Windows 共享。
如果不确定远程 Windows 服务器上提供的共享名称,则可使用 smbclient 应用程序查询一个服务器,在服务器的名称或 IP 地址后键入 -L 选项来列出该服务器上的可用资源,如 清单 1 中所示。
清单 1. 使用 smbclient 列出 Windows 服务器资源
$ smbclient -L win2008server
Enter wvh's password:
Domain=[WORDSMITHS]
OS=[Windows (R) Small Business Server 2008 6001 Service Pack 1]
Server=[Windows (R) Small Business Server 2008 6.0]
Sharename Type Comment
--------- ---- -------
Address Disk "Access to address objects"
ADMIN$ Disk Remote Admin
Brother HL-2070N Printer Brother HL-2070N
C$ Disk Default share
ExchangeOAB Disk OAB Distribution share
IPC$ IPC Remote IPC
NETLOGON Disk Logon server share
print$ Disk Printer Drivers
Public Disk
RedirectedFolders Disk
Resources$ Disk "Event logging files"
SYSVOL Disk Logon server share
[...]
如上所示,smbclient 应用程序使用当前的 Linux 用户作为要在远程 Windows 服务器上验证的用户,并提示用户输入密码来访问远程服务器。如果 Windows 服务器上的登录名不同,则可使用 -U 选项指定要使用的登录名。
确定希望连接到的共享的名称后,可使用 smbclient 应用程序连接到一个特定的共享,以检查或检索文件,如 清单 2 中所示。
清单 2. 使用 smbclient 从 Windows 共享中检索文件
$ smbclient //win2008server/Public
Enter wvh's password:
Domain=[WORDSMITHS]
OS=[Windows (R) Small Business Server 2008 6001 Service Pack 1]
Server=[Windows (R) Small Business Server 2008 6.0]
smb: \> cd Software\Linux
smb: \Software\Linux\> ls
. D 0 Sun Jan 27 23:40:42 2013
.. D 0 Sun Jan 27 23:40:42 2013
acl82express-linux-x86.bz2 A 44960643 Sun Jan 27 23:40:24 2013
alien_8.87.tar.gz A 64336 Sun Jan 27 23:39:24 2013
crossover-12.1.0-1.i386.rpm A 47233108 Sun Jan 27 23:39:14 2013
[...]
59997 blocks of size 1048576. 32474 blocks available
smb: \Software\Linux\> get softmaker-office-2012-674.x86_64.rpm
getting file \Software\Linux\softmaker-office-2012-674.x86_64.rpm \
of size 147058656 as softmaker-office-2012-674.x86_64.rpm \
(16345.5 KiloBytes/sec) (average 16345.5 KiloBytes/sec)
smb: \Software\Linux\> quit
清单 2 中的示例表明,smbclient 提供了一个 CLI 来连接远程服务器。此接口支持熟悉的 Linux 命令,比如 cd(用于在远程服务器上的目录中移动)和 ls(用于列出给定目录的内容)。找到希望检索的文件后,可使用 get 命令检索该文件,将其存储在您希望从中执行 smbclient 的目录中。要将检索到的文件存储在另一个目录中,可使用 lcd(本地更改目录)命令来更改 smbclient 视为当前目录的目录。
如果仅需要偶尔访问 Windows 共享中的一个或多个文件,且并不关心使用文件管理器(比如 Gigolo、GNOME Nautilus、KDE Dolphin、Konqueror 或 Thunar)来以图形方式浏览 Windows 共享,那么可以放心地使用 smbclient 应用程序。smbclient 应用程序使一个远程共享可在该应用程序的上下文中使用,而不是在您的整个系统中使用。要浏览 Windows 共享并将其提供给您选择的应用程序,则必须采用挂载本地文件系统的相同方式将该共享挂载到您的系统上。