UNIX与因特网有着很深的渊源,因为因特网的骨干协议TCP/IP原来是UNIX操作系统中的一个通讯模块。事实上,在今天的因特网上提供的服务主机中,运行UNIX类操作系统的主机仍要占绝大多数。
因为许多提供因特网服务的计算机运行UNIX类 操作系统,对于需要在UNIX主机上运行和调试网络应用程序的程序员必须具备必要的网络知识。由于目前大部分读者可能得到的类UNIX环境
本附录就是为有DOS类操作系统基础的读者提供相关的基本UNIX概念和操作命令。
详细的解释。
A.1 UNIX基本概念
UNIX帐户
与DOS操作系统不同,我们在使用UNIX前,需要得到一个用户名和口令。通常需要通过系统管理员预先在系统中进行注册。由于UNIX是多用户操作系统,作为系统管理员设立新用户的工作的一部分,系统将为新用户建立一个用户主目录和一个电子邮箱(这个邮箱与因特网的邮箱不完全一样,但至少为在同一主机上注册的用户和管理员之间提供了交流手段),在UNIX中的用户主目录,如同在敞开式办公大厅中的隔断,把磁盘空间用目录的形式分配给每个用户,每个用户可以在自己的目录中进行文件的处理和建立新的子目录以便文件的存档,但未经许可不得进入他人的主目录。
当用户的UNIX帐户建立后,系统管理员通常确定一个Shell (UNIX操作系统和用户之间的接口),通常为Bourne Shell(sh)其命令提示符为'$',或C Shell(csh)其提示符为百分号(%)之一,对初学者来说,这两种Shell之间的差异所可能带来的影响是可以忽略的。
UNIX登录
用户可以通过拨号访问或从局域网上的计算机登录到另一个UNIX帐户,在我们的实验环境下是使用Windows #系统中的Telnet将PC机仿真为终端后再登录网上的UNIX主机,用户需要有登录用户名和口令。下面是我们登录到一台运行Linux的主机的基本过程:
注意,在使用Telnet进行登录时,一般情况下,可以使用以下格式,例如:
c:/>telnet 202.117.35.171 //直接使用UNIX主机的IP地址登录;
c:/>telnet mail.xjtu.edu.cn //使用UNIX主机的域名地址登录;
c:/>telnet 202.117.35.58 3558 //使用UNIX主机的IP地址加端口号登录。
更改口令
口令是进入用户帐户的钥匙,是防止他人对UNIX系统作未授权的非法访问。为了UNIX系统的安全,保护用户口令是十分重要的。
用户如何管理好自己的口令呢?下面是我们的一些建议:
2 易于记忆,难以猜测;
2 至少用六个字符,其中包括两位数字,一个特殊字符;
2 用六到八个字符(超过八个被忽略);
2 UNIX口令是大小写敏感的,可以在口令中分别使用大小写字母、数字
2 可以在口令中使用一或多个特殊符号:
~!$%^&*()-=[]{}/|/,.<>;:
2 不要用可以在英语或外语字典中找到的单词,常用短语;
2 周期性地改变口令
如果用户忘记了口令,可以同系统管理员接洽并重新设置。用户也可以自行修改,命令为:
$passwd
UNIX文件系统
UNIX文件系统由三种不同类型文件的集合组成:
1.普通文件:包括文本数据、二进制程序或以八位字节存储的信息。
2.特殊文件:如设备文件,提供用户对终端、打印机、软驱和光驱的访问。
3.目录:就是包含连接其他文件、目录的指针的文件。
与DOS类的操作系统采用以卷(盘符)为单位来管理文件的思路不同,UNIX目录组织看上去只有一个(!)倒置的树,倒置树的高层是根目录,用'/'表示。根的分支(或顶级目录)是几个标准的UNIX目录,通常称为bin、etc、usr、tmp和lib,这些标准目录是非常重要的,每个都会包括一些特殊用途的文件。所有用户的用户主目录经常配置在'/usr'目录内部(在Linux系统中,通常为'/home'中)。
UNIX文件系统中特别重要的目录有:
/bin —— 这儿bin代表二进制。二进制是可执行程序。所以该目录包含许多基本的UNIX程序。
/usr —— 它包含用户导向的目录。例如,docs目录包含UNIX信息, man或查阅的联机指南页,等等。
/usr/bin —— 包含面向用户的UNIX程序。
/usr/spool —— 包含几个子目录。例如,mail保存着邮件文件,spool包含了等待打印的文件,uucp包含了已经从一个UNIX机器拷贝到另一个上的文件。
/dev —— 包含设备文件UNIX把任何系统资源,包括设备,当作文件来对待。设备文件用于访问系统的硬件组件。例如,/dev/tty 是系统上的终端。/dev/floppy 是指系统上的软盘。
/etc —— 包含许多UNIX配置文件。例如,passwd文件就包含在这个目录中。系统口令文件包含用户ID,每个用户的密码的加密备份,以及必须在用户登录进系统后立即执行的程序的名称。/etc目录下的大多数文件是文本文件,可以编辑这些文件来更改系统的配置。
在UNIX文件系统中文件和目录的位置可以用路径名加文件名表示。路径名的表示法可以是绝对的,如'/usr/home/guest/.profile'。也可以是相对的,如'../httpd/bin/apachectl'。所谓绝对路径是从根目录到需求目录所经过的目录的精确描述,而相对目录是指相对于用户当前所在工作目录的经过路径指示符和其他文件目录计算所得的目录,当用户登录到UNIX时,用户就处在预先设置在用户主目录之内。了解和掌握下列目录指示符是十分重要的:
'.' 表示用户所在的当前目录;
'..' 表示用户所在的当前目录的上一层目录;
'/' 单独使用或放在路径名的开始表示UNIX的根目录;在目录名中间作为不同层次目录之间的分隔(注意这个符号与DOS系统中的不一样,DOS系统中的类似符号为'/')。
创建和命名文件
用户可以在自己主目录中使用编辑器和Shell命令创建文件,也可以从远程主机输入文件。尽管在UNIX创建文件时的命名的规则是非常自由的,但是仍需要注意一些指导原则:
2 文件和目录可以使用字母和0~9数字进行命名。用户会发现用小写字母命名普通文件,用大写字母命名目录是很有帮助的,这样当用ls命令来显示文件名时,很容易区分目录和文件。
2 避免文件名用'.'(英文中的句号)开头。用'.'开头的文件名在UNIX中将作为隐含文件,如果该文件存在用户主目录中,将会被作为用户登录时的初始化文件处理。这类文件必须用ls -a命令才能显示。
2 使用连字号、下划线在文件名内部分离单词,可增加文件名的可读性。
2 虽然UNIX允许使用,还是建议文件名中避免空格。文件名有空格会带来显示和操作上的麻烦。
2 对不同类型的文件,采用标准的文件名后缀。
创建和命名目录
在UNIX中,一个目录实际上是一个文件,但不同于一般文件。目录中包含了链接到其他文件和目录的指针,为了创建一个目录,要用mkdir命令。例如,输入如下命令创建一个目录,名字叫做files.to.get,可能希望保存获取的因特网文件:
$mkdir file.to.get
路径和目录
当用户登录到个UNIX帐户时,用户已经自动进入了用户的主目录。当用户移动到不同的目录时,用户所处于的目录称为工作目录。
如果用户想知道当前工作目录是什么,可使用pwd命令来显示(显示结果为绝对路径形式)。如果用户不知当前自己的工作目录在何处而又想要尽快返回用户主目录,可使用cd 命令返回。
目录选择命令cd是用来进入各个目录的主要方法,使用时要注意根据需要使用绝对或相对路径名,如:
$cd / //移动到UNIX的根目录;
$cd .. //移动到当前工作目录上一层的目录
$cd public_html //移动到当前工作目录下的一个称为'public_html'的目录
列出文件和目录
与DOS系统中的'DIR'命令一样, UNIX使用'ls'命令列出目录中的文件(Linux目前也支持'dir'命令,这可能也预示着类UNIX系统的发展方向)。
当使用这一命令列文件时,目录名和文件名同时出现。Ls命令使用的形式(或选项参数很多,在许多类UNIX系统中,ls命令的选项可能超过26种,而一般的选项都只用一个字母,这就意味着同一字母的大小写不同其作为选项使用的意义也有差别)。但常用ls命令选项的意义并不复杂,如:
$ls //以简约格式列出文件及目录,相当于DOS中的'DIR /W';
$ls -l //以长格式列出文件及目录,相当于DOS中的'DIR';
$ls -la //长格式列出,包括目录中的隐含文件(文件名以'.'开头的文件);
查看文件
为了察看文件内容,在UNIX中有几种选择。如:
$cat myfile
该命令(类似DOS系统中的Type命令)可使文件内容在屏幕上连续滚动地显示,使用Ctrl+s可以暂停屏幕滚动。另一中方法是more命令。如:
$more myfile
用more命令时,在屏幕右下方会出现'more'字样,同时显示剩余页数的百分比。为继续显示下一屏,可按空格键。要中途退出显示,单击'q'键。
重命名或移动文件
如果想重命名一个文件,或者更正在文件名中的拼写错误,可使用mv命令:
$mv holle hello //这里用hello替代holle,hello成为新文件名
当mv命令在个目录内部使用时,它将用新文件名替换旧的文件名(此时该命令的功能类似于DOS中的Ren命令)。我们也能使用这个命令移动将文件到目录中(此时该命令的功能类似于DOS中的Move命令)。如:
$mv index.html public_html //public_html为网页发布目录
删除文件和目录
删除文件和目录需要使用两个命令:rm和rmdir。为了从一个目录中删除文件,输入rm后跟着目录或文件名(注意:UNIX一般不提供undelete的功能)。
为删除目录,输入rmdir,后而跟着目录名,但这条命令只能删除空目录(即目录下无子目录或文件,该命令的功能类似于DOS中的Rd命令))。如:
$rm test.c //删除test.c文件(该命令功能类似于DOS中的Del命令);
$rm * //删除当前目录下所有文件,这条删除命令很危险;
$rm -I * //这条命令对每个文件是否删除会出现交互性提示;
$rmdir Testdir //删除Testdir目录(假设该目录为空);
$rm -r /tmp //该命令由管理员发出,可删除/tmp和其中的所有文件和子目录
(此时该命令功能类似于DOS中的Deltree命令);
UNIX联机帮助
常用的UNIX帮助命令为man。如:
$man ls //查询ls命令的用法,基本上是一个命令参数的查询手册;
$man -k keyword //使用关键词查找相关命令,属于查询向导。
A.2 UNIX常识
以下部分提供了UNIX中使用的特殊的功能键和字符的简短概述;紧接其后是一些有用的UNIX命令的简要介绍。
特殊的功能键和字符
当用户使用UNIX时,用户要用到特殊键和字符,以下部分将解释这些常用的操作元素:
| //在UNIX中的管道命令,为两个命令之间的一条垂直竖线,第一条命令的输出变成第二个命令的输入;
> //重定向输出符,将命令的结果出入到一个文件,因为UNIX的标准输出设备是用户所使用的终端显示器,所谓“重定向”输出,就是将输出内容改道到其他设备文件(用户终端显示器也是一个设备文件),当我们的输出改道到一个文件时,系统自动按要求将命令输出内容存到文件名所指的文件中去,如果文件原先存有内容,该命令将原文件内容用新文件覆盖;
>> //重定向输出符,将命令的结果追加到一个文件中;
< //重定向输入,因为UNIX的标准输入设备是用户所使用的终端键盘,所谓“重定向”输入,就是将命令应输入的参数由键盘改为从其他设备文件(用户终端键盘也是一个设备文件)输入;
Ctrl+c //中断前台进程,正在用户终端屏幕上显示的作业称为“前台进程”;
Ctrl+d //文件结束符;在系统命令的提示符下,可以退出先前进入的与其他系统的Telnet或ftp连接;
Ctrl+h //清除先前输入的字符,即相当于backspace键。在一般的Linux联机系统中,PC键盘里的Del键时常可替代backspace键,而backspace键在此环境下有时会工作失常。
Ctrl+s //暂停屏幕显示滚动,与Ctrl+q对应使用来控制屏荐显示滚动,例如,在用cat查看文本文件内容时。
Ctrl+q //再次开始屏幕显示的滚动,与Ctrl+S键配对使用,以控制屏幕滚动。
UNIX常用命令
$cat filename //连续地在屏幕上显示文件;
$cat filename | more //逐屏显示文件;
$cat > filename //从键盘输入并且重定向到一个文件,实际上是创建一个新文件,注意在键入命令后,系统将不会再出现命令提示符,光标闪烁处由用户键入输入的内容,输入结束后,须用Ctrl+d结束文件,系统再次显示命令提示符。
$cd directorv //改变目录;
$cd //该命令从当前目录返回用户主目录;
$cd .. //从用户的当前目录移动到上一级文件目录;
$cd directory1/directory2 //将工作目录从当前目录移动到directoryl的子目录directory2下。
$chmod [option] filename (or directory) //改变访问模式(权限)。
$cp file1 file2 //将file1拷贝到file2;
$cp file directory //将file拷贝到directory目录中。
$date //显示系统的日期和时间;
$grep -l "pattern" files //在同一目录下的若干文件中寻找和一个匹配模式相符的文件行。如果匹配模式是一个简单的字符串,则引号可以去掉;
$grep -i "pattern" files //在同一目录下的若干文件中寻找和一个匹配模式相符的文件行。忽略匹配模式的大小写;
$grep -n "pattern" files //在同一目录下的若干文件中寻找和一个匹配模式相符的文件行。显示匹配行在文件中的行号。
$head file //显示一个文件的头几行。
$help command/error //给出命令或错误信息的简要解释。
$kill [pid] //中断用pid指定的进程(运行中的程序,如Web Server)。
$ls //列出一个目录的内容(简约格式);
$ls -l //列出一个目录的内容(长格式);
$ls -la | more //列出所有当前目录内的全部文件(包括隐含文件和目录),包括文件大小、权限和其它有用信息。并逐屏显示。
$man command //从用户的系统的联机参考手册中连续地显示命令手册,需要了解具体的命令;
$man -k keyword //从用户的系统的联机参考手册中连续地显示命令手册,列出包含关键字的联机参考于册中所提及的相关命令,也被apropos命令支持,二者执行相同的功能。
$more file //逐屏显示文件;常用键:space 翻屏;b 回翻;q 退出。
$mv file1 [file2|directory] //移动文件或重命名。
$passwd //改变用户口令。
$pico file //常用UNIX编辑器之一。
$ps //报告运行中的进程(运行在内存中的程序)。
$pwd //显示当前工作目录(绝对路径名形式)。
$rm [options] files //删除文件或目录。
$rmdir directory //删除空目录。若删除非空目录,使用rm -r命令。
$tail files //显示文件的最后10行。可处理个电子邮件,查来电人。
$users //列出当前登录的用户。who也有类似用途。
$vi file //用vi编辑器编辑文件。
$w //显示谁在系统中,在干什么。
$who //列出当前在系统中登录的用户。
$whoami //“我是谁”,听起来好笑?但在网上用Telnet穿过若干系统后,想不起来自己是谁也并不奇怪。它可显示用户当前登录的主机帐户名。
$write user //给在同一或不同主机上中登录的其他用户发便条。发送者完成输入时,用Ctrl+d结束并由系统发出。
A.3 UNIX使用技巧
管道和重定向
大多数UNIX命令是简单的,但是当使用管道将它们结合起来时,用户能创建一个比较复杂的操作。以下是管道命令的常用格式:
$commandl|command2 //管道将命令1的输出成为命令2的输入
$commandl|command2 > fIle //管道将命令1的输出成为命令2的输入,
然后命令2的输出重定向到一个磁盘文件
$commandl <file //命令1的输入改为由文件输入
通配符
UNIX中通配符'*'可表示任意个字符;'?'可表示任意一个字符;[…]可通配一定范围内的字符。如:
$ls *.html //列出目录中所有网页文件;
$mv chapter* Book //将以chapter开头的文件移入Book目录;
$rm test?? //删除以test开头,后续有两个字符的所有文件
A.4 权限和所有权
在类似UNIX系统的多用户环境下,安全性是其区别于桌面操作系统一个重要的特征。大多数多用户操作系统实现了系统级和用户级的详尽的安全性,在系统级,只有授权的用户可允许访问系统。在用户级,它也可以维护用户资源的安全性。
所有UNIX文件和目录有所有权和权限。用户可更改一个文件或目录的权限甚至所有权,以便控制对其文件和目录的访问。文件权限也决定了一个特定的文件是否可以执行。
当某个用户创建一个文件的时候,该用户就成为文件的所有者了。作为文件的所有者,用户可以授予或撤消对文件的访问权限。用户也可以更改文件的所有权,并把它授予另一个用户。然而要记住,一旦所有权更改了,文件原属主就不能再把它改回来了。新的所有者可以把它授还给文件的原属主。
chown命令
chown命令用于更改文件的所有权。例如,
chown ryan myfile1
该命令将使ryan成为myfile1的新的所有者。
除了所有权之外,每个文件和目录还有相关的权限。ls -l 命令可用于浏览文件或目录的权限。例如:
$ls -l
用户可以对一个文件指定的权限包括:
2 r ——读, 有此权限可读取文件的内容。
2 w ——写, 有此权限可以修改并删除文件。
2 x ——执行, 有此权限可以执行该文件。
这些权限说明主要是针对文件而言,相对目录这三种权限还有其他的一些含义,有兴趣的读者可参阅有关参考书籍。值得说明得是我们可以根据数字指定文件权限。例如:
2 读权限 = 4
2 写权限 = 2
2 执行权限 = 1
这些数可以组合起来用以指明对文件或目录的访问权限。第一个数字指出授予所有者的权限;第二个数字指出授予组的权限;第三个数字指出授予系统中别的用户的权限。
例如764。其中数字7表示所有者有读、写和执行的权限(4+2+1);数字6表示同组者有读和写的权限(4+2);数字1表示系统中其他用户只有读权限(4)。
数字0表示不赋予任何权限。
chmod命令
chmod命令用于更改一个文件的权限。例如,
chmod 764 myfile1
这将把读、写和执行权限(4+2+1)授予所有者,把读和写权限(4+2)授予组成员,并仅把读权限(4)授予系统中的别的用户。
除了根据数字指定权限外,我们还可以字母代码来更改权限。相关选项和参数有:
2 u = 用户
2 g = 组
2 o = 别的用户
2 a = 所有用户
在这些选项后面紧跟着加号(+),用以指出将要添加的权限。如果要删除权限,则用减号(-)。例如:
chmod go+r myfile1
这将为同组者和其他用户添加读权限。
如果用户对一个目录有写权限,用户就能够删除该目录中的文件,而与该文件的所有权或访问权限无关。