家里有一台小米路由器,而最近个人的主力电脑是 Linux 系统(Ubuntu)。若想在 Linux 下访问小米路由器上的文件,有三种方法可以实现,本文记录这三种方法的具体步骤。
准备工作
在开始介绍三种访问方法之前,有一些相同的准备工作需要做,即不管使用哪种方法,都需要先完成这些准备工作。
同一个局域网
Linux 系统需要和小米路由器在同一个局域网中。现今主流的 Linux 系统都支持无线局域网了,所以只要将 Linux 系统连接小米路由器对应的 Wi-Fi ,即可实现同处一个局域网的要求。
开启 Samba 服务
想要让 Linux 设备能够访问小米路由器上的文件,需要开启小米路由器上的 Samba 服务。在手机的「小米路由器」 app 的「工具箱」页面,找到 Samba 插件:
进入 Samba 并允许后,确认 Samba 协议已开启:
从上图可见,小米电视和小米盒子的正常工作也是依赖于 Samba 服务的。
开启全盘访问
除了 Samba 服务之外,还需要打开 Linux 对应设备的「路由全盘访问」权限。
首先,在 app 的「路由」页面,找到 Linux 系统对应的设备名称,如 Yubuntu:
点击此设备进入设置页面,开启「路由全盘访问」权限:
这样,app 上的设置就完成了。另外提前说明一点,全盘访问权限并不是必须的,但有了这个权限会方便很多,下文会详细说明。
方法一:通过 smbclient 访问
由前面的准备工作可知,小米路由器上的文件是通过 Samba 服务对外提供访问的,小米路由器就是一台 Samba 服务器,而 Linux 设备是 Samba 客户端,因此可以使用 smbclient 命令来访问。
smbclient 命令提供了一种类似 ftp 命令的方式访问 Samba 服务器。一台 Samba 服务器可以提供诸如磁盘、打印机等不同的共享服务,先使用 smbclient 命令的 -L 选项看看小米路由器提供了哪些共享服务(其中 192.168.31.1 是小米路由器的默认 IP 地址):
$ smbclient -L 192.168.31.1
WARNING: The "syslog" option is deprecated
Enter yestyle's password:
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 4.0.21]
Sharename Type Comment
--------- ---- -------
XiaoMi Disk
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 4.0.21]
Server Comment
--------- -------
WECHANGER Share from router
YE-PC
Workgroup Master
--------- -------
WORKGROUP WECHANGER
其中可以看到小米路由器的域名称(WORKGROUP)、操作系统类型(Unix)及 Samba 服务器的版本(4.0.21)等信息,重点关注 Sharename
和 Type
两列,可以看到小米路由器提供了一个叫做 XiaoMi
的 Disk
共享服务即磁盘共享服务,我们要访问的就是这个磁盘服务。
在准备工作部分,提到「全盘访问权限」不是必须的,这里看看假如没有全盘访问权限,可以访问的服务有何不同。
$ smbclient -L 192.168.31.1
WARNING: The "syslog" option is deprecated
Enter yestyle's password:
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 4.0.21]
Sharename Type Comment
--------- ---- -------
torrent Disk
下载 Disk
共享 Disk
图片 Disk
文档 Disk
视频 Disk
音乐 Disk
IPC$ IPC IPC Service (Share from router)
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 4.0.21]
Server Comment
--------- -------
WECHANGER Share from router
YE-PC
Workgroup Master
--------- -------
WORKGROUP WECHANGER
可以看到,在没有全盘访问权限时,小米路由器将各个子目录分别作为一个磁盘服务,将访问权限做了更细粒度的划分。但这将对我们访问整个路由器的文件造成不便,因此为方便起见,建议开启全盘访问权限。
前面只列出了小米路由器提供的共享服务名称,接下来看看具体如何访问小米路由器上的文件。
$ smbclient //192.168.31.1/XiaoMi
WARNING: The "syslog" option is deprecated
Enter yestyle's password:
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 4.0.21]
smb: \> ?
? allinfo altname archive backup
blocksize cancel case_sensitive cd chmod
chown close del dir du
echo exit get getfacl geteas
hardlink help history iosize lcd
link lock lowercase ls l
mask md mget mkdir more
mput newer notify open posix
posix_encrypt posix_open posix_mkdir posix_rmdir posix_unlink
print prompt put pwd q
queue quit readlink rd recurse
reget rename reput rm rmdir
showacls setea setmode scopy stat
symlink tar tarmode timeout translate
unlock volume vuid wdel logon
listconnect showconnect tcon tdis tid
logoff .. !
输入 smbclient //192.168.31.1/XiaoMi
命令之后进入 smb:\>
提示符,其中的 \ 代表当前所在目录,输入 help
或 ?
查看可用命令,基本的访问命令与 ftp
的命令相同,如 get XXX
从小米路由器下载文件 XXX 到本地,put YYY
将本地文件 YYY 上传到小米路由器等等。
方法二:通过文件浏览器访问
在 Ubuntu 的文件浏览器(Files)的左侧,有一个「Connect to Server」按钮,点击后在出现的对话框中,输入 smb://192.168.31.1/
再点击 Connect 即可查看小米路由器提供的共享服务,效果等同于方法一的 smbclient -L
命令,如下图所示:
双击 XiaoMi
后弹出的对话框中,选择 Anonymous
(匿名访问)再点击 Connect 即可。此时可以在左侧看到 xiaomi on 192.168.31.1
的目录,表示连接成功。
方法三:通过挂载方式访问
安装
Samba 其实是对 CIFS 协议做逆向工程后的开源产物,而 Linux 上的 CIFS 的工具已经从 Samba 软件包中分离出来,需要单独安装:
$ sudo apt-get install cifs-utils
挂载
首先创建挂载点的目录:
$ sudo mkdir -p /media/xiaomi
然后使用 mount
命令将 //192.168.31.1/XiaoMi
挂载到刚创建的目录,注意其中的 -t cifs
选项:
$ sudo mount -t cifs //192.168.31.1/XiaoMi /media/xiaomi -o guest
由于 CIFS 对于路径名称是大小写不敏感的,因此挂载时可以使用 XiaoMi
的任意大小写组合,但挂载点 /media/xiaomi
当然是大小写敏感的。
要验证是否挂载成功,可直接输入 mount
命令查看目前所有已挂载的文件系统,找到其中这样的一行(刚刚挂载的文件系统在最后一行):
//192.168.31.1/XiaoMi on /media/xiaomi type cifs (rw,relatime,vers=1.0,sec=none,cache=strict,domain=WECHANGER,uid=0,noforceuid,gid=0,noforcegid,\
addr=192.168.31.1,file_mode=0755,dir_mode=0755,nounix,serverino,mapposix,rsize=61440,wsize=65536,actimeo=1)
成功挂载之后,就可以像使用本地磁盘一样使用小米路由器的共享磁盘了,比如在文件浏览器中双击打开文档,使用 cp
命令与小米路由器互传文件等,非常方便。
小结
通过对三种方法的描述可以发现,这三种访问方法的本质是相同的,都是通过 Samba 服务访问小米路由器上的文件,小米路由器作为 Samba 服务器,Linux 设备作为 Samba 客户端。三种方法的差异体现在所使用的工具和操作界面不同。其中方法一使用 smbclient
操作不方便,方法二使用图形化的操作界面无法实现自动化,而方法三使用挂载的方式,操作方便且可使用脚本实现自动挂载和文件操作,推荐使用方法三。
附本文操作环境:
- Linux 版本: Ubuntu 16.04
- 小米路由器型号: R1D
- 小米路由器 ROM 版本: MiWiFi 稳定版 2.16.3
以上。