BoxCore

Start


  • 首页

  • 分类

  • 关于

  • 归档

  • 标签

  • 站点地图

  • 搜索

Dropbox使用

发表于 2018-05-01 | | 阅读次数

dropbox是国外较大的网盘之一,居于国内网盘的尿性及审查,博主就经常使用它同步自己重要的文(zhong)件(zi)了。如果还没有账号的,点这个 直通车 直达注册页面,会比普通注册多出1GB的空间喂。

另外,注册后由于dropbox安装的尿性,可能屡次失败,在国内的用户还是下好离线安装包再搞吧。废话不多说,直接上说明:

linux安装dropbox命令工具

参考:https://www.dropbox.com/install-linux

1
2
3
4
5
6
7
8
9
10
cd ~ && wget -O dropbox.tar.gz "https://www.dropbox.com/download?plat=lnx.x86"
cd ~ && wget -O dropbox.tar.gz "https://www.dropbox.com/download?plat=lnx.x86_64"
tar xzf dropbox.tar.gz
# ln -svf ~/.dropbox-dist/dropboxd /usr/local/
wget -O 'dropbox.py' https://www.dropbox.com/download?dl=packages/dropbox.py #下载官方的服务管理脚本
mv dropbox.py ~/.dropbox-dist/
chmod +x ~/.dropbox-dist/dropbox.py
ln -svf ~/.dropbox-dist/dropbox.py /usr/local/bin/dbox

centos 6下添加服务:

