AbyssalSwamp  ActivaUser
» Guest:  Register | Login | 会员列表

RSS subscription to this AbyssalSwamp  

Previous thread Next thread
     
Title: Linux下软件安装详解  
 
9527





UID 7703
Digest 0
Points 0
Posts 0
码币MB 0 Code
黄金 0 Catty
钻石 0 Pellet
Permissions 10
Register 2009-7-27
Status offline
Linux下软件安装详解

在Windows下安装软件时,只需用鼠标双击软件的安装程序,或者用Zip等解压缩软件解压缩即可安装。在Linux下安装软件对初学者来说,难度高于Windows下软件安装。下面我就详细讲解Linux下如何安装软件。

先来看看Linux软件扩展名。软件后缀为.rpm最初是Red Hat Linux提供的一种包封装格式,现在许多Linux发行版本都使用;后缀为.deb是Debain Linux提供的一种包封装格式;后缀为.tar.gz、tar.Z、tar.bz2或.tgz是使用Unix系统打包工具tar打包的;后缀为.bin的一般是一些商业软件。通过扩展名可以了解软件格式,进而了解软件安装。

RPM格式软件包的安装

1.简介
几乎所有的Linux发行版本都使用某种形式的软件包管理安装、更新和卸载软件。与直接从源代码安装相比,软件包管理易于安装和卸载;易于更新已安装的软件包;易于保护配置文件;易于跟踪已安装文件。

RPM全称是Red Hat Package Manager(Red Hat包管理器)。RPM本质上就是一个包,包含可以立即在特定机器体系结构上安装和运行的Linux软件。


大多数Linux RPM软件包的命名有一定的规律,它遵循名称-版本-修正版-类型-MYsoftware-1.2 -1.i386.rpm 。

2.安装RPM包软件
# rpm -ivh MYsoftware-1.2 -1.i386.rpm

RPM命令主要参数:

-i 安装软件。
-t 测试安装,不是真的安装。
-p 显示安装进度。
-f 忽略任何错误。
-U 升级安装。
-v 检测套件是否正确安装。

这些参数可以同时采用。更多的内容可以参考RPM的命令帮助。

3.卸载软件
# rpm -e 软件名

需要说明的是,上面代码中使用的是软件名,而不是软件包名。例如,要卸载software-1.2.-1.i386.rpm这个包时,应执行:
#rpm -e software

4.强行卸载RPM包
有时除去一个RPM是不行的,尤其是系统上有别的程序依赖于它的时候。如果执行命令会显示如下错误信息:

## rpm -e xsnow
error: removing these packages would break dependencies:
/usr/X11R6/bin/xsnow is needed by x-amusements-1.0-1

在这种情况下,可以用--force选项重新安装xsnow:

## rpm -ivh --force xsnow-1.41-1.i386.rpm
xsnow

这里推荐使用工具软件Kleandisk,用它可以安全彻底清理掉不再使用的RPM包。详细情况请查看2003年《开放系统世界》第12期。

5.安装.src.rpm类型的文件
目前RPM有两种模式,一种是已经过编码的(i386.rpm),一种是未经编码的(src.rpm)。
rpm --rebuild Filename.src.rpm

这时系统会建立一个文件Filenamr.rpm,在/usr/src/redflag/RPMS/子目录下,一般是i386,具体情况和Linux发行版本有关。然后执行下面代码即可:
rpm -ivh /usr/src/regflag/RPMS/i386/Filename.rpm

使用deb打包的软件安装

deb是Debian Linux提供的一个包管理器,它与RPM十分类似。但由于RPM出现得早,并且应用广泛,所以在各种版本的Linux中都常见到,而Debian的包管理器dpkg只出现在Debina Linux中。它的优点是不用被严格的依赖性检查所困扰,缺点是只在Debian Linux发行版中才能见到这个包管理工具。


1. 安装
# dpkg -i MYsoftware-1.2.-1.deb

2. 卸载
# dpkg -e MYsoftware

使用源代码进行软件安装

和RPM安装方式相比,使用源代码进行软件安装会复杂一些,但是用源代码安装软件是Linux下进行软件安装的重要手段,也是运行Linux的最主要的优势之一。使用源代码安装软件,能按照用户的需要选择定制的安装方式进行安装,而不是仅仅依靠那些在安装包中的预配置的参数选择安装。另外,仍然有一些软件程序只能从源代码处进行安装。

