說明
以下操作以Ubuntu為例,大家可以參考。
我在Ubuntu 14.04和16.04都試過了。
Windows共享文件夾
如果局域網內有一台Windows主機,將指定文件夾設為共享,就可以在局域網內訪問了。
如果要從Linux下訪問該如何操作呢?
使用 mount.cifs
Windows共享文件夾使用的協議是SMB/CIFS。因而可以使用Linux下的smbclient在命令行中進行操作。
如果想更方便地在圖形桌面環境使用,則可以使用mount.cifs
指令,將共享文件夾掛載到指定位置,然后就可以像訪問一個本地文件夾一樣訪問了。
首先安裝依賴的包
使用mount.cifs需要cifs-utils軟件包(以及cifs-utils依賴的軟件包)。
$ sudo apt install cifs-utils
(插一句嘴:現在apt安裝可以直接使用apt而不用apt-get了)
掛載共享文件夾
可以使用如下兩種指令(效果是一樣的)
sudo mount.cifs //[address]/[folder] [mount point] -o user=[username],passwd=[pw]
或者
sudo mount -t cifs //[address]/[folder] [mount point] -o user=[username],passwd=[pw]
其中共享文件夾的地址是Windows主機的地址加上文件夾名稱,這個可以在Windows主機上看到。例如//192.168.0.100/share
掛載點是Linux本地的一個空文件夾。
后面的選項指定了用戶名和密碼。
文件操作
掛載成功后,通過圖形化的文件管理器就可以直接操作了。復制、粘貼、刪除等等。
不過,然而,可是……你很快就會發現,這個文件夾可讀不可寫!只能往外面復制,不能新建文件或者向里面復制。
查看文件夾屬性后會發現,原來這個文件夾在掛載之后,owner變成了root。怎么辦呢?不能每次拷個文件還要sudo
吧?那還得打開命令行,不直觀,多麻煩。
別急,mount.cifs
還提供了一個選項,那就是指定掛載后的owner!用法如下:
sudo mount.cifs //[address]/[folder] [mount point] -o user=[username],passwd=[pw],uid=[UID]
在選項中指定用戶的UID就可以了。
查看某個用戶UID的方法:
id -u [username]
之后就可以正常操作了!
卸載
最后如果要卸載共享文件夾,使用umount
即可
sudo umount [mount point]
Enjoy!
可能遇到的問題
使用過程中可能遇到各種各樣的問題,其結果往往是一樣的:無法訪問目標文件夾。這里列出幾個可能遇到的問題以及可能的原因和解決辦法。
1、目標主機在某個域中
一般個人電腦不會使用域管理(Windows PC版壓根兒就沒有域管理服務),但是在一個企業或者組織中,可能會用Windows server的域管理功能,統一管理內部的Windows電腦。登錄在域中的計算機時,登錄界面會顯示域名。
用上面的指令就沒有辦法登錄處於域中的計算機共享文件夾,可能的報錯是input/output error
。
解決方法:
使用domain
選項來指定域名:
sudo mount.cifs //[address]/[folder] [mount point] -o domain=[domain_name],user=[username],passwd=[pw],uid=[UID]
2、希望免密碼登錄
有些時候,為了方便起見希望不使用密碼登錄。
解決方法
使用guest
選項。
sudo mount.cifs //[address]/[folder] [mount point] -o user=[username],guest,uid=[UID]
不過需要注意的是,如果要免密碼登錄,不僅客戶端的登錄指令要變,更重要的是在目標主機上要進行相關設置,允許Guest賬戶登錄,或者允許免密碼登錄。具體設置方式,這里就不涉及了,與Windows系統版本有關,不過大同小異。
3、賬戶密碼正確,但連接失敗
錯誤信息是mount error(13): Permission denied
。遇到這種錯誤請首先確定用戶名和密碼是否正確。
其他導致這種情況的原因有(1)安全協議不匹配(2)在Linux系統中,你沒有掛載權限;(3)Windows目標主機訪問時權限不足
解決方法
情況1:可使用sec=
選項指定安全協議。如果Linux內核版本低於3.8,則默認的安全協議是sec=ntlm
,而3.8及以后的版本使用sec=ntlmssp
作為默認安全協議。對於版本較低的Windows(如Windows XP),可能不支持新的ntlmssp
,此時需要指明使用ntlm
協議。可使用man mount.cifs
查看詳細說明。
情況2:請使用有掛載權限的賬戶操作,比如root。
情況3:請進入Windows共享文件設置相關界面進行設置。因為可能原因是(1)你使用的賬戶不能訪問這個文件夾;(2)Windows針對當前的網絡連接關閉了文件共享;(3)其他配置原因。
4、斷網的情況下假死
如果在已經連接成功的情況下斷網,此時對已經掛載的共享文件夾進行任何操作(包括讀取和卸載),都會導致假死(可能要卡住1-2分鍾才能恢復)。這是網絡文件系統(NFS)的特性決定的,修改掛載指令是沒辦法優化這個問題的。
解決方法
如果是命令行操作,那么就只好等待了。如果是在應用程序中使用,則建議使用多線程操作,單開一個臨時線程卸載掛載的文件夾,臨時線程的假死不會影響主線程。