望麓自卑—湖南大学最具潜力的校园传媒

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1498|回复: 1

[计算机与通信学院] 新手请看--linux入门

[复制链接]
发表于 2005-5-26 14:11:39 | 显示全部楼层 |阅读模式
1  Linux新手入门  
  syuui [sohu.com]

写在前面的话
就任操作系统版的版主已经有几周了。一直只是做一些删广告贴的工作,对本版的发展实在没做什么。趁着这几天休息,想写一套Linux的教程贴上来。希望这些贴子能为版面上对Linux操作系统有兴趣的朋友提供一些帮助。
如果您想掌握Linux操作系统,建议您在阅读完本贴之后还是买一本教科书。本贴由于笔者水平有限,只能为为初学者提供一些信息。
本贴中的错误和不足,请各位高人大力斧正。
本贴中所说的Linux操作系统。如无特别说明,默认为RedHat 9.0。Linux的基本功能及基本命令,各个版本之间的差别不大。基本可以通用。

           第零章 Linux的起源
   Linux 的最初创造者是芬兰的一个大学生Linus。1990年秋天。Linus在赫尔辛基大学时学习UNIX课程。由于在学校上机需要排队等待很长时间, Linus自己买了一台PC机。他在自己的PC机上利用Tanenbaum教授开发的MINIX(一个微型的UNIX操作系统)为平台开发了一个程序。这个程序包括两个进程,一个向屏幕上写A,一个向屏幕上写B。然后他用一个定时器来切换这两个进程。使得屏幕上出现AAAABBBB这样的字样。
   Linus 没想到这会与一个风靡全球的操作系统有什么关系。1991年,Linus需要一个终端仿真程序来存取Usenet新闻组的内容。于是他把那个程序改了一下。将一个进程改成了从键盘上读取输入然后发送给调制解调器,另一个进程则改成了从调制解调器读取内容然后显示在屏幕上。为了实现这两个功能,Linux 又写了一些驱动程序。
   过了一段时间,Linus觉得需要从网上下载一些文件,为此他又写了一个磁盘的驱动程序,以及一个文件系统。
   而一旦你拥有了一个任务切换器,一个文件系统和一些驱动程序之后,你也就相当于是拥有了一个操作系统,或者说至少是拥有了一个内核。
   Linus将这个东西放在了赫尔辛基技术大学的一台FTP服务器上。之后,由于世界各地的使用者们的不断完善,Linux才有了今天的辉煌。

           第一章 如何取得并安装Linux
   本章中,我们将介绍Linux的方法及安装方法。
   Linux是遵循GNU公用许可证的自由软件。任何人都可以免费取得Linux内核的源代码,并编译/修改/发布这些代码。
    虽然Linux的内核是一个开放源代码的自由软件,但是在Linux内核的基础上打包各种应用程序及工具,发行自己的Linux的公司和个人还是大有人在。较为著名的有Redhat,Debian,Turbo,以及国内的红旗。实际上,由于Linux是自由软件,任何机构或个人都可以在遵守GNU公用许可证(General Public License, GPL)规定的条件下,随意将Linux内核与各种工具/应用程序打包,并以免费或者收费的方式发行。
   “内核”,是操作系统中非常重要的一个概念。它是一个操作系统中最重要的部分。负责管理内存,磁盘等硬件资源,并且管理进程(运行中的程序)。各种硬件的驱动程序,安装进操作系统后便做为操作系统的内核的一部分。
   Linux的内核,由Linus B.Torvald为首负责维护。内核的版本号的形式为
   主版本号.次版本号.修正次数。
   如笔者所用的Redhat 9.0。其内核为2.4.20版。即,该内核为对于2.4版内核的第20次修正版。
   对于版本号还有一个约定。即:奇数版本号为不稳定版。偶数为稳定版。linus在基于偶数版本号的基础上增添新的特性,形成奇数版本;然后在奇数版本上修改错误,形成稳定的偶数版本。
   取得Linux操作系统,主要可以通过两个渠道:
      * 通过互联网下载
      * 使用Linux光盘
   Linux 支持现在的大部分硬件。一般来说,Linux下的硬件驱动是由散布在世界各地的高手们写成的。一个高手,买了一台新电脑要安装Linux。发现没有某个硬件的驱动,于是他写出一份,并发布到网上供他人下载。所以,你的机器越老(当然不能太老),你的Linux版本越新,你的硬件就越有可能有驱动。

  
  
  作者: 甲虫玄心绿    2005-4-11 17:58   回复此发言   
  
--------------------------------------------------------------------------------

2  Linux新手入门  
  Linux所支持的硬件的最新信息和最新的完整清单,请查阅
         http://tldp.org/HOWTO/HOWTO-INDEX/howtos.html
   你可以将Linux直接装到一台裸机上,也可以让其于其它操作系统并存。

   从光盘安装Linux操作系统,请在BIOS中将引导顺序设为CD-ROM最先。然后用Linux的安装光盘引导电脑。一般的Linux安装光盘都自带引导功能。继续下去一步一步走就行了。

   从硬盘安装Linux有些麻烦。我假设你现在正在使用MS-DOS操作系统。
   你首先得将下载下来的Linux文件包解压到硬盘的一个目录下。
   然后准备一张软盘,以制作Linux的引导盘。一般在Linux的安装目录下有一个dosutils子目录。在下面找到boot.bat,执行这个批处理文件以制作引导盘。
   请注意,根据Linux版本的不同,这一步所用到的工具也不同。有可能是boot.bat。也有可能是其它文件。不过一般,这样的文件,文件名会起得一目了然。如果你有疑问,找一下readme.txt等帮助文件。
   然后在BIOS里将引导顺序设为软驱最先。用刚才做好的引导盘启动机器。进入Linux的安装界面。定位安装文件后即可开始安装。其余步骤与光盘安装差不多。
   
   安装Linux基本上有如下几个步骤。
      * 选择用户使用的语言,现在除Redflag之外,还有一些Linux也支持中文。
      * 选择用户使用的输入设备。
      * 选择安装模式(工作站,NFS服务器,Web服务器,News服务器,等等)
      * 为硬盘分区
      * 设置根用户(root)口令,并增加其它用户。
      * 选择用户其它的硬件。如显卡,声卡,显示器等等。
      * 设置网络。包括IP地址,网关,DNS等等
      * 选择用户要安装的软件包

   值得注意的是以下几点:

   Linux使用ext2或者ext3文件系统。安装Linux的时候最少要有两个分区。一个是ext2/ext3格式的,将会挂装为/(/即根目录),一个是交换分区。交换分区大小一般为物理内存大小的二倍。
   使用MS-DOS或者Windows系统的朋友应该理解硬盘分区这个概念。比方说你只有一个硬盘,但是你却有C驱,D驱,E驱。这里的C,D,E三个驱动器就是你的硬盘的分区。他们具有各自独立的文件系统,一个分区的损坏不影响另外的分区,从而保证了数据的安全。
   在Linux下,分区不是像DOS那样分成C,D那样的驱动器。而是做为一个目录挂装在根目录下(根目录本身也是一个分区)从而形成一个文件系统。如下图:
      /---
 楼主| 发表于 2005-5-26 14:13:03 | 显示全部楼层
(承上)
--------------------------------------------------------------------------------

6  回复:Linux新手入门  
  这个命令将新增一个链接文件target,这个链接文件是指向source的。如
$ /bin/ln /bin/ls lslink
建立一个lslink文件。指向/bin/ls

如果ln命令后面加上参数-s,则建立符号链接。如:
$ /bin/ln -s /bin systembin
建立一个目录链接systembin,指向/bin

前面提到,Linux操作系统是一个多用户多任务的操作系统。为了保密每个用户的数据、程序以及保护系统的安全,就要涉及到权限的问题。
每一个用户(user)有一个编号(UserID,简单称UID)。每一个组(group)也有一个编号(Group ID,简称GID)。在系统中,对于文件来说,有四类用户
* root(根用户,超级用户)
这个用户是系统的管理呐,权限最大,可以随意读写任何文件。
* owner(文件拥有者)
实际拥有文件的用户。文件属主。
* group(组成员)
用户所在的用户组的成员
* other
以上三类之外的其它用户

