我本地 有NEWS.JS这个文件,,服务器上也有一个,,本地版本库跟服务器 版本库一样的情况下 有人改了服务器上的NEWS.JS这个文件,,同时 你也改了 NEWS.JS 这个文件,,你们两个提交的时候 版本库都会自动加以个版本,,也就是 你们两个的版本一致了但是文件内容不一致导致的:
问题是确实有服务器的改动,但是改动并没提交,本地确实在此时改动,那请问怎么样才知道是哪些文件有这样的改动呢,我好删除,有命令么?
1)svn stat查看有无冲突:
svn stat .
看没有conflict啊:
svn stat .|grep conflict

2)对服务器中因中间临时修改时的文件予以强制回退到svn版本中,如下:希望恢复一整个目录的文件,可以使用--depth=infinity选项
[root@localhost cntv_mytv]# cd application/
[root@localhost application]# svn revert --depth=infinity .  
Reverted 'models/app.php'
————————————————————————————————
自己安装了一个,得到CentOs6.0的内核版本号:



刻录需要超刻的方法:
打开Nero文件-选项-高级 启动DVD超刻 前面打勾,然后确定。数度选择4X,最后,提示刻录失败,其实已经好了。
Last:
自己刻录,自己安装,果然Ok啊,哈哈。
================================================================
centos 6.0已经正式发布了,做为一个大版本的第一个版本肯定有很多问题,RHEL 6.1早发布修补了很多问题,当然还有增强(或增加)了一些功能,所以真正重要生产服务器还是期待centos 6.1的发布,估计下个月底就会发布。
http://qaweb.dev.centos.org/qa/dashboard 预计下周会正式发布下载,且centos 5.7 发布也一样
2011-08-26
centos 5.7官方最新消息称最快7-10天内发布
centos 6.1不太顺利,估计要比5.7晚点
2011-09-01
centos 5.7已经发布了,开始同步外部镜像,估计这两天就可以下载
现在已经有部份镜像点有下载了:
http://ftp.twaren.net/Linux/CentOS/5.7/isos
http://centos.mirror.nexicom.net/5.7/isos/
更多的见:http://www.centos.org/modules/tinycontent/index.php?id=30
按照计划先推出CentOS 6,然后再进行CentOS 6.1的工作。centos。Karanbir表示CentOS 6将在未来的数个星期内发布,而之后的CentOS 6.1只需要几个星期的时间,centos ftp,因为目前CentOS 6的开发branch的自动化和测试流程已经基本完善。centos和rhel。
centos 6.1预15天左右可供下载,可能还得等,官方更新build包日志:http://qaweb.dev.centos.org/qa/blog ,感谢CentOS团队无私的奉献。
在centos 6.1发布之前,centos临时发布了CentOS 6.0 CR Repo,有需要的可以下载用于CENTOS 6.0,同时也说明centos 6.1可能会再次跳票(大家都习惯了吧!)
# yum install centos-release-cr
# yum update
详见:
https://www.centos.org/modules/newbb/viewtopic.php?topic_id=33458&forum=53
http://www.h-online.com/open/news/item/Advance-updates-for-CentOS-6-1-1350302.html
法一:

法二:



由于不同系统中ifconfig返回信息的格式有一定差别,故分开讨论:

Linux:

FreeBSD/OpenBSD:

Solaris:

三段代码的原理类似,都是先获取含有IP的行,再去掉含有127.0.0.1的行。最后获取IP所在的列


参考:http://linux-wiki.cn/wiki/Shell%E4%B8%AD%E8%8E%B7%E5%8F%96%E5%BD%93%E5%89%8DIP%E5%9C%B0%E5%9D%80
rpm -qR cnginx-1.4.7-1.x86_64
openssl-devel  
pcre-devel
libpcre.so.0()(64bit)
       ......


Linux中往往是这样子的,一对的,例如:

有一个真的包,也就是有so包,往往还有一个:libxslt-devel-1.1.17-2.el5_2.2包,它的作用就是把libxslt-1.1.17-2.el5_2.2的相关配置放到Linux默认编译能找得到的位置,如:

这样的错误,说是找不到这个xslt-config这个文件,而你一看,libxslt-1.1.17-2.el5_2.2安装了,就是找不到,然后,你用命令:

发现xslt-config 不在这个包里面,而实际呢?

在这个包里呢?所以要多关注:devel这样的rpm喔。
扯远了一点儿,还是继续说吧,碰到这个问题大概可以用这个方法去解决(我碰到几个都是这样搞定的):

譬如:

解决方法:

其实有可能是你自己的Mysql安装后没有把它放入到那个默认的lib目录中即可,如下:
/usr/lib中去,如下:
先说我的简单配置:


访问:
http://status.jackxiang.com/

然后看是怎么配置和相关模块,及参数含义,如下:
http_stub_ status这个模块能够获取Nginx自上次启动以来的工作状态 此模块非核心模块,需要在编译的时候手动添加编译参数 --with-http_stub_ status _module ,配置说明:


指令
stub_status





stub_status
语法: stub_status on

默认值: None

作用域: location

创建一个 location 区域启用 stub_status

"stub status" 模块返回的状态信息跟 mathopd's 的状态信息很相似. 返回的状态信息如下:

Active connections: 291
server accepts handled requests
16630948 16630948 31070465
Reading: 6 Writing: 179 Waiting: 106active connections -- 对后端发起的活动连接数

