安装mysql
|
|
权限和修改配置文件问题
|
|
字符集问题
|
|
导出导入
|
|
连接mysql
|
|
mysql基本命令
|
|
|
|
|
|
|
|
|
|
|
|
|
|
先去mongodb官网下载mongod,配置好环境变量.最好也再下个robomongo,进行更好的图形界面管理
|
|
或者用配置文件的方式启动:
|
|
|
|
指定好当前数据库后,用db命令查看,之后用密码登陆.
查看所有的数据库
|
|
|
|
创建集合(表),删除表,显示所有表
|
|
创建文档(记录)
|
|
指定数据库,一定要先选定再创建,创建用户角色
|
|
role:”sysadmin”,”read”,”readWrite”,”sysadmin”和”root”角色只能在第一次创建一次,之后创建的必须是其它的角色,同时也要注意db:’xxx’要改变,如果指定的是admin数据库,则此用户可以看到所有的数据库,并只是针对db:’test’这个数据库有读写操作.
指定数据库之后,查看用户
用admin数据库,查看,管理所有数据库中的所有用户
|
|
创建新的索引,此命令不会覆盖掉之前的索引
|
|
创建二维索引,通过查询location这个数组,来得到文档
|
|
MongoDB的Geospatial Indexing 2d默认取值范围[-179,-179]到[180,180] 包含这两个点,超出范围将报错
|
|
|
|
|
|
配置一下nginx
|
|
访问 http://www.femnyy.com or http://myip/ghost
|
|
同时在管理界面能操作的,就不要去动服务器中的ghost代码,本人能力有限,改了几次,配置都不能用了,只能重新安装(在旧版本中)
设置标签 再将Tab 设置成Navigation,同样新版本也可以操作Design了.
备份你的博客 导入博客
Labs –> Export /Import
提高被搜索的概率
setting –> Meta Date –> 输入搜索时的关键字
参考于此
install nodejs and setting npm source
其中当npm install –production,下载依赖包时,可能会遇到内存不足的问题,可以通过增加交换空间来解决
|
|
install ghost
|
|
use pm2 manage ghost 之后就可以不用 nohup npm start –production 启动了
|
|
install nginx
访问 http://www.femnyy.com or http://myip/ghost
如果是在国内安装的话,可能会比较慢,推荐用淘宝镜像安装,你可以使用我们定制的 cnpm (gzip 压缩支持) 命令行工具代替默认的 npm:
|
|
|
|
操作符
>G >gg # 缩进 y复制 d删除
C == c$ #c是修改,删除之后进入插入模式
s == cl # l一个字符 aw一个单词(iw不涉及到空格,ciw推荐) ap一个段落
S == ^cc # 删除一整行
# g命令空间
g~l # 反转大小写
guw # 转化成小写
gUU # 转化成大写
:!nginx -s reload # 使用外部命令
u # 撤消
<ctrl-r> # 重做
动作命令
w b e ge # 对单词 动作的移动程度和方向
W B E gE # 对字串 动作的移动程度和方向
* 和 #符号 # 匹配光标当前的所有单词
% # 匹配括号移动
f+ # 查找当前行的下一个'+'字符,定位到'+' F上一个
t+ # 查找当前行的下一个'+'字符,定位到'+'的上一个字符 T上一个
3fa → 在当前行查找第三个出现的a
; # 重复
, # 退回
yaw yt, f,dt. d/ge<CR> # 查找动作告诉d操作符删除什么
#Vim的文本对象由两个字符组成,第一个字符永远是i或a.文本对象自身并不是动作命令,不能用它们在文档中移动
# 但我们却可以在可视化及操作符待决模式中使用文本对象
#操作分隔符的文本对象 m{a-zA-Z}要在其内部
a)==ab a}==aB at#一对XML标签 it #XML标签内部
vi) ci)
# 操作文本块的文本对象
daw ciw
# 设置位置标记
m{a-zA-Z}#小写每个缓冲区局部可见,大写全局可见
mm `m
# Vim的自动位置标记
'' # 当前文件中上次跳转动作之前的位置
'. # 上次修改过的地方
'^ # 插入
'[ # 上次修改或复制的起始位置
'] # 结束
'< # 高亮选区
'> # 结束
# 括号间的跳转
%
# 当不同文件之间的移动和跳转
任何改变当前窗口中活动文件的命令,都可以称为跳转命令
Vim会把执行跳转命令之前和之后的光标位置,记录到跳转列表中
'<ff>'
@: # 重复上次的Ex命令
:s%/old/new/g # 替换
1<ctrl-a> # 对当前行的一下数字加1 1<ctrl-x>:减一
# 重绘屏幕
zz #把当前行显示在窗口正中
<ctrl-d>(D) # 向下滚屏
<ctrl-u>(U) # 上
H/M/L # 跳到屏幕最上,中,下方
# 可视化模式
v
# 命令行模式
:
# 命令行窗口
q:
# 替换模式
R gR
r{char} gr{char} # 覆盖一个字符之后,马上又回到普通模式
#特别一点
ga #查看任意字符的编码 分别以10,16,8进制的形式显示其字符编码
J将下面的一整行,都提到光标行的末尾
<ctrl-g> # 显示当前文件文件名及状态
# Vim操作的是寄存器,而并非剪贴板
# "{register}前缀的方式指定要用的寄存器,若不指明则使用无名寄存器
"ayiw "bdd ""yiw "+yy:delete c # 分别 对应寄存器a,b,",c中
"ap "bp ""p :put c # 对应的复制
# x,s,d,c,y,p命令都会覆盖无名寄存器
# 无名寄存器("") ""p==p
yaw daw "0p
# 有名寄存器("a-"z)
# 黑洞寄存器("_)
# 复制专用寄存器("0) y命令不仅会被拷贝到无名寄存器中,还拷贝到复制专用寄存器中
# ubuntu 和mint默认安装的vim是不支持系统剪切、粘贴版的
sudo apt-get install -y vim-gnome
# 对于非GUI版本的vim,剪切板是不可用的,解决方案很简单,安装一下就是了:
sudo apt-get install gvim
# 系统剪贴板("+)
# 将系统剪贴板的内容粘贴到Vim内部
"+p # 插入模式下<ctrl-r>+,",a,0
# 将Vim的文本捕获到系统剪贴板
"+yy
"%p # "%当前文件名
".p # ".上次插入的文本
# 只读(read-only)寄存器:
":,分别缓存最近命令
".,最近插入文本
"%,当前文件名
"#,当前交替文件名
# 代换单词
yiw jww ve p
yiw jww ciw<ctrl-r>0<Esc>
#打任意数目的按键操作录制到寄存器,用于之后的回放
# 把命令序列录制成宏
qa #录制宏的开始 q{register},从而指定一个用于保存宏的寄存器
A;<Esc>
Ivar <Esc>
q # 停止宏录制
j @a j@@
:reg a # 查看寄存器的内容
@a # @{register} 执行指定寄存器的内容,
@@ # 重复最近高过的宏
10@a # 加次数回放宏 .命令不能执行次数
f+ s_+_<Esc> qq;.q 22@q
# 串行的运行宏 j :next
10@a # 加次数回放宏 .命令不能执行次数
# 并行的运行宏
:'<,'>normal @a # 单个文件的多行并行运行宏
:args *.py # 建立目标文件列表
:edit!
:argdo normal @a
# 当在多个文件中 进行并行运行宏时,执行宏一旦失败,不方便找到到底哪个失败了
:wall
# 给宏追加命令
qA # Vim会录制按键操作,但会把它们附加到寄存器a原有的内容之后
# 编辑宏
:put a # 将宏复制到缓冲区,当前光标的下方,而 "ap 复制到当前光标之后
# 在缓冲区进行对宏的编辑
0 "ay$ dd # 将宏从缓冲区复制回寄存器
<ctrl-h>
<ctrl-w>
<ctrl-u> # 都是删除操作
# 插入-普通模式
<ctrl-o> #切换到插入-普通模式,在此后可执行一条普通模式下的命令后,再回到插入模式
<ctrl-o>zz #
# 复制专用寄存器("0) y命令不仅会被拷贝到无名寄存器中,还拷贝到复制专用寄存器中
<ctrl-r>0 # 0就是寄存器的名字 在命令行中yaw,默认寄存器的名字是0
<ctrl-r><ctrl-p>0 # 它会按原义插入寄存器内的文本,并修正任何不必要的缩进
<ctrl-r>=9*9<CR> # 表达式寄存器 <ctrl-r>=
<C-p>或是<C-n>,自动补齐功
<ctrl-v>065 # A用字符编码插入字符,vim所接受的字符编码共包含3位数
<ctrl-v>u00bf # 编码超过3位的,可以用4位16进制编码来输入
<ctrl-v><Tab> # 如果后面跟一个非数字键,它会插入这个键本身所代表的字符
v V <ctrl-v>
o # 切换高亮选区的活动端
gv # 重选上次的高亮选区
yyp-->Vr# # ####横编排
<ctrl-v>3j$ #竖编排
= # 自动给缩进
@: # 在普通模式下执行 重复上次的Ex命令
/
<ctrl-r>= # 访问表达式寄存器也会激活命令行模式
# 有些命令可以在插入和命令行模式下通用
<ctrl-r>0 #复制寄存器的内容
<ctrl-h>
<ctrl-w>
<ctrl-u> # 都是删除操作
/the/
?the?
:1,$ == :% # 整个文件
:. # 光标所有行
:0 #虚拟行 位于文件第一行上方
# 删除行
:3d == 3G+dd
:.d # 删除当前行
# 复制行t,移动行m
:6t. # :[range]t{address} 把第六行复制到当前行下方
:t6 当前 第六行
:t. == yyp
:'<,'>t$ # 将高亮选区的内容复制到文本结尾处
A;
:'<,'>normal . == :'<,'>normal A; # 对高亮选区中的每一行,对其执行普通模式下的 . 命令.
# 自动补全Ex命令
<ctrl-d> <Tab> <Shfit-Tab>
:colors<Tab>
:colorscheme <Tab>
# 把当前光标的单词插入到命令行
<ctrl-r><ctrl-w>
# 把当前光标的字串插入到命令行
<ctrl-r><ctrl-a>
# 命令行窗口,就像一个常规的Vim缓冲区,只不过它的内容都对应着命令历史中的一个条目
q: # 打开Ex 命令历史 k j键进行移动 ,<CR>将会把当前行的内容当成Ex命令执行
q/ # 打开查找
:q #关闭命令行窗口 像操作普通Vim窗口一样 其它的操作也可以
<ctrl-f> # 从命令行模式切换到命令行窗口
# 运行shell
:!{cmd} # 执行一次性命令
:shell # 启动一个交互的shell会话 exit # 退出此shell并返回Vim
# 也可以在普通模式下 <ctrl-z>挂起Vim进程,$jobs $fg [作业号]
:read !{cmd} # 将标准输出插入到光标下方
:[range]write !{cmd} # 将range(默认是整个文件)每行内容,作为此命令的输入
:%!sort -t ',' -k 2 # 以逗号分隔,按第二个字段进行排序
:tabnew # 创建新标签页
:split 文件路径 #分割窗口,如果不指定文件路径,默认是分割本文件
:set ignorecase #查找单词时需要忽略大小写
:set hlsearch # 可以将查找的内容设置成高亮
:set history=200 #设置保存命令的条数
vim vim_grammar.md linux.md
:ls #缓冲区列表 %哪个缓冲区在当前容器中可见 #代表轮换文件<ctrl-^>进行快速切换
# Vim是用缓冲区列表对打开的文件进行管理的
# 选择缓冲区
:buffer N/bufname # N是Vim自动分配的编号由上面的命令行得知 bufname是文件名
:bprev
:bnext
:bfirst
:blast
#退出(保存)所有的缓冲区
:qall!
:wall
# 删除缓冲区
:bdelete N1 N2
# 用参数列表将缓冲区分组
# 查看参数列表
:args
:args *.py # 建立目标文件列表
#如果活动缓冲区的内容发生了变化,Vim会在离开缓冲区时自动将其设为隐藏(默认会有错误信息'文件已修改但未保存')
#'hidden'设置让我们用一条;argdo {cmd}或 bufdo{cmd}命令就可以修改一组缓冲区.
# 创建分割窗口
<ctrl-w>s
<ctrl-w>v
:sp[lit] {file} #载入新文件
:vsp[lit] {file}
# 关闭窗口
<ctrl-w>c #关闭活动窗口 :clo[se]
<ctrl-w>o #保存活动容器,关闭其它所有窗口 :on[ly]
# 切换窗口
<ctrl-w>w # 窗口循环切换
<ctrl-w>h j k l
#改变窗口
<ctrl-w>=
[N]<ctrl-w>_ # 最大化高度
[N]<ctrl-w>| # 宽度
[N]<ctrl-w>< # >
:tabnew # 创建新标签页
:tabe[dit] {filename} # 在新标签页打开{filename} 如果没有指定文件,会建立一个新标签页,里面包含一个空缓冲区
:<ctrl-w>T #当标签页中包含了不只一个窗口时,用此命令 把当前窗口移到一个新标签页
:tabc[lose] # 关闭当前所有标签页的窗口
:tabo[nly] # 关闭其它
[N]gt # 下 :tabn[ext]
[N]gT # 切换到上一标签页 :tabp[revious]
#Vim也有工作目录的概念,这各bash及其他shell是一样的
#相对于活动文件目录下打开一个文件
:edit %:h<Tab> # %代表活动缓冲区的完整文件路径 :h修饰符会去除文件名 也就是此命令会被展开为当前文件所有目录的路径
:set path+=app/** # 匹配app/目录下所有子目录
:find 文件名
# netrw管理文件系统
# 打开文件管理器
$ vim .
:edit %:h ==:e . ==:Explore ==:E
# 上面的操作都会代替当前的缓冲区内容
# 当要保存到不存在的目录中时
:!mkdir -p %:h #-p创建任何不存在的中间目录
# 我们可以把任务委派给一个以sudo运行的shell进程,来完成工作
:w !sudo tee % >/dev/null # :w将缓冲区的内容作为sudo tee的标准输入,%是当前文件
# 此时Vim会检测到该文件被一个外部程序改了,所以Vim会提示我们做出选择,是保留缓冲区的还是载入磁盘上的版本
vim对于ctage的支持,
1.我们可以快速地跳到到函数及类的定义之处,实现浏览整个代码库的目的.(基于标签的跳转)
2.用于建立自动补全的单词列表
sudo apt-get install exuberant-ctags
sudo apt install linuxbrew-wrapper
# 检测系统是否安装了ctags以及路径正确与否
brew install ctags
ctags --help
# 手动创建索引
cd ~/app1.6
ctags -R *
# 应该可以用!cd /home/python/app1.6 && ctags -R *
# Linux下的C/C++的程序员,使用VIM+Ctags的组合来写程序也许是最佳的选择
# 好像没有递归子目录,所以为子目录创建索引
cd main && ctags -R *
cd ../app1.6 #必须要cd到此目录或者 main目录下,可由 :set tags 查看
vim runner
# 这样本地的所有代码,都正确的创建了索引,但源代码还是没有办法创建索引
:tabnew /home/python/app1.6/runner.py
:set tags?
<ctrl-]> # 会从当前所在的关键字跳转到它的定义处 ,
g<ctrl-]>
<ctrl-t> # 充当着后退按钮
|
|
|
|
|
|
编译可分为四个阶段:
1.预处理:宏定义,头文件
2.编译:c–>汇编语言
3.汇编:汇编成目标文件 .o (二进制文件)
4.链接:把所有的目标文件和库文件链接成一个可执行的文件
-I /home/include:指定头文件路径,先找预设路径
-L /usr/lib:库文件路径,先找指定目录,再找系统预设路径
-lfun:库文件中指定函数库 libfun.a
-static:静态链接库文件 .a为后缀,将所需要的函数copy到执行文件中
而动态链接库以 .so为后缀 指明当程序执行时,首先必须载入这个库,缺省操作
-Wall:生成所有的警告信息
-g:产生调试工具所必须的
-c:只生成一个.o后缀的目标文件
|
|
|
|
当有很多个文件都需要编译时,不可能一个一个的去gcc吧
通过make命令就能够使整个软件工程完成编译和链接
make在执行行,需要一个命名为Makefile的文件,它描述了整个工程的编译,链接等规则
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dir(dir/*):表示.gitignore所在目录下的dir目录的所有内容,不会被跟踪,同时也不会生成此目录.
不可以写成./dir
|
|
|
|
通电 –>BIOS(哪个磁盘有MBR) –>MBR(哪个分区为要开启的OS) –>OS –>/boot(kernel) –>init(PID:1) –>/etc/rc*.d/ –>/etc/init.d/ –>用户登陆(/etc/profilc–>~/.profile .bash_login .bash_profile–>~/.bashrc)
/etc/rc[0~6].d 这7个目录中,每个目录分别存放着对应运行级别加载时需要关闭或启动的服务,每个脚本文件都对应着/etc/init.d/目录下具体的服务
K开头的脚本文件代表运行级别加载时需要关闭的,S开头的代表需要执行,数字代表执行顺序
因此,当我们需要开机启动自己的脚本时,只需要将可执行脚本丢在/etc/init.d目录下,然后在/etc/rc*.d中建立软链接即可
|
|
Linux 在启动的时候会执行 /etc/rc.local 里面的脚本,所以只要在这里添加执行命令就可以
|
|
systemd默认读取/etc/systemd/system下的配置文件,该目录下的文件会链接/lib/systemd/system/下的文件
也可以使用第三方包来管理启动程序
|
|
|
|
“衍生出来的进程”正是 Linux 的父子进程的概念.
当我们登录系统后,会取得一个 bash shell,然后我们利用这个 bash 提供的接口去执行另一个命令,
例如 bash 或者 ps 等.那些另外执行的命令也会被触发成为 PID,那个后来执行的命令产生的 PID 就是”子进程”,而原本的 bash 环境下,就称为”父进程”了
我所做的操作是在原来的 bash shell 中执行了 bash 命令,然后又执行了 ps -o pid,ppid,comm命令.我们可以看到
,第二个进程 bash 是第一个进程 bash 的子进程,而第三个进程ps是第二个进程的子进程
新的进程要通过老的进程复制自身得到,这就是 fork.fork 是一个系统调用.
进程存活于内存中.每个进程都在内存中分配有属于自己的一片空间 (内存空间,包含栈、堆、全局静态区、文本常量区、程序代码区).
当一个程序调用 fork 的时候,实际上就是将上面的内存空间,又复制出来一个,构成一个新的进程,
并在内核中为该进程创建新的附加信息 (比如新的 PID,而 PPID 为原进程的 PID).此后,两个进程分别地继续运行下去.
新的进程和原有进程有相同的运行状态(相同的变量值,相同的指令…).我们只能通过进程的附加信息来区分两者.
是用在 bash 环境下的,也就是说,当我们登录系统取得 bash shell 之后,在单一终端机下可以同时进行多个工作的行为管理.
假如我们只有一个终端,因此在可以出现提示符让你操作的环境就成为前台(foreground),至于其他工作就可以放在后台(background)去暂停或运行
程序调用 exec 的时候,进程清空自身的内存空间,并根据新的程序文件重建程序代码、文本常量、全局静态、堆和栈(此时堆和栈大小都为 0),并开始运行.
|
|
|
|
|
|
D(sleeping),往往是由于 I/O(磁盘IO,网络IO,其他外设IO) 资源得不到满足,而引发等待
举个例子,当 NFS 服务端关闭之时,若未事先 umount 相关目录,在 NFS 客户端执行 df 就会挂住整个登录会话,按 Ctrl+C 、Ctrl+Z 都无济于事.
断开连接再登录,执行 ps axf 则看到刚才的 df 进程状态位已变成了 D ,kill -9 无法杀灭.
正确的处理方式,是马上恢复 NFS 服务端,再度提供服务,刚才挂起的 df 进程发现了其苦苦等待的资源,便完成任务,自动消亡.若 NFS 服务端无法恢复服务,在 reboot 之前也应将 /etc/mtab 里的相关 NFS mount 项删除,以免 reboot 过程例行调用 netfs stop 时再次发生等待资源,导致系统重启过程挂起.
Z(zombie) 之所以杀不死,是因为它已经死了,否则怎么叫 Zombie(僵尸).在UNIX/Linux中,每个进程都有一个父进程,进程号叫PID(Process ID), 相应地,父进程号就叫PPID(Parent PID).
当进程死亡时,它会自动关闭已打开的文件,舍弃已占用的内存、交换空间等等系统资源,然后向其父进程返回一个退出状态值,报告死讯.如果程序有 bug,就会在这最后一步出问题.子进程说我死了,父进程却没听见,所以子进程便成了僵尸.在UNIX/Linux中消灭僵尸的手段比较残忍,执行 ps axjf 找出僵尸进程的父进程号(PPID,第一列),先杀其父,然后再由进程天子 init(其PID为1,PPID为0)来一起收拾父子僵尸.注意,子进程变成僵尸只是碍眼而已,并不碍事,如果僵尸的父进程当前有要务在身,则千万不可贸然杀之.
这些进程已经死亡,但没有释放系统资源,包括内存和一些一些系统表等,如果这样的进程很多,会引发系统问题.用ps -el看出的进程状态如果是Z,就是僵尸进程.
如果不行则看能否终止其父进程(如果其父进程不需要的话).先看其父进程又无其他子进程,如果有,可能需要先kill其他子进程,也就是兄弟进程.方法是:
内容分发网络(Content delivery network或Content distribution network,缩写:CDN)是指一种通过互联网互相连接的电脑网络系统,
利用最靠近每位用户的服务器,更快、更可靠地将音乐、图片、视频、应用程序及其他文件发送给用户,来提供高性能、可扩展性及低成本的网络内容传递给用户
访问者的每个访问请求,都会被自动发送到物理距离最近、速度最快的节点上.
将blog内容的所有的东西(图片,文字,视频)都是保存在自己的服务器中,要从自己的服务器中取得,当如果某个页面需要加载很多内容时,速度就会变慢.
而cdn就会把所以网址上的东西,全部分送到它们在全世界各地所架设的云端的伺服务器上,也就是说我的网址会被散播(拆解)到全世界的伺服务器上,取最近的.
您的网站内容将被缓存在 CloudFlare 的节点中,访问者并不直接从您的主机获取内容,从而最大限度地节省主机的流量
同时网站的下载速度也会比以往的快些.
cloudflare是一个国外著名的免费CDN网站加速服务公司
甚至可以在网站主服务器宕机的情况下,访问者依然可以通过 CloudFlare 的分发服务器访问到您的网站
|
|
|
|
|
|
Windows、Linux、macOS、Android
安装启动即可,会自动去设置代理,不过每月只有500M免费流量
代理端口 HTTP(S):40427 ,SOCKS5:42409
Windows、Linux、macOS、Android
代理端口 HTTP:8087 ,SOCKS5:1080
安装使用
|
|
需要自己搭建VPS,方法如下 这个是我大哥自己搭建的一些ss帐号
|
|
如果没有成功,可能是因为/root/ss/ssserver.json 的server_ip的原因,我买了个国际阿里云的ECS服务器,我写的是公网的IP,结果一直运行不起来
因为公网是通过nat IP实现的(所以在安全组中只能是选择内网进行配置),所以改成Privaty IP就可以正常启动了,最好是设置为0.0.0.0就好.
阿里云的ECS服务器上配置使用任意端口的服务后,端口会自动开启监听,但它还有一个安全组的概念,最好设置一个(内网 入 允许 全部 -1/-1 0.0.0.0/0 优先级110)
这样就完全可以由ECS的系统完全的操作防火墙,就像没有安全组概念一样了.
server_centos7 install BBR 要注意下sudo grub2-set-default 0,应该是为0的,使用最新的,文档却写成了1
|
|
注意:一定要再去配置下代理Pxory 0.0.0.0:1081 或者用本地的.pac文件,Local Port就必须和service.pac文件(此文件是过滤网址用的,如果访问文件中的网址则走代理)启动的端口一致.
http://pac.ddcc.me/1.pac == local.pac
在国际里云购买的ESC,配置好shadowsocks之后,在手机上能正常使用,也不需要去设置代理,但在Ubuntu桌面下却一直用不了
server端
ssr_client端
代理端口 HTTP:4444, https:4445
|
|
补种
首次安装时,请不要忘记如果可能请调整您的 NAT/防火墙. 需要转发的端口可以通过路由控制台的 网络配置页面查看. 如果需要端口转发/端口映射方面的帮助,portforward.com可能会对您有用
请到配置页面, 检查并调整带宽设置,因为默认设置的 96 KB/s 下行 / 40 KB/s 上行相当保守
如果您希望通过浏览器访问I2P暗网内的网站, 您需要参看 浏览器代理设置 页面了解基本设置方法
|
|
是一款跨平台的文件同步工具,让你在几台不同的设备之间,同步文件,文件不经过任何云端服务器,文件只在客户端之间直接传输,十分安全私密.正是因为这一点,因此很快成为文件共享的热门应用,大家既可以配合 VPS,用它来搭建一个网盘,也可以借助他的共享能力用来和朋友共享文件
|
|
|
|
|
|