﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客-追啊追啊，不停的跑！-文章分类-Linux技术知识</title><link>http://www.cnitblog.com/lante7711/category/798.html</link><description>为了目标，为了理想，坚持下去，生命不息，奋斗不止，多希望能摘到天上的那一片云彩.....</description><language>zh-cn</language><lastBuildDate>Sun, 02 Oct 2011 22:40:33 GMT</lastBuildDate><pubDate>Sun, 02 Oct 2011 22:40:33 GMT</pubDate><ttl>60</ttl><item><title>Unix编程常见问题解答</title><link>http://www.cnitblog.com/lante7711/articles/2664.html</link><dc:creator>兰特</dc:creator><author>兰特</author><pubDate>Wed, 14 Sep 2005 13:52:00 GMT</pubDate><guid>http://www.cnitblog.com/lante7711/articles/2664.html</guid><wfw:comment>http://www.cnitblog.com/lante7711/comments/2664.html</wfw:comment><comments>http://www.cnitblog.com/lante7711/articles/2664.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/lante7711/comments/commentRss/2664.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/lante7711/services/trackbacks/2664.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1. Process Control 进程控制1.1 Creating new processes: fork() 创建新进程：fork函数1.1.1 What does fork() do? fork函数干什么？1.1.2 What's the difference between fork() and vfork()? fork函数 与 vfork函数的区别在哪里？1.1.3 Why use ...&nbsp;&nbsp;<a href='http://www.cnitblog.com/lante7711/articles/2664.html'>阅读全文</a><img src ="http://www.cnitblog.com/lante7711/aggbug/2664.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/lante7711/" target="_blank">兰特</a> 2005-09-14 21:52 <a href="http://www.cnitblog.com/lante7711/articles/2664.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux——shell</title><link>http://www.cnitblog.com/lante7711/articles/2643.html</link><dc:creator>兰特</dc:creator><author>兰特</author><pubDate>Tue, 13 Sep 2005 12:42:00 GMT</pubDate><guid>http://www.cnitblog.com/lante7711/articles/2643.html</guid><wfw:comment>http://www.cnitblog.com/lante7711/comments/2643.html</wfw:comment><comments>http://www.cnitblog.com/lante7711/articles/2643.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/lante7711/comments/commentRss/2643.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/lante7711/services/trackbacks/2643.html</trackback:ping><description><![CDATA[
		<font face="Verdana">*Shell是什么?<br />　　任何发明都具有供用户使用的界面。UNIX供用户使用的界面就是Shell(DOS的command熟悉吧，但UNIX的要强大的多)。 Shell为用户提供了输入命令和参数并可得到命令执行结果的环境。<br /><br />　　为了不同的需要，UNIX提供了不同的Shell。现在的UNIX大部分都支持BourneShell，以下教程就以BourneShell(Bsh)为例，一步步的领略UNIX Shell的强大功能，占先其强大魅力，达到更方便灵活的管理、应用UNIX的目的。<br /><br />　　1.UNIX内核和Shell的交互方法<br /><br />　　启动UNIX时，程序UNIX(内核)将被调入计算机内存，并一直保留在内存中直到机器关闭。在引导过程中，程序 init将进入后台运行一直到机器关闭。该程序查询文件/etc/inittab，该文件列出了连接终端的各个端口及其特征。当发现一个活动的终端时，init程序调用getty程序在终端上显示login等登陆信息。(username和passwd)，在输入密码后， getty调用login进程，该进程根据文件/etc/passwd的内容来验证用户的身份。若用户通过身份验证，login进程 把用户的home目录设置成当前目录并把控制交给一系列setup程序。setup程序可以是指定的应用程序，通常setup程序 为一个Shell程序，如:/bin/sh 即Bourne Shell（command出来了，呵呵）。<br /><br />　　得到控制后，Shell程序读取并执行文件/etc/.profile以及.profile。这两个文件分别建立了系统范围内的和 该用户自己的工作环境。最后Shell显示命令提示符，如$。(这是以bsh为例，若是csh,为.cshrc,ksh为.kshrc,bash为.bashrc等等) 　　　<br /><br />　　注:(不妨把/etc/.profile和.profile看成DOS的autoexec.bat 或 config.sys文件)<br /><br />　　当shell退出时，内核把控制交给init程序,该程序重新启动自动登陆过程。有两种方法使shell退出，一是用户执行exit命令，二是 内核(例如root用kill命令)发出一个kill命令结束shell进程。shell退出后，内核回收用户及程序使用的资源。<br /><br />　　用户登陆后，用户命令同计算机交互的关系为:命令进程---&gt;Shell程序---&gt;UNIX内核---&gt;计算机硬件。当用户输入一个命令，如$ls, Shell将定位其可执行文件/bin/ls并把其传递给内核执行。内核产生一个新的子进程调用并执行/bin/ls。当程序执行完毕后，内核取消 该子进程并把控制交给其父进程，即Shell程序。例如执行:<br /><br />　　　　$ps<br /><br />　　　　该命令将会列出用户正在执行的进程，即Shell程序(下来详细说说，别急现在)和ps程序。若执行:<br /><br />　　　　$sleep 10 &amp;<br />　　　　$ps<br /><br />　　其中第一条命令将产生一个在后台执行的sleep子进程。ps命令执行时会显示出该子进程。<br /><br />　　每当用户执行一条命令时，就会产生一个子进程。该子进程的执行与其父进程或Shell完全无关，这样可以使Shell去做其他工作。(Shell只是把用户的意图告诉内核，然后该干嘛干嘛:)) 现在windows有个计划任务(在固定的时间，日期自动执行某任务),其实UNIX很早就有这个功能了，也就是所谓的Shell的自动执行。一些UNIX 资源，如cron可以自动执行Shell程序而无需用户的参与，(这个功能好象在/var/spool/crotab目录里)。 Crontab 程序对于系统管理员来说是非常有用的。Cron 服务用于计划程序在特定时间（月、日、周、时、分）运行。我们以root的crontab 为例。根用户的 crontab 文件放在 /var/spool/crontab/root 中，其格式如下：<br /><br />　　(1) 　(2) 　(3) 　(4) 　(5)　 (6)<br />　　 0　　 0 　　*　　 * 　　3　　 /usr/bin/updatedb<br />　　　　　　1. 分钟 (0-60)<br />　　　　　　2. 小时 (0-23)<br />　　　　　　3. 日 (1-31)<br />　　　　　　4. 月 (1-12)<br />　　　　　　5. 星期 (1-7)<br />　　　　　　6. 所要运行的程序<br />　　2.Shell的功能和特点<br />　　1&gt;命令行解释<br />　　2&gt;使用保留字<br />　　3&gt;使用Shell元字符(通配符)<br />　　4&gt;可处理程序命令<br />　　5&gt;使用输入输出重定向和管道<br />　　6&gt;维护一些变量<br />　　7&gt;运行环境控制<br />　　8&gt;支持Shell编程<br /><br />　　对于"命令行解释"就不多说了，就是在shell提示符(例如:"$","%","#"等)后输入一行unix命令，Shell将接收用户的输入。<br /><br />　　"使用保留字":Shell有一些具有特殊意义的字，例如在Shell脚本中，do,done,for等字用来控制循环操作，if,then等控制条件操作。 保留字随Shell环境的不同而不同。<br /><br />　　"通配符"：* 匹配任何位置<br />　　　　　　　? 匹配单个字符<br />　　　　　　　[] 匹配的字符范围或列表 例如:<br />　　　　　　　<br />　　　　　　　　　 $ls [a-c]*<br />　　　　　　　　　<br />　　　　　　　　　 将列出以a-c范围内字符开头的所有文件<br />　　　　　　　　　 $ls [a,m,t]*<br />　　　　　　　　　将列出以e,m或t开头的所有文件<br /><br />　　"程序命令" ：当用户输入命令后，Shell读取环境变量$path(一般在用户自己的.profile中设置)，该变量包含了命令可执行文件可能存在的目录列表。 shell从这些目录中寻找命令所对应的可执行文件，然后将该文件送给内核执行。<br /><br />　　"输入输出重定向及管道" ：重定向的功能同DOS的重定向功能：<br /><br />　　　　 "&gt;" 重定向输出<br />　　　　 "&lt;" 重定向输入<br /><br />　　而管道符号，是unix功能强大的一个地方,符号是一条竖线:"|"，用法: command 1 | command 2 他的功能是把第一个命令command 1执行的结果作为command 2的输入传给command 2，例如:<br /><br />　　　　$ls -s|sort -nr|pg<br /><br />　　该命令列出当前目录中的所有文件，并把输出送给sort命令作为输入，sort命令按数字递减的顺序把ls的输出排序。然后把排序后的 内容传送给pg命令，pg命令在显示器上显示sort命令排序后的内容。<br /><br />　　"维护变量" ：Shell可以维护一些变量。变量中存放一些数据供以后使用。用户可以用"="给变量赋值，如:<br /><br />　　　　　　　　　$lookup=/usr/mydir<br /><br />该命令建立一个名为lookup的变量并给其赋值/usr/mydir,以后用户可以在命令行中使用lookup来代替/usr/mydir，例如: 　　　　　　　　　<br />　　　　　　　　　$echo $lookup<br />　　　　　　　　　结果显示:/usr/mydir<br /><br />　　　　　　　　　为了使变量能被子进程使用,可用exprot命令，例如:<br /><br />　　　　　　　　　$lookup=/usr/mydir<br />　　　　　　　　　$export lookup<br /><br />　　"运行环境控制" ：当用户登陆启动shell后，shell要为用户创建一个工作的环境，如下:<br /><br />　　1&gt;当login程序激活用户shell后，将为用户建立环境变量。从/etc/profile和.profile文件中读出，在这些文件中一般都用$TERM 变量设置终端类型，用$PATH变量设置Shell寻找可执行文件的路径。<br /><br />　　2&gt;从/etc/passwd文件或命令行启动shell时，用户可以给shell程序指定一些参数，例如"-x"，可以在命令执行前显示该命令及其参数。后面详细介绍这些参数。<br /><br />　　"shell编程" ：本文主要介绍的内容。<br /><br />　　shell本身也是一种语言(*可以先理解为unix命令的组合，加上类C的条件，循环等程序控制语句,类似dos批处理，但要强大的多),用户可以 通过shell编程(脚本,文本文件)，完成特定的工作。<br /><br />SHELL变量<br /><br />　　下面我们详细的介绍Bourne Shell的编程:<br /><br />　　自从贝尔实验室设计了Bourne Shell。从那时起许多厂商根据不同的硬件平台设计了许多版本得unix。但在众多版本的unix中，Bourne Shell 一直保持一致。<br />　　1&gt;Bsh的启动：用户在登陆后，系统根据文件/etc/passwd中有关该用户的信息项启动Shell。例如某用户在passwd中 的信息项为:<br /><br />　　　　ice_walk:!:411:103:Imsnow ,ice_walk:/home/ice_walk:/bin/bsh<br /><br />　　则表明，用户名是ice_walk等信息，在最后一项"/bin/bsh"表明用户的sh环境类型是bsh,于是系统启动之。在启动或执行(包括下面我们要讲 的shell程序--脚本）过程中可以使用以下一些参数，我们一一说明:<br /><br />　　-a 将所有变量输出<br />　　-c "string"从string中读取命令<br />　　-e 使用非交互式模式<br />　　-f 禁止shell文件名产生<br />　　-h 定义<br />　　-i 交互式模式<br />　　-k 为命令的执行设置选项<br />　　-n 读取命令但不执行<br />　　-r 受限模式<br />　　-s 命令从标准输入读取<br />　　-t 执行一命令，然后退出shell<br />　　-u 在替换时，使用未设置的变量将会出错<br />　　-v 显示shell的输入行<br />　　-x 跟踪模式，显示执行的命令<br />许多模式可以组合起来用,您可以试试了，但-ei好象不行，你说why呢？<br /><br />　　使用set可以设置或取消shell的选项来改变shell环境。打开选项用"-",关闭选项用"+",多数unix允许打开或关闭a、f、e、h、k、n、 u、v和x选项。若显示Shell中已经设置的选项，执行:<br /><br />　　　　$echo $-<br /><br />　　Bsh中每个用户的home目录下都有一个.profile文件，可以修改该文件来修改shell环境。为了增加一个可执行文件的路径(例如/ice_walk/bin)， 可以把下面代码加入.profile中<br /><br />　　　　PATH=$PATH:/ice_walk/bin;exprot PATH<br /><br />　　 .profile中shell的环境变量意思如下:<br /><br />　　　　CDPATH 执行cd命令时使用的搜索路径<br />　　　　HOME 用户的home目录<br />　　　　IFS 内部的域分割符，一般为空格符、制表符、或换行符<br />　　　　MAIL 指定特定文件(信箱)的路径，有UNIX邮件系统使用<br />　　　　PATH 寻找命令的搜索路径(同dos的config.sys的 path)<br />　　　　PS1 主命令提示符，默认是"$"<br />　　　　PS2 从命令提示符，默认是"&gt;"<br />　　　　TERM 使用终端类型<br /><br />　　2&gt;Bsh里特殊字符及其含义<br /><br />　　在Bsh中有一组非字母字符。这些字符的用途分为四类:作为特殊变量名、产生文件名、数据或程序控制以及引用和逃逸字符控制。他们 可以让用户在Shell中使用最少的代码完成复杂的任务。<br /><br />　　　　　*&gt; Shell变量名使用的特殊字符<br />　　　　　　　　$# 传送给命令Shell的参数序号<br />　　　　　　　　$- 在Shell启动或使用set命令时提供选项<br />　　　　　　　　$? 上一条命令执行后返回的值<br />　　　　　　　　$$ 当前shell的进程号<br />　　　　　　　　$! 上一个子进程的进程号<br />　　　　　　　　$@ 所有的参数，每个都用双括号括起<br />　　　　　　　　$* 所有参数，用双括号括起<br />　　　　　　　　$n 位置参数值，n表示位置<br />　　　　　　　　$0 当前shell名<br />　　　　　*&gt;产生文件名的特殊字符<br />　　　　　　　　包括"*","?","[]"，上面讲过，不再多说。<br />　　　　　*&gt;数据或程序控制使用的特殊字符<br />　　　　　　　　&gt;(file) 输出重定向到文件中(没有文件则创建，有则覆盖)<br />　　　　　　　　&gt;&gt;(file) 输出重定向到文件中(没有则创建，有则追加到文件尾部)<br />　　　　　　　　&lt;(file) 输入重定向到文件<br />　　　　　　　　; 命令分割符<br />　　　　　　　　| 管道符<br />　　　　　　　　&amp; 后台运行(例如:sleep 10 &amp;)<br />　　　　　　　　` ` 命令替换，重定向一条命令的输出作为另一命令的参数<br />　　　　　*&gt;对于引用或逃逸的特殊字符<br /><br />　　Bsh用单引号' '和双引号" "将特殊字符或由空白分隔的字引用起来组成一个简单的数据串.使用单引号和双引号的区别是双引号中的内容可进行参数和变量替换.逃逸字符也一样.<br /><br />　　　　　　　　$echo "$HOME $PATH"<br />　　　　 　　　 结果显示$/u/ice_walk/bin:/etc:/usr/bin<br />　　　　　　　　而$echo '$HOME $PATH' 结果显示$HOME $PATH<br /><br />　　shell的逃逸符是一个"",表示其后的字符不具有特殊的含义或不是shell的函数<br /><br />　　　　　　　　$echo $HOME $PATH<br />　　　　　　　　结果显$$HOME /bin:/etc:/usr/bin:<br /><br />3&gt;Bsh的变量<br /><br />　　前面我们在多个地方引用了变量,当Shell遇到一个"$"符时(没有被引用或逃逸)，它将认为其后为一变量。不论该变量是环境变量还是用户自定义的变量，在命令行中变量名要被变量值替换。例如命令:ls $HOME将列出变量HOME对应目录下的文件。 用户可以在命令行中的任何地方进行变量替换。包括命令名本身，例如：<br /><br />　　　　$dir=ls<br />　　　　$$dir f*<br /><br />　　将列出以f开头的文件。<br /><br />　　现在详细的介绍下Bsh的变量。Bsh中有四类变量:用户定义的变量、位置变量(shell参数)、预定义变量及环境变量。<br /><br />　　用户定义的变量：<br /><br />　　用户定义的变量由字母和下划线组成，并且变量名的第一个字符不能为数字(0~9)。与其他UNIX名字一样，变量名是大小写敏感的。用户可以在命令行上用"="给变量赋值，例如:<br /><br />　　　　$NAME=ice_walk<br /><br />　　给变量NAME赋值为ice_walk,在应用变量NAME的时候，在NAME前加"$"即可，前面已说，不再废话(别说我废话多，关键是没当过老师:()。可以用变量和其他字符组成新的字，例如:<br /><br />　　　　$SUN=sun<br />　　　　$echo ${SUN}day<br /><br />　　在应用shell变量时候，可以在变量名字两边$后面加上{}，以更加清楚的显示给shell,哪个是真正的变量，以实现字符串的合并等功能。<br />　<br />　　结果显示:sunday(注意不能echo $SUNday,因为SUNday变量没定义，读者试下执行结果) 用户也可以在命令行上同时对多个变量赋值，赋值语句之间用空格分开:<br /><br />　　　　$X=x Y=y<br /><br />　　　　注意变量赋值是从右到左进行的<br /><br />　　　　$X=$Y Y=y<br />　　　　X的值是y<br />　　　　$X=z Y=$Z<br /><br />　　　　Y的值是空(变量未赋值时，shell不报错，而是赋值为空)<br /><br />　　用户可以使用"unset &lt;变量&gt;"命令清除给变量赋的值<br />　　用户使用变量时要在其前面加一"$"符，使变量名被变量值所替换。Bsh可以进行变量的条件替换，即只有某种条件发生时才进行替换。替换条件放在一对大括号{}中，如:<br /><br />　　　　${variable: -value} variable是一变量值，value是变量替换使用的默认值<br /><br />　　　　$echo Hello $UNAME<br />　　　　结果显示:Hello<br />　　　　$echo Hello ${UNAME: -there}<br />　　　　结果显示:Hello there<br />　　　　$echo $UNAME<br />　　　　结果显示: (空)<br />　　　　$UNAME=John<br />　　　　$echo Hello ${UNAME: -there}<br />　　　　结果显示:Hello John<br /><br />　　可以看出，变量替换时将使用命令行中定义的默认值，但变量的值并没有因此而改变。另外一种替换的方法是不但使用默认值进行替换，而且将默认值赋给该变量。其形式如下:<br /><br />　　　　${variable:=value}<br /><br />　　该形式在变量替换后同时把值value符给变量variable。<br /><br />　　　　$echo Hello $UNAME<br />　　　　结果显示:Hello<br />　　　　$echo Hello ${UNAME:=there}<br />　　　　结果显示:Hello there<br />　　　　$echo $UNAME<br />　　　　结果显示:there<br />　　　　$UNAME=John<br />　　　　$echo Hello ${UNAME:-there}<br />　　　　结果显示:Hello John<br /><br />　　变量替换的值也可以是` `括起来的命令:<br /><br />　　　　$USERDIR={$Mydir: -`pwd`}<br /><br />　　第三种变量的替换方法是只有当变量已赋值时才用指定值替换形式:<br /><br />　　　　${variable: +value}<br /><br />　　　　只有变量variable已赋值时，其值才用value替换，否则不进行任何替换，例如:<br /><br />　　　　$ERROPT=A<br />　　　　$echo ${ERROPT: +"Error tracking is acitive"}<br />　　　　结果显示:Error tracking is acitive<br />　　　　$ERROPT=<br />　　　　$echo ${ERROPT: +"Error tracking is acitive"}<br />　　　　结果显示: (空)<br /><br />　　我们还可以使用错误检查的条件进行变量替换:<br /><br />　　　　${variable:?message}<br />当变量variable已设置时，正常替换。否则消息message将送到标准错误输出(若此替换出现在shell程序中,那么该程序将终止)。　例如：<br /><br />　　　　$UNAME=<br />　　　　$echo $ {UNAME:?"UNAME HAS NOT BEEN SET"}<br />　　　　结果显示:UNAME HAS NOT BEEN SET<br /><br />　　　　$UNAME=Stephanie<br />　　　　$echo $ {UNAME:?"UNAME HAS NOT BEEN SET"}<br /><br />　　　　结果显示:Stephanie<br />　　　　当没有指定message时，shell将显示一条默认的消息，例如:<br /><br />　　　　$UNAME=<br />　　　　$echo $ {UNAME:?}<br />　　　　结果显示:sh:UNAME:parameter null or not set<br /><br />4&gt;位置变量或Shell参数<br /><br />　　在shell解释用户的命令时，将把命令行的第一个字作为命令，而其他的字作为参数。当命令对应的可执行文件为Shell程序时，这些参数将作为位置变量传送给该程序。第一个参数记为$1,第二个为$2....第九个为$9。其中1到9是真正的参数名，"$"符只是用来标识变量的替换。<br /><br />　　位置变量$0指命令对应的可执行文件名。在后面将详细介绍位置变量。<br /><br />　　1.只读变量<br /><br />　　用户将变量赋值后，为了防止以后对该变量的修改，可以用以下命令将该变量设置为只读变量：<br /><br />　　　　readonly variable<br /><br />　　2.export命令<br /><br />　　shell执行一个程序时，首先为该程序建立一个新的执行环境，称为子shell。在Bourne Shell中变量都是局部的，即他们只在创建他们的Shell中有意义。用户可以用export命令让变量被其他子Shell识别。但某用户的变量是没法让其他用户使用的。<br /><br />　　当用户启动一个新shell时,该shell将使用默认的提示符。因为赋给变量PS1的值只在当前shell中有效。为了让子Shell使用当前Shell中定义的提示符号，可以使用export命令：<br /><br />　　　　$PS1="Enter command:"<br />　　　　Enter command:export PS1<br />　　　　Enter command:sh<br />　　　　Enter command:<br /><br />　　　　此时变量PS1变成了全局变量。它可以被其子Shell使用。当变量被设置成全局的以后，将一直保持有效直到用户退出该变量所在的Shell。用户可以在文件.profile中给一个变量永久赋值。详见"规范Shell"。<br /><br />基本语句<br /><br />　　从本节起，我们将详细介绍Shell程序设计的基本知识，通过编写Shell脚本，用户可以根据自己的需要有条件的或者重复的执行命令。通过Shell程序，可以把单个的UNIX命令组合成一个完全实用的工具，完成用户的任务。<br /><br />　　1&gt;什么是Shell程序<br /><br />　　当用户在UNIX Shell中输入了一条复杂的命令，如:<br /><br />　　　　$ls -R /|greo myname |pg<br /><br />　　我们可以称用户在对Shell编程，当把这条语句写在一个文件里，并且符给该文件可执行权限，那么该文件就是我们传统上说的Shell程序。<br /><br />　　2&gt;简单的Shell程序<br /><br />　　假设用户每天使用下述命令备份自己的数据文件:<br /><br />　　　　$cd /usr/icewalk;ls * |cpio -o &gt; /dev/fd0<br /><br />　　我们可以把它写在一个文件，如:ba.sh中:<br /><br />　　　　$cat &gt;ba.sh<br />　　　　cd /usr/icewalk<br />　　　　ls * |cpio -o &gt; /dev/fd0<br />　　　　^D 　(ctrl_d)<br /><br />　　程序ba.sh就是Shell脚本，用户可以用vi或其他编辑工具编写更复杂的脚本。<br /><br />　　此时用户备份文件只需要执行Shell程序ba.sh,执行时需在当前Shell中创建一个子Shell:<br /><br />　　　　$sh ba.sh<br /><br />　　程序sh与用户登陆时执行的Bourne Shell相同，但当Sh命令带参数ba.sh后，它将不再是一个交互式的Shell，而是直接从文件ba.sh中读取命令。<br /><br />　　执行ba.sh中命令的另一方法是给文件ba.sh执行权限：<br /><br />　　　　$chmod +x ba.sh<br /><br />　　此时，用户可以输入文件名ba.sh做为一个命令来备份自己的数据，需要注意的是，用这种方法执行命令的时候，文件ba.sh必须存在于环境变量$PATH所指定的路径上。</font>
		<br />
<img src ="http://www.cnitblog.com/lante7711/aggbug/2643.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/lante7711/" target="_blank">兰特</a> 2005-09-13 20:42 <a href="http://www.cnitblog.com/lante7711/articles/2643.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>vi大全</title><link>http://www.cnitblog.com/lante7711/articles/2642.html</link><dc:creator>兰特</dc:creator><author>兰特</author><pubDate>Tue, 13 Sep 2005 12:24:00 GMT</pubDate><guid>http://www.cnitblog.com/lante7711/articles/2642.html</guid><wfw:comment>http://www.cnitblog.com/lante7711/comments/2642.html</wfw:comment><comments>http://www.cnitblog.com/lante7711/articles/2642.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/lante7711/comments/commentRss/2642.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/lante7711/services/trackbacks/2642.html</trackback:ping><description><![CDATA[
		<font face="Verdana">vi大全<br /><br />xp <br />交换两个字符位置 <br />ddp <br />上下两行调换 <br />J <br />上下两行合并 <br />dG <br />删除所有行 <br />d$ <br />从当前位置删除到行尾 <br />y$ <br />从当前位置复制到行尾, 如果要粘贴到其他地方 p 就可以了 <br /><br />:ab string strings <br />例如 ":ab usa United States of America" , <br />当你在文见里插入 usa 时 <br />United States of America 就蹦出来了 <br />:g/^/m0 <br />把文件内容反转 <br />:map keys new_seq <br />定义你当前 键盘命令 <br />:set [all] <br />vi or ex 的编辑状态 <br />如 显示每行 :set nu <br />:X <br />然后系统会提示输入密码, 输入密码后存盘退出, 保存后就加密了 <br />下次编辑时使用vi -x filename, 系统会提示你输入密码 <br /><br />在命令状态下，nyy表示拷贝从光标行起的下n行内容，p表示paste，粘贴下来在光标处。 <br /><br />我常用到的单个字符替换用r，覆盖多个字符用R，用多个字符替换一个字符用s，整行替换用S <br /><br />:%s/old_word/new_word/g <br />这个指令是于在整个文件中替换特定字符串 <br /><br />将光标移到第n行，按下 mk <br />将光标移到第m行，按下 "ay'k <br />即将第n到m的行存到a寄存器，以此类推，b，c........寄存器等 <br /><br />不好意思，补充一下，想粘贴到某处，直接将光标移到某地，按下 ‘ap 即可 <br /><br />删除命令操作 <br />d l 删除当前字符（与x命令功能相同） <br />d 0 删除到某一行的开始位置 <br />d ^ 删除到某一行的第一个字符位置（不包括空格或TA B字符） <br />d w 删除到某个单词的结尾位置 <br />d 3 w 删除到第三个单词的结尾位置 <br />d b 删除到某个单词的开始位置 <br />d W 删除到某个以空格作为分隔符的单词的结尾位置 <br />d B 删除到某个以空格作为分隔符的单词的开始位置 <br /><br />删除命令操作 <br />d 7 B 删除到前面7个以空格作为分隔符的单词的开始位置 <br />d） 删除到某个语句的结尾位置 <br />d 4） 删除到第四个语句的结尾位置 <br />d（ 删除到某个语句的开始位置 <br />d } 删除到某个段落的结尾位置 <br />d { 删除到某个段落的开始位置 <br />d 7 { 删除到当前段落起始位置之前的第7个段落位置 <br />d d 删除当前行 <br />d /t e x t 删除从文本中出现“ t e x t”中所指定字样的位置，一直向前直到下一个该字样所出现的 <br />位置（但不包括该字样）之间的内容 <br />d fc 删除从文本中出现字符“c”的位置，一直向前直到下一个该字符所出现的位置（包括 <br />该字符）之间的内容 <br />d tc 删除当前行直到下一个字符“ c”所出现位置之间的内容 <br />D 删除到某一行的结尾 <br />d $ 删除到某一行的结尾 <br />5 d d 删除从当前行所开始的5行内容 <br />d L 删除直到屏幕上最后一行的内容 <br />d H 删除直到屏幕上第一行的内容 <br />d G 删除直到工作缓存区结尾的内容 <br />d 1 G 删除直到工作缓存区开始的内容 <br /><br />修改命令操作 <br />c l 更改当前字符 <br />c w 修改到某个单词的结尾位置 <br />c 3 w 修改到第三个单词的结尾位置 <br />c b 修改到某个单词的开始位置 <br />c W 修改到某个以空格作为分隔符的单词的结尾位置 <br />c B 修改到某个以空格作为分隔符的单词的开始位置 <br />c 7 B 修改到前面7个以空格作为分隔符的单词的开始位置 <br />c 0 修改到某行的结尾位置 <br />c） 修改到某个语句的结尾位置 <br />c 4） 修改到第四个语句的结尾位置 <br />c（ 修改到某个语句的开始位置 <br />c } 修改到某个段落的结尾位置 <br />c { 修改到某个段落的开始位置 <br />c 7 { 修改到当前段落起始位置之前的第7个段落位置 <br />c tc 修改当前行直到下一个字符c所出现位置之间的内容 <br />C 修改到某一行的结尾 <br />c c 修改当前行 <br />5 c c 修改从当前行所开始的5行内容 <br /><br />替换命令操作 <br />s 将当前字符替换为一个或多个字符 <br />S 将当前行替换为一个或多个字符 <br />5 s 将从当前字符开始的5个字符替换为一个或多个字符 <br />下载 <br /><br />vi替换使用规则： <br />:g/s1/s/s2/s3/g <br />第一个g表示对每一个包括s1的行都进行替换，第二个g表示对每一行包括s1的行所有的s2都用s3替换 <br />s表示替换，s2是要被替换的字符串，他可以和s1相同（如果相同的话用//代替），s3是替换字符串 <br /><br />fx <br />往右移动到 x 字符上 <br />Fx <br />往左移动到 x 字符上 <br />tx <br />往右移动到 x 字符前 <br />Tx <br />往左移动到 x 字符后 <br />（注意：以上四个命令中，其中x是键入的字符） <br />; <br />分号，配合 f 和 t 使用，重复一次 <br />, <br />逗号，配合 f 和 t 使用，反方向重复一次 <br /><br />建议谁把 :set all 出来的参数及其用法说明一下。注意注明UNIX平台，我发现几个平台下有些差异。 <br /><br />加密码我在8 上（bsh） 实验成功 所以大家最好还是加上 环境！！ <br /><br />vi 环境选项 Solaris ksh <br />noautoindent nomodelines noshowmode <br />autoprint nonumber noslowopen <br />noautowrite nonovice tabstop=8 <br />nobeautify nooptimize taglength=0 <br />directory=/var/tmp paragraphs=IPLPPPQPP LIpplpipnpbtags=tags /usr/lib/tags <br />noedcompatible prompt tagstack <br />noerrorbells noreadonly term=vt100 <br />noexrc redraw noterse <br />flash remap timeout <br />hardtabs=8 report=5 ttytype=vt100 <br />noignorecase scroll=11 warn <br />nolisp sections=NHSHH HUuhsh+c window=23 <br />nolist shell=/bin/ksh wrapscan <br />magic shiftwidth=8 wrapmargin=0 <br />mesg noshowmatch nowriteany <br /><br />For C-Shell: <br />setenv EXINIT "set nu" <br />For Bourne or Korn Shell: <br />EXINIT="set nu"; export EXINIT <br />For Korn Shell Only (alternate method): <br />typeset -x EXINIT="set nu" <br /><br />在 .profile 里设置 vi 的环境选项 , 以上均测试过 <br /><br />怎么没有介绍标记的，做标记对那种大的程序文件阅读十分有帮助。 <br />建议大家使用。 <br /><br />标记文本 <br />　　mchar　　 用字母char标记当前光标的位置 <br />　　`char 　　移至char所标记处 <br />　　'char　　 移至char标记所在行的开头处 <br />　　"　　　　 移至当前行上一次所在位置（在光标移动之后）――一个双引号 <br />　　''　　　　移至当前行上第一次所在位置的行的开头处(在光标移动之后)――两个单引号 <br /><br />.重复上一次修改！ <br /><br />大家都说了这么多了，我也来说两句 <br />在当前屏幕中 <br />H 跳到第一行 <br />M 跳到中间一行 <br />L 跳到最后一行 <br /><br />同时vi多个文件时，CTRL-SHIFT-6回到上一个文件，在本次vi的文件和上次vi的文件之间切换。其实就是一些文档写的 ^^ <br />但是我发现一个BUG：在用CTRL-SHIFT-6切换到上一个文件后，用:args查看多文件vi状态时，屏幕底部仍然显示目前vi的是刚才的文件。 <br />(在HP-UX,Solaris,AIX上通过) <br /><br />还是使用 <br />:e# <br />切换比较好，呵呵 <br /><br />%s/^/要加的内容/g 要在文本后同样的字符加 <br />%s/$/要加的内容/g vi的使用确实太多，大家多多总结交流！！！ <br /><br />追加到缓冲区 <br />对于已经有内容的缓冲区，可以继续追加内容在其后面，例如： <br />"Ad4w 删除光标后4个字，并附加到缓冲区a <br />"Ay) 取样从光标到文件尾的内容，并附加到缓冲区a <br />"K3yy 取样从光标所在行起的3行内容，并附加到缓冲区k <br /><br />注意：在追加缓冲区的命令中，原缓冲区的名字一定要大写，才能将内容追加进去，否则是覆盖原缓冲区的内容。追加内容在原缓冲区末尾另起一行。 <br /><br />清理掉DOS文本中的^M可以在：1,$s/^M//g，其中^M是CTRL+V, CTRL+M。 <br /><br /><br />删除从当前行开始到最后一行的所有内容 <br />:.,$d <br />在:命令行模式下，首先可以确定命令的范围 <br />.表示当前行；数字表示行号，如1表示第一行,2表示第二行；$表示最后一行 <br />范围用,分隔 <br />然后用命令 <br />d表示删除，y表示复制......大家都知道的 <br /><br />最后说一句，%表示全文 <br />:%d <br />是删除全文 <br /><br />给“南非蜘蛛”补充一下，hehe <br />在:命令行模式下，首先可以确定命令的范围 <br />.表示当前行；数字表示行号，如1表示第一行,2表示第二行；$表示最后一行 <br />范围用,分隔 <br />... <br /><br /><br />慎用:$d <br /><br />:$d 只是删除最后一行嘛，用错了还不算最坏的结果，呵呵 <br /><br />请教aix,ksh下： <br />一行&gt;=2048个字符时，无法显示，怎么办？ <br /><br /><br />在vi中好像应该没有什么办法了，这是vi的Program Limits中的Maximum Line Length限制。试一试用UltraEdit读读看吧 <br /><br />有的环境不能用uedit <br />可以折行吗？ <br /><br />折行 <br />:set wrapmargin=4 <br /><br />下面引用由bjchenxu在 2002/09/05 09:07am 发表的内容： <br />折行 <br />:set wrapmargin=4 <br /><br /><br />怎么解释？结果如何？ <br /><br />不行呀 <br />A line cannot be longer than 2048 characters. <br /><br />我的只能解决显示问题，如果说vi里不能存放这么多字符，就比较麻烦了 <br />另外问一句，2048个字符已经够长了，为什么要放更多的，没准我们可以从源头上解决问题 <br /><br />老外的程序的log文件，有些行就这么长，以至于影响了后面行的显示； <br />more,pg等可以折行 <br /><br />我还是不会用:X加密,能不能说的详细一点,:X后,提示输入key:然后呢?mark what 后输入什么呢,下次如何在打开呢?more 可以正常看吗? <br />xiexie! <br /><br />你使用的什么平台的UNIX呢？我从来没有见到mark what出现过啊 <br />more是不能正常看的，用vi -x filename，然后输入密码就可以了 <br /><br />好像再另存不了不加密的了 <br /><br />用 :wq 或者 :wq! 另存 <br /><br />请高手指点迷精：vi中如何在每行的倒数第二个字符处插入一个字符？？ <br /><br />把Tab全部换成回车，应该怎么作啊？ <br />:1,$ s/ / /g <br />不行 <br /><br />^M (Ctrl+V+M)就是回车。 <br /><br />vi加密不同的unix可能不同. <br />俺在HP-UX下,用X加密的文件只输key(密钥). <br />vi -C 文件名,便会要求输入密钥,如正确,便打开了. <br /><br />littletiger的意思是不是这样： <br />以HP-UX为例 <br />1、加密 <br />vi file <br />:X <br />(Are you sure?(y/n)[n]:)回答y <br />输入密码回车以后再保存，就加密成功了 <br />2、解密 <br />vi -C file 或者 vi -x file <br />在 Key: 后面输入密码进入file <br />:X <br />(Are you sure?(y/n)[n]:)回答y <br />直接回车以后再用 wq 或者 wq! 保存，就把file解密成功了 <br /><br />:set number <br />显示行号 <br /><br />:g/$/s// ABC/g <br />:g/^/s//def /g <br />在文本每行的头和尾添加字符串. <br /><br />用vi进行coding时的使用技巧： <br />用ctags命令对当前目录下的c源程序扫描，生成tags文件 <br />$ ctags *.c <br />这样，在vi里通过命令 <br />:ta fun_name <br />就可以直接打开函数fun_name所在的文件，并将光标置于函数开头 <br /><br /><br />:n,n1 d <br />n和n1都是行数， d是删除这些行 .表示当前的行。 <br />: n <br />n是行数，直接转到n行。 <br />: r 文件名 <br />把文件添加到当前的文件中 <br />:n,n1 w 文件名 <br />把从n行到n1行写道另外一个文件中 <br /><br /><br />查找： <br />在一个单词上用*,就向下查找此单词,#是向上 <br />用/查找hello,就不会查找到hello_world(用此替换也很好用) <br /><br />替换： <br />如有一文件，内容为： <br />aa <br />bb <br />cc <br />dd <br />用:%s/.*/printf("&amp; is :%d ",&amp;)/ <br />文件内容为变为： <br />printf("aa is :%d ",aa) <br />printf("bb is :%d ",bb) <br />printf("cc is :%d ",cc) <br />printf("dd is :%d ",dd) <br />&amp;为查找到的内容 <br />用:~为重复上一次替换 <br /><br />用系统命令编辑： <br />如有一文件，内容为： <br />333 <br />222 <br />334 <br />444 <br />111 <br />553 <br />554 <br />233 <br />运行命令:%!sort 文件内容为： <br />111 <br />222 <br />233 <br />333 <br />334 <br />444 <br />553 <br />554 <br />用此方法可以使用许多系统命令进行编辑，大家可以灵活运用 <br /><br />其他特殊用法： <br />用q: 看一看有什么 <br />用？ 可以编辑你用过的命令 <br />程序中在一个调用函数(如:printf)上用K，可以直接调出printf的帮助 <br /><br />ctrl+f向下翻页，ctrl+b向上翻页（对于telnet上去的时候比较有用） <br /><br /><br />1. vi中设置tab键的空格数： <br />:set ts=4 <br />:set sw=4 <br />将此两句话加到当前用户目录的文件.vimrc中，这样当前用户用vi的时候就会启动该设置 <br /><br />2.拷贝： <br />将第2行到第9行的字copy到第11行 <br />:2,9 co 10 <br />将第2行到第9行的字move到第11行 <br />:2,9 m 10 <br /><br />3.设置行号： <br />:se nu <br />取消行号: <br />:se nonu <br /><br />4.当前行与下一行换位置：ddp <br /><br />5.当前字与后面的字换位置：xp <br /><br /><br />用vi替换文件中的字符串 <br /><br />　　在vi界面下使用命令 <br />　　:%s#/usr/bin#/bin#g <br />　　可以把文件中所有路径/usr/bin换成/bin。也可以使用命令： <br />　　:%s/usr/bin/bin/g <br />　　其中“”是转义字符，表明其后的“/”字符是具有实际意义的字符，不是分隔符。 <br /><br /><br />请问 vi 中的删除缓冲区是怎么回事？ <br /><br />看到有一个资料说到： <br />“vi还有有编号的删除缓冲区。撤消命令只能恢复上一次的删除，当且仅当这个删除是最后一次操作。但是，vi可以把最近9次删除的内容都放入9个编号从1到9的缓冲区内。最近一次删除保存在缓冲区1，次近的在缓冲区2，依此类推。例如，"2p可以放置第二个删除缓冲区中的内容。” <br />但是我没有操作成功，请教各位。 <br /><br /><br />既然是vi的问题，我义不容辞 <br /><br />准备文件test <br />1 <br />2 <br />3 <br />4 <br />5 <br /><br />将光标定位在5上，连按5次dd <br />然后键入 <br />"5p <br />"4p <br />"3p <br />"2p <br />"1p <br />看看发生了什么 <br /><br />明白了？ <br /><br /><br />要注意" <br /><br />谢谢你们的解释！ <br />再问，是否只有删除的整行可以保存在删除缓冲区中？比如删除的字符呢？ <br /><br />字符也可以，用整行只是为了让你好学 <br />自己试试吧，找葫芦画瓢吧 <br /><br />wo 我照呢说得作的 可是恢复的是5个1 啊 怎么回事 (solaris8) <br /><br />比如在一行中连按5次dw，会将5个词依次放入1～5的寄存器中吗？我没有试验成功，总提示寄存器为空。 <br /><br />[这个贴子最后由goodboy在 2002/08/22 09:29am 编辑] <br /><br />bjchenxu，能否把VI使用高级技巧的方法给大家讲一讲呀：） <br />很多的，比如：怎么一个文件中的几行保存到另外一个文件中了， <br />或者把另外一个文件的插入到指定内容的行后面了或者我在vi中拷贝 <br />A文件的某5行(Esc下5yy拷贝），然后再:e b文件，怎么把A文件的5行拷过来？ <br />然后又怎么回到原先的A文件中？ <br /><br /><br />高级技巧太多太多，建议大家找本版valentine斑竹要书看，呵呵 <br />你说的几个问题我先回答一下： <br />1. 将一个文件中的几行保存到另外一个文件中了 <br />1.1 $vi file1 <br />1.2 :3,5 y a <br />1.3 :e file2 <br />1.4 "ap <br /><br />2. 将另外一个文件插入到指定内容的行后面 <br />2.1 $vi file1 <br />2.2 :/regularexpress/ r file2 <br /><br />3. 两个文件的切换和拷贝 <br />3.1 $vi file1 file2 <br />3.2 :3,5 y a <br />3.3 :e# <br />3.4 "ap <br />3.5 :e# <br /><br />在vim里面查看man页面 <br /><br />在进入vim后按“:”号，输入 <br />source $VIMRUNTIME/ftplugin/man.vim <br />然后再按“:”号，输入 <br />nmap K :Man <br />然后在vim里面输入你要的命令，在这个命令上按K，就可以看到经vim处理过后的man页。 <br /><br />用vi在整个文件的各行或某几行的行首或行尾加一些字符串 <br /><br />　　$vi file <br />　　:3,$s/^/some string 在文件的第一行至最后一行的行首插入“some string”。 <br />　　:%s/$/some string/g 在整个文件每一行的行尾添加“some string”。 <br />　　:%s/string1/string2/g 在整个文件中替换“string1”成“string2”。 <br />　　:3,7s/string1/string2/ 仅替换文件中的第3行到第7行中的“string1”成“string2”。 <br />　　注意: 其中s为substitute，%表示所有行，g表示global。 <br /><br />用vi删除大段的内容 <br /><br />　　首先利用编辑命令“vi file”打开文件， 然后将光标移到要删除的行处按Ctrl+G显示行 <br />号，再到结尾处再按Ctrl+G，显示文件结尾的行号。 <br />　　例如： <br />　　:23,1045d <br />　　假定2次得到的行号为23和1045，则把这期间的内容全删除， 也可以在要删除的开始行和 <br />结束行中用ma、mb命令标记，然后利用“:'a,'bd”命令删除。 <br /><br />用vi实现“另存为”功能 <br />　　$vi file <br />　　:w /tmp/1 <br />　　保存所做的所有修改，也可以将其中的某一部分修改保存到临时文件。 <br />　　如果仅仅把第20～59行之间的内容存盘成文件/tmp/1，我们可以键入如下命令： <br />　　:20,59w /tmp/1 <br /><br />用vi在一个新文件中读其他文件的内容 <br />　　$vi file <br />　　:r /etc/passwd 在打开的文件file中光标所在处读入/etc/passwd <br />　　:%s/:.*//g 删除/etc/passwd中用户名后面的从冒号开始直到行尾的所有部分。 <br />　　您也可以在指定的行号后读入文件内容，例如使用命令： <br />　　:3r /etc/passwd <br />　　从新文件的第3行开始读入 /etc/passwd的所有内容。 <br />　　我们还可以使用以下方法删掉文件中所有的空行及以#开始的注释行。 <br />　　$cat squid.conf.default | grep -v '^$' | grep -v '^#' <br /><br />用vi拷贝一个文件中的文本并粘贴到另一个文件中 <br />　　$vi file1 file2 <br />　　然后在vi界面下： <br />　　yy &lt;-在文件1的光标处拷贝所在行 <br />　　:n &lt;-切换到文件2 (n=next) <br />　　p &lt;-在文件2的光标所在处粘贴所拷贝的行 <br />　　:n &lt;-切换回文件1 <br /><br />使用vim对被编辑文件加密 <br />　　在VIM当中要对所编辑的文件进行简单加密，可以在命令行模式下键入“:X”（无括号， <br />只有冒号和X）然后在提示“Enter the encrypt key”时输入口令字串就可以加密了。但是别 <br />忘了要保存哦！保存的时候会发现在屏幕底部有“[crypted]”这样的字样。 下次打开该加密 <br />文件会要求您输入口令字串，这个总该记得的吧？ <br /><br />设置vim自动显示行号 <br />　　在每个用户的主目录下,都有一个 vi 的配置文件".vimrc"或".exrc"， 用户可以编辑它, <br />使这些设置在每次启动 vi 时,都有效。 <br />　　例如,加入如下设置行： <br />set nu 显示行号 <br />set nonu 不显示行号 <br />set ic 查找时不考虑大小写 <br />set noic 查找时考虑大小写 <br /><br />在vi里搜索关键字 <br /><br />　　当你用vi打开一个文件后，因为文件太长，如何才能找到你所要查找的关键字呢？在vi里 <br />可没有菜单-〉查找，不过没关系，你在命令模式下敲斜杆(/)这时在状态栏（也就是屏幕左下 <br />角）就出现了 “/”然后输入你要查找的关键字敲回车就可以了。 <br />　　如果你要继续查找此关键字，敲字符n就可以继续查找了。值得注意的是“/”是向下查找， <br />而“?”是向上查找，而在键盘定义上“?”刚好是“/”的上档符。 <br /><br />用彩色的vi写程序 <br /><br />　　修改$HOME中的.vimrc,把color值设为true <br />　　把环境变量VIMRUNTIME设成vim的路径名 <br />　　例：/usr/share/vim <br />　　在vi中键入 <br />　　:syntax on回车 <br />　　:so $VIMRUNTIME/syntax/java.vim回车（现在版本的vi支持无数程序语法色彩档，都在 <br />syntax/下，看一眼吧:)) <br />　　如果不喜欢所用的xterm背景色，可以用xterm -bg LightBlue（或其他喜欢的颜色）启动， <br />或者修改.Xresouce的xterm background项。 <br />　　vi -o xxx.java xxxx.java <br /><br />vi <br /><br />例如：Esc键在vi中输入ctrl+v与Esc为^[ <br />请问Delete键在vi中如何输入？ <br /><br />d <br />空一行 <br /><br />[Ctrl+V][Del] <br /><br />输这个键有什么用啊 <br /><br />输不进去 <br /><br />我想在shll里自动telnet到另一台机器终止.profile(自动运行了程序）执行，好执行我在shll中的一些命令。 <br /><br />输不进去 <br /><br />这种情况是因为DEL在您的终端上被定义成某个中断键，中断是被操作系统优先处理的。 <br />使用stty －a 可以显示出DEL被哪个中断所用。 <br />以下是两种解决方法： <br />1。使用“stty 中断名 新的中断键”形式改变中断键设置，然后调用vi，再使用ctrl+V的方法。如：stty intr ^E；vi <br />2。使用一个shell脚本myvi：stty raw ；vi $*;stty -raw <br />调用myvi <br />还有一种变通的解决方法，DEL键的ascii码应该是^？，0x7f，</font>
		<br />
<img src ="http://www.cnitblog.com/lante7711/aggbug/2642.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/lante7711/" target="_blank">兰特</a> 2005-09-13 20:24 <a href="http://www.cnitblog.com/lante7711/articles/2642.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux指令大全</title><link>http://www.cnitblog.com/lante7711/articles/2641.html</link><dc:creator>兰特</dc:creator><author>兰特</author><pubDate>Tue, 13 Sep 2005 12:22:00 GMT</pubDate><guid>http://www.cnitblog.com/lante7711/articles/2641.html</guid><wfw:comment>http://www.cnitblog.com/lante7711/comments/2641.html</wfw:comment><comments>http://www.cnitblog.com/lante7711/articles/2641.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/lante7711/comments/commentRss/2641.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/lante7711/services/trackbacks/2641.html</trackback:ping><description><![CDATA[
		<font face="Verdana">cat cd<br />chmod chown<br />cp cut<br /><br />名称：cat<br />使用权限：所有使用者<br />使用方式：cat [-AbeEnstTuv] [--help] [--version] fileName<br />说明：把档案串连接后传到基本输出（萤幕或加 &gt; fileName 到另一个档案）<br />参数：<br />-n 或 --number 由 1 开始对所有输出的行数编号<br />-b 或 --number-nonblank 和 -n 相似，只不过对于空白行不编号<br />-b 或 --number-nonblank 和 -n 相似，只不过对于空白行不编号<br />-s 或 --squeeze-blank 当遇到有连续两行以上的空白行，就代换为一行的空白<br />行<br />-v 或 --show-nonprinting<br />范例：<br />cat -n textfile1 &gt; textfile2 把 textfile1 的档案内容加上行号后输入<br />textfile2 这个档案里<br />cat -b textfile1 textfile2 &gt;&gt; textfile3 把 textfile1 和 textfile2 的档<br />案内容加上行号（空白行不加）之后将内容附加到 textfile3<br /><br />名称 : cd<br />使用权限 : 所有使用者<br />使用方式 : cd [dirName]<br />说明 : 变换工作目录至 dirName。 其中 dirName 表示法可为绝对路径或相对路<br />径。若目录名称省略，则变换至使用者的 home directory (也就是刚 login 时<br />所在的目录)。<br />另外，"~" 也表示为 home directory 的意思，"." 则是表示目前所在的目录<br />，".." 则表示目前目录位置的上一层目录。<br />范例 : 跳到 /usr/bin/ :<br />cd /usr/bin<br />跳到自己的 home directory :<br />cd ~<br />跳到目前目录的上上两层 :<br />cd ../..<br />cd ../..<br /><br />指令名称 : chmod<br />使用权限 : 所有使用者<br />使用方式 : chmod [-cfvR] [--help] [--version] mode file...<br />说明 : linux/Unix 的档案存取权限分为三级 : 档案拥有者、群组、其他。利用<br />chmod 可以藉以控制档案如何被他人所存取。<br />把计 :<br />mode : 权限设定字串，格式如下 : [ugoa...][+-=][rwxX]...][,...]，其中u<br />表示该档案的拥有者，g 表示与该档案的拥有者属于同一个群体(group)者，o 表<br />示其他以外的人，a 表示这三者皆是。<br />+ 表示增加权限、- 表示取消权限、= 表示唯一设定权限。<br />r 表示可读取，w 表示可写入，x 表示可执行，X 表示只有当该档案是个子目录<br />或者该档案已经被设定过为可执行。<br />-c : 若该档案权限确实已经更改，才显示其更改动作<br />-f : 若该档案权限无法被更改也不要显示错误讯息<br />-v : 显示权限变更的详细资料<br />-R : 对目前目录下的所有档案与子目录进行相同的权限变更(即以递回的方式逐<br />个变更)<br />--help : 显示辅助说明<br />--version : 显示版本<br />范例 :将档案 file1.txt 设为所有人皆可读取 :<br />chmod ugo+r file1.txt<br />将档案 file1.txt 设为所有人皆可读取 :<br />将档案 file1.txt 设为所有人皆可读取 :<br />chmod a+r file1.txt<br />将档案 file1.txt 与 file2.txt 设为该档案拥有者，与其所属同一个群体者可<br />写入，但其他以外的人则不可写入 :<br />chmod ug+w,o-w file1.txt file2.txt<br />将 ex1.py 设定为只有该档案拥有者可以执行 :<br />chmod u+x ex1.py<br />将目前目录下的所有档案与子目录皆设为任何人可读取 :<br />chmod -R a+r *<br />此外chmod也可以用数字来表示权限如 chmod 777 file<br />语法为：chmod abc file<br />其中a,b,c各为一个数字，分别表示User、Group、及Other的权限。<br />r=4，w=2，x=1<br />若要rwx属性则4+2+1=7；<br />若要rw-属性则4+2=6；<br />若要r-x属性则4+1=7。<br />范例：<br />chmod a=rwx file<br />和<br />chmod 777 file<br />效果相同<br />chmod ug=rwx,o=x file<br />和<br />和<br />chmod 771 file<br />效果相同<br />若用chmod 4755 filename可使此程式具有root的权限<br /><br />指令名称 : chown<br />使用权限 : root<br />使用方式 : chmod [-cfhvR] [--help] [--version] user[:group] file...<br />说明 : linux/Unix 是多人多工作业系统，所有的档案皆有拥有者。利用 chown<br />可以将档案的拥有者加以改变。一般来说，这个指令只有是由系统管理者(root)<br />所使用，一般使用者没有权限可以改变别人的档案拥有者，也没有权限可以自己<br />的档案拥有者改设为别人。只有系统管理者(root)才有这样的权限。<br />把计 :<br />user : 新的档案拥有者的使用者 IDgroup : 新的档案拥有者的使用者群<br />体(group)-c : 若该档案拥有者确实已经更改，才显示其更改动作-f : 若该档案<br />拥有者无法被更改也不要显示错误讯息-h : 只对于连结(link)进行变更，而非该<br />link 真正指向的档案-v : 显示拥有者变更的详细资料-R : 对目前目录下的所有<br />档案与子目录进行相同的拥有者变更(即以递回的方式逐个变更)--help : 显示辅<br />助说明--version : 显示版本<br />范例 :<br />将档案 file1.txt 的拥有者设为 users 群体的使用者 jessie :<br />chown jessie:users file1.txt<br />将目前目录下的所有档案与子目录的拥有者皆设为 users 群体的使用者<br />lamport :<br />lamport :<br />chown -R lamport:users *<br /><br />名称：cp<br />使用权限：所有使用者<br />使用方式：<br />cp [options] source dest<br />cp [options] source... directory<br />说明：将一个档案拷贝至另一档案，或将数个档案拷贝至另一目录。<br />把计<br />-a 尽可能将档案状态、权限等资料都照原状予以复制。<br />-r 若 source 中含有目录名，则将目录下之档案亦皆依序拷贝至目的地。<br />-f 若目的地已经有相同档名的档案存在，则在复制前先予以删除再行复制。<br />范例：<br />将档案 aaa 复制(已存在)，并命名为 bbb :<br />cp aaa bbb<br />将所有的C语言程式拷贝至 Finished 子目录中 :<br />cp *.c Finished<br /><br />名称：cut<br />使用权限：所有使用者<br />用法：cut -cnum1-num2 filename<br />说明：显示每行从开头算起 num1 到 num2 的文字。<br />范例：<br />shell&gt;&gt; cat example<br />shell&gt;&gt; cat example<br />test2<br />this is test1<br />shell&gt;&gt; cut -c0-6 example ## print 开头算起前 6 个字元<br />test2<br />this i<br /><br />名称 : find<br />用法 : find<br />使用说明 :<br />将档案系统内符合 expression 的档案列出来。你可以指要档案的名称、类别、<br />时间、大小、权限等不同资讯的组合，只有完全相符的才会被列出来。<br />find 根据下列规则判断 path 和 expression，在命令列上第一个 - ( ) , ! 之<br />前的部份为 path，之后的是 expression。如果 path 是空字串则使用目前路径<br />，如果 expression 是空字串则使用 -print 为预设 expression<br />expression 中可使用的选项有二三十个之多，在此只介绍最常用的部份。<br />-mount, -xdev : 只检查和指定目录在同一个档案系统下的档案，避免列出其它<br />档案系统中的档案<br />-amin n : 在过去 n 分钟内被读取过<br />-anewer file : 比档案 file 更晚被读取过的档案<br />-atime n : 在过去 n 天过读取过的档案<br />-cmin n : 在过去 n 分钟内被修改过<br />-cnewer file :比档案 file 更新的档案<br />-ctime n : 在过去 n 天过修改过的档案<br />-ctime n : 在过去 n 天过修改过的档案<br />-empty : 空的档案-gid n or -group name : gid 是 n 或是 group 名称是<br />name<br />-ipath p, -path p : 路径名称符合 p 的档案，ipath 会忽略大小写<br />-name name, -iname name : 档案名称符合 name 的档案。iname 会忽略大小写<br />-size n : 档案大小 是 n 单位，b 代表 512 位元组的区块，c 表示字元数，k<br />表示 kilo bytes，w 是二个位元组。-type c : 档案类型是 c 的档案。<br />d: 目录<br />c: 字型装置档案<br />b: 区块装置档案<br />p: 具名贮列<br />f: 一般档案<br />l: 符号连结<br />s: socket<br />-pid n : process id 是 n 的档案<br />你可以使用 ( ) 将运算式分隔，并使用下列运算。<br />exp1 -and exp2<br />! expr<br />-not expr<br />exp1 -or exp2<br />exp1, exp2<br />范例:<br />将目前目录及其子目录下所有延伸档名是 c 的档案列出来。<br />将目前目录及其子目录下所有延伸档名是 c 的档案列出来。<br /># find . -name "*.c"<br />将目前目录其其下子目录中所有一般档案列出<br /># find . -ftype f<br />将目前目录及其子目录下所有最近 20 分钟内更新过的档案列出<br /># find . -ctime -20<br /><br />名称：less<br />使用权限：所有使用者<br />使用方式：<br />less [Option] filename<br />说明：<br />less 的作用与 more 十分相似，都可以用来浏览文字档案的内容，不同的是<br />less 允许使用者往回卷动<br />以浏览已经看过的部份，同时因为 less 并未在一开始就读入整个档案，因此在<br />遇上大型档案的开启时，会比一般的文书编辑器(如 vi)来的快速。<br />范例：<br /><br />指令名称 : ln<br />使用权限 : 所有使用者<br />使用方式 : ln [options] source dist，其中 option 的格式为 :<br />[-bdfinsvF] [-S backup-suffix] [-V {numbered,existing,simple}]<br />[--help] [--version] [--]<br />说明 : linux/Unix 档案系统中，有所谓的连结(link)，我们可以将其视为档案<br />的别名，而连结又可分为两种 : 硬连结(hard link)与软连结(symbolic link)，<br />的别名，而连结又可分为两种 : 硬连结(hard link)与软连结(symbolic link)，<br />硬连结的意思是一个档案可以有多个名称，而软连结的方式则是产生一个特殊的<br />档案，该档案的内容是指向另一个档案的位置。硬连结是存在同一个档案系统中<br />，而软连结却可以跨越不同的档案系统。<br />ln source dist 是产生一个连结(dist)到 source，至于使用硬连结或软链结则<br />由参数决定。<br />不论是硬连结或软链结都不会将原本的档案复制一份，只会占用非常少量的磁碟<br />空间。<br />-f : 链结时先将与 dist 同档名的档案删除-d : 允许系统管理者硬链结自己的<br />目录-i : 在删除与 dist 同档名的档案时先进行询问-n : 在进行软连结时，将<br />dist 视为一般的档案-s : 进行软链结(symbolic link)-v : 在连结之前显示其<br />档名-b : 将在链结时会被覆写或删除的档案进行备份-S SUFFIX : 将备份的档案<br />都加上 SUFFIX 的字尾-V METHOD : 指定备份的方式--help : 显示辅助说<br />明--version : 显示版本<br />范例 :<br />将档案 yy 产生一个 symbolic link : zz<br />ln -s yy zz<br />将档案 yy 产生一个 hard link : zz<br />ln yy xx<br /><br />名称：locate<br />使用权限：所有使用者<br />使用方式： locate [-q] [-d ] [--database=]<br />locate [-r ] [--regexp=]<br />locate [-r ] [--regexp=]<br />locate [-qv] [-o ] [--output=]<br />locate [-e ] [-f ] &lt;[-l ] [-c]<br />&lt;[-U ] [-u]&gt;<br />locate [-Vh] [--version] [--help]<br />说明：<br />locate 让使用者可以很快速的搜寻档案系统内是否有指定的档案。其方法是先建<br />立一个包括系统内所有档案名称及路径的资料库，之后当寻找时就只需查询这个<br />资料库，而不必实际深入档案系统之中了。<br />在一般的 distribution 之中，资料库的建立都被放在 contab 中自动执行。一<br />般使用者在使用时只要用<br /># locate your_file_name<br />的型式就可以了。 参数：<br />-u<br />-U<br />建立资料库，-u 会由根目录开始，-U 则可以指定开始的位置。<br />-e<br />将<br />排除在寻找的范围之外。<br />-l<br />如果 是 1．则启动安全模式。在安全模式下，使用者不会看到权限无法看到的档<br />案。这会始速度减慢，因为 locate 必须至实际的档案系统中取得档案的权限资<br />料。<br />料。<br />-f<br />将特定的档案系统排除在外，例如我们没有到理要把 proc 档案系统中的档案放<br />在资料库中。<br />-q<br />安静模式，不会显示任何错误讯息。<br />-n<br />至多显示 个输出。<br />-r<br />使用正规运算式 做寻找的条件。<br />-o<br />指定资料库存的名称。<br />-d<br />指定资料库的路径<br />-h<br />显示辅助讯息<br />-v<br />显示更多的讯息<br />-V<br />显示程式的版本讯息 范例：<br />locate chdrv : 寻找所有叫 chdrv 的档案<br />locate -n 100 a.out : 寻找所有叫 a.out 的档案，但最多只显示 100 个<br />locate -u : 建立资料库<br />locate -u : 建立资料库<br /><br />名称 : ls<br />使用权限 : 所有使用者<br />使用方式 : ls [-alrtAFR] [name...]<br />说明 : 显示指定工作目录下之内容（列出目前工作目录所含之档案及子目录)。<br />-a 显示所有档案及目录 (ls内定将档案名或目录名称开头为"."的视为隐藏档，<br />不会列出)<br />-l 除档案名称外，亦将档案型态、权限、拥有者、档案大小等资讯详细列出<br />-r 将档案以相反次序显示(原定依英文字母次序)<br />-t 将档案依建立时间之先后次序列出<br />-A 同 -a ，但不列出 "." (目前目录) 及 ".." (父目录)<br />-F 在列出的档案名称后加一符号；例如可执行档则加 "*", 目录则加 "/"<br />-R 若目录下有档案，则以下之档案亦皆依序列出<br />范例：<br />列出目前工作目录下所有名称是 s 开头的档案，愈新的排愈后面 :<br />ls -ltr s*<br />将 /bin 目录以下所有目录及档案详细资料列出 :<br />ls -lR /bin<br />列出目前工作目录下所有档案及目录；目录于名称后加 "/", 可执行档于名称后<br />加 "*" :<br />ls -AF<br /><br />名称：more<br />使用权限：所有使用者<br />使用权限：所有使用者<br />使用方式：more [-dlfpcsu] [-num] [+/pattern] [+linenum] [fileNames..]<br />说明：类似 cat ，不过会以一页一页的显示方便使用者逐页阅读，而最基本的指<br />令就是按空白键（space）就往下一页显示，按 b 键就会往回（back）一页显示<br />，而且还有搜寻字串的功能（与 vi 相似），使用中的说明文件，请按 h 。<br />参数：-num 一次显示的行数<br />-d 提示使用者，在画面下方显示 [Press space to continue, q to quit.] ，<br />如果使用者按错键，则会显示 [Press h for instructions.] 而不是 哔 声<br />-l 取消遇见特殊字元 ^L（送纸字元）时会暂停的功能<br />-f 计算行数时，以实际上的行数，而非自动换行过后的行数（有些单行字数太长<br />的会被扩展为两行或两行以上）<br />-p 不以卷动的方式显示每一页，而是先清除萤幕后再显示内容<br />-c 跟 -p 相似，不同的是先显示内容再清除其他旧资料<br />-s 当遇到有连续两行以上的空白行，就代换为一行的空白行<br />-u 不显示下引号 （根据环境变数 TERM 指定的 terminal 而有所不同）<br />+/ 在每个档案显示前搜寻该字串（pattern），然后从该字串之后开始显示<br />+num 从第 num 行开始显示<br />fileNames 欲显示内容的档案，可为复数个数<br />范例：<br />more -s testfile 逐页显示 testfile 之档案内容，如有连续两行以上空白行则<br />以一行空白行显示。<br />more +20 testfile 从第 20 行开始显示 testfile 之档案内容。<br /><br />名称：mv<br />使用权限：所有使用者<br />使用方式：<br />mv [options] source dest<br />mv [options] source... directory<br />说明：将一个档案移至另一档案，或将数个档案移至另一目录。<br />参数：-i 若目的地已有同名档案，则先询问是否覆盖旧档。<br />范例：<br />将档案 aaa 更名为 bbb :<br />mv aaa bbb<br />将所有的C语言程式移至 Finished 子目录中 :<br />mv -i *.c<br /><br />名称：rm<br />使用权限：所有使用者<br />使用方式：rm [options] name...<br />说明：删除档案及目录。<br />把计<br />-i 删除前逐一询问确认。<br />-f 即使原档案属性设为唯读，亦直接删除，无需逐一确认。<br />-r 将目录及以下之档案亦逐一删除。<br />范例：<br />删除所有C语言程式档；删除前逐一询问确认 :<br />rm -i *.c<br />rm -i *.c<br />将 Finished 子目录及子目录中所有档案删除 :<br />rm -r Finished<br /><br />名称：rmdir<br />使用权限：于目前目录有适当权限的所有使用者<br />使用方式： rmdir [-p] dirName<br />说明： 删除空的目录。<br />参数： -p 是当子目录被删除后使它也成为空目录的话，则顺便一并删除。<br />范例：<br />将工作目录下，名为 AAA 的子目录删除 :<br />rmdir AAA<br />在工作目录下的 BBB 目录中，删除名为 Test 的子目录。若 Test 删除后，BBB<br />目录成为空目录，则 BBB 亦予删除。<br />rmdir -p BBB/Test<br /><br />名称：split<br />使用权限：所有使用者<br />使用方式：split [OPTION] [INPUT [PREFIX]<br />说明：<br />将一个档案分割成数个。而从 INPUT 分割输出成固定大小的档案，其档名依序为<br />PREFIXaa, PREFIXab...；PREFIX 预设值为 `x。若没有 INPUT 档或为 `-，则从<br />标准输入读进资料。<br />匡兜<br />-b, --bytes=SIZE<br />-b, --bytes=SIZE<br />SIZE 值为每一输出档案的大小，单位为 byte。<br />-C, --line-bytes=SIZE<br />每一输出档中，单行的最大 byte 数。<br />-l, --lines=NUMBER<br />NUMBER 值为每一输出档的列数大小。<br />-NUMBER<br />与 -l NUMBER 相同。<br />--verbose<br />于每个输出档被开启前，列印出侦错资讯到标准错误输出。<br />--help<br />显示辅助资讯然后离开。<br />--version<br />列出版本资讯然后离开。<br />SIZE 可加入单位: b 代表 512， k 代表 1K， m 代表 1 Meg。<br />范例：<br />PostgresSQL 大型资料库备份与回存：<br />因 Postgres 允许表格大过你系统档案的最大容量，所以要将表格 dump 到单一<br />的档案可能会有问题，使用 split进行档案分割。<br />% pg_dump dbname | split -b 1m - filename.dump.<br />重新载入<br />% createdb dbname<br />% cat filename.dump.* | pgsql dbname<br />% cat filename.dump.* | pgsql dbname<br /><br />名称：touch<br />使用权限：所有使用者<br />使用方式：<br />touch [-acfm]<br />[-r reference-file] [--file=reference-file]<br />[-t MMDDhhmm[CC]YY][.ss]<br />[-d time] [--date=time] [--time={atime,access,use,mtime,modify}]<br />[--no-create] [--help] [--version]<br />file1 [file2 ...]<br />说明：<br />touch 指令改变档案的时间记录。 ls -l 可以显示档案的时间记录。<br />参数：<br />a 改变档案的读取时间记录。<br />m 改变档案的修改时间记录。<br />c 假如目的档案不存在，不会建立新的档案。与 --no-create 的效果一样。<br />f 不使用，是为了与其他 unix 系统的相容性而保留。<br />r 使用参考档的时间记录，与 --file 的效果一样。<br />d 设定时间与日期，可以使用各种不同的格式。<br />t 设定档案的时间记录，格式与 date 指令相同。<br />--no-create 不会建立新档案。<br />--help 列出指令格式。<br />--version 列出版本讯息。<br />--version 列出版本讯息。<br />范例：<br />最简单的使用方式，将档案的时候记录改为现在的时间。若档案不存在，系统会<br />建立一个新的档案。<br />touch file<br />touch file1 file2<br />将 file 的时间记录改为 5 月 6 日 18 点 3 分，公元两千年。时间的格式可以<br />参考 date 指令，至少需输入 MMDDHHmm ，就是月日时与分。<br />touch -c -t 05061803 file<br />touch -c -t 050618032000 file<br />将 file 的时间记录改变成与 referencefile 一样。<br />touch -r referencefile file<br />将 file 的时间记录改成 5 月 6 日 18 点 3 分，公元两千年。时间可以使用<br />am, pm 或是 24 小时的格式，日期可以使用其他格式如 6 May 2000 。<br />touch -d "6:03pm" file<br />touch -d "05/06/2000" file<br />touch -d "6:03pm 05/06/2000" file<br /><br />名称 : at<br />使用权限 : 所有使用者<br />使用方式 : at -V [-q queue] [-f file] [-mldbv] TIME<br />说明 : at 可以让使用者指定在 TIME 这个特定时刻执行某个程式或指令，TIME<br />的格式是 HH:MM其中的 HH 为小时，MM 为分钟，甚至你也可以指定 am, pm,<br />midnight, noon, teatime(就是下午 4 点锺)等口语词。<br />midnight, noon, teatime(就是下午 4 点锺)等口语词。<br />如果想要指定超过一天内的时间，则可以用 MMDDYY 或者 MM/DD/YY 的格式，其<br />中 MM 是分钟，DD 是第几日，YY 是指年份。另外，使用者甚至也可以使用像是<br />now + 时间间隔来弹性指定时间，其中的时间间隔可以是 minutes, hours,<br />days, weeks<br />另外，使用者也可指定 today 或 tomorrow 来表示今天或明天。当指定了时间并<br />按下 enter 之后，at 会进入交谈模式并要求输入指令或程式，当你输入完后按<br />下 ctrl+D 即可完成所有动作，至于执行的结果将会寄回你的帐号中。<br />把计 :<br />-V : 印出版本编号<br />-q : 使用指定的伫列(Queue)来储存，at 的资料是存放在所谓的 queue 中，使<br />用者可以同时使用多个 queue，而 queue 的编号为 a, b, c... z 以及 A, B,<br />... Z 共 52 个<br />-m : 即使程式/指令执行完成后没有输出结果, 也要寄封信给使用者<br />-f file : 读入预先写好的命令档。使用者不一定要使用交谈模式来输入，可以<br />先将所有的指定先写入档案后再一次读入<br />-l : 列出所有的指定 (使用者也可以直接使用 atq 而不用 at -l)<br />-d : 删除指定 (使用者也可以直接使用 atrm 而不用 at -d)<br />-v : 列出所有已经完成但尚未删除的指定<br />例子 :<br />三天后的下午 5 点锺执行 /bin/ls :<br />at 5pm + 3 days /bin/ls<br />三个星期后的下午 5 点锺执行 /bin/ls :<br />三个星期后的下午 5 点锺执行 /bin/ls :<br />at 5pm + 2 weeks /bin/ls<br />明天的 17:20 执行 /bin/date :<br />at 17:20 tomorrow /bin/date<br />1999 年的最后一天的最后一分钟印出 the end of world !<br />at 23:59 12/31/1999 echo the end of world !<br /><br />名称：cal<br />使用权限：所有使用者<br />使用方式：cal [-mjy] [month [year]<br />说明：<br />显示日历。若只有一个参数，则代表年份(1-9999)，显示该年的年历。年份必须<br />全部写出：``cal 89 将不会是显示 1989 年的年历。使用两个参数，则表示月份<br />及年份。若没有参数则显示这个月的月历。<br />1752 年 9 月第 3 日起改用西洋新历，因这时大部份的国家都采用新历，有 10<br />天被去除，所以该月份的月历有些不同。在此之前为西洋旧历。<br />匡兜<br />-m : 以星期一为每周的第一天方式显示。<br />-j : 以凯撒历显示，即以一月一日起的天数显示。<br />-y : 显示今年年历。<br />范例：<br />cal : 显示本月的月历。<br />[root@mylinux /root]# date<br />Tue Aug 15 08:00:18 CST 2000<br />Tue Aug 15 08:00:18 CST 2000<br />[root@mylinux /root]# cal<br />August 2000<br />Su Mo Tu We Th Fr Sa<br />1 2 3 4 5<br />6 7 8 9 10 11 12<br />13 14 15 16 17 18 19<br />20 21 22 23 24 25 26<br />27 28 29 30 31<br />[root@mylinux /root]#<br />cal 2001 : 显示公元 2001 年年历。<br />[root@mylinux /root]# cal 2001<br />2001<br />January February March<br />Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa<br />1 2 3 4 5 6 1 2 3 1 2 3<br />7 8 9 10 11 12 13 4 5 6 7 8 9 10 4 5 6 7 8 9 10<br />14 15 16 17 18 19 20 11 12 13 14 15 16 17 11 12 13 14 15 16 17<br />21 22 23 24 25 26 27 18 19 20 21 22 23 24 18 19 20 21 22 23 24<br />28 29 30 31 25 26 27 28 25 26 27 28 29 30 31<br />April May June<br />Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa<br />1 2 3 4 5 6 7 1 2 3 4 5 1 2<br />1 2 3 4 5 6 7 1 2 3 4 5 1 2<br />8 9 10 11 12 13 14 6 7 8 9 10 11 12 3 4 5 6 7 8 9<br />15 16 17 18 19 20 21 13 14 15 16 17 18 19 10 11 12 13 14 15 16<br />22 23 24 25 26 27 28 20 21 22 23 24 25 26 17 18 19 20 21 22 23<br />29 30 27 28 29 30 31 24 25 26 27 28 29 30<br />July August September<br />Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa<br />1 2 3 4 5 6 7 1 2 3 4 1<br />8 9 10 11 12 13 14 5 6 7 8 9 10 11 2 3 4 5 6 7 8<br />15 16 17 18 19 20 21 12 13 14 15 16 17 18 9 10 11 12 13 14 15<br />22 23 24 25 26 27 28 19 20 21 22 23 24 25 16 17 18 19 20 21 22<br />29 30 31 26 27 28 29 30 31 23 24 25 26 27 28 29<br />30<br />October November December<br />Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa<br />1 2 3 4 5 6 1 2 3 1<br />7 8 9 10 11 12 13 4 5 6 7 8 9 10 2 3 4 5 6 7 8<br />14 15 16 17 18 19 20 11 12 13 14 15 16 17 9 10 11 12 13 14 15<br />21 22 23 24 25 26 27 18 19 20 21 22 23 24 16 17 18 19 20 21 22<br />28 29 30 31 25 26 27 28 29 30 23 24 25 26 27 28 29<br />30 31<br />[root@mylinux /root]#<br />cal 5 2001 : 显示公元 2001 年 5 月月历。<br />cal 5 2001 : 显示公元 2001 年 5 月月历。<br />[root@mylinux /root]# cal 5 2001<br />May 2001<br />Su Mo Tu We Th Fr Sa<br />1 2 3 4 5<br />6 7 8 9 10 11 12<br />13 14 15 16 17 18 19<br />20 21 22 23 24 25 26<br />27 28 29 30 31<br />[root@mylinux /root]#<br />cal -m : 以星期一为每周的第一天方式，显示本月的月历。<br />[root@mylinux /root]# cal -m<br />August 2000<br />Mo Tu We Th Fr Sa Su<br />1 2 3 4 5 6<br />7 8 9 10 11 12 13<br />14 15 16 17 18 19 20<br />21 22 23 24 25 26 27<br />28 29 30 31<br />[root@mylinux /root]#<br />cal -jy : 以一月一日起的天数显示今年的年历。<br />[root@mylinux /root]# cal -jy<br />2000<br />2000<br />January February<br />Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat<br />1 32 33 34 35 36<br />2 3 4 5 6 7 8 37 38 39 40 41 42 43<br />9 10 11 12 13 14 15 44 45 46 47 48 49 50<br />16 17 18 19 20 21 22 51 52 53 54 55 56 57<br />23 24 25 26 27 28 29 58 59 60<br />30 31<br />March April<br />Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat<br />61 62 63 64 92<br />65 66 67 68 69 70 71 93 94 95 96 97 98 99<br />72 73 74 75 76 77 78 100 101 102 103 104 105 106<br />79 80 81 82 83 84 85 107 108 109 110 111 112 113<br />86 87 88 89 90 91 114 115 116 117 118 119 120<br />121<br />May June<br />Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat<br />122 123 124 125 126 127 153 154 155<br />128 129 130 131 132 133 134 156 157 158 159 160 161 162<br />135 136 137 138 139 140 141 163 164 165 166 167 168 169<br />142 143 144 145 146 147 148 170 171 172 173 174 175 176<br />142 143 144 145 146 147 148 170 171 172 173 174 175 176<br />149 150 151 152 177 178 179 180 181 182<br />July August<br />Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat<br />183 214 215 216 217 218<br />184 185 186 187 188 189 190 219 220 221 222 223 224 225<br />191 192 193 194 195 196 197 226 227 228 229 230 231 232<br />198 199 200 201 202 203 204 233 234 235 236 237 238 239<br />205 206 207 208 209 210 211 240 241 242 243 244<br />212 213<br />September October<br />Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat<br />245 246 275 276 277 278 279 280 281<br />247 248 249 250 251 252 253 282 283 284 285 286 287 288<br />254 255 256 257 258 259 260 289 290 291 292 293 294 295<br />261 262 263 264 265 266 267 296 297 298 299 300 301 302<br />268 269 270 271 272 273 274 303 304 305<br />November December<br />Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat<br />306 307 308 309 336 337<br />310 311 312 313 314 315 316 338 339 340 341 342 343 344<br />317 318 319 320 321 322 323 345 346 347 348 349 350 351<br />324 325 326 327 328 329 330 352 353 354 355 356 357 358<br />324 325 326 327 328 329 330 352 353 354 355 356 357 358<br />331 332 333 334 335 359 360 361 362 363 364 365<br />366<br /><br />名称 : crontab<br />使用权限 : 所有使用者<br />使用方式 :<br />crontab [ -u user ] filecrontab [ -u user ] { -l | -r | -e }<br />说明 :<br />crontab 是用来让使用者在固定时间或固定间隔执行程式之用，换句话说，也就<br />是类似使用者的时程表。-u user 是指设定指定 user 的时程表，这个前提是你<br />必须要有其权限(比如说是 root)才能够指定他人的时程表。如果不使用 -u<br />user 的话，就是表示设定自己的时程表。<br />餐数 :<br />-e : 执行文字编辑器来设定时程表，内定的文字编辑器是 VI，如果你想用别的<br />文字编辑器，则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比如说<br />setenv VISUAL joe)<br />-r : 删除目前的时程表<br />-l : 列出目前的时程表<br />时程表的格式如下 :<br />f1 f2 f3 f4 f5 program<br />其中 f1 是表示分钟，f2 表示小时，f3 表示一个月份中的第几日，f4 表示月份<br />，f5 表示一个星期中的第几天。program 表示要执行的程式。<br />，f5 表示一个星期中的第几天。program 表示要执行的程式。<br />当 f1 为 * 时表示每分钟都要执行 program，f2 为 * 时表示每小时都要执行程<br />式，其余类推<br />当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行，f2 为 a-b 时<br />表示从第 a 到第 b 小时都要执行，其余类推<br />当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次，f2 为 */n 表示每 n 小时<br />个时间间隔执行一次，其余类推<br />当 f1 为 a, b, c,... 时表示第 a, b, c,... 分钟要执行，f2 为 a, b,<br />c,... 时表示第 a, b, c...个小时要执行，其余类推<br />使用者也可以将所有的设定先存放在档案 file 中，用 crontab file 的方式来<br />设定时程表。<br />例子 :<br />每月每天每小时的第 0 分钟执行一次 /bin/ls :<br />0 7 * * * /bin/ls<br />在 12 月内, 每天的早上 6 点到 12 点中，每隔 20 分钟执行一次<br />/usr/bin/backup :<br />0 6-12/3 * 12 * /usr/bin/backup<br />周一到周五每天下午 5:00 寄一封信给 alex@domain.name :<br />0 17 * * 1-5 mail -s "hi" alex@domain.name &lt; /tmp/maildata<br />每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分....执行 echo "haha"<br />20 0-23/2 * * * echo "haha"<br />注意 :<br />当程式在你所指定的时间执行后，系统会寄一封信给你，显示该程式执行的内容<br />当程式在你所指定的时间执行后，系统会寄一封信给你，显示该程式执行的内容<br />，若是你不希望收到这样的信，请在每一行空一格之后加上 &gt; /dev/null 2&gt;&amp;1<br />即可。<br /><br />名称 : date<br />使用权限 : 所有使用者<br />使用方式 :<br />date [-u] [-d datestr] [-s datestr] [--utc] [--universal]<br />[--date=datestr] [--set=datestr] [--help] [--version] [+formAT]<br />[MMDDhhmm[CC]YY][.ss]<br />说明 :<br />date 可以用来显示或设定系统的日期与时间，在显示方面，使用者可以设定欲显<br />示的格式，格式设定为一个加号后接数个标记，其中可用的标记列表如下 :<br />时间方面 :<br />% : 印出 %<br />%n : 下一行<br />%t : 跳格<br />%H : 小时(00..23)<br />%I : 小时(01..12)<br />%k : 小时(0..23)<br />%l : 小时(1..12)<br />%M : 分钟(00..59)<br />%p : 显示本地 AM 或 PM<br />%r : 直接显示时间 (12 小时制，格式为 hh:mm:ss [AP]M)<br />%r : 直接显示时间 (12 小时制，格式为 hh:mm:ss [AP]M)<br />%s : 从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止的秒数<br />%S : 秒(00..61)<br />%T : 直接显示时间 (24 小时制)<br />%X : 相当于 %H:%M:%S<br />%Z : 显示时区<br />日期方面 :<br />%a : 星期几 (Sun..Sat)<br />%A : 星期几 (Sunday..Saturday)<br />%b : 月份 (Jan..Dec)<br />%B : 月份 (January..December)<br />%c : 直接显示日期与时间<br />%d : 日 (01..31)<br />%D : 直接显示日期 (mm/dd/yy)<br />%h : 同 %b<br />%j : 一年中的第几天 (001..366)<br />%m : 月份 (01..12)<br />%U : 一年中的第几周 (00..53) (以 Sunday 为一周的第一天的情形)<br />%w : 一周中的第几天 (0..6)<br />%W : 一年中的第几周 (00..53) (以 Monday 为一周的第一天的情形)<br />%x : 直接显示日期 (mm/dd/yy)<br />%y : 年份的最后两位数字 (00.99)<br />%Y : 完整年份 (0000..9999)<br />%Y : 完整年份 (0000..9999)<br />若是不以加号作为开头，则表示要设定时间，而时间格式为<br />MMDDhhmm[CC]YY][.ss]，其中 MM 为月份，DD 为日，hh 为小时，mm 为分钟<br />，CC 为年份前两位数字，YY 为年份后两位数字，ss 为秒数<br />把计 :<br />-d datestr : 显示 datestr 中所设定的时间 (非系统时间)<br />--help : 显示辅助讯息<br />-s datestr : 将系统时间设为 datestr 中所设定的时间<br />-u : 显示目前的格林威治时间<br />--version : 显示版本编号<br />例子 :<br />显示时间后跳行，再显示目前日期 :<br />date +%T%n%D<br />显示月份与日数 :<br />date +%B %d<br />显示日期与设定时间(12:34:56) :<br />date --date 12:34:56<br />注意 :<br />当你不希望出现无意义的 0 时(比如说 1999/03/07)，则可以在标记中插入 - 符<br />号，比如说 date +%-H:%-M:%-S 会把时分秒中无意义的 0 给去掉，像是原本的<br />08:09:04 会变为 8:9:4。另外，只有取得权限者(比如说 root)才能设定系统时<br />间。<br />当你以 root 身分更改了系统时间之后，请记得以 clock -w 来将系统时间写入<br />当你以 root 身分更改了系统时间之后，请记得以 clock -w 来将系统时间写入<br />CMOS 中，这样下次重新开机时系统时间才会持续抱持最新的正确值。<br /><br />名称 : sleep<br />使用权限 : 所有使用者<br />使用方式 : sleep [--help] [--version] number[smhd]<br />说明 : sleep 可以用来将目前动作延迟一段时间<br />参数说明 :<br />--help : 显示辅助讯息<br />--version : 显示版本编号<br />number : 时间长度，后面可接 s、m、h 或 d<br />其中 s 为秒，m 为 分钟，h 为小时，d 为日数<br />例子 :<br />显示目前时间后延迟 1 分钟，之后再次显示时间 :<br />date;sleep 1m;date<br /><br />名称： time<br />使用权限： 所有使用者<br />使用方式： time [options] COMMAND [arguments]<br />说明： time 指令的用途，在于量测特定指令执行时所需消耗的时间及系统资源<br />等资讯。例如 CPU 时间、记忆体、输入输出等等。需要特别注意的是，部分资讯<br />在 linux 上显示不出来。这是因为在 Linux 上部分资源的分配函式与 time 指<br />令所预设的方式并不相同，以致于 time 指令无法取得这些资料。<br />把计<br />-o or --output=FILE<br />-o or --output=FILE<br />设定结果输出档。这个选项会将 time 的输出写入 所指定的档案中。如果档案已<br />经存在，系统将覆写其内容。<br />-a or --append<br />配合 -o 使用，会将结果写到档案的末端，而不会覆盖掉原来的内容。<br />-f formAT or --format=formAT<br />以 formAT 字串设定显示方式。当这个选项没有被设定的时候，会用系统预设的<br />格式。不过你可以用环境变数 time 来设定这个格式，如此一来就不必每次登入<br />系统都要设定一次。<br />一般设定上，你可以用<br />t<br />表示跳栏，或者是用<br />n<br />表示换行。每一项资料要用 % 做为前导。如果要在字串中使用百分比符号，就用<br />。（学过 C 语言的人大概会觉得很熟悉）<br />time 指令可以显示的资源有四大项，分别是：<br />Time resources<br />Memory resources<br />IO resources<br />Command info<br />详细的内容如下：<br />Time Resources<br />E 执行指令所花费的时间，格式是：[hour]:minute:second。请注意这个数字并<br />E 执行指令所花费的时间，格式是：[hour]:minute:second。请注意这个数字并<br />不代表实际的 CPU 时间。<br />e 执行指令所花费的时间，单位是秒。请注意这个数字并不代表实际的 CPU 时间<br />。<br />S 指令执行时在核心模式（kernel mode）所花费的时间，单位是秒。<br />U 指令执行时在使用者模式（user mode）所花费的时间，单位是秒。<br />P 执行指令时 CPU 的占用比例。其实这个数字就是核心模式加上使用者模式的<br />CPU 时间除以总时间。<br />Memory Resources<br />M 执行时所占用的实体记忆体的最大值。单位是 KB<br />t 执行时所占用的实体记忆体的平均值，单位是 KB<br />K 执行程序所占用的记忆体总量（stack+data+text）的平均大小，单位是 KB<br />D 执行程序的自有资料区（unshared data area）的平均大小，单位是 KB<br />p 执行程序的自有堆叠（unshared stack）的平均大小，单位是 KB<br />X 执行程序间共享内容（shared text）的平均值，单位是 KB<br />Z 系统记忆体页的大小，单位是 byte。对同一个系统来说这是个常数<br />IO Resources<br />F 此程序的主要记忆体页错误发生次数。所谓的主要记忆体页错误是指某一记忆<br />体页已经置换到置换档（swap file)中，而且已经分配给其他程序。此时该页的<br />内容必须从置换档里再读出来。<br />R 此程序的次要记忆体页错误发生次数。所谓的次要记忆体页错误是指某一记忆<br />体页虽然已经置换到置换档中，但尚未分配给其他程序。此时该页的内容并未被<br />破坏，不必从置换档里读出来<br />破坏，不必从置换档里读出来<br />W 此程序被交换到置换档的次数<br />c 此程序被强迫中断（像是分配到的 CPU 时间耗尽）的次数<br />w 此程序自愿中断（像是在等待某一个 I/O 执行完毕，像是磁碟读取等等）的次<br />数<br />I 此程序所输入的档案数<br />O 此程序所输出的档案数<br />r 此程序所收到的 Socket Message<br />s 此程序所送出的 Socket Message<br />k 此程序所收到的信号 ( Signal )数量<br />Command Info<br />C 执行时的参数以及指令名称<br />x 指令的结束代码 ( Exit Status )<br />-p or --portability<br />这个选项会自动把显示格式设定成为：<br />real %e<br />user %U<br />sys %S<br />这么做的目的是为了与 POSIX 规格相容。<br />-v or --verbose<br />这个选项会把所有程式中用到的资源通通列出来，不但如一般英文语句，还有说<br />明。对不想花时间去熟习格式设定或是刚刚开始接触这个指令的人相当有用。<br />范例：<br />范例：<br />利用下面的指令<br />time -v ps -aux<br />我们可以获得执行 ps -aux 的结果和所花费的系统资源。如下面所列的资料：<br />USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND<br />root 1 0.0 0.4 1096 472 ? S Apr19 0:04 init<br />root 2 0.0 0.0 0 0 ? SW Apr19 0:00 [kflushd]<br />root 3 0.0 0.0 0 0 ? SW Apr19 0:00 [kpiod]<br />......<br />root 24269 0.0 1.0 2692 996 pts/3 R 12:16 0:00 ps -aux<br />Command being timed: "ps -aux"<br />User time (seconds): 0.05<br />System time (seconds): 0.06<br />Percent of CPU this job got: 68%<br />Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.16<br />Average shared text size (kbytes): 0<br />Average unshared data size (kbytes): 0<br />Average stack size (kbytes): 0<br />Average total size (kbytes): 0<br />Maximum resident set size (kbytes): 0<br />Average resident set size (kbytes): 0<br />Major (requiring I/O) page faults: 238<br />Minor (reclaiming a frame) page faults: 46<br />Minor (reclaiming a frame) page faults: 46<br />Voluntary context switches: 0<br />Involuntary context switches: 0<br />Swaps: 0<br />File system inputs: 0<br />File system outputs: 0<br />Socket messages sent: 0<br />Socket messages received: 0<br />Signals delivered: 0<br />Page size (bytes): 4096<br />Exit status: 0<br />名称： uptime<br />使用权限： 所有使用者<br /><br />使用方式： uptime [-V]<br />说明： uptime 提供使用者下面的资讯，不需其他参数：<br />现在的时间<br />系统开机运转到现在经过的时间<br />连线的使用者数量<br />最近一分钟，五分钟和十五分钟的系统负载<br />参数： -V 显示版本资讯。<br />范例： uptime<br />其结果为：<br />10:41am up 5 days, 10 min, 1 users, load average: 0.00, 0.00, 1.99<br />10:41am up 5 days, 10 min, 1 users, load average: 0.00, 0.00, 1.99<br /><br />名称：chfn<br />使用权限：所有使用者<br />用法：shell&gt;&gt; chfn<br />说明：提供使用者更改个人资讯，用于 finger and mail username<br />范例：<br />shell&gt;&gt; chfn<br />Changing finger information for user<br />Password: [del]<br />Name[]:Johnney Huang ### 提供 finger 时的资料<br />Office[]:NCCU<br />Office Phone[]: [del]<br />Home Phone[]: [del]<br /><br />名称：chsh<br />使用权限：所有使用者<br />用法：shell&gt;&gt; chsh<br />说明：更改使用者 shell 设定<br />范例：<br />shell&gt;&gt; chsh<br />Changing fihanging shell for user1<br />Password: [del]<br />New shell [/bin/tcsh]: ### [是目前使用的 shell]<br />[del]<br />[del]<br />shell&gt;&gt; chsh -l ### 展示 /etc/shells 档案内容<br />/bin/bash<br />/bin/sh<br />/bin/ash<br />/bin/bsh<br />/bin/tcsh<br />/bin/csh<br /><br />名称： finger<br />使用权限： 所有使用者<br />使用方式： finger [options] user[@address]<br />说明：finger 可以让使用者查询一些其他使用者的资料。会列出来的资料有：<br />Login Name<br />User Name<br />Home directory<br />Shell<br />Login status<br />mail status<br />.plan<br />.project<br />.forward<br />其中 .plan ，.project 和 .forward 就是使用者在他的 Home Directory 里的<br />其中 .plan ，.project 和 .forward 就是使用者在他的 Home Directory 里的<br />.plan ， .project 和 .forward 等档案里的资料。如果没有就没有。finger 指<br />令并不限定于在同一伺服器上查询，也可以寻找某一个远端伺服器上的使用者。<br />只要给一个像是 E-mail address 一般的地址即可。<br />把计<br />-l<br />多行显示。<br />-s<br />单行显示。这个选项只显示登入名称，真实姓名，终端机名称，闲置时间，登入<br />时间，办公室号码及电话号码。如果所查询的使用者是远端伺服器的使用者，这<br />个选项无效。<br />范例：下列指令可以查询本机管理员的资料：<br />finger root<br />其结果如下：<br />Login: root Name: root<br />Directory: /root Shell: /bin/bash<br />Never logged in.<br />No mail.<br />No Plan.<br /><br />名称：last<br />使用权限：所有使用者<br />使用方式：shell&gt;&gt; last [options]<br />说明：显示系统开机以来获是从每月初登入者的讯息<br />说明：显示系统开机以来获是从每月初登入者的讯息<br />把计<br />-R 省略 hostname 的栏位<br />-num 展示前 num 个<br />username 展示 username 的登入讯息<br />tty 限制登入讯息包含终端机代号<br />范例：<br />shell&gt;&gt; last -R -2<br />johnney pts/1 Mon Aug 14 20:42 still logged in<br />johnney pts/0 Mon Aug 14 19:59 still logged in<br />wtmp begins Tue Aug 1 09:01:10 2000 ### /var/log/wtmp<br />shell&gt;&gt; last -2 minery<br />minery pts/0 140.119.217.115 Mon Aug 14 18:37 - 18:40 (00:03)<br />minery pts/0 140.119.217.115 Mon Aug 14 17:22 - 17:24 (00:02)<br />wtmp begins Tue Aug 1 09:01:10 2000<br />名称:login<br />这个命令都不会就不要干算了！呵呵我也不在这里多费笔墨耽误大家美好青春了^_^<br /><br />名称：passwd<br />使用权限：所有使用者<br />使用方式：passwd [-k] [-l] [-u [-f] [-d] [-S] [username]<br />说明：用来更改使用者的密码<br />参数：<br />参数：<br />-k<br />-l<br />-u<br />-f<br />-d 关闭使用者的密码认证功能, 使用者在登入时将可以不用输入密码, 只有具备<br />root 权限的使用者方可使用.<br />-S 显示指定使用者的密码认证种类, 只有具备 root 权限的使用者方可使用.<br />[username] 指定帐号名称.<br /><br />名称 : who<br />使用权线 : 所有使用者都可使用<br />使用方式 : who - [husfV] [user]<br />说明 : 显示系统中有那些使用者正在上面，显示的资料包含了使用者 ID，使用<br />的终端机，从那边连上来的，上线时间，呆滞时间，CPU 使用量，动作等等。<br />把计 :<br />-h : 不要显示标题列<br />-u : 不要显示使用者的动作/工作<br />-s : 使用简短的格式来显示<br />-f : 不要显示使用者的上线位置<br />-V : 显示程式版本<br /><br />名称：/etc/aliases<br />使用权限：系统管理者<br />使用方式： 请用 newaliases 更新资料库<br />说明：<br />sendmail 会使用一个在 /etc/aliases 中的档案做使用者名称转换的动作。当<br />sendmail 收到一个要送给 xxx 的信时，它会依据 aliases档的内容送给另一个<br />使用者。这个功能可以创造一个只有在信件系统内才有效的使用者。例如<br />mailing list 就会用到这个功能，在 mailinglist 中，我们可能会创造一个叫<br />redlinux@link.ece.uci.edu 的 mailinglist，但实际上并没有一个叫<br />redlinux 的使用者。实际 aliases 档的内容是将送给这个使用者的信都收给<br />mailing list 处理程式负责分送的工作。<br />/etc/aliases 是一个文字模式的档案，sendmail 需要一个二进位格式的<br />/etc/aliases.db。newaliases 的功能传是将 /etc/aliases 转换成一个<br />sendmail 所能了解的资料库。范例：<br /># newaliases<br />下面命令会做相同的事，<br /># sendmail -bi<br />相关命令:<br />mail, mailq, newaliases, sendmail<br /><br />名称：mail<br />使用权限：所有使用者<br />使用方式：mail [-iInv] [-s subject] [-c cc-addr] [-b bcc-addr] user1<br />[user 2 ...]<br />说明：<br />说明：<br />mail 不仅只是一个指令， mail 还是一个电子邮件程式，不过利用 mail 来读信<br />的人应该很少吧！对于系统管理者来说 mail 就很有用，因为管理者可以用<br />mail 写成 script ，定期寄一些备忘录提醒系统的使用者。<br />参数：<br />i 忽略 tty 的中断讯号。 (interrupt)<br />I 强迫设成互动模式。 (Interactive)<br />v 列印出讯息，例如送信的地点、状态等等。 (verbose)<br />n 不读入 mail.rc 设定档。<br />s 邮件标题。<br />c cc 邮件地址。<br />b bcc 邮件地址。<br />范例：<br />将信件送给一个或以上的电子邮件地址，由于没有加入其他的选项，使用者必须<br />输入标题与信件的内容等。而 user2 没有主机位置，就会送给邮件伺服器的<br />user2 使用者。<br />mail user1@email.address<br />mail user1@email.address user2<br />将 mail.txt 的内容寄给 user2 同时 cc 给 user1 。如果将这一行指令设成<br />cronjob 就可以定时将备忘录寄给系统使用者。<br />mail -s 标题 -c user1 user2 &lt; mail.txt<br /><br />指令：mesg<br />使用权限 : 所有使用者<br />使用权限 : 所有使用者<br />使用方式 : mesg [y|n]<br />说明 ： 决定是否允许其他人传讯息到自己的终端机介面<br />把计 <br />y : 允许讯息传到终端机介面上。<br />n : 不允许讯息传到终端机介面上 。<br />如果没有设定，则讯息传递与否则由终端机界面目前状态而定。<br />例子 :<br />改变目前讯息设定，改成不允许讯息传到终端机介面上 :<br />mesg n<br />与 mesg 相关的指令有： talk，write，wall。<br /><br /><br />名称 : talk<br />使用权限 : 所有使用者<br />使用方式 :<br />talk person [ttyname]<br />说明 : 与其他使用者对谈<br />把计 :<br />person : 预备对谈的使用者帐号，如果该使用者在其他机器上，则可输入<br />person@machine.name<br />ttyname : 如果使用者同时有两个以上的 tty 连线，可以自行选择合适的 tty<br />传讯息<br />例子.1 :<br />与现在机器上的使用者Rollaend对谈，此时 Rollaend 只有一个连线 :<br />talk Rollaend<br />接下来就是等Rollaend回应，若Rollaend接受，则Rollaend输入 `talk jzlee`即<br />接下来就是等Rollaend回应，若Rollaend接受，则Rollaend输入 `talk jzlee`即<br />可开始对谈，结束请按 ctrl+c<br />例子.2 :与linuxfab.cx上的使用者Rollaend对谈，使用pts/2来对谈 :<br />talk Rollaend@linuxfab.cx pts/2<br />接下来就是等Rollaend回应，若Rollaend接受，则Rollaend输入 `talk<br />jzlee@jzlee.home`即可开始对谈，结束请按 ctrl+c<br />注意 : 若萤幕的字会出现不正常的字元，试着按 ctrl+l 更新萤幕画面。<br /><br />名称 : wall<br />使用权限 : 所有使用者<br />使用方式 :<br />wall [ message ]<br />使用说明：<br />wall 会将讯息传给每一个 mesg 设定为 yes 的上线使用者。当使用终端机介面<br />做为标准传入时, 讯息结束时需加上 EOF (通常用 Ctrl+D)<br />例子 :<br />传讯息"hi" 给每一个使用者 :<br />wall hi<br />名称 : write<br />使用权限 : 所有使用者<br />使用方式 :<br />write user [ttyname]<br />说明 : 传讯息给其他使用者<br />把计 :<br />把计 :<br />user : 预备传讯息的使用者帐号<br />ttyname : 如果使用者同时有两个以上的 tty 连线，可以自行选择合适的 tty<br />传讯息<br />例子.1 :<br />传讯息给 Rollaend，此时 Rollaend 只有一个连线 :<br />write Rollaend<br />接下来就是将讯息打上去，结束请按 ctrl+c<br />例子.2 :传讯息给 Rollaend，Rollaend 的连线有 pts/2，pts/3 :<br />write Rollaend pts/2<br />接下来就是将讯息打上去，结束请按 ctrl+c<br />注意 : 若对方设定 mesg n，则此时讯席将无法传给对方<br /><br />名称：kill<br />使用权限：所有使用者<br />使用方式：<br />kill [ -s signal | -p ] [ -a ] pid ...<br />kill -l [ signal ]<br />说明：kill 送出一个特定的信号 (signal) 给行程 id 为 pid 的行程根据该信<br />号而做特定的动作, 若没有指定, 预设是送出终止 (TERM) 的信号<br />把计<br />-s (signal) : 其中可用的讯号有 HUP (1), KILL (9), TERM (15), 分别代表着<br />重跑, 砍掉, 结束; 详细的信号可以用 kill -l<br />-p : 印出 pid , 并不送出信号<br />-p : 印出 pid , 并不送出信号<br />-l (signal) : 列出所有可用的信号名称<br />范例：<br />将 pid 为 323 的行程砍掉 (kill) :<br />kill -9 323<br />将 pid 为 456 的行程重跑 (restart) :<br />kill -HUP 456<br /><br />名称：nice<br />使用权限：所有使用者<br />使用方式：nice [-n adjustment] [-adjustment] [--adjustment=adjustment]<br />[--help] [--version] [command [arg...]<br />说明：以更改过的优先序来执行程式, 如果未指定程式, 则会印出目前的排程优<br />先序, 内定的 adjustment 为 10, 范围为 -20 (最高优先序) 到 19 (最低优先<br />序)<br />把计<br />-n adjustment, -adjustment, --adjustment=adjustment 皆为将该原有优先序<br />的增加 adjustment<br />--help 显示求助讯息<br />--version 显示版本资讯<br />范例：<br />将 ls 的优先序加 1 并执行 :<br />nice -n 1 ls<br />将 ls 的优先序加 10 并执行 :<br />将 ls 的优先序加 10 并执行 :<br />nice ls将 ls 的优先序加 10 并执行<br />注意 : 优先序 (priority) 为作业系统用来决定 CPU 分配的参数，linux 使用<br />『回合制(round-robin)』的演算法来做 CPU 排程，优先序越高，所可能获得的<br />CPU时间就越多。<br /><br />名称：ps<br />使用权限：所有使用者<br />使用方式：ps [options] [--help]<br />说明：显示瞬间行程 (process) 的动态<br />参数：<br />ps 的参数非常多, 在此仅列出几个常用的参数并大略介绍含义<br />-A 列出所有的行程<br />-w 显示加宽可以显示较多的资讯<br />-au 显示较详细的资讯<br />-aux 显示所有包含其他使用者的行程<br />au(x) 输出格式 :<br />USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND<br />USER: 行程拥有者<br />PID: pid<br />%CPU: 占用的 CPU 使用率<br />%MEM: 占用的记忆体使用率<br />VSZ: 占用的虚拟记忆体大小<br />RSS: 占用的记忆体大小<br />RSS: 占用的记忆体大小<br />TTY: 终端的次要装置号码 (minor device number of tty)<br />STAT: 该行程的状态:<br />D: 不可中断的静止 (通悸□□缜b进行 I/O 动作)<br />R: 正在执行中<br />S: 静止状态<br />T: 暂停执行<br />Z: 不存在但暂时无法消除<br />W: 没有足够的记忆体分页可分配<br />N: 低优先序的行程<br />L: 有记忆体分页分配并锁在记忆体内 (即时系统或捱A I/O)<br />START: 行程开始时间<br />TIME: 执行的时间<br />COMMAND:所执行的指令<br />范例：<br />ps<br />PID TTY TIME CMD<br />2791 ttyp0 00:00:00 tcsh<br />3092 ttyp0 00:00:00 ps<br />% ps -A<br />PID TTY TIME CMD<br />1 ? 00:00:03 init<br />2 ? 00:00:00 kflushd<br />2 ? 00:00:00 kflushd<br />3 ? 00:00:00 kpiod<br />4 ? 00:00:00 kswapd<br />5 ? 00:00:00 mdrecoveryd<br />.......<br />% ps -aux<br />USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND<br />root 1 0.0 0.7 1096 472 ? S Sep10 0:03 init [3]<br />root 2 0.0 0.0 0 0 ? SW Sep10 0:00 [kflushd]<br />root 3 0.0 0.0 0 0 ? SW Sep10 0:00 [kpiod]<br />root 4 0.0 0.0 0 0 ? SW Sep10 0:00 [kswapd]<br />........<br /><br />名称：pstree<br />使用权限：所有使用者<br />使用方式：<br />pstree [-a] [-c] [-h|-Hpid] [-l] [-n] [-p] [-u] [-G|-U] [pid|user]<br />pstree -V<br />说明：将所有行程以树状图显示, 树状图将会以 pid (如果有指定) 或是以<br />init 这个基本行程为根 (root) ,如果有指定使用者 id , 则树状图会只显示该<br />使用者所拥有的行程<br />参数：<br />-a 显示该行程的完整指令及参数, 如果是被记忆体置换出去的行程则会加上括号<br />-c 如果有重覆的行程名, 则分开列出 (预设值是会在前面加上 *<br />-c 如果有重覆的行程名, 则分开列出 (预设值是会在前面加上 *<br />范例：<br />pstree<br />init-+-amd<br />|-apmd<br />|-atd<br />|-httpd---10*[httpd]<br />%pstree -p<br />init(1)-+-amd(447)<br />|-apmd(105)<br />|-atd(339)<br />%pstree -c<br />init-+-amd<br />|-apmd<br />|-atd<br />|-httpd-+-httpd<br />| |-httpd<br />| |-httpd<br />| |-httpd<br />....<br /><br />名称：renice<br />使用权限：所有使用者<br />使用方式：renice priority [-p] pid ...] [-g] pgrp ...] [-u] user<br />使用方式：renice priority [-p] pid ...] [-g] pgrp ...] [-u] user<br />...]<br />说明：重新指定一个或多个行程(Process)的优先序(一个或多个将根据所下的参<br />数而定)<br />把计<br />-p pid 重新指定行程的 id 为 pid 的行程的优先序<br />-g pgrp 重新指定行程群组(process group)的 id 为 pgrp 的行程 (一个或多<br />个) 的优先序<br />-u user 重新指定行程拥有者为 user 的行程的优先序<br />范例：<br />将行程 id 为 987 及 32 的行程与行程拥有者为 daemon 及 root 的优先序号码<br />加 1 :<br />renice +1 987 -u daemon root -p 32<br />注意 : 每一个行程(Process)都有一个唯一的 (unique) id<br /><br />名称：top<br />使用权限：所有使用者<br />使用方式：top [-] [d delay] [q] [c] [S] [s] [i] [n] [b]<br />说明：即时显示 process 的动态<br />把计<br />d : 改变显示的更新速度，或是在交谈式指令列( interactive command)按 s<br />q : 没有任何延迟的显示速度，如果使用者是有 superuser 的权限，则 top 将<br />会以最高的优先序执行<br />c : 切换显示模式，共有两种模式，一是只显示执行档的名称，另一种是显示完<br />c : 切换显示模式，共有两种模式，一是只显示执行档的名称，另一种是显示完<br />整的路径与名称S : 累积模式，会将己完成或消失的子行程 ( dead child<br />process ) 的 CPU time 累积起来<br />s : 安全模式，将交谈式指令取消, 避免潜在的危机<br />i : 不显示任何闲置 (idle) 或无用 (zombie) 的行程<br />n : 更新的次数，完成后将会退出 top<br />b : 批次档模式，搭配 "n" 参数一起使用，可以用来将 top 的结果输出到档案<br />内<br />范例：<br />显示更新十次后退出 ;<br />top -n 10<br />使用者将不能利用交谈式指令来对行程下命令 :<br />top -s<br />将更新显示二次的结果输入到名称为 top.log 的档案里 :<br />top -n 2 -b &lt; top.log<br /><br />名称：skill<br />使用权限：所有使用者<br />使用方式： skill [signal to send] [options] 选择程序的规则<br />说明：<br />送个讯号给正在执行的程序,预设的讯息为 TERM (中断) , 较常使用的讯息为<br />HUP , INT , KILL , STOP , CONT ,和 0<br />讯息有三种写法:分别为 -9 , -SIGKILL , -KILL , 可以使用 -l 或 -L 已列出<br />可使用的讯息。<br />可使用的讯息。<br />一般参数：<br />-f 快速模式/尚未完成<br />-i 互动模式/ 每个动作将要被确认<br />-v 详细输出/ 列出所选择程序的资讯<br />-w 智能警告讯息/ 尚未完成<br />-n 没有动作/ 显示程序代号<br />参数：选择程序的规则可以是, 终端机代号,使用者名称,程序代号,命令名称。<br />-t 终端机代号 ( tty 或 pty )<br />-u 使用者名称<br />-p 程序代号 ( pid )<br />-c 命令名称 可使用的讯号:<br />以下列出已知的讯号名称,讯号代号,功能。<br />名称 (代号) 功能/ 描述<br />ALRM 14 离开<br />HUP 1 离开<br />INT 2 离开<br />KILL 9 离开/ 强迫关闭<br />PIPE 13 离开<br />POLL 离开<br />PROF 离开<br />TERM 15 离开<br />USR1 离开<br />USR1 离开<br />USR2 离开<br />VTALRM 离开<br />STKFLT 离开/ 只适用于i386, m68k, arm 和 ppc 硬体<br />UNUSED 离开/ 只适用于i386, m68k, arm 和 ppc 硬体<br />TSTP 停止 /产生与内容相关的行为<br />TTIN 停止 /产生与内容相关的行为<br />TTOU 停止 /产生与内容相关的行为<br />STOP 停止 /强迫关闭<br />CONT 从新启动 /如果在停止状态则从新启动,否则忽略<br />PWR 忽略 /在某些系统中会离开<br />WINCH 忽略<br />CHLD 忽略<br />ABRT 6 核心<br />FPE 8 核心<br />ILL 4 核心<br />QUIT 3 核心<br />SEGV 11 核心<br />TRAP 5 核心<br />SYS 核心 /或许尚未实作<br />EMT 核心 /或许尚未实作<br />BUS 核心 /核心失败<br />XCPU 核心 /核心失败<br />XCPU 核心 /核心失败<br />XFSZ 核心 /核心失败<br />范例：<br />停止所有在 PTY 装置上的程序<br />skill -KILL -v pts/*<br />停止三个使用者 user1 , user2 , user3<br />skill -STOP user1 user2 user3<br />其他相关的命令: kill<br /><br />名称：expr<br />使用权限：所有使用者<br />### 字串长度<br />shell&gt;&gt; expr length "this is a test"<br />14<br />### 数字商数<br />shell&gt;&gt; expr 14 % 9<br />5<br />### 从位置处抓取字串<br />shell&gt;&gt; expr substr "this is a test" 3 5<br />is is<br />### 数字串 only the first character<br />shell&gt;&gt; expr index "testforthegame" e<br />2<br />### 字串真实重现<br />### 字串真实重现<br />shell&gt;&gt; expr quote thisisatestformela<br />thisisatestformela<br /><br />名称: tr<br />### 1.比方说要把目录下所有的大写档名换为小写档名?<br />似乎有很多方式，"tr"是其中一种:<br />#!/bin/sh<br />dir="/tmp/testdir";<br />files=`find $dir -type f`;<br />for i in $files<br />do<br />dir_name=`dirname $i`;<br />ori_filename=`basename $i`<br />new_filename=`echo $ori_filename | tr [:upper:] [:lower:]` &gt;<br />/dev/null;<br />#echo $new_filename;<br />mv $dir_name/$ori_filename $dir_name/$new_filename<br />done<br />### 2.自己试验中...lowercase to uppercase<br />tr abcdef...[del] ABCDE...[del]<br />tr a-z A-Z<br />tr [:lower:] [:upper:]<br />shell&gt;&gt; echo "this is a test" | tr a-z A-Z &gt; www<br />shell&gt;&gt; echo "this is a test" | tr a-z A-Z &gt; www<br />shell&gt;&gt; cat www<br />THIS IS A TEST<br />### 3.去掉不想要的字串<br />shell&gt;&gt; tr -d this ### 去掉有关 t.e.s.t<br />this<br />man<br />man<br />test<br />e<br />### 4.取代字串<br />shell&gt;&gt; tr -s "this" "TEST"<br />this<br />TEST<br />th<br />TE<br /><br />指令：clear<br />用途：清除萤幕用。<br />使用方法：在 console 上输入 clear。<br /><br />名称: reset, tset<br />使用方法: tset [-IQqrs] [-] [-e ch] [-i ch] [-k ch] [-m mapping]<br />[terminal]<br />使用说明:<br />使用说明:<br />reset 其实和 tset 是一同个命令，它的用途是设定终端机的状态。一般而言，<br />这个命令会自动的从环境变数、命令列或是其它的组态档决定目前终端机的型态<br />。如果指定型态是 ? 的话，这个程式会要求使用者输入终端机的型别。<br />由于这个程式会将终端机设回原始的状态，除了在 login 时使用外，当系统终端<br />机因为程式不正常执行而进入一些奇怪的状态时，你也可以用它来重设终端机o<br />例如不小心把二进位档用 cat 指令进到终端机，常会有终端机不再回应键盘输入<br />，或是回应一些奇怪字元的问题。此时就可以用 reset 将终端机回复至原始状态<br />。选项说明:<br />-p<br />将终端机类别显示在萤幕上，但不做设定的动作。这个命令可以用来取得目前终<br />端机的类别。<br />-e ch<br />将 erase 字元设成 ch<br />-i ch<br />将中断字元设成 ch<br />-k ch<br />将删除一行的字元设成 ch<br />-I<br />不要做设定的动作，如果没有使用选项 -Q 的话，erase、中断及删除字元的目前<br />值依然会送到萤幕上。<br />-Q<br />不要显示 erase、中断及删除字元的值到萤幕上。<br />不要显示 erase、中断及删除字元的值到萤幕上。<br />-r<br />将终端机类别印在萤幕上。<br />-s<br />将设定 TERM 用的命令用字串的型式送到终端机中，通常在 .login 或<br />.profile 中用<br />范例:<br />让使用者输入一个终端机型别并将终端机设到该型别的预设状态。<br /># reset ?<br />将 erase 字元设定 control-h<br /># reset -e ^B<br />将设定用的字串显示在萤幕上<br /># reset -s<br />Erase is control-B (^B).<br />Kill is control-U (^U).<br />Interrupt is control-C (^C).<br />TERM=xterm;<br /><br />名称：compress<br />使用权限：所有使用者<br />使用方式：compress [-dfvcV] [-b maxbits] [file ...]<br />说明：<br />compress 是一个相当古老的 unix 档案压缩指令，压缩后的档案会加上一个 .Z<br />延伸档名以区别未压缩的档案，压缩后的档案可以以 uncompress 解压。若要将<br />延伸档名以区别未压缩的档案，压缩后的档案可以以 uncompress 解压。若要将<br />数个档案压成一个压缩档，必须先将档案 tar 起来再压缩。由于 gzip 可以产生<br />更理想的压缩比例，一般人多已改用 gzip 为档案压缩工具。<br />参数：<br />c 输出结果至标准输出设备（一般指荧幕）<br />f 强迫写入档案，若目的档已经存在，则会被覆盖 (force)<br />v 将程式执行的讯息印在荧幕上 (verbose)<br />b 设定共同字串数的上限，以位元计算，可以设定的值为 9 至 16 bits 。由于<br />值越大，能使用的共同字串就 越多，压缩比例就越大，所以一般使用预设值 16<br />bits (bits)<br />d 将压缩档解压缩<br />V 列出版本讯息<br />范例：<br />将 source.dat 压缩成 source.dat.Z ，若 source.dat.Z 已经存在，内容则会<br />被压缩档覆盖。<br />compress -f source.dat<br />将 source.dat 压缩成 source.dat.Z ，并列印出压缩比例。<br />-v 与 -f 可以一起使用<br />compress -vf source.dat<br />将压缩后的资料输出后再导入 target.dat.Z 可以改变压缩档名。<br />compress -c source.dat &gt; target.dat.Z<br />-b 的值越大，压缩比例就越大，范围是 9-16 ，预设值是 16 。<br />compress -b 12 source.dat<br />compress -b 12 source.dat<br />将 source.dat.Z 解压成 source.dat ，若档案已经存在，使用者按 y 以确定覆<br />盖档案，若使用 -df 程式则会自动覆盖档案。由于系统会自动加入 .Z 为延伸档<br />名，所以 source.dat 会自动当作 source.dat.Z 处理。<br />compress -d source.dat<br />compress -d source.dat.Z<br /><br />名称： lpd<br />使用权限： 所有使用者<br />使用方式：lpd [-l] [#port]<br />lpd 是一个常驻的印表机管理程式，它会根据 /etc/printcap 的内容来管理本地<br />或远端的印表机。/etc/printcap 中定义的每一个印表机必须在 /var/lpd 中有<br />一个相对应的目录，目录中以 cf 开头的档案表示一个等待送到适当装置的印表<br />工作。这个档案通常是由 lpr 所产生。<br />lpr 和 lpd 组成了一个可以离线工作的系统，当你使用 lpr 时，印表机不需要<br />能立即可用，甚至不用存在。lpd 会自动监视印表机的状况，当印表机上线后，<br />便立即将档案送交处理。这个得所有的应用程式不必等待印表机完成前一工作。<br />参数：<br />-l: 将一些除错讯息显示在标准输出上。<br />#port: 一般而言，lpd 会使用 getservbyname 取得适当的 TCP/IP port，你可<br />以使用这个参数强迫 lpd 使用指定的 port。<br />范例：<br />这个程式通常是由 /etc/rc.d 中的程式在系统启始阶段执行。<br /><br />名称 lpq<br />-- 显示列表机贮列中未完成的工作 用法<br />lpq [l] [P] [user]<br />说明<br />lpq 会显示由 lpd 所管理的列表机贮列中未完成的项目。<br />范例<br />范例 1. 显示所有在 lp 列表机贮列中的工作<br /># lpq -PlpRank Owner Job Files Total Size1st root 238 (standard input)<br />1428646 bytes<br />相关函数<br />lpr,lpc,lpd<br /><br />名称： lpr<br />使用权限： 所有使用者<br />使用方式：lpr [ -P printer ]<br />将档案或是由标准输入送进来的资料送到印表机贮列之中，印表机管理程式 lpd<br />会在稍后将这个档案送给适当的程式或装置处理。lpr 可以用来将料资送给本地<br />或是远端的主机来处理。<br />参数：<br />-p Printer: 将资料送至指定的印表机 Printer，预设值为 lp。<br />范例：<br />将 www.c 和 kkk.c 送到印表机 lp。<br />lpr -Plp www.c kkk.c<br />名称: lprm<br />名称: lprm<br />-- 将一个工作由印表机贮列中移除 用法<br />/usr/bin/lprm [P] [file...]<br />说明<br />尚未完成的印表机工作会被放在印表机贮列之中，这个命令可用来将常未送到印<br />表机的工作取消。由于每一个印表机都有一个独立的贮列，你可以用 -P 这个命<br />令设定想要作用的印列机。如果没有设定的话，会使用系统预设的印表机。<br />这个命令会检查使用者是否有足够的权限删除指定的档案，一般而言，只有档案<br />的拥有者或是系统管理员才有这个权限。<br />范例<br />将印表机 hpprinter 中的第 1123 号工作移除<br />lprm -Phpprinter 1123<br />将第 1011 号工作由预设印表机中移除<br />lprm 1011<br /><br />名称： fdformat<br />使用权限： 所有使用者<br />使用方式：fdformat [-n] device<br />使用说明 :<br />对指定的软碟机装置进行低阶格式化。使用这个指令对软碟格式化的时候，最好<br />指定像是下面的装置：<br />/dev/fd0d360 磁碟机 A: ，磁片为 360KB 磁碟<br />/dev/fd0h1440 磁碟机 A: ，磁片为 1.4MB 磁碟<br />/dev/fd1h1200 磁碟机 B: ，磁片为 1.2MB 磁碟<br />/dev/fd1h1200 磁碟机 B: ，磁片为 1.2MB 磁碟<br />如果使用像是 /dev/fd0 之类的装置，如果里面的磁碟不是标准容量，格式化可<br />能会失败。在这种情况之下，使用者可以用 setfdprm 指令先行指定必要参数。<br />参数：<br />-n 关闭确认功能。这个选项会关闭格式化之后的确认步骤。<br />范例：<br />fdformat -n /dev/fd0h1440<br />将磁碟机 A 的磁片格式化成 1.4MB 的磁片。并且省略确认的步骤。<br /><br />名称： mformat<br />使用权限： 所有使用者<br />使用方式：<br />mformat [-t cylinders] [-h heads] [-s sectors] [-l volume_label] [-F]<br />[-I fsVer-sion] [-S sizecode] [-2 sectors_on_track_0] [-M<br />software_sector_size] [-a] [-X] [-C] [-H hidden_sectors] [-r<br />root_sectors] [-B boot_sector] [-0 rate_on_track_0] [-A<br />rate_on_other_tracks] [-1] [-k] drive:<br />在已经做过低阶格式化的磁片上建立 DOS 档案系统。如果在编译 mtools 的时候<br />把 USE_2M 的参数打开，部分与 2M 格式相关的参数就会发生作用。否则这些参<br />数（像是 S,2,1,M）不会发生作用。<br />参数：<br />-t 磁柱（synlider）数<br />-h 磁头（head）数<br />-s 每一磁轨的磁区数<br />-s 每一磁轨的磁区数<br />-l 标签<br />-F 将磁碟格式化为 FAT32 格式，不过这个参数还在实验中。<br />-I 设定 FAT32 中的版本号。这当然也还在实验中。<br />-S 磁区大小代码，计算方式为 sector = 2^(大小代码+7)<br />-c 磁丛（cluster）的磁区数。如果所给定的数字会导致磁丛数超过 FAT 表的限<br />制，mformat 会自动放大磁区数。<br />-s<br />-M 软体磁区大小。这个数字就是系统回报的磁区大小。通常是和实际的大小相同<br />。<br />-a 如果加上这个参数，mformat 会产生一组 Atari 系统的序号给这块软碟。<br />-X 将软碟格式化成 XDF 格式。使用前必须先用 xdfcopy 指令对软碟作低阶格式<br />化的动作。<br />-C 产生一个可以安装 MS-DOS 档案系统的磁碟影像档（disk image）。当然对一<br />个实体磁碟机下这个参数是没有意义的。<br />-H 隐藏磁区的数目。这通常适用在格式化硬碟的分割区时，因为通常一个分割区<br />的前面还有分割表。这个参数未经测试，能不用就不用。<br />-n 磁碟序号<br />-r 根目录的大小，单位是磁区数。这个参数只对 FAT12 和 FAT16 有效。<br />-B 使用所指定的档案或是设备的开机磁区做为这片磁片或分割区的开机磁区。当<br />然当中的硬体参数会随之更动。<br />-k 尽量保持原有的开机磁区。<br />-0 第 0 轨的资料传输率<br />-0 第 0 轨的资料传输率<br />-A 第 0 轨以外的资料传输率<br />-2 使用 2m 格式<br />-1 不使用 2m 格式<br />范例：<br />mformat a:<br />这样会用预设值把 a: （就是 /dev/fd0）里的磁碟片格式化。<br /><br />s 名称： mkdosfs<br />使用权限： 所有使用者<br />使用方式： mkdosfs [ -c | -l filename ]<br />[ -f number_of_FATs ]<br />[ -F FAT_size ]<br />[ -i volume_id ]<br />[ -m message_file ]<br />[ -n volume_name ]<br />[ -r root_dir_entry ]<br />[ -s sector_per_cluster ]<br />[ -v ]<br />device<br />[ block_count ]<br />说明： 建立 DOS 档案系统。 device 指你想要建立 DOS 档案系统的装置代号。<br />像是 /dev/hda1 等等。 block_count 则是你希望配置的区块数。如果<br />block_count 没有指定则系统会自动替你计算符合该装置大小的区块数。<br />block_count 没有指定则系统会自动替你计算符合该装置大小的区块数。<br />参数：<br />-c 建立档案系统之前先检查是否有坏轨。<br />-l 从得定的档案中读取坏轨记录。<br />-f 指定档案配置表（FAT , File Allocation Table)的数量。预设值为 2 。目<br />前 linux 的 FAT 档案系统不支援超过 2 个 FAT 表。通常这个不需要改。<br />-F 指定 FAT 表的大小，通常是 12 或是 16 个位元组。12 位元组通常用于磁碟<br />片，16 位元组用于一般硬碟的分割区，也就是所谓的 FAT16 格式。这个值通常<br />系统会自己选定适当的值。在磁碟片上用 FAT16 通常不会发生作用，反之在硬碟<br />上用 FAT12 亦然。<br />-i 指定 Volume ID。一般是一个 4 个位元组的数字，像是 2e203a47 。如果不<br />给系统会自己产生。<br />-m 当使用者试图用这片磁片或是分割区开机，而上面没有作业系统时，系统会给<br />使用者一段警告讯息。这个参数就是用来变更这个讯息的。你可以先用档案编辑<br />好，然后用这个参数指定，或是用<br />-m -<br />这样系统会要求你直接输入这段文字。要特别注意的是，档案里的字串长度不要<br />超过 418 个字，包括展开的跳栏符号（TAB）和换行符号（换行符号在 DOS 底下<br />算两个字元！）<br />-n 指定 Volume Name，就是磁碟标签。如同在 DOS 底下的 format 指令一样，<br />给不给都可以。没有预设值。<br />-r 指定根目录底下的最大档案数。这里所谓的档案数包括目录。预设值是在软碟<br />上是 112 或是 224 ，在硬碟上是 512。没事不要改这个数字。<br />好，然后用这个参数指定，或是用<br />-s 每一个磁丛（cluster）的磁区数。必须是 2 的次方数。不过除非你知道你在<br />作什么，这个值不要乱给。<br />-v 提供额外的讯息<br />范例：<br />mkdosfs -n Tester /dev/fd0 将 A 槽里的磁碟片格式化为 DOS 格式，并将标签<br />设为 Tester</font>
		<br />