server accepts handled requests -- nginx 总共处理了 16630948 个连接, 成功创建 16630948 次握手 (证明中间没有失败的), 总共处理了 31070465 个请求 (平均每次握手处理了 1.8个数据请求)

reading -- nginx 读取到客户端的Header信息数

writing -- nginx 返回给客户端的Header信息数

waiting -- 开启 keep-alive 的情况下,这个值等于 active - (reading + writing), 意思就是Nginx说已经处理完正在等候下一次请求指令的驻留连接

   在Linux下给你权限小了呢?你说在原有目录下部分文件是root创建的,或者其他兄弟用root角色创建的或者拷贝过来的,无法用小帐号删除,你说要root方便,于是你sudo -s 也好,su root也好成了root,爽了吧,于是你开始整了,如下:
root在终端上执行rm -rf ./命令。一时疏忽,错把目录./ 打成/,虽然及时发现,按下ctrl+c中断命令执行,但已过去几秒钟,开发机上的部分文件已经被删除。
   这时系统还是照常运行,但已经是微稳了,于是某一天,那一天,一个测试人员测试一紧急项目,发现该机器的页面打开很慢,直接对apache多次重启后,情况依旧,看似很专业的vmstat查看系统资源时,没有发现异常,只因时间已晚,调试心情急切,一时冲动,输入了重启的命令。造成了服务器无法重启,挂了,这到底是谁的错,好像有个歌曲有点像:)

  其实,这根源就是只差一点造成的,习惯决定,忘记了,但有一个好的操作习惯会避免这些问题的发生或者把范围缩小。

我的一点Linux下rm小习惯,如下,可以参考下,有更好的更好:
1.rm时要养成心中多一点的习惯:
rm -Rf ./.    平衡点
当你看到这个时,你敢马上删除吗?不会,这就可能得到避免了
rm -Rf /.      不平衡

2.再就是常用PWD来探测:进入目录中并PWD确定无误后再删除
以减少把跟给干掉一部分了,这样留下隐患,万一有人重启就挂。

3.就是修改那个rm -Rf 这个玩意把它通过alias(别名)整个搞成一个移动而不是真删除
万一整出问题到移动的文件夹找回,这个rm -Rf 就相当于 mv folder /tmpfolder.

4.实在是没有法子了张宴兄弟好像介绍一个可以磁盘恢复的软件,看能否找回,但看是
简单,好像也很难搞。URL:http://blog.s135.com/linux_ext3_undelete/

5.系统启动后自动运行脚本,使其终端这样显示,随时知道你的位置,类似于PWD:
root@116.255.139.240:/data0/proxy_temp_dir#   ,这个脚本忘记放哪儿了...
在 root 目录下,生成一个 .bashrc 文件

来源:补上,来自Scottjiang兄弟,Thanks。
最后,一个小心的操作,以及习惯的养成,才是国防之根本。
启动rsyncd的命令行:




理解:从{ip}这台机器上用root用户连接远程rsync服务器和本机需要同步的目录/usr/local/push_endsvr 同步,
            并作限定速度为3000KB,不需要同步logs目录!

关键参数解释:
rsync --help|grep bwlimit
     --bwlimit=KBPS          limit I/O bandwidth; KBytes per second
     --progress      show progress during transfer
     --include=PATTERN       don't exclude files matching PATTERN
     --port=PORT             specify double-colon alternate port number

实际测试情况如下:

里面是配置了从/root/elink这个目录向:/home/elink这个目录推送,后查看目录/home/elink的层次结构发现如下:

说明/root/elink/jackxiang.txt 中包含目录也给推送到了/home/elink下,形成/home/elink/elink/jackxiang.txt
阅读全文
示例用wget下载整个目录包括图片和CSS&HTML:
root@116.255.139.240:/home/admin/wget#
wget -r -x  http://c.jackxiang.com/login/index.html?url=http://bbs.jackxiang.com/passport.php
查看下载情况:
root@116.255.139.240:/home/admin/wget/c.jackxiang.com/login# ls
css  images  index.html?url=http:%2F%2Fbbs.jackxiang.com%2Fpassport.php
阅读全文
一.调试打印C程序中的数组的方法

二.打印C程序中的结构体的方法


打印整个结构体:


打结构体中的某个值:


如果打开printf pretty这个选项,那么当GDB显示结构体时会比较漂亮。如:

四.修改变量的值


他人实践:http://wenku.baidu.com/view/77cbd54f767f5acfa1c7cdda.html
GDB个人总结下载:


参看:http://wiki.ubuntu.org.cn/index.php?title=%E7%94%A8GDB%E8%B0%83%E8%AF%95%E7%A8%8B%E5%BA%8F&variant=zh-cn
本站参考:
http://jackxiang.com/post/4014/
http://jackxiang.com/post/757/

使用 GDB 调试多进程程序:
http://www.ibm.com/developerworks/cn/linux/l-cn-gdbmp/
http://tieba.baidu.com/f?kz=874502809
http://blog.163.com/redhumor@126/blog/static/1955478420108192540752/
find命令常用来查找特定目录下,所有相关文件,可是也经常要排除特定内容的文件/目录,比如不想看svn/cvs的系统文件目录,如何做到呢,明显-name不能解决问题,但是可以用find 的 -not参数,比如查找不包含.svn的所有文件:
代码:去SVN目录:


法一:

法二:


