Wetts's blog

Stay Hungry, Stay Foolish.

0%

数据库事务必须同时满足 4 个特性:

原子性(Atomic)

表示组成一个事务的多个数据库操作是一个不可分割的原子单元,只有所有的操作执行成功,整个事务才提交,事务中任何一个数据库操作失败,已经执行的任何操作都必须撤销,让数据库返回到初始状态

一致性(Consistensy)

事务操作成功后,数据库所处的状态和它的业务规则是否一致,即数据不会被破坏

隔离性(Isolation)

在并发数据操作时,不同的事务拥有各自的数据空间,它们的操作不会对对方产生干扰。准确的说,并非要求做到完全无干扰,数据库规定了多种事务隔离级别,不同隔离级别对应不同的干扰程度,隔离级别越高,数据一致性越好,但并发性越弱

持久性(Durability)

一旦事务提交成功后,事务中所有的数据操作都必须持久化到数据库中,即使提交事务后,数据库马上崩溃,在数据库重启时,也必须保证能够通过某种机制恢复数据

  1. 在Eclipse中依次打开Windows–>Preferences–>General–>Startup and Shutdown将RSE UI前的对号去掉,关闭Eclipse;

  2. 将Eclipse工作空间中的“RemoteSystemsTempFiles”项目删除掉,再启动Eclipse程序,这个项目就不会再自动生成了;

在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具。它支持文件的上传和下载,是综合传输工具,但按传统,习惯称url为下载工具。

语法:

# curl [option] [url]

常见参数:

  • -A/–user-agent 设置用户代理发送给服务器
  • -b/–cookie <name=string/file> cookie字符串或文件读取位置
  • -c/–cookie-jar 操作结束后把cookie写入到这个文件中
  • -C/–continue-at 断点续转
  • -D/–dump-header 把header信息写入到该文件中
  • -e/–referer 来源网址
  • -f/–fail 连接失败时不显示http错误
  • -o/–output 把输出写到该文件中
  • -O/–remote-name 把输出写到该文件中,保留远程文件的文件名
  • -r/–range 检索来自HTTP/1.1或FTP服务器字节范围
  • -s/–silent 静音模式。不输出任何东西
  • -T/–upload-file 上传文件
  • -u/–user <user[:password]> 设置服务器的用户和密码
  • -w/–write-out [format] 什么输出完成后
  • -x/–proxy <host[:port]> 在给定的端口上使用HTTP代理
  • -#/–progress-bar 进度条显示当前的传送状态

例子:

基本用法

1
# curl http://www.linux.com

执行后,www.linux.com 的html就会显示在屏幕上了

Ps:由于安装linux的时候很多时候是没有安装桌面的,也意味着没有浏览器,因此这个方法也经常用于测试一台服务器是否可以到达一个网站

保存访问的网页

使用linux的重定向功能保存
1
# curl http://www.linux.com >> linux.html
可以使用curl的内置option:-o(小写)保存网页
1
$ curl -o linux.html http://www.linux.com

执行完成后会显示如下界面,显示100%则表示保存成功

1
2
3
% Total    % Received % Xferd  Average Speed  Time    Time    Time  Current
Dload Upload Total Spent Left Speed
100 79684 0 79684 0 0 3437k 0 --:--:-- --:--:-- --:--:-- 7781k
可以使用curl的内置option:-O(大写)保存网页中的文件

要注意这里后面的url要具体到某个文件,不然抓不下来

1
# curl -O http://www.linux.com/hello.sh

测试网页返回值

1
# curl -o /dev/null -s -w %{http_code} www.linux.com

Ps:在脚本中,这是很常见的测试网站是否正常的用法

指定proxy服务器以及其端口

很多时候上网需要用到代理服务器(比如是使用代理服务器上网或者因为使用curl别人网站而被别人屏蔽IP地址的时候),幸运的是curl通过使用内置option:-x来支持设置代理

1
# curl -x 192.168.100.100:1080 http://www.linux.com

有些网站是使用cookie来记录session信息。对于chrome这样的浏览器,可以轻易处理cookie信息,但在curl中只要增加相关参数也是可以很容易的处理cookie

保存http的response里面的cookie信息。内置option:-c(小写)
1
# curl -c cookiec.txt  http://www.linux.com

执行后cookie信息就被存到了cookiec.txt里面了

保存http的response里面的header信息。内置option: -D
1
# curl -D cookied.txt http://www.linux.com

执行后cookie信息就被存到了cookied.txt里面了

注意:-c(小写)产生的cookie和-D里面的cookie是不一样的。