<img src ="http://www.cnitblog.com/lante7711/aggbug/2641.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/lante7711/" target="_blank">兰特</a> 2005-09-13 20:22 <a href="http://www.cnitblog.com/lante7711/articles/2641.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux使用技巧集锦</title><link>http://www.cnitblog.com/lante7711/articles/2640.html</link><dc:creator>兰特</dc:creator><author>兰特</author><pubDate>Tue, 13 Sep 2005 12:18:00 GMT</pubDate><guid>http://www.cnitblog.com/lante7711/articles/2640.html</guid><wfw:comment>http://www.cnitblog.com/lante7711/comments/2640.html</wfw:comment><comments>http://www.cnitblog.com/lante7711/articles/2640.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/lante7711/comments/commentRss/2640.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/lante7711/services/trackbacks/2640.html</trackback:ping><description><![CDATA[<FONT size=1><FONT face=Verdana>初用Linux时可能有处处不方便的感觉, 可是等使用一段时间掌握了一些技巧后就会感到越来越顺手了.<BR>　　1. 使用虚拟控制台<BR><BR>　　登录后按Alt+F2键这时又可以看到"login:"提示符, 这个就是第二个虚拟控制台. 一般新安装的Linux有四个虚拟控制台, 可以用 Alt+F1~Alt+F4来访问. 虚拟控制台最有用的时候是当一个程序出错锁住输入时可以切换到其他虚拟控制台登录进入后杀掉这个出错的进程. <BR><BR>　　2. 拷贝与粘贴<BR><BR>　　字符界面: 不管是Slackware 还是RedHat 安装后每次启动时都会自动运行一个叫gpm的程序, 该程序运行后就可以用鼠标来拷贝与粘贴了. 具体做法是按住鼠标左键拖动使要拷贝的地方反白, 这时反白的区域已经被拷贝, 再按鼠标右键拷贝的内容就会被粘贴在光标所在位置了. <BR><BR>　　X-Window下: 拷贝的操作与字符界面下一样, 三键鼠标的话按中键粘贴, 两键鼠标的话同时按左右键粘贴(须在配置XF86时在鼠标的设置里选择 Emulate 3 Button). <BR><BR>　　3. 快速进入某些目录<BR><BR>　　键入cd ~ 可进入用户的home目录. <BR><BR>　　键入cd - 可进入上一个进入的目录. <BR><BR>　　4. 软驱的使用<BR><BR>　　如果是Linux 的ext2文件系统用如下命令: <BR><BR>　　#mount -t ext2 /dev/fd0 /mnt <BR><BR>　　dos格式的软盘则用命令: <BR><BR>　　#mount -t msdos /dev/fd0 /mnt <BR><BR>　　然后就可以在/mnt里访问软盘的内容了, 注意在取出软盘之前要先卸掉软盘上的文件系统, <BR><BR>　　#umount /mnt <BR><BR>　　否则会导致信息丢失. <BR><BR>　　在软盘上建立文件系统可用如下命令: <BR><BR>　　#mke2fs /dev/fd0 1440 <BR><BR>　　5. RedHat下显示彩色目录列表 <BR><BR>　　打开/etc/bashrc, 加入如下一行: <BR><BR>　　alias ls="ls --color" <BR><BR>　　下次启动bash时就可以像在Slackware里那样显示彩色的目录列表了, 其中颜色的含义如下: <BR><BR>　　蓝色--&gt;目录 <BR><BR>　　绿色--&gt;可执行文件 <BR><BR>　　红色--&gt;压缩文件 <BR><BR>　　浅蓝色--&gt;链接文件 <BR><BR>　　灰色--&gt;其他文件 <BR><BR>　　6. 显示文件的类型<BR><BR>　　用命令file 可以使你知道某个文件究竟是ELF格式的可执行文件, 还是shell script文件或是其他的什么格式, 例如: <BR><BR>　　#file startx <BR><BR>　　7 .命令文件的路径 <BR><BR>　　当你键入一些命令如find, shutdown, mount, startx时是否想过要知道这些文件究竟放在哪个目录里? 用命令<BR><BR>　　whereis 可以实现.如 <BR><BR>　　#whereis startx <BR><BR>　　8. 查找文件<BR><BR>　　find 命令要加一些参数才能查到文件, 如: <BR><BR>　　#find /usr -name XF86Setup -print <BR><BR>　　在/usr里查找文件XF86Setup. <BR><BR>　　9. 删除无用的core文件 <BR><BR>　　程序运行出后有时候会产生一个名为core的文件, 这个文件一般很大而且没什么用, 可以删除掉以释放 空间. <BR><BR>　　10. 一次解开.tar.gz文件 <BR><BR>　　解开.tar.gz文件一般要先用gunzip解压再用tar解包, 在Linux下可以一次完成, 如: <BR><BR>　　#tar zxpvf sample.tar.gz <BR><BR>　　11. 显示win95分区里的长文件名 <BR><BR>　　如果你发现win95分区里的长文件命不能显示, 可以重新用vfat方式来mount. 对于启动时就mount的分区可以修改文件 /etc/fstab, 将里面的msdos字样改为vfat. 如果无法用vfat mount, 则要重新编译一下核心, 加入对vfat的支持. <BR><BR>　　12. Linux 里的Norton Commander <BR><BR>　　在提示符下键入命令mc后你就会看到一个与Norton Commander很相似的界面, 实际上功能也很相似甚至更强大, 比如可以直接对.tar.gz 压缩包里的文件进行操作(有点像ZipMagic). <BR><BR>　　13. 启动后直接进入X <BR><BR>　　编辑/etc/inittab文件, 把id:3:initdefautl改为 id:4:initdefautl. 不过搜索路径可能会有些问题, 关机时你得直接进入/sbin 里去执行shutdown. <BR><BR>　　14. 后台运行X 程序<BR><BR>　　执行一个X程序时别忘了在后面加一个&amp;号,如 #netscape &amp; 否则的话在你推出执行的程序之前再无法在那个终端窗口里输入命令了. <BR><BR>　　15. 强行退出X <BR><BR>　　有时候在X 里由于程序出错鼠标键盘都不起作用, 这时候不用着急, 因为在Linux下几乎不会像在Win95里那样恶性死机, 你只须键入Ctrl+Alt+BackSpace键就可以回到字符界面下了.<BR><BR>Linux 使用技巧集锦(二)<BR>http://www.chinaunix.net 作者:lsw 发表于：2003-01-02 10:07:08<BR><BR>　　Linux 使用技巧集锦的第二辑，主要是一些初学者容易遇到又不容易解决的问题，希望大家能喜欢。另外如果有错误的话欢迎来信指正，我将非常感谢。<BR><BR>　　1. 重装Win9x后lilo失效无法启动Linux <BR><BR>　　只须先用软盘启动Linux然后运行一次lilo即可。对于RedHat可以用命令mkbootdisk来制作启动盘，例如：<BR><BR>　　mkbootdisk --devices /dev/fd0 2.0.34-1<BR><BR>　　其中2.0.34-1是 /lib/modules下的一个目录。 <BR><BR>　　2. 把dos/windows改为缺省启动的OS <BR><BR>　　RedHat把Linux作为lilo缺省启动的OS，即出现 boot: 提示符后直接回车启动Linux。如果想改为dos/Windows，修改文件/etc/lilo.conf，把有关启动dos的部分放在前面，再运行一次lilo即可。例如把lilo.conf从： <BR><BR>　　 boot=/dev/hdamap=/boot/mapinstall=/boot/boot.bprompttimeout=50image=/boot/vmlinuz-2.0.34-1 label=linux root=/dev/hdc5 read-onlyother=/dev/hda1<BR><BR>　　label=dos<BR><BR>　　table=/dev/hda<BR><BR>　　改为：boot=/dev/hdamap=/boot/mapinstall=/boot/boot.bprompttimeout=50other=/dev/hda1<BR><BR>　　label=dos<BR><BR>　　table=/dev/hdaimage=/boot/vmlinuz-2.0.34-1 label=linux root=/dev/hdc5 read-only<BR><BR>　　3. 去掉引导区内的lilo信息 <BR><BR>　　安装lilo后如果硬盘数量或分区情况有改变的话将导致硬盘不能启动，这时只须用软盘启动dos再运行 fdisk/mbr 即可。(这个方法还可清除任何引导区病毒) <BR><BR>　　4. 让X 支持AGP 显卡<BR><BR>　　下载一个AX 4.1 即AcceleratedX 4.1 ，一个商业版的X Server 。除AGP 显卡外AX 还支持很多牌号的显卡。另外还可以用AX 带的设置程序Xsetup 方便的对分辨率，刷新率等参数进行设置。不过我也不知道用AGP卡效果如何，因为我现在还在用老掉牙的 S3 765 。<BR><BR>　　按此下载AX 4.1 <BR><BR>　　5. 把man 或info 的信息存为文本文件<BR><BR>　　以tcsh 为例：man tcsh / col -b &gt; tcsh.txt info tcsh -o tcsh.txt -s <BR><BR>　　6. 用当前路径作提示符<BR><BR>　　对bash 来说，在.bashrc 里加一行：PS1="$PWD$" <BR><BR>　　对tcsh 来说，在.tcshrc 里加一行：set prompt="%/&gt;" <BR><BR>　　7. 压缩可执行文件<BR><BR>　　Linux 下有一个类似dos 里的pklite 和lzexe 的命令-- gzexe 。而且压缩率一般都可以超过50% ，在空间紧张时很有用。比如：<BR><BR>　　/dosc/temp# ls -altotal 148-rwxr-xr-x 1 root root 149564 Dec 8 15: 33 gawk/dosc/temp# gzexe gawkgawk: 54.5%/dosc/temp# ls -altotal 216-rwxr-xr-x 1 root root 68710 Dec 8 15:36 gawk-rwxr-xr-x 1 root root 149564 Dec 8 15:33 gawk~/dosc/temp#<BR><BR>　　8. 查看Linux 启动时的信息<BR><BR>　　Linux 启动时屏幕显示的信息来不及看清就一闪而过，如果对这些信息感兴趣的话可以在启动完后用命令dmesg 查看。<BR><BR>　　9. 处理文件名内含有特殊字符的文件<BR><BR>　　如果有一个文件名叫-file 如果想删除它，键入rm -file 会显示invalid option ，原来由于文件名的第一个字符为- ， Linux 把文件名当作选项了，可以加-- 解决这个问题，如rm -- -file 。如果是其他特殊字符的话可以在特殊字符前加一个 ，或者用双引号把整个文件名括起来。<BR><BR>　　10. 一次处理一整个目录<BR><BR>　　Linux/UNIX 的很多常用命令如rm ，cp 等都有一个参数---- -r ，是递归的意思，命令里加了参数-r 就可以对目标目录及其下所有子目录进行操作，如：rm -rf /test (f 是 force 意为强行) ，该命令完全删除根目录下的子目录test ，作用类似于dos 下的deltree ，当然使用这个命令时要特别小心。再如： cp -r /test /test1 有类似dos 下xcopy /s 的作用。<BR><BR>　　11. 修改登录画面<BR><BR>　　对本机：<BR><BR>　　先修改文件/etc/issue 改为相要显示的内容，再修改文件/etc/rc.d/rc.local(RedHat) 或 /etc/rc.d/rc.S(Slackware) 把下面几句注释掉： # This will overwrite /etc/issue at every boot. So, make any changes you# want to make to /etc/issue here or you will lose them when you reboot.echo "" &gt; /etc/issueecho "Red Hat Linux $R" &gt;&gt; /etc/issueecho "Kernel $(uname -r) on $a $(uname -m)" &gt;&gt; /etc/issue<BR><BR>　　cp -f /etc/issue /etc/issue.netecho &gt;&gt; /etc/issue<BR><BR>　　不然的话每次重新启动/etc/issue 都会被更改。<BR><BR>　　对telnet 的远地机器：<BR><BR>　　先把文件/etc/usr/sbin/in.telnetd 改名，如改为in.telnetd.exe ，再编一个名为in.telnetd 的 shell 脚本，在显示完需要的内容后再调用in.telnetd.exe 。如：#!/bin/shcat /etc/login.banner # 需要在登录提示符前显示的内容echo -n ""exec /usr/sbin/in.telnetd.exe<BR><BR>　　12. 几个有用的别名<BR><BR>　　几个能方便操作和减少误操作的别名，建议把它们放到启动文件里，如/etc/bashrc 。<BR><BR>　　alias rm='rm -i'alias cp='cp -i'alias mv='mv -i'#前三个别名的作用是在删除、覆盖文件之前先提示确认，RedHat已经自动#加上了，强烈建议Slackware的用户也加上，因为Linux/UNIX下文件一旦删#除就再也无法恢复了。 alias l='ls -l'alias cd..='cd ..'alias utar='tar xvfz' #解 *.tar.gz 文件 alias inforpm='rpm -qpi' #显示rpm包的信息alias instrpm='rpm -Uhv' #安装rpm包 alias listrpm='rpm -qpl' #列rpm包内的文件alias uistrpm='rpm -e' #反安装rpm包 <BR><BR>　　13. 使用命令补齐<BR><BR>　　所谓命令补齐(Command-Line Completion)是指当键入的字符足以确定目录下一个唯一的文件时只须按 Tab 键就可以自动补齐该文件名的剩下部分，例如要把目录/freesoft 下的文件gcc-2.8.1.tar.gz 解包，当键入到 tar xvfz /freesoft/g 时如果该文件是该目录下唯一以g 起头的文件的话就可以按下Tab 键，这时命令会被自动补齐为： tar xvfz /freesoft/gcc-2.8.1.tar.gz ，非常方便。<BR><BR>　　14. 最后一条技巧<BR><BR>　　有时间的话多看看系统提供的FAQ文件，因为通常遇到的问题大多数都能在里面找到答案。 </FONT><BR></FONT><img src ="http://www.cnitblog.com/lante7711/aggbug/2640.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/lante7711/" target="_blank">兰特</a> 2005-09-13 20:18 <a href="http://www.cnitblog.com/lante7711/articles/2640.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一些比较经典的问题与解答</title><link>http://www.cnitblog.com/lante7711/articles/2639.html</link><dc:creator>兰特</dc:creator><author>兰特</author><pubDate>Tue, 13 Sep 2005 12:16:00 GMT</pubDate><guid>http://www.cnitblog.com/lante7711/articles/2639.html</guid><wfw:comment>http://www.cnitblog.com/lante7711/comments/2639.html</wfw:comment><comments>http://www.cnitblog.com/lante7711/articles/2639.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/lante7711/comments/commentRss/2639.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/lante7711/services/trackbacks/2639.html</trackback:ping><description><![CDATA[<FONT size=1><FONT face=Verdana><IMG height=20 src="http://www.cnitblog.com/Emoticons/QQ/10.gif" width=20 border=0>如何全面卸载Linux?如何删除它的分区?<BR>1.进入linux, 用fdisk删除linux分区和swap区。 2.重新启动，在dos下运行fdisk /mbr,恢复主引导记录。<BR><BR><IMG height=19 src="http://www.cnitblog.com/Emoticons/cry_smile.gif" width=19 border=0>我在服务器上用FTP登陆没问题，可是从别的 机器登陆就不可以。我用ROOT 用户登陆的。 机器显示CONNECT TO 。。。，CLOSED BY REMOTE HOST然后就死了我的FTPUSERS 中 也没禁止ROOT用户。<BR>查看你要登陆的服务器系统中，在/etc/default/login文件中是否 有 CONSOLE=设备名 这一项（比如CONSOLE = /dev/console,它的作用为把root限制在主控台 设备上注册),如果有，把这一行用"#"注释掉，你就可以从远程以root登 陆了， OK！ 记住，工作结束后，复原（把"#"去处），否则，服务器系统有安全 隐患。 <BR><BR><IMG height=19 src="http://www.cnitblog.com/Emoticons/cry_smile.gif" width=19 border=0>我有个core文件在目录 ，用cat core 后显示就不正常了 问题是core是干吗用的?为什么cat core 后显示会有问题?<BR>这个文件是发生故障的那个程序的内存影像。错误的原因不一定是 内核错误，常见的错误是非法指针。一般将其删除就行了 因为这是个二进制文件，通常终端用某些二进制码做一些控制动作 例如改变显示模式。我们通常的xterm等还有Linux控制台都仿真 DEC-VT100的控制码，当你cat core时会碰到控制码将显示模式改变，你因而看到乱码。出现这种情况时你打入reset命令通常能恢复 正常显示。 <BR><BR><IMG height=19 src="http://www.cnitblog.com/Emoticons/75_75.gif" width=19 border=0>在Linux下如何运行Windows和dos的程序？其上能运行office97吗?<BR>名为wine的windows模拟器作为一般应用还不够好，而dos的模拟器 dosemu确相当不错。 准确的说dosemu并不是dos模拟器，它提供一虚拟x86机来运行dos。 可以运行dos6.22和纯dos7。它也提供VCPI和DMPI支持。windows3.0 在实模式 下工作得很好。在windows3.0上可运行Winword-1.0。 我在dosemu下运行过标准模式和386增强模式的windows3.1，不过配置 相当困难，表现的性能也不好，不够稳定。 office97没有for Linux版，而windows模拟器上也无法运行(微软的软件 应用了大量的未公开调用，这是原因之一)。在Linux上你可以使用 staroffice和applixware office之类的for Linux的办公软件，不过它们都是 商业软件。<BR></FONT><BR></FONT><img src ="http://www.cnitblog.com/lante7711/aggbug/2639.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/lante7711/" target="_blank">兰特</a> 2005-09-13 20:16 <a href="http://www.cnitblog.com/lante7711/articles/2639.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux与Windows硬盘资源互访</title><link>http://www.cnitblog.com/lante7711/articles/2638.html</link><dc:creator>兰特</dc:creator><author>兰特</author><pubDate>Tue, 13 Sep 2005 12:04:00 GMT</pubDate><guid>http://www.cnitblog.com/lante7711/articles/2638.html</guid><wfw:comment>http://www.cnitblog.com/lante7711/comments/2638.html</wfw:comment><comments>http://www.cnitblog.com/lante7711/articles/2638.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/lante7711/comments/commentRss/2638.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/lante7711/services/trackbacks/2638.html</trackback:ping><description><![CDATA[<FONT size=1><FONT face=Verdana>目前，个人电脑用户中许多人都使用Windows系统，但也安装了Linux系统，因此如何在Linux或Windows中实现硬盘资源互访就显得非常重要。<BR><BR>Linux下访问Windows硬盘分区<BR><BR>在 Red Hat Linux下访问Windows系统的硬盘分区很简单。因为Red Hat Linux提供了对几乎所有文件系统的支持，因此它可以直接读写Windows系统的分区。安装Red Hat Linux 时，就可以指出计算机中存在的Windows分区的位置，并指定想要将它们载入到Linux文件系统中的位置。<BR><BR>通常，将 Windows系统中C盘的内容载入到Linux系统下的目录/mnt/c，这时就可以如同看待Linux文件系统中一个目录一样看待C盘了。我们可以对其中的文件进行读写，或者在其中创建一个新的文件或目录。如果安装时没有指定Windows分区的位置，或者由于其它原因使/mnt/c目录下看不到系统 Windows分区C盘的内容，就可以用下面的命令手动载入该分区：<BR><BR>#mount -t vfat/dev/hdal /mnt/c<BR><BR>此命令可以将设备名为/dev/hda1(可以是任何实际存在的分区设备名)的Windows分区载入到目录/mnt/c 下，参数“-t vfat”表明载入的文件系统类型为vfat。用类似的mount命令，也可以载入软盘文件系统，只不过软盘的文件系统设备名通常是 “/dev/floopy”或“/dev/fd0H1440”。为了统一起见，可将其载入到目录/mnt/floopy中。<BR><BR>Red Hat Linux中还提供了一个文件系统的系统配置脚本文件，通过修改它可以让Linux启动时自动载入需要的其它非Linux文件系统。这个脚本是文件/etc/fstab，它的一个典型例子如下：<BR><BR>/dev/hda3 / ext2 defaults 1 1<BR>/dev/hda4 swap swap defaults 0 0<BR>/dev/fd0 /mnt/floppy ext2 noauto 0 0<BR>/dev/cdrom /mnt/cdrom iso9660 noauto,r0 0 0<BR>none /proc proc proc 0 0<BR>none /dev/pts devpts mode=0622 0 0<BR>/dev/hda1 /mnt/c vfat auto,rw 0 0<BR>/dev/hda5 /mnt/e vfat auto,rw 0 0<BR><BR>该文件中每行记录了一个系统自动载入的文件系统的信息，各列的意义依次为设备名、载入目录、文件系统类型、载入参数（自动、读写、模式等）、标记位。从这个文件可以看到，第一行是Linux自身的文件系统，第三、第四行代表软盘驱动器和光盘驱动器，它们都不是自动载入的，最后两行代表两个需自动载入的 Windows分区。<BR><BR>值得注意的是，对于软盘、光盘这些存储介质通常用“noauto”参数。如果像上例这样，它们在fstab文件中有记录，插入软盘或者光盘后，只需运行命令“mount/mnt/floopy”或“mount/mnt/cdrom”就可以将其载入Linux系统。在取出软盘或者光盘之前，必须运行命令“unmount/mnt/floopy”或“unmount/mnt/cdrom”取消它们的载入。否则， Linux系统会锁住该驱动器，即使按硬件按钮也无法将其取出。<BR><BR>Red Hat Linux 这种识别其它文件系统的功能将大大方便使用计算机，在Linux下可以像对待其自身的数据一样对待Windows分区中的数据。比如，在Linux下实践各种命令的同时，还可以随时查阅放在Windows分区中的Linux电子文档。<BR><BR>Windows下访问Linux硬盘分区<BR><BR>Windows系统在处理各种文件系统方面，还不能像Red Hat Linux那样方便。因此，要查看Linux分区中的内容就需要借助于其它的软件工具了。<BR><BR>下面我推荐一个目前流行的、功能稳定的工具软件fsdext2。它是一个自由软件，可以到http://www.globalxs.nl/home/p/pvs下载最新版本，或者通过电子邮件联系作者：pvs@globalxs.nl。<BR><BR>fsdext2软件提供在Windows系统下读Linux分区的功能。获得fsdext2的压缩软件包之后，先将其解压缩，然后运行命令install。这个安装命令将fsdext2需要的几个vxd文件拷贝到Windows的系统目录下。<BR><BR>使用fsdext2提供的mount命令，将ext2文件系统载入到Windows系统下。mount命令的参数是Linux分区的设备名（命名规则与 Linux下的一样）。然后fsdext2会自动寻找一个未分配的盘符代表Linux分区。这样，我们就可以像访问一个Windows分区一样访问 Linux分区了。</FONT><BR></FONT><img src ="http://www.cnitblog.com/lante7711/aggbug/2638.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/lante7711/" target="_blank">兰特</a> 2005-09-13 20:04 <a href="http://www.cnitblog.com/lante7711/articles/2638.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux与其他操作系统的区别</title><link>http://www.cnitblog.com/lante7711/articles/2637.html</link><dc:creator>兰特</dc:creator><author>兰特</author><pubDate>Tue, 13 Sep 2005 12:00:00 GMT</pubDate><guid>http://www.cnitblog.com/lante7711/articles/2637.html</guid><wfw:comment>http://www.cnitblog.com/lante7711/comments/2637.html</wfw:comment><comments>http://www.cnitblog.com/lante7711/articles/2637.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/lante7711/comments/commentRss/2637.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/lante7711/services/trackbacks/2637.html</trackback:ping><description><![CDATA[<P align=left>&nbsp;&nbsp;&nbsp;&nbsp; Linux可以与MS-DOS、OS/2、Windows等其他操作系统共存于同一台机器上。它们均为操作系统，具有一些共性，但是互相之间各有特色，有所区别。 <BR><BR>　　　目前运行在PC机上的操作系统主要有Microsoft的MS-DOS、Windows、Windows NT、IBM的OS/2等。早期的PC机用户普遍使用MS-DOS，因为这种操作系统对机器的硬件配置要求不高，而随着计算机硬件技术的飞速发展，硬件设备价格越来越低，人们可以相对容易地提高计算机的硬件配置，于是开始使用Windows、Windows NT等具有图形界面的操作系统。Linux是新近被人们所关注的操作系统，它正在逐渐为PC机的用户所接受。那么，Linux与其他操作系统的主要区别是什么呢？下面从两个方面加以论述。 <BR><BR>　　　首先看一下Linux与MS－DOS之间的区别。 <BR><BR>　　　在同一系统上运行Linux和MS-DOS已很普遍，就发挥处理器功能来说，MS-DOS没有完全实现x86处理器的功能，而Linux完全在处理器保护模式下运行，并且开发了处理器的所有特性。Linux可以直接访问计算机内的所有可用内存，提供完整的Unix接口。而MS-DOS只支持部分Unix的接口。 <BR><BR>　　　就使用费用而言，Linux和MS-DOS是两种完全不同的实体。与其他商业操作系统相比，MS-DOS价格比较便宜，而且在PC机用户中有很大的占有率，任何其他PC机操作系统都很难达到MS-DOS的普及程度，因为其他操作系统的费用对大多数PC机用户来说都是一个不小的负担。Linux是免费的，用户可以从internet上或者其他途径获得它的版本，而且可以任意使用，不用考虑费用问题。 <BR><BR>　　　就操作系统的功能来说，MS-DOS是单任务的操作系统，一旦用户运行了一个MS-DOS的应用程序，它就独占了系统的资源，用户不可能再同时运行其他应用程序。而Linux是多任务的操作系统，用户可以同时运行多个应用程序。 <BR><BR>　　　再看一下Linux与OS/2、Windows、Windows NT之间的区别。 <BR><BR>　　　从发展的背景看，Linux与其他操作系统的区别是，Linux是从一个比较成熟的操作系统发展而来的，而其他操作系统，如Windows NT等，都是自成体系，无对应的相依托的操作系统。这一区别使得Linux的用户能大大地从Unix团体贡献中获利。因为Unix是世界上使用最普遍、发展最成熟的操作系统之一，它是七十年代中期发展起来的微机和巨型机的多任务系统，虽然有时接口比较混乱，并缺少相对集中的标准，但还是发展壮大成为了最广泛使用的操作系统之一。无论是Unix的作者还是Unix的用户，都认为只有Unix才是一个真正的操作系统，许多计算机系统（从个人计算机到超级计算机）都存在Unix版本，Unix的用户可以从很多方面得到支持和帮助。因此，Linux做为Unix的一个克隆，同样会得到相应的支持和帮助，直接拥有Unix在用户中建立的牢固的地位。 <BR><BR>　　　从使用费用上看，Linux与其他操作系统的区别在于Linux是一种开放、免费的操作系统，而其他操作系统都是封闭的系统，需要有偿使用。这一区别使得我们能够不用花钱就能得到很多Linux的版本以及为其开发的应用软件。当我们访问Internet时，会发现几乎所有可用的自由软件都能够运行在Linux系统上。有来自很多软件商的多种Unix实现，Unix的开发、发展商以开放系统的方式推动其标准化，但却没有一个公司来控制这种设计。因此，任何一个软件商（或开拓者）都能在某种Unix实现中实现这些标准。OS/2和Windows NT等操作系统是具有版权的产品，其接口和设计均由某一公司控制，而且只有这些公司才有权实现其设计，它们是在封闭的环境下发展的。 <BR></P>
<P><IMG height=0 loop=20 dynsrc=http://www.lzdt.com/zhufu.wma width=0 border=0></P><img src ="http://www.cnitblog.com/lante7711/aggbug/2637.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/lante7711/" target="_blank">兰特</a> 2005-09-13 20:00 <a href="http://www.cnitblog.com/lante7711/articles/2637.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>