再者find经常结合xargs处理复杂的功能。
阅读全文
   近来学习了一下C++在Linux下的多进程并发服务器的模型,听专搞C++服务器的兄弟们说这个也不行,需要Epoll,Select模型,还需要FiFo队列的结合,链表,共享内存等同时起多个进程后循环去共享内存里去取数据,去循环的读FIFO才会高效更有效形成一个更高更强更快的多并发的服务器,本质就是异步服务。
      我也想学,但苦于基础不好,于是否给我顺手抓了一本Unix网络编程 实用技术与实例分析,这一章节,代码错误较多,还好有兄弟帮忙调试,在此感谢,看来还是需要把书写好才能省下不少时间啊,写书的人或排版的也许太匆忙罢,和兄弟沟通后说错误多是为了让初学者多调试,写错了也有理由,我倒。
近来事情不多也就了解了下他们的架构,画画图什么的,其实Mysql长连接这块我觉得应该做进PHP中,现在PHP都FastCGI开自己的端口了,长连接也做进去不是难事哇,期待加到下一个PHP扩展中,直接整成可配置的连接池得了,上图:
阅读全文
缘起:最近想学下C++,Linux下的C++,但苦于没有找到好的编辑器,经同事介绍,有同事在用source Insight,我也用过,近来发现scott用VC2008,还会自动提示,跳转什么的,好生羡慕,苦于没有安装源文件,只好在自己的VC6.0上整上同一套来学习下C++开发喽,听其他人都说:
   VC6.0是一个不错的编辑器编译器,直至现在还有不少人有用它做开发的,XP系统是盗版的,再来个VC6.0是盗版的也无足轻重啦,但VC6.0不像source Insight 和CFree那样天生都具有提示功能,以及行号功能,但它也有它的优点,经过左右思考后结论如下:
1.代码字体很清晰,有条例,编译提示都有的,在这里没有问题,放到Linux下应该没太大问题,有问题再修改咯,主要是提高编码速度和质量才是,在哪个系统上跑不关心呗,不过Windows Server要钱,我提示下,Linux下运行Web CGI什么的可是免费的哇,微软的Server不是个人能买得起,听说是按连接数算,如果你还想买个Oracle那TMD可是按CPU数来算滴,这下TMD完了两家都帮做广告了。
2.能一键F5就能编译提示错误。【这个好像source Insight无,但中文字体显示让人觉得不舒服,但它自己带提示,而CFree有行号,也有编译mingw,但不大气,国产也需要注册,不注册也是盗版不是,没面子哇(你想说我很抠是吧,才100块钱注册费用都不给),我有个观点就是盗版全用一个公司的盗版得了,免得多家来找你就不好了,常言道:虱子多了不咬, 债多了不愁,就用一家,省得好几家找你,多事了不是?,何况你一个人用,微软尽管现在比起以前卖XP来说收入少了一点点,让人感觉是经营多少有点惨淡,最进我发现不是还有很多专利赚钱的嘛,听说手机上的专利钱一个手机都抽5美元不是,喔,原来瘦死的骆驼比马大,你这点小钱,So Little,再说当年八国联军火烧。。。扯远了,扯远了,不讲道理哈,打住。
3.就是现在VC6.0后有什么Visual2008等也出来了,微软估计都懒得理你,找你打官司真是无聊,爱死死一边用去吧:)

常用快捷键:
Alt + M:列出当前文件所有的函数
Alt + G:函数定义和声明的跳转
shift+alt+f:查找选定的内容,比VS2010自带的爽,不信你选定一个函数试试
Ctrl + J - 列出成员,仅包括代码提示
F3: 查找下一个
Shift+F3: 查找上一个


下载:
首先,来下载那个提示工具:
一个是在北邮的学校网上找了个最新破解版本的,
提示语法和函数的工具下载地,分Part1,Part2,分别URL如下,这个版本是1649,下面爱文的版本是1837:
http://bbs.byr.edu.cn/att/NetResources/44974/443
http://bbs.byr.edu.cn/att/NetResources/44973/488
当然也可以到Sina爱问下载,这个补丁Visual AssistX 10.6.1837安装文件和破解补丁打包下载 这个版本的VAX安装包直接支持所有的VS,包括VC6 VS2003 2005 2008 2010。
使用方法,URL是:http://ishare.iask.sina.com.cn/f/14588331.html
再次,是下载那个行号工具,后来的行号提示工具是在Sina爱问上找到的,老东家爱问上确实有很多好东东,近来百度文库上也有好多好东东哇,这尽管是涉及到版权,确定有很多知识和学习的文档,不顶不赞,默默享用,Sina爱问行号显示的插件下载URL如下:
http://ishare.iask.sina.com.cn/f/11944905.html?retcode=0

安装:
第一个提示代码和函数语法的插件直接安好就是,好像有一个破解VA_X.dll的给覆盖到提示代码的安装目录下就行。
第二个行号安装如下:
1)拷贝:拷贝文件VC6LineNumberAddin.dll到
D:\Program Files\Microsoft Visual Studio\Common\MSDev98\AddIns
2)注册:双击VC6LineNumberAddin.reg进行注册。
3)启用
打开vc6,菜单栏:Tools -> customize -> Add-ins and Macro Files
选中VC6LineNumber Developer Studio Add-in
后记:
在第3)中看到了那个提示插件,我估计是就是安装时它就帮你勾选了这个Visual Assist X Add-in啦。

最后,
有了这两个插件,后面开发效率上可能会有较大提高哇,我也是初学,还请大家帮我,有什么好学习C++的方法的给我留言,呵呵。


