<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>EOF &#8211; bhzhuOS爱好者(原StartOS爱好者)</title>
	<atom:link href="https://www.bhzhu203.com/tag/eof/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.bhzhu203.com</link>
	<description>QQ群号125732839</description>
	<lastBuildDate>Thu, 28 Apr 2016 07:50:20 +0000</lastBuildDate>
	<language>zh-Hans</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.5.7</generator>
	<item>
		<title>Ubuntu下将现有的文件打包成deb包</title>
		<link>https://www.bhzhu203.com/2016/04/28/ubuntu%e4%b8%8b%e5%b0%86%e7%8e%b0%e6%9c%89%e7%9a%84%e6%96%87%e4%bb%b6%e6%89%93%e5%8c%85%e6%88%90deb%e5%8c%85/</link>
		
		<dc:creator><![CDATA[bhzhu203]]></dc:creator>
		<pubDate>Thu, 28 Apr 2016 07:50:20 +0000</pubDate>
				<category><![CDATA[linux知识]]></category>
		<category><![CDATA[Debian Linux]]></category>
		<category><![CDATA[EOF]]></category>
		<category><![CDATA[Maintainer Linuxidc]]></category>
		<guid isPermaLink="false">http://www.bhzhu203.com/?p=196</guid>

					<description><![CDATA[deb是Debian Linux的软件包格式。一般来说是需要通过编译源码然后制作 [&#8230;]]]></description>
										<content:encoded><![CDATA[<div class="panel panel-default">
<div class="panel-body content">deb是Debian Linux的软件包格式。一般来说是需要通过编译源码然后制作deb包，今天由于工作需要，想将一些现有的文件打包成deb包，苦苦寻找和研究如何处理， 终于在下午3点时分成功制作出一个包。并自己亲手实践以保证每个步骤和最终结果的正确性。详情如下：</p>
<p>我是在Ubuntu 7.10上操作的，欲将/usr/src/soft目录下的文件打包，解包时这些文件也释放到/usr/src/soft目录下。</p>
<p>首先建立一个工作目录，比如在用户lionel目录下建立work目录：</p>
<p>#cd /home/lionel<br />
#mkdir work<br />
#cd work</p>
<p>因为安装软件包的时候默认是将文件释放到根目录下，所以可以设定好它的路径，同时我们还需建立一个DEBIAN目录：</p>
<p>#mkdir -p usr/src<br />
#cp -a /usr/src/soft usr/src<br />
#mkdir DEBIAN</p>
<p>比较关键的一步，用如下的方法在DEBIAN目录下创建一个control文件，并加入以下内容，内容可自定义：</p>
<p>#cat &gt;DEBIAN/control&lt; Package: soft<br />
Version: 1.0.1<br />
Section: utils<br />
Priority: optional<br />
Architecture: i386<br />
Depends:<br />
Installed-Size: 512<br />
Maintainer: Linuxidc@126l.com<br />
Description: soft package<br />
EOF</p>
<p>然后就可以使用dpkg命令构建deb包了：</p>
<p>#dpkg -b . /home/lionel/soft_1.0.1_i386.deb</p>
<p>生成的包在/home/lionel目录下。</p>
<p>从整个过程来看，control文件是比较重要的，因此需要保证它的正确性。至于这些元数据的具体含义，以及为什么需要这些数据，稍后会再认真看一下。并且请注意每条命令前都是“#”，需要使用root权限执行这些操作。<br />
linux</p>
<p class="tag">
</div>
<div class="panel-footer">
<p>转自：http://www.linuxidc.com/Linux/2008-04/12297.htm</p>
</div>
</div>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>diff和patch使用指南</title>
		<link>https://www.bhzhu203.com/2016/04/28/diff%e5%92%8cpatch%e4%bd%bf%e7%94%a8%e6%8c%87%e5%8d%97/</link>
		
		<dc:creator><![CDATA[bhzhu203]]></dc:creator>
		<pubDate>Thu, 28 Apr 2016 06:23:37 +0000</pubDate>
				<category><![CDATA[linux知识]]></category>
		<category><![CDATA[EOF]]></category>
		<category><![CDATA[RE]]></category>
		<guid isPermaLink="false">http://www.bhzhu203.com/?p=118</guid>

					<description><![CDATA[diff和patch是一对工具，在数学上来说，diff是对两个集合的差运算，pa [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>diff和patch是一对工具，在数学上来说，diff是对两个集合的差运算，patch是对两个集合的和运算。<br />
diff比较两个文件或文件集合的差异，并记录下来，生成一个diff文件，这也是我们常说的patch文件，即补丁文件。<br />
patch能将diff文件运用于 原来的两个集合之一，从而得到另一个集合。举个例子来说文件A和文件B经过diff之后生成了补丁文件C那么着个过程相当于 A -B = C 那么patch的过程就是B+C = A 或A-C =B。<br />
因此我们只要能得到A B C三个文件中的任何两个，就能用diff和patch这对工具生成另外一个文件。</p>
<p>这就是diff和patch的妙处。下面分别介绍一下两个工具的用法(待续)</p>
<p>1. diff的用法</p>
<p>diff后面可以接两个文件名或两个目录名。 如果是一个目录名加一个文件名，那么只作用在那么个目录下的同名文件。</p>
<p>如果是两个目录的话，作用于该目录下的所有文件，不递归。如果我们希望递归执行，需要使用-r参数。</p>
<p>命令diff A B &gt; C 一般A是原始文件，B是修改后的文件，C称为A的补丁文件。<br />
不加任何参数生成的diff文件格式是一种简单的格式，这种格式只标出了不一样的行数和内容。我们需要一种更详细的格式，可以标识出不同之处的上下文环境，这样更有利于提高patch命令的识别能力。这个时候可以用-c开关。<br />
2. patch的用法</p>
<p>patch用于根据原文件和补丁文件生成目标文件。还是拿上个例子来说</p>
<p>patch A C 就能得到B 这一步叫做对A打上了B的名字为C的补丁。</p>
<p>之一步之后，你的文件A就变成了文件B。如果你打完补丁之后想恢复到A怎么办呢？</p>
<p>patch -R B C 就可以重新还原到A了。</p>
<p>所以不用担心会失去A的问题。</p>
<p>其 实patch在具体使用的时候是不用指定原文件的，因为补丁文件中都已经记载了原文件的路径和名称。patch足够聪明可以认出来。但是有时候会 有点小问题。比如一般对两个目录diff的时候可能已经包含了原目录的名字，但是我们打补丁的时候会进入到目录中再使用patch着个时候就需要你告诉 patch命令怎么处理补丁文件中的路径。可以利用-pn开关，告诉patch命令忽略的路径分隔符的个数。举例如下：</p>
<p>A文件在 DIR_A下，修改后的B文件在DIR_B下，一般DIR_A和DIR_B在同一级目录。我们为了对整个目录下的所有文件一次性diff我们一般会到DIR_A和DIR_B的父目录下执行以下命令</p>
<p>diff -rc DIR_A DIR_B &gt; C</p>
<p>着个时候补丁文件C中会记录了原始文件的路径为 DIR_A/A</p>
<p>现在另一个用户得到了A文件和C文件，其中A文件所在的目录也是DIR_A。 一般，他会比较喜欢在DIR_A目录下面进行patch操作，它会执行</p>
<p>patch &lt; C</p>
<p>但是这个时候patch分析C文件中的记录，认为原始文件是./DIR_A/A，但实际上是./A，此时patch会找不到原始文件。为了避免这种情况我们可以使用-p1参数如下</p>
<p>patch -p1 &lt; C</p>
<p>此时，patch会忽略掉第1个”/”之前的内容，认为原始文件是 ./A，这样就正确了。</p>
<p>最后有以下几点注意：</p>
<ol>
<li>一次打多个patch的话，一般这些patch有先后顺序，得按次序打才行。</li>
<li>在patch之前不要对原文件进行任何修改</li>
<li>如果patch中记录的原始文件和你得到的原始文件版本不匹配(很容易出现)，那么你可以尝试使用patch 如果幸运的话，可以成功。大部分情况下，会有不匹配的情况，此时patch会生成rej文件，记录失败的地方，你可以手工修改。</li>
</ol>
<p>一、为单个文件进行补丁操作</p>
<p>1、建立测试文件test0、test1</p>
<p>[armlinux@lqm patch]$ cat  &gt;&gt;test0&lt;&lt;EOF</p>
<p>&gt; 111111</p>
<p>&gt; 111111</p>
<p>&gt; 111111</p>
<p>&gt; EOF</p>
<p>[armlinux@lqm patch]$ more test0</p>
<p>111111</p>
<p>111111</p>
<p>111111</p>
<p>[armlinux@lqm patch]$ cat &gt;&gt;test1&lt;&lt;EOF</p>
<p>&gt; 222222</p>
<p>&gt; 111111</p>
<p>&gt; 222222</p>
<p>&gt; 111111</p>
<p>&gt; EOF</p>
<p>[armlinux@lqm patch]$ more test1</p>
<p>222222</p>
<p>111111</p>
<p>222222</p>
<p>111111</p>
<p>2、使用diff创建补丁test1.patch</p>
<p>[armlinux@lqm patch]$ diff -uN test0 test1 &gt; test1.patch</p>
<p>【注：因为单个文件，所以不需要-r选项。选项顺序没有关系，即可以是-uN，也可以是-Nu。】</p>
<p>[armlinux@lqm patch]$ ls</p>
<p>test0  test1  test1.patch</p>
<p>[armlinux@lqm patch]$ more test1.patch</p>
<p>************************************************************</p>
<p>patch文件的结构</p>
<p>补丁头</p>
<p>补丁头是分别由&#8212;/+++开头的两行，用来表示要打补丁的文件。&#8212;开头表示旧文件，+++开头表示新文件。</p>
<p>一个补丁文件中的多个补丁</p>
<p>一个补丁文件中可能包含以&#8212;/+++开头的很多节，每一节用来打一个补丁。所以在一个补丁文件中可以包含好多个补丁。</p>
<p>块</p>
<p>块是补丁中要修改的地方。它通常由一部分不用修改的东西开始和结束。他们只是用来表示要修改的位置。他们通常以@@开始，结束于另一个块的开始或者一个新的补丁头。</p>
<p>块的缩进</p>
<p>块会缩进一列，而这一列是用来表示这一行是要增加还是要删除的。</p>
<p>块的第一列</p>
<p>+号表示这一行是要加上的。</p>
<p>-号表示这一行是要删除的。</p>
<p>没有加号也没有减号表示这里只是引用的而不需要修改。</p>
<p>************************************************************</p>
<p>***diff命令会在补丁文件中记录这两个文件的首次创建时间，如下***</p>
<p>&#8212; test0       2006-08-18 09:12:01.000000000 +0800</p>
<p>+++ test1       2006-08-18 09:13:09.000000000 +0800</p>
<p>@@ -13 +14 @@</p>
<p>+222222</p>
<p>111111</p>
<p>-111111</p>
<p>+222222</p>
<p>111111</p>
<p>[armlinux@lqm patch]$ patch -p0 &lt; test1.patch</p>
<p>patching file test0</p>
<p>[armlinux@lqm patch]$ ls</p>
<p>test0  test1  test1.patch</p>
<p>[armlinux@lqm patch]$ cat test0</p>
<p>222222</p>
<p>111111</p>
<p>222222</p>
<p>111111</p>
<p>3、可以去除补丁，恢复旧版本</p>
<p>[armlinux@lqm patch]$ patch -RE -p0 &lt; test1.patch</p>
<p>patching file test0</p>
<p>[armlinux@lqm patch]$ ls</p>
<p>test0  test1  test1.patch</p>
<p>[armlinux@lqm patch]$ cat test0</p>
<p>111111</p>
<p>111111</p>
<p>111111</p>
<p>二、为多个文件进行补丁操作</p>
<p>1、创建测试文件夹</p>
<p>[armlinux@lqm patch]$ mkdir prj0</p>
<p>[armlinux@lqm patch]$ cp test0 prj0</p>
<p>[armlinux@lqm patch]$ ls</p>
<p>prj0  test0  test1  test1.patch</p>
<p>[armlinux@lqm patch]$ cd prj0/</p>
<p>[armlinux@lqm prj0]$ ls</p>
<p>test0</p>
<p>[armlinux@lqm prj0]$ cat &gt;&gt;prj0name&lt;&lt;EOF</p>
<p>&gt; &#8212;&#8212;&#8211;</p>
<p>&gt; prj0/prj0name</p>
<p>&gt; &#8212;&#8212;&#8211;</p>
<p>&gt; EOF</p>
<p>[armlinux@lqm prj0]$ ls</p>
<p>prj0name  test0</p>
<p>[armlinux@lqm prj0]$ cat prj0name</p>
<p>&#8212;&#8212;&#8211;</p>
<p>prj0/prj0name</p>
<p>&#8212;&#8212;&#8211;</p>
<p>[armlinux@lqm prj0]$ cd ..</p>
<p>[armlinux@lqm patch]$ mkdir prj1</p>
<p>[armlinux@lqm patch]$ cp test1 prj1</p>
<p>[armlinux@lqm patch]$ cd prj1</p>
<p>[armlinux@lqm prj1]$ cat &gt;&gt;prj1name&lt;&lt;EOF</p>
<p>&gt; &#8212;&#8212;&#8212;</p>
<p>&gt; prj1/prj1name</p>
<p>&gt; &#8212;&#8212;&#8212;</p>
<p>&gt; EOF</p>
<p>[armlinux@lqm prj1]$ cat prj1name</p>
<p>&#8212;&#8212;&#8212;</p>
<p>prj1/prj1name</p>
<p>&#8212;&#8212;&#8212;</p>
<p>[armlinux@lqm prj1]$ cd ..</p>
<p>2、创建补丁</p>
<p>[armlinux@lqm patch]$ diff -uNr prj0 prj1 &gt; prj1.patch</p>
<p>[armlinux@lqm patch]$ more prj1.patch</p>
<p>diff -uNr prj0/prj0name prj1/prj0name</p>
<p>&#8212; prj0/prj0name       2006-08-18 09:25:11.000000000 +0800</p>
<p>+++ prj1/prj0name       1970-01-01 08:00:00.000000000 +0800</p>
<p>@@ -13 +00 @@</p>
<p>&#8212;&#8212;&#8212;</p>
<p>-prj0/prj0name</p>
<p>&#8212;&#8212;&#8212;</p>
<p>diff -uNr prj0/prj1name prj1/prj1name</p>
<p>&#8212; prj0/prj1name       1970-01-01 08:00:00.000000000 +0800</p>
<p>+++ prj1/prj1name       2006-08-18 09:26:36.000000000 +0800</p>
<p>@@ -00 +13 @@</p>
<p>+&#8212;&#8212;&#8212;</p>
<p>+prj1/prj1name</p>
<p>+&#8212;&#8212;&#8212;</p>
<p>diff -uNr prj0/test0 prj1/test0</p>
<p>&#8212; prj0/test0  2006-08-18 09:23:53.000000000 +0800</p>
<p>+++ prj1/test0  1970-01-01 08:00:00.000000000 +0800</p>
<p>@@ -13 +00 @@</p>
<p>-111111</p>
<p>-111111</p>
<p>-111111</p>
<p>diff -uNr prj0/test1 prj1/test1</p>
<p>&#8212; prj0/test1  1970-01-01 08:00:00.000000000 +0800</p>
<p>+++ prj1/test1  2006-08-18 09:26:00.000000000 +0800</p>
<p>@@ -00 +14 @@</p>
<p>+222222</p>
<p>+111111</p>
<p>+222222</p>
<p>+111111</p>
<p>[armlinux@lqm patch]$ ls</p>
<p>prj0  prj1  prj1.patch  test0  test1  test1.patch</p>
<p>[armlinux@lqm patch]$ cp prj1.patch ./prj0</p>
<p>[armlinux@lqm patch]$ cd prj0</p>
<p>[armlinux@lqm prj0]$ patch -p1 &lt; prj1.patch</p>
<p>patching file prj0name</p>
<p>patching file prj1name</p>
<p>patching file test0</p>
<p>patching file test1</p>
<p>[armlinux@lqm prj0]$ ls</p>
<p>prj1name  prj1.patch  test1</p>
<p>[armlinux@lqm prj0]$ patch -R -p1 &lt; prj1.patch</p>
<p>patching file prj0name</p>
<p>patching file prj1name</p>
<p>patching file test0</p>
<p>patching file test1</p>
<p>[armlinux@lqm prj0]$ ls</p>
<p>prj0name  prj1.patch  test0</p>
<p>－－－－－－－－－－－－－－－－－－－</p>
<p>总结一下：</p>
<p>单个文件</p>
<p>diff –uN  from-file  to-file  &gt;to-file.patch</p>
<p>patch –p0 &lt; to-file.patch</p>
<p>patch –RE –p0 &lt; to-file.patch</p>
<p>多个文件</p>
<p>diff –uNr  from-docu  to-docu  &gt;to-docu.patch</p>
<p>patch –p1 &lt; to-docu.patch</p>
<p>patch –R –p1 &lt;to-docu.patch</p>
<p>转自：<a href="http://www.cnblogs.com/cute/archive/2011/04/29/2033011.html" target="_blank">http://www.cnblogs.com/cute/archive/2011/04/29/2033011.html</a></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>使用密码锁定 grub2</title>
		<link>https://www.bhzhu203.com/2016/04/25/%e4%bd%bf%e7%94%a8%e5%af%86%e7%a0%81%e9%94%81%e5%ae%9a-grub2/</link>
					<comments>https://www.bhzhu203.com/2016/04/25/%e4%bd%bf%e7%94%a8%e5%af%86%e7%a0%81%e9%94%81%e5%ae%9a-grub2/#comments</comments>
		
		<dc:creator><![CDATA[bhzhu203]]></dc:creator>
		<pubDate>Mon, 25 Apr 2016 09:55:33 +0000</pubDate>
				<category><![CDATA[linux知识]]></category>
		<category><![CDATA[EOF]]></category>
		<guid isPermaLink="false">http://www.bhzhu203.com/?p=76</guid>

					<description><![CDATA[版本1.97-beta后，GRUB2开始支持设定开机密码了。 可以直接修改/bo [&#8230;]]]></description>
										<content:encoded><![CDATA[<div class="panel-body content">版本1.97-beta后，GRUB2开始支持设定开机密码了。</p>
<p>可以直接修改/boot/grub/grub.cfg。当然，最好更改/etc/grub.d/00_header，在末尾添加：</p>
<p>cat &lt;&lt; EOF<br />
set superusers=&#8221;user1&#8243;<br />
password user1 PasswordOfUser1<br />
EOF</p>
<p>这样的话，grub升级后用grub-mkconfig（update-grub）生成的配置文件中就会自动包含开机密码，而不必每次都修改grub.cfg文件了。<br />
版本1.98后，GRUB2可以设定加密的密码。先用grub-mkpasswd-pbkdf2生成加密的密码（一种基于pbkdfv2算法的加密工具）。然后，向/etc/grub.d/00_head末尾追加：</p>
<p>cat &lt;&lt; EOF<br />
set superusers=&#8221;user1&#8243;<br />
password_pbkdf2 user1 EncryptedPasswordOfUser1<br />
EOF</p>
<p>我觉得，与v1相比，GRUBv2的可配置性是大大加强了，而且模板脚本用bash写成，更方便程序员DIY。不过，原来那种简洁、精悍的感觉似乎不再了。</p>
<p>转自：<a href="http://www.douban.com/note/64464787/" target="_blank">http://www.douban.com/note/64464787/</a></p>
</div>
<div class="panel-footer"></div>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bhzhu203.com/2016/04/25/%e4%bd%bf%e7%94%a8%e5%af%86%e7%a0%81%e9%94%81%e5%ae%9a-grub2/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
	</channel>
</rss>