在Linux系统中,每个文件信息中包括一组9位的权限标志。分别给文件属主,用户组和其他用户指定对该文件的读、写和执行权。请看下面的例子:
$ ls -l /bin/ls
-rwxr-xr-x 1 root bin 27281 Aug 15 2002 /bin/ls*
重要是看-rwxr-xr-x,第一个 - 表示这是一个普通文件,这个位置也可以出现些别的字符,比方说目录的话这里会是 d 。而 l 表示一个链接。余下的9位可以分成三段,每段三位。本例中从左至右
rwx 表示文件的属主拥有文件的读,写,执行权
r-x 表示同组的用户拥有文件的读,执行权(注意 ,“写”权限的位置是一个 - )
r-x 表示其它的用户拥有文件的读,执行权
文件的访问权限还可以用三位8进制来表示。如上例
rwx r-x r-x 可以换成
111 101 101 (有该权限,则该位为1,否则为0)
换成8进制, 二进制的111是八进制的7 , 二进制的101是八进制的5。则这个权限标志也可以被表示为755。
可以用 /bin/chmod 命令来修改一个文件的权限。前提是该用户对该文件有写权限。用法举例如下:
$ /bin/chmod u+x myprog
对于文件myprog,使拥有者有执行权限。
$ /bin/chmod g-w myprog
对于文件myprog,取消组成员(与该用户同组的其它用户)的写权限。
$ /bin/chmod o+r myprog
对于文件myprog,使所有用户拥有读权限。

还可以用以下方法设置文件权限
$ /bin/chmod 755 myprog
将myprog的权限标志设置为644,644的意义,请参照上几行“用8进制数表示一个文件标限”部分。

实际上,Linux系统中的“权限”是无所不在的。合理利用“权限”,可以使管理工作事半功倍。而且,不仅是对于文件有“权限”,对于进程等等,也有“权限”一说,这一点我们以后会涉及到。

另外,一个小知识:如果你对Linux系统的某条命令不熟悉,可以利用 /usr/bin/man 命令查阅Linux的在线帮助。如下:
$ /usr/bin/man ls  
  
  
  作者: 甲虫玄心绿    2005-4-11 18:14   回复此发言   
  
--------------------------------------------------------------------------------

7  回复:Linux新手入门  
  第四章 运行程序
前面,我们说过ls,cp等命令。其实,这些命令全是系统某目录中的一个文件。如果你愿意,你也可以做一个这样的命令。
Linux命令的格式与DOS相仿。
$ command -switch1 -switch2 ... ... argument1 argument2
switch是命令的开关,以 - 开头(DOS下是以/开头)。argument是命令的参数。
有的命令可以省略开关甚至参数,有的则不可。如
$ ls
$ cp myfile1 myfile2
$ rm -r mydir

如果一个文件,其执行属性为真,也就是说当 ls -l mycommand (mycommand是那个命令)的时候,r-xr-xrwx那一列中有x属性的话,那么就可以称它为一个命令。
DOS下,一个可以被执行的文件通常有如下扩展名:
.exe .com .bat ……
这是因为DOS是按扩展名来分辨文件的属性的。而Linux下,扩展名只是文件的一部分。系统是不按照扩展名来区分文件属性的。所以,在Linux下不要看到一个.exe就认为这一定是一个可执行文件(Linux下实在也看不到.exe,除非你硬要重命名一个)。
在DOS下,直接输入可执行文件名,省去扩展名也可以执行该文件。而在Linux下,必须输入完整文件名。

这里我们得谈一下$PATH问题。
Linux下,有很多系统变量和环境变量。用set命令可以显示出系统中所有的系统变量。如下例:
$ set
autologout 60
cwd /home/syuui
file /home/syuui/.i18n
path (/usr/local/bin /bin /usr/bin /usr/X11R6/bin /home/syuui/bin)
这只是表示的一小部分。用setenv命令,则可以显示出系统中所有的环境变量。如下例:
$ setenv
REMOTEHOST=192.168.0.111
HOME=/home/syuui
PATH=/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/syuui/bin
SHELL=/bin/tcsh
MAIL=/var/mail/syuui
LOGNAME=syuui
PWD=/home/syuui
USER=syuui