Add: 2014-01-13 visual studio 2008
回忆未来-向东-Jàck  下午 05:31:26
两个安上了,提示是怎么跳来着,当年我是用的vc6.0

scott  下午 05:32:17
安装后,有没有这个工具条

回忆未来-向东-Jàck  下午 05:32:29
有了,哈哈。

跳不动,是要做索引?

scott  下午 05:33:10

关了,重新打开一次,光标放到函数哪里,点击右上角的“Go”
回忆未来-向东-Jàck  下午 05:35:02
喔,好。
回忆未来-向东-Jàck  下午 05:36:30
O了,嘿嘿。





—————http://blog.renren.com/share/232211851/7847121738————

函数跳转
Alt + G:函数定义和声明的跳转
F12: 转到所调用函数或变量的定义
Alt + M:列出当前文件所有的函数
查找
Ctrl+F: 查找
Ctrl+Shift+F: 在文件中查找
F3: 查找下一个
Shift+F3: 查找上一个
替换
Ctrl+H: 替换
Ctrl+Shift+H: 在文件中替换
Alt+F12: 查找符号(列出所有查找结果)
----------------------------------------------------------------
代码编写
----------------------------------------------------------------
Shift + Alt + Ente - 全屏显示
tt - 快速插入 _T()
Alt + Shift + Q:鼠标定位到函数名上,若是在h文件中,按此快捷键会弹出右键菜单,里面有个选项--创建定义;若是在cpp文件中,则按此快捷键会弹出右键菜单,里面 有一个选项--创建声明。 这在定义好接口之后,再来写实现时,配合Alt+O是非常快捷的。
Ctrl + R + E - 封装字段(VS 2008已经基本不需要该快捷键了,因为C# 3.0的自动属性 – Auto-Implemented Properties)
Ctrl + J - 列出成员,仅包括代码提示
Ctrl + Shift + Space - 参数信息
F7 - 跳转到窗体后置代码,WinForm中、WebForm中都可以
----------------------------------------------------------------
代码操作
----------------------------------------------------------------
Ctrl + K + C - 注释
Ctrl + K + U - 取消注释
Ctrl + ] - 寻找匹配的括号
Ctrl + Shift + ] - 选择匹配的括号与其中的代码
Ctrl + F - 快速查找
Ctrl + H - 快速替换
Ctrl + Shift + U - 转换为大写
Ctrl + U - 转换为小写
Ctrl + K + D - 设置文档格式
Tab - 增加缩进
Shift + Tab - 减少缩进
Ctrl + M + M - 折叠代码,例如将光标放在#region、if、方法头的位置,将会折叠它们
----------------------------------------------------------------
调试运行
----------------------------------------------------------------
F5 - 启动调试
Shift + F5 - 停止调试
F9 - 设置断点
Ctrl + Shift + F9 - 删除所有断点
F10 - 逐过程调试
F11 - 逐语句调试
----------------------------------------------------------------
项目的操作
----------------------------------------------------------------
Alt + Enter - 打开选定项的属性对话框
Ctrl + Shift + N - 新建项目
Shift + Alt + N - 新建网站
Ctrl + N - 新建文件
Ctrl + Shift + O - 打开项目
Shift + Alt + O - 打开网站
Ctrl + O - 打开文件
在日常生活中往往有一些命令很长,如要到apache的htdocs下,要到Mysql和Apache的下bin目录下,要删除某个文件而事实上是把这个rm -Rf 变为了移动到某个大硬盘中去了,就会避免误删除后出现找不回文件了(当然有些软件可以找回,另当别论),别名可用来定义新的命令。一条别名当多条,这些别名通常放在初始化文件~/.bashrc(bash)或者/.tcshrc(tcsh)中,这样在交互式子shell中就可以使用这些别名。
在bash中,内置命令alias的语法如下:

在tcsh中语法如下:

jackxiang@178.258.918.106:/# vi ~/.bashrc


阅读全文
su 和 sudo 的区别:
    1.共同点:都是root用户的权限;
    2.不同点:su仅仅取得root权限,工作环境不变,还是在切换之前用户的工作环境;sudo是完全取得root的权限和root的工作环境。


su - root 和 su root(su)有什么区别?
su - root:表示人以root身份登录
just like login as root, then the shell is login shell,
which mean it will expericene a login process,
usually .bash_profile and .bashrc will be sourced
su   root:表示与root建立一个链接,通过root执行命令
like you open an interactive shell in root name,

最直接的区别就是su目录还是原先用户的目录
但是su或su - root后目录就变为root用户的主目录了。

实践:
vi /root/.bashrc

我是先root登录后:
root@172.25.3*.7*:~# su jackxiang
jackxiang@Tencent:/root>
发现上面的区别了吧?由root变为jackxiang后,控制台出现不同,再来看看:
jackxiang@Tencent:/root> cdh
bash: cdh: command not found
cdh这个不存在,也就是/root/.bashrc这个没有被执行,注意这点。
我们再 su - root 一下:

看上面,控制台变了吧,主要原因是什么呢?是因为我们在su - root,或者su root 时,这一瞬间其root时去执行了脚本:
/root/.bashrc。
它告诉我们,想要修改PATH,PHP,APACHE,Mysql等的路径,都可以到这个脚本中添加即可。

有一个文档说明此事:
背景:http://jackxiang.com/post/2656/  里有通过php进行curl配置并进行模拟IP来进行请求:PHP的curl扩展为我们用了CURLOPT_HTTPHEADER来做host的工作, curl -l -H "Host:test3.qq.com"  http://17.2*.*.70/index.php,这儿讲一下用shell下的curl来一行进行模拟及其用wireshark进行抓包发现其http的头的原理。自己之前写过放在这儿:jackxiang.com/post/2656/
____________实践有用的Curl强大功能________________
用Curl直接模拟Host方法,Curl伪造Refer的方法:
http://jackxiang.com/post/6201/
获取cookie后,模拟refer并带上cookie通过curl访问某个接口:
http://jackxiang.com/post/4082/
PHP用CURL伪造IP和来源:
http://jackxiang.com/post/6201/
______________________________________________
完整示例只传入data,其它项默认即可:

调用示例:


—————————————————————Curl模拟Host和Ip对应关系—————————————————————
一个是Linux命令行来实现,二是从PHP编码上来实现不用修改Linux的Host就可能实现对虚拟主机的访问,实现如下:
一.假如70上有一个test3.qq.com ,我们在Windows下还需要通过

对Host加入配置:

后,
才能通过浏览器访问,而我们如果不加就不能访问。
现在,可以通过Curl来不用修改host文件也能访问,如下:
去Host:

用Curl直接模拟Host如下:

如果看代码图片:
curl -l -H "Host:mytv.jackxiang.com"  http://127.0.0.1/uploads/temp/201310261334109440.jpg > xdy.jpg
-----------------------------------------------------------------------------------------------------------------------------------------------------------
如果有&号连接的Url需要对Url加引号:
curl -l --silent -v -H "Host:api.xdxp.cn"  "http://115.182.35.108/general/getVideoCategoryList?uid=100&videoCategoryIds=15,16,17,18,19,20,31&format=json"
*   Trying 115.182.35.108... connected
* Connected to 115.182.35.108 (115.182.35.108) port 80 (#0)
> GET /general/getVideoCategoryList?uid=100&videoCategoryIds=15,16,17,18,19,20,31&format=json HTTP/1.1

不加引号的情况:
curl -l --silent -v -H "Host:api.xdxp.cn"  http://115.182.35.108/general/getVideoCategoryList?uid=100&videoCategoryIds=15,16,17,18,19,20,31&format=json
* About to connect() to 115.182.35.108 port 80 (#0)
*   Trying 115.182.35.108... connected
* Connected to 115.182.35.108 (115.182.35.108) port 80 (#0)
> GET /general/getVideoCategoryList?uid=100 HTTP/1.1
-----------------------------------------------------------------------------------------------------------------------------------------------------------

与此同时,我们还能通过在Linux自己带的Curl来进行不用设置/etc/hosts来实现我们自己的模拟host访问。这样在调试接口等就不用我们自己每次都修改Host文件了,带来了极大的方便。

二.我们在PHP代码编程使用中PHP设置Curl参数来实现的代码片段如下,注意传入的是IP,而Host设置在函数的代码中:


如一个域名有两个IP,如何来实现调用的简单实现,这样有利于分担接口负载,如下:


综上所述,其本质是模拟了Http协议的头,想了解更多请看我之前写的一篇文章:
《PHP CURL CURLOPT_HTTPHEADER设置HOST(也就是不用配置host访问),Curl伪造Refer的方法及其杂谈》
Url:http://jackxiang.com/post/4022/


—————————————————————伪造客户端IP—————————————————————
一)这就是伪造的Curl的PHP代码:
curl_setopt($ch, CURLOPT_HTTPHEADER, array('X-FORWARDED-FOR:'.$sendip, 'CLIENT-IP:'.$sendip));

来自:http://www.phpec.org/php/curl.html
参考:http://www.onlypo.com/archives/7


二)在Linux的Shell环境下如何不用PHP设置Header呢?
linux curl http header处理:

设置http请求头信息:
curl -A "Mozilla/5.0 Firefox/21.0" http://www.baidu.com #设置http请求头User-Agent
curl -e "http://pachong.org/" http://www.baidu.com #设置http请求头Referer
curl -H "Connection:keep-alive \n User-Agent: Mozilla/5.0" http://www.aiezu.com
来自:http://www.aiezu.com/system/linux/linux_curl_syntax.html

于是,如果忽悠下服务器端简单获取客户端的IP,实践如下,用-H参数即可:

于是日志显示:2013/12/06 21:05:57     HostIp:jackxiang.com--ClientIp:192.168.1.108--
果然被curl给忽悠了吧,其被忽悠的代码如下:
X-Forwarded-For:192.168.1.108 在http头里通过linux下的curl注入头里即可!
调用如下:
file_put_contents($logFile, date("Y/m/d H:i:s") . "\t" . $type .'HostIp:'.$this->request->getHttpHost().'--'.'ClientIp:'.$this->request->getClientIp().'--'. "\t" . var_export($msg, true) . "\n", FILE_APPEND);
代码片段如下:


模拟修改Host的IP,不用修改Host文件的方法也是-H参数,能否合并起来使用呢?实践是不行的,如下探讨研究:

但是把上面两个写在一块用\n分开,实践好像不行,尽管上面有这样一个示例:
curl -H "Connection:keep-alive \n User-Agent: Mozilla/5.0" http://www.aiezu.com
实践是可行的,如:curl -H "Connection:keep-alive \n User-Agent: Mozilla/5.0" http://www.baidu.com
Connection:keep-alive \n User-Agent: Mozilla/5.0
但是把Curl模拟Host所对IP及如模拟客户端IP放一块,实践不Ok,如下:

出现接口返回不对,Nginx如下,只能单用吗?疑惑,因为这都是\r\n拼接的呀,\r\n也不行,如:http://www.myhack58.com/Article/html/3/62/2012/34944_2.htm
<html>
<head><title>403 Forbidden</title></head>
<body bgcolor="white">
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx</center>
</body>
</html>
很有可能是一个要非ip的字母数字作为域名,而另一个是要ip冲突导致矛盾吧?

Add Time:2013-12-19
在实践中用到,一外包兄弟写的代码经过队列调时出现没有入库,但是线上有多台机器,而所配置的机器的/etc/hosts指向是虚拟IP,不能修改,于是否,用这个方法找到了问题所在,其双方沟通的接口参数不一致导致,当时是怎么说通了,这个真是玄乎,代码如下:


对下面这个链接进行tcpdump抓包查看其请求是怎么样的,这儿python主要是想对json输出不能轻易读取加上json输出一行进行格式化:

第一点:直接用ip访问就不用找dns了,直接对IP访问,这是一定的。
第二点:这个-H主要体现在头上,也就是服务器(如:WebServer nginx apache tomcat都是对这个解析进行分发到或是php-fpm进行解析这个头作返回)
User-Agent: curl/7.15.5 (x86_64-redhat-linux-gnu) libcurl/7.15.5 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5
Accept: */*
Host:t43.jackxiang.com

也就是说,根据nginx里的conf文件进行分发时核对Host,或是php-fpm进行分发,这块还需要进一步研究,自己写server时可能会用到,也就这儿可以作为标志,至于怎么去的,我们可以直接用域名作对比:
1)域名直接访问(会先读host或dns得到一个ip后直接对其发起连接),curl "http://t43.jackxiang.com/json.php":
Source      Destination    Protocol
192.168.131.6    115.182.9.243    HTTP

GET /json.php HTTP/1.1
User-Agent: curl/7.17.0 (i586-pc-mingw32msvc) libcurl/7.17.0 zlib/1.2.2
Host: t43.jackxiang.com
Accept: */*

附:curl -H"Host:t43.jackxiang.com" "http://115.182.9.243/json.php"
2)用-H的curl通过localhost进行访问:
Source      Destination    Protocol
127.0.0.1             127.0.0.1              HTTP
User-Agent: curl/7.15.5 (x86_64-redhat-linux-gnu) libcurl/7.15.5 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5
Accept: */*
Host:t43.jackxiang.com


直接访问IP是不行的,加一个错误的头也是不行的,说明的的确确是这个Host:xxx进行解析:

C:\>curl -H"t43.jackxiang.com" "http://115.182.9.243/json.php"
<html>
<head><title>404 Not Found</title></head>
<body bgcolor="white">
<center><h1>404 Not Found</h1></center>
<hr><center>nginx</center>
</body>
</html>

C:\>curl -H"Host:t43.jackxiang.com" "http://115.182.9.243/json.php"
    {  "status":200,  "data":  [  {  "id":1000,  "name":"John"  },  {  "id":1004
,  "name":"Tom"  }  ]  }

安装rinetd
    wget http://www.boutell.com/rinetd/http/rinetd.tar.gz
    tar -zxvf rinetd.tar.gz
    cd rinetd
    make;make install
配置文件
    vi /etc/rinetd.conf
最简单的配置方式
    192.168.1.100 80 192.168.1.200 80
这样就完成了
然后你所有对于 192.168.1.100 80端口的访问将转发到 192.168.1.200 的80端口上
但是有个前提就是 192.168.1.100这台机子上的没有启动任何占用80端口的进程,如apache等;否则将转发不成功。
PS:他只能转发TCP的端口,不能转发UDP以及其他协议的端口;
rinetd的详细配置教程
http://hi.baidu.com/opbsder/blog/item/31d6f545a1c2f9318694734a.html
——————————————————————————————————————————————————————————————
linux下简单好用的工具rinetd,实现端口映射/转发/重定向
官网地址http://www.boutell.com/rinetd


软件下载
wget http://www.boutell.com/rinetd/http/rinetd.tar.gz

解压安装
tar zxvf rinetd.tar.gz
make
make install

编辑配置
vi /etc/rinetd.conf
0.0.0.0 8080 172.19.94.3 8080
0.0.0.0 2222 192.168.0.103 3389
1.2.3.4 80     192.168.0.10 80

说明一下(0.0.0.0表示本机绑定所有可用地址)
将所有发往本机8080端口的请求转发到172.19.94.3的8080端口
将所有发往本机2222端口的请求转发到192.168.0.103的3389端口
将所有发往1.2.3.4的80端口请求转发到192.168.0.10的80端口

命令格式是
bindaddress bindport connectaddress connectport
绑定的地址  绑定的端口  连接的地址  连接的端口

[Source Address] [Source Port] [Destination Address] [Destination Port]
源地址  源端口   目的地址  目的端口

启动程序
pkill rinetd  ##关闭进程
rinetd -c /etc/rinetd.conf  ##启动转发
把这条命令加到/etc/rc.local里面就可以开机自动运行

查看状态
netstat -antup

需要注意
1.rinetd.conf中绑定的本机端口必须没有被其它程序占用
2.运行rinetd的系统防火墙应该打开绑定的本机端口
例如:
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 1111 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 2222 -j ACCEPT

来自:http://blog.csdn.net/paulluo0739/article/details/7023711
一、查找上G的文件:

列出上G并删除的命令,如果加上 |sh 就能删除掉:
find /data/logs/nginx -type f -name "*.log-*" |xargs -i du -lh {} |awk '{if(match($1, "G")>0) print $0}' |awk '{print "rm -Rf " $2}'
二、查找上的G目录:


这样来查找:


示例Demo:
root@116.255.139.240:/data1/logs#     find . -name "*" |du -sh *|awk '{if(match($1, "G")>0) print $0 }'
5.0G    access.log



Linux中清理磁盘空间时,经常需要找出大于200M的文件。
这个命令可以实现这个功能:
find / -size +200M -exec du -h {} \;


http://blog.csdn.net/yfleng2002/article/details/8080556


三、文件夹大小的及层级统计:
du -h --max-depth=1 |grep 'G' |sort   #查看上G目录并排序
du -h --max-depth=0 user
--max-depth=n表示仅仅深入到第n层文件夹,此处设置为0,即表示不深入到子文件夹。

du -h --max-depth=1 /home/|grep [M] |sort     #查看上M目录并排序
21M     /home/jackx
32M     /home/
9.2M    /home/jackxiang

du -h --max-depth=1 |sort                            #查看当前目录下所有一级子目录文件夹大小 并排序
1.2G    .
12K     ./.ssh
16K     ./.gconfd
16K     ./js
45M     ./yucc
464K    ./s
48K     ./.gconf
48K     ./.subversion

参考:http://www.cnblogs.com/mfryf/p/3243211.html
Tags: ,
在linux上的crontab文件中我已有一行,如10 * * * * root /var/www/html/test.php
现在我要通过编写php程序来修改10 * * * * root /var/www/html/test.php
变成22 10 * * * root /var/www/html/aa.php
问题解决了,不过有点傻瓜,不知谁还有什么更好的方法吗?若有,希贴上来,互相学习
问题解决了,不过有点傻瓜,不知谁还有什么更好的方法吗?若有,希贴上来,互相学习
$fp=fopen("/etc/crontab","rb");
$save=fopen("/home/mysql/crontab","wb");
$i=0;
/*foreach ($f as $v)
{
  $t = preg_replace('13 15 * * * root /usr/bin/php /var/www/html/mysqlbackup/testClient.php', '* * *', $v);
  $result[] = $t;
}*/
while (!feof($fp)) {
  $buffer = fgets($fp);
  fwrite($save,$buffer);
  $i=$i+1;
  if ($i==10){
  fwrite($save,"success");
  break;
  }
  }
