歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> 在Windows中使用Linux時Linux與Windows的資源交互

在Windows中使用Linux時Linux與Windows的資源交互

日期:2017/3/3 16:25:40   编辑:關於Linux

每一年,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 共 享並將其提供給您選擇的應用程序,則必須采用掛載本地文件系統的相同方式將該共享掛載到您的系統上。

永久掛 載 Windows 共享

可將 Windows 共享手動掛載在系統上的目錄上,方法是以 root 用戶身份使用 mount 命令或使用 sudo 應用程序,如 清單 3 中所示。mount 命令的 -t 選項及其 cifs 參數指定您掛載的文件系統類型,而且在此情況下,會導致一般性的 mount 命令調用 /bin/mount.cifs 命令。使用您系統的 package-management 命令安裝 cifs-utils 程序包,該程序包是 Samba 套件的一部分。

清單 3. 掛載並列出手動掛載的 Windows 共享的內容

# mkdir /mnt/PUBLIC
# mount -t cifs //winserver2008/Public /mnt/PUBLIC
Password:
# ls -l /mnt/PUBLIC
total 1
drwxr-xr-x. 1 root root   0 Jan 27 16:19 Desktop
-rwxr-xr-x. 1 root root 174 Jan 19  2008 desktop.ini
drwxr-xr-x. 1 root root   0 Jan 19  2008 Documents
drwxr-xr-x. 1 root root   0 Jan 27 23:38 Downloads
drwxr-xr-x. 1 root root   0 Jan 19  2008 Favorites
drwxr-xr-x. 1 root root   0 Jan 19  2008 Music
drwxr-xr-x. 1 root root   0 Jan 19  2008 Pictures
drwxr-xr-x. 1 root root   0 Jan 27 23:37 Software
drwxr-xr-x. 1 root root   0 Jan 19  2008 Videos

清單 3 中的示例 mount 命令使遠程共享可通過 /mnt/PUBLIC 目錄使用,但具有一些缺點:

簡單地將此命令添加到 /etc/fstab 文件中無法自動掛載該共享,因為 您在執行 mount 命令後會被提示輸入密碼。如果尚未確定要用於驗證的特定用戶,就必須為用於執行 su 或 sudo 命令的 用戶提供遠程 Windows 密碼。

以 root 用戶身份執行 mount 命令,將共享掛載為 root 用戶所有的資源。如果僅希望 讀取該共享中的文件,盡管可通過此方式掛載共享,但您只能以 root 用戶身份向掛載的共享寫入數據,這通常很不方便。

要解決這些問題,可在執行 mount 命令時指定特殊的 CIFS 相關選項,以掛載一個 CIFS 共享。這些選項包括:

username=<login> - 指定將用於對遠程共享進行驗證的用戶。可將此選項縮寫為 user=。

password=<login> - 指定將對遠程共享進行驗證的用戶(您將該用戶指定為將使用的用戶)的密碼。

uid=<UID> - 指定將擁有所掛載共享中的文件和目錄的用戶 ID (UID)。如果在 Linux 桌面上使用密碼文件身份 驗證方式,則可使用 grep 命令在系統的密碼文件中搜索您的登錄名,以找到您的 UID,如以下示例中所示。

$ grep wvh /etc/passwd

wvh:x:500:500:William von Hagen:/home/wvh:/bin/bash

UID 是密碼文件條目中的第三 個字段(在本例中為 efficiently500)。

gid=<GID> - 指定將擁有所掛載共享中的文件和目錄的用戶的組 ID (GID)。如果在 Linux 桌面上使用密碼文件身份驗證方式,則可使用 grep 命令在系統的密碼文件中搜索您的登錄名,以找 到您的 GID。GID 是密碼文件條目中的第四個字段,如上面的示例中所示。

下面給出了一個使用這些選項的示例 mount 命令,出於格式化用途將該命令分為兩行:

# mount -t cifs -o username=wvh,password=MYPASSWORD,uid=500,gid=500 \