可能大家注意到了。系统变量用的变量名,一般是小写字母。而环境变量则一般用的是大写字母。不过这也不是绝对的。
系统变量,一般是用户用来简单设置某些系统参数,或者系统用来显示当前设置的变量。环境变量,则是为应用程序等等提供了一些额外的设置。
系统变量和环境变量以$开头,后跟变量名。如$cwd,$PATH等等。用set或者setenv看到的只是变量名。如果想要查看一个单一的变量的值,可以用echo命令显示其值
$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/syuui/bin
MS -DOS下有一个autoexec.bat自动批处理文件,用来每次启动时设定一些常用的东西。同样地,Linux下也有这样的shell脚本文件,用来在一个用户登陆的时候设定一些设置。管理员可以设定一个公用的脚本,供每个用户使用,这个脚本一般是/etc/profile。每个用户也可以建立自己的登录脚本,放在自己的主目录下,其文件命根据shell的不同而不同,如tcsh的登陆脚本一般是.cshrc,而bash的则是. bash_profile。
如果在登陆后修改了登陆脚本,并且想马上执行这个脚本,可以选择重新登陆一次,也可以用source命令。如
$ source $HOME/.cshrc

言归正传,这里我提请大家注意在环境变量中有这样的一行:
PATH=/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/syuui/bin
这一行是根据系统变量中的
path (/usr/local/bin /bin /usr/bin /usr/X11R6/bin /home/syuui/bin)
得来的。当对系统变量path做改动的时候,相应地,环境变量的PATH也会改动。
这个变量,代表着当用户要求执行一个命令的时候,系统的搜索路径。也就是说,当用户输入一个命令,shell判定这个命令不是一个内部命令(集成在 shell中的命令)的话,则会照着$PATH中规定的路径依次寻找该命令的文件。如在上例中,如果输入 gcc 命令,shell将会寻找
/usr/local/bin 在/usr/local/bin下没有gcc这个文件,于是继续寻找
/bin 在/bin下也没有gcc这个文件

  
  
  作者: 甲虫玄心绿    2005-4-11 18:14   回复此发言   
  
--------------------------------------------------------------------------------

8  回复:Linux新手入门  
  /usr/bin 在/usr/bin/gcc下找到gcc这个文件,执行此文件,然后不再继续查找。

这样,我们就不需要每一次输入命令的时候都输入命令的完整路径了。通常情况下,每一个普通用户的$PATH中都包含了常用的命令所在的路径。通常是 /bin和/usr/bin,以及有的时候还有/usr/local/bin。这样一来,我们只需要简单地输入命令名则可以执行命令。如前几章所说的 /bin/ls命令。我们在确定/bin在自己的路径变量$PATH中之后,只需要输入ls即可执行该命令了。
不要把当前目录 ./ 放在$PATH中!!
Linux 与DOS有点不同:DOS是首先判断这是否是一个内部命令。如果不是,则在当前目录下寻找命令文件,然后再依次到规定的路径中去寻找。而Linux是先判断这是否是一个内部命令。如果不是的话,则依次到规定的路径中去寻找这个命令的文件,找不到则报错——Linux不会自动在当前目录下寻找的。所以,如果你想执行当前目录下的命令文件(比如你自己写的C程序),你需要这样输入:
$ ./myprog

一般,用户登录之后,系统会自动为一部分变量赋值。如$USER,$HOME等等。然而你也可以为一部分变量赋值,甚至定义自己使用的环境变量等。
set命令或者setenv命令也可以用来为单个变量赋值。如:
$ set path=($path /home/user01/bin)
则将变量path后面加上了一个/home/user01/bin。而
$ unset path
则删除此变量path。
$ setenv MYENV "This is my env"
设定环境变量MYENV的值为"This is my env"。而删除则要用到
$ unsetenv MYENV