fclose($fp);
fclose($save);
$fp=fopen("/etc/crontab","wb");
$save=fopen("/home/mysql/crontab","rb");
$i=0;
while (!feof($save)) {
  $buffer = fgets($save);
  fwrite($fp,$buffer);  
  }
fclose($fp);
fclose($save);


Shell修改Crontab的方法:
脚本一:
#!/bin/bash
#cron_file='/home/zary/b';
cron_tmp='/home/zary/d';
cronpath="/home/zary/b";
cronbak='/home/zary/f';
parameter=;
if [ "$parameter" = "change" ]
then
cp $cronpath $cronbak;
sed -e '/c_check_mysqlstatus\.sh/s/^#//' -e '/c_check_webstatus\.sh/s/^#//' \
-e '/c_syscheck\.sh/s/#//' -e '/c_syscheck\.sh/s/^11/#11/' $cronpath >$cron_tmp;
cp $cron_tmp $cronpath;
crontab $cronpath;
elif [ "$parameter" = "resume" ]
then
sed -e '/c_check_webstatus\.sh/s/^/#/' -e '/c_check_mysqlstatus\.sh/s/^/#/' \
-e '/c_syscheck\.sh/s/^#//' -e '/c_syscheck\.sh/s/^\*\/20/#\*\/20/' $cronpath >$cron_tmp;
cp $cron_tmp $cronpath;
crontab $cronpath;
else
echo "Usage: c_startcron.sh [change/resume]";
fi


脚本二:

#!/bin/bash
cronpath="/var/spool/cron/root";
if [ = 'tw' ]
then
kick="tw_mail.php";
elif [ = "nw" ]
then
kick="nw_mail.php";
elif [ = "pw" ]
then
kick="pw_mail.php";
fi
crontab -l|egrep -v "$kick">/tmp/crontab;
case "" in
daily)
date=" * * *";
;
weekly)
date=" * * 1";
;
monthly)
date=" * 1 *";
;
esac
cat /tmp/crontab > $cronpath;
if [ = "on" ]
then
echo "$date /usr/local/php5/bin/php /home/htdocs/pukicn/new/OM/Cron/$kick">>$cronpath;
fi

