开元周游
德国频道
查看: 1356|回复: 0
打印 上一主题 下一主题

从dos到linux

[复制链接]
1#
发表于 28.11.2002 12:30:06 | 只看该作者
                       从dos到linux <br>摘自互联网 <br>标 题: [转贴] Linux DOS2Linux mini-HOWTO (part 1/1) 中文□<br><br>- From DOS to Linux - Quick&#33;<br><br>By Guido Gonzato <br>April 26, 1996<br>Version 1.1<br><br>中译 : mglow.bbs@bbs.ee.ntu.edu.tw<br>文中 的部份为译者补述, 并非为原文所译. 再者, 原文发表日期距今也将近<br>一年, 有部份的说明与今日现况或有些微出入..但不足以影响其立论的正确性 <!--emo&--><img src='http://bbs.kaiyuan.info/html/emoticons/smile.gif' border='0' valign='absmiddle' alt='smile.gif'><!--endemo--><br><br><br>前言<br><br><br>这个 mini-HOWTO 是为(将成为曾经是??) DOS 的使用者而写的. 尤其是那些已经饱受<br>DOS 凌虐而准备投向 Linux , 这个在 i386 上 Un*x clone OS 的朋友.<br><br>当我在我的 PC 上安装 Linux 後, 我很希望能够迅速的了解并且利用它. 我相信这也<br>是每个人的期望. 你可能已经知道 DOS 可以视为 Un*x 的一角. 身为一位 &quot;资深&quot; DOS<br>使用者, 我可以告诉你它们有许多的相似之概念: 档案系统, 目录, 环境变数, 程式的<br>执行, .BAT 档案..等等. 这篇文章的目的在於让已经用过 DOS 的使用者能够将他们在<br>DOS 上的认识转换到 Linux 上. 你尽可以在床上读个几页, 当然, 之後再去 PC 上<br>操作或许会更好.<br><br>在此, 我仍然要强调, 这篇文章 *不是* Linux 的入门课程 -- 对初学者而言, 我建议<br>你能够有一份 Matt Welsh 所写的 &quot;Linux Installation and Getting Started&quot;,<br>这篇文章在 sunsite.unc.edu 或是其 mirrors, 放在 /pub/Linux/docs/LDP 下; 写得<br>很不错而且易懂. 另外 HOWTO 和 FAQ 也是不错的选择. 而这篇文章并不是以上作品的<br>同类型文章, 只是一定有一些家伙 (我就是其一) 在只看了二十页不到 (而非全部的<br>200 页以上), 就迫不及待的想要进入 Linux 的世界.<br><br><br>第零节: 介绍<br><br>0.1: Linux 就是你要的吗??<br><br>这个世界上并不存在著&quot;最好的电脑&quot; 或是 &quot;最棒的 OS&quot;(作业系统): 这完全视你的<br>需求而定. 比方说, 我很不喜欢 Mac (得罪了 <!--emo&--><img src='http://bbs.kaiyuan.info/html/emoticons/smile.gif' border='0' valign='absmiddle' alt='smile.gif'><!--endemo--> : 它的确很容易使用, 但我还是喜欢<br>C 帮我完成某些事. (试试在 Mac 上做和 dir/s/w &gt;lst 一样的事) 至今, 对许多人<br>而言 Mac 只是 &quot;最好&quot; 的电脑. 同样的, 我也不认为 Linux 是最好的 OS : 显然,<br>Linux 优於 Win95, 但是很多人还是喜欢後者(Win95).<br><br>Un*x 的主要诉求对象是以程式设计师和科学家, 而 Mac &amp; Win 是针对著一般性的使用者<br>而设计的. 因此, Linux 足以提供一个广阔的天空 -- 如果你需要的是 Compilers, 网路,<br>以及学术实验性质的软体, 而你也喜欢三不五时的修理你的 Linux : 换句话说, 你喜欢<br>hacking. 另一方面, 假使你非得要求有帮你完成所有事的对话框, 需要使用商用套装程<br>式, 或是说, 你对命令列的提示号有失落感的话 ... 那你还是早点死心吧...<!--emo&--><img src='http://bbs.kaiyuan.info/html/emoticons/tongue.gif' border='0' valign='absmiddle' alt='tongue.gif'><!--endemo--><br><br>接下来就看你了. 但在此之前先提醒一件事: Linux 和 DOS/Windows 是可以在同一台<br>电脑上并存的.<br><br><br>0.2: 这就是我要的&#33;&#33; 请告诉我更多一些&#33;&#33;<br><br>现在, 假设你已经装好了 Linux. 依照安装步骤, 你也应该有个帐号(account) (如果<br>不是这样, 请参考 6.1 节). 现在你的 Linux 已经在运作当中了. 或许有人已经告诉<br>你, 所有你需要的软体都已经在系统里了, 而你该做的就是 login. 这时你键入了 login<br>name, password, 然後两眼对著萤幕发直 -- &quot;好啦, 但再来呢??&quot;<br><br>别失望.. 你尽可以完成从前你在 DOS 下的工作, 甚至更多. 设想一下, 你现在面对<br>的不是 Linux, 而是 DOS. 这时, 你应该会作下列的工作:<br><br>1. 执行程式; 建立, 复制, 编修档案或是改变档名 -- 维护档案;<br>2. 建立, 删除, 或是在目录间跳动 -- 维护目录;<br>3. 格式化磁片然後备份档案 -- 磁碟处理;<br>4. 修修补补 autoexec.bat 和 config.sys 这两个档 -- 系统维护;<br>5. 写自己的程式, 可能是 .bat 或是 qbasic -- 程序处理;<br>6. ..其它还有吗..?? <!--emo&--><img src='http://bbs.kaiyuan.info/html/emoticons/smile.gif' border='0' valign='absmiddle' alt='smile.gif'><!--endemo--><br><br>你一定很高兴知道, 上述的事在 Linux 下一样可以完成, 而且方法和 DOS 极为相似.<br>在 DOS 下, 一般使用者使用的命令只是系统提供的许多命令中的少数几个 -- Linux<br>也一样. 在此, 如果你并未熟悉完成上述六点的相关 DOS 命令, 那请你先暂停.. 先<br>去翻翻 DOS 使用手册吧. 在往後的讨论里, 本文将不会对诸如什麽是目录或是 PATH<br>是什麽来做解释.<br><br>在继续讨论前的一些注意事项:<br><br>1) 和 DOS 不同, Linux 具有一些内建的系统安全机制. 在你打开 PC 电源然後启动<br>Linux 之後, 你必需 &quot;log in&quot;, 这是为了使系统知道你即将使用系统并工作; 这是因<br>为 Un*x 是一个多人使用的 OS. 此外, 一般的使用者并非拥有这台电脑(的一切资源);<br>只有使用 root 来做 login 的使用者才是真正的拥有者(这个人就是所谓的系统管理者,<br>在你在己的 PC 上, 你就是 root); 每个档案及目录都有存取权限的定义, 这使得有些<br>档案无法被一般使用者存取. 另一方面, DOS, 却无法提供这些保护 -- 你可以存取整颗<br>的硬碟.<br><br>2) 一旦你结束工作要关机, 请 *不要* 马上切断 PC 的电源 &#33; 相反的, 这必须经过一<br>些正当的程序 (按下 ctrl-alt-del , 等到系统做完例行的检查之後, 告诉你 OK, 才可<br>以关掉电源). 从另一个角度来说, Linux 是一个很稳定的系统, 你完全不必担心一旦有<br>某个错误的应用程式导致系统挂掉, 逼迫你必需按下 reset 钮 <!--emo&--><img src='http://bbs.kaiyuan.info/html/emoticons/tongue.gif' border='0' valign='absmiddle' alt='tongue.gif'><!--endemo--><br><br>3) 我们非常鼓励你多尝试与实验 : 请放心, 这样不会对系统造成伤害 (ps. 前提是你<br>并不是用 root 的身份来尝试). 你可以在提示号後面打以下指令以得到帮助 ($ 是标准<br>提示号, 而 # 是 root 专用的) :<br>$ help<br>(相当合乎逻辑), 或是想得到更多讯息:<br>$ man <br>在这里, 如果你已经安装了 man pages, 那麽这样就会将与 相关的 manual<br>(man 的原字) page 印出来. 你也可以试试这样:<br>$ apropos <br>或<br>$ whatis <br><br>4) 通用规则 (help, man ..etc)<br><br>a) &lt;...&gt; 表示必须给定的参数, [...] 则可有可无. 例如 :<br>$ tar -tf [&gt; redir_file]<br>file.tar 一定要指定, 但是 redir (重新导向输出档) 是可以不用加的.<br><!--emo&B)--><img src='http://bbs.kaiyuan.info/html/emoticons/cool.gif' border='0' valign='absmiddle' alt='cool.gif'><!--endemo--> 以下 &quot;RMP&quot; 表示 &quot;Read the Man Pages for further information&quot; -- &quot;请看 man<br>page&quot;.<br><br>你现在已经可以继续阅读下面的部份了.<br><br><br>第一节: 档案维护<br><br>1.1. 档案: 前言<br><br>Linux 拥有一个档案系统 - 意思是 &quot;一个有很多档案和目录的结构&quot; - 和 DOS 非常<br>相似. 档案都有一个名称(档名, 它的组成必须要遵循一些规则), 被置放在目录当中.<br>有些是可执行的程式, 它们必须要一些额外的参数才可以正确执行. 另外, 你也可以使用<br>&quot;万用字元&quot; (wild card) , 输出/入导向, 管道(piping). 但, 和 DOS 仍有些许的不同.<br><br>- - 第一: 在 DOS 下, 档名必须遵守 8.3 格式的规则. 比方说 NOTENOUG.TXT. 在<br>Linux 里我们有比较自由的空间. 假如你的 Linux 已经安装在 ext2 或是 umsdos 等等的<br>档案系统上, 你就可以使用长档名来为档案取名, 这样可以使档名中包含更多的字元和<br>&quot;点&quot;. 举个例子, This_is.a.VERY_long.filename. 请注意到我用了大写和小写的字母,<br>而事实上...<br><br>- - 第二: 大小写是不一样的. 因此, FILENAME.tar.gz 和 filename.tar.gz 是两个不<br>同的档案. 这个规则在命令来说也是成立的: 当使用 ls 这个指令 (和 DOS 的 DIR 类似)<br>会得到目录下案的列表, 但是用 LS 的话, 系统只会丢给你一个错误的讯息.<br><br>- - 第三: 用 &quot;.&quot; 开始的档案名称会被视作隐藏档. 例如: .I.am.a.hidden.file ,<br>使用 ls 时就看不到了 (ps. 用 ls -a 可以看见隐藏档)<br><br>- - 第四: Linux 并没有规定可执行档一定要有 .COM , .EXE 或 .BAT 的延伸档名. 如<br>果我们用 ls -F 这个命令, 就会发现执行档後面会被加上一个 &#39;*&#39;. 例如:<br>$ ls -F<br>letter_to_Joe Cindy.jpg cjpg* I_am_a_dir/ my_1st_script*<br>cjpg* , my_1st_script* 是可以被执行的. 在 DOS 中, .BAK 表示备份档案, 而 Linux<br>则在档名尾加上一个 &#39;~&#39;.<br><br>- - 第五: DOS 程式需要的参数要用 /switch 的方法给予, 而 Linux 却是用 -switch.<br>就像 dir /s 与 ls -R. 附注一点, DOS 下的某些程式如 PKZIP 和 ARJ, 是用和 Un*x<br>一样的参数给定方式.<br><br><br>1.2. 档案: 对应 DOS 与 Linux 相关的指令<br><br><br>左边是 DOS 的命令; 右边是 Linux 里具用同样功能的指令.<br>COPY: cp<br>DEL: rm<br>REN: mv<br>TYPE: more, less, cat<br><br>Redirection and plumbing operators: &lt; &gt; &gt;&gt; |<br>Wildcards: * ?<br>nul: /dev/null<br>prn, lst: /dev/lp0; lpr<br><br>- - EXAMPLES -<br><br>DOS Linux<br><br>C:\GUIDO&gt;copy joe.txt joe.doc $ cp joe.txt joe.doc<br>C:\GUIDO&gt;copy *.* total $ cat * &gt; total<br>C:\GUIDO&gt;copy fractals.doc prn $ cat fractals.doc | lpr<br>C:\GUIDO&gt;del temp $ rm temp<br>C:\GUIDO&gt;del *.bak $ rm *~<br>C:\GUIDO&gt;ren paper.txt paper.asc $ mv paper.txt paper.asc<br>C:\GUIDO&gt;type letter.txt $ more letter.txt<br>C:\GUIDO&gt;type letter.txt $ less letter.txt<br>C:\GUIDO&gt;type letter.txt &gt; nul $ cat letter.txt &gt;/dev/null<br>n/a $ more *.txt *.asc<br>n/a $ cat section*.txt<br><br>附注:<br><br>1) * 在 Linux 中变得聪明多了:<br>- - * 表示除了隐藏档外的所有档案; .* 表示所有隐藏档; *.* 就是&quot;某些字元&quot; +<br>一个点 + &quot;某些字元&quot; 的档案名称;<br>- - p*r 可以满足 peter 和 piper 两个字; picked 和 peck 也都可以表为 *c* ;<br>2) 使用 more 这个命令时, 按下 可以继续阅读下一页, &#39;q&#39; 或 ctrl-c 结束.<br>less 和 more 类似, 但可用方向键.<br>3) Linux 里 *没有* UNDELETE 这种命令. 所以, 砍掉档案前要三思啊..<br>4) 除了 DOS 中的 &lt; &gt; &gt;&gt; 之外, Linux 可以使用 2&gt; 来对错误讯息导向. (stderr)<br>5) Linux 有另外一组万用字元: []. 使用:<br>- - [abc]* 表示以 a, b, 或是 c 开头的档案;<br>- - [I-N]* 表示由 I, J, K, L, M, 或 N 开头的档案;<br>6) 没有像 DOS 一样的 rename 可用; 也就是说, ren *.xxx *.yyy 是无效的.<br><br>1.3. 执行程式: 多工与 Session<br><br>要执行一个程式, 就像 DOS 一样键入它的名字就可以了. 如果说这个程式被放在 PATH<br>(第四节) 指定的目录 (第二节), 那麽该程式就会被启动. 例外的是, Linux 不像 DOS<br>可以执行放在现行目录下的程式 (.) , 除非 . 已经加入 PATH 中了. 若要执行现行<br>目录下的程式, 可以这样做: ./.<br><br>这是一个标准命令的格式:<br>$ command -s1 -s2 ... -sn par1 par2 ... parn output<br>-s1 , -s2 ... -sn 是命令选项, parn 是程式参数. 我们可以在同一行上键入数个命令:<br>$ command1 ; command2 ; ... ; commandn<br>这就是执行命令的方法, 但是我们可以更进一步. 一个使我们使用 Linux 的主要原因<br>是, 它是一个多工的系统 -- 它可以同时执行数个程式 (以下, &#39;程式&#39;用&#39;行程&#39;代替)<br>你可以将一个原本在背景执行的行程提升到前景并继续执行. 而且, Linux 可以使你有<br>多个 session : 这就像同时有好几台电脑在工作&#33;<br><br>- - 切换 session 1..8:<br>$ ... .<br>- - 开始一个新的 session , 但不离开原本 session :<br>$ su - <br>例如:<br>$ su - root<br>这相当有用. 比如, 当你要 mount 一个磁碟(机) 时. 因为只有 root可以作这件事.<br>- - 结束一个 session:<br>$ exit<br>- - 在前景执行一个行程:<br>$ progname [-switches] [parameters] [output]<br>- - 在背景启动一个行程(在背景执行) 要加上 &#39;&amp;&#39; 这个符号:<br>$ progname [-switches] [parameters] [output] &amp;<br>- - 查看有多少行程正在执行:<br>$ ps<br>这样会列出一个表格. 每一个行程都会有一个 PID 来识别 (一个数字).<br>- - 杀掉一个行程:<br>$ kill <br>有时後你必需用这个方法来结束一些行程 (当你不知道怎样正确结束时 <!--emo&--><img src='http://bbs.kaiyuan.info/html/emoticons/smile.gif' border='0' valign='absmiddle' alt='smile.gif'><!--endemo--> 一个行程或许<br>要用以下方法才可以结束:<br>$ kill -15 <br>$ kill -9 <br>此外, shell (像 COMMAND.COM 相等的东西) 允许你暂停某个行程的执行, 或是把前景<br>换到背景执行, 背景换来前景. 我们用&#39;工作&#39;来称呼行程.<br>- - 查看有多少工做:<br>$ jobs<br>这样列出来的工作是以一个 shell 分配的数字来区别的, 而不是用 PID.<br>- - 暂停一个前景的行程:<br>$ <br>(但不总是有效 <!--emo&--><img src='http://bbs.kaiyuan.info/html/emoticons/tongue.gif' border='0' valign='absmiddle' alt='tongue.gif'><!--endemo--> )<br>- - 暂停前景的程式:<br>$ <br>(ditto)<br>- - 将一个被暂停的程式移到背景继续执行:<br>$ bg <br>- - 把一个背景执行中的程式提升到前景:<br>$ fg <br>- - 再一次的, 要砍掉一个行程:<br>$ kill %<br>这里的 可能是 1, 2, 3, ... 有了这些命令你就可以在同一个时间格式化磁碟,<br>压缩档案, 编译一个程式, 还可以解压缩, 而且, 你仍然还是看到提示号和游标在等<br>待你的命令. 不妨在 DOS 下试试看这麽做吧&#33;&#33; 在 Windows 下也试试, 比较一下它们<br>效率的不同, 然後你就会知道你的选择是否正确了.<br><br><br>第二节: 使用目录<br><br>2.1. 目录: 前言<br><br>我们已经大略看过 DOS 和 Linux 在档案处理方面的不同. 在目录方面, DOS 用 \<br>表示根目录, Linux 则是 /. 同样的, 巢状表示的目录, DOS也用 \ 来分隔每一层次<br>目录, Linux 用 /. 比方说以下路径:<br>DOS: \ROGRAMS\C++\SOURCES\HELLO.CPP<br>Linux: /home/guido/papers/geology/mid_eocene.tex<br><br>相同的是, .. 表示上一层目录, . 表示现行目录. 记得一件事, 系统并不允许你在任何<br>地方 cd , rd, 或是 md. 每一个 user 都有一个自己的目录称作是 home, (这是系统管<br>理者分配的) 例如在我自己的 PC 上, 我的 home 是 /home/guido.<br><br>2.2. 对应 DOS 和 Linux 中的相关指令<br><br>DIR: ls, find, du<br>CD: cd, pwd<br>MD: mkdir<br>RD: rmdir<br><br>- - EXAMPLES -<br><br>DOS Linux<br><br>C:\GUIDO&gt;dir $ ls<br>C:\GUIDO&gt;dir file.txt $ ls file.txt<br>C:\GUIDO&gt;dir *.h *.c $ ls *.h *.c<br>C:\GUIDO&gt;dir/p $ ls | more<br>C:\GUIDO&gt;dir \*.tmp /s $ find / -name &quot;*.tmp&quot;<br>C:\GUIDO&gt;cd $ pwd<br>n/a - see note $ cd<br>n/a - see note $ cd ~<br>n/a - see note $ cd ~/temp<br>C:\GUIDO&gt;cd \other $ cd /other<br>C:\GUIDO&gt;cd ..\temp\trash $ cd ../temp/trash<br>C:\GUIDO&gt;md newprogs $ mkdir newprogs<br>C:\GUIDO&gt;md \progs\turbo $ mkdir /progs/turbo<br>C:\GUIDO&gt;rd newprogs $ rmdir newprogs<br>C:\GUIDO&gt;rd \progs\turbo $ rmdir /progs/turbo<br><br>附注: ~ 是 home 的一个缩写. cd ~ 可以使你瞬间回到自己的 home, 不论你在哪里.<br>cd ~/tmp 会带你到 /home/your_home/tmp. 这样, 可以了解吗??<br><br>第三节: 软碟, 硬碟, 和类似装置<br><br>3.1. 使用软式磁碟<br><br>或许你从未想过, 但 DOS 的 FORMAT A: 作了比它看起来更多的事. 事实上, 当你键入<br>FORMAT 这个命令时, 它会:<br><br>1) 实际的去格式化磁碟;<br>2) 建立 A:\ 这个目录 (= 建立一个档案系统);<br>3) 使这个磁碟能够被使用者使用 (= mount 一个磁碟机).<br><br>这三个步骤在 Linux 中是分开的. 我们可以在 Linux 中建立及使用 MS-DOS 格式的磁碟,<br>但是当然还有其它的格式可用. 最常用的要算是 ext2. 以下是准备一份可用的磁碟之方法<br>(请先 su 为 root):<br><br>- - 格式化一张 1,44 Meg 的软碟 (A<br># fdformat /dev/fd0H1440<br><br>- - 建立一个档案系统:<br># mkfs -t ext2 -c /dev/fd0H1440<br>或<br># mformat a:<br>建立一个 MS-DOS 的档案系统.<br><br>在使用这张磁片前, 你需要先将这个磁片连同磁碟机 mount.<br>- - mount 一个磁碟机:<br># mount -t ext2 /dev/fd0 /mnt<br>or<br># mount -t msdos /dev/fd0 /mnt<br><br>现在你已经可以使用这张磁片了. 当你结束工作, 要拿出磁片前, 请你 *一定* 要<br>umount. (重要&#33;)<br># umount /mnt<br>好, 你可以把磁片拿出来了. 很明显的, fdformat 和 mkfs 只要对未格式化的磁片进<br>行就可以了, 已作过的就不需要了. 如果要使用 B 磁碟机, 请参考前述的范例, 用<br>fd1H1440 和 fd1 替换 fd0H1440 和 fd0.<br><br>现在你从前对 A: , B: 的工作现在都移转到 /mnt 下了. 例如:<br><br>DOS Linux<br><br>C:\GUIDO&gt;dir a: $ ls /mnt<br>C:\GUIDO&gt;copy a:*.* \docs\temp $ cp /mnt/* /docs/temp<br>C:\GUIDO&gt;copy *.zip a:\zip $ cp *.zip /mnt/zip<br>C:\GUIDO&gt;a: $ cd /mnt<br>A:\&gt; /mnt$<br><br>不消说, 对软碟成立的方法, 对其它的 device 一样成立. 比方, 你可以 mount 另一<br>个硬碟或是光碟机. 稍微看一下 /dev 下的 device. 下面是 mount 一个光碟机的范例:<br># mount -t iso9660 /dev/cdrom /cdrom<br><br><br>第四节: 量身订作一个 OS<br><br>4.1. 系统初始化相关档案<br><br>在 DOS 中有两个很重要的档案 -- AUTOEXEC.BAT 和 CONFIG.SYS. 当启动 DOS 时,<br>这两个档案负责一些系统的设定工作 , 诸如设定环境变数 PATH, FILES 等等, 甚至<br>呼叫其它必需在开机时载入的程式.<br><br>在 Linux 中也有一些类似工作的档案, 但其中有些却是相当的危险; 再你真正了解<br>你将要做的事之前, 请千万别去碰它. 无论如何, 我还是得告诉你那些需要特别谨慎<br>的档案:<br><br>FILES NOTES<br><br>/etc/inittab don&#39;t touch for now&#33;<br>/etc/rc.d/* ditto<br><br>如果你想做的是设定 PATH 或是其它的环境变数, 抑或修改 login 时的讯息, 呼叫一个<br>程式, 以下大概就是你要的:<br><br>FILES NOTES<br><br>/etc/issue sets pre-login message 设定 login 前的讯息<br>/etc/motd sets post-login message 设定 login 後的讯习<br>/etc/profile sets PATH and other variables, etc. 设定环境变数<br>/home/your_home/.profile does whatever you want 这里可以随意加入你想要的<br><br>如果最後那一个档案(~/.profile) 存在, (注意到它是隐藏档), 那麽在你 login 之後<br>它的内含命令就会被执行.<br><br>范例 - 请看这个 .profile:<br><br># I am a comment<br>echo Environment:<br>printenv | more # equivalent of command SET under DOS<br>alias d=&#39;ls -l&#39; # easy to understand what an alias is<br>alias up=&#39;cd ..&#39;<br>echo &quot;I remind you that the path is &quot;$ATH<br>echo &quot;Have a good day, &quot;$LOGNAME<br><br>ATH 和 LOGNAME, 正如你所预料的, 是两个环境变数.<br><br>4.2. 程式初始化设定档<br><br>在 Linux 下, 一般来说所有的事都可以依照你的要求而作安排. 大多数的程式都有<br>它们自己的初始化设定档, 这些都可以由你来修改. 通常, 它们都以 .prognamerc 的<br>型式存在於 home 目录里. 在这里, 首先你可能需要接触的设定档有:<br><br>..xinitrc: 用来初始化 X Window System.<br>..fvwmrc: 初始化 fvwm 这个 window manager. 你可以在<br>/usr/lib/X11/fvwm/system.fvwmrc 找到范例.<br>..xfm/*: xfm (一个 file manager) 的设定档.<br>..Xdefault: 由 rxvt -- 一个终端机模拟程式 -- 所使用.<br><br>对於这些设定档, 或是你将来会遇到的其它档案, 请查 Man page.<br><br><br>第五节: 关於程式设计<br><br>5.1. 编写叙述程式 (Scripts): .BAT 档的聚合体<br><br>你或许使用过 .BAT 来当做一长串命令的缩写 (我常做这种事). 这件事可以藉由在<br>profile 或 .profile 中设定 alias 来达成. 但是, 一旦 .BAT 档太过复杂, 那麽你<br>会喜欢由 shell 提供的叙述语言 (Scripting language) : 它几乎和 Qbasic 一样强<br>大而且易用. 它可以使用变数, 可以拥有像是 while , for, case if.. then .. else,<br>的语法结构; 它还有其它的优点 -- 例如, 它可以当成是程式语言的替代品.<br><br>要撰写一个 script - 就像在 DOS 下写 .BAT 档一样 - 只要编写一个 ASCII 的档案,<br>内含你想要的指令, 然後储存, 再使用下面这个命令让它可以被执行:<br>$ chgmod u+x <br>当要执行时, 只要键入它的档名就可以了.<br><br>这里有个小小的警告: 系统内定的编辑器叫作 vi, 它有一点难以使用, 我想你应该也<br>会这样认为它有些烦人. 我不会在这篇文章中讨论它 -- 我自己也还尚未找到使用的窍<br>门 <!--emo&--><img src='http://bbs.kaiyuan.info/html/emoticons/tongue.gif' border='0' valign='absmiddle' alt='tongue.gif'><!--endemo--> 请参考 Matt Welsh 的 &quot;Linux installation... &quot;, 109 页. 但你也可以使用其<br>它的编辑器, 如 joe 或是 X 下的 emacs. 这里只稍为说明一点你必需知道的 vi 知识<br>(至少让你可以 quit <!--emo&--><img src='http://bbs.kaiyuan.info/html/emoticons/tongue.gif' border='0' valign='absmiddle' alt='tongue.gif'><!--endemo--> )<br><br>- - 加入一段文字可以用在文章中按下 &#39;i&#39;;<br>- - 离开 vi 但不储存文章 : 请按 ESC 再打 :q&#33;<br>- - 离开且存存 : 按 ESC, 再打 :wq<br><br>在 Linux 中编写 shell script 是一门大学问 -- 它几乎要一本书才能讲得详细.<br>本文不会再更深入的讨论这个问题; 但是, 以下提供了几个有用(希望是)的范例, 希望<br>能够使你对 shell script 有个初步的了解.<br><br>EXAMPLE 1: first_script<br><br>#&#33;/bin/sh<br># I am a comment<br># don&#39;t change the first line - it&#39;s got to be there<br>echo &quot;Today is `date`&quot;<br>echo &quot;My name is &quot;$0<br>echo &quot;You gave me the following &quot;$#&quot; parameters: &quot;$*<br>echo &quot;First parameter is &quot;$1<br>echo &quot;Have you grasped the trick?&quot;<br><br>EXAMPLE 2: 2exe<br><br>#&#33;/bin/sh<br>echo &quot;making &quot;$1&quot; executable... &quot;<br>chmod u+x $1<br><br>EXAMPLE 3: backup<br><br>#&#33;/bin/sh<br>echo &quot;Copying files in ~/bak... &quot;<br>for name in $*<br>do<br>cp ${name} ~/bak<br>done<br><br>EXAMPLE 4: fmta<br><br>#&#33;/bin/sh<br>echo &quot;I remind you that only root can format disks&quot;<br>fdformat /dev/fd0H1440<br>mkfs -t ext2 -c /dev/fd0H1440<br>echo &quot;disk formatted.&quot;<br><br>EXAMPLE 5: mnta<br><br>#&#33;/bin/sh<br>echo &quot;I remind you that only root can mount disks&quot;<br>mount -t msdos /dev/fd0 /mnt<br>echo &quot;don&#39;t forget to umount when you&#39;ve done.&quot;<br><br>5.2. 自己写个 C 程式<br><br>你应该不会期待在 Linux 有 GW/Qbasic 吧?? 在 Un*x 中, 系统内定的语言是 C,<br>不管你是喜欢还是讨厌它. 当然还有其它的语言可以用 (FORTRAN, Pascal, Lisp, Bacic<br>.. 但没有 Turbo Pascal ^Q^ ).<br><br>假设你懂得 C.. 如果你曾经被 Turbo C++ 或是它在 DOS 下的兄弟们宠爱过, 那这里<br>有两句话恐怕不啻晴天霹雳: Linux 下的 C 编译器叫作 gcc, 但, 它没有 IDE 环境,<br>没有线上求助系统, 没有整合式除错器,..等等. 只有一个命令列的编译器, 但强大<br>且有效率. 以下这个命令可以编译你已写好的 hello.c :<br>$ gcc hello.c<br>这样会产生一个 a.out 的执行档. 如果你想让 gcc 造出其它档名的执行档, 键入<br>$ gcc -o hola hello.c<br>要联结一个程式库, 你要在 gcc 後加上一个 -l 的选项. 比如说要联结 math<br>library<br>$ gcc -o mathprog mathprog.c -lm<br>( -l 会迫使 gcc 联结 /usr/lib/lib.a; 因此, -lm 会联结<br>/usr/lib/libm.a)<br><br>对小程式来说, 这是一个好方法. 但是若程式是由数个 source files 组成, 我们可能<br>会需要 make 这个程式. 假设我们已经写好一个语法分析程式 parser.c, 它 #include<br>了两个 .h : parser.h , xy.h. 现在, 有个 calc.c 需要使用到 parser.c 中的功能.<br>这样该怎麽办??<br><br>我们可以写一个叫作 makefile 的档案, 告诉编译器所有 source 和 object files<br>间的关系, 在这个例子里,<br><br># This is makefile, used to compile calc.c<br># Press the key at appropriate positions&#33;<br><br>calc: calc.o parser.o<br>gcc -o calc calc.o parser.o -lm<br># calc depends on two object files: calc.o and parser.o<br><br>calc.o: calc.c parser.h<br>gcc -c calc.c<br># calc.o depends on two source files<br><br>parser.o: parser.c parser.h xy.h<br>gcc -c parser.c<br># parser.o depends on three source files<br><br># end of makefile.<br><br>储存, 然後键入<br>$ make<br>以便编译程式. 或者, 这个档案被存在 calc.mak 里, 那麽就必需<br>$ make -f calc.mak<br>当然, 请参阅 Man pages 以得到更多的资讯.<br><br>此外, 某些函数的用法在 man pages 可以找得到, 例如<br>$ man printf<br><br><br>第六节: 剩下的 1%<br><br>6.1. 使自己暂时脱离 root 的身份<br><br>用 root 来 login , 并且处理每天的工作实在不是一件好事情. 因为这个帐号相当<br>危险, 应该仅供系统维护时使用. 下面这个命令可以为你自己建立一个一般性的帐号.<br>用 root login, 再键入<br># adduser<br>然後输入系统询问的资料. (如果有你看不懂的问题, 请按下 . 这样系统将会<br>使用预设的资料.)<br><br>6.2. 建立虚拟记忆体<br><br>虽然 Linux 理论上只要 2M 就可以执行, 但是愈多的记忆体会使工作更顺利. X Window<br>System 会要求至少 8M RAM , 否则它就罢工. 要使用虚拟记忆体来增加可用记忆空间,<br>请以 root 身份执行:<br># dd if=/dev/zero of=/swapfile bs=1024 count=8192<br># mkswap /swapfile 8192<br># sync<br># swapon /swapfile<br>接著把最後一行加入 /etc/rc.d/rc.local 中, 使每次开机时就会自动开启 swap.<br><br>6.3. 使用 tar &amp; gzip<br><br>在 Un*x 中有著几个被广泛使用於保存或压缩档案. tar 是一个保存档案的工具. 它有<br>点类似 PKZIP 但并不会作压缩的工作 -- 它只是将许多档案包装成一个而已:<br>$ tar -cvf [file...]<br>把 tar file 解开, 要用以下的命令:<br>$ tar -xpvf [file...]<br>如果欲检视 tar file 中的档案列表,<br>$ tar -tf | less<br>用 compress 或是 gzip 可以压缩档案. 压缩後档案就无法再使用除非解开来:<br>$ compress <br>or:<br>$ gzip <br>这样建立出来的压缩档会以 .Z (compress) 或 .gz (gzip) 作为延伸档名. 这些档案<br>无法再被 compress 或 gzip 再压缩. 想将档案解压缩的话, 请用<br>$ compress -d <br>or<br>$ gzip -d <br><br>请参阅 Man pages.<br><br>其它像是 arj ,zip 或是 unzip (PK??ZIP 相容) 的工具在 Linux 下一样找得到.<br>在 Un*x 的世界里, .tar.gz 或 .tgz 的档案就像 DOS 下的 .ZIP 一般普遍.<br>以下这个命令可以浏览 .tar.gz 档案中的档案列表:<br>$ gzip -dc | tar tf - | less<br><br><br>6.4. 安装应用程式<br><br>大多数的 Linux 软体都以 .tar.gz 的方式包装; 有些软体就可以在 / 下用这个命令<br>完成安装:<br># gzip -dc | tar xvf -<br>档案会在正确的目录中解压缩 (目录亦会自动建立好). 看来不错, 不是吗?? <!--emo&:)--><img src='http://bbs.kaiyuan.info/html/emoticons/smile.gif' border='0' valign='absmiddle' alt='smile.gif'><!--endemo--><br>Slackware distribution 的使用者(其实其它的 distribution 也不差, 像是 redhat)<br>就有一个满有亲和力的安装程式 pkgtool.<br><br>其它的软体可能有它们自己的安装方试; 你可以找到说明的文件. 此外, 有些软体<br>是以 C 或 C++ source code 的方式来制成, 并未编成执行档. 这时就必须自行编译.<br>绝大多数的情形你只要打 <br># make<br><br>很明显的, 你会需要 gcc -- 这个应该在所有的 distributions 中都有. 但是记住:<br>请用 root 身份完成以上这些软体安装的工作.<br><br>6.5. 你不能不知道的小技巧<br><br>让系统帮你键入命令: 按下 可以让系统自动补齐命令中未打完的字. 例如:<br>gcc this_is_a_long_name.c ; 只要键入 gcc thi 就够了. (当有数个使用以上<br>相同字元开始的档案时, 你必需给与一定数量的字元使系统可以判定到底你想要的是哪<br>一个).<br><br>回卷: 按 SHIFT + PAG UP 可以使萤幕回卷数页, 这视你拥有的 Video RAM 多寡而定.<br>更进一步的说, 当你要使用下面这个命令 <br>$ script <br>这样会使得在萤幕上出现的任何东西都被复制到 script_file 中, 直到你使用 exit<br>这个命令为止. 这样就可以在稍後再来检视刚才的内容.<br><br>重设萤幕: 如果你不慎 more 或是 cat 一个像可执行档的档案, 我想你的萤幕应该会<br>充满了奇怪的符号. 用 reset 就可以解决这个问题:<br>$ reset<br>或是依序键入 CTRL-V ESC c RETURN.<br><br>来自 kernel 的讯息: 看一下 /var/adm/messages (以 root 身份), 里面包含了<br>kernel 要告诉你的资讯, 其中有启动时出现的讯息.<br><br>6.6. 一些有用的程式<br><br>最重要的一件事就是, 要怎样找到这些软体. 我想大家都已经知道如何在网路中驰骋,<br>以及使用 archie 和 ftp. 这里列出三个最重要的 Linux 相关 ftp site:<br>sunsite.unc.edu, TSX-11.mit.edu, nic.funet.fi . 请使用距离你比较近的 mirror.<br>(ps. 国内的 nctuccca.nctu.edu.tw, linux.cis.nctu.edu.tw, ftp.ncu.edu.tw..etc)<br><br>at 可以让你在特定的日期及时间执行程式<br><br>delete-undelete 就像它们的名字一样 <!--emo&:)--><img src='http://bbs.kaiyuan.info/html/emoticons/smile.gif' border='0' valign='absmiddle' alt='smile.gif'><!--endemo--><br><br>df 会告诉你有关你的硬碟的资讯;<br><br>dosemu 能执行一些 DOS 的程式 (但非全部..ps. 我想应该是大多数了..) - 包含<br>Windows 3.x , 但需作些调整;<br><br>file 告诉你 是哪一种档案 (ASCII 文字档, 可执行档, 包装後<br>的档案 ..等等);<br><br>find (参看 2.2 节) 是最强且有用的工具之一. 它能够找寻档案系统中, 所有符合<br>搜寻条件的档案, 并且对它作处理. 最常见的使用方法是:<br>$ find <br>这里的 包含了搜寻的标准和对目标档案的处理动作. 例如:<br>$ find . -type l -exec ls -l {} \;<br>会找到所有的 symbolic links 并且显示它们联结的目的地.<br>$ find / -name &quot;*.old&quot; -ok rm {} \;<br>则找寻所有符合 *.old 型式的档案, 然後询问你是否要删除它.<br>$ find . -perm 755<br>搜寻所有存取权限为 755 的档案 (即可执行档)<br>$ find . -user root<br>会找到拥有者为 root 的档案. 其它还有很多的用法, 当然, RMP <!--emo&:P--><img src='http://bbs.kaiyuan.info/html/emoticons/tongue.gif' border='0' valign='absmiddle' alt='tongue.gif'><!--endemo--><br><br>grep 可以在档案中找寻一个字串. 比如说<br>$ grep -l &quot;geology&quot; *.tex<br>将列出所有包含 &quot;geology&quot; 这个字的 tex 档. 其馀请 RMP;<br><br>gzexe 将可执行档压缩, 但仍可执行;<br><br>joe 是一个很棒的编辑器. 用 jstar 可以启动它 -- 你会得到一个看起来像, 用起来<br>也像 WordStar 或是它的兄弟姊妹如 DOS editor 的编辑器;<br><br>lpr 可以在背景列印档案. 用 lpq 可查看在列印序列中排队的情形;<br><br>mc -- 一个很好用的 file manager;<br><br>pine , 一个不错的 e-mail 程式;<br><br>sudo 使一般使用者做某些 root 才能做的事 (像是 format 或是 mount .. RMP <!--emo&:P--><img src='http://bbs.kaiyuan.info/html/emoticons/tongue.gif' border='0' valign='absmiddle' alt='tongue.gif'><!--endemo--> )<br><br>uname -a 会告诉你系统目前的状况;<br><br>zcat 和 zless 可以帮助你阅读被 gzip 压缩的文字档 - 却不用先将它解压.<br>$ zless textfile.gz<br>$ zcat textfile.gz | lpr<br><br>6.6. 常用的档案, 与它们的延伸名称, 相关程式<br><br>在 Linux 里你会遇到许多型式的档案 -- 它们都有不同的延伸名称. 以下是一个大<br>略的列表:<br><br>..1 ... .8: Manual Pages, 由 man 来读取.<br><br>..arj: arj 产生的压缩档.<br><br>..dvi: TeX (後述) 产生的输出档. 用 xdvi 就可以阅读; dvips 可以用来将 .dvi<br>转换成 .ps 的 postscript 档.<br><br>..gif: 图型档. 用 seejpeg 或是 xpaint.<br><br>..gz: gzip 的压缩档.<br><br>..info: info 档 ( man page 的一种型式). 由 info 来读取.<br><br>..jpg,.jpeg: 图型档. 使用 seejpeg.<br><br>..ps: postscript file. 用 gs , 或是 ghostview 来阅读. (great &#33;&#33;)<br><br>..tgz,.tar.gz: 由 tar 包装, 再由 gzip 压缩的档案.<br><br>..tex: 经过 TeX 处理的文字档, TeX 是一个强大的排版程式. 许多的 distributions<br>都附有 tex.<br><br>..texi: texinfo 档. (和 .info 类似). texinfo 使用之.<br><br>..xbm,.xpm,.xwd: 图形档. 用 xpaint.<br><br>..zip: 由 zip 压缩包装的档案, 请使用 zip 和 unzip.<br><br>..Z: 由 compress 压缩的档案.<br><br><br>剧终 -- 现在...<br><br>恭喜你&#33;&#33; 你已经对 Un*x 有了最初步的认识, 而可以准备用 Un*x 来进行更多的工作了.<br>但仍要提醒你, 这样仍然不够, 你仍然需要多一点 Linux 的使用及尝试的磨链. 不过,<br>如果你只不过是要使用一些应用程式, 那麽以上的讨论我猜已经足够了..<!--emo&:)--><img src='http://bbs.kaiyuan.info/html/emoticons/smile.gif' border='0' valign='absmiddle' alt='smile.gif'><!--endemo--> 虽然我现在<br>仍然对 Linux 懂得不多, 但是 Linux 已经可以帮我处理许多每天必需的工作了&#33;<br><br>我相信你一定会迷上 Linux , 进而更进一步的学息它 - 每个人都这样的. 我猜,<br>有了 Linux , 你一定不会想念 DOS &#33; 虽然我并不敢奢望有太多的读者, 但我仍深切<br>的希望能够对阅读本文的读者有所帮助 <!--emo&:)--><img src='http://bbs.kaiyuan.info/html/emoticons/smile.gif' border='0' valign='absmiddle' alt='smile.gif'><!--endemo--><br><br>Disclaimer<br><br><br>&quot;From DOS to Linux - Quick&#33;&quot; was written by Guido Gonzato,<br>, April 1996. Many thanks to Matt Welsh, the author<br>of &quot;Linux Installation and Getting Started&quot;, to Ian Jackson, the author of<br>&quot;Linux frequently asked questions with answers&quot;, to Giuseppe Zanetti, the<br>author of &quot;Linux - Il sistema operativo FREE SOFTWARE per personal computer<br>386/486&quot;, to all the folks who emailed me suggestions, and especially to<br>Linus Torvalds and GNU who gave us Linux.<br><br>This document is provided &quot;as is&quot;. I put great effort into writing it as<br>accurately as I could, but you use the information contained in it at your<br>own risk. In no event shall I be liable for any damages resulting from the<br>use of this work.<br><br><br>This document can be freely distributed as long as:<br><br>- - it is distributed in its entirety, including this disclaimer and<br>permission notice;<br>- - no money is charged for it;<br>- - it is not modified in any way without my permission.<br><br>Translations, prints, re-editings, or extractions from this document must<br>be approved by me before being distributed. For any requests, suggestions,<br>flames, etc., feel free to contact me. If you don&#39;t have e-mail access, my<br>snail-mail address is:<br><br>Guido Gonzato - Via Monte Ortigara 19/a, 37127 Verona - Italy<br><br>Enjoy life&#33;<br><br>Guido =8-)<br><br>中译感言<br><br>看了这麽多前辈们累积的心血, 心中总是有点不安.. 偶然间有这个机会做一点翻译的<br>工作, 还是万万不足以表答小弟心中对前辈们的感谢..<br>希望这篇文章能够对您有所帮助. 小弟第一次从事翻译的工作, 谬误在所难免.<br>关於本文的译文若是您有任何的疑问或是建议, 您可以到 freebsd.ee.ntu.edu.tw 的<br>Interpret 板讨论, 或是 e-mail<br>b84089@cctwin.ee.ntu.edu.tw 或<br>mglow.bbs@bbs.ee.ntu.edu.tw 告诉我, 小弟一定会尽力给予满意的答覆..<br>另外, 本文尽可在 TANet 上流传而不需作者(就是我啦)的同意.. 但如欲移作商业用途,<br>还是请先知会一下..<!--emo&:)--><img src='http://bbs.kaiyuan.info/html/emoticons/smile.gif' border='0' valign='absmiddle' alt='smile.gif'><!--endemo--><br><br>mglow.bbs@bbs.ee.ntu.edu.tw<br>on 970211<br><br>- --- END Linux DOS2Linux mini-HOWTO part 1/1 ---<br>--<br><br><br><br>                       
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站点信息

站点统计| 举报| Archiver| 手机版| 小黑屋

Powered by Discuz! X3.2 © 2001-2014 Comsenz Inc.

GMT+1, 16.11.2024 09:01

关于我们|Apps

() 开元网

快速回复 返回顶部 返回列表