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
          Putty For S60, 可以从E71上通过WLAN访问所有开了ssh的Linux机器了,也可以通过这个工具访问所有的PC上开着的端口
不知道要不要签名,我是签了名再装的,另一个包是字体,我没有装,安装了应该只是字体变化。

此软件还可以用来忽悠不懂行的,山寨版Linux操作系统For Nokia

下载地址:
http://handheld.softpedia.com/progDownload/PuTTY-SSH-Client-S60-3rd-5th-Edition-Download-73433.html


效果图:
点击在新窗口中浏览此图片

有些时候,我们在复制/移动文件到另一台机器时会用到scp,因为它比较安全。但如果每次

都要输入密码,就比较烦了,尤其是在script里。不过,ssh有另一种用密钥对来验证的方

式。下面写出我生成密匙对的过程,供大家参考。

关键点:
1)生成密钥的机器私钥不动,公钥给待连接的服务器。
2)公钥放到要待连接的机器上要改名为:authorized_keys。(mv id_rsa.pub authorized_keys)
3)权限得要是700:chmod -R 700 authorized_keys,在谁家就是chown 谁的权限,总之,在某人hime目录下面就只能某人读取即可,不需要其他人能读取或修改,一旦chown 后,755不必了,也是为了安全,# chmod 600 authorized_keys即可读取写入即可,记住:目录是700,里面的文件是600,也就是只能这个用户读取600,这个目录也是只能这个用户进入也就是目录得有x。

4)服务端:放谁的Home目录下在服务端执行命令时就是谁。
5)客户端:在客户端登录时如不指明用户,就是客户端的用户名,如:客户端是root用户,不指名则是root@xx.xx.xx.xx去连接。如果服务端也是放/root/.ssh/authorized_key下,刚好,如客户端不是root,是test,则直接ssh是肯定连接不上的,因为变成了:test@xx.xx.xx.xx。
6)同样,你客户client端连接时是xiangdong,但你生成密钥时是root(公钥匙放到待连接机的/home/xiangdong/.ssh/下。),此时也是对不上的,得以root环境(因为他要找当时生成密钥的私钥,你client本地换成了xiangodng,它没有了。)
7)所以,鉴于6这种情况,最好生成时的用户和待连接的用户一样(实践证明如果lvops用户设置后,如果root下执行ssh -llvops xx.xx.xx.xx 也是需要密码的,而su到lvops就能免密码登陆成功,这块ansible是可以的,因为如xiangdong的/home/.ansible.cfg自己设置了id_rsa文件路径,而root下用ssh -l这种方法并没有带上id_rsa的路径去登陆,所以还是需要密码的。private_key_file = /home/xiangdong/irdcops_private_key  前面文件来自后面拷贝:private_key_file = /home/lvops/.ssh/id_rsa ,这块儿如果是root操作注意把irdcops_private_key权限为xiangdong且能读取,否则ansible没法读取也就会需要密码或报错的问题。http://jackxiang.com/post/8967/),这样就会省去指定也好,用户名对不上,还得指定才行的这些小问题引发连接不上的问题。  
第七点,也是实践证明了的,符合上面1-6点后,也就不用指明用户名了,如下:
[xiangdong@localhost .ssh]$ ssh 10.70.37.24
The authenticity of host '10.70.37.24 (10.70.37.24)' can't be established.
RSA key fingerprint is 56:94:6d:81:f3:e5:e2:8b:90:0a:93:3b:8e:7e:fd:c8.
Please type 'yes' or 'no': yes
Warning: Permanently added '10.70.37.24' (RSA) to the list of known hosts.
Last login: Thu May  5 17:27:03 2016 from 192.168.101.227

http://blog.csdn.net/kongqz/article/details/6338690
——————————————————生成步骤如下:——————————————————
第一步:生成密匙对,我用的是rsa的密钥。使用命令 "ssh-keygen -t rsa"


   [user1@rh user1]$ ssh-keygen -t rsa
   Generating public/private rsa key pair.
   Enter file in which to save the key (/home/user1/.ssh/id_rsa):
   Created directory '/home/user1/.ssh'.
   Enter passphrase (empty for no passphrase):
   Enter same passphrase again:
   Your identification has been saved in /home/user1/.ssh/id_rsa.
   Your public key has been saved in /home/user1/.ssh/id_rsa.pub.
   The key fingerprint is:
   e0:f0:3b:d3:0a:3d:da:42:01:6a:61:2f:6c:a0:c6:e7 user1@rh.test.com
   [user1@rh user1]$

我的:

Jackxiang:/usr/local/tads/htdocs/xxy/src/view/images #  ssh-keygen -t rsa
Generating 2048-bit rsa key pair
   3 o.oOo.oOo.oO
Key generated.
2048-bit rsa, root@Tencent, Tue Mar 02 2010 11:26:08 +0800
Passphrase :
Again      :
Key is stored with NULL passphrase.
(You can ignore the following warning if you are generating hostkeys.)
This is not recommended.
Don't do this unless you know what you're doing.
If file system protections fail (someone can access the keyfile),
or if the super-user is malicious, your key can be used without
the deciphering effort.
Private key saved to /root/.ssh2/id_rsa_2048_a
Public key saved to /root/.ssh2/id_rsa_2048_a.pub


注意,我这儿:
这儿公用密钥:/root/.ssh2/id_rsa_2048_a.pub
私有密钥:/root/.ssh2/id_rsa_2048_a
生成的过程中提示输入密钥对保存位置,直接回车,接受默认值就行了。接着会提示输入一

个不同于你的password的密码,直接回车,让它空着。当然,也可以输入一个。(我比较懒

,不想每次都要输入密码。) 这样,密钥对就生成完了。

其中公共密钥保存在 ~/.ssh/id_rsa.pub    =》 /root/.ssh2/id_rsa_2048_a.pub
私有密钥保存在 ~/.ssh/id_rsa                =》/root/.ssh2/id_rsa_2048_a


然后改一下 .ssh 目录的权限,使用命令 "chmod 755 ~/.ssh"   =》chmod 755  /root/.ssh2

   [user1@rh user1]$ chmod 755 /root/.ssh
   [user1@rh user1]$



之后把这个密钥对中的公共密钥复制到你要访问的机器上去(被以前需要密码访问的机器上),并保存为  

~/.ssh/authorized_keys   #My:    mv id_rsa_2048_a.pub authorized_key


   [user1@rh user1]$ scp ~/.ssh/id_rsa.pub rh1:/home/user1/.ssh/authorized_keys  //特别注意:这个是在服务器端操作的
   user1@rh1's password:
   id_rsa.pub                                    100%  228     3.2MB/s   00:00
   [user1@rh user1]$



之这样就大功告成了。之后你再用ssh scp sftp 之类的访问那台机器时,就不用输入密码

了,用在script上更是方便。


SSH服务的配置
1、配置SSH服务的运行参数,是通过修改配置文件/etc/ssh/sshd_config实现的。
2、因为SSH服务使用默认的配置已经能够很好的工作,如果仅仅提供SSH服务不需要修改。这里只介绍一
些常用的选项。
#Port 22
定义了SSH服务监听的断口号,SSH服务默认使用的端口号是22
#Proctocol 2,1
定义了SSH服务器使用SSH协议的顺序。默认识先使用SSH2协议,如果不成功则使用SSH1协议,为了安全起
见,可以设置只使用SSH2协议。
#ListenAddress 0.0.0.0
定义SSH服务器帮定的IP地址,默认绑定服务器所有可用的IP地址.
#PermitRootLogin yes
定义是否允许管理员登陆
#PermitEmptyPasswords no
定义是否允许空密码登陆.

#PasswordAuthentication no
定义是否使用口令认证方式,如果准备使用公钥认证可以设置为no
# ps aux|grep ssh
root      2649  0.0  0.0   3360   840 ?        Ss    2009   0:00 /usr/local/sbin/sshd -f /etc/ssh2/sshd2_config.l

vi  /etc/ssh2/sshd2_config.l
即可!


四 :
   吧 id_rsa ,拷到客户端,在服务器端吧id_rsa.pub 改名为authorized_keys


cat id_rsa.pub >> authorized_keys


注意:
ssh2的配置:
#PermitRootLogin yes
定义是否允许管理员登陆
#PermitEmptyPasswords no
定义是否允许空密码登陆.

把 id_rsa ,拷到客户端,在服务器端吧id_rsa.pub 改名为authorized_keys
mv id_rsa_2048_a.pub authorized_key  这个是公钥重新命名。而客户端则是安装在自己的机器上这儿是:id_rsa_2048_a
别弄反了!


写在最后:
root
Jackxiang:/root/.ssh2 # scp ~/.ssh2/id_rsa_2048_a /root/.ssh2/authorized_keys21
scp: warning: stat: id_rsa_2048_a (src): no such file (server msg: 'syserr: No such file or directory, file: /home/admin/.ssh2/id_rsa_2048_a')
Tencent:/root/.ssh2 # whoami
root

admin:x:0:100::/home/admin:/bin/bash

Jackxiang:/root/.ssh2 # ls /home/admin
***
不是真正的root,是root这个组的,于是得拷贝到:
/home/admin/.ssh2/  下,才行!


附送,方便一键ssh连接:


# User specific aliases and functions
alias df='df -Th'
alias l='ls -CF'
alias la='ls -A'
alias les='less -S'
alias topme='top -u `whoami`'
alias s33='ssh -Yi ~/.ssh/33 192.168.8.33'
alias s34='ssh -Yi ~/.ssh/33 192.168.8.34'
alias s35='ssh -Yi ~/.ssh/33 192.168.8.35'
alias s32='ssh -Yi ~/.ssh/33 192.168.8.32'
alias f32='sftp -oIdentityFile=~/.ssh/33 192.168.8.32'
alias s15='ssh -Yi ~/.ssh/15 192.168.8.15'
alias s16='ssh -Yi ~/.ssh/15 192.168.8.16'
alias s17='ssh -Yi ~/.ssh/15 192.168.8.17'
alias f15='sftp -oIdentityFile=~/.ssh/15 192.168.8.15'


都三年前写的了,
今年2011加上个参考:http://chenlb.blogjava.net/archive/2008/07/03/212293.html
由于想在jackxiang目录下建立一个文件测试samb看看,没有想到看是看到了,一用记事本打开后保存说是找不到文件路径,最后发现时文件权限的问题,于是作如下修改:

-rw-r--r-- 1 root root 14 02-12 07:50 mysambtest.txt

修改为:
[root@localhost home]# chown -R jackxiang.users jackxiang/

就可以用记事本等编辑工具修改了而不提示找不到路径了。


\\192.168.63.128

然后直接点击生成的jackxiang目录,输入通过smbpasswd –a jackxiang 输入密码。
进入目录,建立文件夹等。。。注意是:user组喔,你建立文件夹可能会出现问题,所以:

[root@localhost home]# chown -R jackxiang.jackxiang jackxiang/



-rw-rw-rw- 1 jackxiang jackxiang   18 02-12 07:55 mysambtest.txt
drwxr-xr-x 2 jackxiang jackxiang 4096 02-12 07:56 newfolder
drwxr-xr-x 2 jackxiang jackxiang 4096 02-12 07:56 newfoldertest
-rw-rw-rw- 1 jackxiang jackxiang    0 02-12 07:57 newfolder.txt


这时候才是随便建立目录和文件喽!

附:

#cd /usr/local/samba/bin

#testparms  

测试参数的设置格式,属性是否正确。

#smbstatus

Samba version 3.0.10
PID     Username      Group         Machine                        
-------------------------------------------------------------------
2502   root          UEC         uec-gcp      (192.168.1.2)
Service      pid     machine       Connected at
-------------------------------------------------------
IPC$          2502   uec-gcp       Mon Sep 12 13:11:31 2005
John docs     2502   uec-gcp      Mon Sep 12 12:59:01 2005
gcp docs      2502   uec-gcp       Mon Sep 12 12:58:54 2005
No locked files

#smbpasswd –a username  

添加访问的共享资源的用户,一般用户也可以访问SWAT,但只有查看状态的权限。
# smbtree
Password:  
WORKGROUP
        \SUN440EN                      Samba 3.0.10
                \SUN440ENADMIN$               IPC Service (Samba 3.0.10)
                \SUN440ENIPC$                 IPC Service (Samba 3.0.10)
                \SUN440ENjohn docs                
                \SUN440ENgcp docs    

[root@localhost bin]# ./testparm
Load smb config files from /usr/local/samba/lib/smb.conf
Processing section "[homes]"
Processing section "[brutxiang]"
Processing section "[lxliu]"
Processing section "[ianzhang]"
Processing section "[guodong]"
Processing section "[kamchen]"



#smbclient -L yourhostname.

显示了samba server 上的共享资源。


阅读全文
背景:最近,打下rpm包,想了解一下包依赖,特别是这个libiconv这个在linux里没有yum下的rpm包,于是自己打了一个编译过去了,但是如果在其它机器部署是不是还得装下自己打的rpm包呢,于是查了一下,发现php里面有一个libiconv.so.2指向打rpm编译时自己打的这个libiconv的rpm包,所以,还得安装这个自制的rpm包,也就是说需要打的php的rpm包依赖这个自己打的libiconv的rpm包,要在依赖里写明:Requires: libiconv ,不光是BuildRequires: libiconv。
[root@localhost sbin]# ldd php-fpm |grep libicon
        libiconv.so.2 => /usr/local/libiconv/lib64/libiconv.so.2 (0x00007f0a545db000)

同样,如果自己建立yum仓库时,在安装memcache包时也需要安装自己打的这个libevent的rpm包(指定打包安装的libevent动态库位置后,后面打包的memcache也是按这个指向编译并打包即可):
[root@iZ25dcp92ckZ multepoolserver]# ldd /usr/local/memcached/bin/memcached
        linux-vdso.so.1 =>  (0x00007ffc4d5b5000)
        libevent-2.0.so.5 => /usr/local/lib/libevent-2.0.so.5 (0x00007fac1db70000)
——————————————————————————————————————————
这块还好当时问过张宴兄弟,突然想到打包,他提到的这个ldd很有帮助:
向东 说:
centos出5.4了,那个nginx也写到5.4吧?呵呵
张宴 说:
有时间我更新一下,呵呵。
向东 说:
我想请教一个关于rpm包的问题,我安装某个东西的时候会说依赖某个*so,你一般是怎么反查到这个*.so属于某个rpm包?
向东 说:
在不同系统版本好像包也是有区分的
向东 说:

张宴 说:
只能根据rpm包的某个可执行文件查询其依赖的.so,ldd命令可以查询:
张宴 说:
# ldd /usr/local/webserver/nginx/sbin/nginx
        libcrypt.so.1 => /lib64/libcrypt.so.1 (0x0000003e78200000)
        libpcre.so.0 => /lib64/libpcre.so.0 (0x0000003e76a00000)
        libssl.so.6 => /lib64/libssl.so.6 (0x0000003610c00000)
        libcrypto.so.6 => /lib64/libcrypto.so.6 (0x0000003e75200000)
向东 说:
喔,linux在装某个rpm的时候依赖很多包,比如我装那个rz的时候就说我没有装什么什么so,你是如何解决?
张宴 说:
装rz,yum install lrzsz就OK了。
向东 说:
喔,我搞的是虚拟机啊,,我就直接挂载Linux的iso到虚拟机里面,想挨个安装rpm包依赖,
没有利用到linux的网络优势。
向东 说:
看来还得自己搞台服务器玩玩
张宴 说:
rpm安装有先后顺序的。
张宴 说:
rpm -i *.rpm
向东 说:
rpm -ihv rzsz-0.12.20-853.2*.rpm他会提示你缺少某个动态链接库,但是这个动态链接库的rpm包他没有说啊
向东 说:

向东 说:
当然用yum联网他会给一切安排好

向东 说:
我的网站给个链接:www.jackxiang.com
向东 说:
大学的时候我就看到你叫回忆未来,我说说我为何叫回忆未来:如果我放弃了我的员工,我永远不会看到未来的希望,如果我放弃了我的客户,我则失去了回忆的必要,信念和希望必须专注与此,我就是回忆未来-向东  缘分啊。
向东 说:

于是搞了个虚拟机NAT方式共享上网, yum install lrzsz:


[root@localhost ~]# yum install lrzsz
Loaded plugins: fastestmirror
Determining fastest mirrors
* addons: mirrors.163.com
* base: mirrors.163.com
* extras: mirrors.163.com
* updates: mirrors.163.com
addons                                                                                                       |  951 B     00:00    
addons/primary                                                                                               |  201 B     00:00    
base                                                                                                         | 2.1 kB     00:00    
base/primary_db                                     78% [================================         ] 141 kB/s | 1.2 MB     00:02 ETA



1)linux下查找指定文件名:
find PATH -type f -name "aaa.txt"


2)find+grep配合查找包含某字符串的文件并显示行号:
#> find . -type f  -exec grep 'mingtian'  -l {} \;
grep -l :是显示匹配的内容的文件名字!
或者:
#> find . -type f -name "*.*" &#124;xargs grep 'xiaoshou' -l
(这个方法 不好,挺乱的,还慢,推荐前一个方法!)

such as :
find . -type f -name "*.php"&#124;xargs grep -in "date" -R
分页: 23/23 第一页 上页 13 14 15 16 17 18 19 20 21 22 23 最后页 [ 显示模式: 摘要 | 列表 ]