//win2008server/Public /mnt/PUBLIC

可從 CLI 使用一條類似這樣的命令或向 /etc/fstab 文件添加一個類似 條目,以在啟動系統時自動掛載該文件系統。以下是與前面的 mount 等效的 /etc/fstab 文件條目:

//win2008server/Public /mnt/PUBLIC cifs \

username=wvh,password=MYPASSWORD,uid=500,gid=500 0 0

此命令將在 /etc/fstab 文件中顯示為一行,但在本 例中出於格式化用途而分為多行。遺憾的是,此命令具有明顯的安全問題,因為您必須在 /etc/fstab 條目中公開密碼,而 文件 /etc/fstab 通常可供系統上的每個用戶讀取。要解決此問題,可使用 credentials 掛載選項將用戶名和密碼放在指 定的文本文件中。例如:

//win2008server/Public /mnt/PUBLIC cifs \

credentials=/etc/cred.wvh,uid=500,gid=500 0 0

一個 credentials 文件的格式如下所示:

username=wvh

password=MYPASSWORD

然後可使用以下命令,使 /etc/cred.wvh 文件僅可供 root 用戶( 必須以其身份執行 mount 命令的用戶)讀取:

# chmod 600 /etc/cred.wvh

使用 credentials 掛載選項, 可在每次掛載文件系統時必須指定用戶名和密碼,與不向每個能訪問系統的人公開該信息之間實現很好的平衡。

使 用 sudo 按需掛載 Windows 共享

如果只希望偶爾掛載一個共享,可將 noauto 選項添加到上一節示例中所示的掛載 選項列表中。此選項可在每次重新啟動系統時避免自動掛載指定的 Windows 共享。然後,在希望訪問該共享中的文件時, 必須從命令行掛載該共享。

必須始終以 root 用戶身份執行 mount 命令,這通常意味著任何希望掛載該共享的人都 必須知道該系統上的 root 密碼。如果不希望在每次重新啟動系統時自動掛載該共享,且希望限制需要知道 root 密碼的用 戶(或只是限制必須使用該命令的次數),則可使用 sudo 命令使一個普通用戶能夠掛載該共享。為此,使用 visudo 命令 編輯 /etc/sudoers 文件,這會將一個以下格式的條目添加到 /etc/sudoers 文件的末尾。

wvh ALL=/bin/mount /mnt/PUBLIC, /bin/umount /mnt/PUBLIC

此條目使用戶 wvh 能夠使用 sudo 命令執行 /bin/mount /mnt/PUBLIC 和 /bin/umount /mnt/PUBLIC 命令,但不允許該用戶使用 mount 或 umount 命令掛載或卸載任 何其他文件系統。如果希望給定系統上的所有用戶都能夠掛載或卸載 /mnt/PUBLIC 共享,可將用戶名 wvh 替換為一般性的 %users 表達式。在此情況下,請確保用戶希望更新的文件可由關聯的 /etc/fstab 條目中的 anongid 所標識的組寫入數據 ,並且所有用戶都屬於這個組。

備注:另一種掛載 Windows 共享的方法是使用一個支持 CIFS 文件系統的 File system in User Space (FUSE) 程序包。smbnetfs 和 fusesmb 程序包很流行,但已很久未更新了,且需要大量配置才能使 它們正常工作。

在 Linux 系統上使用 Windows 文本文件

大部分人都認為文本文件在每個計算機系統上都是一種標准的文件類型,因此可安全地用於配置文件、可在任何操作系 統上讀取的便箋等。不幸的是,情況不是這樣的。盡管 Windows 和 Linux 系統上的文本文件使用了相同的字符集,但用於 標識文本的行尾的字符卻不同。Windows 和 DOS 系統使用兩個字符來標識文本的行尾:一個回車字符 (Ctrl-M) 和一個換 行符 (Ctrl-J)。Linux 和所有類似 UNIX 的系統都使用單個字符來標識文本的行尾:換行符。如果使用 Linux 實用程序打 開在 Windows 系統上創建的文本文件,將會在每行末尾看到一個 Ctrl-M 字符,該字符常常顯示為 ^M 或 \r。這個額外的 字符可能會讓需要讀取這類文件的 Linux 實用程序難以理解。

