<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[静怡家园]]></title> 
<link>http://www.zhanghaijun.com/index.php</link> 
<description><![CDATA[书山有路勤为径，学海无涯苦作舟！]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[静怡家园]]></copyright>
<item>
<link>http://www.zhanghaijun.com/post/976/</link>
<title><![CDATA[CentOS 5的yum源更换为阿里云可用源]]></title> 
<author>碟舞飞扬 &lt;webmaster@zhanghaijun.com&gt;</author>
<category><![CDATA[Linux技术]]></category>
<pubDate>Wed, 15 Mar 2017 04:32:27 +0000</pubDate> 
<guid>http://www.zhanghaijun.com/post/976/</guid> 
<description>
<![CDATA[ 
	最近在老的机器（CentOS 5）上使用yum的时候发现不能正常使用，打开相关源的地址之后发现很多源都已经抛弃了CentOS 5了，大家常用的如：<br/>1、网易：http://mirrors.163.com/centos/<br/>2、搜狐：http://mirrors.sohu.com/centos/<br/>3、科技大学：http://mirrors.ustc.edu.cn/centos/<br/>无一例外，全都不可使用了，于是前往阿里云的镜像源看看，发现阿里云的源还保留着，阿里云Linux安装镜像源地址：http://mirrors.aliyun.com/，这样就简单了，只需将系统的更新源替换为阿里云的即可。<br/>CentOS系统更换软件安装源：<br/>1、备份<textarea name="code" class="c" rows="15" cols="100">mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup</textarea><br/>2、下载新的CentOS-Base.repo 到/etc/yum.repos.d/<br/><textarea name="code" class="c" rows="15" cols="100">CentOS 5
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-5.repo
CentOS 6
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
CentOS 7
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo</textarea><br/>3、之后运行yum makecache生成缓存<br/><textarea name="code" class="c" rows="15" cols="100">yum clean all
yum makecache</textarea><br/>如果你使用的是阿里云的服务器，将源的域名从mirrors.aliyun.com改为mirrors.aliyuncs.com,不占用公网流量。<br/><textarea name="code" class="c" rows="15" cols="100">#批量替换：
sed -i 's#mirrors.aliyun.com#mirrors.aliyuncs.com#' /etc/yum.repos.d/CentOS-Base.repo</textarea><br/>Tags - <a href="http://www.zhanghaijun.com/tags/linux/" rel="tag">linux</a> , <a href="http://www.zhanghaijun.com/tags/yum/" rel="tag">yum</a>
]]>
</description>
</item><item>
<link>http://www.zhanghaijun.com/post/960/</link>
<title><![CDATA[CentOS 6 下安装和使用Nmon工具]]></title> 
<author>碟舞飞扬 &lt;webmaster@zhanghaijun.com&gt;</author>
<category><![CDATA[Linux技术]]></category>
<pubDate>Fri, 24 Apr 2015 04:44:36 +0000</pubDate> 
<guid>http://www.zhanghaijun.com/post/960/</guid> 
<description>
<![CDATA[ 
	Nmon 工具是 IBM 提供的免费的在AIX与各种Linux操作系统上广泛使用的监控与分析工具。该工具可将服务器的系统资源耗用情况收集起来并输出一个特定的文件,并可利用 excel 分析工具nmonanalyser进行数据的统计分析。并且，nmon运行不会占用过多的系统资源，通常情况下CPU利用率不会超过2%。针对不同的操作系统版本，nmon有相应版本的程序。<br/><br/>下载安装：<br/>官方相关页面：https://www.ibm.com/developerworks/community/wikis/home?lang=en#!/wiki/Power%20Systems/page/nmon<br/>下载地址：http://nmon.sourceforge.net/pmwiki.php<br/>打开页面之后根据自己的实际情况，选择支持自己操作系统的版本，本文的测试机是CentOS 6 所以这里我们下载的是for CentOS 6 X86_64位的版本，下载地址是：<br/>http://sourceforge.net/projects/nmon/files/nmon_x86_64_centos6/download<br/><br/>下载后的文件名是：nmon_x86_64_centos6，为了方便使用我们把它改为nmon，赋予它执行权限，chmod +x nmon，nmon工具使用比较简单，在nmon目录执行./nmon就可以启动nmon了<br/><a href="http://www.zhanghaijun.com/attachment.php?fid=168" target="_blank"><img src="http://www.zhanghaijun.com/attachment.php?fid=168" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/>输入“c”可显示CPU的信息，“m”对应内存、“n”对应网络，“d”可以查看磁盘信息，“j”可以查看文件系统，工具界面有使用提示，你可以使用./nmon -help查看详细的帮助信息。<br/><br/>测试采集数据：<br/>./nmon -f -t -r Test1 -s30 -c10<br/><br/>Test1 ：标题<br/>-f ：按标准格式输出文件名称：<hostname>_YYYYMMDD_HHMM.nmon<br/>-t ：输出最耗资源的进程<br/>-s ：每隔n秒抽样一次，这里为30秒<br/>-c ：取出多少个抽样数量，这里为10，即监控=10*30/60=5分钟<br/><br/>命令启动后，会在nmon所在目录下生成数据文件，并持续写入采集的数据，直至监控时间完成，这些操作都是自动完成，不用人工干预，如果你监控的时间比较长，你就可以继续做其他的事情了，如果想停止监控，需要查找nmon的进程号，然后kill掉进程就停止监控了。<br/><br/>执行完毕后，nmon目录下生成了一个 localhost_150424_1043.nmon 文件，我们要通过命令把它专程一个csv文件，sort localhost_150424_1043.nmon > test1.csv<br/>将test1.csv下载到本地之后，我们需要使用 nmon analyser工具来转换为excel文件。<br/><br/>nmon analyser下载地址：https://www.ibm.com/developerworks/community/wikis/home?lang=en#!/wiki/Power%20Systems/page/nmon_analyser<br/>当前最新版为4.2，文件很小，就200多K，下载后解压会有一个nmon analyser v42.xlsm文件，我们双击打开这个文件，在左上角的地方会有一个安全警告，提示宏已被禁用，这里使用的offices 2007，其他版本不清楚是否一样，<br/>点击旁边的选项，选择启用此内容，点击确定，<br/><a href="http://www.zhanghaijun.com/attachment.php?fid=169" target="_blank"><img src="http://www.zhanghaijun.com/attachment.php?fid=169" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/>然后点击Analyser nmon data 按钮，选择下载下来的test1.csv文件，然后就会转换成.excel文件了。<br/><a href="http://www.zhanghaijun.com/attachment.php?fid=170" target="_blank"><img src="http://www.zhanghaijun.com/attachment.php?fid=170" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://www.zhanghaijun.com/attachment.php?fid=171" target="_blank"><img src="http://www.zhanghaijun.com/attachment.php?fid=171" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://www.zhanghaijun.com/attachment.php?fid=172" target="_blank"><img src="http://www.zhanghaijun.com/attachment.php?fid=172" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://www.zhanghaijun.com/attachment.php?fid=173" target="_blank"><img src="http://www.zhanghaijun.com/attachment.php?fid=173" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://www.zhanghaijun.com/attachment.php?fid=174" target="_blank"><img src="http://www.zhanghaijun.com/attachment.php?fid=174" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://www.zhanghaijun.com/attachment.php?fid=175" target="_blank"><img src="http://www.zhanghaijun.com/attachment.php?fid=175" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>感兴趣的朋友可以试试。<br/>Tags - <a href="http://www.zhanghaijun.com/tags/linux/" rel="tag">linux</a> , <a href="http://www.zhanghaijun.com/tags/nmon/" rel="tag">nmon</a>
]]>
</description>
</item><item>
<link>http://www.zhanghaijun.com/post/951/</link>
<title><![CDATA[mysql 5.6 private_key.pem public_key.pem file not found]]></title> 
<author>碟舞飞扬 &lt;webmaster@zhanghaijun.com&gt;</author>
<category><![CDATA[Linux技术]]></category>
<pubDate>Thu, 14 Aug 2014 09:12:21 +0000</pubDate> 
<guid>http://www.zhanghaijun.com/post/951/</guid> 
<description>
<![CDATA[ 
	140814 15:28:44 mysqld_safe Starting mysqld daemon with databases from /home/mysql2015/data<br/>2014-08-14 15:28:45 15388 [Note] InnoDB: Using atomics to ref count buffer pool pages<br/>2014-08-14 15:28:45 15388 [Note] InnoDB: The InnoDB memory heap is disabled<br/>2014-08-14 15:28:45 15388 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins<br/>2014-08-14 15:28:45 15388 [Note] InnoDB: Memory barrier is not used<br/>2014-08-14 15:28:45 15388 [Note] InnoDB: Compressed tables use zlib 1.2.3<br/>2014-08-14 15:28:45 15388 [Note] InnoDB: Using Linux native AIO<br/>2014-08-14 15:28:45 15388 [Note] InnoDB: Using CPU crc32 instructions<br/>2014-08-14 15:28:45 15388 [Note] InnoDB: Initializing buffer pool, size = 1.0G<br/>2014-08-14 15:28:45 15388 [Note] InnoDB: Completed initialization of buffer pool<br/>2014-08-14 15:28:45 15388 [Note] InnoDB: Highest supported file format is Barracuda.<br/>2014-08-14 15:28:45 15388 [Note] InnoDB: 128 rollback segment(s) are active.<br/>2014-08-14 15:28:45 15388 [Note] InnoDB: Waiting for purge to start<br/>2014-08-14 15:28:45 15388 [Note] InnoDB: 5.6.20 started; log sequence number 1661278<br/><span style="color: #FF0000;">2014-08-14 15:28:45 15388 [Note] RSA private key file not found: /home/mysql2015/data//private_key.pem. Some authentication plugins will not work.<br/>2014-08-14 15:28:45 15388 [Note] RSA public key file not found: /home/mysql2015/data//public_key.pem. Some authentication plugins will not work.</span><br/>2014-08-14 15:28:45 15388 [Note] Server hostname (bind-address): '0.0.0.0'; port: 2015<br/>2014-08-14 15:28:45 15388 [Note]&nbsp;&nbsp; - '0.0.0.0' resolves to '0.0.0.0';<br/>2014-08-14 15:28:45 15388 [Note] Server socket created on IP: '0.0.0.0'.<br/>2014-08-14 15:28:46 15388 [Note] Event Scheduler: Loaded 0 events<br/>2014-08-14 15:28:46 15388 [Note] /usr/local/webserver/mysql2015/bin/mysqld: ready for connections.<br/>Version: '5.6.20-log'&nbsp;&nbsp;socket: '/tmp/mysql2015.sock'&nbsp;&nbsp;port: 2015&nbsp;&nbsp;Source distribution<br/>处理了一个MySQL Plugin 'FEDERATED' is disabled 的问题，发现日志里还有一个RSA private key file not found的问题，sha256_password这个插件是MySQL5.6内置的，支持更为强大的用户密码加密方式。<br/><br/>解决方法：<br/><div class="code"><br/>openssl genrsa -out mykey.pem 1024<br/>openssl rsa -in mykey.pem -pubout &gt; mykey.pub<br/></div><br/><div class="code"><br/>chmod 400 mykey.pem<br/>chmod 444 mykey.pub<br/>chown mysql:mysql mykey.pem<br/>chown mysql:mysql mykey.pub<br/></div><br/><br/>vi my.cnf 在[mysqld]下面加以下两行：<br/>sha256_password_private_key_path=/home/mysql2015/mykey.pem<br/>sha256_password_public_key_path=/home/mysql2015/mykey.pub<br/>保存之后，重启MYSQL服务，日志不再有以下错误了<br/>RSA private key file not found: /home/mysql2015/data//private_key.pem. Some authentication plugins will not work.<br/>RSA public key file not found: /home/mysql2015/data//public_key.pem. Some authentication plugins will not work.<br/>Tags - <a href="http://www.zhanghaijun.com/tags/mysql5.6/" rel="tag">mysql5.6</a> , <a href="http://www.zhanghaijun.com/tags/private_key.pem/" rel="tag">private key.pem</a> , <a href="http://www.zhanghaijun.com/tags/public_key.pem/" rel="tag">public key.pem</a>
]]>
</description>
</item><item>
<link>http://www.zhanghaijun.com/post/950/</link>
<title><![CDATA[MySQL Plugin FEDERATED is disabled 错误]]></title> 
<author>碟舞飞扬 &lt;webmaster@zhanghaijun.com&gt;</author>
<category><![CDATA[Linux技术]]></category>
<pubDate>Thu, 14 Aug 2014 05:30:52 +0000</pubDate> 
<guid>http://www.zhanghaijun.com/post/950/</guid> 
<description>
<![CDATA[ 
	140814 12:44:59 mysqld_safe Starting mysqld daemon with databases from /home/mysql2015/data<br/><span style="color: #FF0000;">2014-08-14 12:45:00 7642 [Note] Plugin 'FEDERATED' is disabled.</span><br/>2014-08-14 12:45:00 7642 [Note] InnoDB: Using atomics to ref count buffer pool pages<br/>2014-08-14 12:45:00 7642 [Note] InnoDB: The InnoDB memory heap is disabled<br/>2014-08-14 12:45:00 7642 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins<br/>2014-08-14 12:45:00 7642 [Note] InnoDB: Memory barrier is not used<br/>2014-08-14 12:45:00 7642 [Note] InnoDB: Compressed tables use zlib 1.2.3<br/>2014-08-14 12:45:00 7642 [Note] InnoDB: Using Linux native AIO<br/>2014-08-14 12:45:00 7642 [Note] InnoDB: Using CPU crc32 instructions<br/>2014-08-14 12:45:00 7642 [Note] InnoDB: Initializing buffer pool, size = 1.0G<br/>2014-08-14 12:45:00 7642 [Note] InnoDB: Completed initialization of buffer pool<br/>2014-08-14 12:45:00 7642 [Note] InnoDB: Highest supported file format is Barracuda.<br/>2014-08-14 12:45:00 7642 [Note] InnoDB: 128 rollback segment(s) are active.<br/>2014-08-14 12:45:00 7642 [Note] InnoDB: Waiting for purge to start<br/>2014-08-14 12:45:00 7642 [Note] InnoDB: 5.6.20 started; log sequence number 1626018<br/>2014-08-14 12:45:00 7642 [Note] RSA private key file not found: /home/mysql2015/data//private_key.pem. Some authentication plugins will not work.<br/>2014-08-14 12:45:00 7642 [Note] RSA public key file not found: /home/mysql2015/data//public_key.pem. Some authentication plugins will not work.<br/>2014-08-14 12:45:00 7642 [Note] Server hostname (bind-address): '0.0.0.0'; port: 2015<br/>2014-08-14 12:45:00 7642 [Note]&nbsp;&nbsp; - '0.0.0.0' resolves to '0.0.0.0';<br/>2014-08-14 12:45:00 7642 [Note] Server socket created on IP: '0.0.0.0'.<br/>2014-08-14 12:45:00 7642 [Note] Event Scheduler: Loaded 0 events<br/>2014-08-14 12:45:00 7642 [Note] /usr/local/webserver/mysql2015/bin/mysqld: ready for connections.<br/>Version: '5.6.20-log'&nbsp;&nbsp;socket: '/tmp/mysql2015.sock'&nbsp;&nbsp;port: 2015&nbsp;&nbsp;Source distribution<br/><br/>解决办法：<br/>vi my.cnf<br/>在[mysqld]下面加一行<br/>federated<br/>再次启动就可以看见FEDERATED引擎已经正常加载了。<br/><a href="http://www.zhanghaijun.com/attachment.php?fid=127" target="_blank"><img src="http://www.zhanghaijun.com/attachment.php?fid=127" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><span style="font-size: 14px;">注意：请确认你cmake编译的时候把-DWITH_FEDERATED_STORAGE_ENGINE=1加进去了。</span><br/>Tags - <a href="http://www.zhanghaijun.com/tags/federated/" rel="tag">federated</a> , <a href="http://www.zhanghaijun.com/tags/mysql5.6.20/" rel="tag">mysql5.6.20</a>
]]>
</description>
</item><item>
<link>http://www.zhanghaijun.com/post/949/</link>
<title><![CDATA[Git常用命令]]></title> 
<author>碟舞飞扬 &lt;webmaster@zhanghaijun.com&gt;</author>
<category><![CDATA[Linux技术]]></category>
<pubDate>Thu, 07 Aug 2014 03:43:14 +0000</pubDate> 
<guid>http://www.zhanghaijun.com/post/949/</guid> 
<description>
<![CDATA[ 
	Git配置相关：<br/><br/>git config --global user.name "robbin" <br/>git config --global user.email "test@test.com"<br/>git config --global color.ui true<br/>git config --global alias.co checkout<br/>git config --global alias.ci commit<br/>git config --global alias.st status<br/>git config --global alias.br branch<br/>git config --global core.editor "mate -w"&nbsp;&nbsp;&nbsp;&nbsp;# 设置Editor使用textmate<br/>git config -l&nbsp;&nbsp;# 列举所有配置<br/><br/>用户的git配置文件~/.gitconfig&nbsp;&nbsp;<br/><br/>Git常用命令查看、添加、提交、删除、找回，重置修改文件<br/>git help <command>&nbsp;&nbsp;# 显示command的help<br/>git show&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 显示某次提交的内容<br/>git show $id<br/><br/>git co&nbsp;&nbsp;-- <file>&nbsp;&nbsp; # 抛弃工作区修改<br/>git co&nbsp;&nbsp;.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 抛弃工作区修改<br/><br/>git add <file>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# 将工作文件修改提交到本地暂存区<br/>git add .&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 将所有修改过的工作文件提交暂存区<br/><br/>git rm <file>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 从版本库中删除文件<br/>git rm <file> --cached&nbsp;&nbsp;# 从版本库中删除文件，但不删除文件<br/><br/>git reset <file>&nbsp;&nbsp;&nbsp;&nbsp;# 从暂存区恢复到工作文件<br/>git reset -- .&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# 从暂存区恢复到工作文件<br/>git reset --hard&nbsp;&nbsp;&nbsp;&nbsp;# 恢复最近一次提交过的状态，即放弃上次提交后的所有本次修改<br/><br/>git ci <file><br/>git ci .<br/>git ci -a&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 将git add, git rm和git ci等操作都合并在一起做<br/>git ci -am "some comments"<br/>git ci --amend&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# 修改最后一次提交记录<br/><br/>git revert <$id>&nbsp;&nbsp;&nbsp;&nbsp;# 恢复某次提交的状态，恢复动作本身也创建了一次提交对象<br/>git revert HEAD&nbsp;&nbsp;&nbsp;&nbsp; # 恢复最后一次提交的状态<br/><br/>查看文件diff<br/><br/>git diff <file>&nbsp;&nbsp;&nbsp;&nbsp; # 比较当前文件和暂存区文件差异<br/>git diff<br/>git diff <$id1> <$id2>&nbsp;&nbsp; # 比较两次提交之间的差异<br/>git diff <branch1>..<branch2> # 在两个分支之间比较 <br/>git diff --staged&nbsp;&nbsp; # 比较暂存区和版本库差异<br/>git diff --cached&nbsp;&nbsp; # 比较暂存区和版本库差异<br/>git diff --stat&nbsp;&nbsp;&nbsp;&nbsp; # 仅仅比较统计信息<br/><br/>查看提交记录<br/><br/>git log<br/>git log <file>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# 查看该文件每次提交记录<br/>git log -p <file>&nbsp;&nbsp; # 查看每次详细修改内容的diff<br/>git log -p -2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 查看最近两次详细修改内容的diff<br/>git log --stat&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# 查看提交统计信息<br/>tig&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Mac上可以使用tig代替diff和log，brew install tig)<br/><br/>Git 本地分支管理查看、切换、创建和删除分支<br/><br/>git br -r&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 查看远程分支<br/>git br <new_branch> # 创建新的分支<br/>git br -v&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 查看各个分支最后提交信息<br/>git br --merged&nbsp;&nbsp;&nbsp;&nbsp; # 查看已经被合并到当前分支的分支<br/>git br --no-merged&nbsp;&nbsp;# 查看尚未被合并到当前分支的分支<br/><br/>git co <branch>&nbsp;&nbsp;&nbsp;&nbsp; # 切换到某个分支<br/>git co -b <new_branch> # 创建新的分支，并且切换过去<br/>git co -b <new_branch> <branch>&nbsp;&nbsp;# 基于branch创建新的new_branch<br/><br/>git co $id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# 把某次历史提交记录checkout出来，但无分支信息，切换到其他分支会自动删除<br/>git co $id -b <new_branch>&nbsp;&nbsp;# 把某次历史提交记录checkout出来，创建成一个分支<br/><br/>git br -d <branch>&nbsp;&nbsp;# 删除某个分支<br/>git br -D <branch>&nbsp;&nbsp;# 强制删除某个分支 (未被合并的分支被删除的时候需要强制)<br/><br/>分支合并和rebase<br/><br/>git merge <branch>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# 将branch分支合并到当前分支<br/>git merge origin/master --no-ff&nbsp;&nbsp;# 不要Fast-Foward合并，这样可以生成merge提交<br/><br/>git rebase master <branch>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 将master rebase到branch，相当于：<br/>git co <branch> && git rebase master && git co master && git merge <branch><br/><br/>Git补丁管理(方便在多台机器上开发同步时用)<br/><br/>git diff > ../sync.patch&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 生成补丁<br/>git apply ../sync.patch&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# 打补丁<br/>git apply --check ../sync.patch&nbsp;&nbsp;# 测试补丁能否成功<br/><br/>Git暂存管理<br/><br/>git stash&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# 暂存<br/>git stash list&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 列所有stash<br/>git stash apply&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# 恢复暂存的内容<br/>git stash drop&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 删除暂存区<br/><br/>Git远程分支管理<br/><br/>git pull&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 抓取远程仓库所有分支更新并合并到本地<br/>git pull --no-ff&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 抓取远程仓库所有分支更新并合并到本地，不要快进合并<br/>git fetch origin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 抓取远程仓库更新<br/>git merge origin/master&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# 将远程主分支合并到本地当前分支<br/>git co --track origin/branch&nbsp;&nbsp;&nbsp;&nbsp; # 跟踪某个远程分支创建相应的本地分支<br/>git co -b <local_branch> origin/<remote_branch>&nbsp;&nbsp;# 基于远程分支创建本地分支，功能同上<br/><br/>git push&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # push所有分支<br/>git push origin master&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 将本地主分支推到远程主分支<br/>git push -u origin master&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# 将本地主分支推到远程(如无远程主分支则创建，用于初始化远程仓库)<br/>git push origin <local_branch>&nbsp;&nbsp; # 创建远程分支， origin是远程仓库名<br/>git push origin <local_branch>:<remote_branch>&nbsp;&nbsp;# 创建远程分支<br/>git push origin :<remote_branch>&nbsp;&nbsp;#先删除本地分支(git br -d <branch>)，然后再push删除远程分支<br/><br/>Git远程仓库管理<br/><br/>git remote -v&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# 查看远程服务器地址和仓库名称<br/>git remote show origin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 查看远程服务器仓库状态<br/>git remote add origin git@github:robbin/robbin_site.git&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 添加远程仓库地址<br/>git remote set-url origin git@github.com:robbin/robbin_site.git # 设置远程仓库地址(用于修改远程仓库地址)<br/>git remote rm <repository>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 删除远程仓库<br/><br/>创建远程仓库<br/><br/>git clone --bare robbin_site robbin_site.git&nbsp;&nbsp;# 用带版本的项目创建纯版本仓库<br/>scp -r my_project.git git@git.csdn.net:~&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# 将纯仓库上传到服务器上<br/><br/>mkdir robbin_site.git && cd robbin_site.git && git --bare init # 在服务器创建纯仓库<br/>git remote add origin git@github.com:robbin/robbin_site.git&nbsp;&nbsp;&nbsp;&nbsp;# 设置远程仓库地址<br/>git push -u origin master&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# 客户端首次提交<br/>git push -u origin develop&nbsp;&nbsp;# 首次将本地develop分支提交到远程develop分支，并且track<br/><br/>git remote set-head origin master&nbsp;&nbsp; # 设置远程仓库的HEAD指向master分支，也可以命令设置跟踪远程库和本地库<br/><br/>git branch --set-upstream master origin/master<br/>git branch --set-upstream develop origin/develop<br/>Tags - <a href="http://www.zhanghaijun.com/tags/git/" rel="tag">git</a> , <a href="http://www.zhanghaijun.com/tags/linux/" rel="tag">linux</a> , <a href="http://www.zhanghaijun.com/tags/%25E5%2591%25BD%25E4%25BB%25A4/" rel="tag">命令</a>
]]>
</description>
</item><item>
<link>http://www.zhanghaijun.com/post/948/</link>
<title><![CDATA[CentOS 下快速安装saltstack]]></title> 
<author>碟舞飞扬 &lt;webmaster@zhanghaijun.com&gt;</author>
<category><![CDATA[Linux技术]]></category>
<pubDate>Mon, 16 Jun 2014 09:10:41 +0000</pubDate> 
<guid>http://www.zhanghaijun.com/post/948/</guid> 
<description>
<![CDATA[ 
	一、下载安装epel源<br/>CentOS 6.x<br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/>1、32位系统<br/>rpm -Uvh http://mirrors.sohu.com/fedora-epel/6/i386/epel-release-6-8.noarch.rpm<br/>2、64位系统<br/>rpm -Uvh http://mirrors.sohu.com/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm<br/></div></div><br/>CentOS 5.x<br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/>1、32位系统<br/>rpm -Uvh http://mirrors.sohu.com/fedora-epel/5/i386/epel-release-5-4.noarch.rpm<br/>2、64位系统<br/>rpm -Uvh http://mirrors.sohu.com/fedora-epel/5/x86_64/epel-release-5-4.noarch.rpm<br/></div></div><br/><br/>二、安装master<br/>yum -y install salt-master<br/><br/>2.1、修改配置文件中的监听IP：<br/>vi /etc/salt/master<br/>把14行的#interface: 0.0.0.0修改为你的内网IP或者其他，本例修改为：interface: 192.168.1.4<br/><br/>2.2、启动master<br/>/etc/init.d/salt-master start<br/><br/>2.3、设置master开机自启动<br/>chkconfig salt-master on<br/><br/>三、salt-minion安装<br/>yum -y install salt-minion<br/><br/>3.1、修改配置文件<br/>vi /etc/salt/minion<br/>把11行的master的地址修改为：master: 192.168.1.4<br/>把42行的id修改为：id: vhost16&nbsp;&nbsp;（注：你可以按照你服务器的分类来命名，方便管理）<br/><br/>3.2、启动minion<br/>/etc/init.d/salt-minion start<br/><br/>3.3、设置minion开机自启动<br/>chkconfig salt-minion on<br/><br/>回到master执行salt-key -L ，会列出当前已经认证和还没有认证的主机，vhost16就是我们刚才才添加的主机。<br/><a href="http://www.zhanghaijun.com/attachment.php?fid=123" target="_blank"><img src="http://www.zhanghaijun.com/attachment.php?fid=123" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>接下来我们执行：<br/>salt-key -a vhost16<br/>来通过认证。<br/><a href="http://www.zhanghaijun.com/attachment.php?fid=124" target="_blank"><img src="http://www.zhanghaijun.com/attachment.php?fid=124" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>或者你可以执行：salt-key -A&nbsp;&nbsp;全部认证。<br/><br/>四：测试<br/>salt 'vhost' test.ping<br/><a href="http://www.zhanghaijun.com/attachment.php?fid=125" target="_blank"><img src="http://www.zhanghaijun.com/attachment.php?fid=125" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>salt 'vhost*' cmd.run 'date'<br/><a href="http://www.zhanghaijun.com/attachment.php?fid=126" target="_blank"><img src="http://www.zhanghaijun.com/attachment.php?fid=126" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/>更多使用方法请参考官方文档：<br/>http://docs.saltstack.com/en/latest/<br/>http://docs.saltstack.cn/<br/>Tags - <a href="http://www.zhanghaijun.com/tags/saltstack/" rel="tag">saltstack</a> , <a href="http://www.zhanghaijun.com/tags/linux/" rel="tag">linux</a> , <a href="http://www.zhanghaijun.com/tags/%25E9%259B%2586%25E7%25BE%25A4%25E7%25AE%25A1%25E7%2590%2586/" rel="tag">集群管理</a>
]]>
</description>
</item><item>
<link>http://www.zhanghaijun.com/post/947/</link>
<title><![CDATA[/var/spool/clientmqueue 目录占用100%磁盘问题]]></title> 
<author>碟舞飞扬 &lt;webmaster@zhanghaijun.com&gt;</author>
<category><![CDATA[Linux技术]]></category>
<pubDate>Sat, 14 Jun 2014 02:14:20 +0000</pubDate> 
<guid>http://www.zhanghaijun.com/post/947/</guid> 
<description>
<![CDATA[ 
	&nbsp;&nbsp;&nbsp;&nbsp;/var/spool/clientmqueue目录，如果系统中有用户开启了cron，而cron中执行的程序又有输出内容，输出内容会以邮件形式发给cron的用户，而sendmail没有启动所以就产生了这些文件。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;如果你确定你的系统没有启动sendmail对外发送邮件，你就可以把这个目录给清空，释放磁盘空间，可能你发现这个问题的时候该目录已经存在大量的文件了，执行 rm -f&nbsp;&nbsp;* 删除的时候就会提示："-bash: /bin/rm: Argument list too long" 无法删除，这时候你可以试试使用：ls &#124; xargs rm -f 或 find /var/spool/clientmqueue/ -type f -exec rm &#123;&#125; &#92;; 来删除这些文件。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;解决方法：在你的crontab执行命令的后面加上 >/dev/null 2>&1 ，丢弃计划任务执行时产生的错误或输出的内容。<br/>Tags - <a href="http://www.zhanghaijun.com/tags/linux/" rel="tag">linux</a> , <a href="http://www.zhanghaijun.com/tags/clientmqueue/" rel="tag">clientmqueue</a> , <a href="http://www.zhanghaijun.com/tags/sendmail/" rel="tag">sendmail</a> , <a href="http://www.zhanghaijun.com/tags/crontab/" rel="tag">crontab</a>
]]>
</description>
</item><item>
<link>http://www.zhanghaijun.com/post/946/</link>
<title><![CDATA[线程休眠(sleep, usleep, nanosleep, pthread_delay_np)]]></title> 
<author>碟舞飞扬 &lt;webmaster@zhanghaijun.com&gt;</author>
<category><![CDATA[Linux技术]]></category>
<pubDate>Thu, 20 Mar 2014 03:36:37 +0000</pubDate> 
<guid>http://www.zhanghaijun.com/post/946/</guid> 
<description>
<![CDATA[ 
	sleep() 与 usleep()<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 想要延迟数秒的时间, 最佳的方法大概 是使用函式 sleep() . 想要延迟至少数十毫秒的时间 (10 ms 似乎已是最短的延迟时间了), 函式 usleep() 应该可以使用. 这些函式是让出 CPU 的使用权 给其他想要执行的行程 (processes) (``自己休息去了''), 所以没有浪费掉 CPU 的时间. 细节请参考 sleep(3) 与 usleep(3) 的说明文件. <br/>　　如果让出 CPU 的使用权因而使得时间延迟了大约 50 毫秒 (这取决於处理器与机器的速度, 以及系统的负荷), 就浪费掉 CPU 太多的时间, 因为 Linux 的排程器 (scheduler) (单就 x86 架构而言) 在将控制权发还给你的行程 (process) 之前通常至少要花费 10-30 毫秒的时间. 因此, 短时间的延迟, 使用函式 usleep(3) 所得到的延迟结果通常会大於你在参数所指定的值, 大约至少有 10 ms.<br/><br/>需要注意的是在 windos 下面 sleep() 函数精度为毫秒级, 而在 Linux下面的 sleep() 函数精度为秒级,&nbsp;&nbsp;usleep() 已被废除, 可以使用nanosleep() 替代.<br/><br/>nanosleep()<br/><br/>　　在 Linux 2.0.x 一系列的核心发行版本中, 有一个新的系统呼叫 (system call), nanosleep() (请参考 nanosleep(2) 的说明文件), 他让你能够 休息或延迟一个短的时间 (数微秒或更多).<br/><br/>　　如果延迟的时间 <= 2 ms, 若(且唯若)你执行中的行程 (process) 设定了软体的即时 排程 (就是使用函式 tt/sched_setscheduler()/), 呼叫函式 nanosleep() 时不是使用一个忙碌回圈来延迟时间; 就是会像函式 usleep() 一样让出 CPU 的使用权休息去了.<br/><br/>　　这个忙碌回圈使用函式 udelay() (一个驱动程式常会用到的核心内部的函式) 来达成, 并且使用 BogoMips 值 (BogoMips 可以准确量测这类忙碌回圈的速度) 来计算回圈延迟的时间长度. 其如何动作的细节请参考 /usr/include/asm/delay.h).<br/><br/>pthread_delay_np()<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pthread_delay_np() 类似于 sleep(),&nbsp;&nbsp;细节请参考 pthread_delay_np(3)的说明文件. 不过需要注意的是在 Linux 下的C并没有此函数, 大概是由于在Linux下, 所有的线程本质上都是一个进程, 有clone系统调用派生, 在内核看来, 他和一个普通进程没有什么差别, 区别就在于他和派生他的进程共享同一块内存（或者是说mm_struct）吧, 某个进程的sleep不大可能阻塞其它进程.<br/><br/><br/>sleep：单位为秒，1秒<br/><br/>usleep：单位为微秒，1/1000 秒<br/><br/>select：单位为微秒，1/1000 000 秒<br/><br/>nanosleep：单位为毫微秒，也就是纳秒，1/1000 000 000 秒<br/>Tags - <a href="http://www.zhanghaijun.com/tags/sleep/" rel="tag">sleep</a> , <a href="http://www.zhanghaijun.com/tags/usleep/" rel="tag">usleep</a> , <a href="http://www.zhanghaijun.com/tags/select/" rel="tag">select</a> , <a href="http://www.zhanghaijun.com/tags/nanosleep/" rel="tag">nanosleep</a>
]]>
</description>
</item><item>
<link>http://www.zhanghaijun.com/post/945/</link>
<title><![CDATA[-bash: nslookup: command not found]]></title> 
<author>碟舞飞扬 &lt;webmaster@zhanghaijun.com&gt;</author>
<category><![CDATA[Linux技术]]></category>
<pubDate>Sat, 22 Feb 2014 18:01:49 +0000</pubDate> 
<guid>http://www.zhanghaijun.com/post/945/</guid> 
<description>
<![CDATA[ 
	nslookup是用来查询本机域名解析情况的常用工具之一，不过有一些linux系统默认并没有安装，我们在执行nslookup的时候就会报 -bash: nslookup: command not found 错误，解决方法很简单，我们把nslookup安装了就可以了，<br/>一、Fedora / Centos:<br/> yum install bind-utils<br/><br/>二、Ubuntu：<br/>sudo apt-get install dnsutils<br/><br/>三、Debian:<br/>apt-get update<br/>apt-get install dnsutils<br/><br/>关于Nslookup命令的用法请参见：<a href="http://www.zhanghaijun.com/post/299/" target="_blank">http://www.zhanghaijun.com/post/299/</a><br/>Tags - <a href="http://www.zhanghaijun.com/tags/nslookup/" rel="tag">nslookup</a> , <a href="http://www.zhanghaijun.com/tags/dig/" rel="tag">dig</a> , <a href="http://www.zhanghaijun.com/tags/linux/" rel="tag">linux</a>
]]>
</description>
</item><item>
<link>http://www.zhanghaijun.com/post/944/</link>
<title><![CDATA[Linux Shelll 带小数的数字比大小]]></title> 
<author>碟舞飞扬 &lt;webmaster@zhanghaijun.com&gt;</author>
<category><![CDATA[Linux技术]]></category>
<pubDate>Tue, 14 Jan 2014 09:10:11 +0000</pubDate> 
<guid>http://www.zhanghaijun.com/post/944/</guid> 
<description>
<![CDATA[ 
	一、BC<br/>[root@838271 ~]# echo "0.14 > 0.15" &#124; bc<br/>0<br/>[root@838271 ~]# echo "0.14 < 0.15" &#124; bc<br/>1<br/>[root@838271 ~]# echo "0.14 = 0.15" &#124; bc<br/>(standard_in) 1: syntax error<br/>[root@838271 ~]# echo "0.14 == 0.15" &#124; bc<br/>0<br/>[root@838271 ~]# echo "0.14 == 0.14" &#124; bc<br/>1<br/>[root@838271 ~]# echo "0.14 >= 0.14" &#124; bc<br/>1<br/>[root@838271 ~]# echo "0.14 > 0.14" &#124; bc<br/>0<br/><br/>然後參考：<br/>a=1.6<br/>b=6.1<br/>c=`echo "$a > $b" &#124; bc`<br/>然後，如果 $c 是 1 ，那就成立，否則不成立。<br/><br/>二、expr<br/>[root@838271 ~]# expr 0.14 &#92;> 0.15<br/>0<br/>[root@838271 ~]# expr 0.14 &#92;< 0.15<br/>1<br/>[root@838271 ~]# expr 0.14 &#92;= 0.15<br/>0<br/>[root@838271 ~]# expr 0.14 &#92;== 0.15<br/>0<br/>[root@838271 ~]# expr 0.14 &#92;== 0.14<br/>1<br/>[root@838271 ~]# expr 0.14 &#92;>= 0.14<br/>1<br/>[root@838271 ~]# expr 0.14 &#92;> 0.14<br/>0<br/><br/>三、AWK<br/>awk -v a=7.9 -v b=11.5 'BEGIN&#123;print(a>b)?"a":"b"&#125;'<br/>Tags - <a href="http://www.zhanghaijun.com/tags/%25E5%25B0%258F%25E6%2595%25B0%25E6%25AF%2594%25E5%25A4%25A7%25E5%25B0%258F/" rel="tag">小数比大小</a> , <a href="http://www.zhanghaijun.com/tags/awk/" rel="tag">awk</a> , <a href="http://www.zhanghaijun.com/tags/bc/" rel="tag">bc</a> , <a href="http://www.zhanghaijun.com/tags/expr/" rel="tag">expr</a>
]]>
</description>
</item>
</channel>
</rss>