当前位置:Linux教程 - Linux - 循序渐进学习LINUX

循序渐进学习LINUX



         张斌·yesky

    LINUX以其优越、稳定的网络服务器性能征服了许许多多的软、硬件制造商和广大计算机迷。据CNET报导,IDC资料显示,Linux在伺服器市场已经夺下第二名的宝座。从1998到1999,Linux在伺服器市场的占有率从16%大幅成长为25%,IDC原本预期Linux将在2002或2003年成为市占率第二,没想到这个预测1999便即实现。
      
      LINUX开始于芬兰赫尔辛基大学的Linus Torvalds的业余爱好,当时他想建立一个代替Minix操作系统的、可用于基于Intel的个人计算机上的UNIX类操作系统。LINUX的标志(吉祥物)是一只企鹅。从LINUX1.0发布以来,它越来越多的得到电脑迷的青睐,并得到广大电脑爱好者的不断补充的更新。

      LINUX的很多部分是在GNU的通用公共许可证的保护下发布的。这个操作系统是由世界各地的数以百计的程序员设计和实现的,其目的是建立不受任何商品化软件的版权制约的、全世界都能自由使用的UNIX兼容产品。到现在,LINUX已经是一个在个人计算机和工作站上使用的UNIX操作系统,是UNIX的免费版本,其基本系统对硬件要求很低,它在很多系统上是相当的稳定。

      LINUX是目前唯一可免费获得的、为PC及的多个用户提供多任务、多进程功能的操作系统。一个可以从网上或其他途径自由获得的免费软件。安装LINUX,不仅可以亲身体验成为系统管理员的个中滋味,为笔者们了解世界上流行的UNIX操作系统提供了廉价的机会;还可以通过在网络上开放一些服务而建立自己的网站。现今比较流行的版本是:Turbo LINUX、RedHat LINUX、Slackware LINUX、Solaris。我国支持的是红旗LINUX。

      笔者接触LINUX较晚,曾花费一段时间学习LINUX,现将学习笔记整理如下,望能与LINUX高手、爱好者相互学习。

      LINUX特性综述

      一、系统特征

      LINUX系统有文本编辑界面和图形用户界面(GUI),笔者更喜欢到GUI界面的仿真终端进行命令输入。其特征包括:多用户、多任务、多平台、可编程SHELL、提供源代码、仿真终端、支持多种文件系统及强大的网络功能等。

      多用户:多个用户(六个)能同时从相同或不同的终端(终端号:tty1~tty6)上用同一个应用程序的副本进行工作。在控制台,切换终端的命令是:ALT+F1~F6;在仿真终端窗口(ps/0~n)是:SHIFT+ALT+F1~F6。

      多任务:可同时执行多个程序,程序之间互不妨碍。与WINDOWS的多任务不同,LINUX将系统没有用到的剩余物理内存全部用来做硬盘的高速缓存。笔者曾经打开三个xterm,分别用于查找文件、调试程序、发邮件。而且还可以指定某一个程序在后台运行,指定某一些程序在特定的时间内运行(at命令)。

      多平台:LINUX能在X86平台上运行,也能移植到其他平台。

      可编程SHELL:SHELL是解释并执行命令的系统外壳程序。通过编写SHELL程序,使得系统更加个性化;而且在一些程序中具有C语言的功能。

      提供源代码:LINUX是自由软件,源代码完全公开,可以自行编译内核,修改和扩充操作系统,进行二次开发。

      LINUX支持的文件系统很多,例如:EXT2、NFS、VFS、ISO9660、MSDOS等等。

      网络功能:较全面的实现了TCP/IP、SLIP、PPP、PLIP协议,功能强大。
      
      二、系统比较

      LINUX可以和PC机上的其他操作系统共存,但还是有差别的。

      (一)LINUX与MSDOS

      DOS在PC机上普及最广,价格低。LINUX是免费软件,不用考虑价格。LINUX有些命令与M S- DOS相同或相似,如cp----copy、cd(..)---cd(..)、telnet---telnet等;要在LINUX下用DOS命令,要在命令前加m;LINUX还可以充分发挥微处理器的功能,其多用户、多任务、网络等功能是MSDOS所不能比的。常见的是,LI N U X和DOS装在同机器上。
      
      (二)LINUX与WINDOWS

      两者都是多任务的操作系统,都支持同样的用户接口、网络和安全性。但是,WINDOWS是专用系统,由开发的公司控制接口和设计,并建立了严格的标准,而且购买的价格高。而LINUX是自由软件,其开发采用开放和协作的模式,因而有利于充分程序人员的集体智慧,大量减少不必要的重复劳动,并使得自由软件的弱点能及时发现和得到克服,具有强大的生命力。LINUX正在竞争UNIX和WINDOWS NT的市场份额。它是目前唯一可以与MICROSOFT WINDOWS抗衡的操作系统;盖茨也承认LINUX是微软的竞争对手。

      (三)LINUX与UNIX

      实质上,LINUX是UNIX的一种版本。UNIX支持的硬件要多一些,LINUX支持的硬件也在不断扩大。很突出的一点是,LINUX至少和商用UNIX一样稳定。对于许多用户来说,最重要的因素是价格;显然,在这一点上LINUX要占优势。LINUX使得用户在PC机上运行完整的UNIX。所以,LINUX为笔者们学习UNIX提供了廉价的机会。
      
      三、缺点:

      使用LINUX的最大缺点是没有一个实体对它的发展负责。LINUX的开发人员分散在世界各地,他们可以随意发表自己的程序,没有正式的质量保证程序。

      1、由于分散性的开发,LINUX缺乏技术支持,笔者就常遇到很多问题,根本不懂如何解决,查资料又找不到----这就是笔者多次安装的主要原因;

      2、并不能安装和运行在所有硬件平台上。LINUX所支持的硬件取决于每个开发者编写代码时所用的硬件。

      3、一些应用软件,尤其是for WINDOWS、DOS的,不能在LINUX上使用。目前解决的办法是,与其它操作系统共存于一台机器上。

      4、另外,笔者感觉安装软件还不够智能,有时需要重新编译内核,还要修改Makefile等文件,费时费力,还常常安装不上----可能是没有优化、配置好内核。



    LINUX安装简介

      总的来说,LINUX对系统的要求并不高,在386上就能运行,并能优化系统性能。

      笔者安装过几遍Turbo Linux,RedHat Linux,对从光盘的安装过程有一定的了解。限于硬盘大小、CPU性能,无其他操作系统共存。其安装还是比较智能化的,可根据提示一步步的来安装,不懂之处采用默认值,或者先别配置。

      因为全部安装了它内置的软件包,所以每次安装的时间比较长。

      感觉较重要的一步是分区。首先要清楚硬盘驱动器是用文件名/dev/had来表示的。LINUX至少要分两个区:主分区、交换区。交换区用于启动虚拟内存的,它可以使系统在固定的实际物理内存下运行的更加顺利。根据要求,交换区容量应为内存的两倍。因而,先分交换区had为64M,剩余的全部用作主分区hda1。由于机器上只装了LINUX,所以笔者只能从书本上了解在安装两个系统时是如何分区的。

      要谨慎的是在选取显示器、刷新频率时,一定要做出正确的选择,以免烧坏显示器。

      安装过程中,它会自动找到网卡,会引导设置TCP/IP网络。由于只装一个操作系统,因此不用配置LILO。

      安装完成后,可以配置内核,主要目的是让硬件都可以准确的启动。而且,自由对系统内核进行正确的编辑,才能拥有一个最适合自己计算机的LINUX内核。首先进入/usr/src/linux,接着用make config开始编辑。

    LINUX文件与目录

      一、文件系统

      LINUX有四种基本文件系统类型:普通文件、目录文件、连接文件和特殊文件,可用file命令来识别。

      1普通文件:如文本文件、C语言元代码、SHELL脚本、二进制的可执行文件等,可用cat、less、more、vi、emacs来察看内容,用mv来改名。

      2 目录文件:包括文件名、子目录名及其指针。它是LINUX储存文件名的唯一地方,可用ls列出目录文件。

      3 连接文件:是指向同一索引节点的那些目录条目。用ls来查看是,连接文件的标志用l开头,而文件面后以\"-〉\"指向所连接的文件。

      4 特殊文件:LINUX的一些设备如磁盘、终端、打印机等都在文件系统中表示出来,则一类文件就是特殊文件,常放在/dev目录内。例如,软驱A称为/dev/fd0。LINUX无C:的概念,而是用/dev/had来自第一硬盘。

      LINUX的文件有不同的权限,用ls -l [filename]来列出。例如:

      $ ls -l aa?
      $ lrwxr-x--x 1 aa 460 Dec 3 14:35 aa ->aa.c

      (二)目录系统

      LINUX的目录系统可以点击X-WINDOWS菜单的File Manager窗口中看到。其目录结构如下:

      /
      /bin
      /dev
      /home
      /
      /etc
      /passwd
      /rc.d
      /mnt
      /root
      /sbin
      /tmp
      /usr
      /var 一些常用的目录是:
      /etc--包括大多数引导系统或激活系统所需的系统专用熟据,如:host.conf、httpd等。
      /lib--包含c编译程序需要的函数库,是二进制文件,如:cpp。
      /usr--包括所有其他内容,如:src,local。LINUX的内核就在/usr/src中。其下有子目录/bin,存放有所安装的语言的命令,如:javac,java,gcc,perl等。
      /var--包含系统定义表、以便在系统运行改变是可以只备份该目录,如cache。
      /tmp--用于临时性的存储。
      /bin--大多数命令存放在这里。
      /home--主要存放用户账号;另外还有ftp。
      系统管理员增加用户时,系统会在这里自动增加与用户同名的目录,此目录下一般默认有Desktop目录。
      /dev--包含称为设备文件的特殊文件,如fd0、had等。
      /mnt--在LINUX中系统中,它是专门给外挂的文件系统使用的,里面有两个文件:cdrom,floopy,登录光驱、软驱时要用到。



      LINUX配置

      在这里,配置的对象并非内核,而是软件。至于网络的配置,主要在安装系统是已经基本完成;也可以进入GUI界面从菜单选择liloconf来配置。

      与WINDOWS一样,在LINUX系统可以从光盘、软盘安装应用软件;但不同的是,它需要用命令mount来登录光驱、软驱。而且,软件大多是经过压缩的,所以还需要懂得如何解压。最后必须配置、编译才能运行。下面分四个方面进行介绍:

      一、mount登录

      LINUX的软驱设备用特殊文件/dev/fd0,文件系统是msdos,因此用以下命令登录,读取软盘内容:

      # mount -t msdos /dev/fd0 /mnt/floppy
      # cd /mnt/floppy
      同理,键入以下命令读光盘:
      # mount -t iso9660 /dev/hdb /mnt/cdrom
      # cd /mnt/cdrom
      然后,用cp命令将所需的软件拷贝到系统中。
      退出软驱、光驱用umount命令。注意,不能在其目录中使用此命令,而应先cd到其他目录,再使用:umount /mnt/cdrom。
      
      二、安装软件

      for LINUX的软件一般是以.gz或.tar或者.tar.gz结尾的。前者是由gzip压缩的,后者是先用tar归档,在用gzip压缩而成的。

      1、以.gz结尾的为压缩文件,用命令:gzip -d filename来解压,得到的文件在当前目录中,但已没有了.gz。

      2、以.tar结尾的为归档文件,用命令:tar -xvf filename来展开,生成的文件与源文件在同一目录中,只是少了.tar。

      3、以.tar.gz结尾的文件最常见,可直接用命令:gzip -cd filename | tar xfv -来安装。

      一般情况下,这类文件的第一项是一个目录,所以用上面的命令时会创建出这一个目录,并把所有的文件都存在此目录之下。如果是特殊情况,可先用命令:tar -tvf filename | more 来查看文件的第一项。倘若它并不是目录,则先创建一个目录,把文件放在此目录之下,在用命令:tar -xvf filename来安装。

      经过以上步骤,会生成README及INSTALL等文件。用vi来仔细阅读这些文件造处于LINUX有关的部分,更具体是进行配置。一般的步骤是:(1)./config,(2)make install,(3)make。主要的变化在第一步,其后面需要参数,可见入命令来选择:./config --help。
      
      三、实践举例笔者曾配置了apache(阿帕其服务器)、php3两个软件。

      先从网上下载for LINUX的软件apache.tar.gz、php3.tar.gz。

      1、由于apache.tar.gz大于1.44M,所以笔者在center_5的MSDOS上用telnet命令登录LINUX,通过put将其上传。

      2、笔者将这两个软件放在/usr/src目录之下,用命令gzip -cd apache.tar.gz(php3.tar.gz)| tar xfv -来安装。这样会看到两个目录:apache_1.3.6和php-3.0.7。

      3、在第一个目录之下,会看到非常重要的文件:README、INSTALL。如果此时是在GUI界面,则可以打开两个xterm,一个用于仔细阅读,一个则用于根据文件的提示进行配置。

      4、在第二个目录中,也会很快的找到文件:INSTALL、INSTALL.DSO、README.QNX。步骤与3相似。由于这两个文件相互关联,必须先配置前者。

      5、配置完后,进入/apache_1.3.6/conf/httpd.conf。在文件里面,理解其注释,删除或增加一些选项前的\"#\"。保存文件后,执行命令/usr/src/apache_1.3.6/bin/apachectl start,即打开http,然后可以在Netscape Communication来浏览网页。

      心得体会在学习的一个多月来,笔者面对的是一个全新的操作系统,绝大多数操作是通过自己键入命令来实现的,从而能够深入到一定层次的了解操作系统内核。

      1、懂得了UNIX的一些基本命令;
      2、熟悉vi文本编辑;
      3、知道如何在LINUX、UNIX上编写、编译C、C++、JAVA程序;
      4、进一步了解了网络原理,动手配置了网络应用软件,从而也清楚了软件安装的一般步骤。
      5、毕竟现今for LINUX的应用软件少,而且RedHat LINUX不支持中文,因而还不能完全脱离WINDOWS。因此,应发挥LINUX是一个非常优秀的网络服务器操作系统的优点,扬长避短。

      由于有关操作系统的知识不够,所以还不能自己修改、开发内核,暂时停留在一般性了解、基本操作的基础上。因为笔者学习LINUX是为了先在PC机上了解UNIX,这是最主要的目的。当然,这一段时间的学习就是围绕着这个目的开展的。

      显然,以上学习所得只是LINUX的皮毛,希望能与各位LINUX高手、爱好者继续探讨LINUX的精髓所在。

    LINUX编程

      一、文本编辑

      LINUX系统标准的文本编辑程序是vi,它提供了编写命令、程序的环境。可见,vi与编程息息相关,因此很有必要在此次先介绍vi的运用。

      vi有命令及文本输入模式,通过按来切换。

      (1)在命令模式下:

      i--在光标前添加文本,与按相同;
      a--在光标后添加文本;
      r--替换文本,与按两次相同;
      x--删除光标处初的字符;
      :u--取消最后一次操作;
      :wq/:x/:ZZ--保存文本退出;
      :q!--防弃修改退出;
      :w--将缓冲区写入文件;
      :w filename--将缓冲区写入filename(相当于另存为:filename);
      :w!Filename2--强迫vi重写名为filename2的文件;j--移动光标到下一行当前位置,与k相反;
      h--将光标左移至下一字符,与l相反;
      dd--删除一行,dd删除n行;
      dw--删除一个词,dw删除n个词;
      o--在当前行下添加一行,与O相反;^--行首;$--行尾;:%d--全部删除文件内容;
      /string:--在缓冲区向前查找字符串string,与?String相反。按表示继续查找下一个;
      set number--显示行号,便于查找错误;

      (二)在文本输入模式下,主要进行文本的输入。+x可删除光标前的一个字符;还可以通过鼠标进行快捷的拷贝。

      LINUX的文本编辑环境还有emacs、ex等,与vi相似。
      
      二、SHELL编程

      bash shell有一组可以从键盘使用的强有力的交互功能:输入/输出重定向,作业控制,历史命令表以及命令行编辑。另外,shell还提供完整的程序语言节是程序及读取和执行用户自己编写的shell的手段。这些shell程序成为shell script。编写shell程序,能配置自己的登录环境,进行交互输入,编辑和别名shell命令,控制流程等。

      由于笔者对LINUX操作系统的学习还不够,所以暂时不能进行深层次的编程,只是了解SHELL的语法结构:if命令,test命令,while命令,for循环,until命令,case选择。况且,笔者的学习目的并不在于此,因而没有花太多的时间,而是应能熟练的运用SHELL命令。
      
      三、高级语言编程在LINUX上编写以上程序用到glibc/c++,jdk。步骤如下:

      1 # vi xxx.c(/cpp/.java)进入vi编辑界面进行编辑。

      2 编译过程
      (1)对于C程序:# cc -o exe-filename(可执行文件名)xxx.c
      # ./exe-filename
      (2)对于C++程序:# c++ -o exe-filename xxx.cpp
      # ./exe-filename
      (3)对于JAVA程序:# javac xxx.java
      # java xxx
      可以用gdb来调试程序:gdb exe-filename。其命令通过help来查看。
      此外,进行系统程序设计时,使用C语言并调用内部函数,例如用fork创建进程等。


    参考文献:1、Jack Tackett Jr.DavidGunter著,万华等译 LINUX大全 电子工业出版社,1998。
         2、Phil Cornes著,童寿彬等译 LINUX从入门到精通 电子工业出版社,1998。
         3、Xterm Linux中文版1.0使用手册。
         4、施势帆等著 Linux网络服务器实用手册 清华大学出版社,1999。
         5、网上资料。





    发布人:netbull 来自:it365