写给自己,So,
场景: 线上代码要升级,此次代码要上线时,但线上和线下的某几个文件不一样,不能直接覆盖,需要对比,升级文件通过svn导出(包含文件夹导出),而线上用sz(可sz不能帮助建立文件的目录,导出都在一个目录里),于是否想通过Beyond Compare做文件夹的比较。
问题: 如何把线上的导出的部分需要覆盖的文件在导出后再通过建立文件夹和线上结构一样?【要是sz能帮助在导出时就按文件夹存放好就好了,可好像没有看到有这个选项】
核心: 如何重建线上需要覆盖的文件,好让Beyond Compare比较两个文件夹。
步骤: 两个步骤
(1)摘取线上的需要覆盖的文件名下载到线下一个文件夹中。
把线下svn要覆盖的文件导出到目录后用find命令:find . -type f 找出所有的文件,该命令的结果已经包含了目录和文件。
把这些文件名,前面加上sz及可导出到线下的一个文件夹中。
(2)建立和线上一样的目录并拷贝对应文件到目录中
建立和线上一样的目录结构:对线下svn导出的文件(注意是:export才包含文件夹,而save revision to这个的导出比较乱。参考:http://justwinit.cn/post/4847/)
用find命令找出文件夹:
find . -type d
再在find结果的内容前面添加mkdir ,后到线上导出的文件目录下运行这个mkdir 的命令:在线上代码的文件夹下生成目录。
(3)构造cp a.php abc/a.php 类似并运行。
在线下svn包含目录的文件中,运行如相命令,生成文件a.txt:
以上文件是一个文件名。下一步就是要一个 abc/a.php ,这个好办,直接:find . -type f 就能搞定,为b.txt,
Linux提供了一个: paste 命令:
结果如下:
a.php abc/a.php
再vim或者awk在前面加一个正则替换实现:cp a.php abc/a.php,即可,再到线上文件下载的目录下运行这个生成好的脚本,也就完成了把原来的文件放到对应的目录下。
场景: 线上代码要升级,此次代码要上线时,但线上和线下的某几个文件不一样,不能直接覆盖,需要对比,升级文件通过svn导出(包含文件夹导出),而线上用sz(可sz不能帮助建立文件的目录,导出都在一个目录里),于是否想通过Beyond Compare做文件夹的比较。
问题: 如何把线上的导出的部分需要覆盖的文件在导出后再通过建立文件夹和线上结构一样?【要是sz能帮助在导出时就按文件夹存放好就好了,可好像没有看到有这个选项】
核心: 如何重建线上需要覆盖的文件,好让Beyond Compare比较两个文件夹。
步骤: 两个步骤
(1)摘取线上的需要覆盖的文件名下载到线下一个文件夹中。
把线下svn要覆盖的文件导出到目录后用find命令:find . -type f 找出所有的文件,该命令的结果已经包含了目录和文件。
把这些文件名,前面加上sz及可导出到线下的一个文件夹中。
(2)建立和线上一样的目录并拷贝对应文件到目录中
建立和线上一样的目录结构:对线下svn导出的文件(注意是:export才包含文件夹,而save revision to这个的导出比较乱。参考:http://justwinit.cn/post/4847/)
用find命令找出文件夹:
find . -type d
再在find结果的内容前面添加mkdir ,后到线上导出的文件目录下运行这个mkdir 的命令:在线上代码的文件夹下生成目录。
(3)构造cp a.php abc/a.php 类似并运行。
在线下svn包含目录的文件中,运行如相命令,生成文件a.txt:
以上文件是一个文件名。下一步就是要一个 abc/a.php ,这个好办,直接:find . -type f 就能搞定,为b.txt,
Linux提供了一个: paste 命令:
结果如下:
a.php abc/a.php
再vim或者awk在前面加一个正则替换实现:cp a.php abc/a.php,即可,再到线上文件下载的目录下运行这个生成好的脚本,也就完成了把原来的文件放到对应的目录下。
CentOS6.2网络问题:eth0 … does not seem to be present, delaying initialization
先是设置了静态IP地址,然后在 service network restart 的时候总是提示eth0 “does not seem to be present, delaying initialization”,然后当然也就得不到有效的IP地址。
折腾来折腾去,
(1)在GUI下用了RHEL自带的网络工具(System→Administration→Network)来配置,一进去就看到网卡是inactive的,咦,这是怎么回事?!于是点击“Active”,将该网卡激活,然后再重启系统,又回到了有问题的状态,神奇了!于是再进GUI工具查看,还是inactive的,气死我了。似乎怎么设置,重启之后都要回到inactive的状态,于是在GUI里先把这块网卡给删了,然后再添加上。
再重启,搞定,没有再出现上面的问题。
(2)setup命令把eth1删除了,重新设置下eth0,再重新启动时候试试看...
这个setup是后来才加的,以前叫netconfig,后来rpm包就是setup,安装方法如下:
如下所示Url:http://justwinit.cn/post/1718/
这个安后,直接setup就可以配置网卡了,呵呵。
那个: yum install netconfig 好像不太起用,在新的centos6.2实际实践中发现的。
法二:
我这样,好像行了,至于这个setup这rpm包,上网后给安上这个,看来还是很方便的:
再修改,换个网卡由eth0-->eth1:
修改:
cd /etc/sysconfig/network-scripts/;
cat ifcfg-eth0 > ifcfg-eth1
vi /etc/sysconfig/network-scripts/ifcfg-eth1
修改为:
[root@bogon ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth1
先是设置了静态IP地址,然后在 service network restart 的时候总是提示eth0 “does not seem to be present, delaying initialization”,然后当然也就得不到有效的IP地址。
折腾来折腾去,
(1)在GUI下用了RHEL自带的网络工具(System→Administration→Network)来配置,一进去就看到网卡是inactive的,咦,这是怎么回事?!于是点击“Active”,将该网卡激活,然后再重启系统,又回到了有问题的状态,神奇了!于是再进GUI工具查看,还是inactive的,气死我了。似乎怎么设置,重启之后都要回到inactive的状态,于是在GUI里先把这块网卡给删了,然后再添加上。
再重启,搞定,没有再出现上面的问题。
(2)setup命令把eth1删除了,重新设置下eth0,再重新启动时候试试看...
这个setup是后来才加的,以前叫netconfig,后来rpm包就是setup,安装方法如下:
如下所示Url:http://justwinit.cn/post/1718/
这个安后,直接setup就可以配置网卡了,呵呵。
那个: yum install netconfig 好像不太起用,在新的centos6.2实际实践中发现的。
法二:
我这样,好像行了,至于这个setup这rpm包,上网后给安上这个,看来还是很方便的:
再修改,换个网卡由eth0-->eth1:
修改:
cd /etc/sysconfig/network-scripts/;
cat ifcfg-eth0 > ifcfg-eth1
vi /etc/sysconfig/network-scripts/ifcfg-eth1
修改为:
[root@bogon ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth1
[实践Ok]必须记录备案之Linux下VMware虚拟机NAT上网实现
我们在Windows下使用XP时,经常想用Linux,安装了一个Vmware后,但同时又想通过这个Linux的yum命令去更新一下rpm包,下载Lamp等等,
这儿我就来记录并实践一下这个过程,以便以后使用。
共有五个点需要注意:
阅读全文
我们在Windows下使用XP时,经常想用Linux,安装了一个Vmware后,但同时又想通过这个Linux的yum命令去更新一下rpm包,下载Lamp等等,
这儿我就来记录并实践一下这个过程,以便以后使用。
共有五个点需要注意:
阅读全文
昨天由zend studio 9.0.0升级到zend studio 9.0.1,发现提并到线上的代码通过Vim查看时都有了:^M,于是发现这是一个Windows的格式,得把换行格式设置 UNIX,设置方法:
本地使用window平台,服务器使用linux,有时候难免会出现在程序在本地window上运行正常,到linux上出现报错,而问题的原因,可能就是这个换行格式的不兼容引起的,window下的换行是'/r/n',而linux/unix下是'/n',下边说说设置方法:
Window->Preferences->General->Workspace [右下角区域]
New text file line delimiter: radio buttons for 'Default' or 'Other' with a dropdown including Unix (yay),选Other:Unix 即可。
同时,你也可以在它旁边设置默认的PHP编码:如修改为Utf8等。
本地使用window平台,服务器使用linux,有时候难免会出现在程序在本地window上运行正常,到linux上出现报错,而问题的原因,可能就是这个换行格式的不兼容引起的,window下的换行是'/r/n',而linux/unix下是'/n',下边说说设置方法:
Window->Preferences->General->Workspace [右下角区域]
New text file line delimiter: radio buttons for 'Default' or 'Other' with a dropdown including Unix (yay),选Other:Unix 即可。
同时,你也可以在它旁边设置默认的PHP编码:如修改为Utf8等。
Putty也有这个代理的功能,但Putty有一个proxy选项可以选http的代理哟,还真可以的。也有几个不好也就是没有很好的支持SZ,RZ,还有Stfp等,尽管有一个哥们风雪之隅写了一篇文章可以支持sz,rz等,Le Putty – Putty with Zmodem:http://www.laruence.com/2010/04/21/1442.html,但配置起来还是较为麻烦,那个Putty也没有SecureCRT好用不是,呵呵,在网上找了一篇文章能解决这个问题,实践还真可以哩,以前就一直用Putty了,呵呵。
1. 在secureCRT中,options -> Global Options -> Firewall,点击 Add,填上name,选择适当的 Type,例如 Http
2. Session Options -> SSH2,修改 Firewall 选项,用上一步设置好的 proxy。其实这一步是先试链接不上,再设置它的防火墙,选第一步里的防火墙配置的http代理等的设置。
3. enjoy it
实践Ok来源:http://blog.csdn.net/yhcharles/article/details/6697405
它还可以用来做端口转发,俗称翻墙:http://www.jems.me/blog/web/29-%E4%BD%BF%E7%94%A8securecrt%E5%AE%9E%E7%8E%B0windows%E7%8E%AF%E5%A2%83ssh%E4%BB%A3%E7%90%86%E7%BF%BB%E5%A2%99.html
阅读全文
1. 在secureCRT中,options -> Global Options -> Firewall,点击 Add,填上name,选择适当的 Type,例如 Http
2. Session Options -> SSH2,修改 Firewall 选项,用上一步设置好的 proxy。其实这一步是先试链接不上,再设置它的防火墙,选第一步里的防火墙配置的http代理等的设置。
3. enjoy it
实践Ok来源:http://blog.csdn.net/yhcharles/article/details/6697405
它还可以用来做端口转发,俗称翻墙:http://www.jems.me/blog/web/29-%E4%BD%BF%E7%94%A8securecrt%E5%AE%9E%E7%8E%B0windows%E7%8E%AF%E5%A2%83ssh%E4%BB%A3%E7%90%86%E7%BF%BB%E5%A2%99.html
阅读全文
查看设备上所有的活动的进程:
fuser -m /dev/hda5
杀死所有访问该设备的文件:
fuser -k /dev/hda5
访问某个文件是否打开,有哪些进程在使用:
fuser -m /usr/local/apache2/conf/httpd.conf
实践如下:
fuser -m /usr/local
/usr/local: 1272e 1274e 1275e 1278e 1968ce 2139m 2587e 2682e 2683 2723e 2797ce 3689e 3692ce 3720e 3735e 5664ce 6244ce 6247ce 6774e 6790e 6927e 7075e 7224e 7226e 7227e 7485ce 7495ce 7513ce 9269e 9903ce 9913ce 11553e 11791e 12025e 12029e 12057e 12061e 12198e 12448e 12534e 12584e 13053e 13133e 13635e 13672e 13814e 13829e 13831e 13832e 14099e 14159e 14682e 14813e 14840e 14907e 15621e 15810e 16200ce 16208ce 16331e 16960e 17938e 18505e 18507e 18694e 19704m
fuser -m /usr/local/apache2/conf/httpd.conf
/usr/local/apache2/conf/httpd.conf: 1272e 1274e 1275e 1278e 1968ce 2139m 2587e 2682e 2683 2723e 2797ce 3689e 3692ce 3720e 3735e 5664ce 6244ce 6247ce 6774e 6790e 6927e 7075e 7224e 7226e 7227e 7485ce 7495ce 7513ce 9269e 9903ce 9913ce 11553e 11791e 12025e 12029e 12057e 12061e 12198e 12448e 12534e 12584e 13053e 13133e 13635e 13672e 13814e 13829e 13831e 13832e 14099e 14159e 14682e 14813e 14840e 14907e 15621e 15810e 16200ce 16208ce 16331e 16960e 17938e 19704m
登录用户名:
logname
root
显示行号:
nl /usr/local/apache2/conf/httpd.conf
script -a:输出附在末尾:script option file
报告所连接的设备和终端:
tty
/dev/pts/5
whereis fuser: 给出系统命令二进制文件及其在线手册的路径:
fuser: /bin/fuser /usr/share/man/man1/fuser.1.gz /usr/share/man/man1p/fuser.1p.gz
定时任务只能通过crontab -e 来编辑计划任务吗
我想通过shell来添增加或减少计划项,
可是直接添加或减少不行哟
如比
$echo " 0 6 * * * /usr/bin/start.sh" /usr/spool/cron/crontabs/root
添加倒是成功了,可是不会执行..必须通过手工 crontab -e才行
请问该如何做哟,谢谢!
请问如何用shell添加或减少crontab -e 项
1.copy or backup
#crontab -l > /tmp/root.crontab
2.edit
edit root.crontab by vi,emacs, ed ,etc etc .
3.activate
#crontab /tmp/root.crontab
点评:有这种需求一很有可能是搞运营开发的,哇哈。
导入原理:usage: crontab [-u user] file
-l (list user's crontab)
> 重定向
自动化脚本修改。
By:jack
来源:http://bbs.chinaunix.net/thread-542028-1-1.html
我想通过shell来添增加或减少计划项,
可是直接添加或减少不行哟
如比
$echo " 0 6 * * * /usr/bin/start.sh" /usr/spool/cron/crontabs/root
添加倒是成功了,可是不会执行..必须通过手工 crontab -e才行
请问该如何做哟,谢谢!
请问如何用shell添加或减少crontab -e 项
1.copy or backup
#crontab -l > /tmp/root.crontab
2.edit
edit root.crontab by vi,emacs, ed ,etc etc .
3.activate
#crontab /tmp/root.crontab
点评:有这种需求一很有可能是搞运营开发的,哇哈。
导入原理:usage: crontab [-u user] file
-l (list user's crontab)
> 重定向
自动化脚本修改。
By:jack
来源:http://bbs.chinaunix.net/thread-542028-1-1.html
我们先做这样一个小小的尝试,请打开浏览器,从网页上随便复制一段文字,然后打开VIM,用VIM,用"p"粘贴一下,你会发现,什么都没有站贴过来,原因是这样的,不同于Windows,VIM具有多个剪贴板,并且和系统剪贴板是完全独立的,所以当你复制浏览器里的文字的时候,这段文字保存在了系统剪贴板,当你是用"p"来粘贴的时候,实际上,他读取的是VIM的剪切板。
那怎么方便的将系统剪贴板的内容复制过来呢?简单!用另外一个快捷方式"Shift+Insert"就可以了,如果你在使用Gvim的话,直接用鼠标中键也可起到相同的作用。是不是很简单?
OK!我们开始进阶!
我们前面说过,VIM具有多个剪切板,目的是为了用户在做较复杂的字符处理的时候,可以更方便的复制粘贴。请现在使用一下":reg"命令(先按 ESC键,退出编辑模式,然后按:进入命令模式,然后输入reg回车),看到了?屏幕上的输出结果!是不是特别眼熟,对了!就是您之前复制过的所有内容!也许这时候您还发现,VIM的剪切板原来有这么多个,按照数字还有符号一个一个的区分开的,这里举一个编号的例子--""5,看到了吗?是以"开头的。还有!有没有看到编号为"+的剪切板?里面的内容是不是刚才你在浏览器里复制的那段文字啊?呵呵……没错了!系统剪切板的编号就是"+。
好了,这时候您已经知道了如何查看之前的所有剪贴板内容,我们现在就试着把某一个特定剪切板的内容复制进我们正在编辑的文件中。我们知道,vi的粘贴指令是"p",但是如果要粘贴一个特定的剪贴板,只是用p就不行了,那怎么办?简单!把剪贴板的编号带上不就可以了?现在先按ESC,退出编辑模式,然后依次按"+p这三个字符(怎么按?不会吧!"和+怎么按?用Shift啊!),好了!你看看,之前在浏览器中复制的这段文本,是不是被粘贴进文档中了? 如何将系统剪切板里的内容复制进VIM当中,您已经清楚了。那如何将ViM中复制的字符粘贴到其他地方呢?很简单,我们只需要把要复制的文字,复制进 "+剪切板不就可以了?("+剪切板是系统剪切板,忘记了?)在VIM中,复制的指令是y(在非编辑模式下按y就可以了),那要将文本复制进指定的剪切板,只需要加上剪切板的编号就可以了。举个例子,我们希望把VIM中的一段文本复制下来,然后粘贴到浏览器的地址栏中:第一步,现把需要复制的文字选中(非编辑模式下),然后在键盘上依次按"+y这三个字符,OK!已经复制下来了,现在用:reg命令看看,是不是在"+剪切板中了? 好了,目前为止,您已经大致掌握了VIM剪切板的基本用法,当然,VIM剪切板的功能还很强大,本文也不能尽数道来,就请您继续发掘吧。
vi中多个文件相互之间的复制、粘贴功能简介!
发布: 2007-6-08 22:43 | 作者: seanhe | 来源: | 查看: 25次 | 进入软件测试论坛讨论
昨天有人提出此类问题,我特地加以编辑一下,请大家共享,可能写的不好!
大家在vi编辑中,常常遇到想把文件A里面的一行或多行,复制到B文件里面去
(可能很多人不知道怎么办),该怎么做了?
下面是几中方法:
1.如果你有多台机器,而且是联网的,你可以.netterm虚拟终端,telnet登陆主机对A文件进行修改、复制,然后打开B文件粘贴过去!
2.如果是单机,当然要用unix自带的编辑功能呢
先简单介绍一些vi编辑里的命令:
(A).yw 将当前字存入无名缓冲区,前面可加"x,表示存入名字为x的有名
缓冲区(x为a-z),也可加数字表示存入的字数,以后可用P或p命
令取出
yy 将当前行存入无名缓冲区,用法参看yw
(B).命令如下:a-Z 是缓冲区,也可移出数字1-9指定的删除缓冲区
利用命名缓冲区可很好地保存若干文本段,便于以后存取、移动或者重排。这些缓冲区用a到z字母命名!为了访问这些缓冲区中的一个,要使用双引号
例如:要把一行插入a缓冲区,可键入:
"ayy
为了把这个文本放回该文件中,键入"ap
(c).m做标志命令:
m 字母 用字母标记当前行,以后可用 '字母使光标移动到当前行,
(参看'命令)
列子:1。将a文件中的4行到b文件中
命令如下:"ay4+
:ex b (转到b文件中)
然后"ap
2. 将a中多行复制到b文件中
先在开始处做标志mk
然后在末尾用"ay'k (光标自动回到开始处,此时已经把你的内容放到缓冲区了)
其中a表示缓冲区a
然后用ex转义到你的文件B中,然后用"ap命令粘贴就行
3。如果你文件中有多次要复制粘贴的话,看下面:
a表示缓冲区a ,你还继续可以使用缓冲b吗
缓冲区有a-z和1-9这么多
缓冲区就好象windows下的煎切版一样,它有好多个,你可以把你想要的复制进去,然后粘贴,只不过你用"ay时候多换a就是了,如你要复制462行用"ay ,复制536行用"by
我编写的不好,恳请斑竹帮我修改和补充,谢谢
来自:http://hi.baidu.com/%B4%FA%CD%F2%BB%D4/blog/item/56d18ddf9eb3d4d58c102969.html
那怎么方便的将系统剪贴板的内容复制过来呢?简单!用另外一个快捷方式"Shift+Insert"就可以了,如果你在使用Gvim的话,直接用鼠标中键也可起到相同的作用。是不是很简单?
OK!我们开始进阶!
我们前面说过,VIM具有多个剪切板,目的是为了用户在做较复杂的字符处理的时候,可以更方便的复制粘贴。请现在使用一下":reg"命令(先按 ESC键,退出编辑模式,然后按:进入命令模式,然后输入reg回车),看到了?屏幕上的输出结果!是不是特别眼熟,对了!就是您之前复制过的所有内容!也许这时候您还发现,VIM的剪切板原来有这么多个,按照数字还有符号一个一个的区分开的,这里举一个编号的例子--""5,看到了吗?是以"开头的。还有!有没有看到编号为"+的剪切板?里面的内容是不是刚才你在浏览器里复制的那段文字啊?呵呵……没错了!系统剪切板的编号就是"+。
好了,这时候您已经知道了如何查看之前的所有剪贴板内容,我们现在就试着把某一个特定剪切板的内容复制进我们正在编辑的文件中。我们知道,vi的粘贴指令是"p",但是如果要粘贴一个特定的剪贴板,只是用p就不行了,那怎么办?简单!把剪贴板的编号带上不就可以了?现在先按ESC,退出编辑模式,然后依次按"+p这三个字符(怎么按?不会吧!"和+怎么按?用Shift啊!),好了!你看看,之前在浏览器中复制的这段文本,是不是被粘贴进文档中了? 如何将系统剪切板里的内容复制进VIM当中,您已经清楚了。那如何将ViM中复制的字符粘贴到其他地方呢?很简单,我们只需要把要复制的文字,复制进 "+剪切板不就可以了?("+剪切板是系统剪切板,忘记了?)在VIM中,复制的指令是y(在非编辑模式下按y就可以了),那要将文本复制进指定的剪切板,只需要加上剪切板的编号就可以了。举个例子,我们希望把VIM中的一段文本复制下来,然后粘贴到浏览器的地址栏中:第一步,现把需要复制的文字选中(非编辑模式下),然后在键盘上依次按"+y这三个字符,OK!已经复制下来了,现在用:reg命令看看,是不是在"+剪切板中了? 好了,目前为止,您已经大致掌握了VIM剪切板的基本用法,当然,VIM剪切板的功能还很强大,本文也不能尽数道来,就请您继续发掘吧。
vi中多个文件相互之间的复制、粘贴功能简介!
发布: 2007-6-08 22:43 | 作者: seanhe | 来源: | 查看: 25次 | 进入软件测试论坛讨论
昨天有人提出此类问题,我特地加以编辑一下,请大家共享,可能写的不好!
大家在vi编辑中,常常遇到想把文件A里面的一行或多行,复制到B文件里面去
(可能很多人不知道怎么办),该怎么做了?
下面是几中方法:
1.如果你有多台机器,而且是联网的,你可以.netterm虚拟终端,telnet登陆主机对A文件进行修改、复制,然后打开B文件粘贴过去!
2.如果是单机,当然要用unix自带的编辑功能呢
先简单介绍一些vi编辑里的命令:
(A).yw 将当前字存入无名缓冲区,前面可加"x,表示存入名字为x的有名
缓冲区(x为a-z),也可加数字表示存入的字数,以后可用P或p命
令取出
yy 将当前行存入无名缓冲区,用法参看yw
(B).命令如下:a-Z 是缓冲区,也可移出数字1-9指定的删除缓冲区
利用命名缓冲区可很好地保存若干文本段,便于以后存取、移动或者重排。这些缓冲区用a到z字母命名!为了访问这些缓冲区中的一个,要使用双引号
例如:要把一行插入a缓冲区,可键入:
"ayy
为了把这个文本放回该文件中,键入"ap
(c).m做标志命令:
m 字母 用字母标记当前行,以后可用 '字母使光标移动到当前行,
(参看'命令)
列子:1。将a文件中的4行到b文件中
命令如下:"ay4+
:ex b (转到b文件中)
然后"ap
2. 将a中多行复制到b文件中
先在开始处做标志mk
然后在末尾用"ay'k (光标自动回到开始处,此时已经把你的内容放到缓冲区了)
其中a表示缓冲区a
然后用ex转义到你的文件B中,然后用"ap命令粘贴就行
3。如果你文件中有多次要复制粘贴的话,看下面:
a表示缓冲区a ,你还继续可以使用缓冲b吗
缓冲区有a-z和1-9这么多
缓冲区就好象windows下的煎切版一样,它有好多个,你可以把你想要的复制进去,然后粘贴,只不过你用"ay时候多换a就是了,如你要复制462行用"ay ,复制536行用"by
我编写的不好,恳请斑竹帮我修改和补充,谢谢
来自:http://hi.baidu.com/%B4%FA%CD%F2%BB%D4/blog/item/56d18ddf9eb3d4d58c102969.html
以前我也写过类似的博文,今天也重再抄一个吧:
日常维护我们经常会遇到某个程序使用了哪些端口,某个端口被哪个程序占用,如何查看呢,下面介绍如下:
对windows系统:通过windows任务管理器找到应用程序,右击“转到进程”,查看进程pid号(如无此列,请在“查看”-“选择列”中添加该列),然后在 cmd命令行下面输入netstat -an -o 然后找到对应的PID号 就能找到端口了。同理,某个端口被哪个程序占用,反查便可。注:有时netstat -na -o查出内容太多,不易找到pid,可通过重定向到txt文件(>pid.txt)查找。
对linux系统:查看某程序使用端口,在控制台输入netstat -na -p |grep pid/program name,便可;查看某端口被程序占用,在控制台输入lsof -i tcp:port或netstat -na -p |grep port便可。
当然,以上也可以通过cport或sv等端口查看工具查看。如:
日常维护我们经常会遇到某个程序使用了哪些端口,某个端口被哪个程序占用,如何查看呢,下面介绍如下:
对windows系统:通过windows任务管理器找到应用程序,右击“转到进程”,查看进程pid号(如无此列,请在“查看”-“选择列”中添加该列),然后在 cmd命令行下面输入netstat -an -o 然后找到对应的PID号 就能找到端口了。同理,某个端口被哪个程序占用,反查便可。注:有时netstat -na -o查出内容太多,不易找到pid,可通过重定向到txt文件(>pid.txt)查找。
对linux系统:查看某程序使用端口,在控制台输入netstat -na -p |grep pid/program name,便可;查看某端口被程序占用,在控制台输入lsof -i tcp:port或netstat -na -p |grep port便可。
当然,以上也可以通过cport或sv等端口查看工具查看。如:
Linux下运行一个PHP程序去执行一项艰巨的串口查询任务,读出串口值,但从来不推出,Ps进程时,发现进程出现两个状态,如下:
上面两行,出现了D,和S的进程状态,于是查询网络上的解释如下:
D Uninterruptible sleep (usually IO)
不可中断的深度睡眠,一般由IO引起,同步IO在做读或写操作时,此进程不能做其它事情,只能等待,这时进程处于这种状态,如果程序采用异步IO,这种状态应该就很少见到了
S Interruptible sleep (waiting for an event to complete)
可接收信号的睡眠状态,sleep函数可演示这种状态
主要是想对D进程做下研究,如下:
S其实很正常,但是那个D,有一类垃圾却并非这么容易打扫,那就是我们常见的状态为 D (Uninterruptible sleep) ,这些垃圾进程要么是求而不得,像怨妇一般等待资源(D),这种垃圾进程偏偏是刀枪不入的,不管换哪种枪法都杀不掉它们。无奈,只好reboot,像剿灭禽流感那样不分青红皂白地一律扑杀!
怨妇 D,往往是由于 I/O 资源得不到满足,而引发等待,在内核源码 fs/proc/array.c 里,其文字定义为“ "D (disk sleep)", /* 2 */ ”(由此可知 D 原是Disk的打头字母),对应着 include/linux/sched.h 里的“ #define TASK_UNINTERRUPTIBLE 2 ”。举个例子,当 NFS 服务端关闭之时,若未事先 umount 相关目录,在 NFS 客户端执行 df 就会挂住整个登录会话,按 Ctrl+C 、Ctrl+Z 都无济于事。断开连接再登录,执行 ps axf 则看到刚才的 df 进程状态位已变成了 D ,kill -9 无法杀灭。正确的处理方式,是马上恢复 NFS 服务端,再度提供服务,刚才挂起的 df 进程发现了其苦苦等待的资源,便完成任务,自动消亡。若 NFS 服务端无法恢复服务,在 reboot 之前也应将 /etc/mtab 里的相关 NFS mount 项删除,以免 reboot 过程例行调用 netfs stop 时再次发生等待资源,导致系统重启过程挂起。
ps 的手册里说D状态是uninterruptible sleep,Linux进程有两种睡眠状态,一种interruptible sleep,处在这种睡眠状态的进程是可以通过给它发信号来唤醒的,比如发HUP信号给nginx的master进程可以让nginx重新加载配置文件而 不需要重新启动nginx进程;另外一种睡眠状态是uninterruptible sleep,处在这种状态的进程不接受外来的任何信号,这也是为什么之前我无法用kill杀掉这些处于D状态的进程,无论是”kill”, “kill -9″还是”kill -15″,因为它们压根儿就不受这些信号的支配。
进程为什么会被置于uninterruptible sleep状态呢?处于uninterruptible sleep状态的进程通常是在等待IO,比如磁盘IO,网络IO,其他外设IO,如果进程正在等待的IO在较长的时间内都没有响应,那么就很会不幸地被 ps看到了,同时也就意味着很有可能有IO出了问题,可能是外设本身出了故障,也可能是比如挂载的远程文件系统已经不可访问了。
正是因为得不到IO的相应,进程才进入了uninterruptible sleep状态,所以要想使进程从uninterruptible sleep状态恢复,就得使进程等待的IO恢复,比如如果是因为从远程挂载的NFS卷不可访问导致进程进入uninterruptible sleep状态的,那么可以通过恢复该NFS卷的连接来使进程的IO请求得到满足,除此之外,要想干掉处在D状态进程就只能重启整个Linux系统了。
看到有人说如果要想杀掉D状态的进程,通常可以去杀掉它的父进程(通常是shell,我理解的这种情况是在shell下直接运行的该进程,之后该进 程转入了D状态),于是我就照做了,之后就出现了上面的状态:他们的父进程被杀掉了,但是他们的父进程PID都变成了1,也就是init进程,这下可如何 是好?此时我这些D状态的进程已经影响到其他一些进程的运行,而已经无法访问的NFS卷又在段时间内无法恢复,那么,只好重新启动了,root不是玉皇大 帝,也有无奈的时候。
跟czhang说起这个事,觉得Linux如果有这么一个专用的垃圾回收进程就好了:系统自动或者用户手动把僵尸进程,和比如之前我遇到的D状态进程的PPID设为这个垃圾回收进程,那么通过干掉这个垃圾回收进程来清理这些僵尸们,这样该有多美好…
总结:我估计是我的PHP代码正在等待串口的温度数据返回罢,一直没有等着吧,就等呀等,其实是那一瞬间给我用Ps命令监控到了,呵呵。EOF
来源:
http://www.blogjava.net/fhtdy2004/archive/2009/07/05/285515.html
http://hi.baidu.com/xuwanbest/blog/item/45f18f3dbce0aece9e3d6255.html
上面两行,出现了D,和S的进程状态,于是查询网络上的解释如下:
D Uninterruptible sleep (usually IO)
不可中断的深度睡眠,一般由IO引起,同步IO在做读或写操作时,此进程不能做其它事情,只能等待,这时进程处于这种状态,如果程序采用异步IO,这种状态应该就很少见到了
S Interruptible sleep (waiting for an event to complete)
可接收信号的睡眠状态,sleep函数可演示这种状态
主要是想对D进程做下研究,如下:
S其实很正常,但是那个D,有一类垃圾却并非这么容易打扫,那就是我们常见的状态为 D (Uninterruptible sleep) ,这些垃圾进程要么是求而不得,像怨妇一般等待资源(D),这种垃圾进程偏偏是刀枪不入的,不管换哪种枪法都杀不掉它们。无奈,只好reboot,像剿灭禽流感那样不分青红皂白地一律扑杀!
怨妇 D,往往是由于 I/O 资源得不到满足,而引发等待,在内核源码 fs/proc/array.c 里,其文字定义为“ "D (disk sleep)", /* 2 */ ”(由此可知 D 原是Disk的打头字母),对应着 include/linux/sched.h 里的“ #define TASK_UNINTERRUPTIBLE 2 ”。举个例子,当 NFS 服务端关闭之时,若未事先 umount 相关目录,在 NFS 客户端执行 df 就会挂住整个登录会话,按 Ctrl+C 、Ctrl+Z 都无济于事。断开连接再登录,执行 ps axf 则看到刚才的 df 进程状态位已变成了 D ,kill -9 无法杀灭。正确的处理方式,是马上恢复 NFS 服务端,再度提供服务,刚才挂起的 df 进程发现了其苦苦等待的资源,便完成任务,自动消亡。若 NFS 服务端无法恢复服务,在 reboot 之前也应将 /etc/mtab 里的相关 NFS mount 项删除,以免 reboot 过程例行调用 netfs stop 时再次发生等待资源,导致系统重启过程挂起。
ps 的手册里说D状态是uninterruptible sleep,Linux进程有两种睡眠状态,一种interruptible sleep,处在这种睡眠状态的进程是可以通过给它发信号来唤醒的,比如发HUP信号给nginx的master进程可以让nginx重新加载配置文件而 不需要重新启动nginx进程;另外一种睡眠状态是uninterruptible sleep,处在这种状态的进程不接受外来的任何信号,这也是为什么之前我无法用kill杀掉这些处于D状态的进程,无论是”kill”, “kill -9″还是”kill -15″,因为它们压根儿就不受这些信号的支配。
进程为什么会被置于uninterruptible sleep状态呢?处于uninterruptible sleep状态的进程通常是在等待IO,比如磁盘IO,网络IO,其他外设IO,如果进程正在等待的IO在较长的时间内都没有响应,那么就很会不幸地被 ps看到了,同时也就意味着很有可能有IO出了问题,可能是外设本身出了故障,也可能是比如挂载的远程文件系统已经不可访问了。
正是因为得不到IO的相应,进程才进入了uninterruptible sleep状态,所以要想使进程从uninterruptible sleep状态恢复,就得使进程等待的IO恢复,比如如果是因为从远程挂载的NFS卷不可访问导致进程进入uninterruptible sleep状态的,那么可以通过恢复该NFS卷的连接来使进程的IO请求得到满足,除此之外,要想干掉处在D状态进程就只能重启整个Linux系统了。
看到有人说如果要想杀掉D状态的进程,通常可以去杀掉它的父进程(通常是shell,我理解的这种情况是在shell下直接运行的该进程,之后该进 程转入了D状态),于是我就照做了,之后就出现了上面的状态:他们的父进程被杀掉了,但是他们的父进程PID都变成了1,也就是init进程,这下可如何 是好?此时我这些D状态的进程已经影响到其他一些进程的运行,而已经无法访问的NFS卷又在段时间内无法恢复,那么,只好重新启动了,root不是玉皇大 帝,也有无奈的时候。
跟czhang说起这个事,觉得Linux如果有这么一个专用的垃圾回收进程就好了:系统自动或者用户手动把僵尸进程,和比如之前我遇到的D状态进程的PPID设为这个垃圾回收进程,那么通过干掉这个垃圾回收进程来清理这些僵尸们,这样该有多美好…
总结:我估计是我的PHP代码正在等待串口的温度数据返回罢,一直没有等着吧,就等呀等,其实是那一瞬间给我用Ps命令监控到了,呵呵。EOF
来源:
http://www.blogjava.net/fhtdy2004/archive/2009/07/05/285515.html
http://hi.baidu.com/xuwanbest/blog/item/45f18f3dbce0aece9e3d6255.html
这样:
如下:
利用Ls查出来后再接上路径的方法:
WEB_39_74_sles10sp1:/home/jackxiang/public_html/adc_branches/tst # ls -lart $PWD/order*.html
Nov 22 16:36 /home/jackxiang/public_html/adc_branches2/tst/order_detail.html
Nov 22 16:36 /home/jackxiang/public_html/adc_branches2/tst/order_result.html
Nov 23 09:19 /home/jackxiang/public_html/adc_branches2/tst/order_report.html
ls -lart ~+/order*.html 也行。
注:
~+和$PWD一样的功能,就是一样的不同表示罢了。
如下:
利用Ls查出来后再接上路径的方法:
WEB_39_74_sles10sp1:/home/jackxiang/public_html/adc_branches/tst # ls -lart $PWD/order*.html
Nov 22 16:36 /home/jackxiang/public_html/adc_branches2/tst/order_detail.html
Nov 22 16:36 /home/jackxiang/public_html/adc_branches2/tst/order_result.html
Nov 23 09:19 /home/jackxiang/public_html/adc_branches2/tst/order_report.html
ls -lart ~+/order*.html 也行。
注:
~+和$PWD一样的功能,就是一样的不同表示罢了。
当我们想将work copy的某个已修改的文件回退到之前的状态时,我们可以通过 svn reverte filename来实现。
实践下:
https://jackxiang.com/software/Web_Pro_Code/tech.jackxiang.com/trunk/
下面有一个index.html,我们修改一下这个文件,在这个文件里加入一行:Helo,World。
后,我们使用:右键,选择:Revert,勾选这个:index.html ,后:确定。再看这个文件,又回到了之前的状态。
其实,这个命令还有另外一个撤销功能 :
同样,我们也可以通过 svn revert 来撤销 svn add 和 svn delete的操作。
在working copy中增加一个index.php文件,通过 svn add 将其schedule到add操作queue中。svn status显示其状态为 A。
通过 svn revert 我们可以撤销该add操作。后通过svn status 可以看到,index.php的状态变为了 ?。
======================================================
也就说明:svn的命令行的revert命令只能回滚服务器到本地的,放弃下本地所做的修改,而不能回滚已经提交到服务器的上的。
我们就来实现这个把服务器上的版本给回滚到上N个版本吧,其实也很简单,只要把以前的版本merge到现在的版本上,这位老兄是这么搞的 :
方法一:
(1)命令行操作:
比如要把42回滚到38:
svn merge -r 42:38 http://my.repository.com/my/project/trunk
然后commit就行了
svn commit -m "Reverted to revision 38."
1)回滚:
D:\jackxiang.com>svn merge -r 42:38 ./.
--- 正在反向合并 r42,经由 r39,到 “.”:
D testAddFile.html
2)提交:
D:\jackxiang.com>svn commit . -m "message:merge test ..."
删除 testAddFile.html
提交后的版本为 49。【由41-->49版本了】
用:Beyond Compare对比:
1)checkOut一个38版本D:\jackxiang.com_38,后于49版本:D:\jackxiang.com
对比,发现,没有改动,即得证。
(2)界面鼠标来进行操作:
查看日志,后先择要回退的日志,后进行回退,revert to this version,好像这样容易产生冲突。【略过】
Merge two different trees:
From:https://jackxiang.com/software/Web_Pro_Code/tech.jackxiang.com/trunk
Revision:53
To:
From:https://jackxiang.com/software/Web_Pro_Code/tech.jackxiang.com/trunk
Revision:51
Merge options:
Working copy
按合并确定:
D:\jackxiang.com_38\helo.txt
后,这个文件给51版本的文件覆盖,后继而出现在这个文件的图标变红,后来再提交一次,和上面的命令行:
svn commit . -m "message:merge test ..."一样的,只是用小乌龟来操作罢了。
方法二:
svn文件提交了不可以再revert了,若想回退到之前的版本,可以先在本地update to Revision (更新至你想要的版本),然后将更新到的那个版本的文件拷贝到另一个地方,然后再更新 svn update 那个文件到最新版本,最后用之前拷贝出来的版本覆盖最新版本提交就可以了。
写来写去,不如抄了:
取消对代码的修改分为两种情况:
第一种情况:改动没有被提交(commit)。
这种情况下,使用svn revert就能取消之前的修改。
svn revert用法如下:
# svn revert [-R] something
其中something可以是(目录或文件的)相对路径也可以是绝对路径。
当something为单个文件时,直接svn revert something就行了;当something为目录时,需要加上参数-R(Recursive,递归),否则只会将something这个目录的改动。
在这种情况下也可以使用svn update命令来取消对之前的修改,但不建议使用。因为svn update会去连接仓库服务器,耗费时间。
注意:svn revert本身有固有的危险,因为它的目的是放弃未提交的修改。一旦你选择了恢复,Subversion没有方法找回未提交的修改。
第二种情况:改动已经被提交(commit)。
这种情况下,用svn merge命令来进行回滚。
回滚的操作过程如下:
1、保证我们拿到的是最新代码:
svn update
来自:http://blog.sina.com.cn/s/blog_5432f2730100vmz4.html
附录:
svn cleanup:
当Subversion改变你的工作拷贝(或是.svn中的任何信息),它会尽可能的小心,在修改任何事情之前,它把意图写到日志文件中去,然后执行log文件中的命令,并且执行过程中在工作拷贝的相关部分保存一个锁— 防止Subversion客户端在变更过程中访问工作拷贝。然后删掉日志文件,这与记帐试的文件系统架构类似。如果Subversion的操作中断了(举个例子:进程被杀死了,机器死掉了),日志文件会保存在硬盘上,通过重新执行日志文件,Subversion可以完成上一次开始的操作,你的工作拷贝可以回到一致的状态。
这就是svn cleanup所作的:它查找工作拷贝中的所有遗留的日志文件,删除进程中工作拷贝的锁。如果Subversion告诉你工作拷贝中的一部分已经“锁定”了,你就需要运行这个命令了。同样,svn status将会使用L 显示锁定的项目:
$ svn status
L somedir
M somedir/foo.c
$ svn cleanup
$ svn status
M somedir/foo.c
自己安装了一个,得到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
刻录需要超刻的方法:
打开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
法二:
由于不同系统中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
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中去,如下:
有一个真的包,也就是有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.justwinit.cn/
然后看是怎么配置和相关模块,及参数含义,如下:
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说已经处理完正在等候下一次请求指令的驻留连接
访问:
http://status.justwinit.cn/
然后看是怎么配置和相关模块,及参数含义,如下:
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。
最后,一个小心的操作,以及习惯的养成,才是国防之根本。
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。
最后,一个小心的操作,以及习惯的养成,才是国防之根本。
理解:从{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.justwinit.cn/login/index.html?url=http://bbs.justwinit.cn/passport.php
查看下载情况:
root@116.255.139.240:/home/admin/wget/c.justwinit.cn/login# ls
css images index.html?url=http:%2F%2Fbbs.justwinit.cn%2Fpassport.php
阅读全文
root@116.255.139.240:/home/admin/wget#
wget -r -x http://c.justwinit.cn/login/index.html?url=http://bbs.justwinit.cn/passport.php
查看下载情况:
root@116.255.139.240:/home/admin/wget/c.justwinit.cn/login# ls
css images index.html?url=http:%2F%2Fbbs.justwinit.cn%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://justwinit.cn/post/4014/
http://justwinit.cn/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/
二.打印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://justwinit.cn/post/4014/
http://justwinit.cn/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的所有文件:
代码:
法一:
法二:
再者find经常结合xargs处理复杂的功能。
阅读全文
代码:
法一:
法二:
再者find经常结合xargs处理复杂的功能。
阅读全文
近来学习了一下C++在Linux下的多进程并发服务器的模型,听专搞C++服务器的兄弟们说这个也不行,需要Epoll,Select模型,还需要FiFo队列的结合,链表,共享内存等同时起多个进程后循环去共享内存里去取数据,去循环的读FIFO才会高效更有效形成一个更高更强更快的多并发的服务器,本质就是异步服务。
我也想学,但苦于基础不好,于是否给我顺手抓了一本Unix网络编程 实用技术与实例分析,这一章节,代码错误较多,还好有兄弟帮忙调试,在此感谢,看来还是需要把书写好才能省下不少时间啊,写书的人或排版的也许太匆忙罢,和兄弟沟通后说错误多是为了让初学者多调试,写错了也有理由,我倒。
近来事情不多也就了解了下他们的架构,画画图什么的,其实Mysql长连接这块我觉得应该做进PHP中,现在PHP都FastCGI开自己的端口了,长连接也做进去不是难事哇,期待加到下一个PHP扩展中,直接整成可配置的连接池得了,上图:
阅读全文
我也想学,但苦于基础不好,于是否给我顺手抓了一本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等也出来了,微软估计都懒得理你,找你打官司真是无聊,爱死死一边用去吧:)
下载:
首先,来下载那个提示工具:
一个是在北邮的学校网上找了个最新破解版本的,
提示语法和函数的工具下载地,分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++的方法的给我留言,呵呵。
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等也出来了,微软估计都懒得理你,找你打官司真是无聊,爱死死一边用去吧:)
下载:
首先,来下载那个提示工具:
一个是在北邮的学校网上找了个最新破解版本的,
提示语法和函数的工具下载地,分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++的方法的给我留言,呵呵。
在日常生活中往往有一些命令很长,如要到apache的htdocs下,要到Mysql和Apache的下bin目录下,要删除某个文件而事实上是把这个rm -Rf 变为了移动到某个大硬盘中去了,就会避免误删除后出现找不回文件了(当然有些软件可以找回,另当别论),别名可用来定义新的命令。一条别名当多条,这些别名通常放在初始化文件~/.bashrc(bash)或者/.tcshrc(tcsh)中,这样在交互式子shell中就可以使用这些别名。
在bash中,内置命令alias的语法如下:
在tcsh中语法如下:
jackxiang@178.258.918.106:/# vi ~/.bashrc
阅读全文
在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等的路径,都可以到这个脚本中添加即可。
有一个文档说明此事:
下载文件
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等的路径,都可以到这个脚本中添加即可。
有一个文档说明此事:
下载文件
一个是Linux命令行来实现,二是从PHP编码上来实现不用修改Linux的Host就可能实现对虚拟主机的访问,实现如下:
一.假如70上有一个test3.qq.com ,我们在Windows下还需要通过
对Host加入配置:
后,
才能通过浏览器访问,而我们如果不加就不能访问。
现在,可以通过Curl来不用修改host文件也能访问,如下:
去Host:
用Curl直接模拟Host如下:
与此同时,我们还能通过在Linux自己带的Curl来进行不用设置/etc/hosts来实现我们自己的模拟host访问。这样在调试接口等就不用我们自己每次都修改Host文件了,带来了极大的方便。
二.我们在PHP代码编程使用中PHP设置Curl参数来实现的代码片段如下,注意传入的是IP,而Host设置在函数的代码中:
如一个域名有两个IP,如何来实现调用的简单实现,这样有利于分担接口负载,如下:
综上所述,其本质是模拟了Http协议的头,想了解更多请看我之前写的一篇文章:
《PHP CURL CURLOPT_HTTPHEADER设置HOST(也就是不用配置host访问),Curl伪造Refer的方法及其杂谈》
Url:http://justwinit.cn/post/4022/
一.假如70上有一个test3.qq.com ,我们在Windows下还需要通过
对Host加入配置:
后,
才能通过浏览器访问,而我们如果不加就不能访问。
现在,可以通过Curl来不用修改host文件也能访问,如下:
去Host:
用Curl直接模拟Host如下:
与此同时,我们还能通过在Linux自己带的Curl来进行不用设置/etc/hosts来实现我们自己的模拟host访问。这样在调试接口等就不用我们自己每次都修改Host文件了,带来了极大的方便。
二.我们在PHP代码编程使用中PHP设置Curl参数来实现的代码片段如下,注意传入的是IP,而Host设置在函数的代码中:
如一个域名有两个IP,如何来实现调用的简单实现,这样有利于分担接口负载,如下:
综上所述,其本质是模拟了Http协议的头,想了解更多请看我之前写的一篇文章:
《PHP CURL CURLOPT_HTTPHEADER设置HOST(也就是不用配置host访问),Curl伪造Refer的方法及其杂谈》
Url:http://justwinit.cn/post/4022/
在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
问题解决了,不过有点傻瓜,不知谁还有什么更好的方法吗?若有,希贴上来,互相学习
问题解决了,不过有点傻瓜,不知谁还有什么更好的方法吗?若有,希贴上来,互相学习
Shell修改Crontab的方法:
脚本一:
脚本二:
来源:
http://topic.csdn.net/u/20090918/14/29cb3abf-6de6-4cc6-a28b-26f234b2a87b.html
http://www.linuxdiyf.com/viewarticle.php?id=14751
现在我要通过编写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);
$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
#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
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;
}
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