使用cookie

很多网站都是通过监视你的cookie信息来判断你是否按规矩访问他们的网站的,因此我们需要使用保存的cookie信息。内置option: -b

1
# curl -b cookiec.txt http://www.linux.com

模仿浏览器

有些网站需要使用特定的浏览器去访问他们,有些还需要使用某些特定的版本。curl内置option:-A可以让我们指定浏览器去访问网站

1
# curl -A "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.0)" http://www.linux.com

这样服务器端就会认为是使用IE8.0去访问的

伪造referer(盗链)

很多服务器会检查http访问的referer从而来控制访问。比如:你是先访问首页,然后再访问首页中的邮箱页面,这里访问邮箱的referer地址就是访问首页成功后的页面地址,如果服务器发现对邮箱页面访问的referer地址不是首页的地址,就断定那是个盗连了

curl中内置option:-e可以让我们设定referer

1
# curl -e "www.linux.com" http://mail.linux.com

这样就会让服务器其以为你是从www.linux.com点击某个链接过来的

下载文件

利用curl下载文件。
1
2
3
4
#使用内置option:-o(小写)
# curl -o dodo1.jpg http:www.linux.com/dodo1.JPG
#使用内置option:-O(大写)
# curl -O http://www.linux.com/dodo1.JPG

这样就会以服务器上的名称保存文件到本地

循环下载

有时候下载图片可以能是前面的部分名称是一样的,就最后的尾椎名不一样

1
# curl -O http://www.linux.com/dodo[1-5].JPG

这样就会把dodo1,dodo2,dodo3,dodo4,dodo5全部保存下来

下载重命名
1
# curl -O http://www.linux.com/{hello,bb}/dodo[1-5].JPG

由于下载的hello与bb中的文件名都是dodo1,dodo2,dodo3,dodo4,dodo5。因此第二次下载的会把第一次下载的覆盖,这样就需要对文件进行重命名。

1
# curl -o #1_#2.JPG http://www.linux.com/{hello,bb}/dodo[1-5].JPG

这样在hello/dodo1.JPG的文件下载下来就会变成hello_dodo1.JPG,其他文件依此类推,从而有效的避免了文件被覆盖

分块下载

有时候下载的东西会比较大,这个时候我们可以分段下载。使用内置option:-r

1
2
3
4
# curl -r 0-100 -o dodo1_part1.JPG http://www.linux.com/dodo1.JPG
# curl -r 100-200 -o dodo1_part2.JPG http://www.linux.com/dodo1.JPG
# curl -r 200- -o dodo1_part3.JPG http://www.linux.com/dodo1.JPG
# cat dodo1_part* > dodo1.JPG

这样就可以查看dodo1.JPG的内容了

通过ftp下载文件

curl可以通过ftp下载文件,curl提供两种从ftp中下载的语法

1
2
# curl -O -u 用户名:密码 ftp://www.linux.com/dodo1.JPG
# curl -O ftp://用户名:密码@www.linux.com/dodo1.JPG
显示下载进度条
1
# curl -# -O http://www.linux.com/dodo1.JPG
不会显示下载进度信息
1
# curl -s -O http://www.linux.com/dodo1.JPG

断点续传

在windows中,我们可以使用迅雷这样的软件进行断点续传。curl可以通过内置option:-C同样可以达到相同的效果
如果在下载dodo1.JPG的过程中突然掉线了,可以使用以下的方式续传

1
# curl -C -O http://www.linux.com/dodo1.JPG

上传文件

curl不仅仅可以下载文件,还可以上传文件。通过内置option:-T来实现

1
# curl -T dodo1.JPG -u 用户名:密码 ftp://www.linux.com/img/

这样就向ftp服务器上传了文件dodo1.JPG

显示抓取错误

1
# curl -f http://www.linux.com/errors

基于角色的访问控制(Role-Based Access Control,简称RBAC)

作为传统访问控制(自主访问,强制访问)的有前景的代替受到广泛的关注。在RBAC中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。这就极大地简化了权限的管理。在一个组织中,角色是为了完成各种工作而创造,用户则依据它的责任和资格来被指派相应的角色,用户可以很容易地从一个角色被指派到另一个角色。角色可依新的需求和系统的合并而赋予新的权限,而权限也可根据需要而从某角色中回收。角色与角色的关系可以建立起来以囊括更广泛的客观情况。


RBAC支持三个著名的安全原则:最小权限原则,责任分离原则和数据抽象原则。

  1. 最小权限原则之所以被RBAC所支持,是因为RBAC可以将其角色配置成其完成任务所需要的最小的权限集。
  2. 责任分离原则可以通过调用相互独立互斥的角色来共同完成敏感的任务而体现,比如要求一个计帐员和财务管理员共参与同一过帐。
  3. 数据抽象可以通过权限的抽象来体现,如财务操作用借款、存款等抽象权限,而不用操作系统提供的典型的读、写、执行权限。然而这些原则必须通过RBAC各部件的详细配置才能得以体现。

awk(关键字:分析&处理)

一行一行的分析处理 awk '条件类型1{动作1}条件类型2{动作2}' filename, awk 也可以读取来自前一个指令的 standard input

相对于sed常常用于一整行处理, awk则比较倾向于一行当中分成数个”字段”(区域)来处理, 默认的分隔符是空格键或tab键

例如:

1
last -n 5 | awk '{print $1 "\t" $3}'

这里大括号内$1"\t"$3 之间不加空格也可以, 不过最好还是加上个空格, 另外注意"\t"是有双引号的, 因为本身这些内容都在单引号内

  • $0 代表整行
  • $1 代表第一个区域, 依此类推

awk的处理流程是:

  1. 读第一行, 将第一行资料填入变量 $0, $1… 等变量中
  2. 依据条件限制, 执行动作
  3. 接下来执行下一行

所以, AWK一次处理是一行, 而一次中处理的最小单位是一个区域, 另外还有3个变量,

  • NF: 每一行处理的字段数,
  • NR 目前处理到第几行
  • FS 目前的分隔符逻辑判断 > < >= <= == !== , 赋值直接使用=
1
cat /etc/passwd | awk '{FS=":"} $3<10 {print $1 "\t" $3}'

首先定义分隔符为:, 然后判断, 注意看, 判断没有写在{}中, 然后执行动作, FS=”:”这是一个动作, 赋值动作, 不是一个判断, 所以不写在{}中

BEGIN END , 给程序员一个初始化和收尾的工作, BEGIN之后列出的操作在{}内将在awk开始扫描输入之前执行, 而END{}内的操作, 将在扫描完输入文件后执行.

1
awk '/test/ {print NR}' abc

将带有test的行的行号打印出来, 注意//之间可以使用正则表达式

awk {}内, 可以使用 if else ,for(i=0;i<10;i++), i=1 while(i<NF)
可见, awk的很多用法都等同于C语言, 比如"\t" 分隔符, print的格式, if, while, for 等等

awk 是相当复杂的工具, 真正使用时, 再补充吧. (有关工具的picture)

sed(关键字: 编辑)

以行为单位的文本编辑工具 sed可以直接修改档案, 不过一般不推荐这么做, 可以分析 standard input

基本工作方式: sed [-nef] '[动作]' [输入文本]

  • -n : 安静模式, 一般sed用法中, 来自stdin的数据一般会被列出到屏幕上, 如果使用-n参数后, 只有经过sed处理的那一行被列出来.
  • -e : 多重编辑, 比如你同时又想删除某行, 又想改变其他行, 那么可以用 sed -e ‘1,5d’ -e ‘s/abc/xxx/g’ filename
  • -f : 首先将 sed的动作写在一个档案内, 然后通过 sed -f scriptfile 就可以直接执行 scriptfile 内的sed动作 (没有实验成功, 不推荐使用)
  • -i : 直接编辑, 这回就是真的改变文件中的内容了, 别的都只是改变显示. (不推荐使用)

动作:

  • a 新增, a 后面可以接字符串, 而这个字符串会在新的一行出现. (下一行)

  • c 取代, c 后面的字符串, 这些字符串可以取代 n1,n2之间的行

  • d 删除, 后面不接任何东西

  • i 插入, 后面的字符串, 会在上一行出现

  • p 打印, 将选择的资料列出, 通常和 sed -n 一起运作 sed -n ‘3p’ 只打印第3行

  • s 取代, 类似vi中的取代, 1,20s/old/new/g

  • [line-address]q 退出, 匹配到某行退出, 提高效率

  • [line-address]r 匹配到的行读取某文件 例如: sed ‘1r qqq’ abc , 注意, 写入的文本是写在了第1行的后边, 也就是第2行

  • [line-address]w file, 匹配到的行写入某文件  例如: sed -n ‘/m/w qqq’ abc , 从abc中读取带m的行写到qqq文件中, 注意, 这个写入带有覆盖性.

举例:

1
sed '1d' abc