现在有很多地方都提供源代码包,到底在什么地方获得取决于软件的特殊需要。对于那些使用比较普遍的软件,如Sendmail,可以从商业网站处下载源代码软件包(如http://www.sendmail.org )。一般的软件包,可从开发者的Web站点下载。下面介绍一下安装步骤:

1.解压数据包
源代码软件通常以.tar.gz做为扩展名,也有tar.Z、tar.bz2或.tgz为扩展名的。不同扩展名解压缩命令也不相同.


2.编译软件
成功解压缩源代码文件后,进入解包的目录。在安装前阅读Readme文件和Install文件。尽管许多源代码文件包都使用基本相同的命令,但是有时在阅读这些文件时能发现一些重要的区别。例如,有些软件包含一个可以安装的安装脚本程序(.sh)。在安装前阅读这些说明文件,有助于安装成功和节约时间。

在安装软件以前要成为root用户。实现这一点通常有两种方式:在另一台终端以root用户登录,或者输入“su”,此时系统会提示输入root用户的密码。输入密码以后,就将一直拥有root用户的权限。如果已经是root用户,那就可以进行下一步。

通常的安装方法是从安装包的目录执行以下命令:

gunzip soft1.tar.gz
cd soft1
#. /configure #配置#
make #调用make#
make install #安装源代码#

删除安装时产生的临时文件:
#make clean

卸载软件:
#make uninstall

有些软件包的源代码编译安装后可以用make uninstall命令卸载。如果不提供此功能,则软件的卸载必须手动删除。由于软件可能将文件分散地安装在系统的多个目录中,往往很难把它删除干净,应该在编译前进行配置。

.bin文件安装

扩展名为.bin文件是二进制的,它也是源程序经编译后得到的机器语言。有一些软件可以发布为以.bin为后缀的安装包,例如,流媒体播放器RealONE。如果安装过RealONE的Windows版的话,那么安装RealONE for Linux版本(文件名:r1p1_linux22_libc6_i386_a1.bin)就非常简单了:
#chmod +x r1p1_linux22_libc6_i386_a1.bin
./ r1p1_linux22_libc6_i386_a1.bin

接下来选择安装方式,有普通安装和高级安装两种。如果不想改动安装目录,就可选择普通安装,整个安装过程几乎和在Windwos下一样。

.bin文件的卸载,以RealONE for Linux为例,如果采用普通安装方式的话,在用户主目录下会有Real和Realplayer9两个文件夹,把它们删除即可。

Linux绿色软件

Linux也有一些绿色软件,不过不是很多。Linux系统提供一种机制:自动响应软件运行进程的要求,为它设定好可以马上运行的环境。这种机制可以是一种接口,或者是中间件。程序员编写的程序可以直接拷贝分发,不用安装,只要点击程序的图标,访问操作系统提供的接口,设定好就可以工作。若要删除软件,直接删除就可以,不用链接文件。这是最简单的软件安装、卸载方式。

上面介绍了Linux软件安装的方法,对于Linux初学者来说,RPM安装是一个不错的选择。如果想真正掌握Linux系统,源代码安装仍然是Linux下软件安装的重要手段。

Linux下WWW服务器配置全攻略

Linux操作系统近几年有了蓬勃的发展,在整个世界范围内得到了越来越多公司和团体的支持,尤其是最近IBM公司的鼎力支持,更是使Linux服务器如虎添翼,更上一层楼。而在国内,Linux的应用也是方兴未艾,众多公司已经投入到Linux系统的研发和推广工作中。一些优秀的Linux操作系统相继出现,比如红旗Linux等。但是我国的Linux应用水平还很低,熟悉Linux的人员严重缺乏,Linux专业人才的缺乏已成为Linux在国内应用和普及的瓶颈问题。据《开放系统世界》2003年第八期介绍,中国五年内Linux人才需求量将会超过120万。而“1+1+1”工程的实施,也是间接地告诉我们这个问题的严重性。如此大好时机,我们干吗还愣着不动呢!如果你是一位Linux爱好者,你可能已经掌握了基本的Linux的知识与操作,毫无疑问,你并不会去满足这样小小的成就。Linux为何如此的流行?其最大的特点莫过于功能强大,性能稳定的服务器应用了。像WWW,MAIL,FTP,DNS和SMB等。在这篇文章中,我将以Redhat Linux 9为蓝本,从Web服务器的一些最基本的操作入手,从初学者使用的态度,让读者正确充分的认识Apache。好,现在就让我们一起踏上征服Apache的**之路吧。

第一站 Apache的历史与前景

1995年,美国国家计算机安全协会(NCSA)的开发者创建了NCSZ全球网络服务软件,其最大的特点是HTTP精灵程序,它比当时的CERN服务器更容易由源码来配置和创建,又由于当时其他服务器软件的缺乏,他很快流行起来。但是后来,该服务器的核心开发人员几乎都离开了NCSA,一些使用者们自己成立了一个组织来管理他们编写的补丁,于是Apache Group应运而生。他们把该服务器软件称为Apache。Apache源于A patchy server的读音,意思是充满补丁的服务器。如今Apache慢慢地已经成为Internet上最流行的Web服务器软件了。在所有的Web服务器软件中,Apache占据绝对优势,远远领先排名第二的Microsoft IIS。如果你对它感兴趣,你可以访问Apache的官方网站:http://www.apache.org。Apache作为**软件之一,像其他**软件一样,他们都是由许许多多的**开发人员投入了大量的时间和精力来实现并逐步完善的,所以我们有理由相信Apache的发展前景会更好。

第二站 Apache 2.0的安装

Apache 2.0的配置与安装和Apache 1.3的有很大的不同,他像其它的开源软件一样,使用libtool和autoconf来配置环境。但不管是Apache几通常都有两种安装方式:源代码安装和RPM包安装。这两种安装类型各有特色,RPM包安装不需要编译,而源代码安装则需要先配置编译再安装,RPM包安装在一个固定的位置下,选择固定的模块,而源代码安装则可以让你选择安装路径,选择你想要的模块。下面分别以实例的形式来介绍两种类型的安装方法。

一,使用源代码安装

(1) 获得源代码

# lynx
http://www.apache.org/dist/httpd/httpd-2_0_NN.tar.gz

NN表示当前所用的版本号。

(2) 解压缩

# gzip -d httpd-2_0_NN.tar.gz
# tar xvf httpd-2_0_NN.tar

(3) 配置.

# ./configure --prefix= /usr/local/apache

表示Apache将安装在/usr/local/apache目录下

(4) 编译与安装

# make

# make install

(5) 测试

# /usr/local/apache/bin/apachectl start

二,使用RPM包安装

# rpm —ivh apache-*.rpm

完成安装后,配置文件在/etc/httpd/conf/目录下,文件根目录为/var/www/html,工具文件在/etc/rc.d/init.d/目录下,日志文件在/var/log/httpd/目录下。

第三站 Apache 2.0的配置

Apache 2.0的主配置文件为httpd.conf。如果以上述源代码安装则配置文件保存在/usr/local/apache/conf/目录下,若以RPM包方式安装则配置文件保存在/etc/httpd/conf/目录下。我们可以直接修改httpd.conf文件也可以用redhat linux 9自带的图形化工具来配置。打开启动程序->系统设置->服务器设置->HTTP服务器,可以进行相关。主界面如图:


下面我们来看一下httpd.conf中的几条指令,“#”后加入了注释说明。

Port 80 #定义了web服务器的侦听端口,默认值为80,它是TCP网络端口之一。若写入多个端口,以最后一个为准。

User apache #一般情况下,以nobody用户和nobody组来运行web服务器,因为web

Group apache # 服务器发出的所有的进程都是以root用户身份运行的,存在安全风险。

ServerAdmin root@localhost #指定服务器管理员的E-mail地址。服务器自动将错误报告到该地址。

ServerRoot /etc/httpd #服务器的根目录,一般情况下,所有的配置文件在该目录下

ServerName new.host.name:80 #web客户搜索的主机名称

KeepAliveTimeout 15 #规定了连续请求之间等待15秒,若超过,则重新建立一条新的TCP连接

MaxKeepAliveRequests 100 #永久连接的HTTP请求数

MaxClients 150 #同一时间连接到服务器上的客户机总数

ErrorLog logs/error_log #用来指定错误日志文件的名称和路径

PidFile run/httpd.pid #用来存放httpd进程号,以方便停止服务器。

Timeout 300 #设置请求超时时间,若网速较慢则应把值设大。

DocumentRoot /var/www/html #用来存放网页文件

第四站 Apache的管理

(1) 启动和停止Apache

/etc/rc.d/init.d/httpd start

/etc/rc.d/init.d/httpd stop

(2) Apache的日志文件

有人说判定一个管理员是否优秀之一就是看他是否是一个分析日志的能手,因为从日志文件中获取的反馈信息对管理员来说是相当重要的。Apache的日至文件主要包括访问日志和错误日志。访问日志记录了该服务器所有的请求的过程,主要记录的是客户的信息,通过它我们可以知道什么人访问了该网站,什么时候访问的,访问的内容是什么等等。错误日志则是记录了服务器出错的细节和如何处理等。日志文件的位置是由上述主配置文件httpd.conf来规定的。Redhat中有一个查看日志的工具——系统日志。其主界面如下
下面各举一个例子来说明他的格式:

错误日志的写法:

[Mon sep 22 14:32:52 2003] [error] [client 127.0.0.1] client denied by server configuration: /export/home/live/ap/htdocs/test

[Mon sep 22 14:32:52 2003] 错误发生的时间。

[error] 表示错误的级别。有debug,info,notice,warn,error,crit,alert,emerg,这些级别由低到高表示了错误的严重性。

[client 127.0.0.1] 表示客户端IP地址。

client denied by server configuration: /export/home/live/ap/htdocs/test 标是错误的具体信息。

访问日志的写法:

127.0.0.1 - wangdong [22/sep/2003:13:55:36 -0800] \\\"GET /apache_pb.gif HTTP/1.0\\\" 200 2326

127.0.0.1 表示访问这台服务器的客户端IP地址。

Wangdong 表示用户的登录名。

[22/sep/2003:13:55:36 -0800] 服务器完成客户端请求的时间,格式为[日/月/年:小时:分钟:秒 时区]

\\\"GET /apache_pb.gif HTTP/1.0\\\" 表示客户端访问该资源所使用的方法。

200 记录的是服务器返回给客户的状态码。200表示成功,以4打头的表示访问出错。

2326 表示发给客户端的总字节数。若是“—”表示没有找到访问资源。

但在实际应用中,对于大型网站,日志文件往往增长的很快,不利于我们查询,降低服务器的效率,而且占用大量的磁盘空间,所以我们必须对日志进行定期的维护。

既然日志文件很大,那么我们如何把一大堆枯燥的数据整理成容易让我们看懂的形式呢?有没有这样的工具呢?非常幸运,在redhat linux 9中自带了一个分析日志的工具——webalizer

第五站 配置虚拟主机

虚拟主机是在一台www服务器上为多个单独的域名提供www服务,每个域名具有自己的目录和配置,相当于将一台主机分为多台主机,虚拟主机技术对于主机数量不足,但又想为不同的用户提供独立的Web服务的需求非常有效。而对于一个公司,利用价格昂贵的服务器只提供一种域名服务,似乎是不明智的,而现在越来越多的公司喜欢在一台服务器上使用多个域名服务,架设不同的网站,这样做的好处是显而易见。

Apache有两种方式支持虚拟主机,一种是基于IP的虚拟主机,另一种是基于名字的虚拟主机。基于名字的虚拟主机使用相同的IP地址来配置不同的虚拟主机,这就弥补了因IP地址不足而带来的问题。基于名字的虚拟主机的配置相当简单,你只需配置你得DNS服务器使每个主机名对应正确的IP地址,然后再配置Apache HTTP Server使它能认识不同的主机名就可以了。

假设我们组建了一家多媒体制作公司,有一台Apache服务器和一个IP地址:192.168.0.1 要运行两种业务,一种为电子商务网站,域名为www.business.media.com ,另一种为教学网站,域名为www.teaching.media.com 。先在DNS服务器中把域名www.business.media.com和www.teachin....conf就可以了。

NameVirtualHost 192.168.0.1


ServerName www.business.media.com
DocumentRoot /var/www/html/business



ServerName www.teaching.media.com
DocumentRoot /var/www/html/teaching

而基于IP的虚拟主机则要求使用不同的IP地址来区别不同的虚拟主机,这就要求使用多块网卡,把不同的IP地址**到不同的网卡上,或者在一块网卡上**多个IP地址。假设我们主机的IP地址为192.168.0.1(www.media.com),另外有两个IP地址别?..nf/httpd.conf。[/url]


ServerAdmin webmaster@ business.media.com
DocumentRoot /var/www/html/business
ServerName www.business.media.com
ErrorLog /var/www/html/business/logs/error_log
TransferLog /var/www/html/business/logs/access_log



ServerAdmin webmaster@teaching.media.com
DocumentRoot /var/www/html/teaching
ServerName www.teaching.media.com
ErrorLog /var/www/html/teaching/logs/error_log
TransferLog /var/www/html/teaching/logs/access_log

第六站 配置Apache代理
代理服务器是网络信息服务的中转站。如果我们把Apache代理服务器形象地比喻成代理商的话,消费者向代理商购买东西时,如果代理商有的话,可直接卖给消费者,若没有,则代理商向厂家进货,再卖给消费者。这样做有以下几点好处:(1)提高了访问速度。(2)充当防火墙,增加了安全性。(3)可以过滤一些不良网站。(4)具有缓存功能。(5)节省IP开销。代理服务器可分为两种类型:客户端代理和服务器端代理。下面我们在讲解几个指令后举例说明各自的配置方法。
ProxyRequest On/Off #启用或者禁用Apache代理服务。
CacheRoot \\\"/etc/httpd/proxy\\\" #代理缓存的根目录。
CacheSize 5 #代理缓存的大小。
CacheGcInterval 4 #设定运行管理缓存的无用数据搜集程序的时间间隔
CacheMaxExpire 24 #文件过期时间。
CacheDefaultExpire 1 #指定未包含过期信息文件的有效期。
NoCache a-domain.com another-domain.edu #该网站的文件将不被缓存。
l 客户端代理的配置
(1) 修改/etc/httpd/conf/httpd.conf中的相关指令
(2) 修改/etc/httpd/conf/httpd.conf,添加对代理目录的访问控制。

Order deny,allow
Deny from all
Allow from .your-domain.com

(3) 重启httpd。
l 服务器端代理的配置
服务器端代理与客户端代理不同,它是在防火墙上安装Apache服务器,使用它提供对WWW服务器的代理访问。这种方法把WWW服务器与外部隔开,提高了安全性,而对用户来说,好像没有变化一样。假设在内部局域网中WWW服务器的IP地址为192.168.0.2,防火墙主机内部IP地址为192.168.0.5,外部IP地址为192.9.202.1。
(一) 配置防火墙上的Apache
(1) 在/etc/httpd/conf/httpd.conf中添加虚拟主机。

ServerAdmin webmaster@business.media.com
DocumentRoot /www/docs/business.media.com
ServerName www.business.media.com
ErrorLog logs/business.media.com-error_log
CustomLog logs/business.media.com-log_common

(2) 配置局域网中的DNS服务器,把www.business.media.com指向192.9.201.1。
(二) 配置局域网内部WWW服务器
在Linux环境下,有一个非常流行的代理服务器软件——Squid。他的功能非常的强大,支持HTTP,FTP,Gopher,SSL,和WAIS等协议的代理,而且设置简单,只需再配置文件中稍稍改动就可以了。
好了,WWW服务器配置这条路总算走完了,笔者希望读过此文章的人能够有所收获,最后,希望在学习Linux这条充满乐趣而又布满荆棘的路上的爱好者们,永不言败,成为真正的高手。

2008-10-20 00:47#1
View profile  Blog  Send a short message  Top
 
9527





UID 7703
Digest 0
Points 0
Posts 0
码币MB 0 Code
黄金 0 Catty
钻石 0 Pellet
Permissions 10
Register 2009-7-27
Status offline

高级Linux安全管理技巧

由于Linux操作系统是一个开放源代码的免费操作系统,因此受到越来越多用户的欢迎。随着Linux操作系统在我国的不断普及,有关的政府部门更是将基于Linux开发具有自主版权的操作系统提高到保卫**安全的高度来看待,因此我们不难预测今后Linux操作系统在我国将得到更快更大的发展。虽然Linux与UNIX很类似,但它们之间也有一些重要的差别。对于众多的习惯了UNIX和Windows NT的系统管理员来讲,如何保证Linux操作系统的安全将面临许多新的挑战。本文介绍了一系列实用的Linux安全管理经验。

一、文件系统
在Linux系统中,分别为不同的应用安装单独的主分区将关键的分区设置为只读将大大提高文件系统的安全。这主要涉及到Linux自身的ext2文件系统的只添加(只添加)和不可变这两大属性。
●文件分区Linux的文件系统可以分成几个主要的分区,每个分区分别进行不同的配置和安装,一般情况下至少要建立/、/usr/local、/var和/home等分区。/usr可以安装成只读并且可以被认为是不可修改的。如果/usr中有任何文件发生了改变,那么系统将立即发出安全报警。当然这不包括用户自己改变/usr中的内容。/lib、/boot和/sbin的安装和设置也一样。在安装时应该尽量将它们设置为只读,并且对它们的文件、目录和属性进行的任何修改都会导致系统报警。
当然将所有主要的分区都设置为只读是不可能的,有的分区如/var等,其自身的性质就决定了不能将它们设置为只读,但应该不允许它具有执行权限。
●扩展ext2使用ext2文件系统上的只添加和不可变这两种文件属性可以进一步提高安全级别。不可变和只添加属性只是两种扩展ext2文件系统的属性标志的方法。一个标记为不可变的文件不能被修改,甚至不能被根用户修改。一个标记为只添加的文件可以被修改,但只能在它的后面添加内容,即使根用户也只能如此。
可以通过chattr命令来修改文件的这些属性,如果要查看其属性值的话可以使用lsattr命令。要想了解更多的关于ext2文件属性的信息,可使用命令man chattr来寻求帮助。这两上文件属性在检测黑客企图在现有的文件中安装入侵后门时是很有用的。为了安全起见,一旦检测到这样的活动就应该立即将其阻止并发出报警信息。
如果你的关键的文件系统安装成只读的并且文件被标记为不可变的,入侵者必须重新安装系统才能删除这些不可变的文件但这会立刻产生报警,这样就大大减少了被非法入侵的机会。
●保护log文件当与log文件和log备份一起使用时不可变和只添加这两种文件属性特别有用。系统管理员应该将活动的log文件属性设置为只添加。当log被更新时,新产生的log备份文件属性应该设置成不可变的,而新的活动的log文件属性又变成了只添加。这通常需要在log更新脚本中添加一些控制命令。

二、备份
在完成Linux系统的安装以后应该对整个系统进行备份,以后可以根据这个备份来验证系统的完整性,这样就可以发现系统文件是否被非法窜改过。如果发生系统文件已经被破坏的情况,也可以使用系统备份来恢复到正常的状态。
●CD-ROM备份当前最好的系统备份介质就是CD-ROM光盘,以后可以定期将系统与光盘内容进行比较以验证系统的完整性是否遭到破坏。如果对安全级别的要求特别高,那么可以将光盘设置为可启动的并且将验证工作作为系统启动过程的一部分。这样只要可以通过光盘启动,就说明系统尚未被破坏过。
如果你创建了一个只读的分区,那么可以定期从光盘映像重新装载它们。即使象/boot、/lib和/sbin这样不能被安装成只读的分区,你仍然可以根据光盘映像来检查它们,甚至可以在启动时从另一个安全的映像重新下载它们。
●其它方式的备份虽然/etc中的许多文件经常会变化,但/etc中的许多内容仍然可以放到光盘上用于系统完整性验证。其它不经常进行修改的文件,可以备份到另一个系统(如磁带)或压缩到一个只读的目录中。这种办法可以在使用光盘映像进行验证的基础上再进行额外的系统完整性检查。
既然现在绝大多数操作系统现在都在随光盘一起提供的,制作一个CD-ROM紧急启动盘或验证盘操作起来是十分方便的,它是一种十分有效而又可行的验证方法。

三、改进系统内部安全机制
可以通过改进Linux操作系统的内部功能来防止缓冲区溢出攻击这种破坏力极强却又最难预防的攻击方式,虽然这样的改进需要系统管理员具有相当丰富的经验和技巧,但对于许多对安全级别要求高的Linux系统来讲还是很有必要的。
●Solaris Designer的安全Linux补丁Solaris Designer用于2.0版内核的安全Linux补丁提供了一个不可执行的栈来减少缓冲区溢出的威胁,从而大大提高了整个系统的安全性。
缓冲区溢出实施起来是相当困难的,因为入侵者必须能够判断潜在的缓冲区溢出何时会出现以及它在内存中的什么位置出现。缓冲区溢出预防起来也十分困难,系统管理员必须完全去掉缓冲区溢出存在的条件才能防止这种方式的攻击。正因为如此,许多人甚至包括Linux Torvalds本人也认为这个安全Linux补丁十分重要,因为它防止了所有使用缓冲区溢出的攻击。但是需要引起注意的是,这些补丁也会导致对执行栈的某些程序和库的依赖问题,这些问题也给系统管理员带来的新的挑战。
不可执行的栈补丁已经在许多安全邮件列表(如securedistros@nl.linux.org)中进行分发,用户很容易下载到它们等。
●StackGuardStackGuard是一个十分强大的安全补丁工具。你可以使用经StackGuard修补过的gcc版本来重新编译和链接关键的应用。
StackGuard进行编译时增加了栈检查以防止发生栈攻击缓冲区溢出,虽然这会导致系统的性能略有下降,但对于安全级别要求高的特定应用来讲StackGuard仍然是一个十分管用的工具。
现在已经有了一个使用了SafeGuard的Linux版本,用户使用StackGuard将会更加容易。虽然使用StackGuard会导致系统性能下降约10~20%,但它能够防止整个缓冲区溢出这一类攻击。
●增加新的访问控制功能Linux的2.3版内核正试图在文件系统中实现一个访问控制列表,这要可以在原来的三类(owner、group和other)访问控制机制的基础上再增加更详细的访问控制。
在2.2和2.3版的Linux内核中还将开发新的访问控制功能,它最终将会影响当前有关ext2文件属性的一些问题。与传统的具有ext2文件系统相比它提供了一个更加精确的安全控制功能。有了这个新的特性,应用程序将能够在不具有超级用户权限的情况下访问某些系统资源,如初始套接等。
●基于规则集的访问控制现在有关的Linux团体正在开发一个基于规则的访问控制(RSBAC)项目,该项目声称能够使Linux操作系统实现B1级的安全。RSBAC是基于访问控制的扩展框架并且扩展了许多系统调用方法,它支持多种不同的访问和认证方法。这对于扩展和加强Linux系统的内部和本地安全是一个很有用的。

四、设置陷井和蜜罐
所谓陷井就是激活时能够触发报警事件的软件,而蜜罐(honey pot)程序是指设计来引诱有入侵企图者触发专门的报警的陷井程序。通过设置陷井和蜜罐程序,一旦出现入侵事件系统可以很快发出报警。在许多大的网络中,一般都设计有专门的陷井程序。陷井程序一般分为两种:一种是只发现入侵者而不对其采取报复行动,另一种是同时采取报复行动。
设置蜜罐的一种常用方法是故意声称Linux系统使用了具有许多脆弱性的IMAP服务器版本。当入侵者对这些IMAP服务器进行大容量端口扫瞄就会落入陷井并且激发系统报警。
另一个蜜罐陷井的例子就是很有名的phf,它是一个非常脆弱的Web cgi-bin脚本。最初的phf是设计来查找电话号码的,但它具有一个严重的安全漏洞:允许入侵者使用它来获得系统口令文件或执行其它恶意操作。系统管理员可以设置一个假的phf脚本,但是它不是将系统的口令文件发送给入侵者,而是向入侵者返回一些假信息并且同时向系统管理员发出报警。
另外一类蜜罐陷井程序可以通过在防火墙中将入侵者的IP地址设置为黑名单来立即拒绝入侵者继续进行访问。拒绝不友好的访问既可以是短期的,也可以是长期的。Linux内核中的防火墙代码非常适合于这样做。


五、将入侵消灭在萌芽状态
入侵者进行攻击之前最常做的一件事情就是端号扫瞄,如果能够及时发现和阻止入侵者的端号扫瞄行为,那么可以大大减少入侵事件的发生率。反应系统可以是一个简单的状态检查包过滤器,也可以是一个复杂的入侵检测系统或可配置的防火墙。
●Abacus Port SentryAbacus Port Sentry是开放源代码的工具包,它能够监视网络接口并且与防火墙交互操作来关闭端口扫瞄攻击。当发生正在进行的端口扫瞄时,Abacus Sentry可以迅速阻止它继续执行。但是如果配置不当,它也可能允许敌意的外部者在你的系统中安装拒绝服务攻击。
Abacus PortSentry如果与Linux中透明的代理工具一起使用可以提供一个非常有效地入侵防范措施。这样可以将为所有IP地址提供通用服务的未使用端口重定向到Port Sentry中,Port Sentry可以在入侵者采取进一步行动之前及时检测到并阻止端口扫瞄。
Abacus Port Sentry能够检测到慢扫瞄(slow scan),但它不能检测到结构化攻击(structured attack)。这两种方式最终目的都要试图掩盖攻击意图。慢扫瞄就是通过将端口扫瞄分散到很长的时间内来完成,而在结构化的攻击中,攻击者试图通过扫瞄或探测多个源地址中来掩盖自己的真实攻击目标。
正确地使用这个软件将能够有效地防止对IMAP服务大量的并行扫瞄并且阻止所有这样的入侵者。Abacus Sentry与Linux 2.2内核的IPChains工具一起使用时最有效,IPChains能够自动将所有的端口扫瞄行为定向到Port Sentry。
Linux 2.0内核可以使用IPChains进行修补,Abacus Port Sentry也可以与早期的2.0版内核中的ipfwadm工具一起使用,ipfwadm在2.2版本以后被IPChains取代了。
Abacus Port Sentry还可以被配置来对Linux系统上的UDP扫瞄作出反应,甚至还可以对各种半扫瞄作出反应,如FIN扫瞄,这种扫描试图通过只发送很小的探测包而不是建立一个真正的连接来避免被发现。
当然更好的办法就是使用专门的入侵检测系统,如ISS公司的RealSecure等,它们可以根据入侵报警和攻击签名重新配置防火墙。但这样的产品一般价格较高,普及的用户承受起来有困难。

六、**击检测
系统主要通过阻止入侵企图来防止入侵,而**击系统则可以反向进行端口扫瞄或发起其它的攻击,这一着让入侵者不仅入侵阴谋未能得逞,反而“引狼入室”,招致**击。
有些安全系统如Abacus Sentry具有一定的**击能力。比如有的站点有了防止用户通过telnet进行连接,在应答telnet连接请求时,系统将返回一些不受欢迎的恶意信息。这只是一种最简单也是最轻微的**击措施。
一般情况下并不提倡使用**击功能,因为这样的**击措施很容易被非法利用来攻击其它的系统。

七、改进登录
服务器将系统的登录服务器移到一个单独的机器中会增加系统的安全级别,使用一个更安全的登录服务器来取代Linux自身的登录工具也可以进一步提高安全。
在大的Linux网络中,最好使用一个单独的登录服务器用于syslog服务。它必须是一个能够满足所有系统登录需求并且拥有足够的磁盘空间的服务器系统,在这个系统上应该没有其它的服务运行。更安全的登录服务器会大大削弱入侵者透过登录系统窜改日志文件的能力。
●安全syslog即使使用单独的登录服务器,Linux自身的syslog工具也是相当不安全的。因此,有人开发了所谓的安全log服务器,将密码签名集成到日志中。这会确保入侵者即使在窜改系统日志以后也无法做到不被发现。现在最常用的用于取代syslog的安全log服务器称为“安全syslog(ssyslong)”,用户可以从Core SDI站点http://www.core-sdi.com/ssylog处下载这个工具。这个守护程序实现一个称为PEQ-1的密码协议来实现对系统日志的远程审计。即使在入侵者获得系统超级用户权限的情况下也仍然可以进行审计,因为协议保证了以前以及入侵过程中的的log信息没有审计者(在远程可信任的主机上)的通知无法被修改。
●syslog-ng另一个取代syslog的工具是syslog-ng(下一代的syslog)。这是一个更加可配置的守护进程,它提供了密码签名来检测对日志文件的窜改。密码安全登录服务器和远程审计功能一起可以使入侵者极难进行日志窜改并且非常容易被检测到这样的不良企图。用户可以从www.babit.hu/products/syslog-ng.html处下载这个工具。

八、使用单一登录
系统维护分散的大网络环境中的多个用户帐号对于系统管理员来讲是一件非常头疼的事情。现在有一些单一的登录(sign on)系统不仅可以减轻管理员的负担,而同时还提高了安全级别。
网络信息服务(NIS)是一个很好的单一登录系统,它在Sun公司的Yellow Page服务的基础上发展来的,它的基本安全特性不够健状,由于不断有一些bug和脆弱性被公布,因此有人戏称它为网络入侵者服务(Network Intruder Service)。NIS的更新版本NIS+原NIS的不足进行了改进,现在已经有了用于Linux的NIS+版本。
Kerberos也是一种非常有名的单一登录系统。Kerberos v4具有一些很有名的安全漏洞,如入侵者可以离线进行穷尽攻击Kerberos cookie而不会被发现。Ketberos v5大大进行了改进,不会再有v4的问题。
在大的网络中,象NIS和Kerberos这样的单一的登录系统虽然有有利的一面,但也有它不利的一面。一方面,在不同系统上都具有认证机制有助于隔离该功能并且减少它与其它服务相互之间的影响。另一方面,一旦一个系统中的某个帐号被破坏,所有可通过这个帐号访问的系统都将同样遭到破坏。因此在单一的登录系统中特别要求具有较高防猜测水平的口令字。
基于Windows的网络在Windows NT域系统中有自己的单一登录系统。Linux系统可以根据Windows系统进行认证。这允许用户在Windows系统下修改、维护和管理它们的帐号和口令字并且修改结果会在同时在UNIX登录中得到体现。如使用pam_smb,Linux系统可以根据Windows SMB Domain进行认证。这在以Windows网络管理为中心的网络中是相当方便的,但它也带来了Windows认证系统自身的一些不安全性。

九、掌握最新安全产品和技术
作为一个系统管理员,还必须时刻跟踪Linux安全技术的发展动向,并且适时采用更先进的Linux安全工具。目前国际上有许多有关Linux安全的研究和开发项目,目前至少有三个安全Linux项目已经启动,每个项目的目标都有自己的侧重点,它们分别是:
●安全Linux(Secure Linux) 安全Linux(www.reseau.nl/securelinux)项目的目标是提供一个用于Internet服务器系统的安全的Linux分发。该项目管理者正寻求在这个产品中集成强大的密码和一些额外的Web服务器功能。既然它是在美国之外创建的,人们可望能够得到改进的密码安全而不会受到美国安全产品出口法律的**。
●Bastille LinuxBastille Linux(www.bastille-linux.org)项目寻求在Linux环境中建立一个类似OpenBSD的标准。该项目宣称的目标是为台式机创建一个安全的分发,使网络管理者可以不用担心用户的安全。
●Kha0s LinuxKha0s Linux(www.kha0s.org)正寻求创建了一个具有强加密和类似OpenBSD的安全政策的最小的安全Linux分发。该小组目前正在它的Web站点上请求全球用户和厂商的参与和合作。
除此之外,下面两点对于管理员提高Linux安全管理水平也是十分有用的:
访问安全Linux邮件列表现在有许多关于Linux安全的邮件列表,如securedistros@nl.linux.org、Kh a0s-dev@kha0s.org等,经常访问这些邮件列表可以得到大量的安全信息。
还有另一个通用的邮件列表是security-audit@ferret.lmh.ox.ac.uk,它是专门讨论源代码的安全审计的。这个列表可能与其它的邮件列表有大量的重复,但如果想了解源代码审计和相关的安全问题的话还是很值得一读的。

十、多管齐下
任何一种单一的安全措施其防范能力都是有限的,一个安全的系统必须采取多种安全措施,多管齐下才能更好的保证安全。假如一个Linux系统采取了以上各种安全措施,那么要想侵入你的系统,攻击者将不得不绕过防火墙、避开入侵检测系统、跳过陷井程序、通过系统过滤器、逃过你的日志监视器、修改文件系统属性、破坏安全登录服务器才能最终达到目的。由于其中任何一个环节都可能激发报警,因此入侵者要想侵入这样的系统而又不被发现几乎是不可能的。

Linux + Java 会得到什么

信息产业,战况频仍。
Linux v.s Windows 、 Java v.s .NET 、 OpenOffice.org v.s Microsoft Office System 、 PS2 v.s XBox 、 Palm v.s Windows CE 、 Symbian v.s Microsoft Smart Phone… 等等。孤军奋战总是势单力薄,团结力量大,于是我们开始看到在不同领域的反微软势力有了整合的迹象,其中最明显者是 Linux + Java 。

  Linux 逐渐兴起,而 Java 本来就是软件技术的主流, Linux 负责下面的操作系统, Java 负责上面的应用,两者的结合是绝佳的互补。甚至有人将 Linux + Java 唤做 Lava (岩浆)。

  对于一个新推出的操作系统来说,会遭遇到两大问题:第一个问题是驱动程序不足,第二个问题是应用程序不足,而 Java 的存在,可以解决第二个问题。只要该操作系统上具备 Java 虚拟机器,就可以执行所有的 Java 应用程序;只要 Java 的应用程序够多、够丰富,就可以解决新操作系统其应用程序不足的窘境。

  我记得 BeOS 的 CEO 曾说过:新的操作系统如果能够利用 Java 的力量,将可以有崛起的机会(虽然在 2001 年时 BeOS 还没等到此机会就因资本耗尽而关门,后来技术被 Palm 买走)。但是我认为,倘若新的操作系统真的利用 Java 而站稳脚步了,恐怕又会想把 Java 一脚踢开。「狡兔死,走狗烹」,不正是同样的道理。新的操作系统一旦崛起,一定会希望应用程序只能在自己的操作系统上执行,而不能在其它操作系统上执行。

  回溯到约六年前,当时 IBM 和 Sun 合作开发了一套新的操作系统,称为 JavaOS ,正是要结合操作系统与 Java 虚拟机器。只可惜,后来他们发现这样的设计并未取得太多速度上的优势(因为那一阵子 JIT 编译器的技术进展很快),而且也会造成驱动程序不足的困扰(这是新的操作系统一定要面对的问题),所以该计划在 1998 下半年时停摆。不久之后,另一个 Open Source 的类似计划 JOS 也停摆了。

  现在 Sun 即将推出一个名为 Java Desktop 的产品,它正是整合了 Linux 和 Java 。 Java Desktop 不会有以前 JavaOS 的问题,因为现在 Linux 的驱动程序已经很普遍,连 Linux 原生的程序都很齐备。 Java Desktop 整合 Linux 和 Java ,并预先安装了许多软件(包括了 Java 的应用软件和 Linux 原生的应用软件),例如 StarSuite 。如同大家所预料的一样, Java Desktop 的外观与操作方式和 Windows 很类似。

  许多 Linux 阵营的人都在质疑,在这个称为 Java Desktop 产品中, Java 占的比例太小, Linux 占的比例太大,似乎不太适合称为 Java Desktop ,而应该称为 Linux Desktop 。不只是 Linux 阵营有此疑义,连 Java 阵营(例如 www.JavaLobby.org )也充斥着这样的看法。我建议 Java Desktop 另取名字,以正视听。否则,刚刚买下 Ximian 的 Novell 万一以后打算推出 Linux + Mono ,是不是可以如法炮制,称为 .NET Desktop ,乖地隆咚!

  Linux + Java 会不会成功?我认为,在服务器上的 Linux + Java 机会颇大(事实上,可以算是已经成功了),但是在 PC 上, Linux + Java 短期内是没有赢面的。而 Java Desktop 似乎是 PC 等级的软件,这使得我相当怀疑 Java Desktop 的前景。

  就操作系统和虚拟机器的整合来说,恐怕 Linux + Java 的整合程度会比不上 Windows + .NET 。 Windows 已经渐渐地将许多核心技术改用 .NET 相关技术来取代,例如 Windows 核心的 COM/DCOM/COM+ ,在进入 .NET 时代之后都会有适当的替代技术出现。甚至下一个版本的 Windows (代号 Longhorn )可能就是一个完全整合进 .NET 的崭新操作系统。从 Java 和 .NET 在这几年的发展状况来说, Java 如果不能解决自身的许多问题,并加快步伐,恐怕龟兔赛跑的情节会再度上演。

2008-10-20 00:49#2
View profile  Blog  Send a short message  Top
 
9527





UID 7703
Digest 0
Points 0
Posts 0
码币MB 0 Code
黄金 0 Catty
钻石 0 Pellet
Permissions 10
Register 2009-7-27
Status offline
Linux 指令大全

名称:cat
使用权限:所有使用者
使用方式:cat [-AbeEnstTuv] [--help] [--version] fileName
说明:把档案串连接后传到基本输出(萤幕或加 > fileName 到另一个档案)
参数:
-n 或 --number 由 1 开始对所有输出的行数编号
-b 或 --number-nonblank 和 -n 相似,只不过对于空白行不编号
-s 或 --squeeze-blank 当遇到有连续两行以上的空白行,就代换为一行的空白行
-v 或 --show-nonprinting

范例:
cat -n textfile1 > textfile2 把 textfile1 的档案内容加上行号后输入 textfile2 这个档案里
cat -b textfile1 textfile2 >> textfile3 把 textfile1 和 textfile2 的档案内容加上行号(空白行不加)之后将内容附加到 textfile3

名称 : cd
使用权限 : 所有使用者

使用方式 : cd [dirName]

说明 : 变换工作目录至 dirName。 其中 dirName 表示法可为绝对路径或相对路径。若目录名称省略,则变换至使用者的 home directory (也就是刚 login 时所在的目录)。

另外,\"~\" 也表示为 home directory 的意思,\".\" 则是表示目前所在的目录,\"..\" 则表示目前目录位置的上一层目录。

范例 : 跳到 /usr/bin/ :
cd /usr/bin

跳到自己的 home directory :
cd ~

跳到目前目录的上上两层 :
cd ../..

指令名称 : chmod
使用权限 : 所有使用者

使用方式 : chmod [-cfvR] [--help] [--version] mode file...

说明 : Linux/Unix 的档案存取权限分为** : 档案拥有者、群组、其他。利用 chmod 可以藉以控制档案如何被他人所存取。

把计 :

mode : 权限设定字串,格式如下 : [ugoa...][[+-=][rwxX]...][,...],其中u 表示该档案的拥有者,g 表示与该档案的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。
+ 表示增加权限、- 表示取消权限、= 表示唯一设定权限。
r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该档案是个子目录或者该档案已经被设定过为可执行。
-c : 若该档案权限确实已经更改,才显示其更改动作
-f : 若该档案权限无法被更改也不要显示错误讯息
-v : 显示权限变更的详细资料
-R : 对目前目录下的所有档案与子目录进行相同的权限变更(即以递回的方式逐个变更)
--help : 显示辅助说明
--version : 显示版本

范例 :将档案 file1.txt 设为所有人皆可读取 :
chmod ugo+r file1.txt

将档案 file1.txt 设为所有人皆可读取 :
chmod a+r file1.txt

将档案 file1.txt 与 file2.txt 设为该档案拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入 :
chmod ug+w,o-w file1.txt file2.txt

将 ex1.py 设定为只有该档案拥有者可以执行 :
chmod u+x ex1.py

将目前目录下的所有档案与子目录皆设为任何人可读取 :
chmod -R a+r *

此外chmod也可以用数字来表示权限如 chmod 777 file
语法为:chmod abc file

其中a,b,c各为一个数字,分别表示User、Group、及Other的权限。

r=4,w=2,x=1
若要rwx属性则4+2+1=7;
若要rw-属性则4+2=6;
若要r-x属性则4+1=7。

范例:
chmod a=rwx file


chmod 777 file

效果相同
chmod ug=rwx,o=x file


chmod 771 file

效果相同

若用chmod 4755 filename可使此程式具有root的权限

指令名称 : chown
使用权限 : root

使用方式 : chmod [-cfhvR] [--help] [--version] user[:group] file...

说明 : Linux/Unix 是多人多工作业系统,所有的档案皆有拥有者。利用 chown 可以将档案的拥有者加以改变。一般来说,这个指令只有是由系统管理者(root)所使用,一般使用者没有权限可以改变别人的档案拥有者,也没有权限可以自己的档案拥有者改设为别人。只有系统管理者(root)才有这样的权限。

把计 :

user : 新的档案拥有者的使用者 IDgroup : 新的档案拥有者的使用者群体(group)-c : 若该档案拥有者确实已经更改,才显示其更改动作-f : 若该档案拥有者无法被更改也不要显示错误讯息-h : 只对于连结(link)进行变更,而非该 link 真正指向的档案-v : 显示拥有者变更的详细资料-R : 对目前目录下的所有档案与子目录进行相同的拥有者变更(即以递回的方式逐个变更)--help : 显示辅助说明--version : 显示版本

范例 :
将档案 file1.txt 的拥有者设为 users 群体的使用者 jessie :
chown jessie:users file1.txt

将目前目录下的所有档案与子目录的拥有者皆设为 users 群体的使用者 lamport :
chmod -R lamport:users *

名称:cp
使用权限:所有使用者

使用方式:

cp [options] source dest
cp [options] source... directory

说明:将一个档案拷贝至另一档案,或将数个档案拷贝至另一目录。

把计?

-a 尽可能将档案状态、权限等资料都照原状予以复制。
-r 若 source 中含有目录名,则将目录??蛋敢嘟砸佬蚩奖粗聊康牡亍?
-f 若目的地已经有相同档名的档案存在,则在复制前先予以删除再行复制。
范例:
将档案 aaa 复制(已存在),并命名为 bbb :
cp aaa bbb

将所有的C语言程式拷贝至 Finished 子目录中 :
cp *.c Finished

名称:cut

使用权限:所有使用者

用法:cut -cnum1-num2 filename

说明:显示每行从开头算起 num1 到 num2 的文字。

范例:

shell>> cat example
test2
this is test1
shell>> cut -c0-6 example ## print 开头算起前 6 个字元
test2
this i


名称 : find
用法 : find
使用说明 :

将档案系统内符合 expression 的档案列出来。你可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。

find 根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部份为 path,之后的是 expression。如果 path 是空字串则使用目前路径,如果 expression 是空字串则使用 -print 为预设 expression?

expression 中可使用的选项有二三十个之多,在此只介绍最常用的部份。

-mount, -xdev : 只检查和指定目录在同一个档案系统下的档案,避免列出其它档案系统中的档案
-amin n : 在过去 n 分钟内被读取过
-anewer file : 比档案 file 更晚被读取过的档案
-atime n : 在过去 n 天过读取过的档案
-cmin n : 在过去 n 分钟内被修改过
-cnewer file :比档案 file 更新的档案
-ctime n : 在过去 n 天过修改过的档案
-empty : 空的档案-gid n or -group name : gid 是 n 或是 group 名称是 name
-ipath p, -path p : 路径名称符合 p 的档案,ipath 会忽略大小写
-name name, -iname name : 档案名称符合 name 的档案。iname 会忽略大小写
-size n : 档案大小 是 n 单位,b 代表 512 位元组的区块,c 表示字元数,k 表示 kilo bytes,w 是二个位元组。-type c : 档案类型是 c 的档案。
d: 目录
c: 字型装置档案
b: 区块装置档案
p: 具名贮列
f: 一般档案
l: 符号连结
s: socket
-pid n : process id 是 n 的档案

你可以使用 ( ) 将运算式分隔,并使用下列运算。
exp1 -and exp2
! expr
-not expr
exp1 -or exp2
exp1, exp2
范例:
将目前目录及其子目录下所有延伸档名是 c 的档案列出来。
# find . -name \"*.c\"

将目前目录其其下子目录中所有一般档案列出
# find . -ftype f

将目前目录及其子目录下所有最近 20 分钟内更新过的档案列出
# find . -ctime -20

名称:less

使用权限:所有使用者

使用方式:

less [Option] filename

说明:
less 的作用与 more 十分相似,都可以用来浏览文字档案的内容,不同的是 less 允许使用者往回卷动
以浏览已经看过的部份,同时因为 less 并未在一开始就读入整个档案,因此在遇上大型档案的开启时,会比一般的文书编辑器(如 vi)来的快速。

范例:

指令名称 : ln
使用权限 : 所有使用者

使用方式 : ln [options] source dist,其中 option 的格式为 :

[-bdfinsvF] [-S backup-suffix] [-V {numbered,existing,**}]
[--help] [--version] [--]
说明 : Linux/Unix 档案系统中,有所谓的连结(link),我们可以将其视为档案的别名,而连结又可分为两种 : 硬连结(hard link)与软连结(symbolic link),硬连结的意思是一个档案可以有多个名称,而软连结的方式则是产生一个特殊的档案,该档案的内容是指向另一个档案的位置。硬连结是存在同一个档案系统中,而软连结却可以跨越不同的档案系统。
ln source dist 是产生一个连结(dist)到 source,至于使用硬连结或软链结则由参数决定。

不论是硬连结或软链结都不会将原本的档案复制一份,只会占用非常少量的磁碟空间。

-f : 链结时先将与 dist 同档名的档案删除-d : 允许系统管理者硬链结自己的目录-i : 在删除与 dist 同档名的档案时先进行询问-n : 在进行软连结时,将 dist 视为一般的档案-s : 进行软链结(symbolic link)-v : 在连结之前显示其档名-b : 将在链结时会被覆写或删除的档案进行备份-S SUFFIX : 将备份的档案都加上 SUFFIX 的字尾-V METHOD : 指定备份的方式--help : 显示辅助说明--version : 显示版本
范例 :
将档案 yy 产生一个 symbolic link : zz
ln -s yy zz

将档案 yy 产生一个 hard link : zz
ln yy xx


名称:locate
使用权限:所有使用者
使用方式: locate [-q] [-d ] [--database=]
locate [-r ] [--regexp=]
locate [-qv] [-o ] [--output=]
locate [-e ] [-f ] <[-l ] [-c]
<[-U ] [-u]>
locate [-Vh] [--version] [--help]
说明:
locate 让使用者可以很快速的搜寻档案系统内是否有指定的档案。其方法是先建立一个包括系统内所有档案名称及路径的资料库,之后当寻找时就只需查询这个资料库,而不必实际深入档案系统之中了。

在一般的 distribution 之中,资料库的建立都被放在 contab 中自动执行。一般使用者在使用时只要用

# locate your_file_name

的型式就可以了。 参数:
-u
-U

建立资料库,-u 会由根目录开始,-U 则可以指定开始的位置。

-e


排除在寻找的范围之外。

-l
如果 是 1.则启动安全模式。在安全模式下,使用者不会看到权限无法看到的档案。这会始速度减慢,因为 locate 必须至实际的档案系统中取得档案的权限资料。

-f
将特定的档案系统排除在外,例如我们没有到理要把 proc 档案系统中的档案放在资料库中。

-q
安静模式,不会显示任何错误讯息。

-n
至多显示 个输出。

-r
使用正规运算式 做寻找的条件。

-o
指定资料库存的名称。

-d

指定资料库的路径

-h
显示辅助讯息

-v
显示更多的讯息

-V
显示程式的版本讯息 范例:

locate chdrv : 寻找所有叫 chdrv 的档案
locate -n 100 a.out : 寻找所有叫 a.out 的档案,但最多只显示 100 个
locate -u : 建立资料库

名称 : ls
使用权限 : 所有使用者

使用方式 : ls [-alrtAFR] [name...]

说明 : 显示指定工作目录??谌荩?谐瞿壳肮ぷ髂柯妓???蛋讣白幽柯?。

-a 显示所有档案及目录 (ls内定将档案名或目录名称开头为\".\"的视为隐藏档,不会列出)
-l 除档案名称外,亦将档案型态、权限、拥有者、档案大小等资讯详细列出
-r 将档案以相反次序显示(原定依英文字母次序)
-t 将档案依建立时间之先后次序列出
-A 同 -a ,但不列出 \".\" (目前目录) 及 \"..\" (父目录)
-F 在列出的档案名称后加一符号;例如可执行档则加 \"*\", 目录则加 \"/\"
-R 若目录下有档案,则以??蛋敢嘟砸佬蛄谐?

范例:
列出目前工作目录下所有名称是 s 开头的档案,愈新的排愈后面 :
ls -ltr s*

将 /bin 目录以下所有目录及档案详细资料列出 :
ls -lR /bin

列出目前工作目录下所有档案及目录;目录于名称后加 \"/\", 可执行档于名称后加 \"*\" :
ls -AF

名称:more
使用权限:所有使用者
使用方式:more [-dlfpcsu] [-num] [+/pattern] [+linenum] [fileNames..]
说明:类似 cat ,不过会以一页一页的显示方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示,而且还有搜寻字串的功能(与 vi 相似),使用中的说明文件,请按 h 。
参数:-num 一次显示的行数
-d 提示使用者,在画面下方显示 [Press space to continue, q to quit.] ,如果使用者按错键,则会显示 [Press h for instructions.] 而不是 哔 声
-l 取消遇见特殊字元 ^L(送纸字元)时会暂停的功能
-f 计算行数时,以实际上的行数,而非自动换行过后的行数(有些单行字数太长的会被扩展为两行或两行以上)
-p 不以卷动的方式显示每一页,而是先清除萤幕后再显示内容
-c 跟 -p 相似,不同的是先显示内容再清除其他旧资料
-s 当遇到有连续两行以上的空白行,就代换为一行的空白行
-u 不显示下引号 (根据环境变数 TERM 指定的 terminal 而有所不同)
+/ 在每个档案显示前搜寻该字串(pattern),然后从该字串之后开始显示
+num 从第 num 行开始显示
fileNames 欲显示内容的档案,可为复数个数
范例:
more -s testfile 逐页显示 testfile 之档案内容,如有连续两行以上空白行则以一行空白行显示。
more +20 testfile 从第 20 行开始显示 testfile 之档案内容。

名称:mv
使用权限:所有使用者

使用方式:

mv [options] source dest
mv [options] source... directory
说明:将一个档案移至另一档案,或将数个档案移至另一目录。
参数:-i 若目的地已有同名档案,则先询问是否覆盖旧档。

范例:

将档案 aaa 更名为 bbb :
mv aaa bbb

将所有的C语言程式移至 Finished 子目录中 :
mv -i *.c

名称:rm
使用权限:所有使用者

使用方式:rm [options] name...

说明:删除档案及目录。

把计?

-i 删除前逐一询问确认。
-f 即使原档案属性设为唯读,亦直接删除,无需逐一确认。
-r 将目录及以??蛋敢嘀鹨簧境??
范例:
删除所有C语言程式档;删除前逐一询问确认 :
rm -i *.c

将 Finished 子目录及子目录中所有档案删除 :
rm -r Finished

名称:rmdir
使用权限:于目前目录有适当权限的所有使用者

使用方式: rmdir [-p] dirName

说明: 删除空的目录。

参数: -p 是当子目录被删除后使它也成为空目录的话,则顺便一并删除。

范例:

将工作目录下,名为 AAA 的子目录删除 :
rmdir AAA

在工作目录下的 BBB 目录中,删除名为 Test 的子目录。若 Test 删除后,BBB 目录成为空目录,则 BBB 亦予删除。
rmdir -p BBB/Test

名称:split
使用权限:所有使用者

使用方式:split [OPTION] [INPUT [PREFIX]]

说明:

将一个档案分割成数个。而从 INPUT 分割输出成固定大小的档案,其档名依序为 PREFIXaa, PREFIXab...;PREFIX 预设值为 `x。若没有 INPUT 档或为 `-,则从标准输入读进资料。

匡兜?

-b, --bytes=SIZE

SIZE 值为每一输出档案的大小,单位为 byte。
-C, --line-bytes=SIZE

每一输出档中,单行的最大 byte 数。
-l, --lines=NUMBER

NUMBER 值为每一输出档的列数大小。
-NUMBER

与 -l NUMBER 相同。
--verbose

于每个输出档被开启前,列印出侦错资讯到标准错误输出。
--help

显示辅助资讯然后离开。
--version

列出版本资讯然后离开。
SIZE 可加入单位: b 代表 512, k 代表 1K, m 代表 1 Meg。

范例:

PostgresSQL 大型资料库备份与回存:

因 Postgres 允许表格大过你系统档案的最大容量,所以要将表格 dump 到单一的档案可能会有问题,使用 split进行档案分割。

% pg_dump dbname | split -b 1m - filename.dump.

重新载入

% createdb dbname
% cat filename.dump.* | pgsql dbname


名称:touch
使用权限:所有使用者

使用方式:
touch [-acfm]
[-r reference-file] [--file=reference-file]
[-t MMDDhhmm[[CC]YY][.ss]]
[-d time] [--date=time] [--time={atime,access,use,mtime,modify}]
[--no-create] [--help] [--version]
file1 [file2 ...]

说明:
touch 指令改变档案的时间记录。 ls -l 可以显示档案的时间记录。

参数:
a 改变档案的读取时间记录。
m 改变档案的修改时间记录。
c 假如目的档案不存在,不会建立新的档案。与 --no-create 的效果一样。
f 不使用,是为了与其他 unix 系统的相容性而保留。
r 使用参考档的时间记录,与 --file 的效果一样。
d 设定时间与日期,可以使用各种不同的格式。
t 设定档案的时间记录,格式与 date 指令相同。
--no-create 不会建立新档案。
--help 列出指令格式。
--version 列出版本讯息。

范例:

最简单的使用方式,将档案的时候记录改为现在的时间。若档案不存在,系统会建立一个新的档案。

touch file
touch file1 file2

将 file 的时间记录改为 5 月 6 日 18 点 3 分,公元两千年。时间的格式可以参考 date 指令,至少需输入 MMDDHHmm ,就是月日时与分。

touch -c -t 05061803 file
touch -c -t 050618032000 file

将 file 的时间记录改变成与 referencefile 一样。

touch -r referencefile file

将 file 的时间记录改成 5 月 6 日 18 点 3 分,公元两千年。时间可以使用 am, pm 或是 24 小时的格式,日期可以使用其他格式如 6 May 2000 。

touch -d \"6:03pm\" file
touch -d \"05/06/2000\" file
touch -d \"6:03pm 05/06/2000\" file
名称 : at
使用权限 : 所有使用者

使用方式 : at -V [-q queue] [-f file] [-mldbv] TIME

说明 : at 可以让使用者指定在 TIME 这个特定时刻执行某个程式或指令,TIME 的格式是 HH:MM其中的 HH 为小时,MM 为分钟,甚至你也可以指定 am, pm, midnight, noon, teatime(就是下午 4 点锺)等口语词。

如果想要指定超过一天内的时间,则可以用 MMDDYY 或者 MM/DD/YY 的格式,其中 MM 是分钟,DD 是第几日,YY 是指年份。另外,使用者甚至也可以使用像是 now + 时间间隔来弹性指定时间,其中的时间间隔可以是 minutes, hours, days, weeks?
另外,使用者也可指定 today 或 tomorrow 来表示今天或明天。当指定了时间并按下 enter 之后,at 会进入交谈模式并要求输入指令或程式,当你输入完后按下 ctrl+D 即可完成所有动作,至于执行的结果将会寄回你的帐号中。

把计 :

-V : 印出版本编号
-q : 使用指定的伫列(Queue)来储存,at 的资料是存放在所谓的 queue 中,使用者可以同时使用多个 queue,而 queue 的编号为 a, b, c... z 以及 A, B, ... Z 共 52 个
-m : 即使程式/指令执行完成后没有输出结果, 也要寄封信给使用者
-f file : 读入预先写好的命令档。使用者不一定要使用交谈模式来输入,可以先将所有的指定先写入档案后再一次读入
-l : 列出所有的指定 (使用者也可以直接使用 atq 而不用 at -l)
-d : 删除指定 (使用者也可以直接使用 atrm 而不用 at -d)
-v : 列出所有已经完成但尚未删除的指定

例子 :
三天后的下午 5 点锺执行 /bin/ls :
at 5pm + 3 days /bin/ls

三个星期后的下午 5 点锺执行 /bin/ls :
at 5pm + 2 weeks /bin/ls

明天的 17:20 执行 /bin/date :
at 17:20 tomorrow /bin/date

1999 年的最后一天的最后一分钟印出 the end of world !
at 23:59 12/31/1999 echo the end of world !

名称:cal

使用权限:所有使用者

使用方式:cal [-mjy] [month [year]]

说明:

显示日历。若只有一个参数,则代表年份(1-9999),显示该年的年历。年份必须全部写出:``cal 89\\ 将不会是显示 1989 年的年历。使用两个参数,则表示月份及年份。若没有参数则显示这个月的月历。
1752 年 9 月第 3 日起改用西洋新历,因这时大部份的国家都采用新历,有 10 天被去除,所以该月份的月历有些不同。在此之前为西洋旧历。

匡兜?

-m : 以星期一为每周的第一天方式显示。
-j : 以凯撒历显示,即以一月一日起的天数显示。
-y : 显示今年年历。

范例:

cal : 显示本月的月历。

[root@mylinux /root]# date
Tue Aug 15 08:00:18 CST 2000
[root@mylinux /root]# cal
August 2000
Su Mo Tu We Th Fr Sa
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31

[root@mylinux /root]#

cal 2001 : 显示公元 2001 年年历。

[root@mylinux /root]# cal 2001
2001

January February March
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 3 4 5 6 1 2 3 1 2 3
7 8 9 10 11 12 13 4 5 6 7 8 9 10 4 5 6 7 8 9 10
14 15 16 17 18 19 20 11 12 13 14 15 16 17 11 12 13 14 15 16 17
21 22 23 24 25 26 27 18 19 20 21 22 23 24 18 19 20 21 22 23 24
28 29 30 31 25 26 27 28 25 26 27 28 29 30 31

April May June
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 3 4 5 6 7 1 2 3 4 5 1 2
8 9 10 11 12 13 14 6 7 8 9 10 11 12 3 4 5 6 7 8 9
15 16 17 18 19 20 21 13 14 15 16 17 18 19 10 11 12 13 14 15 16
22 23 24 25 26 27 28 20 21 22 23 24 25 26 17 18 19 20 21 22 23
29 30 27 28 29 30 31 24 25 26 27 28 29 30

July August September
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 3 4 5 6 7 1 2 3 4 1
8 9 10 11 12 13 14 5 6 7 8 9 10 11 2 3 4 5 6 7 8
15 16 17 18 19 20 21 12 13 14 15 16 17 18 9 10 11 12 13 14 15
22 23 24 25 26 27 28 19 20 21 22 23 24 25 16 17 18 19 20 21 22
29 30 31 26 27 28 29 30 31 23 24 25 26 27 28 29
30
October November December
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 3 4 5 6 1 2 3 1
7 8 9 10 11 12 13 4 5 6 7 8 9 10 2 3 4 5 6 7 8
14 15 16 17 18 19 20 11 12 13 14 15 16 17 9 10 11 12 13 14 15
21 22 23 24 25 26 27 18 19 20 21 22 23 24 16 17 18 19 20 21 22
28 29 30 31 25 26 27 28 29 30 23 24 25 26 27 28 29
30 31

[root@mylinux /root]#

cal 5 2001 : 显示公元 2001 年 5 月月历。

[root@mylinux /root]# cal 5 2001
May 2001
Su Mo Tu We Th Fr Sa
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31

[root@mylinux /root]#

cal -m : 以星期一为每周的第一天方式,显示本月的月历。

[root@mylinux /root]# cal -m
August 2000
Mo Tu We Th Fr Sa Su
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31

[root@mylinux /root]#

cal -jy : 以一月一日起的天数显示今年的年历。

[root@mylinux /root]# cal -jy
2000

January February
Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat
1 32 33 34 35 36
2 3 4 5 6 7 8 37 38 39 40 41 42 43
9 10 11 12 13 14 15 44 45 46 47 48 49 50
16 17 18 19 20 21 22 51 52 53 54 55 56 57
23 24 25 26 27 28 29 58 59 60
30 31
March April
Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat
61 62 63 64 92
65 66 67 68 69 70 71 93 94 95 96 97 98 99
72 73 74 75 76 77 78 100 101 102 103 104 105 106
79 80 81 82 83 84 85 107 108 109 110 111 112 113
86 87 88 89 90 91 114 115 116 117 118 119 120
121
May June
Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat
122 123 124 125 126 127 153 154 155
128 129 130 131 132 133 134 156 157 158 159 160 161 162
135 136 137 138 139 140 141 163 164 165 166 167 168 169
142 143 144 145 146 147 148 170 171 172 173 174 175 176
149 150 151 152 177 178 179 180 181 182

July August
Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat
183 214 215 216 217 218
184 185 186 187 188 189 190 219 220 221 222 223 224 225
191 192 193 194 195 196 197 226 227 228 229 230 231 232
198 199 200 201 202 203 204 233 234 235 236 237 238 239
205 206 207 208 209 210 211 240 241 242 243 244
212 213
September October
Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat
245 246 275 276 277 278 279 280 281
247 248 249 250 251 252 253 282 283 284 285 286 287 288
254 255 256 257 258 259 260 289 290 291 292 293 294 295
261 262 263 264 265 266 267 296 297 298 299 300 301 302
268 269 270 271 272 273 274 303 304 305

November December
Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat
306 307 308 309 336 337
310 311 312 313 314 315 316 338 339 340 341 342 343 344
317 318 319 320 321 322 323 345 346 347 348 349 350 351
324 325 326 327 328 329 330 352 353 354 355 356 357 358
331 332 333 334 335 359 360 361 362 363 364 365
366

[root@mylinux /root]#

名称 : crontab
使用权限 : 所有使用者

使用方式 :

crontab [ -u user ] filecrontab [ -u user ] { -l | -r | -e }
说明 :
crontab 是用来让使用者在固定时间或固定间隔执行程式之用,换句话说,也就是类似使用者的时程表。-u user 是指设定指定 user 的时程表,这个前提是你必须要有其权限(比如说是 root)才能够指定他人的时程表。如果不使用 -u user 的话,就是表示设定自己的时程表。

餐数 :

-e : 执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比如说 setenv VISUAL joe)
-r : 删除目前的时程表
-l : 列出目前的时程表

时程表的格式如下 :
f1 f2 f3 f4 f5 program

其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执行的程式。
当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程式,其余类推
当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其余类推
当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,其余类推
当 f1 为 a, b, c,... 时表示第 a, b, c,... 分钟要执行,f2 为 a, b, c,... 时表示第 a, b, c...个小时要执行,其余类推

使用者也可以将所有的设定先存放在档案 file 中,用 crontab file 的方式来设定时程表。
例子 :

每月每天每小时的第 0 分钟执行一次 /bin/ls :
0 7 * * * /bin/ls

在 12 月内, 每天的早上 6 点到 12 点中,每隔 20 分钟执行一次 /usr/bin/backup :
0 6-12/3 * 12 * /usr/bin/backup

周一到周五每天下午 5:00 寄一封信给 alex@domain.name :
0 17 * * 1-5 mail -s \"hi\" alex@domain.name < /tmp/maildata

每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分....执行 echo \"haha\"
20 0-23/2 * * * echo \"haha\"

注意 :

当程式在你所指定的时间执行后,系统会寄一封信给你,显示该程式执行的内容,若是你不希望收到这样的信,请在每一行空一格之后加上 > /dev/null 2>&1 即可。

名称 : date
使用权限 : 所有使用者

使用方式 :

date [-u] [-d datestr] [-s datestr] [--utc] [--universal] [--date=datestr] [--set=datestr] [--help] [--version] [+FORMAT] [MMDDhhmm[[CC]YY][.ss]]

说明 :

date 可以用来显示或设定系统的日期与时间,在显示方面,使用者可以设定欲显示的格式,格式设定为一个加号后接数个标记,其中可用的标记列表如下 :

时间方面 :

% : 印出 %
%n : 下一行
%t : 跳格
%H : 小时(00..23)
%I : 小时(01..12)
%k : 小时(0..23)
%l : 小时(1..12)
%M : 分钟(00..59)
%p : 显示本地 AM 或 PM
%r : 直接显示时间 (12 小时制,格式为 hh:mm:ss [AP]M)
%s : 从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止的秒数
%S : 秒(00..61)
%T : 直接显示时间 (24 小时制)
%X : 相当于 %H:%M:%S
%Z : 显示时区

日期方面 :
%a : 星期几 (Sun..Sat)
%A : 星期几 (Sunday..Saturday)
%b : 月份 (Jan..Dec)
%B : 月份 (January..December)
%c : 直接显示日期与时间
%d : 日 (01..31)
%D : 直接显示日期 (mm/dd/yy)
%h : 同 %b
%j : 一年中的第几天 (001..366)
%m : 月份 (01..12)
%U : 一年中的第几周 (00..53) (以 Sunday 为一周的第一天的情形)
%w : 一周中的第几天 (0..6)
%W : 一年中的第几周 (00..53) (以 Monday 为一周的第一天的情形)
%x : 直接显示日期 (mm/dd/yy)
%y : 年份的最后两位数字 (00.99)
%Y : 完整年份 (0000..9999)

若是不以加号作为开头,则表示要设定时间,而时间格式为 MMDDhhmm[[CC]YY][.ss],其中 MM 为月份,DD 为日,hh 为小时,mm 为分钟,CC 为年份前两位数字,YY 为年份后两位数字,ss 为秒数
把计 :

-d datestr : 显示 datestr 中所设定的时间 (非系统时间)
--help : 显示辅助讯息
-s datestr : 将系统时间设为 datestr 中所设定的时间
-u : 显示目前的格林威治时间
--version : 显示版本编号

例子 :
显示时间后跳行,再显示目前日期 :
date +%T%n%D

显示月份与日数 :
date +%B %d

显示日期与设定时间(12:34:56) :
date --date 12:34:56

注意 :

当你不希望出现无意义的 0 时(比如说 1999/03/07),则可以在标记中插入 - 符号,比如说 date +%-H:%-M:%-S 会把时分秒中无意义的 0 给去掉,像是原本的 08:09:04 会变为 8:9:4。另外,只有取得权限者(比如说 root)才能设定系统时间。

当你以 root 身分更改了系统时间之后,请记得以 clock -w 来将系统时间写入 CMOS 中,这样下次重新开机时系统时间才会持续抱持最新的正确值。


名称 : sleep
使用权限 : 所有使用者

使用方式 : sleep [--help] [--version] number[smhd]

说明 : sleep 可以用来将目前动作延迟一段时间

参数说明 :

--help : 显示辅助讯息
--version : 显示版本编号
number : 时间长度,后面可接 s、m、h 或 d
其中 s 为秒,m 为 分钟,h 为小时,d 为日数

例子 :
显示目前时间后延迟 1 分钟,之后再次显示时间 :
date;sleep 1m;date

名称: time
使用权限: 所有使用者

使用方式: time [options] COMMAND [arguments]

说明: time 指令的用途,在于量测特定指令执行时所需消耗的时间及系统资源等资讯。例如 CPU 时间、记忆体、输入输出等等。需要特别注意的是,部分资讯在 Linux 上显示不出来。这是因为在 Linux 上部分资源的分配函式与 time 指令所预设的方式并不相同,以致于 time 指令无法取得这些资料。

把计?

-o or --output=FILE
设定结果输出档。这个选项会将 time 的输出写入 所指定的档案中。如果档案已经存在,系统将覆写其内容。
-a or --append
配合 -o 使用,会将结果写到档案的末端,而不会覆盖掉原来的内容。
-f FORMAT or --format=FORMAT
以 FORMAT 字串设定显示方式。当这个选项没有被设定的时候,会用系统预设的格式。不过你可以用环境变数 time 来设定这个格式,如此一来就不必每次登入系统都要设定一次。
一般设定上,你可以用
\\t
表示跳栏,或者是用
\\n
表示换行。每一项资料要用 % 做为前导。如果要在字串中使用百分比符号,就用 。(学过 C 语言的**概会觉得很熟悉)
time 指令可以显示的资源有四大项,分别是:

Time resources
Memory resources
IO resources
Command info

详细的内容如下:

Time Resources
E 执行指令所花费的时间,格式是:[hour]:minute:second。请注意这个数字并不代表实际的 CPU 时间。
e 执行指令所花费的时间,单位是秒。请注意这个数字并不代表实际的 CPU 时间。
S 指令执行时在核心模式(kernel mode)所花费的时间,单位是秒。
U 指令执行时在使用者模式(user mode)所花费的时间,单位是秒。
P 执行指令时 CPU 的占用比例。其实这个数字就是核心模式加上使用者模式的 CPU 时间除以总时间。

Memory Resources
M 执行时所占用的实体记忆体的最大值。单位是 KB
t 执行时所占用的实体记忆体的平均值,单位是 KB
K 执行程序所占用的记忆体总量(stack+data+text)的平均大小,单位是 KB
D 执行程序的自有资料区(unshared data area)的平均大小,单位是 KB
p 执行程序的自有堆叠(unshared stack)的平均大小,单位是 KB
X 执行程序间共享内容(shared text)的平均值,单位是 KB
Z 系统记忆体页的大小,单位是 byte。对同一个系统来说这是个常数

IO Resources
F 此程序的主要记忆体页错误发生次数。所谓的主要记忆体页错误是指某一记忆体页已经置换到置换档(swap file)中,而且已经分配给其他程序。此时该页的内容必须从置换档里再读出来。
R 此程序的次要记忆体页错误发生次数。所谓的次要记忆体页错误是指某一记忆体页虽然已经置换到置换档中,但尚未分配给其他程序。此时该页的内容并未被破坏,不必从置换档里读出来
W 此程序被交换到置换档的次数
c 此程序被强迫中断(像是分配到的 CPU 时间耗尽)的次数
w 此程序自愿中断(像是在等待某一个 I/O 执行完毕,像是磁碟读取等等)的次数
I 此程序所输入的档案数
O 此程序所输出的档案数
r 此程序所收到的 Socket Message
s 此程序所送出的 Socket Message
k 此程序所收到的信号 ( Signal )数量

Command Info
C 执行时的参数以及指令名称
x 指令的结束代码 ( Exit Status )


-p or --portability
这个选项会自动把显示格式设定成为:
real %e
user %U
sys %S
这么做的目的是为了与 POSIX 规格相容。
-v or --verbose
这个选项会把所有程式中用到的资源通通列出来,不但如一般英文语句,还有说明。对不想花时间去熟习格式设定或是刚刚开始接触这个指令的人相当有用。

范例:
利用下面的指令
time -v ps -aux

我们可以获得执行 ps -aux 的结果和所花费的系统资源。如下面所列的资料:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.4 1096 472 ? S Apr19 0:04 init
root 2 0.0 0.0 0 0 ? SW Apr19 0:00 [kflushd]
root 3 0.0 0.0 0 0 ? SW Apr19 0:00 [kpiod]
......
root 24269 0.0 1.0 2692 996 pts/3 R 12:16 0:00 ps -aux

Command being timed: \"ps -aux\"
User time (seconds): 0.05
System time (seconds): 0.06
Percent of CPU this job got: 68%
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.16
Average shared text size (kbytes): 0
Average unshared data size (kbytes): 0
Average stack size (kbytes): 0
Average total size (kbytes): 0
Maximum resident set size (kbytes): 0
Average resident set size (kbytes): 0
Major (requiring I/O) page faults: 238
Minor (reclaiming a frame) page faults: 46
Voluntary context switches: 0
Involuntary context switches: 0
Swaps: 0
File system inputs: 0
File system outputs: 0
Socket messages sent: 0
Socket messages received: 0
Signals delivered: 0
Page size (bytes): 4096
Exit status: 0

名称: uptime
使用权限: 所有使用者
使用方式: uptime [-V]
说明: uptime 提供使用者下面的资讯,不需其他参数:

现在的时间
系统开机运转到现在经过的时间
连线的使用者数量
最近一分钟,五分钟和十五分钟的系统负载
参数: -V 显示版本资讯。
范例: uptime
其结果为:
10:41am up 5 days, 10 min, 1 users, load average: 0.00, 0.00, 1.99

名称:chfn

使用权限:所有使用者

用法:shell>> chfn

说明:提供使用者更改个人资讯,用于 finger and mail username

范例:

shell>> chfn
Changing finger information for user
Password: [del]
Name[]:Johnney Huang ### 提供 finger 时的资料
Office[]:NCCU
Office Phone[]: [del]
Home Phone[]: [del]

名称:chsh

使用权限:所有使用者

用法:shell>> chsh

说明:更改使用者 shell 设定

范例:

shell>> chsh
Changing fihanging shell for user1
Password: [del]
New shell [/bin/tcsh]: ### [是目前使用的 shell]
[del]

shell>> chsh -l ### 展示 /etc/shells 档案内容
/bin/bash
/bin/sh
/bin/ash
/bin/bsh
/bin/tcsh
/bin/csh

” finger [返回]
名称: finger
使用权限: 所有使用者

使用方式: finger [options] user[@address]

说明:finger 可以让使用者查询一些其他使用者的资料。会列出来的资料有:

Login Name
User Name
Home directory
Shell
Login status
mail status
.plan
.project
.forward

其中 .plan ,.project 和 .forward 就是使用者在他的 Home Directory 里的 .plan , .project 和 .forward 等档案里的资料。如果没有就没有。finger 指令并不限定于在同一伺服器上查询,也可以寻找某一个远端伺服器上的使用者。只要给一个像是 E-mail address 一般的地址即可。
把计?

-l
多行显示。

-s
单行显示。这个选项只显示登入名称,真实姓名,终端机名称,闲置时间,登入时间,办公室号码及电话号码。如果所查询的使用者是远端伺服器的使用者,这个选项无效。

范例:下列指令可以查询本机管理员的资料:
finger root

其结果如下:
Login: root Name: root
Directory: /root Shell: /bin/bash
Never logged in.
No mail.
No Plan.

名称:last

使用权限:所有使用者

使用方式:shell>> last [options]

说明:显示系统开机以来获是从每月初登入者的讯息

把计?

-R 省略 hostname 的栏位
-num 展示前 num 个
username 展示 username 的登入讯息
tty **登入讯息包含终端机代号

范例:

shell>> last -R -2
johnney pts/1 Mon Aug 14 20:42 still logged in
johnney pts/0 Mon Aug 14 19:59 still logged in

wtmp begins Tue Aug 1 09:01:10 2000 ### /var/log/wtmp


shell>> last -2 minery
minery pts/0 140.119.217.115 Mon Aug 14 18:37 - 18:40 (00:03)
minery pts/0 140.119.217.115 Mon Aug 14 17:22 - 17:24 (00:02)

wtmp begins Tue Aug 1 09:01:10 2000

名称:login

这个命令都不会就不要干算了!呵呵我也不在这里多费笔墨耽误大家美好青春了happy.gif

名称:passwd

使用权限:所有使用者

使用方式:passwd [-k] [-l] [-u [-f]] [-d] [-S] [username]

说明:用来更改使用者的密码

参数:
-k

-l

-u

-f

-d 关闭使用者的密码认证功能, 使用者在登入时将可以不用输入密码, 只有具备 root 权限的使用者方可使用.

-S 显示指定使用者的密码认证种类, 只有具备 root 权限的使用者方可使用.

[username] 指定帐号名称.

名称 : who
使用权线 : 所有使用者都可使用

使用方式 : who - [husfV] [user]

说明 : 显示系统中有那些使用者正在上面,显示的资料包含了使用者 ID,使用的终端机,从那边连上来的,上线时间,呆滞时间,CPU 使用量,动作等等。

把计 :

-h : 不要显示标题列
-u : 不要显示使用者的动作/工作
-s : 使用简短的格式来显示
-f : 不要显示使用者的上线位置
-V : 显示程式版本
名称:/etc/aliases
使用权限:系统管理者
使用方式: 请用 newaliases 更新资料库
说明:
sendmail 会使用一个在 /etc/aliases 中的档案做使用者名称转换的动作。当 sendmail 收到一个要送给 ** 的信时,它会依据 aliases档的内容送给另一个使用者。这个功能可以创造一个只有在信件系统内才有效的使用者。例如 mailing list 就会用到这个功能,在 mailinglist 中,我们可能会创造一个叫 redlinux@link.ece.uci.edu 的 mailinglist,但实际上并没有一个叫 redlinux 的使用者。实际 aliases 档的内容是将送给这个使用者的信都收给 mailing list 处理程式负责分送的工作。

/etc/aliases 是一个文字模式的档案,sendmail 需要一个二进位格式的 /etc/aliases.db。newaliases 的功能传是将 /etc/aliases 转换成一个 sendmail 所能了解的资料库。范例:
# newaliases

下面命令会做相同的事,
# sendmail -bi

相关命令:
mail, mailq, newaliases, sendmail

” mail [返回]
名称:mail

使用权限:所有使用者

使用方式:mail [-iInv] [-s subject] [-c cc-addr] [-b bcc-addr] user1 [user 2 ...]

说明:
mail 不仅只是一个指令, mail 还是一个电子邮件程式,不过利用 mail 来读信的人应该很少吧!对于系统管理者来说 mail 就很有用,因为管理者可以用 mail 写成 script ,定期寄一些备忘录提醒系统的使用者。

参数:
i 忽略 tty 的中断讯号。 (interrupt)
I 强迫设成互动模式。 (Interactive)
v 列印出讯息,例如送信的地点、状态等等。 (verbose)
n 不读入 mail.rc 设定档。
s 邮件标题。
c cc 邮件地址。
b bcc 邮件地址。

范例:

将信件送给一个或以上的电子邮件地址,由于没有加入其他的选项,使用者必须输入标题与信件的内容等。而 user2 没有主机位置,就会送给邮件伺服器的 user2 使用者。

mail user1@email.address
mail user1@email.address user2

将 mail.txt 的内容寄给 user2 同时 cc 给 user1 。如果将这一行指令设成 cronjob 就可以定时将备忘录寄给系统使用者。

mail -s 标题 -c user1 user2 < mail.txt

指令:mesg
使用权限 : 所有使用者

使用方式 : mesg [y|n]

说明 : 决定是否允许其他人传讯息到自己的终端机介面

把计 ?

y : 允许讯息传到终端机介面上。
n : 不允许讯息传到终端机介面上 。
如果没有设定,则讯息传递与否则由终端机界面目前状态而定。

例子 :
改变目前讯息设定,改成不允许讯息传到终端机介面上 :
mesg n

与 mesg 相关的指令有: talk,write,wall。

名称:/etc/aliases
使用权限:系统管理者
使用方式: newaliases
说明:
sendmail 会使用一个在 /etc/aliases 中的档案做使用者名称转换的动作。当 sendmail 收到一个要送给 ** 的信时,它会依据 aliases档的内容送给另一个使用者。这个功能可以创造一个只有在信件系统内才有效的使用者。例如 mailing list 就会用到这个功能,在 mailinglist 中,我们可能会创造一个叫 redlinux@link.ece.uci.edu 的 mailinglist,但实际上并没有一个叫 redlinux 的使用者。实际 aliases 档的内容是将送给这个使用者的信都收给 mailing list 处理程式负责分送的工作。

/etc/aliases 是一个文字模式的档案,sendmail 需要一个二进位格式的 /etc/aliases.db。newaliases 的功能传是将 /etc/aliases 转换成一个 sendmail 所能了解的资料库。

参数:没有任何参数。 范例:
# newaliases

下面命令会做相同的事,
# sendmail -bi

相关命令:
mail, mailq, newaliases, sendmail

名称 : talk
使用权限 : 所有使用者

使用方式 :

talk person [ttyname]
说明 : 与其他使用者对谈

把计 :

person : 预备对谈的使用者帐号,如果该使用者在其他机器上,则可输入 person@machine.name
ttyname : 如果使用者同时有两个以上的 tty 连线,可以自行选择合适的 tty 传讯息

例子.1 :

与现在机器上的使用者Rollaend对谈,此时 Rollaend 只有一个连线 :
talk Rollaend

接下来就是等Rollaend回应,若Rollaend接受,则Rollaend输入 `talk jzlee`即可开始对谈,结束请按 ctrl+c

例子.2 :与linuxfab.cx上的使用者Rollaend对谈,使用pts/2来对谈 :
talk Rollaend@linuxfab.cx pts/2

接下来就是等Rollaend回应,若Rollaend接受,则Rollaend输入 `talk jzlee@jzlee.home`即可开始对谈,结束请按 ctrl+c

注意 : 若萤幕的字会出现不正常的字元,试着按 ctrl+l 更新萤幕画面。


名称 : wall
使用权限 : 所有使用者

使用方式 :
wall [ message ]
使用说明:
wall 会将讯息传给每一个 mesg 设定为 yes 的上线使用者。当使用终端机介面做为标准传入时, 讯息结束时需加上 EOF (通常用 Ctrl+D)?

例子 :

传讯息\"hi\" 给每一个使用者 :
wall hi

名称 : write
使用权限 : 所有使用者

使用方式 :

write user [ttyname]
说明 : 传讯息给其他使用者

把计 :

user : 预备传讯息的使用者帐号
ttyname : 如果使用者同时有两个以上的 tty 连线,可以自行选择合适的 tty 传讯息

例子.1 :

传讯息给 Rollaend,此时 Rollaend 只有一个连线 :
write Rollaend

接下来就是将讯息打上去,结束请按 ctrl+c

例子.2 :传讯息给 Rollaend,Rollaend 的连线有 pts/2,pts/3 :
write Rollaend pts/2


接下来就是将讯息打上去,结束请按 ctrl+c

注意 : 若对方设定 mesg n,则此时讯席将无法传给对方

名称:kill
使用权限:所有使用者

使用方式:

kill [ -s signal | -p ] [ -a ] pid ...
kill -l [ signal ]
说明:kill 送出一个特定的信号 (signal) 给行程 id 为 pid 的行程根据该信号而做特定的动作, 若没有指定, 预设是送出终止 (TERM) 的信号
把计?

-s (signal) : 其中可用的讯号有 HUP (1), KILL (9), TERM (15), 分别代表着重跑, 砍掉, 结束; 详细的信号可以用 kill -l
-p : 印出 pid , 并不送出信号
-l (signal) : 列出所有可用的信号名称
范例:

将 pid 为 323 的行程砍掉 (kill) :
kill -9 323

将 pid 为 456 的行程重跑 (restart) :
kill -HUP 456


名称:nice
使用权限:所有使用者

使用方式:nice [-n adjustment] [-adjustment] [--adjustment=adjustment] [--help] [--version] [command [arg...]]

说明:以更改过的优先序来执行程式, 如果未指定程式, 则会印出目前的排程优先序, 内定的 adjustment 为 10, 范围为 -20 (最高优先序) 到 19 (最低优先序)


把计?

-n adjustment, -adjustment, --adjustment=adjustment 皆为将该原有优先序的增加 adjustment
--help 显示求助讯息
--version 显示版本资讯
范例:
将 ls 的优先序加 1 并执行 :
nice -n 1 ls

将 ls 的优先序加 10 并执行 :
nice ls将 ls 的优先序加 10 并执行

注意 : 优先序 (priority) 为作业系统用来决定 CPU 分配的参数,Linux 使用『回合制(round-robin)』的演算法来做 CPU 排程,优先序越高,所可能获得的 CPU时间就越多。

名称:ps
使用权限:所有使用者
使用方式:ps [options] [--help]
说明:显示瞬间行程 (process) 的动态
参数:
ps 的参数非常多, 在此仅列出几个常用的参数并大略介绍含义
-A 列出所有的行程
-w 显示加宽可以显示较多的资讯
-au 显示较详细的资讯
-aux 显示所有包含其他使用者的行程

au(x) 输出格式 :

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
USER: 行程拥有者
PID: pid
%CPU: 占用的 CPU 使用率
%MEM: 占用的记忆体使用率
VSZ: 占用的虚拟记忆体大小
RSS: 占用的记忆体大小
TTY: 终端的次要装置号码 (minor device number of tty)
STAT: 该行程的状态:
D: 不可中断的静止 (通悸□□缜b进行 I/O 动作)
R: 正在执行中
S: 静止状态
T: 暂停执行
Z: 不存在但暂时无法消除
W: 没有足够的记忆体分页可分配
<: 高优先序的行程
N: 低优先序的行程
L: 有记忆体分页分配并锁在记忆体内 (即时系统或捱A I/O)
START: 行程开始时间
TIME: 执行的时间
COMMAND:所执行的指令

范例:

ps
PID TTY TIME CMD
2791 ttyp0 00:00:00 tcsh
3092 ttyp0 00:00:00 ps
% ps -A
PID TTY TIME CMD
1 ? 00:00:03 init
2 ? 00:00:00 kflushd
3 ? 00:00:00 kpiod
4 ? 00:00:00 kswapd
5 ? 00:00:00 mdrecoveryd
.......
% ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.7 1096 472 ? S Sep10 0:03 init [3]
root 2 0.0 0.0 0 0 ? SW Sep10 0:00 [kflushd]
root 3 0.0 0.0 0 0 ? SW Sep10 0:00 [kpiod]
root 4 0.0 0.0 0 0 ? SW Sep10 0:00 [kswapd]

名称:pstree
使用权限:所有使用者
使用方式:
pstree [-a] [-c] [-h|-Hpid] [-l] [-n] [-p] [-u] [-G|-U] [pid|user]
pstree -V
说明:将所有行程以树状图显示, 树状图将会以 pid (如果有指定) 或是以 init 这个基本行程为根 (root) ,如果有指定使用者 id , 则树状图会只显示该使用者所拥有的行程
参数:
-a 显示该行程的完整指令及参数, 如果是被记忆体置换出去的行程则会加上括号
-c 如果有重覆的行程名, 则分开列出 (预设值是会在前面加上 *
范例:

pstree

init-+-amd
|-apmd
|-atd
|-httpd---10*[httpd]
%pstree -p
init(1)-+-amd(447)
|-apmd(105)
|-atd(339)
%pstree -c
init-+-amd
|-apmd
|-atd
|-httpd-+-httpd
| |-httpd
| |-httpd
| |-httpd
....

名称:renice
使用权限:所有使用者

使用方式:renice priority [[-p] pid ...] [[-g] pgrp ...] [[-u] user ...]

说明:重?付ㄒ桓龌蚨喔鲂谐?Process)的优先序(一个或多个将根据所下的参数而定)

把计?

-p pid 重?付ㄐ谐痰?id 为 pid 的行程的优先序
-g pgrp 重?付ㄐ谐倘鹤?process group)的 id 为 pgrp 的行程 (一个或多个) 的优先序
-u user 重?付ㄐ谐逃涤姓呶?user 的行程的优先序
范例:
将行程 id 为 987 及 32 的行程与行程拥有者为 daemon 及 root 的优先序号码加 1 :
renice +1 987 -u daemon root -p 32

注意 : 每一个行程(Process)都有一个唯一的 (unique) id?

名称:top
使用权限:所有使用者

使用方式:top [-] [d delay] [q] [c] [S] [s] [n]

说明:即时显示 process 的动态

把计?

d : 改变显示的更新速度,或是在交谈式指令列( interactive command)按 s
q : 没有任何延迟的显示速度,如果使用者是有 superuser 的权限,则 top 将会以最高的优先序执行
c : 切换显示模式,共有两种模式,一是只显示执行档的名称,另一种是显示完整的路径与名称S : 累积模式,会将己完成或消失的子行程 ( dead child process ) 的 CPU time 累积起来
s : 安全模式,将交谈式指令取消, 避免潜在的危机
i : 不显示任何闲置 (idle) 或无用 (zombie) 的行程
n : 更新的次数,完成后将会退出 top
b : 批次档模式,搭配 \"n\" 参数一起使用,可以用来将 top 的结果输出到档案内

范例:
显示更新十次后退出 ;
top -n 10

使用者将不能利用交谈式指令来对行程下命令 :
top -s

将更新显示二次的结果输入到名称为 top.log 的档案里 :
top -n 2 -b < top.log

名称:skill

使用权限:所有使用者

使用方式: skill [signal to send] [options] 选择程序的规则

说明:

送个讯号给正在执行的程序,预设的讯息为 TERM (中断) , 铣J褂玫难断⑽?HUP , INT , KILL , STOP , CONT ,和 0

讯息有三种写法:分别为 -9 , -SIGKILL , -KILL , 可以使用 -l 或 -L 已列出可使用的讯息。

一般参数:

-f 快速模式/尚未完成

-i 互动模式/ 每个动作将要被确认

-v 详细输出/ 列出所选择程序的资讯

-w 智能警告讯息/ 尚未完成

-n 没有动作/ 显示程序代号

参数:选择程序的规则可以是, 终端机代号,使用者名称,程序代号,命令名称。

-t 终端机代号 ( tty 或 pty )

-u 使用者名称

-p 程序代号 ( pid )

-c 命令名称 可使用的讯号:

以下列出已知的讯号名称,讯号代号,功能。

名称 (代号) 功能/ 描述

ALRM 14 离开

HUP 1 离开

INT 2 离开

KILL 9 离开/ 强迫关闭

PIPE 13 离开

POLL 离开

PROF 离开

TERM 15 离开

USR1 离开

USR2 离开

VTALRM 离开

STKFLT 离开/ 只适用于i386, m68k, arm 和 ppc 硬体

UNUSED 离开/ 只适用于i386, m68k, arm 和 ppc 硬体

