您的位置:首页 > 运维架构 > Linux

常用的Linux命令

2006-02-13 19:09 351 查看
本文引用自网络,但是不知道作者是那位,但是仍然很感谢他or他们,让我们很轻松的爱上linux。

登录工作站
==========
..透过 PC 登录工作站
===================
执行格式:telnet hostname (在 dos 下执行)
telnet ip-address
Example:
telnet doc telnet 140.122.77.120

目前系上可用的工作站如下:
sun1 sun2 sun6 sun7 sun8 sun9 sun10 sun11 sun12 sun13 snow pacific atlantic
indian graph1 doc happy grumpy sneezy bashfule dopey ice
注: 可利用指令 arp hostname 或 arp domain_name 查询 ip_address

..登录步骤
=========
login : _______ => 输入 username
password : _______ => 输入密码

..登出步骤
=========
% logout
或 % exit
或 %

更改帐号密码
============
% yppasswd => 执行后将会出现下列讯息
Changing NIS password for user on ice.
Old password: ______ => 输入旧密码
New password: ______ => 输入新密码(最好6-8字,英文字母与数字混合)
Retype new password: ______ => 再输入一次密码

线上指令说明
============
执行格式: man command-name
Example: % man ls

进入远端电脑系统
================
执行格式:rlogin hostname [-1 username]
Example:
%rlogin doc
remote login 进入工作站 doc 中。
%rlogin doc -l user
使用 user 帐号进入工作站 doc 中。

执行格式:telnet hostname 或 telnet IP address
Example:
%telnet doc or %telnet 140.109.20.251

档案或目录处理
==================
.列出档案或目录下之档案名称
执行格式: ls [-atFlgR] [name] ( name 可为档名或目录名称。)

Example :
ls 列出目前目录下之档名。
ls -a 列出包含以.起始的隐藏档所有档名。
ls -t 依照档案最后修改时间之顺序,依序列出档名。
ls -F 列出目前目录下之档名及其类型。”/” 结尾表示为目录名称,
“*” 结尾表示为执行档,”@” 结尾表示为 symblic link。
ls -l 列出目录下所有档案之许可权、拥有者、档案大小、修改时间及名称。
ls -lg 同上,并显示出档案之拥有者群组名称。
ls -R 显示出目录下,以及其所有子目录之档名。( recursive listing )

目录之缩写:
===========
~     使用者 login 时的 working directory ( 起始目录 )
~username 指定某位 user 的 working directory ( 起始目录 )
.. 目前的工作目录 ( current working directory )
.. 目前目录的上一层目录 ( parent of working directory)

改变工作目录位置
================
执行格式:cd [name] :name 可为目录名称、路径或目录缩写。
Example:
cd 改变目录位置,至使用者 login 时的 working directory (起始目录)。
cd dir1 改变目录位置,至 dir1 之目录位置下。
cd ~user 改变目录位置,至使用者的 working directory (起始目录)。
cd .. 改变目录位置,至目前目录的上层( 即 parent of working directory)
cd ../user 改变目录位置,至相对路径 user 之目录位置下。
cd /../.. 改变目录位置,至绝对路径( Full path ) 之目录位置下。

复制档案
========
执行格式: cp [-r] source destination

Example:
cp file1 file2 将档案 file1 复制成 file2
cp file1 dir1 将档案 file1 复制到目录 dir1 下,档名仍为 file1。
cp /tmp/file1 . 将目录 /tmp 下的档案 file1 复制到现行目录下,档名仍为 file1。
cp /tmp/file1 file2 将目录 /tmp 下的档案 file1 复制到现行目录下,档名为 file2□
cp -r dir1 dir2 (recursive copy) 复制整个目录。
若目录 dir2 不存在,则将目录 dir1,及其所有档案和子目录,复制
到目录 dir2 下,新目录名称为 dir1。若目录 dir2 不存在,则将
dir1,及其所有档案和子目录,复制为目录 dir2。

搬移或更改档案、目录名称
========================
执行格式: mv source destination
Example:
mv file1 file2 将档案 file1,更改档名为 file2。
mv file1 dir1 将档案 file1,移到目录 dir1 下,档名仍为 file1。
mv dir1 dir2 若目录 dir2 不存在,则将目录 dir1,及其所有档案和子目录,移
到目录 dir2 下,新目录名称为 dir1。若目录 dir2 不存在,则将
dir1,及其所有档案和子目录,更改为目录 dir2。

建立新目录
==========
执行格式: mkdir directory-name
Exmaple :
mkdir dir1 建立一新目录 dir1。

删除目录
========
执行格式: rmdir directory-name 或 rm directory-name
Example :
rmdir dir1 删除目录 dir1,但 dir1 下必须没有档案存在,否则无法删除。
rm -r dir1 删除目录 dir1,及其下所有档案及子目录。

删除档案
========
执行格式: rm filename (filename 可为档名,或档名缩写符号。)
Example :
rm file1 删除档名为 file1 之档案。
rm file? 删除档名中有五个字元,前四个字元为file 之所有档案。
rm f* 删除档名中,以 f 为字首之所有档案。

档名的缩写符号
==============
? 代表档案名称中之单一字元。
* 代表档案名称中之一字串。

列出目前所在之目录位置
======================
执行格式: pwd

查看档案内容
============
执行格式: cat filename
Example :
cat file1  以连续显示方式,查看档名 file1 之内容。

执行格式: more filename 或 cat filename | more
Example :
more file1  以分页方式,查看档名 file1 之内容。
cat file1 | more 同上。

查看目录所占磁碟容量
====================
执行格式: du [-s] directory
Example :
du dir1 显示目录 dir1 的总容量及其次目录的容量(以 k byte 为容量)。
du -s dir1 显示目录 dir1 的总容量。

查看自己的 disk quota 使用状况
==============================
disk quota : 工作站磁碟空间的使用限额。
执行格式: quota -v
Example :
quota -v 将会显示下列讯息
Filesystem usage quota limit timeleft files quota limit timelef.
/home/ice/u01
9344 8192 12288 1.9 days 160 0 0
栏位解说:
usage : 目前的磁碟用量。
quota : 你的磁碟使用额度。当你的 usage 超过 quota 时,虽然可以继续使用,但是
必须七天之内降到 quota 以下,否则即使用量没有超 limit(最高限额),也无
法再写入或复制任何档案。
limit : 最高使用额度。当你的 usage 达到 limit 时,无法再写入或复制任何档案。

