Window10提供了一项新的功能,那就是Linux子系统。这对于经常要使用linux的人来说,会非常的有用。linux子系统相比于使用虚拟机安装的linux,有自己独到的地方。其中一个虚拟机无法比拟的优势就是,linux子系统会将window本地硬盘挂载到/mnt下面以盘符命名的目录上,这样,就可以使用linux的方式来处理磁盘上的文件,这很有吸引力。当然,虚拟机也可以映身本地目录,但是,可能很少有人会将每个盘都挂在虚拟机里面罢,别外,虚拟机占用内存高和启动慢等,也是问题。相比而言,linux子系统启动非常快,可以说是随开随用,系统资源占用也很低,强列推荐。
百度云盘是大多数人经常使用的一个云端存储工具,以前百度提供过同步盘的功能,就是将本地某个文件夹的文件同步到云盘上,与云盘的文件保持一致,但是,现在这个功能仅对百度云盘的会员才提供,这对于需要使用该功能的人来说非常失望(土豪请略过),下面,介绍一种通过linux子系统运行python程序bypy来实现文件夹同步的方法,供需要的朋友参考。
启用windows10的linux子系统
启动windows10的linux子系统有两种方式:一种是安装系统提供的linux子系统这个功能;另外一种是直接在应用商店(Microsoft Store)直接下载。
第一种方法安装的是ubuntu的一套linux系统,方法是在“启用或关闭Windows功能”中勾选“适用于Linux的Windows子系统"这一功能,然后按照提示进行操作:
第二种方法是打开微软应用商店,然后找到如下图所示页面,选择喜欢的版本下载即可,这里可以下载安装Ubuntu/openSUSE Leap和SuSE Linux Enterprise。
可以说,安装还是非常简单的。但是需要注意的是每种方法安装的linux启动命令是不一样的。第一种是在命令行窗口中输入bash,而第二种则和安装的版本有关,比如,如果你安装的是Ubuntu,那么可以在说明中看到,启动方法则是在命令行中输入ubuntu,或者是使用图标启动,效果都是一样的。下面我以第一种方式安装的为例来说明。
优化linux
首先是替换默认的源,因为默认源速度非常慢,所以我换成阿里的源。
cp /etc/apt/sources.list /etc/apt/sources.list.bak
#修改sources.list文件
vim /etc/apt/sources.list
#替换为下面这些行
deb http://mirrors.163.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-backports main restricted universe multiverse
#更多源 https://www.cnblogs.com/xingyunfashi/p/9028355.html
#更新源
apt update
#更新软件,这个过程比较慢,也可以不更新
apt dist-upgrade #也可以使用apt-get dist-upgrade
安装 Oh-My-Zsh
win10的linux子系统在系统中的位置:
C:\Users\DongPC\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs
所以,可以进到该目录,手动改一些配置,也是可以的,比如忘记root帐户密码了,那么可以直接修改 /etc/shadow
安装oh-my-zsh:
apt install zsh
# 安装oh-my-zsh
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
# 安装插件
cd ~/.oh-my-zsh/custom/plugins/
git clone https://github.com/zsh-users/zsh-autosuggestions
cd ~/.oh-my-zsh/custom/plugins/
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git
# 编辑配置文件
vi ~/.zshrc
## 修改如下内容:
ZSH_THEME="af-magic"
plugins=(
git
zsh-autosuggestions
zsh-syntax-highlighting
)
## 让配置生效
source ~.zshrc
# 更改root默认shell
/etc/passwd
root:x:0:0:root:/root:/usr/bin/zsh
安装百度云盘同步工具bypy
bypy是用python写的一个工具,可以上传和同步文件到百度云盘。这里主要使用的是他的同步功能。bypy可以使用pip进行安装,但是默认ubuntu里并没有安装pip,所以先安装pip
#安装pip
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python get-pip.py
#安装bypy
pip install bypy
bypy的使用
bypy项目地址:https://github.com/houtianze/bypy
bypy运行在Python 2.7+, 3.3+下。这里需要说明一下,既然只要有python的环境就可以运行bypy,那么为什么还要使用linux子系统呢,直接在windows下面安装一个python不就可以了?实际结果是,bypy在windows下面支持并不好,所以一定要在linux下面才是王道。下面放一张windows下运行bypy的图片:
很多感叹号对吧,对于文件同步这么重要的工作,显然一定要慎之又慎啦。
bypy的常用命令我在我的另外一篇文章中有介绍:CentOS6.8升级Python2.6.6至2.7.12 ,百度云盘Python客户端Bypy安装 有兴趣的可以去看看。这里只简单介绍下。
应用授权:
bypy info
复制屏幕打印的地址,在浏览器打开,为应用授权,复制网页上显示的授权码,粘贴到命令行即可
显示云盘根目录下文件列表:
#实际目录为/apps/bypy/,应该仅可读写该目录下内容
bypy list
把当前目录同步到云盘:
bypy syncup
或者
bypy upload
把云盘内容同步到本地:
bypy syncdown
或者
bypy downdir /
比较本地当前目录和云盘根目录:
bypy compare
运行时添加-v参数,会显示进度详情
用来做为同步盘使用,主要是这三个命令:bypy syncup将本地文件夹同步到云端,以本地为准,向云端同步;bypy syncdown将云端文件同步到本地,以云端为准,向本地同步;bypy compare比较本地和云端,会列出差异。
最简单的用法是这样的,比如,我需要将本地D:\myfile文件夹下面的所有文件同步到百度云盘:我的应用数据/bypy。那么这样操作:
cd /mnt/d/myfile
#进行应用授权
bypy info #会显示一个网址,复制该网址到浏览器,登录百度云盘的帐号,会生成一个授权码,再将该授权码粘贴回命令行中
#开始同步文件,-v可以显示进度,建议加上
bypy syncup -v==进阶==
bypy syncup -v进行同步是简化的写法,这种方式是将本地文件同步到远端,如果远端存在同名但内容不相同的文件时,会自动替换远端文件为本地的版本,但是,如果一个文件只在远端,本地没有的化,是不会主动删除远端多余文件的。要想在同步时删除远端多余文件,需要使用下面的命令:
bypy syncup . / True
解释:“.”为本端当前目录的意思;“/”为远端目录,默认为根目录;“True”表示启动删除功能。要印证也很简单,执行bypy compare查看输出的报告就能看到差异
附,syncup函数定义:def syncup(self, localdir = '', remotedir = '', deleteremote = False)
同步支持秒传,所以对于某些我们觉得非常大的文件,其实很快就上传成功了。如果网络不好,可能会出现超时,程序一般都能自动重试,当然,退出后,再执行同步也没有问题,会自动同步余下的文件。同步过程如下:
同步完后,看看是不是真的全部同步了:
电脑和云盘都是1185个文件,276个文件夹,显示是一致的。
==进阶==
启用ssh
默认都是在windows的命令行下面进行操作,如果要使用更专业的软件,比如SecureCRT这些专业的SSH,那么需要启用ssh。
apt-get remove --purge openssh-server
#重新安装
apt-get install openssh-server
#修改配置文件
vim /etc/ssh/sshd_config
主要修改三个地方:
1.更改端口22为其它未占用端口,因为windows已经占用了22端口
2.修改PermitRootLogin prohibit-password为PermitRootLogin yes,允许root登录
(prohibit-password意思是允许root登录,但是禁止用密码登录)
3.为root用户设置密码passwd root
#重启ssh服务
service ssh --full-restart
通过上面的修改,就可以用ssh进行登录啦,不过遗憾的是,如果关闭了命令行窗口,ssh也就登录不上了,那么这是为什么呢?这是因为linux子系统在windows上是以进程的方式运行的(这也是为什么可以随开随用和低资源占用的原因),关闭命令行窗口后,进程就关闭了,linux中运行的所有程序也就都关闭了,那有办法解决么,显然,就是一直开这这个进程就可以了。
另外,要使用ssh,进入bash后,需要启动ssh服务才可以,也就是执行service ssh start
linux子系统和ssh实现开机启动
首先解决linux子系统启动的同时启动ssh的问题。只需要实现进入bash后,能够启动ssh服务就可以了,那么可以使用脚本来实现:
#!/bin/sh
service ssh start
msg=
cat /etc/resolv.conf|grep nameserver|awk '{print $2}'
sudo sed -i "5a $msg win.local" /etc/hosts
$SHELL
#这句很重要,挂起当前脚本进程,进而维持base.exe一直打开
那么这样就可以了 bash /home/startssh.sh
下面我们使用vbs脚本来执行上面这个命令,并隐藏窗口:
Set ws = CreateObject("Wscript.Shell")
ws.run "bash /usr/anyesu/boot.sh",vbhide
现在,执行sublinux.vbs脚本,就可以在后台启动bash,并且还顺带启动ssh服务,下面可以将期添加到计划任务中,在系统登录后自动启动,这样就可以随时使用ssh来访问linux子系统啦。效果如下:
添加计划任务操作如下:
这样,每次你登录系统后,就自动启动了ssh服务,当然,也可以举一反三,自动启动其它linux子系统中的服务,比如nginx/apache/tomcat等等。
转载请注明:轻风博客 » 依托Linux子系统利用百度云盘实现文件夹云端同步