TSTP 停止 /产生与内容相关的行为

TTIN 停止 /产生与内容相关的行为

TTOU 停止 /产生与内容相关的行为

STOP 停止 /强迫关闭

CONT 从新启动 /如果在停止状态则从新启动,否则忽略

PWR 忽略 /在某些系统中会离开

WINCH 忽略

CHLD 忽略

ABRT 6 核心

FPE 8 核心

ILL 4 核心

QUIT 3 核心

SEGV 11 核心

TRAP 5 核心

SYS 核心 /或许尚未实作

EMT 核心 /或许尚未实作

BUS 核心 /核心失败

XCPU 核心 /核心失败

XFSZ 核心 /核心失败

范例:

停止所有在 PTY 装置上的程序
skill -KILL -v pts/*

停止三个使用者 user1 , user2 , user3
skill -STOP user1 user2 user3

其他相关的命令: kill

名称:expr

使用权限:所有使用者
### 字串长度

shell>> expr length \"this is a test\"
14

### 数字商数

shell>> expr 14 % 9
5

### 从位置处抓取字串

shell>> expr substr \"this is a test\" 3 5
is is

### 数字串 only the first character

shell>> expr index \"testforthegame\" e
2

### 字串真实重现

shell>> expr quote thisisatestformela
thisisatestformela

名称: tr

### 1.比方说要把目录下所有的大写档名换为小写档名?

似乎有很多方式,\"tr\"是其中一种:

#!/bin/sh

dir=\"/tmp/testdir\";
files=`find $dir -type f`;
for i in $files
do
dir_name=`dirname $i`;
ori_filename=`basename $i`
new_filename=`echo $ori_filename | tr [:upper:] [:lower:]` > /dev/null;
#echo $new_filename;
mv $dir_name/$ori_filename $dir_name/$new_filename
done

### 2.自己试验中...lowercase to uppercase

tr abcdef...[del] ABCDE...[del]
tr a-z A-Z
tr [:lower:] [:upper:]

shell>> echo \"this is a test\" | tr a-z A-Z > www
shell>> cat www
THIS IS A TEST

### 3.去掉不想要的字串

shell>> tr -d this ### 去掉有关 t.e.s.t
this

man
man
test
e

### 4.取代字串

shell>> tr -s \"this\" \"TEST\"
this
TEST
th
TE

指令:clear
用途:清除萤幕用。

使用方法:在 console 上输入 clear。

名称: reset, tset
使用方法: tset [-IQqrs] [-] [-e ch] [-i ch] [-k ch] [-m mapping] [terminal]

使用说明:

reset 其实和 tset 是一同个命令,它的用途是设定终端机的状态。一般而言,这个命令会自动的从环境变数、命令列或是其它的组态档决定目前终端机的型态。如果指定型态是 ? 的话,这个程式会要求使用者输入终端机的型别。

由于这个程式会将终端机设回原始的状态,除了在 login 时使用外,当系统终端机因为程式不正常执行而进入一些奇怪的状态时,你也可以用它来重设终端机o 例如不小心把二进位档用 cat 指令进到终端机,常会有终端机不再回应键盘输入,或是回应一些奇怪字元的问题。此时就可以用 reset 将终端机回复至原始状态。选项说明:

-p
将终端机类别显示在萤幕上,但不做设定的动作。这个命令可以用来取得目前终端机的类别。
-e ch
将 erase 字元设成 ch
-i ch
将中断字元设成 ch
-k ch
将删除一行的字元设成 ch
-I
不要做设定的动作,如果没有使用选项 -Q 的话,erase、中断及删除字元的目前值依然会送到萤幕上。
-Q
不要显示 erase、中断及删除字元的值到萤幕上。
-r
将终端机类别印在萤幕上。
-s
将设定 TERM 用的命令用字串的型式送到终端机中,通常在 .login 或 .profile 中用
范例:
让使用者输入一个终端机型别并将终端机设到该型别的预设状态。
# reset ?

将 erase 字元设定 control-h
# reset -e ^B

将设定用的字串显示在萤幕上
# reset -s
Erase is control-B (^cool.gif.
Kill is control-U (^U).
Interrupt is control-C (^C).
TERM=xterm;

名称:compress

使用权限:所有使用者

使用方式:compress [-dfvcV] [-b maxbits] [file ...]

说明:
compress 是一个相当古老的 unix 档案压缩指令,压缩后的档案会加上一个 .Z 延伸档名以区别未压缩的档案,压缩后的档案可以以 uncompress 解压。若要将数个档案压成一个压缩档,必须先将档案 tar 起来再压缩。由于 gzip 可以产生更理想的压缩比例,一般人多已改用 gzip 为档案压缩工具。

参数:
c 输出结果至标准输出设备(一般指荧幕)
f 强迫写入档案,若目的档已经存在,则会被覆盖 (force)
v 将程式执行的讯息印在荧幕上 (verbose)
b 设定共同字串数的上限,以位元计算,可以设定的值为 9 至 16 bits 。由于值越大,能使用的共同字串就 越多,压缩比例就越大,所以一般使用预设值 16 bits (bits)
d 将压缩档解压缩
V 列出版本讯息

范例:

将 source.dat 压缩成 source.dat.Z ,若 source.dat.Z 已经存在,内容则会被压缩档覆盖。

compress -f source.dat

将 source.dat 压缩成 source.dat.Z ,并列印出压缩比例。
-v 与 -f 可以一起使用

compress -vf source.dat

将压缩后的资料输出后再导入 target.dat.Z 可以改变压缩档名。

compress -c source.dat > target.dat.Z

-b 的值越大,压缩比例就越大,范围是 9-16 ,预设值是 16 。

compress -b 12 source.dat

将 source.dat.Z 解压成 source.dat ,若档案已经存在,使用者按 y 以确定覆盖档案,若使用 -df 程式则会自动覆盖档案。由于系统会自动加入 .Z 为延伸档名,所以 source.dat 会自动当作 source.dat.Z 处理。

compress -d source.dat
compress -d source.dat.Z

名称: lpd

使用权限: 所有使用者

使用方式:lpd [-l] [#port]
lpd 是一个常驻的印表机管理程式,它会根据 /etc/printcap 的内容来管理本地或远端的印表机。/etc/printcap 中定义的每一个印表机必须在 /var/lpd 中有一个相对应的目录,目录中以 cf 开头的档案表示一个等待送到适当装置的印表工作。这个档案通常是由 lpr 所产生。

lpr 和 lpd 组成了一个可以离线工作的系统,当你使用 lpr 时,印表机不需要能立即可用,甚至不用存在。lpd 会自动监视印表机的状况,当印表机上线后,便立即将档案送交处理。这个得所有的应用程式不必等待印表机完成前一工作。

参数:


-l: 将一些除错讯息显示在标准输出上。
#port: 一般而言,lpd 会使用 getservbyname 取得适当的 TCP/IP port,你可以使用这个参数强迫 lpd 使用指定的 port。

范例:
这个程式通常是由 /etc/rc.d 中的程式在系统启始阶段执行。

名称 lpq
-- 显示列表机贮列中未完成的工作 用法

lpq [l] [P] [user]

说明
lpq 会显示由 lpd 所管理的列表机贮列中未完成的项目。

范例
范例 1. 显示所有在 lp 列表机贮列中的工作

# lpq -PlpRank Owner Job Files Total Size1st root 238 (standard input) 1428646 bytes

相关函数
lpr,lpc,lpd

名称: lpr

使用权限: 所有使用者

使用方式:lpr [ -P printer ]
将档案或是由标准输入送进来的资料送到印表机贮列之中,印表机管理程式 lpd 会在稍后将这个档案送给适当的程式或装置处理。lpr 可以用来将料资送给本地或是远端的主机来处理。

参数:

-p Printer: 将资料送至指定的印表机 Printer,预设值为 lp。

范例:
将 www.c 和 kkk.c 送到印表机 lp。
lpr -Plp www.c kkk.c

名称: lprm
-- 将一个工作由印表机贮列中移除 用法

/usr/bin/lprm [P] [file...]

说明
尚未完成的印表机工作会被放在印表机贮列之中,这个命令可用来将常未送到印表机的工作取消。由于每一个印表机都有一个独立的贮列,你可以用 -P 这个命令设定想要作用的印列机。如果没有设定的话,会使用系统预设的印表机。

这个命令会检查使用者是否有足够的权限删除指定的档案,一般而言,只有档案的拥有者或是系统管理员才有这个权限。

范例
将印表机 hpprinter 中的第 1123 号工作移除

lprm -Phpprinter 1123

将第 1011 号工作由预设印表机中移除

lprm 1011

名称: fdformat

使用权限: 所有使用者

使用方式:fdformat [-n] device

使用说明 :
对指定的软碟机装置进行低阶格式化。使用这个指令对软碟格式化的时候,最好指定像是下面的装置:

/dev/fd0d360 磁碟机 A: ,磁片为 360KB 磁碟
/dev/fd0h1440 磁碟机 A: ,磁片为 1.4MB 磁碟
/dev/fd1h1200 磁碟机 B: ,磁片为 1.2MB 磁碟
如果使用像是 /dev/fd0 之类的装置,如果里面的磁碟不是标准容量,格式化可能会失败。在这种情况之下,使用者可以用 setfdprm 指令先行指定必要参数。

参数:
-n 关闭确认功能。这个选项会关闭格式化之后的确认步骤。

范例:

fdformat -n /dev/fd0h1440

将磁碟机 A 的磁片格式化成 1.4MB 的磁片。并且省略确认的步骤。

名称: mformat

使用权限: 所有使用者

使用方式:

mformat [-t cylinders] [-h heads] [-s sectors] [-l volume_label] [-F] [-I fsVer-sion] [-S sizecode] [-2 sectors_on_track_0] [-M software_sector_size] [-a] [-X] [-C] [-H hidden_sectors] [-r root_sectors] [-B boot_sector] [-0 rate_on_track_0] [-A rate_on_other_tracks] [-1] [-k] drive:

在已经做过低阶格式化的磁片上建立 DOS 档案系统。如果在编译 mtools 的时候把 USE_2M 的参数打开,部分与 2M 格式相关的参数就会发生作用。否则这些参数(像是 S,2,1,M)不会发生作用。

参数:

-t 磁柱(synlider)数
-h 磁头(head)数
-s 每一磁轨的磁区数
-l 标签
-F 将磁碟格式化为 FAT32 格式,不过这个参数还在实验中。
-I 设定 FAT32 中的版本号。这当然也还在实验中。
-S 磁区大小代码,计算方式为 sector = 2^(大小代码+7)
-c 磁丛(cluster)的磁区数。如果所给定的数字会导致磁丛数超过 FAT 表的**,mformat 会自动放大磁区数。
-s
-M 软体磁区大小。这个数字就是系统回报的磁区大小。通常是和实际的大小相同。
-a 如果加上这个参数,mformat 会产生一组 Atari 系统的序号给这块软碟。
-X 将软碟格式化成 XDF 格式。使用前必须先用 xdfcopy 指令对软碟作低阶格式化的动作。
-C 产生一个可以安装 MS-DOS 档案系统的磁碟影像档(disk image)。当然对一个实体磁碟机下这个参数是没有意义的。
-H 隐藏磁区的数目。这通常适用在格式化硬碟的分割区时,因为通常一个分割区的前面还有分割表。这个参数未经测试,能不用就不用。
-n 磁碟序号
-r 根目录的大小,单位是磁区数。这个参数只对 FAT12 和 FAT16 有效。
-B 使用所指定的档案或是设备的开机磁区做为这片磁片或分割区的开机磁区。当然当中的硬体参数会随之更动。
-k 尽量保持原有的开机磁区。
-0 第 0 轨的资料传输率
-A 第 0 轨以外的资料传输率
-2 使用 2m 格式
-1 不使用 2m 格式

范例:
mformat a:

这样会用预设值把 a: (就是 /dev/fd0)里的磁碟片格式化。

名称: mkdosfs

使用权限: 所有使用者

使用方式: mkdosfs [ -c | -l filename ]
[ -f number_of_FATs ]
[ -F FAT_size ]
[ -i volume_id ]
[ -m message_file ]
[ -n volume_name ]
[ -r root_dir_entry ]
[ -s sector_per_cluster ]
[ -v ]
device
[ block_count ]

说明: 建立 DOS 档案系统。 device 指你想要建立 DOS 档案系统的装置代号。像是 /dev/hda1 等等。 block_count 则是你希望配置的区块数。如果 block_count 没有指定则系统会自动替你计算符合该装置大小的区块数。

参数:
-c 建立档案系统之前先检查是否有坏轨。
-l 从得定的档案中读取坏轨记录。
-f 指定档案配置表(FAT , File Allocation Table)的数量。预设值为 2 。目前 Linux 的 FAT 档案系统不支援超过 2 个 FAT 表。通常这个不需要改。
-F 指定 FAT 表的大小,通常是 12 或是 16 个位元组。12 位元组通常用于磁碟片,16 位元组用于一般硬碟的分割区,也就是所谓的 FAT16 格式。这个值通常系统会自己选定适当的值。在磁碟片上用 FAT16 通常不会发生作用,反之在硬碟上用 FAT12 亦然。
-i 指定 Volume ID。一般是一个 4 个位元组的数字,像是 2e203a47 。如果不给系统会自己产生。
-m 当使用者试图用这片磁片或是分割区开机,而上面没有作业系统时,系统会给使用者一段警告讯息。这个参数就是用来变更这个讯息的。你可以先用档案编辑好,然后用这个参数指定,或是用
-m -
这样系统会要求你直接输入这段文字。要特别注意的是,档案里的字串长度不要超过 418 个字,包括展开的跳栏符号(TAB)和换行符号(换行符号在 DOS 底下算两个字元!)
-n 指定 Volume Name,就是磁碟标签。如同在 DOS 底下的 format 指令一样,给不给都可以。没有预设值。
-r 指定根目录底下的最大档案数。这里所谓的档案数包括目录。预设值是在软碟上是 112 或是 224 ,在硬碟上是 512。没事不要改这个数字。
-s 每一个磁丛(cluster)的磁区数。必须是 2 的次方数。不过除非你知道你在作什么,这个值不要乱给。
-v 提供额外的讯息

范例:
mkdosfs -n Tester /dev/fd0 将 A 槽里的磁碟片格式化为 DOS 格式,并将标签设为 Tester
2008-10-20 00:49#3
View profile  Blog  Send a short message  Top
 
9527





UID 7703
Digest 0
Points 0
Posts 0
码币MB 0 Code
黄金 0 Catty
钻石 0 Pellet
Permissions 10
Register 2009-7-27
Status offline

实用的Linux网络配置工具netconf

很多用户不使用Linux网络的原因是配置的复杂性与困难性,下面的内容介绍使用Linux下的GUI环境下的网络配置工具netconf,让Linux新手也不畏惧Linux的网络配置。

一、 Linuxconf

Linux很多图形管理工具都是Linuxconf软件的模块。从Linuxconf这一个工具入手,就可以配置除桌面环境的几乎所有方面。Linuxconf工具的开发者把这些功能分成了很多类,而且允许用户从GUI环境或者是终端方式下运行。

假如Linux发布中没有安装Linuxconf软件,用户可以从www.solucorp.gc.ca/linuxconf 下载该软件的预编译软件包来安装。

二、netconf

netconf是配置网络方面的一个工具。这个工具只能为root使用,运行该命令的方式如下:

/sbin/netconf。

启动该工具后,可以看到可以配置4个大类的内容(Client Tasks,Server Tasks,Firewalling,Misc)。Client Tasks允许用户配置Linux网络客户端的内容。在这里设置网络的基本配置,比如主机名(Host Name),IP地址(IP Network Devices),域名服务器地址(Name Server Specification),路由和网关(Routing and Gateways)。

三、 客户端的配置:DHCP

假如你的Linux系统使用静态的或者DHCP自动分配IP地址的话,首先配置系统的主机名和域名。

配置后的信息将保存在/etc/sysconfig/network文件中。

下一个步骤是点击Adaptor 1,在这个面板中填写第一个网卡的信息。Net device和Kernel module会由系统自动发现,用户只需要填写配置方式(静态还是DHCP),地址,子网掩码等信息。

设置成功后,点击Accept,Quit,Activate The Changes,保存,激活和退出设置。也可以手工地使设置生效,使用下面的命令:

/etc/rc.d/init.d/network restart

四、静态地址的配置

如果不使用DHCP动态分配IP地址,则需要用户使用static静态分配IP地址的方式对网卡进行配置。

五、 DNS域名服务器

在netconf主菜单中,选择Name Server Specification(DNS),对域名服务器信息进行设置:

设置DNS的面板中,最多可以填写3个域名服务器的地址。

六、 路由和网关

在客户任务中,一般只需要为Linux系统配置一个缺省或默认的网关。点击Routing and Gateways按钮,可以查看当前可以配置的路由类型。

点击Defaults按钮,配置

提高Linux系统安全性的十招

Linux是一种类Unix的操作系统。从理论上讲,Unix本身的设计并没有什么重大的安全缺陷。多年来,绝大多数在Unix操作系统上发现的安全问题主要存在于个别程序中,所以大部分Unix厂商都声称有能力解决这些问题,提供安全的Unix操作系统。但Linux有些不同,因为它不属于某一家厂商,没有厂商宣称对它提供安全保证,因此用户只有自己解决安全问题
Linux不论在功能上、价格上或性能上都有很多优点,然而,作为开放式操作系统,它不可避免地存在一些安全隐患。关于如何解决这些隐患,为应用提供一个安全的操作平台,本文会告诉你一些最基本、最常用,同时也是最有效的招数。

   Linux是一种类Unix的操作系统。从理论上讲,Unix本身的设计并没有什么重大的安全缺陷。多年来,绝大多数在Unix操作系统上发现的安全问题主要存在于个别程序中,所以大部分Unix厂商都声称有能力解决这些问题,提供安全的Unix操作系统。但Linux有些不同,因为它不属于某一家厂商,没有厂商宣称对它提供安全保证,因此用户只有自己解决安全问题。

   Linux是一个开放式系统,可以在网络上找到许多现成的程序和工具,这既方便了用户,也方便了黑客,因为他们也能很容易地找到程序和工具来潜入Linux系统,或者盗取Linux系统上的重要信息。不过,只要我们仔细地设定Linux的各种系统功能,并且加上必要的安全措施,就能让黑客们无机可乘。

   一般来说,对Linux系统的安全设定包括取消不必要的服务、**远程存取、隐藏重要资料、修补安全漏洞、采用安全工具以及经常性的安全检查等。本文教你十种提高Linux系统安全性的招数。虽然招数不大,但招招奏效,你不妨一试。

   第1招:取消不必要的服务

   早期的Unix版本中,每一个不同的网络服务都有一个服务程序在后台运行,后来的版本用统一的/etc/inetd服务器程序担此重任。Inetd是Internetdaemon的缩写,它同时监视多个网络端口,一旦接收到外界传来的连接信息,就执行相应的TCP或UDP网络服务。

   由于受inetd的统一指挥,因此Linux中的大部分TCP或UDP服务都是在/etc/inetd.conf文件中设定。所以取消不必要服务的第一步就是检查/etc/inetd.conf文件,在不要的服务前加上“#”号。

   一般来说,除了http、smtp、telnet和ftp之外,其他服务都应该取消,诸如简单文件传输协议tftp、网络邮件存储及接收所用的imap/ipop传输协议、寻找和搜索资料用的gopher以及用于时间同步的daytime和time等。

   还有一些报告系统状态的服务,如finger、efinger、systat和netstat等,虽然对系统查错和寻找用户非常有用,但也给黑客提供了方便之门。例如,黑客可以利用finger服务查找用户的电话、使用目录以及其他重要信息。因此,很多Linux系统将这些服务全部取消或部分取消,以增强系统的安全性。

   Inetd除了利用/etc/inetd.conf设置系统服务项之外,还利用/etc/services文件查找各项服务所使用的端口。因此,用户必须仔细检查该文件中各端口的设定,以免有安全上的漏洞。

   在Linux中有两种不同的服务型态:一种是仅在有需要时才执行的服务,如finger服务;另一种是一直在执行的永不停顿的服务。这类服务在系统启动时就开始执行,因此不能靠修改inetd来停止其服务,而只能从修改/etc/rc.d/rc[n].d/文件或用Run level editor去修改它。提供文件服务的NFS服务器和提供NNTP新闻服务的news都属于这类服务,如果没有必要,最好取消这些服务。

在Linux和Windows中共享资源

随着Linux的不断推陈出新,已经有越来越多的人喜欢上了这只美丽的“企鹅”。那么如何才能在Windows中看到窗外的“企鹅”,又如何才能让“企鹅”走进视窗呢?在本文中,就将和大家一起探讨如何在Linux(本文以小红帽Red hat FC1为例)操作系统和Windows操作系统中实现资源的共享。

  Linux下访问Windows资源

因为Linux内核支持读写Fat、NTFS、Vfat、Fat32等文件系统,因此在Linux下访问Windows中的资源只需直接使用Linux中专门负责与Windows主机互通有无的工具Samba就可以实现了。过程可以分为以下三步:

  第一步:安装Samba组件

在光驱中插入小红帽的第二张安装光盘后,依次单击“主菜单” “系统设置” “管理/删除应用程序”菜单项,(如图1所示)在打开的“软件包管理”对话框中找到并勾选“Windows文件服务器”项后单击“更新”按钮,接下来请耐心等待Samba软件包的安装完成。




\"IPB




第二步:启动Samba服务

安装好Samba之后还需要启动Samba服务才行,请依次点击“主菜单” “系统设置” “服务器设置” “服务”,在弹出的窗口选中“SMB”服务并点击工具栏上的“开始”按钮即可(如图2)。


\"IPB


第三步:访问共享资源

到了这一步我们既可以用命令行的方式来使用Samba服务,也可以任意打开一个窗口,在地址栏中通过输入“smb://192.168.1.21”并按“Enter”键回车的方式来访问特定计算机中的共享资源。要注意的是,在弹出的“需要验证”对话框中一定要输入有权限访问此远程计算机的用户名和密码才能对远程计算机的共享资源进行相应权限的操作,如图3所示。稍后就可以看到远程计算机中的共享资源了(如图4)。


\"IPB

\"IPB

Windows下访问Linux资源

在Red Hat Linux中,借助Samba服务在Windows下访问Linux的资源也是很容易的,依次单击“主菜单” “系统设置” “服务器设置” “Samba”菜单项,在弹出的“查询”对话框中输入Root用户的口令后就可以打开Samba服务器配置对话框。接着依次单击“首选项” “服务器设置”菜单项,如图5所示,在弹出的对话框“基本”选项卡设置界面中输入局域网的工作组名(注:此处的工作组名称不一定非得与Windows主机所在的工作组名称一致)。


\"IPB

接着需要设置可以访问Linux共享资源的用户,方法是点击“首选项”下的“Samba用户”菜单项,在弹出的对话框中点击“添加用户”按钮,如图6所示,在下一步中设置好用户名、口令后点击“确定”按钮完成用户的添加。


\"IPB


接着应点击工具栏上的“增加”按钮,在弹出的对话框中添加欲共享的目录并设置好访问权限后点击切换到“访问”选项卡设置界面,如图7所示,设置只有上一步添加的用户可以访问的资源并“确定”按钮继续。




\"IPB


设置完毕后,就可以在安装Windows的计算机中(这里为Windows XP)双击打开“网上邻居”窗口,在相应的工作组中可以看到有“samba server(Redhat10)”的图标(如图8)。双击图标后输入相应的访问用户名和口令即可访问Linux中的共享资源了。


\"IPB

2008-10-20 00:51#4
View profile  Blog  Send a short message  Top
 
9527





UID 7703
Digest 0
Points 0
Posts 0
码币MB 0 Code
黄金 0 Catty
钻石 0 Pellet
Permissions 10
Register 2009-7-27
Status offline

Linux中文件查找技术大全

每一种操作系统都是由成千上万个不同种类的文件所组成的。其中有系统本身自带的文件,用户自己的文件,还有共享文件等等。我们有时候经常忘记某份文件放在硬盘中的哪个地方。在微软的WINDOWS操作系统中要查找一份文件是相当简单的事情,只要在桌面上点击“开始”-“搜索”中就能按照各种方式在本地硬盘上,局域网络,甚至在INTERNET上查找各种文件,文档。
可是使用Linux的用户就没有那么幸运了,在Linux上查找某个文件确实是一件比较麻烦的事情。毕竟在Linux中需要我们使用专用的“查找”命令来寻找在硬盘上的文件。Linux下的文件表达格式非常复杂,不象WINDOWS,DOS下都是统一的AAAAAAA.BBB格式那么方便查找,在WINDOWS中,只要知道要查找的文件的文件名或者后缀就非常容易查找到。Linux中查找文件的命令通常为“find”命令,“find”命令能帮助我们在使用,管理Linux的日常事务中方便的查找出我们需要的文件。对于Linux新手来说,“find”命令也是了解和学习Linux文件特点的方法。因为Linux发行版本繁多,版本升级很快,在Linux书籍上往往写明某个配置文件的所在位置,往往Linux新手按图索骥还是不能找到。比如说REDHAT Linux 7.O和REDHAT Linux 7.1中有些重要的配置文件所在的硬盘位置和文件目录就有了很大的改变,如果不学会使用“find”命令,那么在成千上万的Linux文件中要找到其中的一个配置文件是相当困难的,笔者在没有精通“find”命令之前就吃过这样的苦头。好,下面就详细为大家介绍强大的“find”命令的全部使用方法和用途。
通过文件名查找法:
这个方法说起来就和在WINDOWS下查找文件一样容易理解了。如果你把这个文件放在单个的文件夹里面,只要使用常见的“ls\"命令就能方便的查找出来,那么使用“find”命令来查找它就不能给你留下深刻的印象,毕竟“find”命令的强大功能不止这个。如果知道了某个文件的文件名,而不知道这个文件放到哪个文件夹,甚至是层层套嵌的文件夹里。举例说明,假设你忘记了httpd.conf这个文件在系统的哪个目录下,甚至在系统的某个地方也不知道,则这是可以使用如下命令:
find / -name httpd.conf
这个命令语法看起来很容易就明白了,就是直接在find后面写上 -name,表明要求系统按照文件名查找,最后写上httpd.conf这个目标文件名即可。稍等一会系统会在计算机屏幕上显示出查找结果列表:
etc/httpd/conf/httpd.conf
这就是httpd.conf这个文件在Linux系统中的完整路径。查找成功。
如果输入以上查找命令后系统并没有显示出结果,那么不要以为系统没有执行find/ -name httpd.conf命令,而可能是你的系统中没有安装Apache服务器,这时只要你安装了Apache Web服务器,然后再使用find / -name httpd.conf就能找到这个配置文件了。
无错误查找技巧:
在Linux系统中“find”命令是大多数系统用户都可以使用的命令,并不是ROOT系统管理员的专利。但是普通用户使用“find”命令时也有可能遇到这样的问题,那就是Linux系统中系统管理员ROOT可以把某些文件目录设置成禁止访问模式。这样普通用户就没有权限用“find”命令来查询这些目录或者文件。当普通用户使用“find”命令来查询这些文件目录是,往往会出现\"Permissiondenied.\"(禁止访问)字样。系统将无法查询到你想要的文件。为了避免这样的错误,我们可是使用转移错误提示的方法尝试着查找文件,输入
find / -name access_log 2>/dev/null
这个方法是把查找错误提示转移到特定的目录中去。系统执行这个命令后,遇到错误的信息就直接输送到stderrstream 2 中,access_log 2就是表明系统将把错误信息输送到stderrstream 2中,/dev/null是一个特殊的文件,表明空的或者错误的信息,这样查询到的错误信息将被转移了,不会再显示了。
在Linux系统查找文件也会遇到这样一个实际问题。如果我们在整个硬盘,这个系统中查找某个文件就要花费相当长的一段时间,特别是大型Linux系统和容量较大的硬盘,文件放在套嵌很深的目录中的时候。如果我们知道了这个文件存放在某个大的目录中,那么只要在这个目录中往下找就能节省很多时间了。使用find /etc -name httpd.conf 就可以解决这个问题。上面的命令就是表示在etc目录中查询httpd.conf这个文件。这里再说明一下“/ ”这个函数符号的含义,如果输入 “find/ ”就是表示要求Linux系统在整个ROOT目录下查找文件,也就是在整个硬盘上查找文件,而“find/etc”就是只在 etc目录下查找文件。因为“find/etc”表示只在etc目录下查找文件,所以查找的速度就相应要快很多了。
根据部分文件名查找方法:
这个方法和在WINDOWS中查找已知的文件名方法是一样的。不过在Linux中根据部分文件名查找文件的方法要比在WINDOWS中的同类查找方法要强大得多。例如我们知道某个文件包含有srm这3个字母,那么要找到系统中所有包含有这3个字母的文件是可以实现的,输入:
find /etc -name ’*srm*’
这个命令表明了Linux系统将在/etc整个目录中查找所有的包含有srm这3个字母的文件,比如 absrmyz, tibc.srm等等符合条件的文件都能显示出来。如果你还知道这个文件是由srm 这3个字母打头的,那么我们还可以省略最前面的星号,命令如下:
find/etc -name ’srm*’
这是只有像srmyz 这样的文件才被查找出来,象absrmyz或者 absrm这样的文件都不符合要求,不被显示,这样查找文件的效率和可靠性就大大增强了。
根据文件的特征查询方法:
如果只知道某个文件的大小,修改日期等特征也可以使用“find”命令查找出来,这和WINDOWS系统中的\"搜索\"功能是基本相同的。在微软的\"搜索\"中WINDOWS中的\"搜索助理\"使得搜索文件和文件夹、打印机、用户以及网络中的其他计算机更加容易。它甚至使在Internet 上搜索更加容易。\"搜索助理\"还包括一个索引服务,该服务维护了计算机中所有文件的索引,使得搜索速度更快。使用\"搜索助理\"时,用户可以指定多个搜索标准。例如,用户可以按名称、类型及大小搜索文件和文件夹。用户甚至可以搜索包含特定文本的文件。如果用户正使用 Active Directory,这时还可以搜索带有特定名称或位置的打印机。
例如我们知道一个Linux文件大小为1,500 bytes,那么我们可是使用如下命令来查询find / -size 1500c,字符 c 表明这个要查找的文件的大小是以bytes为单位。如果我们连这个文件的具体大小都不知道,那么在Linux中还可以进行模糊查找方式来解决。例如我们输入find/ -size +10000000c 这个命令,则标明我们指定系统在根目录中查找出大于10000000字节的文件并显示出来。命令中的“+”是表示要求系统只列出大于指定大小的文件,而使用“-”则表示要求系统列出小于指定大小的文件。下面的列表就是在Linux使用不同“ find\"命令后系统所要作出的查找动作,从中我们很容易看出在Linux中使用“find\"命令的方式是很多的,“ find\"命令查找文件只要灵活应用,丝毫不必在WINDOWS中查找能力差。
find / -amin -10 # 查找在系统中最后10分钟访问的文件
find / -atime -2 # 查找在系统中最后48小时访问的文件
find / -empty # 查找在系统中为空的文件或者文件夹
find / -group cat # 查找在系统中属于 groupcat的文件
find / -mmin -5 # 查找在系统中最后5分钟里修改过的文件
find / -mtime -1 #查找在系统中最后24小时里修改过的文件
find / -nouser #查找在系统中属于作废用户的文件
find / -user fred #查找在系统中属于FRED这个用户的文件

下面的列表就是对find命令所可以指定文件的特征进行查找的部分条件。在这里并没有列举所有的查找条件,参考有关Linux有关书籍可以知道所有find命令的查找函数。
-amin n
查找系统中最后N分钟访问的文件
-atime n
查找系统中最后n*24小时访问的文件
-cmin n
查找系统中最后N分钟被改变状态的文件
-ctime n
查找系统中最后n*24小时被改变状态的文件
-empty
查找系统中空白的文件,或空白的文件目录,或目录中没有子目录的文件夹
-false
查找系统中总是错误的文件
-fstype type
查找系统中存在于指定文件系统的文件,例如:ext2 .
-gid n
查找系统中文件数字组 ID 为 n的文件
-group gname
查找系统中文件属于gnam文件组,并且指定组和ID的文件

Find命令的控制选项说明:
Find命令也提供给用户一些特有的选项来控制查找操作。下表就是我们总结出的最基本,最常用的find命令的控制选项及其用法。
选项
用途描述
-daystart
.测试系统从今天开始24小时以内的文件,用法类似-amin
-depth
使用深度级别的查找过程方式,在某层指定目录中优先查找文件内容
-follow
遵循通配符链接方式查找; 另外,也可忽略通配符链接方式查询
-help
显示命令摘要
-maxdepth levels
在某个层次的目录中按照递减方法查找
-mount
不在文件系统目录中查找, 用法类似 -xdev.
-noleaf
禁止在非UNUX文件系统,MS-DOS系统,CD-ROM文件系统中进行最优化查找
-version
打印版本数字

使用-follow选项后,find命令则遵循通配符链接方式进行查找,除非你指定这个选项,否则一般情况下find命令将忽略通配符链接方式进行文件查找。
-maxdepth选项的作用就是**find命令在目录中按照递减方式查找文件的时候搜索文件超过某个级别或者搜索过多的目录,这样导致查找速度变慢,查找花费的时间过多。例如,我们要在当前(.)目录技巧子目录中查找一个名叫fred的文件,我们可以使用如下命令
find . -maxdepth 2 -name fred
假如这个fred文件在./sub1/fred目录中,那么这个命令就会直接定位这个文件,查找很容易成功。假如,这个文件在./sub1/sub2/fred目录中,那么这个命令就无法查找到。因为前面已经给find命令在目录中最大的查询目录级别为2,只能查找2层目录下的文件。这样做的目的就是为了让find命令更加精确的定位文件,如果你已经知道了某个文件大概所在的文件目录级数,那么加入-maxdepth n 就很快的能在指定目录中查找成功。
使用混合查找方式查找文件
find命令可以使用混合查找的方法,例如我们想在/tmp目录中查找大于100000000字节并且在48小时内修改的某个文件,我们可以使用-and 来把两个查找选项链接起来组合成一个混合的查找方式。
find /tmp -size +10000000c -and -mtime +2
学习过计算机语言的朋友都知道,在计算机语言里,使用and ,or 分别表示“与”和“或”的关系。在Linux系统的查找命令中一样通用。
还有这样的例子,
find / -user fred -or -user george
我们可以解释为在/tmp目录中查找属于fred或者george这两个用户的文件。
在find命令中还可以使用“非”的关系来查找文件,如果我们要在/tmp目录中查找所有不属于panda的文件,使用一个简单的
find /tmp ! -user panda
命令就可以解决了。很简单。
查找并显示文件的方法
查找到某个文件是我们的目的,我们更想知道查找到的文件的详细信息和属性,如果我们采取现查找文件,在使用LS命令来查看文件信息是相当繁琐的,现在我们也可以把这两个命令结合起来使用。
find / -name \"httpd.conf\" -ls
系统查找到httpd.conf文件后立即在屏幕上显示httpd.conf文件信息。
12063 34 -rw-r--r-- 1 root root 33545 Dec 30 15:36 /etc/httpd/conf/httpd.conf
下面的表格就是一些常用的查找文件并显示文件信息的参数和使用方法
选项
用途描述
-exec command;
查找并执行命令
-fprint file
打印文件完整文件名
-fprint0 file
打印文件完整文件名包括空的文件
-fprintf file format
打印文件格式
-ok command;
给用户命令执行操作,根据用户的Y 确认输入执行
-printf format
打印文件格式
-ls
打印同种文件格式的文件.

总结:到这里为止我们已经学习了这名多关于find命令的使用方法,也列出了很多常用的find命令的选项,如果我们能熟练掌握在Linux中find命令的使用方法,那么在Linux中查找文件也不是一件困难的事情。

Linux无盘工作站架设实例

摘要
架设Linux无盘工作站实例,服务器和客户端都使用Linux。主要涉及:DHCP TFTP SYSLINUX NFS(2003-03-12 08:52:24)

--------------------------------------------------------------------------------------


客户端是支持PXE方式启动的刀片,用Linux作为服务器,服务器配置如下:


1) 安装DHCP服务器dhcpd


2) 配置/etc/dhcpd.conf文件,下面是我机器上的文件


max-lease-time -1;
default-lease-time -1; #注:IP地址永不过期
option subnet-mask 255.0.0.0;
option routers 10.0.0.1;
option domain-name-servers 10.10.10.10;
# option netbios-name-servers 10.10.10.10;
option broadcast-address 10.255.255.255;
# option dhcp-class-identifier \"PXEClient\";
# option vendor-encapsulated-options 01:04:00:00:00:00:ff;
# option option-135 \"start\";

subnet 10.0.0.0 netmask 255.0.0.0 {
range 10.10.12.131 10.10.12.150;

host blade01 {
hardware ethernet 00:e0:43:00:02:00;
fixed-address 10.10.12.131;
filename \"/tftpboot/pxelinux.0\"; #注:启动映象文件
}

host blade02 {
hardware ethernet 00:e0:43:00:02:02;
fixed-address 10.10.12.132;
filename \"/tftpboot/pxelinux.0\";
}

host blade03 {
hardware ethernet 00:e0:43:00:02:04;
fixed-address 10.10.12.133;
filename \"/tftpboot/pxelinux.0\";
}

host blade04 {
hardware ethernet 00:e0:43:00:02:06;
fixed-address 10.10.12.134;
filename \"/tftpboot/pxelinux.0\";
}

host blade05 {
hardware ethernet 00:e0:43:00:02:08;
fixed-address 10.10.12.135;
filename \"/tftpboot/pxelinux.0\";
}
}


说明:dhcp客户得到IP地址后用TFTP协议从服务器上下载启动映象文件。我用syslinux

工具包里边的pxelinux来作为远程启动的loder.

3) 配置tftp server

使用pxelinux作引导工具需要支持TSIZE参数的tftp server。可从http://www.kernel.org/pub/software/network/tftp/下载。

通过xinetd来使用tftp服务,我的/etc/xinetd.conf文件如下


......
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
}


4) 配置PXELINUX

先安装syslinux软件包。可从http://www.kernel.org/pub/linux/utils/boot/syslinux/下载。

将pxelinux.0拷贝到/tftpboot/目录下,然后建立/tftpboot/syslinux.cfg/目录。该目录下存放配置文件。

pxelinux使用ip地址的十六进制表示来作为该ip地址的配置文件的文件名。如blade01的

ip地址为10.10.12.131,配置文件名为0A0A0C83,内容为:


default linux

label linux
kernel vmlinuz
append ip=dhcp root=/dev/nfsroot nfsroot=10.10.11.120:/remote/blade01 vga=normal


5) 配置nfs

为每个刀片建立一个根目录,在该刀片的pxelinux配置文件里指定了从这个nfs export的目录启动。

该根目录里应把标准的目录都建好,另外需要重新mount的usr, home, public等目录也要export。

我的 /etc/exports文件:


# /etc/exports: the access control list for filesystems which may be exported
# to NFS clients. See exports(5).

/remote/blade01 blade01(rw,async,no_root_squash)
/remote/blade02 blade02(rw,async,no_root_squash)
/remote/blade03 blade03(rw,async,no_root_squash)
/remote/blade04 blade04(rw,async,no_root_squash)
/remote/blade05 blade05(rw,async,no_root_squash)
/remote/root *(rw,async,no_root_squash)
/remote/home *(rw,async,no_root_squash)
/usr *(ro,async,no_root_squash)
/sbin *(ro,async,no_root_squash)
/bin *(ro,async,no_root_squash)
/lib *(ro,async,no_root_squash)
/home *(ro,async,no_root_squash)


6)为每个刀片修改它的/etc/fstab文件,以blade01为例,它的nfs root是/remote/blade01
/remote/blade01/etc/fstab文件如下:
# /etc/fstab: static file system information.
#
#
10.10.11.120:/remote/blade01 / nfs defaults,intr 0 1
10.10.11.120:/remote/root /root nfs defaults,intr 0 1
10.10.11.120:/remote/home /home nfs defaults,intr 0 1
10.10.11.120:/bin /bin nfs defaults,intr 0 1
10.10.11.120:/usr /usr nfs defaults,intr 0 1
10.10.11.120:/sbin /sbin nfs defaults,intr 0 1
10.10.11.120:/lib /lib nfs defaults,intr 0 1
none /proc proc defaults,intr 0 1


同时还要为每个刀片修改它的网络配置文件,配置ip地址,启动两块网卡等等。。

7) 编译内核

刀片用的内核,应该支持Kernel Level Auto Configuration的DHCP协议,支持NFS,支持NFS ROOT,

假设编译好的内核为vmlinuz,将它拷贝到/tftpboot/目录下。

参考文档:

http://syslinux.zytor.com/pxe.php
http://syslinux.zytor.com/faq.php
http://www.cn-cio.org/xx/show.php?article_id=1680
http://www-900.ibm.com/developerWorks/cn/l...ex.shtml

Linux下APACHE&PHP&MYSQL&CGI修改版

根据一个自称自己经验所得的混蛋文章改的
许多文章结合起来,嘿嘿
MOD_PERL,FASTCGI那一栏我没有调试,因为不喜欢CGI。CHMOD MYSQL那一栏两次都是卡住过,如果有问题,可以来回做做实验。

Linux下apache+mysql+php^^^^^^^^(修改版)

唉,网上如此多的文章,版本居然这么多,并且多多少少存在着一些毛病,解决毛病及错误用了自己一天的时间,修改些错误的地方,最后的版本就是下面的了


apache1.3.24+php4.21+mysql3.23.49+openssl+mod_ssl+mod_perl+mod_fastcgi
这里要注意的是apache 1.3x可以用静态php模块
2.x.x目前还只可以用动态,并且没有windows版本

本安装所需要的软件包:
apache_1.3.24.tar.gz
php-4.2.1.tar.gz
mysql-3.23.49.tar.gz
mod_fastcgi-2.2.12.tar.gz
mod_perl-1.26.tar.gz
mod_ssl-2.8.8-1.3.24.tar.gz
openssl-0.9.6d.tar.gz

虽然 apache 版本已到 2.0.36,但从其它资料看好像并未真正走出试验阶段,而且最新的 php 4.21 目前也无法编译为 apache 2.0.xx 的静态模块。而本安装采用的是编译为静态模块,因此没有采用新版 apache。

###################################################


安装:

将这些包放在一个目录下,如 /usr/local/src
然后解压缩这些包:
tar xzvf apche_1.3.24.tar.gz
tar xzvf php-4.2.1.tar.gz
tar xzvf mysql-3.23.49.tar.gz
tar xzvf mod_fastcgi-2.2.12.tar.gz
tar xzvf mod_perl-1.26.tar.gz
tar xzvf mod_ssl-2.8.8.-1.3.24.tar.gz
tar xzvf openssl-0.9.6d.tar.gz

解压缩完成后将会看到在当前目录下已经出现了解压缩后生成的文件夹

现在开始配置编译:

1. 首先安装 MySQL
需要PTH噢,别忘记
1) 建立 MySQL 用户组:

groupadd mysql
useradd -g mysql mysql

2) 配置并编译

cd mysql-3.23.49
./config --prefix=/usr/local/mysql

如果想使用 MySQL 事务的话,可以加上 --with-berkeley-db,即:

./configure \\
--prefix=/usr/local/mysql \\
--with-berkeley-db

配置完成后就可以编译了

3) 编译安装
编译很简单,只有一个命令

make

然后安装

make install

4) 初始化
安装结束后还没完,还有几个步骤,首先是初始化数据库

scripts/mysql_install_db

然后是设置权限

chown -R root /usr/local/mysql
chown -R mysql /usr/local/mysql/var
chgrp -R mysql /usr/local/mysql

然后将启动 MySQL 所需的 my.cnf 拷贝到 /etc 目录下

cp /usr/local/mysql/share/mysql//my-medium.cnf /etc/my.cnf
(其中还有三个文件,my-small.cnf、my-large.cnf和my-huge.cnf,
是对于机器性能而言的,最后一个适用于2GB左右内存

5) 启动

/usr/local/mysql/bin/safe_mysqld --user=mysql &

你可以看到启动信息,这时应该给 root 用户设置密码了,因为安装后默认是没有密码的

6) 为 root 设置密码

/usr/local/mysql/bin/mysqladmin -u root -p password your_new_password

注意,第一个 password 是命令的参数,依原样键入,而 your_new_password 就是你要设置的新密码。例如,要将 root 密码设为123456,那么这样输入命令:

/usr/local/mysql/bin/mysqladmin -u root -p password 123456

回车后系统会提示你输入当前密码,应该是像下面这样:

Enter password:

因为此时还没有密码,所以直接回车即可,这时没有任何提示返回提示符状态,而密码已经设置完成。此时可以通过关闭 MySQL 服务验证密码是否生效:

/usr/local/mysql/bin/mysqladmin -u root -p shutdown
Enter password:123456

系统提示 MySQL 已关闭:

020531 13:14:35 mysql ended
[1]+ Done /usr/local/mysql/bin/safe_mysqld --user=mysql

##########################################################################

2. 安装 apache + php + 其它模块

先来配置模块

cd /usr/local/src

1) 将 fastcgi 目录移至 apache 的模块目录下并更名为 fastcgi

mv mod_fastcgi-2.2.12 apache_1.3.24/src/modules/fastcgi

2) 配置并编译 openssl 模块

cd /usr/local/src/openssl-0.9.6d
sh config
make
make test

3) 配置 mod_ssl

cd /usr/local/src/mod_ssl-2.8.8-1.3.24
./configure --with-apache=../apache_1.3.24

4) 配置编译并安装 mod_perl

cd /usr/local/src/mod_perl-1.26
perl Makefile.PL \\
APACHE_SRC=../apache_1.3.24/src \\
DO_HTTPD=1 \\
USE_APACI=1 \\
PRE_HTTPD=1 \\
EVERYTHING=1

然后编译

make

接着测试编译结果

make test

安装

make install

5) 配置 apache

cd /usr/local/src/apache_1.3.24
SSL_BASE=../openssl-0.9.6d ./configure \\
--prefix=/usr/local/apache \\
--enable-module=ssl \\
--activate-module=src/modules/fastcgi/libfastcgi.a \\
--activate-module=src/modules/perl/libperl.a

现在已初步完成了 apache 的配置,接下来开始搞定 php

6) 配置编译安装 php-4.2.1

cd /usr/local/src/php-4.2.1
./configure \\
--with-mysql=/usr/local/mysql \\
--with-apache=../apache_1.3.24 \\
--enable-track-vars \\
--enable-trans-sid \\
--with-gd

然后编译

make

安装

make install

7) 重新配置并编译安装 apache

cd /usr/local/src/apache_1.3.24
./config.status \\
--activate-module=src/modules/php4/libphp4.a

编译

make

安装

make certificate
make install

8) 最后设置

cd /usr/local/src/php-4.2.1
cp php.ini-dist /usr/local/lib/php.ini

你可以按需要编辑 php.ini

编辑 /usr/local/apache/conf 目录下的 httpd.conf

找到:

DirectoryIndex index.html


改为:

DirectoryIndex index.html index.php


在文件中增加一条:
AddType application/x-httpd-php .php

设置结束。

9) 调试

这一块我就不用说了吧

系统启动时加载mysql
cp /usr/local/mysql/share/mysql/mysql.server /etc/rc.d/init.d/mysql
cd /etc/rc.d/rc3.d
ln -s ../init.d/mysql S70mysql


系统启动时加载apache
cp /usr/local/apache/bin/apachectl /etc/rc.d/init.d/httpd
cd /etc/rc.d/rc3.d
ln -s ../init.d/httpd S80httpd

10)不妨再加上ZEND加速器,挺管用的
最新的1。31版本,不管是WIN下的还是LINUX下的,根据提示一步步来就可以了
LINUX下是 ./install.sh, 嘿嘿,简单吧

2008-10-20 00:52#5
View profile  Blog  Send a short message  Top
 
9527





UID 7703
Digest 0
Points 0
Posts 0
码币MB 0 Code
黄金 0 Catty
钻石 0 Pellet
Permissions 10
Register 2009-7-27
Status offline

RedHat linux 8.0下内核编译步骤和说明

***********************************************************************
*以下步骤有很多都是很初级的命令或解释,因为偶是linux新手,
*在编译过程中走了很多弯路,花了大量时间找各种解决办法,所以
*把相应的命令都写了出来,希望对跟偶一样的才入门不久而又想
*编译内核的新手有所帮助!
*
* kilvon 05-Mar-2003
**********************************************************************

基本编译情况说明:偶目前的版本是: RedHat linux 8.0
(机器有双操作系统:linux和windows 2000)
内核版本是 2.4.18-14,硬件是笔记本compaq 的某一型号,
下载的内核版本是2.4.20(在www.kernel.org上可以找到),
推荐编译内核时使用高版本,而不是在以前的版本上编译,
原因见第7.1步的说明

在编译开始前,建议先在windows下用相关软件对硬件做一个
详细统计,包括硬件类型,厂家,芯片版本等等,特别是笔记本
和品牌机,因为二者很多部件都是OEM其它厂家的,并把它打印
出来以供配置内核时使用.(linux下也可以用:系统工具->
硬件浏览器来查看)

另外建议在身旁准备几张纸和笔,随时把你认为重要的信息记下来,
当然包括错误信息了,以帮助以后判断和解决问题.

1.将内核源码包linux-2.4.20.tar.bz2 copy至/usr/src目录下:
#cp linux-2.4.20.tar.bz2 /usr/src
#cd /usr/src

2.将指向以前内核版本的symbol link删除
#rm -f linux-2.4

3.用以下命令解开压缩包
#bzip2 -d linux-2.4.20.tar.bz2
#tar -xvf linux-2.4.20.tar

4.创建新的symbol link以链接到刚解开的源码所在目录
#ln -s linux-2.4.20 linux-2.4

5.进入到以后编译时用的工作目录虾:
#cd /usr/src/linux-2.4

6.该命令保证源代码目录下没有不正确的.o文件(即object文件,编译c语
言时生成的,目的是下一步编译成可执行码时link之用)以及文件的相互
倚赖关系.第一次编译刚下载的源码包不用此命令,但如果多次使用这
些源码编译内核,那么一定要先运行本命令.
#make mrproper

7.为了不影响已经可用的内核(比如安装linux时装入的内核),现在需要
保存以前的可用的内核(以使得编译失败仍然可以\"方便的\"启动linux),
并且我们要对本次编译的内核标识一个容易辨认的标记,以下几步与
编译暂时无关.

7.1偶使用grub作为boot manager,所以要修改grub.conf文件,
#cp /boot/grub/grub.conf /boot/grub/grub.conf.bck
(建议有条件打印一份原始的grub.conf文件,原因见第7.4步)
#emacs /boot/grub/grub.conf
(emacs小提示: ctrl+ x +s 为保存结果,ctrl + x +c为关闭emacs,
删除n行文字为:先把光标放在要删除文字的起始处 ctrl + u,然后敲入要
删除的行数,比如4,最后ctrl + k)

下面是偶的grub.conf内容:
default=1
timeout=10
splashimage=(hd0,6)/grub/splash.xpm.gz
title Psyche (2.4.18-14 standard)
root (hd0,6)
kernel /vmlinuz-2.4.18-14.standard ro root=/dev/hda8
initrd /initrd-2.4.18-14.standard.img
title Windows 2000
rootnoverify (hd0,0)
chainloader +1

注意kernel...和initrd...两条语句,因为要与以下改动对应:
#rm -f /boot/System.map
#rm -f /boot/vmlinuz
#cp /boot/System.map-2.4.18-14 /boot/System.map-2.4.18.standard
#ln -s /boot/System.map-2.4.18.standard /boot/System.map
#cp /boot/vmlinuz-2.4.18-14 /boot/vmlinuz-2.4.18-14.standard
#ln -s /boot/vmlinuz-2.4.18-14.standard /boot/vmlinuz
#cp /boot/initrd-2.4.18-14.img /boot/initrd-2.4.18-14.standard.img
(initrd只用了copy,因为偶是编译一个高版本的内核,而不是同一个版本
内核的重新编译,编译高版本的好处在于系统会建立另外的目录而不会
用新编译的(可能是错的)版本覆盖以前的版本,看一下/lib/modules目录
就明白了.)

7.2如何知道你的根目录\"\\\"在哪个partition上? 命令为:
#df
以下是偶机器的部分输出:
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/hda8 4137264 2136592 1790508 55% /
...

看看你的系统根目录装在哪里很重要,因为后面你将会看到系统安装编译好的内核时在grub.conf插入的命令中root=LABEL=/ hdc=ide-scsi
可能会引发系统引导时的如下错误:
VFS: Cannot open root device \"\" or 00:00
Please append a correct \"root=\" boot option
Kernel panic: VFS: Unable to Mount root fs on 00:00
所以要在grub.conf里修改其命令为:root=/dev/hda8

7.3好了,做完这些准备工作后,我们要--
重启一下机器,smile.gif不要急,应为要先确认7.1步的工作的正确性,以免把7.1错误
带入以后的步骤中.(编译内核一定要非常小心谨慎,不能急躁,否则,嘿嘿...)

7.4如果在重启过程中系统有问题,可以在grub的引导界面上临时改动grub引
导参数,相关命令有:
e -编辑引导命令
ESC键 -回到上级目录
o -插入一行命令
b -开始引导系统
d -删除一行
其实你可以把grub控制台上的命令都删了(只影响本次启动),然后按照
/boot/grub/grub.conf里的命令手工在grub控制台上敲进去,也是一样的效果.

7.5如果你能使用重新配置的grub命令正确启动系统,那么让我们开始真正的
编译工作吧!!!!

7.6先保证我们在编译的工作目录下:
#cd /usr/src/linux-2.4
然后编辑Makefile(这个文件是用来控制编译用的),找到这一行:
EXTRAVERSION =
修改为(以偶本次编译为例,也可以是任意的合法字符串,比如\"-sema-v.4\")
EXTRAVERSION = -kilvon.001

8.偶是在X Window下编译:
#make xconfig

8.1如果你是在文本模式下,用
#make menuconfig

8.2其实编译步骤里最难的就是内核参数的配置,我在这里耗费了很多时间,
更惨的是开始并没有认识到这一点,以为是那些命令的使用...所以,接着看吧:


8.3选择的原则是将与内核其它部分关系较远且不经常使用的部分功能代码编译成为可加载模块(哪些较远?看各人对linux和操作系统概念的理解程度了,还有就是看所配置项的help),有利于减小内核的长度,减小内核消耗的内存,简化该功能相应的环境改变时对内核的影响;不需要的功能就不要选;与内核关心紧密而且经常使用的部分功能代码直接编译到内核中。下面对常用的选项分别加以介绍:

/1. Code maturity level options
代码成熟等级。此处只有一项:
prompt for development and/or incomplete code/drivers
如果你要试验现在仍处于实验阶段的功能,比如khttpd、IPv6等,就必须
把该项选择为Y了;否则可以把它选择为N。

/2. Loadable module support
对模块的支持。这里面有三项:

Enable loadable module support:
除非你准备把所有需要的内容都编译到内核里面,否则该项应该是必选的。
Set version information on all module symbols:
可以不选它。
Kernel module loader:
让内核在启动时有自己装入必需模块的能力,建议选上。

/3. Processor type and features
CPU类型,选项很多,不一一介绍了,有关的几个如下:

Processor family:
根据你自己的情况选择CPU类型。
High Memory Support:
大容量内存的支持。可以支持到4G、64G,一般可以不选。
Math emulation:
协处理器仿真,协处理器是在386时代的宠儿,现在早已不用了。
MTTR support:MTTR支持。可不选。
Symmetric multi-processing support:
对称多处理支持。除非你富到有多个CPU,否则就不用选了。

/4. General setup
这里是对最普通的一些属性进行设置。这部分内容非常多,一般使用缺省设置就可以了。下面介绍一下经常使用的一些选项:

Networking support:
网络支持,必须选,没有网卡也建议选上。
PCI support:
PCI支持,必选.
PCI access mode:
PCI存取模式。可供选择的有BIOS、Direct和Any,选Any吧。
Support for hot-pluggabel devices:
热插拔设备支持,可选.
PCMCIA/CardBus support:
PCMCIA/CardBus支持,有PCMCIA就必选了。
System V IPC
BSD Process Accounting
Sysctl support:
以上三项是有关进程处理/IPC调用的,主要就是System V和BSD两种风格。
如果你不是使用BSD,就按照缺省吧。
Power Management support:电源管理支持,可选上,特别是笔记本.
Advanced Power Management BIOS support:高级电源管理BIOD支持。

/5. Memory Technology Device(MTD)
MTD设备支持
可不选。

/6. Parallel port support
串口支持。如果不打算使用串口,就别选了。

/7. Plug and Play configuration
即插即用支持。选上吧,可以体验一下Linux下即插即用的感觉。

/8. Block devices
块设备支持,需要针对每个人的具体情况来选:

Normal PC floppy disk support:普通PC软盘支持,一般要选,我的没有,
就没选
XT hard disk support:
Compaq SMART2 support:
Mulex DAC960/DAC1100 PCI RAID Controller support:RAID镜像用的。
Loopback device support:
Network block device support:网络块设备支持。如果想访问网上邻居的
东西,就选上。
Logical volume manager(LVM)support:逻辑卷管理支持。
Multiple devices driver support:多设备驱动支持。
RAM disk support:RAM盘支持。

/9. Networking options
网络选项。这里配置的是网络协议。自己看吧.
除了肯定要选中TCP/IP networking外,其它看着办吧

/10. Telephony Support
Linux下可以支持电话卡,这样你就可以在IP上使用普通的电话提供语音服务.详细情况可看看help内容.

/11. ATA/IDE/MFM/RLL support
这个是有关各种接口的硬盘/光驱/磁带/软盘支持的,内容太多了,使用缺省
的选项吧,偶有PCMCIA卡,各人机器情况不一样.

/12. SCSI support
SCSI设备的支持, 如果你用了SCSI的硬盘/光驱/磁带等设备,自己找好了.

/13. IEEE 1394(FireWire)support
偶的是灰的,不用操心了,smile.gif)

/14. I2O device support
在智能Input/Output(I2O)体系接口中使用,不会,用缺省吧.

/15. Network device support
网络设备支持。上面选好协议了,现在该选设备.
为了免得麻烦,编译到内核里面好了,不选M了,选Y。耐心点,一般说来你都能找到自己用的网卡。如果没有,你只好自己到厂商那里去当驱动了,
或者去www.mydrivers.com看看

/16. Amateur Radio support
没有,不选.

/17. IrDA(infrared)support
这个要红外支持,我的有.

/18. ISDN subsystem
如果你使用ISDN上网,这个就必不可少了

/19. Old CD-ROM drivers(not SCSI、not IDE)
专门为非SCSI/IDE口的光驱做的,但谁还在用那么老的东东啊,自己选吧.

/20.Input Core Support
这个选项很重要,除了joystick(游戏遥控杆)建议都选\"m\".切记!

/21. Character devices
字符设备。这个内容又太多了,先使用缺省设置,需要的话自己就修改:

I2C support:I2C是Philips极力推动的微控制应用中使用的低速串行
总线协议。如果你要选择下面的Video For Linux,该项必选。
Mice:鼠标。如果是笔记本,建议在Bus Mouse Support选上\"y\".
Joysticks:手柄。即使在Linux下把手柄驱动起来意义不大
Watchdog Cards:虽然称为Cards,这个可以用纯软来实现,当然也有
硬件的。如果你把这个选中,那么就会在你的/dev下创建一个名为
watchdog的文件,它可以记录你的系统的运行情况,一直到系统重新
启动的1分钟左右。有了这个文件,你就可以恢复系统到重启前的状态了。
Video For Linux:支持有关的音频/视频卡。
Ftape, the floppy tape device driver:
PCMCIA character device support:

/22.Multimedia devices
为捕捉audio/video用,如果感兴趣看看help

/23. File systems
文件系统。内容太多了,建议在缺省选项的基础上进行修改。
介绍以下几项:

Quota support:Quota可以**每个用户可以使用的硬盘空间的上限,在多用户共同使用一台主机的情况中十分有效。
DOS FAT fs support:

DOS FAT文件格式的支持,可以支持FAT16、FAT32。
ISO 9660 CD-ROM file system support:光盘使用的就是ISO 9660的文件格式。
NTFS file system support:ntfs是NT使用的文件格式,你要在linux下mount ntfs分区的话,就要选上它。记得在mount的时候,

只有iocharset=cp936可以加上,codepage=936不能加。
/proc file system support:/proc文件系统是Linux提供给用户和系统进行交
互的通道,建议选上,否则有些功能没法正确执行。

还有另外三个大类都规到这儿了:Network File Systems(网络文件系统)、
Partition Types(分区类型)、Native Language Support(本地语言支持)。
值得一提的是Network File Systems里面的两种:NFS和SMB分别是Linux和
Windows相互以网络邻居的形式访问对方所使用的文件系统,根据需要加以选择。

/24 Console drivers
用缺省

/25 Sound
你用什么声卡?选选吧.

/26 USB Support
很重要,至少要选以下选项
Support for USB
UCHI Alternate Deriver (JE) Support
OCHI (Compaq,iMacs...
USB Audio...
USB MIDI...
USB Human Inte**ce Device (full HID) support
HID input layer support
/dev/hiddev raw HID...
USB LCD device support
因为偶的硬件很多都要求USB HID 支持,所以这里选了不少

*如果有某些选项那不准,可以参考:
/usr/src/linux-2.4/Documentation/Configure.help
也可以search整个系统并看看相关的文字都在哪些文件出现:
#find /usr -name \"*.*\" -print -exec grep
-q -s mousedev {} \\; -print
这个长命令很有用

8.4别忘了将你的配置保存到一个文件里,否则下次编译时又要重选!
Load Configuration from file
比如保存到/home/kilvon/conf/Kernel-kilvon.001

8.5用以下命令读取刚才的配置数据使之生效:
#make dep
#make clean

9.开始编译内核和模块
#make bzImage
#make modules
#make modules_install

10.将编译好的文件移到/boot下;如果上面某步有错,大部分情况是由于
配置内核选项时将一些当前版本只能编译为modules的选为编译到内核里,
我遇到好几次这样的情况.应为既然www.kernel.org发布一个稳定的内核,
(偶没down那些alpha,beta版)9成9可以成功的编译.
#move /usr/src/linux-2.4/System.map /boot/System.map-2.4.20-kilvon.001
#move /usr/src/linux-2.4/arch/i386/boot/bzImage
/boot/vmlinuz-2.4.20-kilvon.001
#rm -f System.map
#rm -f vmlinuz
#ln -s /boot/System.map-2.4.20-kilvon.001 /boot/System.map
#ln -s /boot/vmlinuz-2.4.20-kilvon.001 /boot/vmlinuz

11.作些收尾工作:
#new-kernel-pkg --install --depmod --mkinitrd 2.4.20-kilvon.001
--mkinitrd 作Initial Ramdisk的,可以直接敲个mkinitrd -h看看
--depmod 检查内核中有没有未解析的symbol
--install 在grub中安装一个启动选项

12.看看第7.2步的相关解释,现在请修改/boot/grub/grub.conf文件,
以下是修改后的grub.conf:
default=2
timeout=10
splashimage=(hd0,6)/grub/splash.xpm.gz
title Psyche (2.4.20-kilvon.001)
root (hd0,6)
kernel /vmlinuz-2.4.20-kilvon.001 ro root=/dev/hda8
initrd /initrd-2.4.20-kilvon.001.img
title Psyche (2.4.18-14 standard)
root (hd0,6)
kernel /vmlinuz-2.4.18-14.standard ro root=LABEL=/ hdc=ide-scsi
initrd /initrd-2.4.18-14.standard.img
title Windows 2000
rootnoverify (hd0,0)
chainloader +1

13.再好好检查一下/boot下的文件名是否敲对了(前面有好多的mv,cp动作)
[root@localhost boot]# ll
total 8880
5824 9月 6 04:53 boot.b
612 9月 6 04:53 chain.b
42150 9月 5 01:47 config-2.4.18-14
1024 3月 5 21:32 grub
130983 3月 5 03:49 initrd-2.4.18-14.img
130983 3月 4 20:21 initrd-2.4.18-14.standard.img
65499 3月 5 21:31 initrd-2.4.20-kilvon.001.img
473 3月 5 03:49 kernel.h
12288 3月 5 03:44 lost+found
23108 9月 6 22:05 message
21282 9月 6 22:05 message.ja
21 3月 5 03:49 module-info -> module-info-2.4.18-14
15436 9月 5 01:47 module-info-2.4.18-14
15436 3月 4 20:21 module-info-2.4.18.standard
16834 3月 5 21:17 MyKernelSetup-kilvon.001
640 9月 6 04:53 os2_d.b
28 3月 5 19:32 System.map -> System.map-2.4.20-kilvon.001
507814 9月 5 01:47 System.map-2.4.18-14
507814 3月 4 20:20 System.map-2.4.18-14.standard
588175 3月 5 21:24 System.map-2.4.20-kilvon.001
3236438 9月 5 01:47 vmlinux-2.4.18-14
31 3月 5 12:51 vmlinuz -> /boot/vmlinuz-2.4.20-kilvon.001
1125194 9月 5 01:47 vmlinuz-2.4.18-14
1125194 3月 4 20:19 vmlinuz-2.4.18-14.standard
1458790 3月 5 21:24 vmlinuz-2.4.20-kilvon.001

14.好了,来吧:
#reboot

15.如果有错无法启动,这回到grub控制台然后用以前的内核启动,还记得吗?前面第7步的\"额外\"工作将在这时为你节省大量时间...

16.如果系统可以启动到登录界面并可以登录,但启动过程中有Failed的项,查看:/var/log/boot.log或该目录下搜索一下,看看是什么问题,偶就遇到类似问题,
后来通过改变内核编译的配置而解决掉这些讨厌的红色文字,好了,就写到这里

PS:当然文章是转帖的 出现小头像是因为原来的网站代码与上文一致。想知道头像的代码是什么东西查看源代码就可以了。


2008-10-20 00:55#6
View profile  Blog  Send a short message  Top
     


  Printable version | Recommend to a friend | Subscribe to topic | Favorite topic  


 


All times are GMT+8, and the current time is 2026-1-15 01:24 Clear informations ->sessions/cookies - Contact Us - CAFFZ - ZAKE