档案传输
========
.拷贝档案或目录至远端工作站
============================
执行格式: rcp [-r] source hostnome:destination
( source 可为档名、目录名或路径,hostnome 为工作站站名,destination 为路径名称.
Example :
rcp file1 doc:/home/user
将档案 file1,拷贝到工作站 doc 路径 /home/user 之目录下。
rcp -r dir1 doc:/home/user
将目录 dir1,拷贝到工作站 doc 路径/home/user 之目录下。

.自远端工作站,拷贝档案或目录
===============================
执行格式: rcp [-r] hostname:source destination
( hostname 为工作站名,source 为路径名,destination 可为档名、目录名或路径 )。
Example :
rcp doc:/home/user/file1 file2
将工作站 doc 中,位於 /home/user 目录下之目录 dir1,拷贝到目前工作站之目录下,
目录名称仍为 dir1。
rcp -r doc:/home/user/dir1 .
将工作站 iis1 中,位於 /home/user 目录下之目录 dir1,拷贝到目前工作站之目录下□
目录名称仍为 dir1。

.本地工作站与远端工作站之间档案传输
====================================
( 必须拥有远端工作站之帐号及密码,才可进行传输工作 )
执行格式: ftp hostname or ftp ip_address
Example :
ftp doc 与远端工作站 doc ,进行档案传输
Name (doc:user-name) : 输入帐号
Password (doc:user-name): 输入密码

ftp> help 列出 ftp 档案传输,可使用之任何命令。
ftp> !ls 列出本地工作站,目前目录下之所有档名。
ftp> !pwd 列出本地工作站,目前所在之工作目录位置。
ftp> ls 列出远端工作站目前目录下之所有档名。
ftp> dir 列出远端工作站目前目录下之所有档名(略同於 UNIX 的 ls -l 指令).
ftp> dir . |more 同上,但每页会暂停(可能不适用 Unix 以外的 ftp)。
ftp> pwd 列出远端工作站目前所在之目录位置。
ftp> cd dir1 更改远端工作站之工作目录位置至 dir1 之下。
ftp> get file1 将远端工作站之档案 file1 ,拷贝到本地工作站中。
ftp> put file2 将本地工作站之档案 file2 ,拷贝到远端工作站中。
ftp> mget *.c 将远端工作站中,副档名为 c 之所有档案,拷贝到本地工作站中。
ftp> mput *.txt 将本地工作站中,副档名为 txt 之所有档案,拷贝远端工作站中。
ftp> prompt 切换交谈式指令(使用 mput/mget 时不用每个档案皆询问yes/no)。
ftp> quit 结束 ftp 工作。
ftp> bye 结束 ftp 工作。
注: 从PC与工作站间的档案传输也可透过在 PC端的 FTP指令进行档案传输,指令用法与
上所述大致相同。

档案模式之设定
==============
.改变档案或目录之读、写、执行之允许权
======================================
执行格式:chmod [-R] mode name
( name 可为档名或目录名;mode可为 3 个 8 位元之数字,或利用ls -l 命令,列出
档案或目录之读、写、执行允许权之文字缩写。)
mode : rwx rwx rwx r:read w:write x:execute
user group other
缩写 : (u) (g) (o)
Example :
%chmod 755 dir1 
将目录dir1,设定成任何使用者,皆有读取及执行之权利,但只有拥有者可做修改。
%chmod 700 file1
将档案file1,设定只有拥有者可以读、写和执行。
%chmod o+x file2
将档案file2,增加拥有者可以执行之权利。
%chmod g+x file3
将档案file3,增加群组使用者可执行之权利。
%chmod o-r file4
将档案file4,除去其它使用者可读取之权利。

.改变档案或目录之拥有权
========================
执行格式:chown [-R] username name ( name 可为档名或目录名。)
Example :
%chown user file1
将档案 file1 之拥有权,改为使用者 user 所有。
%chown -R user dir1
将目录 dir1,及其下所有档案和子目录之拥有权,改为使用者 user 所有。

检查自己所属之群组名称
======================
执行格式:groups

.改变档案或目录之群组拥有权
============================
执行格式:chgrp [-R] groupname name ( name 可为档名或目录名 )
Example :
%chgrp vlsi file1
将档案 file1 之群组拥有权,改为 vlsi 群组。
%chgrp -R image dir1
将目录dir1,及其下所有档案和子目录,改为 image 群组。

.改变档案或目录之最后修改时间
==============================
执行格式:touch name ( name 可为档案或目录名称。)

档案之连结
==========
同一档案,可拥有一个以上之名称,可将档案做数个连结。
执行格式:ln oldname newname ( Hard link )
Example :
ln file1 file2   将名称 file2,连结至档案 file1。

执行格式:ln -s oldname newname ( Symblick link )
Example :
ln -s file3 file4 将名称 file4,连结至档案file3。

档案之字串找寻
==============
执行格式:grep string file
Example :
grep abc file1
寻找档案file1中,列出字串 abc 所在之整行文字内容。

找寻档案或命令之路径
====================
执行格式:whereis command ( 显示命令之路径。)
执行格式:which command ( 显示命令之路径,及使用者所定义之别名。)
执行格式:whatis command ( 显示命令功能之摘要。)
执行格式:find search-path -name filename -print
( 搜寻指定路径下,某档案之路径 。)
Example :
%find / -name file1 -print ( 自根目录下,寻找档名为 file1 之路径。.

比较档案或目录之内容
====================
执行格式:diff [-r] name1 name2 ( name1 name2 可同时为档名,或目录名称。)
Example :
%diff file1 file2
比较档案 file1 与 file2 内,各行之不同处。
%diff -r dir1 dir2
比较目录 dir1 与 dir2 内,各档案之不同处。

档案列印输出
============
使用者可用 .login 档中之 setenv PRINTER,来设定列印资料时的列表机名。
printername :sp1 或 sp2 (1005 教室)
Example :
%setenv PRINTER sp2 设定自 sp2 列印资料。

一般档案之列印
==============
执行格式:lpr [-Pprinter-name] filename
%lpr file1 或 lpr -Psp2 file1
自 sp2,列印档案 file1。

执行格式:enscript [-Pprinter-name] filename
%enscript file3 或 enscript -Psp1 file3
自 sp1 列印档案 file3。

.troff 档案之列印
==================
执行格式:ptroff [-Pprinter-name] [-man][-ms] filename
%ptroff -man /usr/local/man/man1/ptroff.1
以 troff 格式,自 Apple laser writer 列印 ptroff 命令之使用说明。

%ptroff -Psp2 -man /usr/man/man1/lpr1
以 troff 格式,自 sp2 列印 lpr 命令之使用说明。

列表机控制命令
==============
.检查列表机状态,及列印工作顺序编号和使用者名称
================================================
执行格式:lpq [-Pprinter -name]
%lpq 或 lpq -Psp1
检查 sp1 列表机之状态。

.删除列表机内之列印工作 ( 使用者仅可删除自己的列印工作 )
========================
执行格式:lprm [-Pprinter -name] username 或 job number
%lprm user 或 lprm -Psp1 user
删除 sp1 中,使用者 user 的列印工作,此时使用者名称必须为 user。
%lprm -Psp2 456
删除 sp2 编号为 456 之列印工作。

Job 之控制
===========
UNIX O.S.,可於 foregrourd 及 background 同时处理多个 process。
一般使用者执行命令时,皆是在 foreground 交谈式地执行 process,亦可将 process
置於 background 中,以非交谈式来执行 process。

.查看系统之 process
====================
执行格式:ps [-aux]
Example:
%ps 或 ps -x (查看系统中,属於自己的 process。)
%ps -au   (查看系统中,所有使用者的 process。)
%ps -aux   (查看系统中,包含系统内部,及所有使用者的 process。)

.结束或终止 process
====================
执行格式:kill [-9] PID ( PID 为利用 ps 命令所查出之 process ID。)
Example:
%kill 456 或 kill -9 456
终止 process ID 为 456 之 process。

.在 background 执行 process 的方式
===================================
执行格式:command & (於 command 后面加入一 “&” 符号即可。)
Example:
%cc file1.c &
将编译 file1.c 档案之工作,置於 background 执行。

执行格式:按下 “Control Z” 键,暂停正在执行的 process。键入 “bg” 命令,
命令,将所暂停的 process,置入 background 中继续执行。
Example:
%cc file2.c
^Z
Stopped
%bg

.查看正在 background 中执行的 process
======================================
执行格式:jobs

.结束或终止在 background 中的 process
======================================
执行格式:kill %n
(n 为利用 “jobs” 命令,所查看出的 background job 编号)
Example:
%kill % 终止在 background 中的第一个 job。
%kill %2 终止在 background 中的第二个 job。

shell varialbe
==============
.查看 shell variable 之设定值
==============================
执行格式:set    查看所有 shell variable 之设定值。
%set

执行格式:echo $variable-name 显示指定的 shell variable 之设定值。
%echo $PRINTER
sp1

.设定 shell variable
=====================
执行格式:set var = value
Example:
%set term=vt100
设定 shell variable “term” 为 VT100 终端机之型式。

.删除 shell variable
=====================
执行格式:unset var
Example:
%unset PRINTER
删除 shell variable “PRINTER” 之设定值。

environment variable
=====================
.查看 environment variable 之设定值
====================================
执行格式:setenv  查看所有 environment variable 之设定值。
Example: %setenv

执行格式:echo $NAME 显示指定的 environment variable “NAME” 之设定值。
Example:
%echo $PRINTER
显示 environment variable “PRINTER” 列表机名称之设定值。

.设定 environment variable
===========================
执行格式:setenv NAME word
Example:
%setenv PRINTER sp1
设定 environment variable “PRINTER” 列表机名称为 sp1。

.删除 environment variable
===========================
执行格式:unsetenv NAME
Example:
%unsetenv PRINTER
删除 environment variable “PRINTER” 列表机名称之设定值。

alias
=====
.查看所定义的命令之 alias
==========================
执行格式: alias 查看自己目前定义之所有命令,及所对应之 alias 名称。
执行格式: alias name 查看指定之 alias 名称所定义之命令。
Example:
%alias dir (查看别名 dir 所定义之命令)
ls -atl

.定义命令之 alias
==================
执行格式: alias name ‘command line’
Example:
% alias dir ‘ls -l’
将命令 “ls - l” 定义别名为 dir。

.删除所定义之 alias
====================
执行格式: unalias name
Example:
%unalias dir (删除别名为 dir 之定义。)
%unalias * (删除所有别名之设定。)

history
=======
.设定命令记录表之长度
======================
执行格式: set history = n
Example:
%set history = 40
设定命令记录表之长度为 40 (可记载执行过之前面 40 个命令)。

.查看命令记录表之内容
======================
执行格式: history

.使用命令记录表
================
执行格式: !!
Example: %!! (重覆执行前一个命令)
执行格式: !n ( n 为命令记录表之命令编号。)
Example: %!5 ( 执行命令记录表中第五个命令。)
执行格式: !string ( 重覆前面执行过以 string 为起始字元之命令。)
Example: %!cat ( 重覆前面执行过,以 cat 为起始字元之命令。)

.显示前一个命令之内容
======================
执行格式: !!:p

.更改前一命令之内容并执行之
============================
执行格式: ^oldstring ^newstring
将前一命令中 oldstring 的部份,改成 newstring,并执行之。
Example:
%find . -name file1.c -print
^file1.c^core
%find . -name core -print

注:档案 core 为执行程式或命令发生错误时,系统所产生的档案。作为侦错(debug)之□
,因其所占空间极大,通常将之删除。

资料之压缩
==========
为了避免不常用的档案或资料,占用太大的磁碟空间,请使用者将之压缩。欲使用压缩过
的档案或资料前,将之反压缩,即可还原成原来之资料型式。凡是经过压缩处理之档案,
会在档名后面附加 ” .Z ” 之字元,表示此为一压缩档案。

.压缩资料
==========
执行格式:compress filename 压缩档案
执行格式:compressdir directory-name 压缩目录

.解压缩还原资料
================
执行格式:uncompress filename     反压缩档案
执行格式:uncompressdir directory-name 反压缩目录

pipe-line 之使用
================
执行格式:command1 | command2
将 command1 执行结果,送到 command2 做为 command2 的输入。
Example:
%ls -Rl | more
以分页方式,列出目前目录下所有档案,及子目录之名称。
%cat file1 | more
以分页方式,列出档案 file1 之内容。

I/O control
===========
.标准输入之控制
================
执行格式:command-line < file
将 file 做为 command-line 之输入。
Example:
%mail -s “mail test” user@iis.sinica.edu.tw < file1
将档案 file1 当做信件之内容,Subject 名称为 mail test,送给收信人。

.标准输出之控制
================
执行格式:command > filename
将 command 之执行结果,送至指定的 filename 中。
Example: %ls -l > list
将执行 “ls -l” 命令之结果,写入档案 list 中。
执行格式:command >! filename
同上,若 filename 之档案已经存在,则强迫 overwrite。
Example: %ls -lg >! list
将执行 “ls - lg” 命令之结果,强迫写入档案 list 中。
执行格式:command >& filename
将 command 执行时,萤幕上所产生的任何讯息,写入指定的 filename 中。
Example: %cc file1.c >& error
将编译 file1.c 档案时,所产生之任何讯息,写入档案 error 中。
执行格式:command >> filename
将 command 执行结果,附加(append)到指定的 filename 中。
Example: %ls - lag >> list
将执行 “ls - lag” 命令之结果,附加(append)到档案 list 中。
执行格式:command >>& filename
将 command 执行时,萤幕上所产生的任何讯息,附加於指定的 filename中。
Example: %cc file2.c >>& error
将编译 file2.c 档案时,萤幕所产生之任何讯息,附加於档案 error 中。

查看系统中的使用者:
===================
执行格式: who 或 finger
执行格式: w
执行格式: finger username or finger username@domainname

改变自己的 username 进入其他使用者的帐号,拥有其使用权利。
=========================================================
执行格式: su username
Example:
%su user 进入使用者 user 之帐号
passwrod: 输入使用者 user 之密码

查看 username:
==============
执行格式: who am i 查看 login 时,自己的 username。
执行格式: whoami 查看目前的 username。若已执行过 “su”命令(switch user),
则显示出此 user 之 username。

查看目前系上所有工作站的使用者:
===============================
执行格式: rusers
=> 结束

与某工作站上的使用者交谈:
=========================
执行格式: talk username@hostname 或 talk username@ip_address
Example:
1. 可先利用 rusers 指令查看网路上的使用者
2. 假设自己的帐号是 u84987 ,在工作站 indian 上使用,现在想要与 doc 上的
u84123 交谈。
%talk u84123@doc ==> 此时萤幕上将会出现等待画面
在对方(u84123)萤幕上将会出现下列讯息
Message from Talk_Daemon@Local_host_name at xx:xx
talk: connection requested by u84987@indian
talk: respond with: talk u84987@indian

此时对方(u84123) 必须执行 talk u84987@indian 即可互相交谈。
最后可按结束。

检查远端电脑系统是否正常
========================
执行格式:ping hostname 或 ping IP-Address
Example:
%ping doc

电子邮件(E-mail)的使用简介
==========================
本系之 E-mail address 为 ice.ntnu.edu.tw

..将档案当做 E-mail 的内容送出
=============================
执行格式:mail -s “Subject-string” username@address < filename
%mail -s “program” user < file.c
将 file.c 当做 mail 的内容,送至 user, subject name 为 program。

..传送 E-mail 给本系使用者
========================
执行格式:mail username
%mail user

..传送 E-mail 至 外地
====================
执行格式: mail username@receiver-address
Example
%mail paul@gate.sinica.edu.tw
Subject : mail test
:
:
键入信文内容
:
:
按下 “Control D” 键或 ” . ” 键结束信文。

连按两次 “Control C” 键,则中断工作,不送此信件。

Cc:
( Carbon copy : 复制一份信文,给其他的收信人 )

..检查所传送之 E-mail 是否送出,或滞留於本所之邮件伺服站中
=========================================================
执行格式:/usr/lib/sendmail -bp
( 若萤幕显示为 “Mail queue is empty” 之讯息,表示 mail 已送出。
若为其它错误讯息,表示 E-mail 因故尚未送出。)

..读取信件
=========
执行格式: mail
常用指令如下:
cd [directory] chdir to directory or home if none given
d [message list] delete messages
h print out active message headers
m [user list] mail to specific users
n goto and type next message
p [message list] print messages
q quit, saving unresolved messages in mbox
r [message list] reply to sender (only) of messages
R [message list] reply to sender and all recipients of messages
s [message list] file append messages to file
t [message list] type messages (same as print)
u [message list] undelete messages
v [message list] edit messages with display editor
w [message list] file append messages to file, without from line
x quit, do not change system mailbox
z [-] display next [previous] page of headers
! shell escape

档案编辑器 vi 之使用方法简介
============================
vi、celvis(cvi) 是在工作站上被广大使用的中英文编辑软体。对初学者而言,
常因其特殊的使用方法,而不得其门而入;对已经在使用 vi 的使用者来说,也
常见因对 vi 的不熟悉或不够了解,而无法发挥出 vi 强大的编辑能力,以下将
介绍 vi 之使用方法简介。

..本文内容大纲
=============
进入 vi
离开 vi
输入模式
如何进入输入模式
如何离开输入模式
指令模式
游标的移动
视窗的移动
删除、复制及修改指令介绍(delete、change、yank)
删除与修改(delete、replace)
搬移与复制(delete/put、yank/put)
指令重覆
取消前一动作(undo)
字串搜寻
资料的连接与分行
环境的设定
ex 指令
其它方面
中文编辑
恢复编辑时被中断的档案
编辑多个档案

vi 是 visual editor 的缩写,是 UNIX 所提供的编辑器之一。它提供使用者一个
视窗的编辑环境,在此视窗下,使用者可编辑所要的档案。

..进入vi
=======
直接执行 vi编辑程式即可:
%vi test
此刻萤幕上会出现 vi 的编辑视窗,同时 vi 会将档案复制一份至记忆体中
的缓冲区 (buffer) 。 vi会保留在磁碟中的档案不变,而先对缓冲区的档
案作编辑,编辑完成后,使用者可决定是否要取代原来旧有的档案。

..离开vi
=======
若在输入模式下,则先利用《ESC》进入指令模式,而后即可选用下列指令
离开vi。
:q! 离开vi,并放弃刚在缓冲区内编辑的内容。
:wq 将缓冲区内的资料写入磁碟中,并离开vi。
:ZZ 同wq。
:x 同wq。
:w 将缓冲区内的资料写入磁碟中,但并不离开vi。
:q 离开vi,若档案被修改过,则会被要求确认是否放弃修改的内容。
此指令可与:w 配合使用。

..vi 的操作模式
==============
vi 提供两种操作模式:输入模式(insert mode)和指令模式(command mode)
。当使用者进入 vi 后,即处在指令模式下,此刻键入之任何字元皆被视为
指令。在此模式下可进行删除、修改等动作。若要输入资料,则需进入输入
模式。

..输入模式
=========
如何进入输入模式
a (append) 由游标之后加入资料。
A 由该行之末加入资料。
i (insert) 由游标之前加入资料。
I 由该行之首加入资料。
o (open) 新增一行於该行之下供输入资料之用。
O 新增一行於该行之上供输入资料之用。

如何离开输入模式
《ESC》 结束输入模式。

..指令模式
=========
游标之移动
h 向左移一个字元。
j 向上移一个字元。
k 向下移一个字元。
l 向右移一个字元。
0 移至该行之首
$ 移至该行之末。
^ 移至该行的第一个字元处。
H 移至视窗的第一列。
M 移至视窗的中间那列。
L 移至视窗的最后一列。
G 移至该档案的最后一列。
+ 移至下一列的第一个字元处。
- 移至上一列的第一个字元处。
( 移至该句之首。 (注一)
) 移至该句之末。
{ 移至该段落之首。 (注二)
} 移至该段落之末。
nG 移至该档案的第 n 列。
n+ 移至游标所在位置之后的第 n 列。
n- 移至游标所在位置之前的第 n 列。
会显示该行之行号、档案名称、档案中最末行之行号、游标
所在行号占总行号之百分比。

注一:句子(sentence)在vi中是指以『!』、『.』或『?』结束的一串字。
注二:段落(paragraph)在vi中是指以空白行隔开的文字。

..视窗的移动
===========
视窗往下卷一页。
视窗往上卷一页。
视窗往下卷半页。
视窗往上卷半页。
视窗往下卷一行。
视窗往上卷一行。

..删除、复制及修改指令介绍 (此单元较少使用)
=========================
d(delete)、c(change)和y(yank)这一类的指令在 vi 中的指令格式为:
Operator + Scope = command
(运算子) (范围)
运算子:
d 删除指令。删除资料,但会将删除资料复制到记忆体缓冲区。
y 将资料(字组、行列、句子或段落)复制到缓冲区。
p 放置(put)指令,与 d 和 y 配和使用。可将最后delete或yank的资
料放置於游标所在位置之行列下。
c 修改(change)指令,类似delete与insert的组和。删除一个字组、句
子等之资料,并插入新键资料。

范围:
e 由游标所在位置至该字串的最后一个字元。
w 由游标所在位置至下一个字串的第一个字元。
b 由游标所在位置至前一个字串的第一个字元。
$ 由游标所在位置至该行的最后一个字元。
0 由游标所在位置至该行的第一个字元。
) 由游标所在位置至下一个句子的第一个字元。
( 由游标所在位置至该句子的第一个字元。
{ 由游标所在位置至该段落的最后一个字元。
} 由游标所在位置至该段落的第一个字元。

整行动作
dd 删除整行。
D 以行为单位,删除游标后之所有字元。
cc 修改整行的内容。
yy yank整行,使游标所在该行复制到记忆体缓冲区。

..删除与修改
===========
x 删除游标所在该字元。
X 删除游标所在之前一字元。
dd 删除游标所在该行。
r 用接於此指令之后的字元取代(replace)游标所在字元。
如: ra 将游标所在字元以 a 取代之。
R 进入取代状态,直到《ESC》为止。
s 删除游标所在之字元,并进入输入模式直到《ESC》。
S 删除游标所在之该行资料,并进入输入模式直到《ESC》。

..搬移与复制
==========
利用 delete 及 put 指令可完成资料搬移之目的。
利用 yank 及 put 指令可完成资料复制之目的。
yank 和 delete 可将指定的资料复制到记忆体缓冲区,而藉由 put 指令
可将缓冲区内的资料复制到萤幕上。
例:
搬移一行 .在该行执行 dd
.游标移至目的地
.执行 p
复制一行 .在该行执行 yy
.游标移至目的地
.执行 p

..指令重复
=========
在指令模式中,可在指令前面加入一数字 n,则此指令动作会重复执行 n
次。
例:
删除10行 .10dd
复制10行 .10yy
.游标移至目的地
.p
指标往下移10行 .10j

..取消前一动作(Undo)
===================
即复原执行上一指令前的内容。

u 恢复最后一个指令之前的结果。
U 恢复游标该行之所有改变。

..搜寻
=====
在vi中可搜寻某一字串,使游标移至该处。

/字串 往游标之后寻找该字串。
?字串 往游标之前寻找该字串。
n 往下继续寻找下一个相同的字串。
N 往上继续寻找下一个相同的字串。

..资料的连接
===========
J 句子的连接。将游标所在之下一行连接至游标该行的后面。

若某行资料太长亦可将其分成两行,只要将游标移至分开点,进入输入模式
(可利用 a、i等指令)再按《Enter》即可。
..环境的设定
===========
:set nu 设定资料的行号。
:set nonu 取消行号设定。
:set ai 自动内缩。
:set noai 取消自动内缩。

自动内缩(automatic indentation)
在编辑文件或程式时,有时会遇到需要内缩的状况,『:set ai』即提供自
动内缩的功能,用下例解释之:
.vi test
.(进入编辑视窗后)
this is the test for auto indent
《Tab》start indent ← :set ai (设自动内缩)
《Tab》data
《Tab》data
《Tab》data ← :set noai (取消自动内缩)
the end of auto indent.
.注: 可删除《Tab》字元。

..ex指令
=======
读写资料
:w 将缓冲区的资料写入磁碟中。
:10,20w test 将第10行至第20行的资料写入test档案。
:10,20w>>test 将第10行至第20行的资料加在test档案之后。
:r test 将test档案的资料读入编辑缓冲区的最后。

删除、复制及搬移
:10,20d 删除第10行至第20行的资料。
:10d 删除第10行的资料。
:%d 删除整个编辑缓冲区。
:10,20co30 将第10行至第20行的资料复制至第30行之后。
:10,20mo30 将第10行至第20行的资料搬移至第30行之后。

字串搜寻与取代
s(substitute)指令可搜寻某行列范围。
g(global)指令则可搜寻整个编辑缓冲区的资料。
s指令以第一个满足该条件的字串为其取代的对象,若该行有数个满足该条
件的字串,也仅能取代第一个,若想取代所有的字串则需加上g参数。
:1,$s/old/new/g 将档案中所有的『old』改成『new』。
:10,20s/^/ / 将第10行至第20行资料的最前面插入5个空白。
:%s/old/new/g 将编辑缓冲区中所有的『old』改成『new』。

..恢复编辑时被中断的档案
=======================
在编辑过程中,若系统当掉或连线中断,而缓冲区的资料并还未
被写回磁碟时,当再度回到系统,执行下列指令即可回复中断前
的档案内容。
%vi -r filename

..编辑多个档案
=============
vi亦提供同时编辑多个档案的功能,方法如下:
%vi file1 file2 ..

当第一个档案编修完成后,可利用『:w』将该缓冲区存档,而后
再利用 『:n』载入下一个档案。

No Comments ?
Unix/BSD26 Oct 2000 12:00 am
SCO UNIX 讲座

UNIX向来是强劲的作业系统,屹立多年不倒,但是,对一般使用
个人电脑的用户来说,确是比较陌生,有见及此,编辑部选择了
在个人电上也可运行自如,毋须庞大的Mainframe或甚麽大机器的
SCU UNIX,介绍给大家,让各位对另一广阔无限的作业领域探首
一下,也许玩起Internet时,会有另一番天地,别错过这一连十
二期的「UNIX自学篇」了。

可能有些人会误以为UNIX只是那些功能强劲的庞然大机方会使用
的作业系统,谁不知道在个人电脑上,一样可以使用,只不过所
使用的是特别为个人电脑设计的PC UNIX,SCO UNIX就是其
中的表表者。

对於惯用DOS或视窗环境的朋友来说,UNIX的第一重关卡就是那
些「敏感标号」(Sensitive Case),字母的大小写俱有不同的
意思,Ls、IS、LS或Is这些指令全不相同,所谓「差之毫□,谬
之千里」,它对大小写可是绝对敏感的。

文件名称

在SCO UNIX下,建立的文件档案名称,可以是包含最多十四个
字母数字字符的任意组合,既可使用下横「□」,也可使用句号
「。」。

不过,文件名称却不能使用某些特定字符,因为它们对Shell来说
有特定意义。这些不能用作文件名的字符,分别是「;」「|」、
「〈」、「〉」、「’」「$」、「!」 、「%」、「(」和「
)」,而文件名称中也不能含有空白空格等。

文件存取权

每个文件都可以拥有不同的存取权限,界定其它用户能否存取文
件和目录。

每个文件分为三类所有权:文件的属性、属主所在小组的成员(
即组员),可存取系统的其它用户。用「|」的指令,就可以查
看文件的权限。

drwxrwx…

好像上列的文件存取权限,第一个符号指示文件类型,减号为普
通文件,d则表示目录文件。接著的九个字符分成三组,分别表
示属主、组员和其它用户的存取权;每组有三种存取权:「代表
读(Read)、w代表写(Write)和x代表执行(Execute)。而没
有存取权的相应位置则会出现减号(-)代替。

目录存取权

基本上,文件与目录之间的存取权的设置大致一样,但仍有些微
分别。

首先,要查看目录的存取权限,就要在「|」之后,加一个空白
处,再加上「-d」。如果要改变当前目录,则用「cd」。

改变存取权限

要加文件或目录的存取权限,可用「chmod」的指令,例子如下:
$chmod g+rw filename

g代表更改组员可以享有的存取权限,+rw就是让组员可以读与写
该文件。而u则代表文件的属性,o代表其它用户;减号(-)则
代表取消某类人的某些存取权限。

另一种更改权限的方法,就是使用八进制的数值指定存取权。每
个符号赋与一个数值,r是4,w是2和x是1。例如组合读与写,其
存取权的数值就是6。又譬如欲使文件对文件属主、组员和其它用
户均具读写权,指令如下:
$chmod 666 filename

更改用户属主

每当创建新档案与目录时,标记你是属主,你的同组人员为组员,
如果要把文件的使用权交给别人,只有属主方可更改,指令如下:
$chown owner file

chown改变了文件的身分ID (UID)

改变属组要改变文件所属的组别--文件组ID(GID),指令变
为:
$chgrp group file

浏览文件内容

需要求助,可按?键。至於,浏览文件内容有几种方法,可使用
more,显示大文件,指令如下:
$more filename

按〈space bar〉,显示正文的下一全萤幕;按〈return〉,转往
下一行;按q进出文件;键入模式前缀(/),就可键入需要查找
的匹配模式,若模式找不到,则会显示「pattern not found」的
信息。

按pg则逐次翻一个萤幕,而每个全萤幕后,都随提示符(:),
按〈return〉,看下一萤幕,键入+n,向前移动n个萤幕;-n,
向后移动n个萤幕;打入$,则移到文件尾。

如果使用Cat看文件内容,就可以在全荧幕上滚动文件内容。在任
何位置,按<ctrl>s,文件就会停止滚动;按<ctrl>q,则会
继续滚动;按〈del〉则中断不看。

处理文件

cp指令为复制文件,可以有多种用法。

(一)$cp old.file new. file
备份一个文件

(二)$cp file 1 file 2 Test
将file 1和file 2复制到Test目录下

至於,mv则为改名指令,譬如

$mv fruit apples
就是fruit改名为apples

rm则是删除文件的指令。文件一经删除,就不能恢复它,故此,
要加倍小心。

$rm- i filename
加上「-i」,删除前,系统需要确认。

SCO UNIX UNIX 自学篇:第二讲shell环境

文:Santa Cruz Operation,Inc.

何谓shell shell是用户与作业系统之间的交互层,用户修改其环境,设置或
取消shell的环境变量,迎合用户的需要和爱好。

shell本身就是一个电脑程序,用C语言编写,为协助用户与作业
系统之间通讯而设计,管理用户与核心(Dernel)之间对话,并
把作业系统指令换成机器代码,其实PC用户常用的DOS,本身就
是一个shell。

sshell的用途

shell的主要任务是:提示用户打入指令,读指令,转换指令为核
心所能理解的语言。其实,shell可以看作为指令解释程序,提供
一些工具,亦可以利用shell的编写工具,构造电脑程序。

System V shell类

SCO System V的shell可分为四大类:Bourne shell;C shell;
Korn Shell;和菜单驱动shell。而菜单驱动shell可再细分为三
类,分别是Open Desktop,Sysadmsh或scoadmin和客户应用程序。

每个shell都有自己特定的环境文件,可以自行修改至合用,这些
环境文件就仿如DOS的批次档案(Batch File)。

Bourne shell

对普遍用户来说,Bourne shell可以说是第一个UNIX shell ,
它是由AT&T贝尔实验室Stephen Bourne所编写。默认提示(
Prompt)是美元符($),其环境文件为profile文件,由於文件
档案不大,可以马上启动执行。

profile是存放在主目录下的普通正文文件(Text File),通过
设置环境变量(Variable)和终端模式,可以使环境个人化,每
次注册进入系统时,shell会读入profile文件,并执行所列出的
指令。

每当系统管理员创建新用户的户口时,系统都会自动构造一个相
应的.profile文件;而整个系统的环境文件就放置在
/etc/.profile中。

用户可以使用vi或其他正文编器修改。若要使用env命令显示,由
於注册时已设置了这些变量,也不一定需要另行设置。

C shell

C shell是由Berkeley的Bill Joy编写,是标准BSD(Berkeley
System Distributou)命令解释,其默认提示是份符(%),环境
文件则是cshrc和.login。

C shell采用C语言,是UNIX和XENIX系统上公共软件的开发语
言,提供了方便工具,快速打入,校正和再打入命令行。

.login是C shell的注册环境文件,负责启动shell,注册时执行
一次,而.cshrc则存放常用指令如alias等指令。譬如我们要创建
一个永久别名,把命令who|sort|more别名化为wh,在提示(%)
后,只需要键入wh即可。用户可在.cshrc□键入下面一行:
alias wh ‘who/sort/more’

Korn shell

Korn shell是AT&T贝尔实验室David Korn所开发,是Bourne
shell的增强版本,综合了Bourne shell和C shell的特点和约定,
而Korn shell则比Bourne和C shell执行得更快。

Korn shell的默认提示与环境文件,跟其前身--Bourne shell一
样,同为美元符号($)和.profile文件。

进程控制

虽然同一时间,系统中运行许多进程,但是某一特定时刻,CPU只
会让一个进程使用,而CPU则在行使中的进程之间快速轮换,每
个进程所占用的时间,称为时间片。SCO System V为了保持、跟
踪或调度每个进程,会给每个进程一个进程标识号ID或PID。

要确定那些进程正在运行,用户可以使用ps显示阁下的进程;或
加上-e选项,显示所有进程;加-f选项,则显示的进程还包括已
启动指令的执行中进程;-u login显示某注册用户的进程。

在SCO UNIX System V中,如果阁下拥有Root指令的作用权,
就更可以看到所有进程。

当一个指令需要较长时间完成,可以在指令行后尾加入&元字符,
该指令就会在后台执行,但对交互工作方式的指令就不适用了。

菜单驱动shell

菜单驱动(Menu-Driven)shell可再细分为三项:

一、Open Desktop

Open Desktop采用XWindow图形用户介面,用户可用图符(Icon)
窗口和菜单操作,如Open Desktop的作业系统就是SCO UNIX
System V/386。

二、系统管理员Shell:Sysadmsh或scoadmin

Sysadmsh或scoadmin则是字符介面,用户可不用学习指令行语法
和选项,就可以执行大批指令。大多数系统管理任务仅由系统管
理处理,系统管理员则有特定的根口令(Root Password)。

三、客户应用程序

某些用户为了存取内部邮件、字处理或报表等应用程序时,方会
使用SCO System V,系统管理员可以装上这些程序,令它们在注
册时呈现。

许多程序提供一个菜单选项,用简单打键选取一个选项,用户毋
须记著指令和指令选项,亦能操控。



第三讲vi editor

文:Santa Cruz Operation,Inc

任何用户最常做的事要数创建和编辑文件,包括文档、报告和文
字,vi(Visual Editor)是一个有效而相对简单的全荧幕编辑,
使用vi,只要记著少量基本指令,就可以开始起步,再学习其他
更复杂的指令,而系统管理员则使用vi管理和维护系统。

vi是包含在SCO System V作业系统中的全荧幕编辑,其实,vi不
独存在於SCO UNIX内,而是UNIX内相当普及的文件编辑。开
启文件

无论是开启新档或修改旧文件,都可以使用vi,所需指令为:

$ vi filemane

如果文件是新的,就会在荧幕底部看到一个信息,告诉用户正在
创建新文件。如果文件早已存在,vi则会显示文件的首廿四行,
用户可再用游标(cursor)移动文件。

This is what vi looks like.





上面是一个经vi开启的模拟文件,一行开始处的波折号(~)表
示文件的结尾。指令态与插入态

vi使用了两种状态,一是指令态(Command Mode),另一是插入
态(Insert Mode)。当vi处於指令态时,打入的内容会视作指令
来解释;另一方面,当vi处於插入态时,就可以打入正文(text)
给文件。

大多数vi指令是单字符,由插入态改变为指令态,指〈Esc〉键;
而由命令态转为插入态,则可以使用下面的插入令,直接打入,
无需再按〈Return〉键。

—指令i在游标处插入正文

—指令I在一行开始处插入正文

—指令a在游标后追加正文

—指令A在行尾追加正文

—指令o在游标下面新开一行

—指令O在游标上面新开一行

要记著一点,在插入态处,不能打入指令,必需先按〈Esc〉键,
返回指令态。假若户不知身处何态,也可以按〈Esc〉键,不管处
於何态,都会返回指令态。

存档及退出

在修改文件时,如何存档及退出指定文件都非常重要。在vi内,
行使存档或退出的指令时,要先按冒号(:),改变为指令态,用
户就可以看见在荧幕左下方,出现冒号(:),显示vi已经改为指
令态,可以进行存档或退出等工作。

下面就是一些这方面常用的指令。

:q!放弃任何改动而退出vi,也就是强行退出

:w存档

:wq存档并退出vi

与wq的工作一样

:zz与wq的工作一样删除正文

删除或修改正文都是利用插入态,故此,下面所提及的指令只需
在插入态内,直接选入指令即行。

—x删除游标处字符(Character)

—nx删除游标处后n个字符

—nX删除游标处前n个字符

—ndw删除游标处下n个单词(word)

—dd删除整行

—d$或D删除由游标至该行最末

—u恢复前一次所做的删除

修改正文

当使用vi修改正文,加减字符时,就会采用另一组在插入态操作
的指令。

— r char由char代替游标处的字符

—Rtext〈Esc〉由text代替游标处的字符

—cwtext〈Esc〉由text取代游标处的单词

—Ctext〈Esc〉由text取代游标处至该行结尾处

—cc使整行空白,但保留游标位置,让你开始打入

—如删除指令一样,在指令前打入的数,表示执行该指令多少次。
正文模式检索

要检索文件,必需在指令态下进行。所谓「模式」,就是一个特
定字符串,其中可含空格符。

—/str〈Return〉向前搜寻str直至文件结尾处

—?str〈Return〉往后搜寻str直至文件开首处

—n同一方向上重复检索

—N相反方向上重复检索

—vi缠绕整个文件,不断检索,直至找到与模式相匹配的下一个
出现。其他

如果要在 vi执行期间,转到shell执行,使用惊叹号(!)执行系
统指令,例如在vi期间,列出当前目录内容,可以打入

:!If

另一方面,用户可以在主目录中创建.exrc环境文件,用set打入
选项,每次调用vi时,就会读入.exrc中的指令与设置。下面是
.exrc环境文件的实例:

set wrapmarging=8

set showmode

set autoindent

set number



SCO第四讲:系统管理

文:Santa Cruz Operation, Inc.

今次要谈的系统管理员负责管理SCO UNIX的系统,拥有独特的
注册名--root,能够读取任何文件,写入和删除任何文件,执
行任何实用程序和指令,亦可以执行和终止任何用户程序。
系统管理员的工作包括系统控制的任务,例如后援加锁和解锁终
端和记帐号、增加、隐退和撤消用户。亦可以给用户一些特权,
让他们实现特权系统任务。

基本指令

shell指令的基本数据结构是文件,因此,基本指令和操作包含以
下功能:

-显示及管理文件中的指令

-管理目录的指令

-输入输出重新定向和管道,重定向标准I/O,并执行组合指令$
W|grep ‘john’〉john,file

-输出重定向符(>)把标准输出重新定向输出到文件

--输入重定向符(<)把标准输入重定向从文件输入

-管道符(|)把标准输出重定向输出到别一指令

寻找文件

find(c)指令可以在层次目录中查找文件,例如:

$find/-name filename -exec rm {};

-name filename指定filename

-exec rm表示在所找的文件中执行rm移动这个指令

另外,用户亦可以加入,-print表达式,显示找到文件的全路径
名。

除此之外,find(c)也可以用来找出特定用户或用户组所持有的
文件,譬如:

$find/-user bin -print

$find/-group mmdf -print

又或者,用find(c)重新定向过滤程序,输出错误信息,例如:

$find/-name motd -print 2〉/dev/null

SCO shell

使用SCO shell,可以让用户从单个菜单中选出应用程序,管理
文件和目录,运行系统实用程序,要调用SCO shell,可键入:

$scosh

可以利用空格条键〈Space Bar〉或箭头键〈Pointer〉移动光标,
加亮所选的菜单项

-按〈Esc〉

回到上一级,或放弃当前操作

-按〈F3〉

显示所在字段中可用选项表

-按〈Ctrl〉v 在字段选项表中选出每一项

-按〈F1〉

显示求助信息

-按Quit或打入q 退出SCO shell

系统管理shell

需要调用系统管理员shell,应该打入:

$sysadmsh或$scoadmin

虽然每个用户都可以调用sysadmsh,但是,只有实权的用户才可
执行有关特权管理任务。

基本上,使用方法与SCO shell差不了多少,只是多了几个功能
键(Function Key),例如〈F5〉搜索,〈F6〉改变目绿和〈F7〉
执行格式。而且,scoadmin更可以在XWindow的图形环境下执行,
用户在图符(lcon)上找到不同的管理任务。

多重注册萤幕

控制台上,可以允许用户最多具有十二个不同注册期的萤幕。多
重萤幕令系统管理员可以同时执行几个任务。

系统启动时,控制台上的多重萤幕就会自动活动起来。同时按〈
Alt〉键与〈F1〉至〈F12〉功能键,实现萤幕之间转换。

至於,在终端上,启动多重注册萤幕,则可用mscreen实用程序,
为正确工作,mscreen要求为tty。例如启动两个萤,应该打入

$mscreen-n2

然后按〈Shift〉键与〈F1〉或〈F2〉键,在两个萤幕之间转换,
当注销时,确保所有萤幕注销。



SCO第五讲:电子邮件

文:Santa Cruz Operation,Inc.

在SCO System V下,每个用户都有一个系统维护的私人邮箱,
用户能够与系统任何用户或用户组之间收发电子邮件,所收发的
信息可以保留在邮箱内或作独立文件处理。 发送邮件

打入mail指令,后跟收件人注册名,就可发送邮件。假如发送邮
件给多个收件人,名字用空格符〈space〉分隔,而不是逗号。收
件人可以是一个单独注册名或一个别名,别名代表用户组,例如:

$mail peter amy

接著,萤幕上会出现subject:的提示符,用户即可打入简短的信
息说明,完成后,按〈Return〉键,然后,就可以编写邮件内容。

需要校正错误,就该使用空格符或左箭头键,用不当的空格符或
不合适的箭头键,即使在萤幕上看起来对,但是收件人可能只收
到不可读和篡改了的信息。请记著,mail内的内容编写,不是「
所见即所得」(What You See is What You Get)。

假若需要取消整个信息,按〈del〉键两次。写完邮件内容,按〈
Return〉键,取得新行后,按〈Ctrl〉d,发送邮件。d就是done(
完成)的缩写。

阅读邮件

每次注册进入系统时,系统都会通知阁下,在阁下的邮箱中可有
邮件,需要翻阅邮件,打入

$mail

若有邮件,每每邮件都会显示出相应的信息标题,包括信息数,
送件人及发送日期。下面是邮件范例:

$mail

SCO System V mail(Versin 3.2)Type? for Help

“/usr/spool/mail/joesco”:2 messages/new/unread

u2 mary Sun Aug 05 23:48 47/2109 level 2500

n1 paul Fri Aug 03 08:01 23/6332 Tardy reports!

要阅读来件,可以使用箭头键移动选取,按〈Return〉键阅读,
或在提示处,直接按入来件编号。若已读到邮箱中最后一批信息,
mail在萤幕上会显示”Can’t go beyond last message” 。

处理mail

当打入一个无效指令时,mail会回答一个问号,或”What” 的信息,
显示指令不清。假若用户想显示mail指令表,可以打入?;或打
入h,显示邮牛标题表;打入l,则会发送信息至打印机。另有一
些常用的指令,协助处理mail:

一、保留邮件

“s filename”按普通正文文件保存整个信息至filename内,连同
邮件的标题信息,一并送入文件内。

“w filename”撇除邮件标题后,保存信息到filename内。

二、删除邮件

“d x” 删除信息x这个信息号数

“u x”恢复被删除的x信息

三、覆件

“r”发信回答给送件人

“R”发送回答给To:和Cc:表上的所有用户

四、转发邮件

“f login”转发信息,予其它用户,并分送来件正文(Original
Message);login乃用作的注名

“F login”只转发信息,不分送来件正文

五、退出邮件

“q”退出mail程序,并更新所有改变

“x”退出mail程序,但不作任何改动

其它处理邮件的方法

除了以上所提到的基本指令处理邮件外,SCO UNIX尚有其他较
复杂的指令可整理邮件。在mail内,所有指令前都要加上波折号~
v,调用vi编辑,一旦完成编辑信息,通过vi的指令,例如保存和
退出指令:wq,就可返回mail程序;按〈Ctrl〉d,就可以直接发
送邮件信息。

其它mail的增强指令如下

-~m messate-no.把邮箱中指定信息

(message-no.)放到所编写的信息中

-~r filename读入指定文件(filename),送到当前信息中

-~p察看信息中的当前内容

-~?求助

为了方便mail通讯,系统管理员能够定义不同的特定单用户或组
别名,通过这些单个组、别名或名字,就可以把邮件信息发送给
全组用户。发送给别名成员,可键入如下指令:

$mail aliasname

如果要限制组员和其它用户的私人邮件的存取权限,可以使用
chmod指令,例子如下:

$chmod 600mbox

在普通电子邮件提示处打入set,可以控制选项,改变读和发送邮
件,这些选项可以由系统管理员为用户自动建立,也可以自己修
改这些设置,例如:

set page〓10

mailrc环境文件

mail的环境文件叫做mailrc,负责保存所要文件的永久记录。

与其它环境文件一样,mailrc必需放在主目录中,它是正文文件,
包涵有效的mail指令,mailrc通常包括set指令和alias 定义。

不过,运行mail程序,倒不一定要有.mailrc文件。如要查看
.mailrc,可以打入more .mailrc,下面是.mailrc的一个实例:

cd

-在mail内,改变主目录nset autombox

删除自动把所读件转送到私人邮箱

set page〓20

-若信息大於二十行,用more显示

alias crew john wanda frank

-发送给crew的邮件转发给表中列出的用户

set EDITOR〓/us/lib/word

-把word作为mail默认编辑unset chron

-显示当前最新邮件 上述的.mailrc例的□面,当打入$mail crew,
就能够把邮件发送给john,wanda和frank。

监视mbox是默认设置,如果不想设置的话,应该使用unset
autombox,而当mbox的内容很快增长时,通常会删去旧信息。如
果要读mbox中的邮件,可以使用如下指令:$mail -f mbox

第六讲:后援复制 Santa Cruz Operation,Inc.

电脑系统内,数据可是相当重要的一环。贮存数据的方法,可以
经软盘、硬盘或盒式带(Cartridge),盒式带通常为大量数据提
供后援(Backup)。

复制目录

在安装的文件系统中,把一个目录内容复制到另一个目录中,用
copy 指令:

$copy source> destination>

#copy -mor source> destination>

转换并复制文件

使用 dd(c)指令,可以把一个文件转换成另一个文件,也可以选择
文件的一部份传输,在传输的数据中,也可以交换字节顺序。

$dd if=/dev/fd0 of=/temp/save skip=5 count=86 bs=5k

上面的指令〃/dev/fd0〃 是指电脑上的软盘,〃skip=n〃代表在
复制到输出文件之前,跳过输入文件上的几个记录。〃bs=n〃则
表示设置输入输出字节块长度,用 k 表示 1024 字节。〃count=n〃
只复制输入记录的指定数。

同时,也可以利用 dd 指令检查归档(archive)情况,指令如下:

$dd if=dev/fd0 of=/dev/null bs=1k

1200+0 record read in

1200+0 record read out

归档文件:tar(c)

tar 是对非特权用户最易用和最可靠的实用程序(utility),从
归档介质上保留和恢复文件,亦能从多文件归档中抽取单个文件。
tar 归档使用文件和目录的相对或绝对路径名。

打入 tar,即会显示所有变量选项;”cv”是创建归档;”cv#”
用於来自 /etc/default/tar 的设备号 #;”rv”追加已有归档;”
uv”更新在已有归档上的文件;”tv”显示归档内容表;”xv”
从归档中抽取文件;”f”从指定文件中读入或写出;”L”使 tar
跟随符号连接继续追查下去,默认情况下则会忽略符号连接。

譬如要归档指定文件,而复盖盘上的已有数据,指令如下:

$cd pub

$tar cv6 ascii greek

volume end at 1199k, block factor=5k

seek=0k a ascii 3k

seek=3k a greek 1k

要列出 tar 归纳的内容:

$tar tv6

rw-r–r– 2/22114 Jan 2 13:41 1996 ascii

rw-r–r– 2/2475 Jan 2 13:41 1996 greek

创建 tar 归档,使用相对路径名,否则,恢复另一系统就会盖写
其他系统的文件。

#tar cv6 /etc/motd

#cd /tmp

#tar xv6

x /etc/motd, 943 bytes,2k

归纳文件

当需要后援指定设备、后援空设备与使用匹配符的时候,就不能
使用操作容易的 tar,而需要转用比较复杂的 cpio,用以归纳文件。

譬如,需要选取文件建立归档,指令如下:

$find /u/bill -print| cpio -oB -O /dev/fd0

20 blocks

又例如,需要抽取 cpio 归档文件名时:

$cpio -idmuBv -I /dev/fd0

.profile

ascii

eqnchar

greek

20 blocks

cpio 主要选项为:

-v 显示工作

-i 读归档

-o 写入归档

-t 内容表

-d 创建目录

-m 保留原修改日期

-U 无条复制

-B 分割因子置为 5k

-Cn 分割因子置为 n

-Kn 介质长度置为 n

后援复制

后援就是要平衡运行一般后援的代价与损失数据的代价,确定要
归档的数据类,并确定要用何级实现,以及确定所要求磁带的盘
数和带的容量,多久存储一次后援等等问题。

一般来说,后援复制可在 sysadminsh 或 scoadmin 执行。

所谓增量后援(Incremental Backup Levels),就是只需要以上
次归档后发生改变的那部分数据后援。当实现调度后援时,在
/usr/lib/sysadmin/last/中,将文件记录下来,可以透
过使用后援级来实现。

后援级的 0 级就是后援文件系统上全部文件;1 级则后援以上次
0 级后援以来改变的文件:2 级,后援以上次 0 级或 1 级后援以
来改变的文件;3 级,后援以上级 0级、1 级或 2 级后援以后改变
文件。

经定义后援工具后,后援调度(Backup Schedule)就可以更方便
地执行,配置档案则会被安置在 /usr/lib/sysadmin/schedule 中。

假若在紧急关头或特殊情况下,用户亦可以使用非调度放援,进
行紧急后援。



Unix自学篇:stepl……step8……

文:Santa Cruz Operation,Inc.

第七讲:用户管理

系统管理员的用户理工作包括:为系统中所有用户建立帐号;以
及当改变用户环境、口令与组别时,进行维护。

分析用户需求

每当需要增加用户时,系统管理员都会先分析用户需求,对每个
帐号成分,通过使用默认选项来满足用户需求。要从sysadmsh中
查看默认记帐选项时,可以使用以下选择。

Accounts□□〉Defaults

或scoadmin□□〉Account Manager

当建立帐号时,评估用户需求,查看是否需要修改记帐成分。若
用户仅用一个应用程序,编辑用户的.profile文件,在用户注册
时,每次均执行此文件。

默认值建立用户帐号(Default Parameter)

首先,打入用户注册名,小写与三至八个字符;填写注解栏时,
应包含标识信息,如用户全名、单位、电话号码等。另外,指出
是否愿意用系统默认方式建立帐号,抑或对帐号修改默认值,若
使用默认方法,则选No。确定你要增加的用户后,给出创建后的
文件和目录,再执行/tcb/lib/useshell指令,建立用户帐号,
不过,在UNIX系统指令中,要通过sysadmsh或scoadmin才能运行
此指令。

若决定改变用户记帐默认方式,则在建立帐号时选Yes,那麽就需
要填写每栏,在合适位置上,按〈F3〉或〈Esc〉,下面是关於非
默认的设定。

指定用户组

每个用户必须至少属於一个组。默认情况下,用户注册组是group。
在一个组内还包括读、写和执行文件的权限,附加用户权限给那
个组,作为指定组员的存取权限集。如要改变成组别,可用newgrp(
c)指令。

增加用户时,可以创建一个新组,或附加到一个已存在的组内。
有关组别的信息则存放在/etc/group中。凡增加用户创建新组
时,组名会自动递加到/etc/group文件内。

组ID能够由系统产生或人工指定,但必须在100到60,000范围内,
100号以下的ID留给子系统和其他默认组用。当管理一个网络系统
时,常需要指定GID(Group ID,组ID),避免混同各网络结点,
所以,最好先选用默认组ID。

指定逻辑shell

要知道用户打算选用哪个shell工作,SCO系统可选用以下几种不
同的shell工作:

csh: C shell。

ksh:Korn shell,组合了Bourne shell和C shell的特点以及指
令行编辑。

rksh:加限制的Korn shell。

rsh:加限制的Bourne shell。

scosh:SCO shell(图型化桌面)。

sh:Bourne shell。

uucp:UNIX到UNIX拷贝功能,它本身不是shell,而是成功注
册后运行的程序。

默认shell在/etc/default/authsh中指定,从/usr/lib/
mkuser目录结构内文件中,取到可采用的注册shell表。

指定主目录

默认主目录在/etc/default/authsh中定义,从/usr/lib/
mkuser/homepaths文件中,取到可采用主目录的选择。以及为用
户创建一个新的主目录。

指定用户ID(UID)必须是在200到60000范围内,指定在/etc/
default/authsh文件中,UID必须是独一无二的,防止在网络上
有相同的UID,而且,UID一旦设置,永不改变。

指定用户类

另外,还需要为用户设立他们的类别,种类如下:

-individual:个人记帐类。

-pseudo-usr:为各子系统任务设置帐号,注册时个人不应给
pseudo□usr记帐类,Operator、security officer和
administrator记帐类是pseudo□usr的其他名字。

-不能设置superuser和retired记帐类。

如果要能使用su(C)(所变用户身分命令),该用户必需被指定
为用户类individual,才能取用此域,为了用su另外记帐,用户
必须有su授权,知道帐号口令。low、traditional和improved为
安全默认值,被赋予su授权。在high 安全默认值下,则不赋予su授
权。

赋予用户被始口令

当创建新用户帐号时,就需要为用户设立或不选择不设立初始口
令。

-New:现在赋予口令,用户在注册时必需打入这个口令。

-Later:现在不赋予口令,在赋予口令前,用户不能注册。

-Blank:赋予空口令,用户能注册,但在注册时,强迫用户给出
一个口令。

-Remove:不赋予口令,用户能不用口令注册。

-Force Password Change:决定在用户首次注册时是否要用户强
迫改变口令。

在high安全性下,必须为每个用户产生一个口令。若赋予初始口
令,就应该告诉用户他的口令,希望他在首次注册时,立即修改
这个口令,修改口令时,不要选用别人能够轻易猜出来的口令,
如姓名或生日日期等,最好在口令中,加有一个非字符。

系统安全保护:修改用户默认帐号

为了防止被人滥用别人的用户帐号注册进入系统内,保障系统的
完整性,系统管理员需要修改一些用户的默认帐号,以及检查用
户的注册情况。

首先,管理员会设定不成功注册最大次数,计算使用不正确口令
注册的次数;当不成功注册超过最大次数,就设定加锁用户帐号
和终端。如果在完成注册时间之内,仍未能设置口令,也可加锁
用户的系统,甚至根户用也一样。在成功注册后,希望享受优先
CPU调度,则可以用nice(C)值,给用户she ll及由它启动的进
程,以调整优先级。设定值会存放在/etc/system/default中。

Unix自学篇--第八讲:监视进程管理

文:Santa Gruz Operation, Inc.

程序是一个可执行文件(Process)是正在运行程序一个实例。
SCO UNIX System V支持许多进程同时运行,各种系统通过调
用可用进程去创建新进程,与其他进程通讯,以及终止其他进程。

进程族系

新进程创建时,内核会分配一个进程标识号(PID)给它,并对
进程表中添加说明讯息。

由一个进程创建另一新进程,老进程为父进程,新进程为子进程。
用户Shell执行的大多数指令又是它的子进程,子进程则运行指令。
而父进程允许有多个子进程来实现任务等,待子进程完成。一个
父进程可以有多个子进程,但是,一个子进程只有一个父进程。

前台及后台进程

在Shell提示处打入指令后,创建一子进程运行命令,Shell等待
命令退出,然回到对用户提出提示符,这道指令与Shell同步运行,
即在前台运行。

在Shell提示 处打入的指令,若随一个&,Shell创建的子进程运行
此指令,但不等待指令退出,而直接返回到对用户提出提示。这
道指令与Shell同步运行,即在台运行。

$ sleep 10 &

精灵进程

精灵进程是一个进程,它与终端和用户都无联系,也有人喜欢称
他为管家婆。精灵完成一些周期性的事,平时它睡眠。用ps (C)
指令可看到精灵,它在tty区域中带有问号(?)。

-Sched:PID 0,它完成进程的程序在存储局和盘交换局之间交
换工作。

-init:PID 1,系统自动建的第一用户进程,它负责初始化引
导和注册过程,也就是所有非系统进程的祖先。它会在终端口上,
启动getty (M)进程。

-vhand:PID 2,页面精灵,它频繁地把储页面内容送往交换区。

-bdfush:PID 3,定期刷新高速缓到盘(默认情况,每13秒刷
新一次)

-logger:归档系统出错讯息。

-cron:在调度时运行作业。

-Ipsched:脱机打印精灵。

孩儿进程

孤儿进程在父进程终止仍旧活动,由init (M)认它为乾儿子。
僵□进程则是进程已终止,但进程还未撤消,因为父进程并未「
等待」它,进程表仍保留著这□体,进程表的□体是僵□进程所
消耗的资源。

随著新进程的创建,出现大量□体,但总数是有限制的,因此影
响新进程的产生。而孩儿进程与僵□进程不同,并不会影响系统
效率。

通常,在父进程死去时,才会移去僵□进程。若他们还未移去,
应由init (M)继承并移去它。

监视进程

监视进程监注册户的数量,用以记系统的性能;亦会监视用户进
程,包括挂起进程;以及装载均值等系统性能问题。

要显示进程信息,可以利ps (C)指令报告,进程状态。在默认
情况下,仅会报告与当前终端有联系的有关讯息。若用户没有root权
限,ps仅限以说明运行进程,报告用户的进程讯息。若用户有root权
限,则会报告在所有终端上所有用户的进程讯息。

$ ps-u joana

--u 〈username〉选项显示指定用户的讯息。

--t 〈ttynamt〉选项显示指定终端有关的进程讯息。

而ps -elf指令则提供了需有F、S、C、PRI、NI、TIME字段的
使用讯息。

-F是标记,指示进程位置,20表示在内存,0表示交换在盘上,
31是系统进程。

-S是状态讯息,指示进程状态,睡眠还是正在运行。

-C是进程占有CPU的百分率

-TIME是花费CPU的总时间。

-PRI是进程当前优先数

-NI是进程的nice (ADM)菜单

如何创建进程

当进程分岔一个子进程,自己就会进入睡眠状态。开始时,子进
程运行父进程的同一程序,由内核分配一个新的PID。当子进程
再去执行新的程序,保持新分配的PDI,新程序就会替代子进程
的原先程序。

当子进程完成后,内核会把它从系统中移去,再唤醒父进程,子
进程就会退出。

监视系统装载

uptime(C)指令显示装载均值(一分钟、五分钟和十五分钟),
即在预定时间上,排队运行进程的平均数:$uptime

W(C)指令产生如uptime(C)一样的装载均值讯息,并显示谁在
系统上做甚麽,若用户拥有root权限,W报告所有用户的有关讯 息。
若没有 ,仅显示与用户进程有关竹的讯息。

PCPU(Process CPU,进程CPU时间 )显示某道特定指令已运
行多久了。对控制不了的进程,这种检查是很有用的。JCPU(
Joint CPU,连合CPI时间),显示一个终端所涉的所有进程的
总时间。

sar (ADM)指令是一个系统活动报告程序,显示系统资源累积
利用率。为指示系统瓶颈口(Bottleneck),sar 是非常好的实
用程序,指令语法如下:$sar〔-option〕 〔
sample-interval-samples〕

例如:$sar-u120

-u选项显示CPU利用情况。如果%idle一致地低,使用效能是上升,
不过,运行的进程偷不到未用的CPU周期。

又例如使用-q选项显示进程吞吐量。假若%swpocc大於20,就发生
交换(Swapping),可以使用大内存能减少交换 /请负活动。



UNIX自学篇:第九讲:管理进程

文:Santa Cruz Operation, Inc.

用低优先级运行进程

nice(C)指令用於以较低的调度优先级执行命令,每个进程都有
一个 nice 值,用於计算它的优先级。nice 值在 0 到 39 范围内,
高值获得低优先级,不给实参的默认情况是 nice 值 20。超级用户
可指定负值,以提高优先级。

在注销进程后进程继续执行

后台启动的进程,默认情况下,当注销后就不再存在,但是,可
以使用 nohup(c)指令,让进程不受挂起和注销影响,得以继续
运行,例如:

$ nohup sort bigfile>sortfile &

4567

$ exit

当用户注销时,用户未用输出改向,输出将送到当前目录下的
nohup.out 文件中,如果当前目录不可写,则输出改向到
$HOME/nohup.out。

重新启动安全级精灵进程

根据 C2 安全级要求,某些精灵进程用 LUID (Login User
Identifier)标记运行,如此只能用 sd(ADM)实用程序重新启
动他们。

如果 LUID 限制有效的话(高安全级),只能用 sd(ADM),例
如 cron(C)这样的精灵,在高安全级下要 sd 重新启动它。

进程终止实用程序

需要终止实用程序时,可以通过发信息给进程,使它自杀,通常
会用在终止一些已挂起的或是运行的进程。

语法如下:

$ kill [-signal]

例如

$ kill 4411

4411:terminated

这样,只能终止运行优先级大於 25 的进程,小於 25 优先级的进
程只能在重新引导系统中撤注它。

调度单个作业执行

at(C)指令使得在某指定时间执行一组命令一次,主要用於在系统
活动较少的情况下,在预定时限(例如在半夜后或每日固定时间)
内运行指令。

要重新定向,可以使用标准输入,或可文件输入;在打入完整的
at 指令后,就会显示出将要运行的作业号与时间。

语法如下:

$ at time [date] [increment] < [filename]

任何用户都能运行一个 at 作业,但必须给予授权。

指定单个作业调度时间

时间格式为 hr:min 或 min,hr ,用 a.m 或 p.m 指定上午或下午,
有效时间包括 no on,midnight 和 now,指定日期则用「月日
〔年〕」格式,例如 Feb14。一星期那一天也可用 monday、
mon、today 或 tomorrow 代替。

.at 指令从标准输入中,读入打算在以后某一时刻所执行的命令:

$ at 14:00 Jan

sort /u/user1/file

/u/user1/sort

ctrl>d

job 61202778.a at Thu Jan 4 14:00:00 1996

记著使用时,要用全路径名指定文件。指令输出以电子邮件发送
给用户,也可输出改向到文件或终端。

列出单个调度作业

使用命令

$ at -1

job 612027780.a at Wed Jan 24 08:43:00 1996

job 612027900.a at Wed Jan 24 08:43:00 1996

若指定 jod_id,一般用户会得到一张自己所有作业的表,根用户
则能取得全部作业的表。

撤消单个调度作业

使用以下指令撤消作业:

$ at -r

可以使用匹配符撤销多个作业。at 的作业存放在
usr/spool/cron/atjobs

在一般数据库上调度作业

用 crontab (C)指令,从指定文件或标准输入拷贝或编辑成用户
的 crontab 文件,该文规定了在指定日期和时间调度运行一些指
令。

crontab 指令提供了对 cron 系统精灵要执行的作业,清理 /tmp ,
撤销在一般数据上日记文件或不想要的文件,以及检查空间,邮
寄警告予用户等。

/usr/lib/cron/cron.allow 文件列出了能使用 cron 的用户,
/usr/lib/cron/cron.deny 文件列出了拒绝存取 cron 的用户,仅
当 cron.allow 文件不存在时,cron.deny 文件才起作用。

指定作业及其调度时间

作业可能是单个指令或包含多道指令的 shell 脚本,指令输出邮
寄给用户,也可输出改向到文件或终端。在文件中打入作业及运
行时间,以运行此作业。文件可取任何名字,但是,不允许包括
首尾部和空白行,而且,最好取 .cronfile ,这种取名反映其功
能,易记易理解。.cronfile 文件可用正文编辑或 vi 创建。

每个用户仅提供一个 .cronfile文件,每当执行 crontab 指令时,
新文件会盖写原先文件。编辑已存在的 .cronfile 文件,增加或
修改一个作业,然后用 crontab 重新提交 .cronfile 。而每个用
户的登记项会存放在/usr/spool/crontabs/。

列出或修改 cron 作业

要列出当前提供的 cron 作业,可以打入:

$ crontab -1

修改 cron 项,使用指令:

$ crontab -1 >.cronfile

$ vi .cronfile

$ crontab .cronfile

如要撤销 cron 作业,则打入:

$ crontab -r

但有一样,请留意,根用户没有 .cronfile 文件。

Unix自学篇第十讲:打印管理

Santa Cruz Operation, Inc.

打印假脱机(Spooler)程序在系统引导时自动启动,负责打印服
务的安装、配置和管理,在指定打印机上,将用户打印请求进行
排队,能在不丢失排队打印请求下暂停打印。

打印机队列

打印机会被分组,每组共同存取一个队列(class)。而打印请求
可以送入一个 class ,也可送往指定打印机上。

在一个 class 中,可随时移去或增加打印机,用 sysadmsh 菜单或
scoadmin 的 Print Manager,可以增加打印机往已有的 class 中,
又或增加一个新 class。

打印机过滤程序

使用打印机过滤程序,可以转换用户文件或数据流,在给定打印
机上,合适地打印出来;处理两边打印,草图或高质量文字打印
等;如发现打印失败,会通知打印服务,然后告诉用户使用上出
现问题。

打印机过滤程序又称为打印机定义的接口脚本,存放在
/usr/spool/lp/bin。

安装和配置打印机

要把打印机接到并行埠(Parallel Port)上,SCO UNIX
System V 支持两个物理并行设备(/dev/lp[0-2])。当用主并行
埠时,用 LP0 或 LP1,中断向量为 7。第二个并行埠,/dev/lp2,
中断向量同为 7。

要把打印机接在串行埠(Serial Port)上,最好接上智能卡工作,
打印机能用任意有效串行埠名联系。若不要求硬件流控制,可以
使用非调制解调器控制埠名。

另一方面,可以从终端辅助埠上做局部打印,指令 lprint (C)
使用户从附在终端上的打印机上打印。

安装打印机

要安装打印机,先找一个未用的串行线路接上打印机,连好导线,
打开打印机开关,检查硬件连接。

然后,调用 sysadmsh 菜单或 Print Manager 上,加入打印机,用
合适的信息填好格式,指定打印机的 Class,若所指定的不存在,
就建立一新 Class,包含接口脚本路径名。许多打印机都能用
standard 接口脚本。

打印机管理

修改打印机配置时,可以增加或撤消目的地;改变打印机接口脚
本、设备等;以及改变默认打印机目的地。

管理打印机调度时,有几种选项需要注意:

-Stop:为实现某种打印机维护,必需将假脱打印机转换成 off。

-Begin:假脱机转换成 on。

-Accept :允许把打印请求送往打印机或 class 中。

-Reject:阻止请求假脱机打印。

-Enable:允许从打印机或 class 上打印。

-Disable:阻止打印,但允许假脱机出现。

每个打印请求都会赋予一个优先数,决定何时打印,优先数据取
值范围为 0(最高)到 39 (最低)。默认优先数值同样是 20。

所有打印请求或单个打印请求都能移到不同的队列或打印机上,
若打印机的队列阻塞或打印机不能用,就要移去打印请求;打印
机要维护,也要移去打印请求。如果已移去了所有请求,这个打
印机就不再接受新请求,直到打印机启用为止。

要清理打印机请求,先要指出打印机或请求 ID ,若指定了打印机,
则当前正在打印的作业也被清除,但是,不能使用通配符去匹配
清理打印请求。

第十一讲:TCP/IP 管理

Santa Cruz Operation,Inc.

IP(Internet Protocol)地址是 TCP/IP 网上为主机之间数据
选择路径(交换)的基础,但是,用户通常不甚喜欢使用由数字
组成的 IP 地址,而比较喜欢使用多由英文字母组成的主机名字--
URL(Uniform Resource Location)。

不过,主机名字必需映像到 IP 地址,而方法就是通过 /etc/hosts
文件完成。

配置 /etc/hosts

/etc/hosts 的格式是:地址--名字--别名。

例如:

127.0.0.1 localhost localhost

132.147.18.1 vision vision.sco.com

IP 地址必需是一行上的第一项,在它前面不应有任何字符,例如
空格符或制表符;名字是简单的主机名字;别名则在很多情况下
都不需要,但是,全限主机名字、简单主机名字和辖区名字都归
入别名之列。

检测 TCP/IP 配置

TCP/IP 协议的软件部份包括 TCP/IP 协议层架的顶三级,即
应用级(Application Protocol)、传送级(Transport Protocol)
和网际网级(Internet Protocol)。特定的主机名字”Localhost”
是特殊网络”loopback”上的本地主机的别名。

要检测 TCP/IP 协议层架的软件部份,使用 ping 指令:

#ping localhost

如果 Ping localhost 失败,则使用 netstat -i
,检查网络接
口的状况,显示网络接口上分组传输的统计讯息,指令如下:

#netstat -i

n 选项强行显示编号,而不是名字。netstat 查看自环驱动器 lo0 ,
如果 lo0 失败,则在 /etc/tcp 中”ifconfig lo0”行指示坏了或
有错误。

检测 TCP/IP 硬件

审核引导过程中,会对所职别的网络接口产生的配置报告,而
TCP/IP 协议的硬件部分包括 TCP/IP 协议层架的底两级,即
网络接口级和物理/硬件级。

对网上另一主机的任何通讯都是在「物理」网络接口上传输,并
不会引起数据传输到「自环」网络上。

使用 ping 指令检测 TCP/IP 协议层架的硬件部份。

#ping hostname



#ping IP-address

如果 ping 指令失败,则改用 netstat -i
审核网络接口。

了解 netstat -i 的输出

如果远地主机上使用 ping 之后,Opkts 和 Ipkts 仍然是零,那麽,
网络接口大概使用了不同的中断(Interrupt),而不是它的设备
驱动程序。

如果 Ipkts 不是零,而 Opkts 等於 Oerrs,那麽,网卡的 I/O 地址
可能不正确。如果 Ipkts 是零,而 Opkts 等於 Oerrs ,那麽,可
能是网络电缆连接的不合格。

通过用 Opkts 除 Cloois ,再用 100 乘所得的结果,计算冲突的百
份比。如果冲突的百份比少於百份之五到十,那麽,所有网络接
口是有效运行。

如果 ping 失败,并查出网络接口有问题,那麽,就该验证网络介
质操作。

调整 TCP/IP 的核心参数

没有足够的流资源(Stream Parameter),网络程序是不能进行
通讯;流资源不充份的话,经常会导致较慢的吞吐率。

要核查流资源,使用 netstat -m ;也可以使用 crash 指令考察流
资源,在出现 crash 发出的提示符’>”时,打入”strstat”。

如果在 FAIL 列的下面有不等於零的项目,那麽,同一行中的
ITEM 的项目可能需要调整。如果 FAIL 列下的数目大於或等於
TOTAL 列中数目的百份之十,该资源每次应增加一或二,但不
能将该数目加倍。

由於流资源使用 RAM,当增加流资源时,应加倍小心。用户亦可
以使用 configure 或 sysadmsh 增加特定的流资源,重新连接核心
或重新引导。

限制通过 ftp 访问系统的权限

对於不想令其使用 ftp 跨网访问系统的人,可以通过建立
/etc/ftpusers 文件和设立系统帐户名字的方法,阻止他获得利
用 ftp 访问系统的权限。

如果 /etc/ftpusers 不存在的话,先要建立。在单独的行上,加
上系统帐户的名字,表明不能从网中其它系统使用 ftp 访问该系
统,在安全系统中,不允许 ftp 访问用户权和 uucp ,列出任何其
限制使用 ftp 的用户名字。



第十二讲:使用 TCP/IP

Santa Cruz Operation,Inc.

向远地注册的能力非常有用,它让我们不用到远地系统所在处,
就能运行远地主机上的程序,执行远地系统管理,有两道指令可
用於远地主机注册,就是 rlogin 和 telnet。

使用 rlogin 向远地主机注册

rlogin 允许向具有 UNIX 作业系统和 TCP/IP 协议的任何系统
注册,而 rlogin 只能注册到 UNIX 作业系统环境,指令如下:

$rlogin remot-host-name

要避免 rlogin 因没有提供远地主机上的同名帐户,可以使用下述
指令:

$rolgin remote-host-name -1 remote-user-name

-1 选项用於指出远地用户帐户。

要中止 rlogin ,则要打入 ~.,并按 Enter/Return>键;亦可使用
logout 或 exit 指令。

使用 Telnet 向远地主机注册

不管其作业系统类型,只要能支援 TCP/IP 协议,都可以使用
Telnet 指令,允许注册。

$telnet hostname



$telnet ip-address

使用 ftp 复制或传送文件

ftp(File Transfer Protocol)允许用户对远地主机复制文件,
用户毋须考虑作业系统类型,即能向或从任何具有 TCP/IP 的系
统复制文件。

ftp指令允许复制目录中的一个文件或所有文件,但不能复制多层
次目录。使用 ftp时,必需在远地主机上设有帐户。

当 ftp 注册到远地系统时,并未得到 shell ,而是通过 ftp 指令
解释程序同远地主机进行通讯。

$ftp remote-host-name



$ftp remote-host-ip-address

一旦注册成功,就会出现 ftp 指令解释程序的提示。

ftp>

用户可以在此,使用打开指令连接主机。

ftp>open remote-host-name

复制某一文件回自己的系统中,则用:

ftp>get filename

如果只想传送某一文件往远地主机,则用:

ftp>put filename

需要复制远地主机的全部文件进入自己的系统内,可以使用如下
指令:

ftp>mget *

相反,如果想传送自己的文件往远地主机,则使用如下指令:

ftp>mput *

rcmd

rcmd 允许用户不必向远地主机注册,而直接运行该主机上的指令,
实际上,也要进行注册,只不过用户毋须作其它操作。当使用 rcmd
在远地主机上运行任何指令时,其输出的默认设备就会被更改为
终端。

$rcmd remote-host-name man sh

请求特殊终端处理的指令,将不含设备自身的功能,因为对远地
指令没有定义终端的类型,要求在远地主机上配置受托访问。

要列表输出远地主机上磁盘的利用情况,则使用下述指令:

$rcmd remote-host-name df

要列表输出远地主机上的目录,使用如下指令:

$rcmd remote-host-name ls /usr/games

要把远地主机上的文件备份到远地主机上的袖珍磁带内时,指令
如下:

#rcmd remote-host-name tar cvf /dev/rct0/usr



#rcmd remote-host-name “find /usr -depth -print|cpio -oc
> /dev/rct0

要把本地系统上的文件备份到远地主机上的袖珍磁带内时,使用
下述指令:

#tar cvf -/usr|rcmd remote-host-name dd of=/dev/rct0



#find /usr -depth -print|cpio -oc|rcmd remote-host-name
dd of=/dev/rct0

另一方面,如果要把远地主机上的文件备份到本地系统上的袖珍
磁带内时,可以使用如下指令:

#rcmd remote-host-name “tar cvf -/usr” > /dev/rct0



#rcmd remote-host-name “find /usr -depth -print|cpio -oc”
> /dev/rct0

No Comments ?
Unix/BSD26 Oct 2000 12:00 am
UNIX的Script

<<<目录>>>
□前言
□将文字档设为可执行的Shell Script
□Script的基本结构及观念
□Bourne Shell
一、变数
二、执行命令
三、流程控制
□C Shell
一、变数
二、执行命令
三、流程控制

□附录A expr命令
□附录B test命令

□前言

在DOS 中,你可能会从事一些例行的重覆性工作,此时你会将这些重覆性的命令写
成批次档,只要执行这个批次档就等於执行这些命令。大家会问在UNIX中是否有批次处
理这个东东,答案是有的。在UNIX中不只有如DOS 的批次处理,它的功能比起DOS 更强
大,相对地也较复杂,已经和一般的高阶语言不相上下。在UNIX中大家都不叫做批次档
,而叫做Shell Script。

一般而言,Shell Script的地位和其它的可执行档(或命令)是完全相同的,只不
过Shell Script是以文字档的方式储存,而非二进位档。而执行Shell Script时,必须
有一个程式将其内容转成一道道的命令执行,而这个程式其实就是Shell ,这也就是为
什麽我们叫做Shell Script的原因(往后我们称为Script)。不同Shell 的Script基本
上会有一些差异,所以我们不能将写给A shell 的Script用B shell 执行。而在UNIX中
大家最常使用Bourne Shell以及C Shell ,所以这堂课就介绍这两种Script的写法。

□将文字档设为可执行的Shell Script

如果我们已经写好Script,如何将其设成可执行档呢?因为Script其实是一个可执
行档,所以必须将其存取权设定成可执行。我们可以使用下列命令更改存取权:

chmod u+x filename 只有自己可以执行,其它人不能执行
chmod ug+x filename 只有自己以及同一群可以执行,其它人不能执行
chmod +x filename 所有人都可以执行

而我们如何指定使用那一个Shell 来解释所写的Script呢?几种基本的指定方式如
下所述:
1. 如果Script的第一个非空白字元不是”#”,则它会使用Bourne Shell。
2. 如果Script的第一个非空白字元是”#”时,但不以”#!”开头时,则它会使用C Shell。
3. 如果Script以”#!”开头,则”#!”后面所写的就是所使用的Shell,而且要将整个路径
名称指出来。

名称指出来。
这里建议使用第三种方式指定Shell ,以确保所执行的就是所要的。Bourne Shell的路
径名称为/bin/sh ,而C Shell 则为/bin/csh。

1. 使用Bourne Shell
┌——————————┐ ┌——————————┐
│echo enter filename │ │#!/bin/sh │
│ . │ or │ . │
│ . │ │ . │
│ . │ │ . │
└——————————┘ └——————————┘

2. 使用C Shell
┌——————————┐ ┌——————————┐
│# C Shell Script │ │#!/bin/csh │
│ . │ │ . │
│ . │ │ . │
│ . │ │ . │
└——————————┘ └——————————┘

3. 使用/etc/perl
┌——————————┐
│#! /etc/perl │
│ . │
│ . │
│ . │
└——————————┘

除了在Script内指定所使用的Shell 外,你也可以在命令列中强制指定。比如你要
用C Shell 执行某个Script,你可以下这个命令:

csh filename

此时的Script的存取权就不一定要为可执行档,其内部所指定的Shell 也会无效,详细
的情形后面会讨论。

□Script的基本结构及观念

Script是以行为单位,我们所写的Script会被分解成一行一行来执行。而每一行可
以是命令、注解、或是流程控制指令等。如果某一行尚未完成,可以在行末加上”/” ,
这个时候下一行的内容就会接到这一行的后面,成为同一行,如下
┌———————————┐
│echo The message is / │
│too long so we have / │
│to split it into / │
│several lines │
└———————————┘
当Script中出现”#” 时,再它后面的同一行文字即为注解,Shell 不会对其翻译。
在Script中要执行一个命令的方法和在命令列中一样,你可以前景或背景执行,执
行命令时也会需要设定一些环境变数。
Script的流程控制和一般高阶语言的流程控制没有什麽两样,也和高阶语言一样有
副程式。这些使得Script的功能更加强大。
为了达到与高阶语言相同的效果,我们也可以在Script中设定变数,如此使Script
成为一个名付其实的高阶语言。

□Bourne Shell

一、变数

Bourne Shell的变数型态只有字串变数,所以要使用数值运算则必须靠外部命令达
成目的。而其变数种类有下列几种:

1. 使用者变数
这是最常使用的变数,我们可以任何不包含空白字元的字串来当做变数名称。
设定变数值时则用下列方式:

var=string

取用变数时则在变数名称前加上一”$” 号。

┌———————┐
│name=Tom │
│echo name │
│echo $name │
└———————┘
结果如下:
name
Tom

2. 系统变数(环境变数)
和使用者变数相似,只不过此种变数会将其值传给其所执行的命令。要将一使
用者变数设定为系统变数,只要加上:

export var

┌———————┐
│name=Tom │
│export name │
└———————┘

以下是使用者一进入系统之后就已设定好的系统变数:

$HOME 使用者自己的目录
$PATH 执行命令时所搜寻的目录
$TZ 时区
$MAILCHECK 每隔多少秒检查是否有新的信件
$PS1 在命令列时的提示号
$PS2 当命令尚未打完时,Shell 要求再输入时的提示号
$MANPATH man 指令的搜寻路径

3. 唯读的使用者变数
和使用者变数相似,只不过这些变数不能被改变。要将使用者变数设成唯读的
,只要加上:

readonly var

而若只打readonly则会列出所有唯读的变数。还有一点,系统变数不可以设定
成唯读的。

┌———————┐
│name=Tom │
│readonly name │
│echo $name │
│name=John │
│readonly │
└———————┘
结果如下:
Tom
name: is read only
readonly name
readonly ……

4. 特殊变数
有些变数是一开始执行Script时就会设定,并且不以加以修改,但我们不叫它
唯读的系统变数,而叫它特殊变数(有些书会叫它唯读的系统变数),因为这
些变数是一执行程式时就有了,况且使用者无法将一般的系统变数设定成唯读
的。以下是一些等殊变数:

$0 这个程式的执行名字
$n 这个程式的第n个参数值,n=1..9
$* 这个程式的所有参数
$# 这个程式的参数个数
$$ 这个程式的PID
$! 执行上一个背景指令的PID
$? 执行上一个指令的返回值

当你执行这个程式时的参数数目超过9 个时,我们可以使用shift 命令将参数
往前移一格,如此即可使用第10个以后的参数。除此之外,吾人可以用set 命
令改变$n及$*,方法如下:

set string

如此$*的值即为string,而分解后则会放入$n。如果set 命令后面没有参数,
则会列出所有已经设定的变数以及其值。

档名:ex1 参数:this is a test
┌———————————┐
│echo Filename: $0 │
│echo Arguments: $* │
│echo No. of args.: $# │
│echo 2nd arg.: $2 │
│shift │
│echo No. of args.: $# │
│echo 2nd arg.: $2 │
│set hello, everyone │
│echo Arguments: $* │
│echo 2nd arg.: $2 │
└———————————┘
结果如下:
Filename: ex1
Arguments: this is a test
No. of args.: 4
2nd arg.: is
No. of args.: 3
2nd arg.: a
Arguments: hello, everyone
2nd arg.: everyone

值得一提的是,当你想从键盘输入一变数值时,你可以使用下面的命令:

read var1 var2…..

这时read会将一个字分给一个变数。如果输入的字比变数还多,最后一个变数会将
剩下的字当成其值。如果输入的字比变数还少,则后面的变数会设成空字串。
如果需要处理数值运算,我们可以使用expr命令。其参数及输出列於附录A。

二、执行命令

在Bourne Shell中有五种方法执行一个命令,而这五种方式所产生的果有些许的不
同。
1. 直接下命令
这个方式和在命令列中直接下命令的效果一样。
2. 使用sh命令

sh command

这个档案必须是Bourne Shell的Script,但这个档案并不一定要设成可执行。
除此之外和直接下命令的方式一样。
3. 使用”.”命令

. command

这时和使用sh命令相似,只不过它不像sh一般会产生新的process ,相反地,
它会在原有的process 下完成工作。
4. 使用exec命令

exec command

此时这个Script将会被所执行的命令所取代。当这个命令执行完毕之后,这个
Script也会随之结束。
5. 使用命令替换
这是一个相当有用的方法。如果想要使某个命令的输出成为另一个命令的参数
时,就一定要使用这个方法。我们将命令列於两个”`” 号之间,而Shell 会以
这个命令执行后的输出结果代替这个命令以及两个”`” 符号。

str=’Current directory is ‘`pwd`
echo $str
结果如下:
Current directory is /users/cc/mgtsai
这个意思是pwd 这个命令输出”/users/cc/mgtsai”,而后整个字串代替原
来的`pwd` 设定str 变数,所以str 变数的内容则会有pwd 命令的输出。

number=`expr $number + 1`
这就是先前所提要作数值运算的方法,基本上expr命令只将运算式解,而
后输出到标准输出上。如果要将某变数设定成其值,非得靠命令替换的方
式不可。这个例子是将number变数的值加1 后再存回number变数。

三、流程控制

在介绍流程控制之前,我们先来看看test命令。test命令的参数是条件判断式,当
条件为真时则传回非零值,而条件为伪时则传回零。在所有的流程控制都必须用到
test命令来判断真伪。而test命令的使用方法则列於附录B。

test $# = 0
如果执行这个程式没有参数时,会传回非零值代表”$# = 0″这个条件成立。反
之则会传回零。

以下介绍各种流程控制:

1. if then
语法以及流程图如下

语法以及流程图如下
│ FALSE
if (condition) <condition>—┐
then │TRUE │
then-commands then-commands │
fi ├————┘


condition 是一个test命令。往后所介绍的各种流程中的condition 都是test
命令。

档名:chkarg
┌———————————┐
│if (test $# != 0) │
│ then │
│ echo Arg1: $1 │
│fi │
└———————————┘
$ chkarg Hello
Arg1: Hello
$ chkarg
$

2. if then else
语法以及流程图如下
│ FALSE
if (condition) <condition>—————┐
then │TRUE │
then-commands then-commands else-commands
else ├————————┘
else-commands │
fi

3. if then elif
语法以及流程图如下
│ FALSE
if (condition1) <condition1>—┐
then │TRUE │ FALSE
commands1 commands1 <condition2>—┐
elif (condition2) │ │TRUE │
then │ commands2 commands3
commands2 ├—————┴————┘
else │
commands3

commands3
fi

echo ‘word 1: /c’
read word1
echo ‘word 2: /c’
read word2
echo ‘word 3: /c’
read word3
if (test “$word1″ = “$word2″ -a “$word2″ = “$word3″)
then
echo ‘Match: words 1, 2, & 3′
elif (test “$word1″ = “$word2″)
then
echo ‘Match: words 1 & 2′
elif (test “$word1″ = “$word3″)
then
echo ‘Match: words 1 & 3′
elif (test “$word2″ = “$word3″)
then
echo ‘Match: words 2 & 3′
else
echo ‘No match’
fi

4. for in
语法以及流程图如下
│ FALSE
for var in arg-list ┌—<arg-list还有东西吗?>—┐
do │ │TRUE │
commands │ 从arg-list取得一项 │
done │ 放到变数var │
│ │ │
│ commands │
└——————┘ │
┌———————————┐ ┌———————┘
│for a in xx yy zz │ │
│ do │
│ echo $a │
│done │
└———————————┘
结果如下:
xx
yy

yy
zz

5. for
语法以及流程图如下
│ FALSE
for var ┌—<参数中还有东西吗?>—┐
do │ │TRUE │
commands │ 从参数中取得一项 │
done │ 放到变数var │
│ │ │
│ commands │
└—————┘ │
档名:lstarg ┌———————┘
┌———————————┐ │
│for a │
│ do │
│ echo $a │
│done │
└———————————┘
$lstarg xx yy zz
xx
yy

yy
zz

6. while
语法以及流程图如下
│ FALSE
while (condition) ┌—<condition>—┐
do │ │TRUE │
commands │ commands │
done └————┘ │
┌————┘


┌———————————————┐
│number=0 │
│while (test $number -lt 10) │
│ do │
│ echo “$number/c” │
│ number=`expr $number + 1` │
│done │
│echo │
└———————————————┘
结果如下:
0123456789

7. until
语法以及流程图如下
│ TRUE
until (condition) ┌—<condition>—┐
do │ │FALSE │
commands │ commands │
done └————┘ │
┌————┘

它和while 的不同只在於while 是在条件为真时执行回圈,而until 是在条件
为假时执行回圈。

8. break及continue
这两者是用於for, while, until 等回圈控制下。break 会跳至done后方执行
,而continue会跳至done执行,继续执行回圈。

9. case
语法以及流程图如下
│ TRUE
case str in <str=pat1>————commands1—┐
pat1) commands1;; │FALSE TRUE │
pat2) commands2;; <str=pat2>————commands2—┤
pat3) commands3;; │FALSE TRUE │
esac <str=pat3>————commands3—┤
│FALSE │
├————————————┘

而pat 除了可以指定一些确定的字串,也可以指定字串的集合,如下

* 任意字串
? 任意字元
[abc] a, b, 或c三字元其中之一
[a-n] 从a到n的任一字元
| 多重选择

┌———————————————┐
│echo ‘Enter A, B, or C: /c’ │
│read letter │
│case $letter in │
│ A|a) echo ‘You entered A.’;;│
│ B|b) echo ‘You entered B.’;;│
│ C|c) echo ‘You entered C.’;;│
│ *) echo ‘Not A, B, or C’;; │
│esac │
└———————————————┘

10. 函数
格式如下

function-name()
{
commands
}

而要呼叫此函数,就像在命令列下直接下命令一般。

□C Shell

C Shell 有些特性和Bourne Shell一样,但有些不相同。这里介绍与Bourne Shell
不相同的地方。

一、变数

1. 字串变数
这个部分和Bourne Shell的变数一样,只不过在设定变数值时不能使用Bourne
Shell的方式,而必须
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: