常用的Linux命令

Linux 专栏收录该内容
11 篇文章 0 订阅

       本文引用自网络,但是不知道作者是那位,但是仍然很感谢他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[n],检查网络接 口的状况,显示网络接口上分组传输的统计讯息,指令如下:

#netstat -i[n]

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[n] 审核网络接口。

了解 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的方式,而必须

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值