在Linux下,一行中可以输入多个命令,命令之间用分号隔开。

与DOS同样,Linux下也有输入、输出重定向及管道操作。所谓输入输出重定向解释如下:
Linux 将输入,输出和错误,看成是一个流式文件。分别用stdin,stdout和stderr来表示。亦即:标准输入,标准输出,标准报错三个。其中,标准输入是默认为从键盘输入。标准输出和标准报错都是默认为输出到显示。然而,Linux可以将标准输入输出、标准报错这三个流重定向到一个文件,或者其它的什么地方。输入输出重定向要用到 < 和 > 这两个重定向操作符
重定向标准输入,可以使用 < 这个操作符。如下例:
$ cat < dir.c
/*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
dir.c : search file
Copyright (C) 2003 by syuui . All rights reserved .

Usage : dir <directory> <size>
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
#include<dirent.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include<string.h>
cat 这个命令,本来是用来显示文本文件的内容。如果cat后面带文件名,则显示这些文件。如果不带,则将标准输入的输入内容回显。上例中,< 及其后面的部分,不做为cat的参数(因为shell以其有特殊的解释——重定向操作符)。也就是说,cat命令后面没有带参数。如上所说:cat后面不带参数的时候应该显示的是从标准输入输入进来的东西。然而我们可以看到:我们上面命令的执行结果不是标准输入中的内容,而是dir.c文件的内容。
这是为什么呢?是因为,<这个输入重定向操作符,将标准输入暂时重定向到了dir.c这个文件中。这样cat就不再从标准输入读取内容,而是从dir.c中读取内容了。当命令结束后,标准输入自动回复到键盘。
同理,输出也可以用 > 来重定向。如下:
$ ls -l > list.txt
$ cat list.txt
总用量 28
drwxrwxr-x 2 syuui syuui 4096 1月 2 01:16 bin
drwxrwxr-x 2 syuui syuui 4096 12月 9 21:17 include
drwxrwxr-x 2 syuui syuui 4096 12月 16 17:16 lib
-rw-rw-r-- 1 syuui syuui 0 1月 4 22:31 list.txt
drwxrwxr-x 4 syuui syuui 4096 12月 12 04:49 okdata

  
  
  作者: 甲虫玄心绿    2005-4-11 18:14   回复此发言   
  
--------------------------------------------------------------------------------

9  回复:Linux新手入门  
  drwxr-xr-x 22 syuui syuui 4096 12月 5 22:40 OkProg
drwxrwxr-x 6 syuui syuui 4096 12月 16 17:10 src
drwxrwxr-x 3 syuui syuui 4096 1月 4 22:19 test
ls -l这个命令,将当前目录下的文件显示出来(类似于DOS下的dir命令)。然后用输出重定向操作符 > 来将输出重定向到list.txt文件中。这样,ls的输入就不再输出到屏幕,而是输出到list.txt文件中了。然后用cat list.txt命令查看list.txt文件的内容,得到如上输入。
虽然标准输出和标准报错都是输出到屏幕,但这是两种不同的输出,使用两个不同的流文件。重定向标准报错的时候,就不能用 > 这个操作符,而需要使用 2> 这个操作符。如
$ myprog >stdout.txt 2>stderr.txt
这样,就将标准输出重定向到了stdout.txt中,而将标准输入重定向到了stderr.txt中。
对于输入重定向和报错的重定向,还有一点需要注意:你将输出或者报错重定向到了一个文件,如果这个文件不存在,则建立这样一个文件。如果这个文件存在,则这个文件中的所有内容都将被清除,而以标准输入中的内容取而代之。如果你想将新的内容输入到文件尾,则需要用 >> 这个追加操作符。如上例中,
$ ls -l >> list.txt
则将标准输入的内容追加到了list.txt的文件尾。

同时,还有一个管道操作。管道操作的意思是,有一串命令,利用管道操作符
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

每日推荐上一条 /1 下一条

小黑屋|手机版|湖南大学望麓自卑校园传媒 ( 湘ICP备14014987号 )

GMT+8, 2024-11-24 23:01 , Processed in 0.125671 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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