Linux 提供了兩個命令來自動更改文本文件中的行結束符。dos2unix 命令(位於大部分 Linux 發行版中都提供的一個 具有相同名稱的程序包中)自動轉換在 Windows(或 DOS)中創建的文本文件,以使用 Linux 和 UNIX 約定來標記文本的 行尾,這會刪除所有的 Ctrl-M 字符。一個同名的程序包中有一個等效的程序 unix2dos,可將 Linux 和 UNIX 文本文件轉 換為 Windows 格式的文本文件。

如果您是 Emacs 文本編輯器的愛好者,可以將 清單 4 中所示的 Emacs 命令添加 到 Emacs 配置文件 (~/.emacs) 中。然後就能夠執行 dos-file、mac-file 和 unix-file 命令,將一個文本緩沖區的上下 文轉換為使用該命令指定的文本文件格式。

清單 4. 更改文本文件類型的 Emacs 命令

;
; Functions for changing buffer modes
;
(defun dos-file ()
   "Change the current buffer to Latin 1 with DOS line-ends."
   (interactive)
   (set-buffer-file-coding-system 'iso-latin-1-dos t))
    
(defun mac-file ()
   "Change the current buffer to Latin 1 with Mac line-ends."
   (interactive)
   (set-buffer-file-coding-system 'iso-latin-1-mac t))
    
(defun unix-file ()
   "Change the current buffer to Latin 1 with Unix line-ends."
   (interactive)
   (set-buffer-file-coding-system 'iso-latin-1-unix t))

備注:清單 4 中所示的樣例 Emacs 命令假設您使 用的是 Latin 1 字符集。如果在文本文件中使用另一個字符集,則將需要修改這些命令以反映該字符集。

使用針對 Windows 設計的網絡設備

盡管 Linux 提供了大多數人需要在其計算機上使用的軟件,但對於任何操作系統而言,兼容最新的網絡硬件都是一 個問題。現在的 Linux 發行版包含大量網絡硬件的設備驅動程序,但針對新網絡協議和相關硬件的 Linux 驅動程序能夠可 能跟不上形勢,尤其是在無線領域。如果 Linux 機器在系統啟動時無法識別或使用新的網絡設備,則表明該設備的驅動程 序不可用,或者這些設備驅動程序需要的一些其他資源(比如特定於硬件的固件)不可用。在這些情況下,友好的鄰域搜索 引擎始終應是您首要考慮的辦法:具有同一個新發布的硬件的其他人可能已能在 Linux 系統上正確運行這個搜索引擎。

如果無法為新發布的網絡硬件找到內置的 Linux 驅動程序,大多數新硬件都附帶了一張 CD,其中包含使支持的操 作系統能夠高效使用該硬件的特殊驅動程序。不幸的是,這些驅動程序 CD 很少包含專為 Linux 系統設計的驅動程序。在 一些情況下,特定硬件的 Linux 驅動程序可從硬件供應商的網站獲得。在此情況下,供應商通常還會提供安裝和配置說明 。許多硬件供應商還提供了在線論壇,可在其中提出問題,或討論您遇到的任何安裝或配置問題。

如果您正在使用 或試用的 Linux 發行版不支持您的桌面或筆記本電腦上的特定網絡硬件,而且供應商未提供 Linux 驅動程序,也不是毫無 辦法。NDISwrapper 程序包使您能夠在 Linux 系統上使用大部分 Windows XP 網絡設備驅動程序。網絡驅動程序接口規范 (Network Driver Interface Specification, NDIS) 是一個針對網絡接口卡 (NIC) 的標准應用程序編程接口。 NDISwrapper 程序包不支持 NDIS (V6),這是 Windows 8、Windows 7 和 Windows Vista 使用的驅動程序格式,所以您只 能將 NDISwrapper 程序包用於 Windows XP 驅動程序。如果使用 64 位 Linux 系統,則只能使用 64 位 Windows XP 驅動 程序;32 位 Windows XP 驅動程序不適用於 64 位系統。

在系統上安裝 ndiswrapper-utils 程序包(在一些 Linux 發行版上,可能還需要安裝 ndiswrapper-common 程序包 )後,可執行以下步驟來安裝和使用 Windows XP NDIS 驅動程序:

檢查是否已加載相同硬件的任何 Linux 驅動程序,如果已加載,則使用 rmmod DRIVER 命令卸載。

找到想要使用的驅動程序的 .inf 和 .sys 文件。

如果您的硬件的 Windows XP 驅動程序已在一個自解壓 .exe 文件中提供,通常可使用 Linux unzip 實用程序來提取。 如果在一個 .cab 文件中提供,則可使用 Linux cabextract 實用程序提取。如果在 InstallShield 文件中提供,可使用 unshield 實用程序提取。(在大部分 Linux 發行版中,所有這些實用程序都在存儲庫中的同名程序包中。)在最糟糕的情 況下,可將驅動程序安裝在 Windows 計算機上,然後再將它們復制到 Linux 系統上。

以 root 用戶身份使用以下這樣的命令或使用 sudo 命令安裝驅動程序:

ndiswrapper -i DRIVER.inf

以 root 用戶身份運行以下命令,或使用 sudo 命令驗證 Windows 驅動程序是否已正確安裝:

ndiswrapper -l

以 root 用戶身份運行以下命令,或使用 sudo 命令加載 NDISwrapper 可加載內核模塊:

modprobe ndiswrapper

以 root 用戶身份運行以下命令,或使用 sudo 命令,為您的網絡接口創建一個模塊配置文件別名:

ndiswrapper -m

此條目將類似於以下形式:

alias wlan0 ndiswrapper

確保與 ndiswrapper 內核模塊關聯的以太網接口名稱與您希望將其用於的接口匹配,如 ifconfig -a 命令的輸出 所示。

此刻,新網絡硬件應可從 Linux 系統中看到,而且您應能夠使用標准的 Linux 網絡配置實用程序(比如 /sbin/ifconfig),或者配置和使用關聯的 NIC。

如果希望為也擁有原生 Linux 驅動程序的硬件使用 ndiswrapper 內核模塊和 Windows 驅動程序,則將需要創建一個名 稱類似於 /etc/modprobe.d/blacklist-DRIVER.conf 的文件,其中包含一個類似 blacklist DRIVER 的條目,以確保您下 次重新啟動系統時不會加載 Linux 驅動程序。

如果偏愛圖形應用程序的簡單性,則有多個選項可用於 NDISwrapper 程序包。圖 1 顯示了 ndisgtk 應用程序,可從同 名的程序包中將該應用程序安裝到系統上。

圖 1. 使用 ndisgtk 添加一個 Windows 驅動程序

NDISwrapper 程序包不但有用,而且給人印 象深刻。即使 Linux 為您的硬件提供了原生驅動程序,您也可能會發現,使用 Windows 驅動程序可提供比使用內置的 Linux 等效驅動程序更高的性能。

結束語

Linux 是一個免費且強大的操作系統,而且(目前)還易於使用。在桌面或便攜式電腦上使用 Linux,可 帶來比 Windows 等操作系統高得多的性能,這也是為舊計算機注入新活力的一種不錯的方式。但是,與基於 Windows 的服 務器、某些類型的 Windows 文件或面向 Windows 的網絡硬件互操作,這仍然是許多企業和家庭環境的需求。Linux 提供了 廣泛的軟件和技術選擇,支持您與這些系統和硬件互操作,從而從桌面 Linux 系統為您提供了兩全其美的辦法。

Copyright © Linux教程網 All Rights Reserved