来源:
http://topic.csdn.net/u/20090918/14/29cb3abf-6de6-4cc6-a28b-26f234b2a87b.html
http://www.linuxdiyf.com/viewarticle.php?id=14751
#include <iostream>                                                                  
using namespace std;                                                                      
struct ENTINFO {                                                                          
  char ent_add[255];                                                                      
};                                                                                        
typedef struct ENTINFO _ENTINFO;                                        
int main(int argc, char *argv[])                                                          
{                                                                                                                                                
  _ENTINFO *ent_info_pointer;                                                              
  _ENTINFO ent_info[1024];                                                                
  memset(ent_info,0,sizeof(_ENTINFO)*1024);                                                
  strcpy(ent_info[0].ent_add,"guangdong shenzhen nanshan new haofang garden");            
  strcpy(ent_info[1].ent_add,"guangdong shenzhen nanshan haofang garden");                
  strcpy(ent_info[2].ent_add,"guangdong shenzhen nanshan haofang garden 6 floor");          
  ent_info_pointer = ent_info;                                                            
  printf("ent_info_pointer->ent_add=%s\n",ent_info[0].ent_add);                            
  printf("ent_info_pointer->ent_add=%s\n",ent_info[1].ent_add);                            
  printf("ent_info_pointer->ent_add=%s\n",ent_info[2].ent_add);                            
  printf("ent_info_pointer->ent_add=%s\n",ent_info_pointer->ent_add);                      
  ent_info_pointer++;                                                                      
  printf("ent_info_pointer->ent_add=%s\n",ent_info_pointer->ent_add);                      
  ent_info_pointer++;                                                                      
  printf("ent_info_pointer->ent_add=%s\n",ent_info_pointer->ent_add);                      
  return 0;                                                                                
}
                                                                                        
                                                                                          

运行结果:
ent_info_pointer->ent_add=guangdong shenzhen nanshan new haofang garden
ent_info_pointer->ent_add=guangdong shenzhen nanshan haofang garden
ent_info_pointer->ent_add=guangdong shenzhen nanshan haofang garden 6 floor
ent_info_pointer->ent_add=guangdong shenzhen nanshan new haofang garden
ent_info_pointer->ent_add=guangdong shenzhen nanshan haofang garden
ent_info_pointer->ent_add=guangdong shenzhen nanshan haofang garden 6 floor

strcture_array_test.cpp



root@17*.2*.38.78:~/c++/struct# ./a.out
No.  Name  sex  age   Score
10101Tom                  M  18   0
10102John                 M  19   0
10103Mary                 F  17   0
第一步:修改你家目录下的.bashrc或者.bash_profile,忘了是在哪个文件里了,找到相应的PS1变量,修改保存退出。这样以后每次开机就好了。
第二步:
看看/etc/passwd
我发现我的:/etc/passwd 被人给干掉了,唉,还好有备份:看看/etc/passwd.old给恢复了。。。
Ubuntu Desktop默认情况下是关闭防火墙的。然而openSUSE用户就要费些心思来设置防火墙规则了。这里介绍如何在openSUSE的YAST2管理员工具中开启相应的端口:阅读全文
由于ls没有提供只显示目录的命令,所以我们只要搭配grep命令来显示目录
1、显示目录(不包含.及..),当然也可以包含,使用命令:ls -Fa |grep "/$"


2、显示当前目录的所有目录


3、ls怎样只列出目录,并对该目录赋予755:
ls -l | grep -e "^d" |awk '{print $NF}'|awk '{print "chmod 755 " $1 "; chmod 644 " $1 "/* ;"}'


http://www.whedu.net/cms/data/html/doc/2002-09/30/24866/index.html
==================================================================
ls 常用操作等:
ls是list的简写,就是列出当前目录内容的意思。类似于DOS下的dir命令。用法:
ls[选项][目录或文件]
find命令是查找的意思查找;当你知道是哪个文件,然后可以用ls查找子文件;但是当不知道是什么盘符,哪个文件夹时就可以使用find命令查找。
用法:find / -name httpd.conf,下面为一些其他用法,
find / -amin -10 # 查找在系统中最后10分钟访问的文件
find / -atime -2 # 查找在系统中最后48小时访问的文件
find / -empty # 查找在系统中为空的文件或者文件夹
find / -group cat # 查找在系统中属于 groupcat的文件
find / -mmin -5 # 查找在系统中最后5分钟里修改过的文件
find / -mtime -1 #查找在系统中最后24小时里修改过的文件
find / -nouser #查找在系统中属于作废用户的文件
find / -user fred #查找在系统中属于FRED这个用户的文件

ls命令只显示目录或文件(linux)  :
网上找的并自己试验过。将各种命令集合起来,省得以后乱找。

只显示目录
ls -F | grep /$    # -F使得ls将文件分类,通过在文件后面加一些标记来实现
ls -F | grep /
ls -l | grep ^d
ls -d */
ls -ld */

只显示文件
ls -F | grep [^\/]$  # 注意行尾匹配符号$不可少
ls -F | grep [^/]$
ls -l | grep ^-
ls -l | grep ^- | wc -l  # wc命令统计行数
find . -type f -maxdepth 1 | xargs ls -al
ls -p | grep [^/]$  # -p使得ls命令在目录后面加斜杠
find . ! -name . -prune -type f   # 这个命令不会很好排序文件

摘处:http://blog.163.com/ytyang__/blog/static/8405845201112502159277/


由于ls没有提供只显示目录的命令,所以我们只要搭配grep命令来显示目录
1、ls -F |grep "/$"
显示目录(不包含.及..),当然也可以包含,使用命令:ls -Fa |grep "/$"
2、ls -la |grep "^d"
显示当前目录的所有目录

这两条命令原理一样;显示方式略有不同罢了;

摘自:http://www.linuxdiyf.com/viewarticle.php?id=179841
分页: 22/23 第一页 上页 12 13 14 15 16 17 18 19 20 21 22 23 下页 最后页 [ 显示模式: 摘要 | 列表 ]