删除 abc 档案里的第一行, 注意, 这时会显示除了第一行之外的所有行, 因为第一行已经被删除了(实际文件并没有被删除,而只是显示的时候被删除了)

1
sed -n '1d' abc

什么内容也不显示, 因为经过sed处理的行, 是个删除操作, 所以不现实.

1
sed '2,$d' abc

删除abc中从第二行到最后一行所有的内容, 注意, $符号正则表达式中表示行末尾, 但是这里并没有说那行末尾, 就会指最后一行末尾, ^开头, 如果没有指定哪行开头, 那么就是第一行开头

1
sed '$d' abc

只删除了最后一行, 因为并没有指定是那行末尾, 就认为是最后一行末尾

1
sed '/test/d' abc

文件中所有带 test 的行, 全部删除

1
sed '/test/a RRRRRRR' abc

将 RRRRRRR 追加到所有的带 test 行的下一行 也有可能通过行

1
sed '1,5c RRRRRRR' abc sed '/test/c RRRRRRR' abc

将 RRRRRRR 替换所有带 test 的行, 当然, 这里也可以是通过行来进行替换, 比如 sed ‘1,5c RRRRRRR’ abc

grep(关键字: 截取)

文本搜集工具, 结合正则表达式非常强大

主要参数 []

  • -c : 只输出匹配的行
  • -I : 不区分大小写
  • -h : 查询多文件时不显示文件名

    grep(关键字: 截取)

    文本搜集工具, 结合正则表达式非常强大

主要参数 []

  • -c : 只输出匹配的行
  • -I : 不区分大小写
  • -h : 查询多文件时不显示文件名
  • -l : 查询多文件时, 只输出包含匹配字符的文件名
  • -n : 显示匹配的行号及行
  • -v : 显示不包含匹配文本的所有行(我经常用除去grep本身)

基本工作方式: grep 要匹配的内容 文件名,

例如:

1
grep 'test' d*

显示所有以d开头的文件中包含test的行

1
grep 'test' aa bb cc

显示在 aa bb cc 文件中包含test的行

1
grep '[a-z]\{5}\' aa

显示所有包含字符串至少有5个连续小写字母的串

按日期查找时间段的nginx日志

1
sed -n "/14\/Jul\/2015:00:00:00/,/15\/Jul\/2015:15:00:00/"p access.log > time_access.log

查找504错误的页面和数量的nginx日志

1
awk '($9 ~ /504/)' time_access.log | awk '{print $7}' | sort | uniq -c | sort -rn > 504.log
阅读全文 »

  • RMAN 是基于物理结构的备份,基于数据块的备份,支持与 online redolog 和 archive redolog 一起做恢复操作,是 Oracle 推荐的备份恢复工具。
  • Data IMP/EXP 是基于逻辑结构的导入导出工具,是基于数据对象(如表、存储过程等)的导入导出工具,不支持与 online redolog 和 archive redolog 一起使用,如果用作备份与恢复只能恢复到导出的那个时间点,是 Oracle 推荐的数据移动工具,可以从一个库导出再导入到另一个库。

一般数据库备份策略建议每天用 RMAN 做备份,隔几天使用 Data EXP 做导出备份,这样如果数据文件等物理结构出故障可用使用 RMAN+Redolog 恢复,如果只是恢复某张表可以用 Data IMP 直接导入,提高效率。

  • exp
    • 逻辑备份,只备份数据及对象创建语句,恢复时需要先建立数据库,然后重建对象,导入数据
    • 着眼于数据
  • rman
    • 物理备份,可以从文件级备份数据,恢复时恢复数据文件,同时也就恢复了数据
    • 着眼于文件

/etc/passwd 文件是一个纯文本文件,每行采用了相同的格式:

  • name:password:uid:gid:comment:home:shell
  • name 用户登录名
  • password 用户口令。此域中的口令是加密的,常用x表示。当用户登录系统时,系统对输入的口令采取相同的算法,与此域中的内容进行比较。如果此域为空,表明该用户登录时不需要口令。
阅读全文 »

如果查看/etc/shadow文件存放的特殊帐号信息如下:
name:!!:13675:0:99999:7:::
每一行给一个特殊帐户定义密码信息,每个字段用 : 隔开。

  • 字段 1 定义与这个 shadow 条目相关联的特殊用户帐户。
  • 字段 2 包含一个加密的密码。
  • 字段 3 自 1/1/1970 起,密码被修改的天数
  • 字段 4 密码将被允许修改之前的天数(0 表示“可在任何时间修改”)
阅读全文 »