vi /etc/init.d/dropboxd
添加如下内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# chkconfig: 345 85 15
# description: Startup script for dropbox daemon
#
# processname: dropboxd
# pidfile: /var/run/dropbox.pid
#
# Source function library.
. /etc/rc.d/init.d/functions
DROPBOX_USERS="root www"
prog=dropboxd
lockfile=${LOCKFILE-/var/lock/subsys/dropbox}
RETVAL=0
start() {
echo -n $"Starting $prog"
for dbuser in $DROPBOX_USERS; do
daemon --user $dbuser /bin/sh -c "~/.dropbox-dist/dropboxd&"
done
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch ${lockfile}
return $RETVAL
}
stop() {
echo -n $"Stopping $prog"
for dbuser in $DROPBOX_USERS; do
killproc ~/.dropbox-dist/dropboxd
done
RETVAL=$?
echo
[ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
*)
echo $"Usage: $prog {start|stop|restart}"
RETVAL=3
esac
exit $RETVAL

再执行下面的命令,使得dropbox能开机启动

1
2
3
sudo chmod +x /etc/init.d/dropboxd
sudo /etc/init.d/dropboxd start
chkconfig dropboxd on

dbox命令帮助

  • help

    dropbox help [命令]
    在没有参数时,会输出命令列表及每个命令的简短说明。如果加上命令,则输出有关如何使用该命令的说明性帮助。

  • status

    dropbox status:
    输出 Dropbox 守护程序的最新状态。

  • puburl

    dropbox puburl 文件
    输出文件的公开链接网址。只在您的帐户已启用公共文件夹时才有效。此命令只能对公共文件夹中的文件使用。

  • stop

    dropbox stop:
    停止 Dropbox 守护程序。

  • running

    dropbox running:
    守护程序正在运行时返回 1;守护程序不在运行时返回 0 。此命令只能用在脚本中,作用是检查 Dropbox 是否在运行。此命令不会输出任何内容到 CLI。

start

Dropbox start [-i]
启动 Dropbox 守护程序。如果守护程序已在运行,此命令没有任何作用。 如果系统上没有 Dropbox 守护程序,您可以选用 -i 或 i–install 来自动安装。

filestatus

dropbox file status [-l] [-a] [文件]…
输出每个文件的最新状态。

选项:

-l 或 –list:以类似于原生 Linux 命令“ls”的格式来输出信息。
-a 或 –all :不要忽略以“.”开头的项目。
别名包括 stat。

ls

dropbox ls [文件]…
这是 filestatus -l 的别名。

autostart

dropbox autostart [y/n]
选项:

n:Dropbox 不会在登录时自动启动。
y:Dropbox 会在登录时自动启动(默认)。
此命令可能只在当前受支持的 Ubuntu 分发版本上有效。

exclude

dropbox exclude [列表]
使用列表或不使用参数时,输出当前已从同步中排除的目录列表。

dropbox exclude add [目录] [目录] …
将一个或多个命令添加到排除列表中,然后重新同步 Dropbox。

dropbox exclude remove [目录] [目录] …
从排除列表中删除一个或多个目录,然后重新同步 Dropbox。

注意:指定的任何路径都必须在 Dropbox 文件夹内。

lansync

dropbox LAN 同步 [y/n]
选项:

y:Dropbox 将使用 LAN 同步(默认)。
n:Dropbox 将不会使用 LAN 同步。
sharelink

dropbox sharelink 文件
输出文件的共享链接。

文件:文件的绝对路径

  • proxy

    dropbox proxy 模式 [类型] [主机] [端口] [用户名] [密码]
    手动为 Dropbox 设置代理。

    模式为下列值之一:none、auto、manual
    下列参数只在 manual 模式中有效:
    类型为下列值之一:http、socks4、socks5
    主机:代理主机名
    端口:代理端口
    用户名:代理用户名(可选)
    密码:代理密码(可选)

  • throttle

    dropbox throttle DOWNLOAD UPLOAD:
    为文件同步设置带宽限制。

    • DOWNLOAD 为 unlimited 或手动设置的以 KB/秒为单位的上限
    • UPLOAD 为下列值之一:unlimited、auto 或手动设置的以 KB/秒为单位的上限

参考

  • Dropbox注册

Thinkphp学习笔记

发表于 2018-04-29 | 分类于 php | | 阅读次数

i
thinkphp 3迁移5
thinkphp5 学习笔记

vscode编辑器深入浅出

发表于 2018-04-24 | 分类于 topic , editor | | 阅读次数
  1. vscode手册支持
  2. 使用snippet简化代码工作: 官方手册

产品设计UML基础

发表于 2018-04-24 | 分类于 topic | | 阅读次数

一、各种图

  • 有向无环图(DAG):如果一个有向图从任意顶点出发无法经过若干条边回到该点,则这个图是一个有向无环图(DAG图).因为有向图中一个点经过两种路线到达另一个点未必形成环,因此有向无环图未必能转化成树,但任何有向树均为有向无环图。

Git初探

发表于 2018-04-23 | 分类于 git | | 阅读次数

[TOC]
Git是一个开源的分布式版本控制软件。

背景

  • 2002 年之前:Linux 内核维护工作的绝大部分时间都浪费在提交补丁与保存归档等繁琐事务上。
  • 2005 年,迫于无奈,Linus Torvalds 自行开发了一套开源版本控制工具,并命名为 Git。

自诞生以来,Git 就以其开源、简单、快捷、分布式、高效等特点,应付了类似 Linux 内核源代码等各种复杂的项目开发需求。如今,Git 已经非常成熟,被广泛接受与使用,越来越多的项目都迁移到 Git 仓库中进行管理。

一、Why Git?

实际上,相对于 CVS、SVN 等主流版本控制软件,Git的学习成本甚至会更高。比如,对于 Subversion 用户而言,如果能理解什么是文件、工作目录、资源库、版本、分支和标签等概念,差不多就够用了。而对于 Git 用户,需要理解更多更复杂的概念,包括文件、快照、工作树、索引、本地资源库、远程资源库、远程、提交、分支和 Stash 等。那么,为什么软件开发者对 Git 还是趋之若鹜呢?相比于 CVS 与 SVN,Git 的优势到底体现在哪里?

关于 Git 的各种优势,互联网以及各种 Git 书籍都给出了自己的答案。笔者认为,存储快照与分布式的设计思想是 Git 的 2 大看点,理由如下:

第一,Git 底层自行维护的存储文件系统是一大亮点。CVS、SVN 底层采用的为增量式文件系统,如图 1 所示。增量式文件系统的特点是:当文件变动发生提交时,该文件系统存储的是文件的差异信息。

图 1. CVS、SVN 记录文件内容差异
CVS、SVN 记录文件内容差异

同样是文件变更提交,Git 底层文件系统存储的则为文件快照,即整个文件内容,并保存指向快照的索引,如图 2 所示。考虑到性能因素,如果文件内容没有发生任何变化,该文件系统则不会重复保存文件,只是简单地保存文件的链接。

图 2. Git 记录整个文件快照

Git 之所以选择这样的底层存储数据结构,主要是为了提高 Git 分支的使用效率。实际上,Git 分支本质上是一个指向索引对象的可变指针,而每一个索引对象又指向文件快照,如图 3 所示。

图 3. Git 分支对应的数据结构

这样一来,创建分支可以瞬间完成,几乎不需要花费太多代价。换句话说,Git 分支是廉价的、轻量级的。我们看看各种 CVS、SVN 项目,分支通常意味着源代码的完整拷贝,其代价是昂贵的、重量级的。而对于大型项目来说,创建各种分支又是十分必要的,这与 Git 鼓励频繁创建与合并分支的理念相吻合。

第二,Git 版本控制系统的设计思想是”去中心化”。传统的 CVS 、SVN 等工具采用的是 C/S 架构,只有一个中心代码仓库,位于服务器端。而一旦由于服务器系统宕机、网络不通等各种原因造成中心仓库不可用,整个 CVS 、SVN 系统的代码检入与检出就瘫痪了。即便考虑到高可用性,通过迁移另一个中心仓库继续代码提交操作,相应的运营维护成本也会随之上升。

为了摆脱对中心仓库的依赖,Git 的初始设计目标之一就是分布式控制管理。我们给出一个样例,如图 4 所示。假如我们成立一个项目组,开发者主要由 Alice、Bob、Clair、David 四名成员组成。其中,除了中心仓库 origin(Git 默认远程仓库名称)之外,每一名成员各自负责一个本地仓库。从分布式的观点来看,David 可看成是 Alice 的远程仓库,反过来也是一样。Git 分布式的设计理念有助于减少对中心仓库的依赖,从而有效降低中心仓库的负载,改善代码提交的灵活性。

图 4. Git 分布式工作示意图

Git 分布式设计思想所带来的另外一大好处是支持离线工作。离线工作的好处不言而喻,对于 CVS、SVN 这种严重依赖网络的 C/S 工具而言,没有了网络或者 VPN ,就意味着失去了左膀右臂,代码检入与检出操作就无法正常进行。而一旦使用 Git ,即便在没有 WIFI 的飞机或者火车上,照样可以频繁地提交代码,只不过先提交到本地仓库,等到了网络连通的时候,再上传到远程的镜像仓库。

工欲善其事,必先利其器。在理解 Git 灵活的快照存储与分布式设计理念之后,我们介绍 Git 针对不同操作系统的安装过程。需要指出的是,这里仅仅粗线条地介绍 Git 的安装方法, 至于 Git 安装前提条件、安装过程出现的问题诊断等更加详细的内容描述,均不在本文的讨论范围。

各个主流版本管理工具区分

特征 CVS Git Mercurial Subversion
是否原子提交 CVS:❌ Git: ✅ Mercurial:✅ Subversion:✅
文件和目录是否可以移动或重命名 CVS: ❌ Git: ✅ Mercurial: ✅ Subversion: ✅
在移动或重命名之后智能合并 CVS: ❌ Git: ❌ Mercurial: ✅ Subversion: ❌
文件和目录拷贝 CVS: ❌ Git: ❌ Mercurtial: ✅ Subversion: ✅
远程存储仓库的备份 CVS: ⛔ 使用插件实现 Git: ✅ Mercurial: ✅ Subversion: ⛔ 插件实现
是否传递变更到父仓库 CVS: ❌ Git: ✅ Mercurtial: ✅ Subversion: ⛔ 插件实现
仓库权限 CVS: ⛔很有限 Git: ✅ Mercutial: ✅ Subversion: ✅
变更集 CVS: ❌ Git: ✅ Mercurial: ✅ Subversion: ⛔部分支持
能够只在仓库的单目录下作用 CVS: ✅ Git: ❌ ✅ Subversion: ✅
跟踪未提交的变化 CVS: ✅ Git: ✅ Mercurial: ✅ Subversion: ✅
基于单个文件的提交信息 CVS: ❌ Git: ✅ Mercurial: ❌ Subversion: ❌

>> 更多对比项

git各个版本对比

二、入门

2.1 安装git

2.1.1 window下安装

  • git-scm: 有cmd支持,及简陋的gui支持
  • TortoiseGit: windows下git gui工具,TortoiseSVN风格

2.1.2 linux下安装Git

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
###### 简单粗暴用包管理工具安装
yum install git
apt-get install git-core # for ubuntu
###### 编译安装
yum install gettext curl curl-devel zlib-devel openssl-devel perl cpio expat-devel gettext-devel -y
yum -y install zlib-devel curl-devel openssl-devel perl cpio expat-devel gettext-devel openssl zlib autoconf tk perl-ExtUtils-MakeMaker
wget https://github.com/git/git/archive/v2.11.0.tar.gz
tar xzvf v2.11.0.tar.gz
cd git-2.11.0
autoconf
./configure
make
sudo make install
cd ../
rm -rf v2.11.0.tar.gz git-2.11.0
git --version

2.1.3 mac下安装git

  • idea/phpstrom/webstrom: git扩展
  • brew install git

其他安装可以在eclipse或者idea中安装对应的git插件,另外推荐vscode - 原生支持git的文本编辑器!

2.2 git配置

git有2个配置,一个是全局配置,一个是项目配置。在git中修改配置是通过命令git config来进行配置的,如果需要配置全局的参数,需要带上 --globa参数,如git config --global user.name='xxoo'。

  • ~/.gitconfig: 这是 Git 存储全局配置选项的地方。你可以通过 ~/.gitconfig 文件来做大量的事,包括定义别名、永久性打开(或关闭)特定命令选项,以及修改 Git 工作方式(例如,git diff 使用哪个 diff 算法,或者默认使用什么类型的合并策略)。你甚至可以根据仓库的路径有条件地包含其他配置文件!所有细节请参阅 man git-config, 默认的,刚安装好的git需要配置用户和邮箱:

    git config –global user.name=’your name’
    git config –global user.email=’yourmail@mail.com’

  • .git/config:这里是指项目下的.git/config文件,项目的config配置都将存储在这个文件中。.git目录简要说明:

子目录名 简要描述
branches Git 项目分支信息,新版 Git 已经不再使用该目录。
config Git 项目配置信息
description Git 项目描述信息
HEAD 指向 Git 项目当前分支的头指针
hooks 默认的”hooks”脚本,被特定事件发生前后触发。
info 里面含一个 exclude 文件,指 Git 项目要忽略的文件。
objects Git 的数据对象,包括:commits, trees, blobs, tags。
refs 指向所有 Git 项目分支的指针

常用全局配置范例

1
2
3
4
git config --global user.name "your username"
git config --global user.email "your email address"
git config --global core.autocrlf true
git config --global core.safecrlf true

2.3 git基础命令

  • git status: 查看git状态,类似于svn 的 svn status
  • git clone: 克隆源码,类似于svn 的 svn checkout
  • git add: 将文件添加到缓冲区
  • git commit : 提交文件到版本
  • git push: 推送版本到远程仓库
  • git checkout: 恢复修改的文件
  • git mv|rm: 迁移或删除文件

2.4 深入浅出git核心概念

Git 对象模型

Git对象模型是Git设计思想中最核心的部分,理解 Git对象模型是理解整个 Git 的关键。每个 Git 对象包含三部分:类型,大小和内容。其中,对象的类型又分为 commits, trees, blobs, tags,其简要说明如下:

  • blob 对象:一块二进制数据,用来存储文件数据,通常是一个文件。
  • tree 对象:指向 blob 对象或是其它 tree 对象的指针,一般用来表示内容之间的目录层次关系。
  • commit 对象:一个 commit 对象只指向一个 tree 对象,用来标记项目某一个特定时间点的状态,如时间戳、父对象、作者、提交者等。
  • tag 对象:与 CVS、SVN 标签的概念类似。

Git 三种状态

Git 仓库模型大致分为三个工作区域,分别为工作目录(Working Directory),暂存区域(Stage 或 Index),以及本地仓库(History),相应的检入与检出命令如图:

  • git add files:把当前工作文件拷贝到暂存区域。
  • git commit:在暂存区域生成文件快照并提交到本地仓库。
  • git reset – files:用来撤销最后一次 git add files,也可以用 git reset 撤销所有暂存区域文件。
  • git checkout – files:把文件从暂存区域覆盖到工作目录,用来丢弃本地修改。

Git 三种状态之间的转换

Git 分支模型

三、工具

  • Cmder:window下terminal工具
  • iTerm: mac下terminal工具
  • git-scm

课前准备

  1. GIT-SCM:https://git-scm.com/downloads
  2. cmder (window用户cmd替代工具):https://github.com/cmderdev/cmder/releases
  3. homebrew(Mac用户terminal工具):https://brew.sh/
  4. TortoiseGit(Win用户Git-GUI工具):https://tortoisegit.org/download/

四、实战

4.1 svn-git互转

4.2 分支提交、合并

总结

本次前沿部分主要给大家分享git入门相关的基础原因、基础命令的使用以及git跟svn的差异,在后续很多前沿项目中都有可能会用到此工具,希望大家能通过这次分享理解git的原理及基础的用法。

扩展&参考

  • 我的PPT地址
  • 开源分布式版本控制工具 —— Git 之旅
  • http://slides.com/jenghung/git#/29
  • 码云平台帮助文档 V1.2

emoji:

  • https://emojipedia.org/
  • https://www.emojicopy.com/

jetbrains系列软件激活(idea等)

发表于 2018-04-19 | 分类于 tools | | 阅读次数

JetBrains系列软件注册码(适用于2018版):
亲测试 idea、datagrap可以使用

1
K71U8DBPNE-eyJsaWNlbnNlSWQiOiJLNzFVOERCUE5FIiwibGljZW5zZWVOYW1lIjoibGFuIHl1IiwiYXNzaWduZWVOYW1lIjoiIiwiYXNzaWduZWVFbWFpbCI6IiIsImxpY2Vuc2VSZXN0cmljdGlvbiI6IkZvciBlZHVjYXRpb25hbCB1c2Ugb25seSIsImNoZWNrQ29uY3VycmVudFVzZSI6ZmFsc2UsInByb2R1Y3RzIjpbeyJjb2RlIjoiSUkiLCJwYWlkVXBUbyI6IjIwMTktMDUtMDQifSx7ImNvZGUiOiJSUzAiLCJwYWlkVXBUbyI6IjIwMTktMDUtMDQifSx7ImNvZGUiOiJXUyIsInBhaWRVcFRvIjoiMjAxOS0wNS0wNCJ9LHsiY29kZSI6IlJEIiwicGFpZFVwVG8iOiIyMDE5LTA1LTA0In0seyJjb2RlIjoiUkMiLCJwYWlkVXBUbyI6IjIwMTktMDUtMDQifSx7ImNvZGUiOiJEQyIsInBhaWRVcFRvIjoiMjAxOS0wNS0wNCJ9LHsiY29kZSI6IkRCIiwicGFpZFVwVG8iOiIyMDE5LTA1LTA0In0seyJjb2RlIjoiUk0iLCJwYWlkVXBUbyI6IjIwMTktMDUtMDQifSx7ImNvZGUiOiJETSIsInBhaWRVcFRvIjoiMjAxOS0wNS0wNCJ9LHsiY29kZSI6IkFDIiwicGFpZFVwVG8iOiIyMDE5LTA1LTA0In0seyJjb2RlIjoiRFBOIiwicGFpZFVwVG8iOiIyMDE5LTA1LTA0In0seyJjb2RlIjoiR08iLCJwYWlkVXBUbyI6IjIwMTktMDUtMDQifSx7ImNvZGUiOiJQUyIsInBhaWRVcFRvIjoiMjAxOS0wNS0wNCJ9LHsiY29kZSI6IkNMIiwicGFpZFVwVG8iOiIyMDE5LTA1LTA0In0seyJjb2RlIjoiUEMiLCJwYWlkVXBUbyI6IjIwMTktMDUtMDQifSx7ImNvZGUiOiJSU1UiLCJwYWlkVXBUbyI6IjIwMTktMDUtMDQifV0sImhhc2giOiI4OTA4Mjg5LzAiLCJncmFjZVBlcmlvZERheXMiOjAsImF1dG9Qcm9sb25nYXRlZCI6ZmFsc2UsImlzQXV0b1Byb2xvbmdhdGVkIjpmYWxzZX0=-Owt3/+LdCpedvF0eQ8635yYt0+ZLtCfIHOKzSrx5hBtbKGYRPFDrdgQAK6lJjexl2emLBcUq729K1+ukY9Js0nx1NH09l9Rw4c7k9wUksLl6RWx7Hcdcma1AHolfSp79NynSMZzQQLFohNyjD+dXfXM5GYd2OTHya0zYjTNMmAJuuRsapJMP9F1z7UTpMpLMxS/JaCWdyX6qIs+funJdPF7bjzYAQBvtbz+6SANBgN36gG1B2xHhccTn6WE8vagwwSNuM70egpahcTktoHxI7uS1JGN9gKAr6nbp+8DbFz3a2wd+XoF3nSJb/d2f/6zJR8yJF8AOyb30kwg3zf5cWw==-MIIEPjCCAiagAwIBAgIBBTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBMB4XDTE1MTEwMjA4MjE0OFoXDTE4MTEwMTA4MjE0OFowETEPMA0GA1UEAwwGcHJvZDN5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxcQkq+zdxlR2mmRYBPzGbUNdMN6OaXiXzxIWtMEkrJMO/5oUfQJbLLuMSMK0QHFmaI37WShyxZcfRCidwXjot4zmNBKnlyHodDij/78TmVqFl8nOeD5+07B8VEaIu7c3E1N+e1doC6wht4I4+IEmtsPAdoaj5WCQVQbrI8KeT8M9VcBIWX7fD0fhexfg3ZRt0xqwMcXGNp3DdJHiO0rCdU+Itv7EmtnSVq9jBG1usMSFvMowR25mju2JcPFp1+I4ZI+FqgR8gyG8oiNDyNEoAbsR3lOpI7grUYSvkB/xVy/VoklPCK2h0f0GJxFjnye8NT1PAywoyl7RmiAVRE/EKwIDAQABo4GZMIGWMAkGA1UdEwQCMAAwHQYDVR0OBBYEFGEpG9oZGcfLMGNBkY7SgHiMGgTcMEgGA1UdIwRBMD+AFKOetkhnQhI2Qb1t4Lm0oFKLl/GzoRykGjAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBggkA0myxg7KDeeEwEwYDVR0lBAwwCgYIKwYBBQUHAwEwCwYDVR0PBAQDAgWgMA0GCSqGSIb3DQEBCwUAA4ICAQC9WZuYgQedSuOc5TOUSrRigMw4/+wuC5EtZBfvdl4HT/8vzMW/oUlIP4YCvA0XKyBaCJ2iX+ZCDKoPfiYXiaSiH+HxAPV6J79vvouxKrWg2XV6ShFtPLP+0gPdGq3x9R3+kJbmAm8w+FOdlWqAfJrLvpzMGNeDU14YGXiZ9bVzmIQbwrBA+c/F4tlK/DV07dsNExihqFoibnqDiVNTGombaU2dDup2gwKdL81ua8EIcGNExHe82kjF4zwfadHk3bQVvbfdAwxcDy4xBjs3L4raPLU3yenSzr/OEur1+jfOxnQSmEcMXKXgrAQ9U55gwjcOFKrgOxEdek/Sk1VfOjvS+nuM4eyEruFMfaZHzoQiuw4IqgGc45ohFH0UUyjYcuFxxDSU9lMCv8qdHKm+wnPRb0l9l5vXsCBDuhAGYD6ss+Ga+aDY6f/qXZuUCEUOH3QUNbbCUlviSz6+GiRnt1kA9N2Qachl+2yBfaqUqr8h7Z2gsx5LcIf5kYNsqJ0GavXTVyWh7PYiKX4bs354ZQLUwwa/cG++2+wNWP+HtBhVxMRNTdVhSm38AknZlD+PTAsWGu9GyLmhti2EnVwGybSD2Dxmhxk3IPCkhKAK+pl0eWYGZWG3tJ9mZ7SowcXLWDFAk0lRJnKGFMTggrWjV8GYpw5bq23VmIqqDLgkNzuoog==

如果显示验证码被取消,可以配置hosts屏蔽

0.0.0.0 account.jetbrains.com

感兴趣的话,也可以申请下麻烦的教育激活码:https://www.jetbrains.com/shop/eform/students

其他在线激活清单:

  • http://intellij.mandroid.cn/
  • http://idea.imsxm.com/
  • http://idea.iteblog.com/key.php

更多方法参考这里:http://idea.lanyus.com/

《MySQL技术内幕》Note

发表于 2018-04-18 | 分类于 books | | 阅读次数
  • 第一本读完的mysql书
  • 时间

阅读前准备

书中的示例一共用到三个数据库文件:一个是 employees 数据库,该数据库是 MySQL 数据库官方提供的示例数据库,主要用来模拟公司员工的数据,用户可以通过官网下载 (http://dev.mysql.com/doc/index-other.html);另一个是 dbt3 数据库,是通过 Database Test Suite 程序生成的,该数据库较大,主要用来展示一些复杂的查询;还有一个 tpcc 数据库,是一个模拟 TPC-C 测试的数据库,用户可以从http://code.google.com/p/david-mysql-tools/下载

字节B(Byte), 1B=8bit(位)
字符与字节:

  • ASCII码: 一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间
  • UTF-8编码:一个英文字符等于一个字节,一个中文(含繁体)等于三个字节。中文标点占三个字节,英文标点占一个字节
  • Unicode编码:一个英文等于两个字节,一个中文(含繁体)等于两个字节。中文标点占两个字节,英文标点占两个字节

国际单位制(SI)
1KB=1000B;1MB=1000KB=1000×1000B。其中1000=103。
1B(byte,字节)= 8 bit

一、SQL编程

二、数据类型

2.1 类型属性

2.1.1 UNSIGNED

1
2
3
4
5
6
7
create database book_mysql default character set utf8;
use book_mysql;
create table t ( a int unsigned, b int unsigned) engine=InnoDB;
insert into t select 1,2;
select * from t\G;
select a-b from t;
-- mac下报错:ERROR 1690 (22003): BIGINT UNSIGNED value is out of range in '(`book_mysql`.`t`.`a` - `book_mysql`.`t`.`b`)'

在 MySQL 数据库中,对于 UNSIGNED 数的操作,其返回值都是 UNSIGNED 的, C语言内部会将其转为最大值,即0xFFFFFFFF (4294967295)。这样需要在mysql中设置

SET sql_mode=’NO_UNSIGNED_SUBTRACTION’;

这时候就返回了-1

2.1.2 ZEROFILL

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
mysql> show create table t\G;
***************************[ 1. row ]***************************
Table | t
Create Table | CREATE TABLE `t` (
`a` int(10) unsigned DEFAULT NULL,
`b` int(10) unsigned DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set
Time: 0.012s
mysql> select * from t\G;
mysql> alter table t change column a a int(4) unsigned zerofill;
mysql> select * from t\G;
*************************** 1. row ***************************
a: 0001
b: 2
1 row in set (0.00 sec)
mysql> select a,hex(a) from t\G;
*************************** 1. row ***************************
a: 0001
hex(a): 1
1 row in set (0.01 sec)

zerofill字段,在数据内部存储的还是原来的数字,前面的0是zerofill属性后的一种格式输出而已

2.2 SQL_MODE设置

1
2
3
4
5
6
> mysql: select @@global.sql_mode\G; -- 全局sql_mode设置
@@global.sql_mode: STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
> select @@session.sql_mode\G; -- 当前会话sql_mode设置
@@session.sql_mode: NO_UNSIGNED_SUBTRACTION
1 row in set (0.00 sec)
  • STRICT_TRANS_TABLES:在该模式下,如果一个值不能插人到一个事务表(例如表的存储引擎为 InnoDB)中,则中断当前的操作不影响非事务表(例如表的存储引擎为 MyISAM)。

  • ALLOW_INVALID_DATES:该选项并不完全对日期的合法性进行检查,只检查月份是否在 1~12 之间,日期是否在 1 ~31 之间。该模式仅对 DATE 和 DATETIME 类型有效,而对 TIMESTAMP 无效,因为 TIMESTAMP 总是要求一个合法的输人。

  • ANSI_QUOTES:启用 ANSI_QUOTES 后,不能用双引号来引用字符串,因为它将被解释为识别符

  • ERROR_FOR_ DIVISION_BY_ZERO:在 INSERT 或 UPDATE 过程中,如果数据被零除(或 MOD (X, 0)),则产生错误(否则为警告)。如果未给出该模式,那么数据被零除时 MySQL 返回 NULL。如果用到 INSERT IGNORE 或 UPDATE IGNORE 中,MySQL 生成被零除警告,但操作结果为 NULL。

  • HIGH_NOT_PRECEDENCE NOT:操作符的优先顺序是表达式。例如,NOT a BETWEEN b AND c 被解释为 NOT (a BETWEEN b AND c),在一些旧版本 MySQL 中,前面的表达式被解释为(NOT a) BETWEEN b AND C。启用 HIGH NOT PRECEDENCE SQL 模式,可以获得以前旧版本的更高优先级的结果。

  • IGNORE_SPACE:函数名和括号“(”之间有空格。除了增加一些烦恼,这个选项好像没有任何好处,要访问保存为关键字的数据库、表或列名,用户必须引用该选项。例如某个表中有 user 这一列,而 MySQL 数据库中又有 user 这个函数,user 会被解释为函数,如果想要选择 user 这一列,则需要引用。

  • NO_AUTO_CREATE_USER:禁止 GRANT 创建密码为空的用户。

  • NO_AUTO_VALUE_ON_ZERO:该选项影响列为自增长的插入。在默认设置下,插入 0 或 NULL 代表生成下一个自增长值。如果用户希望插入的值为 0,而该列又是自增长的,那么这个选项就有用了。

  • NO_BACKSLASH_ESCAPES:反斜杠“\”作为普通字符而非转义符,示例如下:

    1
    2
    3
    4
    set sql_mode='';
    select '\\'\G;
    set sql_mode='NO_BACKSLASH_ESCAPES';
    select '\\'\G;
  • NO_DIR_IN_CREATE:在创建表时忽视所有 INDEX DIRECTORY 和 DATADIRECTORY 的选项。

  • NO_ENGINE_SUBSTITUTION:如果需要的存储引擎被禁用或未编译,那么抛出错误。默认用默认的存储引擎替代,并抛出一个异常。
  • NO_UNSIGNED_SUBTRACTION:之前已经介绍过,启翩这个选项后两个 UNSIGNED 类型相减返回 SIGNED 类型。
  • NO_ZERO_DATE:在非严格模式下,可以插入形如“0000-00-00 00:00:00”的非法日期,MySQL 数据库仅抛出一个警告。而启用该选项后,MySQL 数据库不允许插人零日期,插人零日期会抛出错误而非警告。
  • NO_ZERO_IN_DATE:在严格模式下,不允许日期和月份为零。如“2011-00-01”和“2011-01-00”这样的格式是不允许的。采用日期或月份为零的格式时 MySQL 都会直接抛出错误而非警告,示例如下:
1
2
3
4
5
6
7
8
9
10
11
mysql> SET sql_ mode= 'NO_ ZERO_ IN_ DATE';
Query OK, 0 rows affected (0.00 sec)
mysql> CREATE TABLE a (a DATETIME);
Query OK,0 rows af fected (0.04 sec)
mysql> INSERT INTO a SELECT '2011-01-00';
ERROR 1292 (22007): Incorrect datet ime value: '2011-01-00' for column 'a' at row 1
  • ONLY_FULL_GROUP_BY:对于 GROUPBY 聚合操作,如果在 SELECT 中的列没有在 GROUP BY 中出现,那么这句 SQL 是不合法的,因为 a 列不在 GROUPBY 从句中,示例如下:

    1
    2
    SET sql_mode= 'ONLY_FULL_GROUP_BY';
    SELECT a, SUM (b) FROM t GROUP BY b;
  • PAD_CHAR__TO_FULL_LENGTH:对于 CHAR 类型字段,不要截断空洞数据。空洞数据就是自动填充值为 0 x20 的数据。先来看 MySQL 数据库在默认情况下的表现。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    mysql> CREATE TABLE (a CHAR (10));
    Query OK,0 rows affected (0.04 sec)
    mysql> INSERT INTO t SELECT 'a';
    Query OK,1 row affected (0.01 sec) Records; 1 Duplicates: 0 Warnings: 0
    mysql> SELECT a, CHAR LENGTH (a), HEX (a) FROM t\G;
    ★************************** 1. Row ***********************★★★★
    a: a CHAR LENGTH (a): 1
    HEX (a): 61
    1 row in set (0.04 sec)

可以看到,在默认情况下,虽然 a 列是 CHAR 类型,但是返回的长度是 1, 这是因为 MySQL 数据库已经对后面的空洞数据进行了截断。若启用 PAD CHAR TO FULL LENGTH 选项,则反映的是实际存储的内容,例如:

1
2
3
4
5
6
mysql> SELECT a, CHAR LENGTH (a), HEX (a) FROM t\G;
***************************1. Row *★★**★*****★*********★**★★*
a: a
CHAR LENGTH (a): 10
HEX (a): 61202020202020202020
1 row in set (0.00 sec)

可以看到在 CHAR 列 a 中实际存储的值为 0 x61202020202020202020。

  • PIPES_AS_CONCAT:将“”视为字符串的连接操作符而非或运算符,这和 Oracle 数据库是一样的,也和字符串的拼接函数 Concat 相类似,例如:

    1
    2
    SET sq1_mode= 'pipes_as_concat';
    SelECT 'a'||'b'||'c'\G;
  • REAL_AS_FLOAT:将 REAL 视为 FLOAT 的同义词,而不是 DOUBLE 的同义词。

  • STRICT_ALL_TABLES:对所有引擎的表都启用严格模式。(STRICT_TRANS_TABLES 只对支持事务的表启用严格模式)。

在严格模式下,一旦任何操作的数据产生问题,都会终止当前的操作。对于启用 STRICT_ALL_TABLES 选项的非事务引擎来说,这时数据可能停留在一个未知的状态。这可能不是所有非事务引擎愿意看到的一种情况,因此需要非常小心这个选项可能带来的潜在影响。

2.3 日期和时间类型

TODO:暂不阅读

Winrar去广告

发表于 2018-04-17 | 分类于 window , 软件 | | 阅读次数

1.下载WinRAR 5.5WinRAR官网(http://www.rarlab.com)
2.下载 Resource Hacker.
3.用压缩软件打开WinRAR安装包,提取 WinRAR.exe
4.打开Resource Hacker,
点击菜单,点击打开,浏览刚才提取出来的WinRAR.exe,浏览到后点击打开。
展开”字串表”
找到80 2052右键,点删除红色中的一个#。
或者在右侧定位到:
1272, “##0aN9=>34_9hwrq>(-dd-qhjucw.il*dl*skiv[6,mtnj>H:5&bo;6&q?$Vscswhldl&g<$F&vr;svk2Q;hwrq>(-dd-qhjucw.ildlskiv[5,mtnj>H:5&bo;6&q?$Vscswhldl&g<$F&vr;svk14mLgA36^>hwrq>(-dd-qhjucw.il*dl*skiv[5,mtnj>H:5&bo;6&q?$Vscswhldl&g<$F&vr;svk`Z5”
删除引号内开头的 “##0aN9=一个#,变成”#0aN9=
然后编译保存。这样不仅去广告,还可以保留数字签名。
对使用均没有影响。点击是,接着点菜单,点保存。修改完毕后可以替换到原安装包,亦可直接替换到 WinRAR安装目录。

Linux网络命令之centos7防火墙firewall-cmd

发表于 2018-04-17 | 分类于 linux | | 阅读次数

一、firewall-cmd使用说明

  • firewalld是centos7的一大特性,最大的好处有两个:支持动态更新,不用重启服务;第二个就是加入了防火墙的“zone”概念
  • firewalld有图形界面和工具界面,由于我在服务器上使用,图形界面请参照官方文档,本文以字符界面做介绍
  • firewalld的字符界面管理工具是 firewall-cmd,可以多参考firewalld-cmd –help命令学习
  • firewalld默认配置文件有两个:/usr/lib/firewalld/ (系统配置,尽量不要修改)和 /etc/firewalld/ (用户配置地址),用户配置文件主要是:/etc/firewalld/firewalld.conf

zone概念:
硬件防火墙默认一般有三个区,firewalld引入这一概念系统默认存在以下8个区域(根据文档自己理解,如果有误请指正):

  • drop:默认丢弃所有包
  • block:拒绝所有外部连接,允许内部发起的连接
  • public:指定外部连接可以进入
  • external:这个不太明白,功能上和上面相同,允许指定的外部连接
  • dmz:和硬件防火墙一样,受限制的公共连接可以进入
  • work:工作区,概念和workgoup一样,也是指定的外部连接允许
  • home:类似家庭组
  • internal:信任所有连接

centos7默认安装了firewalld,若没有安装,执行 yum install firewalld firewalld-config安装

二、应用

2.1 基础使用及状态

1
2
3
4
5
6
7
8
9
firewall-cmd --get-default-zone # 查看zone
firewall-cmd --get-active-zones # 查看運作中的zone和zone裡的介面
firewall-cmd --get-zones # 列出所有zone
firewall-cmd --set-default-zone=home
firewall-cmd --zone=public --list-all
firewall-cmd –new-zone=prod –permanet # 增加一个zone
firewall-cmd –complete-reload # 重启防火墙
firewall-cmd –set-default-zone=prod # 设置默认为prod
firewall-cmd –get-default-zone # 查看默认的zone(当然也可以用firewall-cmd –zone=prod –add-interface=eth0把指定接口设置成prod)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
//临时关闭防火墙,重启后会重新自动打开
systemctl restart firewalld
//检查防火墙状态
firewall-cmd --state
firewall-cmd --list-all
//Disable firewall
systemctl disable firewalld
systemctl stop firewalld
systemctl status firewalld
//Enable firewall
systemctl enable firewalld
systemctl start firewalld
systemctl status firewalld
// centos6
service firewalld start||stop||restart
service firewalld status // 查看状态
firewall-cmd –version // 查看版本
firewall-cmd –help // 帮助信息
firewall-cmd –get-active-zones // 查看区域信息
firewall-cmd –get-zone-of-interface=eth0 // 查看指定接口所属区域
firewall-cmd –panic-on //拒绝所有包
firewall-cmd –panic-off //取消拒绝状态
firewall-cmd –query-panic //查看是否拒绝
firewall-cmd –reload // 更新防火墙规则
firewall-cmd –complete-reload // 断开再连接

2.2 服务器防火墙IP、端口配置

永久的开放需要的端口:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#端口设置
firewall-cmd --zone=public --add-port=3000/tcp --permanent # 开放指定tcp端口,并永久生效
firewall-cmd --zone=public --add-port=5060-5059/udp --permanent # 开放指定区间udp端口,并永久生效
firewall-cmd --zone=public --add-port=80/tcp # 开启80端口
firewall-cmd --zone=public --remove-port=80/tcp # 移除80端口
firewall-cmd --zone=public --remove-port=5144/udp # 移除udp端口
#ip设置
firewall-cmd --zone=public --add-source=163.17.40.0/24 # 允许ip访问
firewall-cmd --zone=public --remove-source=163.17.40.0/24 # 移除ip访问
#服务服务设置
firewall-cmd --zone=public --add-service=http # 把http服务加入到区域
firewall-cmd --zone=public –remove-service=http # 移除http服务
firewall-cmd --zone=prod --add-service=samba # 开启samba服务
firewall-cmd --zone=prod --add-port=3690/tcp # 开启svn端口
firewall-cmd --zone=work --add-service=smtp # 添加 smtp 服务至 work zone
firewall-cmd --zone=work --remove-service=smtp # 移除 work zone 中的 smtp 服务
#网卡接口
firewall-cmd --zone=public --list-interfaces # 列出 public zone 所有网卡
firewall-cmd --zone=public --permanent --add-interface=eth0 # 将 eth0 添加至 public zone,永久
firewall-cmd --zone=work --permanent --change-interface=eth0 # eth0 存在与 public zone,将该网卡添加至 work zone,并将之从 public zone 中删除
firewall-cmd --zone=public --permanent --remove-interface=eth0 # 删除 public zone 中的 eth0,永久
# Postgresql端口设置。允许xxx.xx.xx.200访问5432端口
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="xxx.xx.xx.200" port protocol="tcp" port="5432" accept"
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="xxx.xxx.xxx.170" port protocol="tcp" port="3306" accept"
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="xxx.xx.xx.200" port protocol="tcp" port="23333" accept"
#注意配置好后需要重载服务器
sudo firewall-cmd --reload
firewall-cmd --list-all #检查新的防火墙规则

2.3 复杂的防火墙设置

(1) rich-rules
firewalld复杂的设置配置参数是rich-rules, 可以先通过firewall-cmd --zone=public --list-rich-rules目录打印出所有的复杂设置。

1
2
3
4
5
firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="163.17.40.0/24" port port="28001" protocol="tcp" accept'
firewall-cmd --zone=public --list-all
firewall-cmd --zone=public --remove-rich-rule='rule family="ipv4" source address="192.168.56.0/24" port port="3306" protocol="tcp" accept'

(2) 配置 external zone 中的 ip 地址伪装

1
2
3
firewall-cmd --zone=external --query-masquerade # 查看
firewall-cmd --zone=external --add-masquerade # 打开伪装
firewall-cmd --zone=external --remove-masquerade # 关闭伪装

(3) 配置 public zone 的端口转发

要打开端口转发,则需要先

1
2
3
4
5
firewall-cmd --zone=public --add-masquerade
firewall-cmd --zone=public --add-forward-port=port=22:proto=tcp:toport=3753 # 然后转发 tcp 22 端口至 3753
firewall-cmd --zone=public --add-forward-port=port=22:proto=tcp:toaddr=192.168.1.100 # 转发 22 端口数据至另一个 ip 的相同端口上
firewall-cmd --zone=public --add-forward-port=port=22:proto=tcp:toport=2055:toaddr=192.168.1.100 # 转发 22 端口数据至另一 ip 的 2055 端口上

(4) 配置 public zone 的 icmp

1
2
3
4
5
firewall-cmd --get-icmptypes # 查看所有支持的 icmp 类型
# > 输出 < destination-unreachable echo-reply echo-request parameter-problem redirect router-advertisement router-solicitation source-quench time-exceeded
firewall-cmd --zone=public --list-icmp-blocks 列出
firewall-cmd --zone=public --add-icmp-block=echo-request [--timeout=seconds] # 添加 echo-request 屏蔽
firewall-cmd --zone=public --remove-icmp-block=echo-reply # 移除 echo-reply 屏蔽

2.4 防火墙永久设置

注意,firewalld的设置默认是临时的,如果要永久生效,需加参数 --permanent

1
2
3
4
5
6
7
8
9
# 查看永久的設定
firewall-cmd --zone=public --list-all --permanent
# 查看runtime的設定(少了--permanent)
firewall-cmd --zone=public --list-all
# 新增在public zone上53埠的udp服務 53/udp
firewall-cmd --zone=public --add-port=53/udp --permanent

2.5 IP 封禁

我最常用的语句:
firewall-cmd --permanent --zone=public --ipset=blacklist --add-entry=119.39.248.76

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='222.222.222.222' reject" 单个IP
# firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='222.222.222.0/24' reject" IP段
# firewall-cmd --permanent --add-rich-rule="rule family=ipv4 source address=192.168.1.2 port port=80 protocol=tcp accept" 单个IP的某个端口
这个是我们用得最多的。封一个IP,和一个端口 reject 拒绝 accept 允许
当然,我们仍然可以通过 ipset 来封禁 ip
封禁 ip
# firewall-cmd --permanent --zone=public --new-ipset=blacklist --type=hash:ip
# firewall-cmd --permanent --zone=public --ipset=blacklist --add-entry=222.222.222.222
封禁网段
# firewall-cmd --permanent --zone=public --new-ipset=blacklist --type=hash:net
# firewall-cmd --permanent --zone=public --ipset=blacklist --add-entry=222.222.222.0/24
倒入 ipset 规则
# firewall-cmd --permanent --zone=public --new-ipset-from-file=/path/blacklist.xml
然后封禁 blacklist
# firewall-cmd --permanent --zone=public --add-rich-rule='rule source ipset=blacklist drop'
七、IP封禁和端口
# firewall-cmd --permanent --add-rich-rule="rule family=ipv4 source address=192.168.1.2 port port=80 protocol=tcp accept"
只对192.168.1.2这个IP只能允许80端口访问 (拒绝访问只需把 accept 换成 reject、删除该规则把 –add-rich-rule 改成 –remove-rich-rule即可)
# firewall-cmd --permanent --add-rich-rule="rule family=ipv4 source address=192.168.1.2/24 port port=80 protocol=tcp accept"
只对192.168.1.2这个IP段只能允许80端口访问(拒绝访问只需把 accept 换成 reject、删除该规则把 –add-rich-rule 改成 –remove-rich-rule即可)
八、双网卡内网网卡不受防火墙限制
# firewall-cmd --permanent --zone=public --add-interface=eth1
公网网卡–zone=public默认区域
# firewall-cmd --permanent --zone=trusted --add-interface=eth2
内网网卡–zone=trusted是受信任区域 可接受所有的网络连接
九、重新载入以生效
# firewall-cmd --reload

三、常见错误处理

3.1 Failed to start firewalld.service: Unit firewalld.service is masked.

问题现象: Failed to start firewalld.service: Unit firewalld.service is masked.错误,切firewall无法重启。

解决方法:

1
2
3
4
5
systemctl unmask firewalld.service
systemctl start firewalld.service
{设置端口} # eg: firewall-cmd --permanent --zone=public --add-port=80/tcp
systemctl restart firewalld.service
firewall-cmd --zone=public --query-port=80/tcp # 检查是否生效

四·常用配置

初始防火墙配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
yum install firewalld # 如果你是debian/ubuntu请使用命令:apt-get install firewalld
systemctl enable firewalld
systemctl start firewalld
firewall-cmd --list-all
firewall-cmd --zone=public --add-port=20/tcp --permanent
firewall-cmd --zone=public --add-port=21/tcp --permanent
firewall-cmd --zone=public --add-port=22/tcp --permanent
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=443/tcp --permanent
firewall-cmd --zone=public --add-port=8888/tcp --permanent
firewall-cmd --zone=public --add-port=888/tcp --permanent
firewall-cmd --zone=public --add-port=10000-50000/tcp --permanent
firewall-cmd --zone=public --add-port=10086/tcp --permanent
firewall-cmd --reload

制定IP服务授权:


参考

  • https://blog.csdn.net/spxfzc/article/details/39645133
  • http://www.itlnmp.com/401.html

Linux文件操作命令之LFTP、FTP

发表于 2018-04-11 | 分类于 linux | | 阅读次数

我的操作脚本范例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/bin/bash
HOST="v0.ftp.upyun.com"
USER="your_name/your_project_name"
PASS="your_password"
LCD="/home/work/bak"
RCD="/bx-hk"
lftp -c "open ftp://v0.ftp.upyun.com
user $USER $PASS;
lcd $LCD;
cd $RCD;
mirror --reverse --only-newer --dereference --verbose \
--exclude-glob=*.php \
--exclude-glob=*.xml \
--exclude-glob=*.htm \
--exclude-glob=*.html \
--exclude-glob=*.psd \
--exclude-glob=*.mo \
--exclude-glob=*.po \
--exclude-glob=*.pot \
--exclude-glob=arthemia/ \
--exclude-glob=ad/ \
--exclude-glob=report/ \
--verbose
;
"
1…456…26
Zack Hwang

Zack Hwang

Go

257 日志
42 分类
76 标签
RSS
Links
  • 小白博客
  • 我的书单
© 2018 Zack Hwang
由 Hexo 强力驱动
主题 - NexT.Muse
又拍云