伊峰独居

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  30 随笔 :: 30 文章 :: 5 评论 :: 0 Trackbacks
linux专贴!

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下软件安装的重要手段。

bsqtgp 2005-1-20 13:58
linux指令大全cat cd
  chmod chown
  cp cut
  名称:cat
  使用权限:所有使用者
  使用方式:cat [-AbeEnstTuv] [--help] [--version] fileName
  说明:把档案串连接后传到基本输出(萤幕或加 > fileName 到另一个档案)
  参数:
  -n 或 --number 由 1 开始对所有输出的行数编号
  -b 或 --number-nonblank 和 -n 相似,只不过对于空白行不编号
  -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 ../..
  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 设为所有人皆可读取 :
  将档案 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 :
  lamport :
  chown -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
  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 天过修改过的档案
  -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 的档案列出来。
  将目前目录及其子目录下所有延伸档名是 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,simple}]
  [--help] [--version] [--]
  说明 : Linux/Unix 档案系统中,有所谓的连结(link),我们可以将其视为档案
  的别名,而连结又可分为两种 : 硬连结(hard link)与软连结(symbolic 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 [-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 : 建立资料库
  locate -u : 建立资料库

bsqtgp 2005-1-20 13:59
名称 : 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
  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
  -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
  % 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 列出版本讯息。
  --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 点锺)等口语词。
  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 :
  三个星期后的下午 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
  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
  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 月月历。
  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
  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
  142 143 144 145 146 147 148 170 171 172 173 174 175 176
  149 150 151 152 177 178 179 180 181 182
  

bsqtgp 2005-1-20 14:00
名称 : 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 表示要执行的程式。
  ,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)
  %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)
  %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 来将系统时间写入
  当你以 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
  -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。请注意这个数字并
  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
  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
  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]
  [del]
  shell>> chsh -l ### 展示 /etc/shells 档案内容
  /bin/bash
  /bin/sh
  /bin/ash
  /bin/bsh
  /bin/tcsh
  /bin/csh

  名称: 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 就是使用者在他的 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
  这个命令都不会就不要干算了!呵呵我也不在这里多费笔墨耽误大家美好青春了^_^

  名称: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 收到一个要送给 xxx 的信时,它会依据 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

  

bsqtgp 2005-1-20 14:01
名称: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。


  名称 : talk
  使用权限 : 所有使用者
  使用方式 :
  talk person [ttyname]
  说明 : 与其他使用者对谈
  把计 :
  person : 预备对谈的使用者帐号,如果该使用者在其他机器上,则可输入
  person@machine.name
  ttyname : 如果使用者同时有两个以上的 tty 连线,可以自行选择合适的 tty
  传讯息
  例子.1 :
  与现在机器上的使用者Rollaend对谈,此时 Rollaend 只有一个连线 :
  talk Rollaend
  接下来就是等Rollaend回应,若Rollaend接受,则Rollaend输入 `talk jzlee`即
  接下来就是等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 更新萤幕画面

bsqtgp 2005-1-20 14:05
名称 : 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 , 并不送出信号
  -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 并执行 :
  将 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: 占用的记忆体大小
  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
  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 如果有重覆的行程名, 则分开列出 (预设值是会在前面加上 *
  -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
  使用方式: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 : 切换显示模式,共有两种模式,一是只显示执行档的名称,另一种是显示完
  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 (中断) , 较常使用的讯息为
  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 离开
  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 核心 /核心失败
  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

  

bsqtgp 2005-1-20 14:05
名称: 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>> 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、中断及删除字元的值到萤幕上。
  不要显示 erase、中断及删除字元的值到萤幕上。
  -r
  将终端机类别印在萤幕上。
  -s
  将设定 TERM 用的命令用字串的型式送到终端机中,通常在 .login 或
  .profile 中用
  范例:
  让使用者输入一个终端机型别并将终端机设到该型别的预设状态。
  # reset ?
  将 erase 字元设定 control-h
  # reset -e ^B
  将设定用的字串显示在萤幕上
  # reset -s
  Erase is control-B (^B).
  Kill is control-U (^U).
  Interrupt is control-C (^C).
  TERM=xterm;

  名称:compress
  使用权限:所有使用者
  使用方式:compress [-dfvcV] [-b maxbits] [file ...]
  说明:
  compress 是一个相当古老的 unix 档案压缩指令,压缩后的档案会加上一个 .Z
  延伸档名以区别未压缩的档案,压缩后的档案可以以 uncompress 解压。若要将
  延伸档名以区别未压缩的档案,压缩后的档案可以以 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
  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
  名称: 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/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 每一磁轨的磁区数
  -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 轨的资料传输率
  -0 第 0 轨的资料传输率
  -A 第 0 轨以外的资料传输率
  -2 使用 2m 格式
  -1 不使用 2m 格式
  范例:
  mformat a:
  这样会用预设值把 a: (就是 /dev/fd0)里的磁碟片格式化。

s   名称: 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 没有指定则系统会自动替你计算符合该装置大小的区块数。
  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

bsqtgp 2005-1-31 13:13
Linux下硬盘分区基础
什么是硬盘分区,分区用来做什么?
分区就是硬盘的“段落”。Windows分区有自己的盘符(C:,D:等等),这些分区看起来都好像是一个独立的硬盘。

最简单的情况下就是将整个硬盘作为一个唯一的分区。如果您购买了一台已经预装了window的机器,基本上都是这种情况。

如果您希望在机器上安装更多的操作系统,将需要更多的分区。您更不能在这个单独的分区里面再安装linux。如果您要同时安装Windows ME和 Windows2000,那么您将需要两个分区。原因是不用的操作系统原则上采用不同的文件系统。如果几个操作系统都支持相同的文件系统,通常为了避免在一个分区下有相同的系统目录,也将他们安装在不同的磁盘分区。

Linux下是不同的情况,它本身又有更多的分区--比如,根分区 “/” 和交换分区“swap”。

提示:说的更清楚一点:您在安装Linux时考虑的并不是windows分区下还有多少空间,因为windows分区下的空间Linux不能使用。您需要在Windows分区外建立新的分区。
分区类型
硬盘分区一共有三种:主分区,扩展分区和逻辑分区。

在一块硬盘上最多只能有四个主分区。您可以另外建立一个扩展分区来代替四个主分区的其中一个,然后在扩展分区下您可以建立更多的逻辑分区。

扩展分区只不过是逻辑分区的“容器”。实际上只有主分区和逻辑分区进行数据存储。
提示:Windows9x/ME下自带的分区程序fdisk只能定义一个主分区。也就是说,在Windows9x/ME下您只能定义最多一个主分区,一个扩展分区和扩展分区下更多的逻辑分区。如果你想要使用更多的主分区,必须在Linux下进行分区。
分区和格式化
每个操作系统下都有自己的用来改变硬盘分区的工Windows9x/M下是非常有名的FDISK,在Windows NT/2000/XP中带有一个非常方便的图形界面的工具,他的位置在不同的Windows版本下也稍微有所不同(比如在2000下 控制面板—管理工具—计算机管理—磁盘管理)。在Linux下进行分区既可以使用FDISK,或者一个相同功能的图形界面程序。

每个主分区和逻辑分区都回被存储一个识别文件系统的附加信息。操作系统(Windows或者Linux等等)能通过这些信息非常容易的识别和确认,应该使用哪个分区。不能识别的操作系统分区将会被忽略。

通过分区当然不能产生任何文件系统。在分区之后只是对硬盘上的磁盘空间进行了保留,还不能直接使用。在此之后分区必须要进行格式化。在Windows下可以通过资源管理器下的文件菜单或者FOMATE程序来执行,在Linux下大多数情况下由mke2fs来完成。

提示:Linux支持不同的文件系统。应用最广泛的是ext2。ext2就是有我们上面提到的mke2fs程序来建立的。Linux当然也支持reiserfs文件系统

注意:进行任何磁盘分区或大小的改动工作,都会丢失以前的数据。一次在分区直前一定要对数据进行备份。
Dos/Windows下的分区名称
在Windows下操作系统使用的分区将用盘符来表示。A:和B:为软驱保留,其他应盘上的主分区和逻辑分区将从C:开始依次排列。(扩展分区没有任何盘符,而且是看不到的。在我indowsx下同样也看不到Linux分区)

如果一台机器有很多的硬盘,光驱,软驱等,磁盘分区的命名将产生混乱。在这种情况下,第一块硬盘上的主分区和逻辑分区将首先得到命名盘符;然后是第二块,第三块等等。比如您有三块硬盘,每一快硬盘上同时又有一个主分区和两个逻辑分区,那么第一块硬盘的命名将是C:,F:,G:,第二块为D:,H:,I:,第三块为E:,J:,K:。

在WindowsNT/2000/XP下可以改变这些系统自动命名的名称。比如你可以将一个光驱命名为X,这样在添加新的分区的时候他的名称就不会改变了。

陌生文件系统的分区将不会被命名,在大多数程序里面(比如资源管理器)是看不到的。、这些分区将只能在磁盘分区工具(Windows9x/ME下的FDISK,Win2000下的计算机管理-命令解释器)下面显示。
Linux下的分区名称
Linux下的分区命名比Windows下面将更加清晰详细,但是由此而来的名称不容易记住。不同于Windows下的盘符,Linux通常采用设备-名称(device-name)。一般的硬盘(比如IDE硬盘)将采用/dev/hdxy来命名。X表示硬盘(a是第一块硬盘,b是第二块硬盘,依次类推),y是分区的号码(从0开始,1,2,3等等)。SCSI硬盘将用/dev/sdxy来命名。光驱(不管是IDE类型或者SCSI)将和硬盘一样来命名。

提示:IDE(集成电路设备)和SCSI(小型计算机系统接口)是两个目前最流行的连接计算机硬盘,光驱或者软驱的系统。SCSI比IDE速度要快,但是同样价钱也要贵一些。SCSI通常可以用于文件服务器和数据库服务器。Linux支持这两种系统(当然可以同时在一台机器上拥有IDE和SCSI设备)

IDE硬盘和光驱设备将由内部连接来区分区定。/dev/hda表示第一个IDE信道的第一个设备(master),/dev/hdb表示第一个IDE信道的第二个设备(slave)。按照这个原则,/dev/hdc和/dev/hdd为第二个IDE信道的master和slave设备。被命名为/dev/had和/dev/hdc的两个设备在理论上是同样可以的,在这里不使用/dev/hdb。(这种情况下,设备被作为master连接在第一和第二个IDE信道上)

SCSI硬盘或者光驱设备依赖于设备的ID号码,不考虑遗漏的ID号码。比如三个SCSI设备的ID号码分别是0,2,5,设备名称分别是/dev/sda,/dev/sdb,/dev/sdc。如果现在再添加一个ID号码为3的设备,那么这个设备将被以/dev/sdc来命名,ID号码为5的设备将被称为/dev/sdd。

分区的号码不依赖于IDE或者SCSI设备的命名,号码1到4位主分区或者扩展分区保留,从5开始才用来为逻辑分区命名。由于这个原因,经常会有号码漏洞。(比如1,2,5,6,在这里3和4就是号码漏洞)比如:第一块硬盘的主分区为hda1,扩展分区为hda2,扩展分区下的一个逻辑分区为hda5。

下面还有一些例子帮助大家来理解

/dev/hda          表示整个IDE硬盘
/dev/hda1         表示第一块IDE硬盘的第一个主分区
/dev/hda2         表示第一块IDE硬盘的扩展分区
/dev/hda5         表示第一块IDE硬盘的第一个逻辑分区
/dev/hda8         表示第一块IDE硬盘的第四个逻辑分区
/dev/hdb          表示第二个IDE硬盘
/dev/hdb1         表示第二块IDE硬盘的第一个主分区
/dev/sda           表示第一个SCSI硬盘
/dev/sda1          表示第一个SCSI硬盘的第一个主分区
/dev/sdd3          表示第四个SCSI硬盘的第三个主分区

bsqtgp 2005-4-8 12:35
本文介绍了Linux操作系统应用过程中12则经典技巧,合理应用这些技巧可以更好的使用Linux系统。   1、处理特殊的文件名   假设Linux系统中有一个文件名叫“-ee”,如果我们想对它进行操作,例如要删除它,按照一般的删除方法在命令行中输入rm -ee命令,界面会提示我们是“无效选项”(invalid option),原来由于文件名的第一个字符为“-”,Linux把文件名当作选项了,我们可以使用“--”符号来解决这个问题,输入“rm -- -ee”命令便可顺利删除名为“-ee”的文件。如果是其他特殊字符的话可以在特殊字符前加一个“”符号,或者用双引号把整个文件名括起来。   2、直接进行Linux的安装工作   在安装Linux操作系统时,可以利用该系统光盘中的一个名为“loadlin.exe”的软件,将Linux核心直接调入内存,由Linux核心代替当前操作系统来接管计算机,并进入Linux的安装界面。在安装Linux时,我们只要在运行对话框中输入“loadlin E:imagesvmlinuz root=/dev/ram initrd=E:imagesinitrd.img”这个命令就可以直接安装Linux了;其中“E:imagesvmlinuz”为Linux的核心名。   3、消除Xwindows下的死机现象   我们可以用两个常用的方法来消除这种现象:第一,用键盘上的复合键“Ctrl+Alt+Backspace”来关闭当前正在运行的任务;第二,首先按住键盘上的“Ctrl+Alt+F2”复合键,让系统切换到另一个操作台,然后登录到系统,再执行“#ps -ax/grep startx”命令,这将会列出你的Xserver的进程标识,接着在命令行中输入如下命令就能消除Xwindows下的死机现象:#kill -9 PID_Number,最后通过“Alt+F1”复合键返回到原来的平台。   4、快速关闭Linux系统   最新版本的Linux/UNIX系统借鉴了大型机的技术,采用了抗掉电的日志式文件系统,可以自动跟踪保存用户数据,自动同步刷新文件系统,用户完全可以随手关闭电源,从而达到快速关闭系统的目的。 5、巧妙使用“rm”命令   我们可以使用带“-r”参数的“rm”命令来删除一个非空目录,例如我们在命令行中输入“rm -r bbb”这样的命令,表示系统将把bbb目录中包含的所有文件和子目录全部删除掉。   6、巧妙使用“Tab”键   大家知道在Linux字符界面中输入命令时,有时需要输入很多字符,如果经常这样逐个地输入字符,比较麻烦。假设键入的字符足以确定该目录下一个惟一的文件时,我们只需按键盘上的“Tab”键就可以自动补齐该文件名的剩下部分,例如要把目录/ccc下的文件“ddddddd-1.2.3.tar.gz”解包时,当我们在命令行中键入到“tar xvfz /ccc/d”时,如果该文件是该目录下惟一以“d”打头的文件的话就可以直接按下“Tab”键,这时命令会被自动补齐为:tar xvfz /ccc/ddddddd-1.2.3.tar.gz ,从而提高了输入效率。   7、多用鼠标拷贝与粘贴来提高操作速度   Linux系统安装后,每次启动到字符界面时都会自动运行一个叫“gpm”的程序,该程序运行后就可以用鼠标来拷贝与粘贴了。具体做法是按住鼠标左键拖动使要拷贝的地方突出显示,这时突出显示的区域已经被拷贝,再按鼠标右键拷贝的内容就会被粘贴在光标所在位置了。如果我们在Xwindow下运行Linux系统,拷贝与粘贴的操作与在Windows 9x系统下一样。   8、快速启动Linux系统   在DOS下,有一种简单快速启动Linux的方法,那就是load Linux。loadlin.exe是DOS下的可执行程序,它可以在纯DOS环境下迅速启动Linux,而且无需重启计算机,通常我们可以在光盘的“/kernels”目录下找到这个程序。如果不知这个程序被放置于安装盘的何处,可以使用“find -name loadlin*”命令来寻找。找到之后将其复制到DOS分区中,同时还需要复制一份你所使用的Linux内核文件。可以通过Windows直接从光盘复制,也可在Linux环境下使用“mcopy”命令将文件复制到DOS分区;接着再编写一个名为“Linux.bat”的批处理文件,文件内容如下:c:loadlin c:vmlinuz root=/dev/hda1 ro(我们假设loadlin.exe和vmlinuz这两个内核文件都在c盘根目录下,“root”为Linux的根设备,而且Linux处于硬盘第一分区,所以设备名为“/dev/hda1”,“ro”意为readonly)。以后在DOS下要启动Linux时,运行“Linux.bat”就可以了。  9、增加虚拟缓存   使用命令:mkswap /dev/hda(假设Linux的驱动器是/dev/hda),swapon /dev/hda;要自动启动Swap,可以把新的分区加入到etc/fstab中去,照着原来swap的写就行了。用"free"检查swap的大小,Linux支持最多16个交换分区,每个交换分区最大128M,没有空闲
分区的时候,可以用个大文件来建立。   下面是执行的一系列命令:   #dd if=/dev/zero of=swapfile bs=1024 count=8192   #mkswap swapfile 8192   #sync   #swapon swapfile   10、巧妙使用Tab键   大家知道在Linux字符界面中输入命令时,有时需要输入很多字符,如果经常这样逐个逐个地输入字符,比较烦琐。假设键入的字符足以确定目录下一个唯一的文件时,我们只须按键盘上的Tab 键就可以自动补齐该文件名的剩下部分,例如要把目录/ccc 下的文件ddddddd-1.2.3.tar.gz 解包时,当我们在命令行中键入到tar xvfz /ccc/d时,如果该文件是该目录下唯一以d起头的文件的话就可以直接按下键盘上的Tab键,这时命令会被自动补齐为:tar xvfz /ccc/ddddddd-1.2.3.tar.gz,从而提高了输入效率。   11、多用拷贝与粘贴来提高操作速度   Linux系统安装后,每次启动到字符界面时都会自动运行一个叫gpm的程序,该程序运行后就可以用鼠标来拷贝与粘贴了。具体做法是按住鼠标左键拖动让要拷贝的地方突出显示,这时突出显示的区域已经被拷贝, 再按鼠标右键拷贝的内容就会被粘贴在光标所在位置了。如果我们在Xwindow下运行Linux系统,拷贝与粘贴的操作与在普通的Win9x系统下一样。   12、提高读盘速度   在Linux下进行一些设置,让Linux在32位输入输出方式和DMA通道方式下进行工作。设置时,在Linux命令界面中输入命令/sbin/hdparm -cl /dev/hda来打开32bit传输方式,输入命令/sbin/hdparm -dl /dev/hda来打开DMA传输方式,接着再输入命令/sbin/hdparm -kl /dev/hda来使硬盘在Reset之后仍然保持上述的设置,通过这些设置,我们就能提高Linux的读盘速度到1倍以上。  

bsqtgp 2005-4-11 05:17
   关于优化
    说起优化,其实最好的优化就是提升硬件的配置,例如提高cpu的运算能力,提高内存的容量,个人认为如果你考虑升级硬件的话,建议优先提高内存的容量,因为一般服务器应用,对内存的消耗使用要求是最高的。当然这都是题外话了。
    这里我们首要讨论的,是在同等硬件配置下(同一台服务器,不提升硬件的情况下)对你的系统进行优化。
    作为系统管理员,我认为,首先我们要明确一个观点:在服务器上作任何操作,升级和修改任何配置文件或软件,都必须首要考虑安全性,不是越新的东西就越好,这也是为什么linux管理感觉上和windows有所不同的地方,windows首先推荐大家去使用它的最新版本软件和操作系统,其实我个人认为这是一种商业行为,作为从系统管理上来讲,这是很不好的,使用新的软件和系统可能带来新的问题,有些甚至是致命的。
    因此,作为管理,我们还是应该考虑稳定的长期使用的软件版本来作为我们的版本,具体的好处我就不多说了。相信作为管理员的你应该知道的。
    其实个人使用的linux最直接的一个优化就是升级内核,自己编译的内核是根据自己的系统编译而来,将得到最大的性能和最小的内核。
    但是,服务器就不太一样了,当然我们也希望每一台服务器都是自己手工编译的内核,高效而精巧。但是实际和愿望是有差距的,试想一下,如果你管理100来台linux主机,而每一台也许配置都不一样,那编译内核的一个过程将是一个浩大工程,而且从实际考虑,工作量大得难以想象。我想你也不会愿意做这种事情吧。因此,个人建议,采用官方发布的内核升级包是很好的选择。
    首先,我们对新安装的系统,将做一系列升级,包括软件和内核,这是很重要的步骤,(这方面的详细情况欢迎察看我另一篇关于升级方面的文章)。
    在升级好所有软件后,基本的_blank">防火墙和配置都做好以后,我们开始优化一些细节配置,如果你是老系统,那么在作本问题及的一些操作和优化你系统之前,务必被备份所有数据到其他介质。
    1、虚拟内存优化
    首先查看虚拟内存的使用情况,使用命令
# free
    查看当前系统的内存使用情况。
    一般来说,linux的物理内存几乎是完全used。这个和windows非常大的区别,它的内存管理机制将系统内存充分利用,并非windows无论多大的内存都要去使用一些虚拟内存一样。这点需要注意。
    Linux下面虚拟内存的默认配置通过命令
# cat /proc/sys/vm/freepages
    可以查看,显示的三个数字是当前系统的:最小内存空白页、最低内存空白页和最高内存空白。
    注意,这里系统使用虚拟内存的原则是:如果空白页数目低于最高空白页设置,则使用磁盘交换空间。当达到最低空白页设置时,使用内存交换(注:这个是我查看一些资料得来的,具体应用时还需要自己观察一下,不过这个不影响我们配置新的虚拟内存参数)。
    内存一般以每页4k字节分配。最小内存空白页设置是系统中内存数量的2倍;最低内存空白页设置是内存数量的4倍;最高内存空白页设置是系统内存的6倍。这些值在系统启动时决定。
    一般来讲在配置系统分配的虚拟内存配置上,我个人认为增大最高内存空白页是一种比较好的配置方式,以1G的内存配置为例:
    可将原来的配置比例修改为:
2048 4096 6444
    通过命令
# echo "2048 4096 6444" > /proc/sys/vm/freepages
    因为增加了最高空白页配置,那么可以使内存更有效的利用。
    2、硬盘优化
    如果你是scsi硬盘或者是ide阵列,可以跳过这一节,这节介绍的参数调整只针对使用ide硬盘的服务器。
    我们通过hdparm程序来设置IDE硬盘,
    使用DMA和32位传输可以大幅提升系统性能。使用命令如下:
# /sbin/hdparm -c 1 /dev/hda
    此命令将第一个IDE硬盘的PCI总线指定为32位,使用 -c 0参数来禁用32位传输。
    在硬盘上使用DMA,使用命令:
# /sbin/hdparm -d 1 /dev/hda
    关闭DMA可以使用 -d 0的参数。
    更改完成后,可以使用hdparm来检查修改后的结果,使用命令:
# /sbin/hdparm -t /dev/had
    为了确保设置的结果不变,使用命令:# /sbin/hdparm -k 1 /dev/hda
    Hdparm命令的一些常用的其他参数功能
      -g 显示硬盘的磁轨,磁头,磁区等参数。
      -i 显示硬盘的硬件规格信息,这些信息是在开机时由硬盘本身所提供。
      -I 直接读取硬盘所提供的硬件规格信息。
      -p 设定硬盘的PIO模式。
      -Tt 评估硬盘的读取效率和硬盘快取的读取效率。
      -u <0或1> 在硬盘存取时,允许其他中断要求同时执行。
      -v 显示硬盘的相关设定。
    3、其他优化
    关闭不需要的服务,关于系统自动启动的服务,网上有很多资料,在此我就不赘述了;
    关于安全
    1、安全检查
    作为一个系统管理员来说,定期对系统作一次全面的安全检查很重要的,最近遇到一些朋友来信说出现了一些莫名其妙的问题,例如最大的一个问题就是明显感觉网络服务缓慢,这极有可能是被攻击的现象。
    实践证明,无论是那种系统,默认安装都是不安全的,实际不管你用windows也好,linux,bsd或其他什么系统,默认安装的都有很多漏洞,那怎么才能成为安全的系统呢,这正是我们系统管理人员需要做的事情。配置配置再配置。
    任何系统,只要细心的配置,堵住已知的漏洞,可以说这个系统是安全的,其实并非很多朋友说的那样,安装了系统,配置了_blank">防火墙,安装了杀毒软件,那么就安全了,其实如果对系统不作任何安全设置,那就等于向黑客敞开一扇纸做的大门,数十分钟就能完全控制!
    这并非骇人听闻。
    作为linux系统,同样存在很多漏洞,黑可能利用这些漏洞控制你的整个系统,要防止这些问题,我们需要做以下步骤:
    1、 升级系统中所有软件包的最新版本;
    2、 设置较为强壮的_blank">防火墙;
    3、 定期检查关键记录文件,配置杀毒软件
    4、 多关心一下发布安全信息警告的网站,掌握一些最新的病毒和黑客程序的特点,这些都利于系统的正常运作。
    这篇文章主要以优化为主,为了配合这一主题,安全部分我们只讨论一下日常的一些维护工作。
    除了上面列出的4条是管理员必修之课外,对一些linux系统细节的维护也很重要。
    包括:
    1、 配置日志轮训工具,定期下载备份日志,是个非常好的习惯,这样不但能减少日志的消耗的磁盘空间,提高系统效率,更能及时发现问题,linux下有些很好的系统日志分析器,能直接提取日志中的特殊项目,省去了阅读日志的烦恼;
    2、 使用命令lsof –i ,netstat –a ,ps –e等命令,定期检查系统服务端口监听等情况,也可制作一个定期执行的脚本,将这些命令定期执行后发到邮箱中;
    3、 定期检查root用户的history列表,last列表,vipw用户列表是否正常;
    4、 定期备份文件,用tar命令就能很好的备份了,当然需要下载这些备份并转移介质;
    如一点发现有任何特别的没见过的情况或端口,那么要引起足够的重视,切勿因小失大。
    以上是我对linux系统安全和优化的一些浅显认识,希望大家都能安全高效的使用linux为你的工作生活带来方便。  

bsqtgp 2005-4-16 14:25
每一种操作系统都是由成千上万个不同种类的文件所组成的。其中有系统本身自带的文件,用户自己的文件,还有共享文件等等。我们有时候经常忘记某份文件放在硬盘中的哪个地方。
在微软的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中查找文件也不是一件困难的事情。

bsqtgp 2005-4-17 15:08
隐藏技术在计算机系统安全中应用十分广泛,尤其是在网络攻击中,当攻击者成功侵入一个系统后,有效隐藏攻击者的文件、进程及其加载的模块变得尤为重要。本文将讨论Linux系统中文件、进程及模块的高级隐藏技术,这些技术有的已经被广泛应用到各种后门或安全检测程序之中,而有一些则刚刚起步,仍然处在讨论阶段,应用很少。
  
  1.隐藏技术
  
  1.1.Linux下的中断控制及系统调用
  
  Intel x86系列微机支持256种中断,为了使处理器比较容易地识别每种中断源,把它们从0~256编号,即赋予一个中断类型码n,Intel把它称作中断向量。
  
  Linux用一个中断向量(128或者0x80)来实现系统调用,所有的系统调用都通过唯一的入口system_call来进入内核,当用户动态进程执行一条int 0x80汇编指令时,CPU就切换到内核态,并开始执行system_call函数,system_call函数再通过系统调用表sys_call_table来取得相应系统调用的地址进行执行。系统调用表sys_call_table中存放所有系统调用函数的地址,每个地址可以用系统调用号来进行索引,例如sys_call_table[NR_fork]索引到的就是系统调用sys_fork()的地址。
  
  Linux用中断描述符(8字节)来表示每个中断的相关信息,其格式如下:
  
  偏移量31….16  一些标志、类型码及保留位
  段选择符      偏移量15….0
  
  所有的中断描述符存放在一片连续的地址空间中,这个连续的地址空间称作中断描述符表(IDT),其起始地址存放在中断描述符表寄存器(IDTR)中,其格式如下:
  
  32位基址值  界限
  
  其中各个结构的相应联系可以如下表示:
  
  通过上面的说明可以得出通过IDTR寄存器来找到system_call函数地址的方法:根据IDTR寄存器找到中断描述符表,中断描述符表的第0x80项即是system_call函数的地址,这个地址将在后面的讨论中应用到。
  
  1.2.Linux 的LKM(可装载内核模块)技术
  
  为了使内核保持较小的体积并能够方便的进行功能扩展,Linux系统提供了模块机制。模块是内核的一部分,但并没有被编译进内核,它们被编译成目标文件,在运行过程中根据需要动态的插入内核或者从内核中移除。由于模块在插入后是作为Linux内核的一部分来运行的,所以模块编程实际上就是内核编程,因此可以在模块中使用一些由内核导出的资源,例如Linux2.4.18版以前的内核导出系统调用表(sys_call_table)的地址,这样就可以根据该地址直接修改系统调用的入口,从而改变系统调用。在模块编程中必须存在初始化函数及清除函数,一般情况下,这两个函数默认为init_module()以及clearup_module(),从2.3.13内核版本开始,用户也可以给这两个函数重新命名,初始化函数在模块被插入系统时调用,在其中可以进行一些函数及符号的注册工作,清除函数则在模块移除系统时进行调用,一些恢复工作通常在该函数中完成。
  
  1.3.Linux下的内存映像
  
  /dev/kmem是一个字符设备,是计算机主存的映像,通过它可以测试甚至修改系统,当内核不导出sys_call_table地址或者不允许插入模块时可以通过该映像修改系统调用,从而实现隐藏文件、进程或者模块的目的。
  
  1.4.proc 文件系统
  
  proc文件系统是一个虚拟的文件系统,它通过文件系统的接口实现,用于输出系统运行状态。它以文件系统的形式,为操作系统本身和应用进程之间的通信提供了一个界面,使应用程序能够安全、方便地获得系统当前的运行状况何内核的内部数据信息,并可以修改某些系统的配置信息。由于proc以文件系统的接口实现,因此可以象访问普通文件一样访问它,但它只存在于内存之中。
  
  2.技术分析
  
  2.1 隐藏文件
  
  Linux系统中用来查询文件信息的系统调用是sys_getdents,这一点可以通过strace来观察到,例如strace ls 将列出命令ls用到的系统调用,从中可以发现ls是通过sys_getedents来执行操作的。当查询文件或者目录的相关信息时,Linux系统用sys_getedents来执行相应的查询操作,并把得到的信息传递给用户空间运行的程序,所以如果修改该系统调用,去掉结果中与某些特定文件的相关信息,那么所有利用该系统调用的程序将看不见该文件,从而达到了隐藏的目的。首先介绍一下原来的系统调用,其原型为:
  int sys_getdents(unsigned int fd, struct dirent *dirp,unsigned int count)
  其中fd为指向目录文件的文件描述符,该函数根据fd所指向的目录文件读取相应dirent结构,并放入dirp中,其中count为dirp中返回的数据量,正确时该函数返回值为填充到dirp的字节数。下图是修改后的系统调用hacked_getdents执行流程。
  
  图中的hacked_getdents函数实际上就是先调用原来的系统调用,然后从得到的dirent结构中去除与特定文件名相关的文件信息,从而应用程序从该系统调用返回后将看不到该文件的存在。
  
  应该注意的是,一些较新的版本中是通过sys_getdents64来查询文件信息的,但其实现原理与sys_getdents基本相同,所以在这些版本中仍然可以用与上面类似的方法来修改该系统调用,隐藏文件。
  
  2.2 隐藏模块
  
  上面分析了如何修改系统调用以隐藏特定名字的文件,在实际的处理中,经常会用模块来达到修改系统调用的目的,但是当插入一个模块时,若不采取任何隐藏措施,很容易被对方发现,一旦对方发现并卸载了所插入的模块,那么所有利用该模块来隐藏的文件就暴露了,所以应继续分析如何来隐藏特定名字的模块。Linux中用来查询模块信息的系统调用是sys_query_module,所以可以通过修改该系统调用达到隐藏特定模块的目的。首先解释一下原来的系统调用,原来系统调用的原型为:
  int sys_query_module(const char *name, int which, void *buf, size_t bufsize , size_t *ret)
  如果参数name不空,则访问特定的模块,否则访问的是内核模块,参数which说明查询的类型,当which=QM_MODULES时,返回所有当前已插入的模块名称,存入buff, 并且在ret中存放模块的个数,buffsize是buf缓冲区的大小。在模块隐藏的过程中只需要对which=QM_MODULES的情况进行处理就可以达到目的。修改后的系统调用工作过程如下:
  
  1)调用原来的系统调用,出错则返回错误代码;
  2)如果which不等于QM_MODULES,则不需要处理,直接返回。
  3)从buf的开始位置进行处理,如果存在特定的名字,则将后面的模块名称向前覆盖该名字。
  4)重复3),直到处理处理完所有的名字,正确返回。
  
posted on 2006-11-06 14:57 伊峰 阅读(2136) 评论(0)  编辑  收藏 所属分类: 其他学习

只有注册用户登录后才能发表评论。


网站导航: