filearchiv.html

来自「BASH Shell 编程 经典教程 《高级SHELL脚本编程》中文版」· HTML 代码 · 共 3,680 行 · 第 1/5 页

HTML
3,680
字号
><TABLECLASS="NOTE"WIDTH="90%"BORDER="0"><TR><TDWIDTH="25"ALIGN="CENTER"VALIGN="TOP"><IMGSRC="./images/note.gif"HSPACE="5"ALT="Note"></TD><TDALIGN="LEFT"VALIGN="TOP"><P>	    到目前为止, 已经有128-bit的<BCLASS="COMMAND">md5sum</B>被破解的报告了, 		所以现在更安全的160-bit的<BCLASS="COMMAND">sha1sum</B>非常受欢迎, 		这个命令已经被加入到checksum工具包中了.          </P><P>一些安全顾问认为即使是<BCLASS="COMMAND">sha1sum</B>也是一种折衷的做法. 			  所以, 下一个工具是什么呢?	      -- 512-bit的checksum工具? </P><TABLEBORDER="1"BGCOLOR="#E0E0E0"WIDTH="90%"><TR><TD><FONTCOLOR="#000000"><PRECLASS="SCREEN"><SAMPCLASS="PROMPT">bash$ </SAMP><KBDCLASS="USERINPUT">md5sum testfile</KBD><SAMPCLASS="COMPUTEROUTPUT">e181e2c8720c60522c4c4c981108e367  testfile</SAMP><SAMPCLASS="PROMPT">bash$ </SAMP><KBDCLASS="USERINPUT">sha1sum testfile</KBD><SAMPCLASS="COMPUTEROUTPUT">5d7425a9c08a66c3177f1e31286fa40986ffc996  testfile</SAMP>	      </PRE></FONT></TD></TR></TABLE></TD></TR></TABLE></DIV></DD><DT><ANAME="SHREDREF"></A><BCLASS="COMMAND">shred</B></DT><DD><P>用随机字符填充文件, 使得文件无法恢复, 			  这样就可以保证文件安全的被删除. 			  这个命令的效果与<AHREF="extmisc.html#BLOTOUT">例子 12-55</A>一样, 			但是使用这个命令是一种更优雅更彻底的方法. </P><P>这是GNU的<EM>文件工具</EM>之一. </P><DIVCLASS="CAUTION"><P></P><TABLECLASS="CAUTION"WIDTH="90%"BORDER="0"><TR><TDWIDTH="25"ALIGN="CENTER"VALIGN="TOP"><IMGSRC="./images/caution.gif"HSPACE="5"ALT="Caution"></TD><TDALIGN="LEFT"VALIGN="TOP"><P>即使使用了<BCLASS="COMMAND">shred</B>命令, 				高级的辨别技术也还是能够恢复文件的内容. </P></TD></TR></TABLE></DIV></DD></DL></DIV><P></P><DIVCLASS="VARIABLELIST"><P><B><ANAME="FAENCENCR1"></A>编码和解码</B></P><DL><DT><BCLASS="COMMAND">uuencode</B></DT><DD><P>这个工具用来把二进制文件编码成ASCII字符串, 			  这个工具适用于编码e-mail消息体, 或者新闻组消息. 	      </P></DD><DT><BCLASS="COMMAND">uudecode</B></DT><DD><P>这个工具用来把uuencode后的ASCII字符串恢复为二进制文件. 	      </P><DIVCLASS="EXAMPLE"><HR><ANAME="EX52"></A><P><B>例子 12-35. Uudecode编码后的文件</B></P><TABLEBORDER="0"BGCOLOR="#E0E0E0"WIDTH="90%"><TR><TD><FONTCOLOR="#000000"><PRECLASS="PROGRAMLISTING">  1&nbsp;#!/bin/bash  2&nbsp;# 在当前目录下用Uudecode解码所有用uuencode编码的文件.   3&nbsp;  4&nbsp;lines=35        # 允许读头部的35行(范围很宽).   5&nbsp;  6&nbsp;for File in *   # 测试所有$PWD下的文件.   7&nbsp;do  8&nbsp;  search1=`head -$lines $File | grep begin | wc -w`  9&nbsp;  search2=`tail -$lines $File | grep end | wc -w` 10&nbsp;  #  用Uuencode编码过的文件在文件开始的地方都有个"begin",  11&nbsp;  #+ 在文件结尾的地方都有"end". 12&nbsp;  if [ "$search1" -gt 0 ] 13&nbsp;  then 14&nbsp;    if [ "$search2" -gt 0 ] 15&nbsp;    then 16&nbsp;      echo "uudecoding - $File -" 17&nbsp;      uudecode $File 18&nbsp;    fi   19&nbsp;  fi 20&nbsp;done   21&nbsp; 22&nbsp;#  小心不要让这个脚本运行自己,  23&nbsp;#+ 因为它也会把自身也认为是一个经过uuencode编码过的文件,  24&nbsp;#+ 这都是因为这个脚本自身也包含"begin"和"end".  25&nbsp; 26&nbsp;#  练习: 27&nbsp;#  ----- 28&nbsp;#  修改这个脚本, 让它可以检查一个新闻组的每个文件,  29&nbsp;#+ 并且如果下一个没找到的话就跳过.  30&nbsp; 31&nbsp;exit 0</PRE></FONT></TD></TR></TABLE><HR></DIV><DIVCLASS="TIP"><P></P><TABLECLASS="TIP"WIDTH="90%"BORDER="0"><TR><TDWIDTH="25"ALIGN="CENTER"VALIGN="TOP"><IMGSRC="./images/tip.gif"HSPACE="5"ALT="Tip"></TD><TDALIGN="LEFT"VALIGN="TOP"><P><AHREF="textproc.html#FOLDREF">fold -s</A>命令在处理从Usenet新闻组下载下来的长的uudecode文本消息的时候可能会有用(可能在管道中).	    </P></TD></TR></TABLE></DIV></DD><DT><BCLASS="COMMAND">mimencode</B>, <BCLASS="COMMAND">mmencode</B></DT><DD><P><BCLASS="COMMAND">mimencode</B>和<BCLASS="COMMAND">mmencode</B>命令用来处理多媒体编码的email附件. 			虽然<EM>mail用户代理</EM>(比如<BCLASS="COMMAND">pine</B>或<BCLASS="COMMAND">kmail</B>)通常情况下都会自动处理, 			但是这些特定的工具允许从命令行或shell脚本中来手动操作这些附件. 	      </P></DD><DT><BCLASS="COMMAND">crypt</B></DT><DD><P>这个工具曾经是标准的UNIX文件加密工具.			<ANAME="AEN9617"HREF="#FTN.AEN9617"><SPANCLASS="footnote">[3]</SPAN></A>		政府由于政策上的动机规定禁止加密软件的输出, 		这样导致了<BCLASS="COMMAND">crypt</B>命令从UNIX世界消失, 		并且在大多数的Linux发行版中也没有这个命令. 		幸运的是, 程序员们想出了一些替代它的方法, 		在这些方法中有作者自己的<AHREF="ftp://metalab.unc.edu/pub/Linux/utils/file/cruft-0.2.tar.gz"TARGET="_top">cruft</A>	      (请参考<AHREF="contributed-scripts.html#ENCRYPTEDPW">例子 A-4</A>). </P></DD></DL></DIV><P></P><DIVCLASS="VARIABLELIST"><P><B><ANAME="FAMISC1"></A>Miscellaneous</B></P><DL><DT><ANAME="MKTEMPREF"></A><BCLASS="COMMAND">mktemp</B></DT><DD><P>使用一个<SPANCLASS="QUOTE">"唯一"</SPAN>的文件名来创建一个<ICLASS="FIRSTTERM">临时文件</I>. 	       <ANAME="AEN9640"HREF="#FTN.AEN9640"><SPANCLASS="footnote">[4]</SPAN></A>		   如果不带参数的在命令行下调用这个命令时, 		   将会在<TTCLASS="FILENAME">/tmp</TT>目录下产生一个零长度的文件. </P><P>	      <TABLEBORDER="1"BGCOLOR="#E0E0E0"WIDTH="90%"><TR><TD><FONTCOLOR="#000000"><PRECLASS="SCREEN"><SAMPCLASS="PROMPT">bash$ </SAMP><KBDCLASS="USERINPUT">mktemp</KBD><SAMPCLASS="COMPUTEROUTPUT">/tmp/tmp.zzsvql3154</SAMP>	      </PRE></FONT></TD></TR></TABLE>	    </P><P><TABLEBORDER="0"BGCOLOR="#E0E0E0"WIDTH="90%"><TR><TD><FONTCOLOR="#000000"><PRECLASS="PROGRAMLISTING">  1&nbsp;PREFIX=filename  2&nbsp;tempfile=`mktemp $PREFIX.XXXXXX`  3&nbsp;#                        ^^^^^^ 在这个临时的文件名中  4&nbsp;#+                              至少需要6个占位符.   5&nbsp;#   如果没有指定临时文件的文件名,   6&nbsp;#+  那么默认就是"tmp.XXXXXXXXXX".   7&nbsp;  8&nbsp;echo "tempfile name = $tempfile"  9&nbsp;# tempfile name = filename.QA2ZpY 10&nbsp;#                 或者一些其他的相似的名字... 11&nbsp; 12&nbsp;#  使用600为文件权限 13&nbsp;#+ 来在当前工作目录下创建一个这样的文件. 14&nbsp;#  这样就不需要"umask 177"了. 15&nbsp;#  但不管怎么说, 这也是一个好的编程风格. </PRE></FONT></TD></TR></TABLE></P></DD><DT><BCLASS="COMMAND">make</B></DT><DD><P>build(建立)和compile(编译)二进制包的工具.  			当源文件被增加或修改时就会触发一些操作, 			这个工具用来控制这些操作. </P><P><ANAME="MAKEFILEREF"></A></P><P><BCLASS="COMMAND">make</B>命令会检查<TTCLASS="FILENAME">Makefile</TT>, makefile是文件的依赖和操作列表. </P></DD><DT><BCLASS="COMMAND">install</B></DT><DD><P>特殊目的的文件拷贝命令, 			  与<BCLASS="COMMAND">cp</B>命令相似, 			  但是具有设置拷贝文件的权限和属性的能力. 			  这个命令看起来是为了安装软件包所定制的, 			  而且就其本身而言, 这个命令经常出现在<TTCLASS="FILENAME">Makefiles</TT>中(在<TTCLASS="REPLACEABLE"><I>make install :</I></TT> 区域中). 			  在安装脚本中也会看到这个命令的使用. </P></DD><DT><BCLASS="COMMAND">dos2unix</B></DT><DD><P>这个工具是由Benjamin Lin及其同事共同编写的, 	      目的是将DOS格式的文本文件(以CR-LF为行结束符)转换为UNIX格式(以LF为行结束符), 	      反过来也一样. </P></DD><DT><BCLASS="COMMAND">ptx</B></DT><DD><P><BCLASS="COMMAND">ptx [targetfile]</B>命令将输出目标文件的序列改变索引(交叉引用列表). 	      如果必要的话, 这个命令可以在管道中进行更深层次的过滤和格式化. </P></DD><DT><BCLASS="COMMAND">more</B>, <BCLASS="COMMAND">less</B></DT><DD><P>分页显示文本文件或<TTCLASS="FILENAME">stdout</TT>, 			  一次一屏. 可以用来过滤<TTCLASS="FILENAME">stdout</TT>的输出 . . . 或过滤一个脚本的输出. </P><P>				<BCLASS="COMMAND">more</B>命令的一个有趣的应用就是测试一个命令序列的执行, 				这样做的目的是避免可能发生的糟糕的结果.                 <TABLEBORDER="0"BGCOLOR="#E0E0E0"WIDTH="90%"><TR><TD><FONTCOLOR="#000000"><PRECLASS="PROGRAMLISTING">  1&nbsp;ls /home/bozo | awk '{print "rm -rf " $1}' | more  2&nbsp;#                                            ^^^^  3&nbsp;		   4&nbsp;# 检查下边(灾难性的)命令行的效果:   5&nbsp;#      ls /home/bozo | awk '{print "rm -rf " $1}' | sh  6&nbsp;#      推入shell中执行 . . .       ^^</PRE></FONT></TD></TR></TABLE>            </P></DD></DL></DIV></DIV><H3CLASS="FOOTNOTES">注意事项</H3><TABLEBORDER="0"CLASS="FOOTNOTES"WIDTH="100%"><TR><TDALIGN="LEFT"VALIGN="TOP"WIDTH="5%"><ANAME="FTN.AEN8734"HREF="filearchiv.html#AEN8734"><SPANCLASS="footnote">[1]</SPAN></A></TD><TDALIGN="LEFT"VALIGN="TOP"WIDTH="95%"><P>在这里所讨论的<ICLASS="FIRSTTERM">归档文件</I>, 	        只不过是存储在一个单一位置上的一些相关文件的集合. 	        </P></TD></TR><TR><TDALIGN="LEFT"VALIGN="TOP"WIDTH="5%"><ANAME="FTN.AEN8744"HREF="filearchiv.html#AEN8744"><SPANCLASS="footnote">[2]</SPAN></A></TD><TDALIGN="LEFT"VALIGN="TOP"WIDTH="95%"><P>		    <BCLASS="COMMAND">tar czvf archive_name.tar.gz *</B><EM>可以</EM>包含当前目录<EM>下</EM>的点文件. 		    这是一个未文档化的GNU<BCLASS="COMMAND">tar</B>的<SPANCLASS="QUOTE">"特性"</SPAN>. 		  </P></TD></TR><TR><TDALIGN="LEFT"VALIGN="TOP"WIDTH="5%"><ANAME="FTN.AEN9617"HREF="filearchiv.html#AEN9617"><SPANCLASS="footnote">[3]</SPAN></A></TD><TDALIGN="LEFT"VALIGN="TOP"WIDTH="95%"><P>这是一个对称的块密码, 					过去曾在单系统或本地网络中用来加密文件, 					用来对抗<SPANCLASS="QUOTE">"public key"</SPAN>密码类, 		<BCLASS="COMMAND">pgp</B>就是一个众所周知的例子. 		</P></TD></TR><TR><TDALIGN="LEFT"VALIGN="TOP"WIDTH="5%"><ANAME="FTN.AEN9640"HREF="filearchiv.html#AEN9640"><SPANCLASS="footnote">[4]</SPAN></A></TD><TDALIGN="LEFT"VALIGN="TOP"WIDTH="95%"><P>使用<CODECLASS="OPTION">-d</CODE>选项可以创建一个临时的<EM>目录</EM>. </P></TD></TR></TABLE><DIVCLASS="NAVFOOTER"><HRALIGN="LEFT"WIDTH="100%"><TABLESUMMARY="Footer navigation table"WIDTH="100%"BORDER="0"CELLPADDING="0"CELLSPACING="0"><TR><TDWIDTH="33%"ALIGN="left"VALIGN="top"><AHREF="textproc.html"ACCESSKEY="P">前一页</A></TD><TDWIDTH="34%"ALIGN="center"VALIGN="top"><AHREF="index.html"ACCESSKEY="H">首页</A></TD><TDWIDTH="33%"ALIGN="right"VALIGN="top"><AHREF="communications.html"ACCESSKEY="N">下一页</A></TD></TR><TR><TDWIDTH="33%"ALIGN="left"VALIGN="top">文本处理命令</TD><TDWIDTH="34%"ALIGN="center"VALIGN="top"><AHREF="external.html"ACCESSKEY="U">上一级</A></TD><TDWIDTH="33%"ALIGN="right"VALIGN="top">通讯命令</TD></TR></TABLE></DIV></BODY></HTML>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?