Postman 不指定

WEB2.0 jackxiang 2017-6-27 22:37
此软件模拟POST,GET,PUt的协议很牛逼,是一把梭:
http://download.csdn.net/detail/c15959140478/9728559

官网:https://www.getpostman.com/apps
rpm -ihv python-simplejson-2.0.9-8.el5.x86_64.rpm
warning: waiting for transaction lock on /var/lib/rpm/__db.000

rm -f /var/lib/rpm/__db.*
rpm --rebuilddb
yum clean all


再安装也就好了:
rpm -ihv python-simplejson-2.0.9-8.el5.x86_64.rpm
Preparing...                ########################################### [100%]
   1:python-simplejson      ########################################### [100%]
================================================================
故障现象:
[root@localhost Mysql4.1.14.Rhel3]# rpm -ivh MySQL*
warning: waiting for transaction lock on /var/lib/rpm/__db.000

解决方法:
   因为prm数据库出现损坏导致,可能导致多数rpm软件的升级、安装或者删除都会有问题。
此错误,请以root身份输入以下命令:
rm -f /var/lib/rpm/__db.*
rpm --rebuilddb
yum clean all

来自:http://blog.csdn.net/yunsongice/article/details/5587631
fsck
fsck from util-linux-ng 2.17.2
e2fsck 1.41.12 (17-May-2010)
/dev/sda3: recovering journal
Error reading block 105417495 (Attempt to read block from filesystem resulted in short read).  Ignore error<y>? yes

Force rewrite<y>? yes

fsck.ext4: Bad magic number in super-block while trying to re-open /dev/sda3
e2fsck: io manager magic bad!

============================================
尽管上面没有啥文件,我选了Yes,于是出了问题:
fsck
-bash: /sbin/fsck: Input/output error
-------------------------------------------------
要选No:

尝试执行了一下fsck 直接出现了 修复提示,无任何异常!

如果出现这样的提示,就需要小心:

root@test ~]# fsck
fsck 1.35 (28-Feb-2004)
e2fsck 1.35 (28-Feb-2004)
/dev/sda1 is mounted.

WARNING!!! Running e2fsck on a mounted filesystem may cause
SEVERE filesystem damage.

Do you really want to continue (y/n)? no

check aborted.
[root@test ~]#
一定要选择NO,先拆卸文件系统,否则 对文件系统造成毁灭性的打击。


来自:http://blog.csdn.net/snowfoxmonitor/article/details/19121531
从网上搜索到方法进行解决:
cat /etc/zookeeper/conf/zoo.cfg
找到dataDir=/var/lib/zookeeper
切换到路径/var/lib/zookeeper
cd /var/lib/zookeeper
查看目录下的文件:
ls
存在version-2
删除version-2
mv ./version-2 ./version-2.bak
然后在zookeeper的实例中添加角色主机,启动成功。

看了老外的文章,下面是处理方法:
more /etc/zookeeper/conf.dist/zoo.cfg
找到datadir
[root@slave2 zookeeper]# pwd
/var/lib/zookeeper
[root@slave2 zookeeper]# ls
myid version-2 version-2.bak
清空version-2目录下的所有文件

来自:http://www.linuxdiyf.com/linux/16941.html
安装没有遇到问题,TortoiseGit更新需要卸载时出现的问题,网上说把Exporer给停止掉再重启,发现不行。
再就是有人说那个文件夹C:\Windows\TEMP的权限不对引起,经过一阵折腾,发现的的确是那个问题引起的:
在目录上->右键->属性->安全->组或用户名->TrustedInstaller 权限全给勾上即可。

http://www.win7china.com/html/24965.html
http://www.win7china.com/html/24965.html
方法/步骤
把鼠标放到Win8屏幕的最左下角,等待Win8 Metro界面的缩略图出现后点击鼠标右键,在弹出的菜单中选择“命令提示符(管理员)”
打开的“命令提示符(管理员)”
找到自己将要安装的程序路径,比如:我要安装的这个程序在D盘的Others文件夹下
点击路径那一栏,把路径复制出来,然后再复制程序名称
在“命令提示符(管理员)”中输入 msiexec /package 你将要安装的程序的完整路径及程序名 (注意空格),比如:我是要安装D盘Others文件夹下的msxml
然后按回车键,安装程序就会自动启动,此时,你在安装的过程中就不会碰到2502、2503的错误了
pmap -p pid
背景:突然Mount的磁盘脱落挂载了,是不是有人上去做过安全给搞丢了?想看看都是谁?

last -20



lastlog |less




Linux下查看用户登陆历史记录,可以用root用户下的last命令查看:
1.查看单个用户的操作历史
[root@DB-Server ~]# cat /home/username/.bash_history
#username要查看的用户名
2.使用root登陆可查看用户登陆历史
[root@DB-Server ~]# su root
[root@DB-Server ~]# last -10
root     pts/1        :0.0             Wed Dec 18 09:54   still logged in  
root     pts/4        :0.0             Wed Dec 18 09:43 - 09:48  (00:04)    
root     pts/1        :0.0             Wed Dec 18 09:43 - 09:48  (00:05)    
root     pts/3        192.168.103.79   Wed Dec 18 09:41 - 12:40  (02:59)    
root     pts/4        :0.0             Wed Dec 18 09:28 - 09:30  (00:01)    
root     pts/3        :0.0             Wed Dec 18 09:27 - 09:30  (00:02)    
root     pts/2        192.168.103.29   Wed Dec 18 09:27   still logged in  
root     pts/1        :0.0             Wed Dec 18 09:27 - 09:42  (00:15)    
root     pts/2        :0.0             Wed Dec 18 09:23 - 09:25  (00:01)    
root     pts/1        :0.0             Wed Dec 18 09:22 - 09:25  (00:02)
#查看最近10次用户历史操作记录
last 命令:

功能说明:列出目前与过去登入系统的用户相关信息。

语 法:last [-adRx][-f ][-n ][帐号名称…][终端机编号…]

参 数:

-a 把从何处登入系统的主机名称或IP地址,显示在最后一行;

-d 将IP地址转换成主机名称;

-f 指定记录文件;

-n 或- 设置列出名单的显示列数;

-R 不显示登入系统的主机名称或IP地址;

-x 显示系统关机,重新开机,以及执行等级的改变等信息;

lastlog可简单查看所有用户最后一次的登陆时间。

来自:https://zhidao.baidu.com/question/91897351.html
lam是用php写的,所以使用时需要php支持很多模块,像对ldap的支持,对zip的支持。
php安装模块见http://fffo.blog.163.com/blog/static/211913068201401464238334/

1、官网下载
wget http://prdownloads.sourceforge.net/lam/ldap-account-manager-4.3.tar.bz2?download
2、解压
tar -xjf  ldap-account-manager-4.3.tar.bz2
3、直接移动到apache 根目录
mv  ldap-account-manager-4.3 /usr/local/apache/htdocs/lam
4、给它可以访问的权限
chmod 777 -R /usr/local/apache/htdocs/lam
5、进入配置目录
cd /usr/local/apache/htdocs/lam/config
6、创建主参数文件
cp config.cfg_sample config.cfg
7、创建连接ldap服务器参数文件
cp lam.conf_sample lam.conf
vim lam.conf
修改 所有的dc=1v,dc=cn
8、web访问
http://203.195.187.200/lam/templates/login.php

上面的模式是只限管理员登录模式。现在切换到用户登录模式
点击LAM配置——>编辑服务器配置文件——>默认密码是lam(可修改)——>通用设置——>安全设定

From:http://blog.csdn.net/u012461550/article/details/42608781

我的是在:
/usr/local/lam/etc/unix.conf
error: insufficient permission for adding an object to repository database .git/objects  
fatal: failed to write object  
fatal: unpack-objects failed
$git pull
remote: Counting objects: 24, done.
remote: Compressing objects: 100% (23/23), done.
remote: Total 24 (delta 14), reused 3 (delta 1)
error: insufficient permission for adding an object to repository database .git/objects
首先,得是Root:
#id
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

然后:到那个出现 错的项目目录下面,它下面有一个.git这是肯定的,
1)对这个.git目录权限给斧正:
chmod 755 .git
chown -R xiangdong.irdcops .git  

2)给它下面的文件和文件夹的权限斧正:
cd .git
find . -type f -exec chmod 644 {} \;
find . -type d -exec chmod 755 {} \;

参考:http://blog.sina.com.cn/s/blog_87b9bbc70102uyo3.html
rpm -ihv python-simplejson-2.0.9-8.el5.x86_64.rpm
warning: waiting for transaction lock on /var/lib/rpm/__db.000

rm -f /var/lib/rpm/__db.*
rpm --rebuilddb
yum clean all


再安装也就好了:
rpm -ihv python-simplejson-2.0.9-8.el5.x86_64.rpm
Preparing...                ########################################### [100%]
   1:python-simplejson      ########################################### [100%]
================================================================
故障现象:
[root@localhost Mysql4.1.14.Rhel3]# rpm -ivh MySQL*
warning: waiting for transaction lock on /var/lib/rpm/__db.000

解决方法:
   因为prm数据库出现损坏导致,可能导致多数rpm软件的升级、安装或者删除都会有问题。
此错误,请以root身份输入以下命令:
rm -f /var/lib/rpm/__db.*
rpm --rebuilddb
yum clean all

来自:http://blog.csdn.net/yunsongice/article/details/5587631
git commit -am"" #提交除开没有Add的文件外的所有修改,如:git rm ,git mv,git add....
-----------
背景:一般是自己领先master几个版本,二是自己落后master几个版本,三是自己无论落后还是先进都和Master对齐(比如:分支,git checkout -b feature,修改index.html,再转到git checkout master,再合并分支到master,git merge feature...,最后,解决冲突并git add index.html,当然也可以commit -am....,提交并无误的情况下,删除git的特征分支:git branch -d  feature ),如何解决上面三种冲突并能正常提交呢?
零、关于从暂存区回退方面的文章见:https://justwinit.cn/post/9253/
一、Git服务端版本领先问题参考:https://justwinit.cn/post/9300/
二、Git服务端版本落后问题本文解决:
#git push
To git@git.boosh.com.cn:irdcops/spec.boosh.com.cn.git
! [rejected]        master -> master (fetch first)
error: 无法推送一些引用到 'git@git.boosh.com.cn:irdcops/spec.boosh.com.cn.git'
提示:更新被拒绝,因为远程仓库包含您本地尚不存在的提交。这通常是因为另外
提示:一个仓库已向该引用进行了推送。再次推送前,您可能需要先整合远程变更
提示:(如 'git pull ...')。
提示:详见 'git push --help' 中的 'Note about fast-forwards' 小节。

[root@levoo-php-memcached-reids-zookeeper_bj_sjs_10_51_77_34:/tmp/gitstudy/conflict/spec.boosh.com.cn]
#git pull
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
展开对象中: 100% (3/3), 完成.
来自 git.boosh.com.cn:irdcops/spec.boosh.com.cn
   c333506..47f275b  master     -> origin/master
自动合并 README.md
冲突(内容):合并冲突于 README.md
自动合并失败,修正冲突然后提交修正的结果。

====================git status 提示双方修改:README.md====================
#git status
位于分支 master
您的分支和 'origin/master' 出现了偏离,
并且分别有 1 和 1 处不同的提交。
  (使用 "git pull" 来合并远程分支)
您有尚未合并的路径。
  (解决冲突并运行 "git commit")

未合并的路径:
  (使用 "git add <文件>..." 标记解决方案)

        双方修改:   README.md

修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

=====================查看文件=================================
#cat README.md  
<<<<<<< HEAD
conflict  9:57 modify
=======
老王在这儿提交了一个并给提交到线上去了。-addTime:20170410 9:59
>>>>>>> 47f275befbc4fcd306eb4978fb75dde0545b040b

==================解决README.md文件===============
cat README.md
conflict  9:57 modify
老王在这儿提交了一个并给提交到线上去了。-addTime:20170410 9:59

================再查看该文件并pull一下查看状态================
git pull
error: Pull is not possible because you have unmerged files.
提示:请在工作区改正文件,然后酌情使用 'git add/rm <文件>' 命令标记
提示:解决方案并提交。
fatal: Exiting because of an unresolved conflict.

===理解修改尚未加入提交(使用 "git add" 和/或 "git commit -a")=====
git commit-m与-am的区别:https://segmentfault.com/q/1010000005900988
标识:也就是说得理解那几个区,这个-a 是指虽然跟踪了,但是没有git add纳入暂存区(自己已经纳入了,但是因为冲突了,别人修改了,它并没有在自己这边的暂存区里的意思。还得通过git add一次纳入自己本地的暂存区,或直接-a就能把本地合并冲突的文件直接纳入到暂存区,有点绕,应该就是这个意思,就可以git push解决这个冲突了。)
[注意]git commit -am可以写成git commit -a -m,但不能写成git commit -m -a,如果里面有一些草稿文件也就是并不需要提交的其它的文件本就在里面,会被一并提交上暂存区,这个一定要注意用-am时要把它们都删除掉,只留下需要入暂存区的文件,否则,会把所有的没有用的文件纳入后,再git push一下就会出现把很多没有用的文件提交上git服务器上去了。

==========实践上面的理解=============================================
git commit -am"解决冲突后,纳入自己的暂存区里 commit -am中的a就是这个意思,代替了git add 。"
[master 0006642] 解决冲突后,纳入自己的暂存区里 commit -am中的a就是这个意思,代替了git add 。

============解决冲突后放到暂存区后,再Git push也就成功能======================================
git push
对象计数中: 6, 完成.
压缩对象中: 100% (5/5), 完成.
写入对象中: 100% (6/6), 873 bytes | 0 bytes/s, 完成.
Total 6 (delta 0), reused 0 (delta 0)
To git@git.boosh.com.cn:irdcops/spec.boosh.com.cn.git
   47f275b..0006642  master -> master


最后,果然提交成功,在那个老王的git目录下,再 git pull无问题,查看内容也就下来了:
git pull
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 6 (delta 0), reused 0 (delta 0)
展开对象中: 100% (6/6), 完成.
来自 git.boosh.com.cn:irdcops/spec.boosh.com.cn
   47f275b..0006642  master     -> origin/master
更新 47f275b..0006642
Fast-forward
README.md | 1 +
1 file changed, 1 insertion(+)

cat README.md
conflict  9:57 modify
老王在这儿提交了一个并给提交到线上去了。-addTime:20170410 9:59



三、git reset revert 回退回滚取消提交返回上一版本,最常用的是合并feature 分支的冲突解决:
一般没有别人开发出现冲突,是因自己回退引起的,
git reset revert 回退回滚取消提交返回上一版本:http://justwinit.cn/post/9253/
解决冲突合并分支:
http://m.toutiao.org/group/6407171134127472898/?iid=8936996522&app=news_article&tt_from=weixin&utm_source=weixin&utm_medium=toutiao_ios&utm_campaign=client_share&wxshare_count=1
实践成功如下步骤,注意,这种合并都是基于那个暂存库:

显示本地分支:
git branch
* master

新建分支
准备新的feature1分支,继续我们的新分支开发:
#git checkout -b feature  #它是建立并进入到刚进入的分支。
切换到一个新分支 'feature'
再次建立的提示:
git checkout -b feature
fatal: 一个分支名 'feature' 已经存在。

查看分支的建立情况,有了:
git branch
* feature
  master

修改文件 修改index.html:
#echo conflict >> index.html
vi index.html
hello jack ,write by feature...

在feature分支上提交:
git add index.html
git commit -m"提交到分支" ./index.html
===================================================================================================
切换回master分支:
git checkout master
A       index.html
切换到分支 'master'
您的分支与上游分支 'origin/master' 一致。


master分支修改:
在master分支上修改index.html:
echo master_conflict >> index.html
vi index.html
add by jack from master...
提交到暂存库:
git commit -am"写两个字试一试吧~"

分支合并
这种情况下,Git无法执行“快速合并”,只能试图把各自的修改合并起来,但这种合并就可能会有冲突,我们试试看:
git merge feature
自动合并 index.html
冲突(内容):合并冲突于 index.html
自动合并失败,修正冲突然后提交修正的结果。

#cat index.html
create confilict with feature branch
master_conflict
<<<<<<< HEAD
add by jack from master...
=======
jackX

hello jack ,write by feature...
>>>>>>> feature

#git status  #这儿注意了:用git commit -am"" 还是用git add index再git commit -m"" index.html的区别,前面有讲到。
位于分支 master
您的分支领先 'origin/master' 共 1 个提交。
  (使用 "git push" 来发布您的本地提交)
您有尚未合并的路径。
  (解决冲突并运行 "git commit")

未合并的路径:
  (使用 "git add <文件>..." 标记解决方案)

        双方修改:   index.html

修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
#git commit -am"直接am实现不用git add 就提交到master的暂存库里"  
[master 386a151] 直接am实现不用git add 就提交到master的暂存库里
#git push
对象计数中: 12, 完成.
压缩对象中: 100% (11/11), 完成.
写入对象中: 100% (12/12), 1.20 KiB | 0 bytes/s, 完成.
Total 12 (delta 5), reused 0 (delta 0)
To git@git.boosh.com.cn:irdcops/spec.boosh.com.cn.git
   e171ea5..386a151  master -> master


最后,删除feature分支:
# git branch -d feature
已删除分支 feature(曾为 4bcdf8e)。



------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
想从线上获取并覆盖本地:
git reset --hard
git pull
实践如下:
git reset --hard
HEAD 现在位于 a7e4eed rollo back
git log
commit a7e4eed0755b8b8c28de63ecc735565169466f8d
Author: 詹金斯 <17080156868@163.com>
Date:   Mon Mar 27 20:55:07 2017 +0800
    rollo back

再想回退是不行的:
git revert 0b82ab0dd0c898e0b7c18714a8b81b417f80a7bb zookeeper-3.4.9.el6.x86_64.spec
fatal: bad revision 'zookeeper-3.4.9.el6.x86_64.spec'

查看状态:
git status
位于分支 master
您的分支和 'origin/master' 出现了偏离,
并且分别有 2 和 2 处不同的提交。
  (使用 "git pull" 来合并远程分支)
未跟踪的文件:
  (使用 "git add <文件>..." 以包含要提交的内容)

再从Git服务器上拉取:
git pull
自动合并 centos7/zookeeper-3.4.9.el6.x86_64.spec
冲突(内容):合并冲突于 centos7/zookeeper-3.4.9.el6.x86_64.spec
自动合并失败,修正冲突然后提交修正的结果。

=======================================================
如果系统中有一些配置文件在服务器上做了配置修改,然后后续开发又新添加一些配置项的时候,

在发布这个配置文件的时候,会发生代码冲突:

error: Your local changes to the following files would be overwritten by merge:
        protected/config/main.php
Please, commit your changes or stash them before you can merge.

如果希望保留生产服务器上所做的改动,仅仅并入新配置项, 处理方法如下:

git stash
git pull
git stash pop
然后可以使用Git diff -w +文件名 来确认代码自动合并的情况.



反过来,如果希望用代码库中的文件完全覆盖本地工作版本. 方法如下:

git reset --hard
git pull
其中git reset是针对版本,如果想针对文件回退本地修改,使用

在CODE上查看代码片派生到我的代码片
git checkout HEAD file/to/restore  


参考自:http://blog.chinaunix.net/uid-10415985-id-4142896.html
http://blog.csdn.net/iefreer/article/details/7679631
背景:用Windows下的Excel,再倒腾成Txt,在Linux下统计发现少一行,最后,用vi对最后一行的行尾按回车后再加一行,后删除这一行,再统计就对了,具体原因如下。
今天从一个服务器列表来批量执行expect脚本进行Tivoli Endpoint Client的安装,从excel表格中拷贝出服务器名导入到txt文件上传到服务器后,执行wc -l统计发现少了一行,反复对比确认不存在遗失的条目,那么为什么wc -l少一行呢?
查询帮助文件:
[root@managevm1 ~]# wc --help

-l, --lines            print the newline counts

-l用来统计新行的个数,那么用什么来标记新行的开始呢?对了!用换行符\n。于是用 vi编辑器打开txt文件,在最后一行的行尾回车下,然后ESC推出到命令模式,dd删除自然生成的最后一个空行。保存退出再次运行wc -l统计,这样就和excel中的行数一样了。

=============================================================
先简单介绍

wc(Word Count)命令的功能为统计指定文件中的字节数、字数、行数,并将统计结果显示输出

格式:wc file

命令参数:

-c 统计Bytes数(字节数),并显示文件名

-l 统计行数:使用换行符‘\n’作为行结束标志,实际是统计换行符个数

-m 统计字符数。这个标志不能与 -c标志一起使用。

-w 统计字数。一个字被定义为由空白、跳格或换行字符分隔的字符串。

-L 打印最长行的长度。

-help 显示帮助信息

--version 显示版本信息

实例:

wc test.txt

6  24 132test.txt

默认输出:行,字数,字节数



test.txt内容

Cat test.txt

test1 name1 age1 sex1

test2 name2 age2 sex2

test3 name3 age3 sex3

test4 name4 age4 sex4

test5 name5 age5 sex5

test6 name6 age6 sex6

问题:wc 统计行数时少一行:
因为wc ?l是按\n作为行结束符统计行数,所以最后一行如果没有\n的话会统计丢失。

实例:比如,在windows下生成同上面test.txt相同的文件testtt.txt,上传到linux下:
cat testtt.txt

test1 name1 age1 sex1

test2 name2 age2 sex2

test3 name3 age3 sex3

test4 name4 age4 sex4

test5 name5 age5 sex5

test6 name6 age6 sex6[wizad@srv26 lmj]$

可以看出结尾有点奇怪。这是因为文件末尾无\n,而是直接用了文件结束符EOF。这样文件使用wc统计就会少一行:

wc -l testtt.txt

5 24 136 testtt.txt

使用管道也不行:

cat testtt.txt | wc -l

5

为什么linux下没有这样的问题?
         因为vim编辑器会自动在文件结尾加上\n,在加上文件结束符EOF。(linux下文本文件主要按处理,所以vim会末行自动加\n)

而对windows文件用dos2unix转化也不行:
[wizad@srv26 lmj]$ dos2unix testtt.txt

dos2unix: converting file testtt.txt toUNIX format ...

[wizad@srv26 lmj]$ wc testtt.txt

5  24131 testtt.txt

可以看出windows文件在linux下还是有兼容问题的。文件字数没变24,byte数少5个是windows下行结束符是回车\r+换行\n。而linux下只是换行\n

Vim二进制可以看到不同,\n显示为.,文件结尾没有

来自:http://blog.csdn.net/sws9999/article/details/7942074
内容:
背景:提交代码时出现了这个头指针分离自15735cd的问题,提示让:git branch <新分支名> 1c8c2b1,git branch dev 1c8c2b1,而默认创建分支是:git checkout -b dev,这个git branch dev 1c8c2b1,1c8c2b1前面还有c41273a,再前面就是分离的15735cd,于是,把分离后的两个版本,1c8c2b1 和c41273a 建立新的分支,再合并Merge回Master即可达到和提交一样的,找回这丢失的两次提交。


https://git.oschina.net/swoole/swoole/tree/v1.9.11  
git clone https://git.oschina.net/swoole/swoole.git  #git checkout 1.9 然后编译,因默认clone都是最新版。
#git checkout 1.9
分支 1.9 设置为跟踪来自 origin 的远程分支 1.9。
切换到一个新分支 '1.9'

#git branch -a
* 1.9
  master
  remotes/origin/1.9
  remotes/origin/2.0
  remotes/origin/2.0.1
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
  remotes/origin/swoole-1.7
  remotes/origin/swoole-1.8

#git status
位于分支 1.9
您的分支与上游分支 'origin/1.9' 一致。
无文件要提交,干净的工作区

rm -rf .git  #干掉没有用的.git,我只要这个版本的源代码并打包成tar.gz,然后作为rpmbuild -ba swoole-php71-1.9.11.el7.x86_64.spec


把 swoole-php71-1.9.11.el7.x86_64.spec 放进Git的Server端仓库出现问题了,如下:
#git status
头指针分离自 15735cd
无文件要提交,干净的工作区

[root@danke-php-memcached-reids-zookeeper_bj_sjs_10_51_77_34:/home/test/rpmbuild/SPECS/centos7/php71]
#git checkout master
警告:您正丢下 2 个提交,未和任何分支关联:

  1c8c2b1 rpm包Swoole升级到最新版本,以及PHP-CP一块升级提交SPEC文件。
  c41273a 删除掉的Swoole版本的Spec文件,添加新的Swoole版本的Spec文件。

如果您想要通过创建新分支保存它们,这可能是一个好时候。
如下操作:

git branch <新分支名> 1c8c2b1

切换到分支 'master'
您的分支与上游分支 'origin/master' 一致。


#git rev-list 15735cd     ##指针在这儿丢失了:头指针分离自 15735cd。
15735cda1005046d7d671a2f1692f0e4d6edb977
bfaa314f6a7a212a386b3117c59a7e8be0c077a0


#git rev-list 1c8c2b1     #这个是最新的但是没有被记录到Git的Master分支服务器仓库里面。
1c8c2b1968cb303ee103fff62272a31a1b43fb57   #没有记录到,Log:1c8c2b1 rpm包Swoole升级到最新版本,以及PHP-CP一块升级提交SPEC文件。
c41273ad0cb545db8b6f1d4eb81b006552c915c9   #没有记录到,Log:c41273a 删除掉的Swoole版本的Spec文件,添加新的Swoole版本的Spec文件。
15735cda1005046d7d671a2f1692f0e4d6edb977   #指针在这儿丢失了:头指针分离自 15735cd。
bfaa314f6a7a212a386b3117c59a7e8be0c077a0  

怎么办?
这时候可以执行git branch <新分支名> 1c8c2b1创建一个新的分支,这个分支是基于头指针分离下修改提交的952770d创建的。
然后,再合并回Master里面去即可。
操作步骤如下:
git branch dev 1c8c2b1

切换过Dev分支,看提交的Log在不?在就回到Master合并:
#git checkout dev
切换到分支 'dev'
果然在,如下:
#git log
commit 1c8c2b1968cb303ee103fff62272a31a1b43fb57
Author: 詹金斯 <13880156868@163.com>
Date:   Thu Jun 1 22:56:43 2017 +0800

    rpm包Swoole升级到最新版本,以及PHP-CP一块升级提交SPEC文件。

commit c41273ad0cb545db8b6f1d4eb81b006552c915c9
Author: 詹金斯 <13880156868@163.com>
Date:   Thu Jun 1 20:31:59 2017 +0800

    删除掉的Swoole版本的Spec文件,添加新的Swoole版本的Spec文件。

回到Master,直接合并到Master分支,如下:
Merge branch 'dev'
Master的头指针出现:头指针分离自 15735cd,新建立Dev分支,git branch dev 1c8c2b1,合并回Master来。 ----这一行是注释,后Vim保存即可。
# 请输入一个提交信息以解释此合并的必要性,尤其是将一个更新后的上游分支
# 合并到主题分支。
#
# 以 '#' 开头的行将被忽略,而且空提交说明将会终止提交。

保存后,跳到这儿了:
#git merge dev
自动合并 centos7/php71/swoole-php71-1.9.11.el7.x86_64.spec
Merge made by the 'recursive' strategy.
centos7/php71/php-cp-php71-1.5.0.el7.x86_64.spec                               |  2 +-
...swoole-php71-1.9.10.el7.x86_64.spec => swoole-php71-1.9.11.el7.x86_64.spec} | 10 +++++-----
centos7/tomcat-7.0.77.el6.x86_64.spec                                          |  1 -
3 files changed, 6 insertions(+), 7 deletions(-)
rename centos7/php71/{swoole-php71-1.9.10.el7.x86_64.spec => swoole-php71-1.9.11.el7.x86_64.spec} (89%)


再确定合并及注释也Ok了,如下:
#git log
commit 432fbac58b19eb6a799d356b82d087a5340a1411
Merge: 78dab85 1c8c2b1
Author: 詹金斯 <13880156868@163.com>
Date:   Thu Jun 1 23:24:33 2017 +0800

    Merge branch 'dev'
    Master的头指针出现:头指针分离自 15735cd,新建立Dev分支,git branch dev 1c8c2b1,合并回Master来。

成功!
git branch -D 大写的D 删除分支,git branch -D dev:
#git branch -D dev
已删除分支 dev(曾为 1c8c2b1)。
参考:http://blog.csdn.net/yuelengloulan/article/details/72823420
记住,斜杠要转意,再就是是 sed -n 's#abc#def#p' replcee.txt  ==>  sed -i 's#abc#def#' replcee.txt 不要有g,如: sed -i #abc#def#g replcee.txt,出现没有被替换:
sed -n "s#,'pdo-mysql-php70-7.0.5'#123#p"  ./*.yml  #单引不行用双引,sed -n 's#,\'pdo-mysql-php70-7.0.5\'#123#p'  ./*.yml
真实的替换将123给去了:


&符号也要转义:

正确替换为:


上面也可以实现先模拟替换,再真实替换,更靠谱一些:
sed -n 's#\/data\/jenkins\/jobs\/jackxiang.com_deploy\/#\/data\/jenkins\/jobs\/jackxiang.com_deploy\/workspace\/#p'  *.yml
真的替换:
sed -i 's#\/data\/jenkins\/jobs\/jackxiang.com_deploy\/#\/data\/jenkins\/jobs\/jackxiang.com_deploy\/workspace\/#'  *.yml


替换一下PHP的SOCK文件位置,/usr/local/php/var/run/php-fpm.sock  ===>  /dev/shm/php-fcgi.sock:
cat /usr/local/php/etc/php-fpm.conf |grep php-fpm.sock
cat /usr/local/nginx/conf/vhost/*.conf|grep php-fpm.sock
新的:
cat /usr/local/php/etc/php-fpm.conf |grep php-fcgi.sock  
cat /usr/local/nginx/conf/vhost/*.conf|grep php-fcgi.sock

启动Nginx和PHP成功后删除软链接的sock文件:
ls -lart /usr/local/php/var/run/php-fpm.sock
rm -rf /usr/local/php/var/run/php-fpm.sock

ansible 10.70.32.33,10.70.32.32 -a"sed -i 's#\/usr\/local\/php\/var\/run\/php-fpm.sock#\/dev\/shm\/php-fcgi.sock#' /usr/local/nginx/conf/vhost/*.conf"

ansible 10.70.32.33,10.70.32.32 -a"sed -i 's#\/usr\/local\/php\/var\/run\/php-fpm.sock#\/dev\/shm\/php-fcgi.sock#' /usr/local/php/etc/php-fpm.conf"


cp -rf  /usr/local/php/etc/php-fpm.conf  /usr/local/php/etc/php-fpm.conf.bak.04.20
sed -i "s/\/usr\/local\/php\/var\/run\/php-fpm.sock/\/dev\/shm\/php-fcgi.sock/g" /usr/local/php/etc/php-fpm.conf
diff /usr/local/php/etc/php-fpm.conf.bak.04.20 /usr/local/php/etc/php-fpm.conf
service php-fpm restart

替换Nginx的配置文件:

批量测试:
ansible jack_vedio_upload -a"curl -i -H"Host:u.jackxiang.com" http://127.0.0.1/simpleupload.php"|grep 200 -B 2 > simpleupload.php.test.response.200.log


批量:

ansible 10.71.182.6 -a"sed -i 's/\/usr\/local\/php\/var\/run\/php-fpm.sock/\/dev\/shm\/php-fcgi.sock/g' /usr/local/php/etc/php-fpm.conf   && service php-fpm restart"

换成#号:
ansible 192.168.112.161 -a"sed -i 's#\/usr\/local\/php\/var\/run\/php-fpm.sock#\/dev\/shm\/php-fcgi.sock#g' /usr/local/php/etc/php-fpm.conf"


sed -n 's#\/usr\/local\/php\/var\/run\/php-fpm\.sock#\/dev\/shm\/php-fcgi\.sock#p' /usr/local/nginx/conf/vhost/*.conf


用ansible尝试批量替换#p ,注意显示内容:

ansible 10.71.182.6 -a"sed -n 's#\/usr\/local\/php\/var\/run\/php-fpm.sock#\/dev\/shm\/php-fcgi.sock#p' /usr/local/nginx/conf/vhost/*.conf"


正式开始批量替换:

ansible 10.71.182.6 -a"sed -i 's#\/usr\/local\/php\/var\/run\/php-fpm.sock#\/dev\/shm\/php-fcgi.sock#' /usr/local/nginx/conf/vhost/*.conf"

ansible xiyou -a"sed -i 's#\/usr\/local\/php\/var\/run\/php-fpm.sock#\/dev\/shm\/php-fcgi.sock#' /usr/local/nginx/conf/vhost/*.conf"  
ansible xiyou_api -a"sed -i 's#\/usr\/local\/php\/var\/run\/php-fpm.sock#\/dev\/shm\/php-fcgi.sock#' /usr/local/nginx/conf/vhost/*.conf"  
ansible xiyou_my -a"sed -i 's#\/usr\/local\/php\/var\/run\/php-fpm.sock#\/dev\/shm\/php-fcgi.sock#' /usr/local/nginx/conf/vhost/*.conf"  


<H2 class=post-title>用<FONT style="BACKGROUND-COLOR: #ffff00">awk</FONT>和sed实现批量替换文件中的控制字符</H2><DIV class=post-body>  有时候会遇到这样一个问题,就是把文件ftp上传到AIX系统以后,发现文件中包含了一些特殊的控制字符,例如最常见的^M。如果文件只是一个两个,那直接用vi打开文件,把文件中的控制字符替换掉就可以了。但如果文件数量很多的话,这样一个个去改就会变得很麻烦。这时候我们可以通过<FONT style="BACKGROUND-COLOR: #ffff00">awk</FONT>和sed实现对多个文件的批量处理,具体步骤如下:
1)假设需要修改的文件放在/tmp/test1目录下,然后新建一个目录,如/tmp/test2目录,这个目录用来存放修改后的文件。
ls -1 * &#124; <FONT style="BACKGROUND-COLOR: #ffff00">awk</FONT> '{print "sed 's/^M//g' "$1" &gt;/tmp/test2/"$1}' &gt; sed.sh
生成的脚本文件如下所示:<BR><div class=code>sed s/^M//g test.txt &gt;/tmp/test2/test.txt
sed s/^M//g test2.txt &gt;/tmp/test2/test2.txt
3)执行生成的脚本文件:
就会在/tmp/test2目录下生成去掉控制字符^M后的文件。
一些其他的方法可以参考以下的文章:
<U><FONT color=#0000ff>用sed批量替换文件中的字符</FONT></U></A>
<U><FONT color=#0000ff>批量修改文件</FONT></U></A>
<U><FONT color=#0000ff>sed的in-place edit选项,和RTFM</FONT></U></A>


方法1:
这两天在构建一个应用的使用用到了maven,由于project很大,足足有700多个pom.xml文件,更郁闷的是在很多pom.xml文件里都单独指定了资源库的url,我需要把这些资源库的url统一指定到nexus本地中央库.
手工一个个改文件配置有点不太实际,所以google了一下,找到批量替换文件内容的好方法,命令结构如下:
find -name '要查找的文件名' &#124; xargs perl -pi -e 's&#124;被替换的字符串&#124;替换后的字符串&#124;g'下面这个例子就是将当前目录及所有子目录下的所有pom.xml文件中的&#8221;http://repo1.maven.org/maven2&#8220;替换为&#8221;http://localhost:8081/nexus/content/groups/public&#8220;.
find -name 'pom.xml' &#124; xargs perl -pi -e 's&#124;http://repo1.maven.org/maven2&#124;http://localhost:8081/nexus/content /groups/public&#124;g'这里用到了Perl语言,
perl -pi -e 在Perl 命令中加上-e 选项,后跟一行代码,那它就会像运行一个普通的Perl 脚本那样运行该代码.
从命令行中使用Perl 能够帮助实现一些强大的、实时的转换。认真研究正则表达式,并正确地使用,将会为您省去大量的手工编辑工作。
find -name 'pom.xml' &#124; xargs perl -pi -e 's&#124;http://repo1.maven.org/maven2&#124;http://localhost:8081/nexus/content/groups/public&#124;g'

方法2:
Linux下批量替换多个文件中的字符串的简单方法。用sed命令可以批量替换多个文件中的字符串。
用sed命令可以批量替换多个文件中的字符串。
sed -i "s/原字符串/新字符串/g" `grep 原字符串 -rl 所在目录`
例如:我要把mahuinan替换为huinanma,执行命令:
sed -i "s/mahuinan/huinanma/g" 'grep mahuinan -rl /www'
这是目前linux最简单的批量替换字符串命令了!
具体格式如下:
sed -i "s/oldString/newString/g" `grep oldString -rl /path`
实例代码:sed -i "s/大小多少/日月水火/g" `grep 大小多少 -rl /usr/aa`
sed -i "s/大小多少/日月水火/g" `grep 大小多少 -rl ./`

方法3:
在日程的开发过程中,可能大家会遇到将某个变量名修改为另一个变量名的情况,如果这个变量是一个局部变量的话,vi足以胜任,但是如果是某个全局变量的话,并且在很多文件中进行了使用,这个时候使用vi就是一个不明智的选择。这里给出一个简单的shell命令,可以一次性将所有文件中的指定字符串进行修改:
grep "abc" * -R &#124; awk -F: '{print $1}' &#124; sort &#124; uniq &#124; xargs sed -i 's/abc/abcde/g'
创建规则容易,如何取消规则?
------------------------------------------

开始-----规则---下拉菜单中选择管理规则和通知。
勾选需要取消的规格,将其删除,确定。

来自:http://wenda.so.com/q/1459278170727172?src=140

创建规则:http://wenda.so.com/q/1369953110068210
推荐:二维码(生成及识别),插件地址:https://chrome.google.com/webstore/detail/qr-code-generator-and-rea/hkojjajclkgeijhcmfjcjkddfjpaimek
==============================================================================================================

一)二维码(QR码)生成器(QR Code Generator)解决当前链接变二维码手机入口:
插件地址: https://chrome.google.com/webstore/detail/%E4%BA%8C%E7%BB%B4%E7%A0%81qr%E7%A0%81%E7%94%9F%E6%88%90%E5%99%A8/pflgjjogbmmcmfhfcnlohagkablhbpmg?hl=zh-CN

二)下面这个就对网页里面的图片等等生成二维码,也能识别二维码,也能在页面空白点处生成当前链接的二维码,用它好了,一卸载:
https://chrome.google.com/webstore/detail/qr-code-generator-and-rea/hkojjajclkgeijhcmfjcjkddfjpaimek
===================================================
场景:
昨晚老婆在淘宝上买东西,商家告诉他用手机访问可能会打折,老婆就觉得到手机上访问。

但是那个网址长的不得了。

于是乎我就写了这款插件,方便大家在使用谷歌浏览器的状况下更好的切换到手机访问网站。



安装完点击浏览器右上角图标可以生成当前页面的二维码

然后您就可以用手机二维码工具访问当前页面了。
您可以掏出手机扫二维码就可以访问本站了。
From:https://www.oschina.net/question/1014306_106553

能把网页里面的图片生成二维码,通过手机能访问到参考链接:
http://c7sky.com/chrome-extension-qrcode.html
MySQL 5.6 警告信息 command line interface can be insecure 修复

mysqladmin: [Warning] Using a password on the command line interface can be insecure.
mysqladmin: [Warning] Using a password on the command line interface can be insecure.
mysqladmin: [Warning] Using a password on the command line interface can be insecure.
mysqladmin: [Warning] Using a password on the command line interface can be insecure.


在命令行输入密码,就会提示这些安全警告信息。
Warning: Using a password on the command line interface can be insecure.

注: mysql -u root -pPASSWORD 或 mysqldump -u root -pPASSWORD 都会输出这样的警告信息.
1、针对mysql
mysql -u root -pPASSWORD 改成mysql -u root -p 在输入密码即可.

2、mysqldump就比较麻烦了,通常都写在scripts脚本中。

解决方法:
对于 mysqldump 要如何避免出现(Warning: Using a password on the command line interface can be insecure.) 警告信息呢?

vim /etc/mysql/my.cnf
[mysqldump]
user=your_backup_user_name
password=your_backup_password

修改完配置文件后, 只需要执行mysqldump 脚本就可以了。备份脚本中不需要涉及用户名密码相关信息。

来自:http://880314.blog.51cto.com/4008847/1348413
[实践OK]Linux下使用find命令使用-exec 进行两次大括号传入路径进行cat重定向到对应的特定文件可结合xargs 相关命令:http://jackxiang.com/post/6520/

这个解决方法我可是找了好久。。。正确写法:

find -name "*" -exec sh -c 'cat {} > {}.out.iso' \;
find -name "*.php" -exec bash -c "mv -f {} {}.tmp" \;
find -name "*.php" -exec bash -c "copy {} {}.tmp" \;
find -name "*.php" -exec bash -c "sed -e 's/aaa/bbb/' {} > {}.tmp; mv -f {}.tmp {}" \;

替换文件名内容:

find /tmp/exectest  -name "*.txt" -exec bash -c "ls {}" \;                    
/tmp/exectest/b.txt
/tmp/exectest/aaa/ccc.txt

find /tmp/exectest  -name "*.txt" -exec bash -c "ls {}|sed -e 's/txt/php/'" \;        
/tmp/exectest/b.php
/tmp/exectest/aaa/ddd.php






批量给不同层次的目录包含的*.log里写入jackwriteLog或清空日志:
find -name "*.log" -exec bash -c "echo '' > {}" \;
#删除/home/git/gitlab下所有系统日志(每周日11点59分删除一次所有日志)
59 23 * * 0 find /home/git/gitlab/log -name "*.log" -exec bash -c "echo "" > {}" \;
修改为这样:
#删除/home/git/gitlab下所有系统日志(每周日11点59分删除一次所有日志)
find /home/git/gitlab/log -name "*.log" -exec bash -c "echo "" > {}" \;



# find -name "*.log" -exec bash -c "echo 'jackwriteLog' > {}" \;        
# cat  ./k.log
jackwriteLog
# cat  ./n/n.log
jackwriteLog
# cat  ./n/j/a.log
jackwriteLog


find -name "*.php" -exec bash -c "cp {} {}.tmp" \;  
a.php  a.php.tmp  b.php  b.php.tmp



@ 2010-08-20 BS一下不看manpage的自己
引用
$ man sed
...
      -i[SUFFIX], --in-place[=SUFFIX]
              edit files in place (makes backup if extension supplied)
...
也就是说,只需要用 sed -i 就可以直接替换文件中的内容

======以前的分割线======

要用sed批量修改文件的内容,但是用这个命令解决不了问题:
find -name "*.php" -exec sed -e 's/aaa/bbb/' {} > {} \;
因为bash把 > 解释为find命令输出的重定向。
修改一下:
find -name "*.php" -exec sed -e 's/aaa/bbb/' {} \> {} \;
还是不行,因为 sed 去寻找一个名为 > 的文件进行处理
再修改:
find -name "*.php" -exec "sed -e 's/aaa/bbb/' {} \> {} " \;
还是不行,因为find去找一个名为 "sed -e 's/aaa/bbb/' {} \> {} " 的程序来执行
那是囧之又囧阿。于是去baidu,去google,
但是无论baidu还是google "find -exec 重定向"
都搜不到相应的解决方案,这样的问题居然没有人遇到过?
于是用google搜了一下
引用
linux find using "-exec" sed redirect

搜到了这一页: http://www.loisch.de/linux.html
看来还是国人太ooxx了,sigh。

解决方案其实很简单:绕个弯,把 -exec 的命令给shell来执行
注意:下面的命令一定不要在有用的文件上直接尝试!!!!!!
引用
find -name "*.php" -exec bash -c "sed -e 's/aaa/bbb/' {} > {}" \;

哦也!没有错误提示了!
然后 ls -al 一下,爽!所有文件大小都变成 0 了!
为什么捏?那篇文章里面解释了:
因为bash检测到需要重定向到那个文件,所以事先把那个文件清空了。
那篇文章里面提到一个修改bash配置的解决方案,但是不通用,建议还是用他说的第二种方案:
引用
find -name "*.php" -exec bash -c "sed -e 's/aaa/bbb/' {} > {}.tmp; mv -f {}.tmp {}" \;

嘿,这下爽了!
From:https://www.felix021.com/blog/read.php?1465




像下面这些文章只是说这么用,但从不说为何,在QQ群里说只一句重定向,没一个解释更深入点的,附录:
如何在-exec参数中使用重定向
http://www.2cto.com/os/201306/222794.html

Clear log file content without impacting service that is running (in batch):

find . -name "*.log" -exec bash -c ">{}" \;

Subsitute file content in batch:

find -name "*.xml" -exec bash -c "sed -e 's/aaa/bbb/' {} > {}" \;

http://blog.csdn.net/duanlove/article/details/8261677
在shell中,!$是一个特殊的环境变量,它代表了上一个命令的最后一个参数。
自己常常使用:Esc + . 和!$一样一样的。
$! 刚好写法相反,则表示Shell最后运行的后台Process的PID,看下面的例子:

mkdir -p /tmp/a/b/c/d/e/f
# ls !$
ls /tmp/a/b/c/d/e/f
# ls !$
ls /tmp/a/b/c/d/e/f
a.txt  b.txt  c.txt
# rm -Rf !$
rm -Rf /tmp/a/b/c/d/e/f
# ls !$
ls /tmp/a/b/c/d/e/f
ls: 无法访问/tmp/a/b/c/d/e/f: 没有那个文件或目录



Shell参数变量之 !:0是命令行,!:1是参数1,!:2是参数2,如下所示:

[root@justwinit-php-mysql_bj_sjs_10_44_202_177 ~]# echo hello world
hello world
[root@justwinit-php-mysql_bj_sjs_10_44_202_177 ~]# echo !:3
-bash: :3: bad word specifier
[root@justwinit-php-mysql_bj_sjs_10_44_202_177 ~]# echo hello world
hello world
[root@justwinit-php-mysql_bj_sjs_10_44_202_177 ~]# echo !:2
echo world
world
[root@justwinit-php-mysql_bj_sjs_10_44_202_177 ~]# echo !:1
echo world
world



例二:
# free -m
              total        used        free      shared  buff/cache   available
Mem:            991         856          32          34         103          29
Swap:          1407         321        1086

# free !:1
free -m              total        used        free      shared  buff/cache   available
Mem:            991         856          36          34          98          31
Swap:          1407         321        1086

===============================================
$ echo hello world
hello world
$ echo !$
echo worldworld
$ echo "hello world"
hello world
$ echo !$
echo "hello world"
hello world
这里为什么要用echo呢,请看下面,如果不用echo,!$输出的内容(world)会被shell当做一个命令来执行,所以就会报错
$ echo hello world
hello world
$ !$
world
No command 'world' found, did you mean:
Command 'tworld' from package 'tworld' (universe)
world: command not found
应用场景示例
1、建立多层目录并进入建立好的多层目录
$ mkdir -p a/b/c/d/e
$ cd a/b/c/d/e
改成
$ mkdir -p a/b/c/d/e
$ cd !$
上面mkdir -p命令用来一次性建立多层目录
2、编写文件后检测文件格式或者编译文件
$ vi a.php
$ php -l !$
或者
$ vi main.c
$ gcc !$

你可能不知道的超实用shell技巧 —— !$。
中,我们知道了 在shell中,!$代表了上一个命令的最后一个参数。那如果要获取上个命令的其它参数该怎么操作呢?
还是以echo hello world命令为例,下面就演示在该命令执行完成后,如何获取命令的各个参数甚至命令本身。
# echo helloworld
hello world
# echo !:1
echo hello
hello
# echo helloworld
hello world
# echo !:2
echo world
world
# echo hello world
hello world
# echo !:3
-bash: :3: bad word specifier
在调用!:3的时候出错了,因为上一次的命令只有两个参数。
下面你应该知道如何获取上次执行的是哪个命令了,那就是!:0,请看下面
# echo hello world
hello world
# echo !:0
echo echo
echo
其实呢,有更好的表示方法,看下面
# echo hello world
hello world
# echo !#
echo echo
echo
总结
!# 上一个命令名
!$ 上一个命令的最后一个参数
!:n 上一个命令的第n个参数
参考文章
http://crazyof.me/blog/archives/171.html
结论:僵尸进程 杀杀杀  杀不死 重启机器  
The system is going down for halt NOW!
====================================================

uptime
16:22:19 up 735 days,  5:48,  7 users,  load average: 59.70, 58.29, 54.91
close_wait状态出现的原因是被动关闭方未关闭socket造成
tcp      179      0 127.0.0.1:80                127.0.0.1:4184              CLOSE_WAIT  -                  
tcp      175      0 127.0.0.1:80                127.0.0.1:6038              CLOSE_WAIT  -                  
tcp      177      0 127.0.0.1:80                127.0.0.1:4121              CLOSE_WAIT  -  

netstat -atlunp|grep 80|grep CLOSE_WAIT|wc
3716   26012  405044


----查看当前进程打开了多少句柄数

# lsof -n|awk '{print $2}'|sort|uniq -c|sort -nr|more
162 34255
162 33984
162 33525
162 33356 
........

其中第一列是打开的句柄数,第二列是进程ID。


[root@itv-api_php_bj_syq_10_70_XX_XX www]# service nginx restart
Stopping nginx:                                            [  OK  ]
Starting nginx: nginx: [warn] conflicting server name "common.itv.cntv.cn" on 0.0.0.0:80, ignored
nginx: [warn] conflicting server name "api.itv.cntv.cn" on 0.0.0.0:80, ignored
nginx: [warn] conflicting server name "api.itv.cctv.com" on 0.0.0.0:80, ignored
nginx: [warn] conflicting server name "newcomment.cntv.cn" on 0.0.0.0:80, ignored
nginx: [warn] conflicting server name "common.newcomment.cntv.cn" on 0.0.0.0:80, ignored
nginx: [warn] conflicting server name "newcomment.cctv.com" on 0.0.0.0:80, ignored


strace  -f -p 56014  -p 56015  -p 56016  -p 56017  -p 56018  -p 56019  -p 56020  -p 56021  -p 56022  -p 56023  -p 56024  -p 56025
attach: ptrace(PTRACE_ATTACH, ...): Operation not permitted
Process 56015 attached - interrupt to quit
Process 56016 attached - interrupt to quit
Process 56017 attached - interrupt to quit
Process 56018 attached - interrupt to quit
Process 56019 attached - interrupt to quit

不是僵尸? 那就是孤儿

http://blog.csdn.net/wesleyluo/article/details/6079139
http://blog.chinaunix.net/uid-10257388-id-2967161.html
背景:面对一个不熟悉上面所跑哪些应用的16核心机器,出现负载到56这样的情况,而通过top命令后按P看CPU高的,也并不高,此时,可以想到的是某个核心太高,因为top里面默认的值是平均值,16个核心平均下来其CPU使用效率并不高,鉴于此,得在top输出时按下1,然后定位到某个核心高,才能有的放矢的查看该CPU上跑了哪些应用,贴个简单的命令吧,具体实践排查详细过程在:ps -eo 'psr pid pcpu command'|sort -k1 -n|grep -E '^ {1,2}(9|12|13|15) '|less  

ps -eo 'psr pid pcpu command'|sort -k1 -n|grep -E '^ {1,2}(9|12|13|15) '|less  



Top命令下按1后第三行显示比较关键:
Cpu0  :  0.0%us,  0.0%sy,  0.0%ni,  0.0%id,100.0%wa,  0.0%hi,  0.0%si,  0.0%st
top命令的第三行“Cpu(s):  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st”显示的内容依次为“用户空间占用CPU百分比”、“内核空间占用CPU百分比”、“用户空间内改变过优先级的进程占用CPU百分比”、“空闲CPU百分比”、“等待输入输出CPU时间百分比”、“CPU服务于硬件中断所耗费的时间总额”、“CPU服务软中断所耗费的时间总额”、“Steal Time”

Kipmi0 占用100% CPU1核:
https://yq.aliyun.com/articles/15198

方法1:使用iotop工具
这是一个python脚本工具,使用方法如:iotop -o


方法2:使用工具dmesg
使用dmesg之前,需要先开启内核的IO监控:
echo 1 >/proc/sys/vm/block_dump或sysctl vm.block_dump=1


然后可以使用如下命令查看IO最重的前10个进程:
dmesg |awk -F: '{print $1}'|sort|uniq -c|sort -rn|head -n 10


方法3:使用命令“iostat -x 1“确定哪个设备IO负载高:
# iostat -x 1 3
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           1.06    0.00    0.99    1.09    0.00   97.85


Device:    rrqm/s wrqm/s   r/s   w/s  rsec/s  wsec/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda          0.49  17.29  1.74  6.75   23.47  200.18    11.73   100.09    26.33     0.10   12.25   5.73   4.87


找“await”值最大的设备(Device),如上的结果即为sda。


然后使用mount找到sda挂载点,再使用fuser命令查看哪些进程在访问,如:
# fuser -vm /data

==================================================================================
进程占用cpu资源过多负载高的原因分析及解决步骤
2011-10-20 10:30:05
标签:负载高 nginx 休闲 apache linux
觉得写的非常好,以后会用到 ,所以转了过来,一切归原作者所有!
转自这里
服务器环境:redhat linux 5.5 , nginx , phpfastcgi


在此环境下,一般php-cgi运行是非常稳定的,但也遇到过php-cgi占用太多cpu资源而导致服务器响应过慢,我所遇到的php-cgi进程占用cpu资源过多的原因有:


1. 一些php的扩展与php版本兼容存在问题,实践证明 eAccelerater与某些php版本兼容存在问题,具体表现时启动php-cgi进程后,运行10多分钟,奇慢无比,但静态资源访问很快,服务器负载也很正常(说明nginx没有问题,而是php-cgi进程的问题),解决办法就是从php.ini中禁止掉eAccelerater模块,再重启 php-cgi进程即可


2. 程序中可能存在死循环,导致服务器负载超高(使用top指令查看负载高达100+), 需要借助Linux的proc虚拟文件系统找到具体的问题程序


3. php程序不合理使用session , 这个发生在开源微博记事狗程序上,具体表现是有少量php-cgi进程(不超过10个)的cpu使用率达98%以上, 服务器负载在4-8之间,这个问题的解决,仍然需要借助Linux的proc文件系统找出原因。


4. 程序中存在过度耗时且不可能完成的操作(还是程序的问题),例如discuz x 1.5的附件下载功能: source/module/forum/forum_attachement.php中的定义
function getremotefile($file) {
global $_G;
@set_time_limit(0);
if(!@readfile($_G['setting']['ftp']['attachurl'].'forum/'.$file)) {
$ftp = ftpcmd('object');
$tmpfile = @tempnam($_G['setting']['attachdir'], '');
if($ftp->ftp_get($tmpfile, 'forum/'.$file, FTP_BINARY)) {
@readfile($tmpfile);
@unlink($tmpfile);
} else {
@unlink($tmpfile);
return FALSE;
}
}
return TRUE;
}  


没有对传入的参数作任何初步检查,而且设置了永不超时,并且使用readfile一次读取超大文件,就可能存在以下问题:
A. 以http方式读取远程附件过度耗时
B. FTP无法连接时,如何及时反馈出错误?
C. readfile是一次性读取文件加载到内存中并输出,当文件过大时,内存消耗惊人


根据实验发现采用readfile一次性读取,内存消耗会明显增加,但是CPU的利用率会下降较多。如果采用分段读取的方式,内存消耗会稍微下降,而CPU占用却会明显上升。


对discuz x 1.5的这个bug较好解决方法就是后台重新正确设置远程附件参数。


以下是我逐步整理的故障排除步骤:


1. 得到占用cpu资源过多的php-cgi进程的pid(进程id), 使用top命令即可,如下图:
经过上图,我们发现,有两个php-cgi进程的cpu资源占用率过高,pid分别是10059,11570,这一般都是程序优化不够造成,如何定位问题的php程序位置?


2. 找出进程所使用的文件
/proc/文件系统保存在内存中,主要保存系统的状态,关键配置等等,而/proc/目录下有很多数字目录,就是进程的相关信息,如下图,我们看看进程10059正在使用哪些文件?
显然,使用了/home/tmp/sess_*文件,这明显是PHP的session文件, 我们查看这个session文件的内容为:view_time|123333312412


到这里,我们已经可以怀疑是由于php程序写入一个叫view_time的session项而引起, 那么剩余的事件就是检查包含view_time的所有php文件,然后修改之(比如改用COOKIE),这实话, 这个view_time并非敏感数据,仅仅记录用户最后访问时间,实在没必要使用代价巨大的session, 而应该使用cookie。


3. 找出有问题的程序,修改之
使用vi编辑以下shell程序(假设网站程序位于/www目录下)
#!/bin/bash
find /www/ -name "*.php" > list.txt

f=`cat ./list.txt`

for n in $f
do
r=`egrep 'view_time' $n`
if [ ! "$r" = "" ] ; then
echo $n
fi
done  
运行这个shell程序,将输出包含有view_time的文件, 对记事狗微博系统,产生的问题位于modules/topic.mod.class文件中
来自这里
大家好,公司有一台服务器上部署了mysql+php+apache!
但是发现apache有一个httpd进程占用很高的cup,请教有没有什么命令能查看到时什么文件调用了这个进程?

lsof -p 13321


http://blog.csdn.net/aquester/article/details/51557879
http://blog.chinaunix.net/uid-7934175-id-4013411.html
Linux字符串md5,注意得echo -n ,-n就是去空格,如果不加 -n则会有空格输出:
echo -n re0XY6?ki|md5sum|awk '{print $1}'
270899509597f424b626b14034622c89
------------------------------------------------------------
mysql> select md5("re0XY6?ki");
+----------------------------------+
| md5("re0XY6?ki")                 |
+----------------------------------+
| 270899509597f424b626b14034622c89 |
+----------------------------------+
1 row in set (0.00 sec)
=============================================

Linux系统有一个自带的生成密码的命令,这个命令异常强悍,可以帮助我们生成随机密码,要知道,现在的黑客无处不在,想一个难猜的密码还真的下点功夫,有了这个密码生成工具,就可以为管理员节省好多脑细胞啊,下面看下这个命令的使用:

[root@CentOS6 game-dir]# mkpasswd

JI>s64tyv

[root@centos6 game-dir]# mkpasswd -l 12

e/Hwyw8Kied6

[root@centos6 game-dir]# mkpasswd -l 12 -d 3

zas4Ery+5K8l

[root@centos6 game-dir]# mkpasswd -l 12 -c 4

ff9bT7b}npmM

[root@centos6 game-dir]# mkpasswd -l 12 -C 4

x3TwqtSKh}2T

[root@centos6 game-dir]# mkpasswd -l 12 -s 4

px}[aO8cF':8

[root@centos6 game-dir]# mkpasswd -l 18 -s 4 -c 4 -C 4

;.8zW3dGiwmb@dyWO&

下面来简单介绍一下常用的参数含义:

usage: mkpasswd [args] [user]

where arguments are:

-l #      (length of password, default = 7)

                  指定密码的长度,默认是7位数

-d #      (min # of digits, default = 2)

                  指定密码中数字最少位数,默认是2位

-c #      (min # of lowercase chars, default = 2)

                  指定密码中小写字母最少位数,默认是2位

-C #      (min # of uppercase chars, default = 2)

                  指定密码中大写字母最少位数,默认是2位

-s #      (min # of special chars, default = 1)

                  指定密码中特殊字符最少位数,默认是1位

-v        (verbose, show passwd interaction)

                  这个参数在实验的时候报错,具体不知道。
分页: 3/246 第一页 上页 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 下页 最后页 [ 显示模式: 摘要 | 列表 ]