2012-07-15 17:28:16 long316 阅读数 11
Unix学习笔记
http://su1216.iteye.com/blog/1612530
2011-11-13 15:48:10 liuhui168168 阅读数 4

=====================================================

Unix 学习笔记

=====================================================

主讲:程欣

一、Unix前言

1969年在贝尔实验室发明了Unix

非常稳定

扩展名没什么用

Solaris 10: 5.11

服务器:三大公司垄断(IBM HP SUN)

二、Unix基础知识

1、什么叫daemon(精灵进程):

name pid ppid

A 1000

B 1001 1000

操作系统管理:

子进程在结束的时候,父进程要回收子进程的资源

比如说进程号,进程的V(Virtual)表

如果子进程结束了,父进程没有时间回收子进程的资源,子进程叫:僵死进程

如果父进程提前结束,子进程叫孤儿进程

init 1号进程,管理操作系统所有的孤儿进程,孤儿院进程

daemon(后台常驻留的精灵进程):

1. 孤儿进程

2. 必须脱离终端

3. 必须chdir("/"),让当前的程序可以卸载。

2、登录服务器

右键打开终端

telnet 192.168.1.250

login : briup

passwd: briup(不显示)

id(显示坐标)

su(切换用户)

passwd(修改密码)

pwd(显示当前路径)

users(显示当前在线用户)

who(详细显示当前在线人数)

csh

tcsh

bash

telnet 192.168.1.250

login:xuxiang

new password:

三、Unix常用命令

1、关于档案/目录处理的指令:

1) ls

这是最基本的档案指令。ls 的意义为 "list",也就是将某一个目录或是某一个档案的内容显

示出来。

如果你在 ls 指令後头没有跟任何的档案名,它将会显示出目前目录中所有档案。

也可以在 ls 後面加上所要察看的目录名称或档案的名称,如

% ls /home2/X11R5

% ls first

ls 有一些特别的参数,可以给予使用者更多有关的资讯,如下:

-a : 在 UNIX 中若一个目录或档案名字的第一个字元为 "." , 则使用 ls

将不会显示出这个档案的名字,我们称此类档案为隐藏档。如tcsh

的初设档 .tcshrc;如果我们要察看这类档案,则必须加上参数 -a 。

-l : 这个参数代表使用 ls 的长( long )格式,可以显示更多的资讯,

如档案存取权,档案拥有者( owner ),档案大小,档案最後更新

日期,甚而 symbolic link 的档案是 link 那一个档等等。如下

% ls -l

drwx--x--x 2 jjtseng 512 Aug 8 05:08 18

drwx--x--x 2 jjtseng 512 Aug 8 22:00 19

-rw------- 1 jjtseng 566 Aug 8 05:28 makefile

2) cp

cp 这个指令的意义是复制("COPY") , 也就是将一个或多个档案复制成另

一个档案或者是将其复制到另一个目录去。

cp 的用法如下:

cp f1 f2 : 将档名为 f1 的档案复制一份为档名为 f2 的档案。

cp f1 f2 f3 ... dir : 将档案 f1 f2 f3 ... 都以相同的档名复制一

份放到目录 dir 里面。

cp -r dir1 dir2 : 将 dir1 的全部内容全部复制到 dir2 里面。

cp 也有一些参数,如下:

-i : 此参数是当已有档名为f2 的档案时,若迳自使用 cp 将会将原来 f2

的内容掩盖过去,因此在要盖过之前必须先询问使用者一下。如使用者

的回答是y(yes)才执行复制的动作。

-r : 此参数是用来做递回复制用,可将一整颗子树都复制到另一个

目录中。

3) mv

mv 的意义为 move , 主要是将一档案改名或换至另一个目录。如同 cp ,它也有

三种格式:

mv f1 f2 : 将档名为 f1 的档案变更成档名为 f2 的档案。

mv dir1 dir2 : 将档名为 dir1 的目录变更成档名为 dir2 的目录。

mv f1 f2 f3 ... dir : 将档案 f1 f2 f3 ... 都移至目录 dir 里面。

mv 的参数有两个,-f 和 -i , 其中 -i 的意义与 cp 中的相同,均是 interactive

询问之意。而 -f 为强迫( force ) , 就是不管有没有同名的档案,反正我就是要

搬过去,所有其他的参数遇到-f 均会失效。

4) rm

rm 的意义是 remove ,也就是用来杀掉一个档案的指令。在 UNIX 中一

个被杀掉的档案除非是系统恰好有做备份,否则是无法像DOS 里面一样还能够救回

来的。所以在做 rm 动作的时候使用者应该要特别小心。

rm 的格式如下:

rm f1 f2 f3 .....

而 rm 的参数比较常用的有几个: -f , -i , 与 -r

-f : 将会使得系统在删除时,不提出任何警告讯息。

-i : 在除去档案之前均会询问是否真要除去。

-r : 递回式的删除。

小心不要随便使用 rm -rf , 否则有一天你会"欲哭无泪"......

5) mkdir

mkdir 是一个让使用者建立一个目录的指令。你可以在一个目录底下使用

midir 建立一个子目录,使用的方法如下:

mkdir dirname1 [ dirname2 ... ]

如此你就可以建立一个或多个目录。

6) chdir ( cd )

这是让使用者用来转移工作目录用的。

chdir 的用法如下:

chdir dirname

如此你就可以将目前的目录转移到dirname 这一个目录去。

或使用 "chdir .." 来转移到上一层目录。

7) rmdir

相对於 mkdir ,rmdir 是用来将一个"空的"目录杀掉的。如果一个目录下面

没有任何档案,你就可以用rmdir 指令将其除去。rmdir 的使用法如下:

rmdir dirname1 [ dirname2 .... ]

如果一个目录底下有其他的档案,rmdir 将无法将这个目录杀掉,除非使用

rm 指令的 -r 选项。

8) pwd

pwd 会将目前目录的路径( path )显示出来,例如:

9) cat/more/less

以上三个指令均为察看档案内容的指令。cat 的意义是猫....不不不,是

concatenate ,在字典上的意思是"连结,将…串成锁状"( 语出资工电子

词典 cdict ),其实就是把档案的内容显示出来的意思。 cat 有许多奇怪

的参数,较常为人所使用的是-n 参数,也就是把显示出来的内容加上行

号。 cat 的用法如下:

cat [-n] :自标准输入读进内容,你可以用pipe 将别的程式的输出转向

给 cat .

cat [-n] filename : 将 filename 的内容读进来,显示在标准输出上。

问题在於 cat 它是不会停下来的,因此并不好用( 试想如果一个萤幕二十

四行,而一个档案四百行,cat 一出来将会劈哩啪啦不断的卷上去,使用者

很难据此得到他们所需的资讯。) 所以才有人又写了 more 出来。

more , 跟据蔡文能老师的说法是"再多一点就好",more 可以将所观察的档案

跟据终端机的形态一页页的显示出来,再根据使用者的要求换页或卷行。如果

使用者要在某一个档案中搜寻一个特定的字串,则按/ 然後跟著打所要搜寻

的单字即可进行搜寻。more 也可以找得到。more 的使用法如下:

more filename

如果你在使用中觉得已经看到了所要看的部份,可以按'q'离开 more 的使用。

在使用中按'v' 亦可以使用编辑器来编辑所观看的档案。

less 的用法与 more 极类似,原先它就是为了弥补 more 只能往前方卷页的缺

点而设计。 less 的用法如下:

less filename

其与 more 不同的是它可以按 y 来往上卷一行,并且可以用"?"来往回搜寻你所

要找的单字。

10) chmod

chmod 为变更档案模式用( change mode ) . 这个指令是用来更改档案的存取模

式( access mode )。在 UNIX 一个档案上有可读(r)可写(w)可执行(x)三种模式,

分别针对该档案的拥有者( onwer )、同群者( group member )( 你可以 ls -lg

来观看某一档案的所属的group ),以及其他人( other )。一个档案如果改成可

执行模式则系统就将其视为一个可执行档,而一个目录的可执行模式代表使用者

有进入该目录之权利。chmod 就是用来变更一些档案的模式,其使用方式如下:

chmod [ -fR ] mode filename ...

其参数的意义如下:

-f Force. chmod 不会理会失败的动作。

-R Recurive. 会将所有子树下的所有子目录及档案改为你所要改成的模式。

mode 可以为一个三位或四位的八进位数字,来表示__________对某些对象的存取权。详情

可参阅 chmod(1) 的 manual page 中有关 Absolute Modes 的说明。

或是用一个字串来表示,请参考chmod(1) 的说明。

2、 关於 Process 处理的指令:

1) ps

ps 是用来显示目前你的 process 或系统 processes 的状况。

以下列出比较常用的参数:

其选项说明如下:

-a 列出包括其他 users 的 process 状况。

-u 显示 user - oriented 的 process 状况 。

-x 显示包括没有 terminal 控制的 process 状况 。

-w 使用较宽的显示模式来显示process 状况 。

我们可以经由 ps 取得目前 processes 的状况,如 pid , running state 等。

2) kill

kill 指令的用途是送一个 signal 给某一个 process 。因为大部份送的都是

用来杀掉 process 的 SIGKILL 或 SIGHUP ,因此称为 kill 。kill 的用法

为:

kill [ -SIGNAL ] pid ...

kill -l

SIGNAL 为一个 singal 的数字,从 0 到 31 ,其中 9 是 SIGKILL ,也就是一

般用来杀掉一些无法正常terminate 的讯号。其馀讯号的用途可参考 sigvec(2)

中对 signal 的说明。

你也可以用 kill -l 来察看可代替 signal 号码的数目字。kill 的详细情形

请参阅 man kill。

3、 关於字串处理的指令:

1) echo

echo 是用来显示一字串在终端机上。□echo -n 则是当显示完之後不会有跳行的动作。

2) grep/fgrep

grep 为一过滤器,它可自一个或多个档案中过滤出具有某个字串的行,或是

自标准输入过滤出具有某个字串的行。

fgrep 可将欲过滤的一群字串放在某一个档案中,然後使用fgrep 将包含有

属於这一群字串的行过滤出来。

grep 与 fgrep 的用法如下:

grep [-nv] match_pattern file1 file2 ....

fgrep [-nv] -f pattern_file file1 file2 ....

-n 把所找到的行在行前加上行号列出

-v 把不包含 match_pattern 的行列出

match_pattern 所要搜寻的字串

-f 以 pattern_file 存放所要搜寻的字串

4、 网路上查询状况的指令:

1) man

man 是手册 ( manual ) 的意思。 UNIX 提供线上辅助( on-line help )的功能,

man 就是用来让使用者在使用时查询指令、系统呼叫、标准程式库函式、各种表

格等的使用所用的。man 的用法如下:

man [-M path] [[section] title ] .....

man [-M path] -k keyword ...

-M path man 所需要的 manual database 的路径。

我们也可以用设定环境变数MANPATH 的方式来取代 -M 选项。

title 这是所要查询的目的物。

section 为一个数字表示 manual 的分类,通常 1 代表可执行指令,2 代表系统呼叫( system

call ) ,3 代表标准函数,等等。

像下面 man 查询的片段:

SEE ALSO

apropos(1), cat(1V), col(1V), eqn(1), lpr(1), more(1),

nroff(1), refer(1), tbl(1), troff(1), vgrind(1), vtroff(1),

whatis(1), eqnchar(7), man(7), catman(8)

我们如要参考 eqnchar(7) 的资料,则我们就输入 man 7 eqnchar ,

便能取得我们所要的辅助讯息。

-k keyword

用来将含有这项 keyword 的 title 列出来。

man 在 UNIX 上是一项非常重要的指令,我们在本讲义中所述之用法均仅只是一

个大家比较常用的用法以及简单的说明,真正详细的用法与说明还是要请你使用

man 来得到。

2) who

who 指令是用来查询目前有那些人在线上。

3) w

w 指令是用来查询目前有那些人在线上,同时显示出那些人目前的工作。

4) ku

ku 可以用来搜寻整个网路上的user ,不像 w 跟 who 只是针对 local host 的

查询. 而且 ku 提供让使用者建立搜寻特定使用者名单的功能。你可以建立一个档

案 information-file 以条列的方式存放你的朋友的资料,再建立一个档案

hosts-file 来指定搜寻的机器名称。ku 的指令格式可由 ku -h 得到。

5、 网路指令:

UNIX 提供网路的连接,使得你可以在各个不同的机器上做一些特殊的事情,如

你可以在系上的 iris 图形工作站上做图形的处理,在系上的 Sun 上读 News ,

甚至到学校的计中去找别系的同学talk 。这些工作可以利用 UNIX 的网路指

令,在你的位子上连到各个不同的机器上工作。如此一来,即使你在寝室,也能

轻易的连至系上或计中来工作,不用像以前的人必须泡在冷冰冰的机房面。

这些网路的指令如下所述:

1) rlogin 与 rsh

rlogin 的意义是 remote login , 也就是经由网路到另外一部机器 login 。

rlogin 的格式是:

rlogin host [ -l username ]

选项 -l username 是当你在远方的机器上的 username 和 local host 不同的

时後,必须输入的选项,否则rlogin 将会假设你在那边的 username 与 local

host 相同,然後在第一次 login 时必然会发生错误。

rsh 是在远方的机器上执行某些指令,而把结果传回local host 。rsh 的格式

如下:

rsh host [ -l username ] [ command ]

如同 rlogin 的参数 -l username , rsh 的 -l username 也是指定 remote host

的 username 。而 command 则是要在 remote host上执行的指令。如果没有

指定 command ,则 rsh 会去执行 rlogin ,如同直接执行 rlogin 。

不过 rsh 在执行的时候并不会像一般的 login 程序一样还会问你 password , 而

是如果你没有设定 trust table , 则 remote host 将不会接受你的 request 。

rsh 须要在每个可能会做为remote host的机器上设定一个档案,称为 .rhosts。

这个档案每一行分为两个部份,第一个是允许login 的 hostname , 第二个部份

则是允许 login 的 username 。例如,在 ccsun7.csie.nctu.edu.tw上头你的

username 为 ysjuang , 而你的 home 下面的 .rhost 有以下的一行:

ccsun6.cc.nctu.edu.tw u8217529

则在 ccsun6.cc.nctu.edu.tw 机器上的 user u8217529 就可以用以下的方法来

执行 rsh 程式:

% rsh ccsun7.csie.nctu.edu.tw -l ysjuang cat mbox

将 ysjuang 在 ccsun7.csie.nctu.edu.tw 上的 mbox 档案内容显示在 local host

ccsun6.cc.nctu.edu.tw 上。

而如果 .rhost 有这样的一行,则 ccsun6.cc.nctu.edu.tw 上的 user u8217529

将可以不用输入 password 而直接经由 rsh 或 rlogin login 到

ccsun7.csie.nctu.edu.tw 来。

注意:

.rhost 是一个设定可以信任的人login 的表格,因此如果设定不当将会让

不法之徒有可以乘机侵入系统的机会。如果你阅读 man 5rhosts ,将会

发现你可以在第一栏用+ 来取代任何 hostname ,第二栏用 + 来取代任何

username 。

如一般 user 喜欢偷懒利用 " + username " 来代替列一长串 hostname ,

但是这样将会使得即使有一台PC 上跑 UNIX 的 user 有与你相同的

username , 也可以得到你的 trust 而侵入你的系统。这样容易造成系统

安全上的危险。因此本系禁止使用这样子的方式写你的.rhost 档,如果

发现将予以停机直到你找中心的工作人员将其改正为止。同理,如果你的

第二个栏位为 + ,如" hostname + " ,则你是允许在某一部机器上的"所有"

user 可以不用经由输入 password 来进入你的帐号,是壹种更危险的行为。

所以请自行小心。

2) telnet

telnet 是一个提供 user 经由网路连到 remote host。

telnet 的 格式如下:

telnet [ hostname | ip-address ] [ port ]

hostname 为一个像 ccsun1 或是 ccsun1.cc.nctu.edu.tw 的 name address,

ip-address 则为一个由四个小於 255 的数字组成的 ip address ,如 ccsun1

的 ip-address 为 140.113.17.173 ,ccsun1.cc.nctu.edu.tw 的 ip-address

为 140.113.4.11 。你可以利用 telnet ccsun1 或 telnet 140.113.17.173 来

连到 ccsun1。

port 为一些特殊的程式所提供给外界的沟通点,如资工系的MUD 其 server 便

提供一些 port 让 user 由这些 port 进入 MUD 程式。详情请参阅 telnet(1)

的说明。

3) ftp

ftp 的意义是 File Transfer Program ,是一个很常应用在网路档案传输的

程式。ftp 的格式如下:

ftp [ hostname | ip-address ]

其中 hostname | ip-address 的意义跟 telnet 中的相同。

在进入 ftp 之後,如果与 remote host 连接上了,它将会询问你 username

与密码,如果输入对了就可以开始进行档案传输。

在 ftp 中有许多的命令,详细的使用方式请参考 ftp(1) ,这里仅列出较常

用的 cd , lcd , mkdir , put , mput ,get , mget , binary , ascii ,

prompt , help 与 quit 的使用方式。

ascii 将传输模式设为 ascii 模式。通常用於传送文字档。

binary 将传输模式设为 binary 模式,通常用於传送执行档,压缩档与影像

档等。

cd remote-directory 将 remote host 上的工作目录改变。

lcd [ directory ] 更改 local host 的工作目录。

ls [ remote-directory ] [ local-file ] 列出 remote host 上的档案。

get remote-file [ local-file ] 取得远方的档案。

mget remote-files 可使用通用字元一次取得多个档案。

put local-file [ remote-file] 将 local host 的档案送到 remote host。

mput local-files 可使用通用字元一次将多个档案放到remote host上。

help [ command ] 线上辅助指令。

mkdir directory-name 在 remote host造一个目录。

prompt 更改交谈模式,若为 on 则在 mput 与 mget 时每作一个档案之传

输时均会询问。

quit/bye 离开ftp .

利用 ftp ,我们便可以在不同的机器上将所需要的资料做转移,某些特别的

机器更存放大量的资料以供各地的使用者抓取,本校较著名的ftp server

有 NCTUCCCA 与系上的 ftp.csie.nctu.edu.tw 。这些 ftp server 均有提

供一个 user 称为 anonymous ,一般的"外来客"可以利用这个 username 取

得该 server 的公共资料。不过 anonymous 在询问 password 时是要求使用

anonymous 的使用者输入其 email address,以往有许多台湾的使用者在使用

国外的 ftp server 时并没有按照人家的要求输入其 email address,而仅是

随便打一些字串,引起许多internetuser 和管理者的不满,对台湾的使用

者的风评变得很差,因此遵循各ftp server 的使用规则也是一件相当重要的事。

6、 关於通讯用的指令:

1) write

这个指令是提供使用者传送讯息给另一个使用者,使用方式:

write username [tty]

2) talk/ytalk/cytalk/ctalk

UNIX 专用的交谈程式。会将萤幕分隔开为你的区域和交谈对象的区域,

同时也可和不同机器的使用者交谈。使用方式:

talk username[@host] [tty]

3) mesg

选择是否接受他人的 messege , 若为 messege no 则他人的 messege 将无法

传送给你,同时他也无法干扰你的工作。使用方法:

mesg [-n|-y]

4) mail/elm

在网路上的 email 程式,可经由此程式将信件 mail 给他人。 使用方式:

mail [username]

mail -f mailboxfile

如有信件,则直接键入mail 可以读取你的 mail .

elm 提供较 mail 更为方便的介面,而且可做线上的 alias . 你可以进入 elm

使用上下左右键来选读取的信件,并可按h 取得线上的 help 文件。

使用方式:

elm [usernmae]

elm -f mailboxfile

7、 编译器( Compiler ):

Compiler 的用处在於将你所撰写的程式翻译成一个可执行档案。在资工系常

用的程式语言是 C , pascal , FORTRAN 等。你可以先写好一个 C 或 Pascal

或 FORTRAN 的原始程式档,再用这些 compiler 将其翻成可执行档。你可以

用这个方法来制造你自己的特殊指令。

1) cc/gcc (C Compiler)

/usr/bin/cc

/usr/local/bin/gcc

语法: cc [ -o execfile ] source

gcc [ -o execfile ] source

execfile 是你所希望的执行档的名称,如果没有加上 -o 选项编译出来的可

执行档会以 a.out 做为档名。 source 为一个以 .c 做为结尾的 C 程式档。

请参阅 cc(1) 的说明。

2) pc (Pascal Compiler)

/usr/local/bin/pc

语法: pc [ -o execfile ] source

execfile 是你所希望的执行档的名称,如果没有加上 -o 选项编译出来的可

执行档会以 a.out 做为档名。 source 为一个以 .p 做为结尾的 Pascal 程

式档。 请参阅 /net/home5/lang/man 中 pc(1) 的说明。

3) f77 (Fortran Compiler)

/net/home5/lang/f77

语法: f77 [ -o execfile ] source

execfile 是你所希望的执行档的名称,如果没有加上 -o 选项编译出来的可

执行档会以 a.out 做为档名。 source 为一个以 .p 做为结尾的 FORTRAN 程

式档。

8、 有关列印的指令:

以下为印表所会用到的指令,在本系的印表机有 lp1 , lp2 ( 点矩阵印表机 ),

lw , sp , ps , compaq ( 雷射印表机 ),供使用者使用。

1) lpr

lpr 为用来将一个档案印至列表机的指令。

用法:

lpr -P[ printer ] file1 file2 file3 ....

或l

pr -P[ printer ] < file1

例子:

lpr -Plp1 hello.c hello.lst hello.map

lpr -Plp1 < hello.c

前者以参数输入所要印出的档案内容,後者列印标准输入档案( standard input )

的内容,因已将 hello.c 转向到标准输入,故会印出 hello.c 的档案内容。

2) lpq

lpq 是用来观察 printer queue 上的 Jobs 。

用法:

lpq -P[ printer ]

3) lprm

lprm 是用来取消列印要求的指令。通常我们有时会印错,或是误送非文字档

资料至 printer , 此时就必须利用 lprm 取消列印 request ,以免造成资源

的浪费。

用法:

lprm -P[ printer ] [ Jobs id | username ]

lprm 用来清除 printer queue 中的 Jobs , 如果你使用 Job Id 作为参数,则

它将此 Job 自printer queue 清除,如果你用 username作为参数,则它将此 queue

中所有 Owner 为此 username 的Jobs 清除。

9、 更改个人使用资料:

1) passwd

passwd 是用来更改你的使用密码,用法为:

passwd [ username ]

在使用 passwd 的时候,它会先问你的旧密码,然後询问两次要更改的密码,确定

无误後才将你的密码改掉。
2011-11-13 15:49:06 liuhui168168 阅读数 636

=====================================================

Unix 学习笔记

=====================================================

主讲:程欣



2) chsh

chsh 是提供使用者更换 login shell 的指令,你可经由此更换自己使用的 shell 。

四、 文件系统权限

=====================================================

权限 文件 目录

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

r(read) cat读取文件内容 ls查看此目录

w (write) 修改文件内容 在此目录下删除,创建文件

x (execute) 执行此文件 cd进入此目录

=====================================================

实例:浙江移动的验证授权系统的实现

********************************************************************************

营业厅里有很多角色:

r 4 00000100

w 2 00000010

z 1 00000001

p 5 00000101

&(位于运算): 相同位置留下,不同取0

if(p&4==4)具有读权限

if(p&4==2)具有写权限

if(p&4==1)具有执行权限

p 如果营业员权限为p,如何判断此人具有读权限

浙江移动具如下权限:

登录 换卡 换号 换品牌补卡 授权 重起 出帐

1 2 4 8 16 32 64 128

if(p=a+b+c)如果a,b,c都是不重复的2的n次方,则p和a,b,c做&运算肯定等于a,b,c

营业员:

p=1+2+16=19(权重)

if(p&1==1)可以登录

if(p&2==2)可以换卡

if(p&4==4)可以换号

********************************************************************************

练习:

1.熟练掌握各个命令

2.用chmod控制你home目录下的每个文件和目录

验证一点:如果把目录权限封住了,是否可以操作目录下的文件内容(cat)--->验证结果:

不可以!

ls -la

=====================================================

五、软硬连接的区别

1.软连接可以连接目录,硬连接不可以;

2.软连接可以跨分区,而硬连接不可以;

3.软连接依赖原文件,而硬连接不依赖。

六、范例程序

1、King.java(金字塔):

/**

% vi King.java

% source /etc/.login

% javac King.java

% java King

*/

public class King{

public static void main(String args[]){

for(int i=0;i<10;i++){

for(int j=10;j>i;j--){

System.out.print(" ");

}

for(int j=0;j<i*2+1;j++){

System.out.print("$");

}

System.out.println();

}

}

}

2、Server.java(聊天室):

import java.io.*;

import java.net.*;

import java.util.*;

public class Server{

public static Vector users=new Vector();;

public static void main(String args[]){

int port=10000;

ServerSocket server=null;

try{

server=new ServerSocket(port);

System.out.println("server start up on port "+port);

while(true){

Socket s=server.accept();

User user=new User(s);

user.start();

}

}catch(Exception e){

e.printStackTrace();

}finally{

if(server!=null){

try{server.close();}catch(Exception e){}

}

}

}

}c

lass User extends Thread{

private String userName;

private InetAddress ip;

private Socket s;

public User(Socket s){

this.s=s;

}

public void run(){

InputStream input=null;

OutputStream output=null;

try{

input=s.getInputStream();

output=s.getOutputStream();

PrintWriter pw=new PrintWriter(

new OutputStreamWriter(output));

BufferedReader buf=new BufferedReader(new InputStreamReader(input));

pw.print("enter your name :");

pw.flush();

userName=buf.readLine();

ip=s.getInetAddress();

Server.users.add(this);

sendAll(userName+" has joid us");

long t=0;

while(true){

String line=buf.readLine();

if(line.equals("bye")){

sendAll(userName+" has leave us ");

Server.users.remove(this);

break;

}i

f(line.equals("users")){

Iterator it=Server.users.iterator();

while(it.hasNext()){

User user=(User)it.next();

String n=user.getUserName();

InetAddress i=user.getIp();

pw.println(i+"\t"+n);

}

pw.flush();

continue;

}

if(line==null||line.trim().length()==0)continue;

long s=System.currentTimeMillis();

if(t!=0&&(s-t)/1000<3){

pw.println("flush denied ");

pw.flush();

continue;

}t

=s;

if(line.startsWith("kill")){

try{

StringTokenizer stk=new StringTokenizer(line);

stk.nextElement();

String u=(String)stk.nextElement();

Iterator it=Server.users.iterator();

while(it.hasNext()){

User user=(User)it.next();

String n=user.getUserName();

if(n.equals(u)){

sendAll(n+" was killed by "+userName);

it.remove();

user.interrupt();

break;

}

}

}catch(Exception e){

}

}

if(line.equals(":)")) {

sendAll(userName+" 嘿嘿干笑了一声,统统告诉我密码");

continue;

}i

f(line.equals(":(")){

sendAll(userName+" 耷拉着脸说:我今天不太高兴,不要惹我 ");

continue;

}s

endAll(userName+" said : "+ line);

}

}catch(Exception e){

e.printStackTrace();

}finally{

if(s!=null)try{s.close();}catch(Exception e){}

}

}

public synchronized void sendMessage(String message){

OutputStream output=null;

try{

output=s.getOutputStream();

PrintWriter pw=new PrintWriter(

new OutputStreamWriter(output));

pw.println(message);

pw.flush();

}catch(Exception e){}

}

public void sendAll(String message){

Iterator it=Server.users.iterator();

while(it.hasNext()){

User user=(User)it.next();

user.sendMessage(message);

}

}

public String getUserName(){return userName;}

public InetAddress getIp(){return ip;}

}

登录命令:telnet 192.168.1.250 10000

=====================================================

七、网络基本命令

1、/etc/inet/inetd.conf 是solaris10以前的配置方式,现在已经作废(vi /etc/inet/inetd.conf)

2、输入命令:vi /etc/services

"/etc/services" [Read only] 119 lines, 4228 characters

swat 901/tcp # Samba Web Adm.Tool

#

# The following customer-specific entries were found in the services file

# prior to an upgrade. Note that service names and their corresponding

# port numbers must be registered with IANA, http://www.iana.org, and

# entries not registered as such may not be preserved automatically by

# future upgrades.

#t

cpmux 1/tcp

echo 7/tcp

echo 7/udp

discard 9/tcp sink null

discard 9/udp sink null

systat 11/tcp users

daytime 13/tcp

daytime 13/udp

netstat 15/tcp

chargen 19/tcp ttytst source

chargen 19/udp ttytst source

ftp-data 20/tcp

ftp 21/tcp

ssh 22/tcp # Secure Shell

telnet 23/tcp

"/etc/services" [Read only] 119 lines, 4228 characters

解释:20口传命令,21口传文件

3、新版本的solaris中,靠svcs命令来管理所有的服务

svcs 列出所有的服务

svcadm enable telnet

svcadm disable telnet

svcadm disable ftp

svcadm enable ftp

svcadm disable ssh

svcamd enable ssh

ftp-data 20

ftp 21

ssh 22

telnet 23

smtp 25

web 80

pop3 110

=====================================================

常见应用软件:

oracle 1521

tomcat 8080

resin 8080

weblogic 7001

pointbase 9092

mysql 3306

1000口内的程序默认是为超级用户准备的

1000内的端口默认是为系统服务准备的

自定义的程序必须大于1000口,如果小于1000,

则必须用超级用户(root,Administrator)来运行

ssh briup@192.168.1.250

yes

3、查看所经历的路由:

/usr/sbin/traceroute 192.168.1.1

/usr/sbin/traceroute 61.129.57.158

traceroute to 61.129.57.158 (61.129.57.158), 30 hops max, 40 byte packets

1 192.168.1.1 (192.168.1.1) 0.198 ms 0.094 ms 0.085 ms

2 * * *

3 *^C$

telnet:

apache web服务器

resin/tomcat java 应用服务器

squid 缓存服务器 就是给图片和网页在内存中缓存起来

rlogin 192.168.1.250 -l briup

Password:

Last login: Wed Apr 30 10:43:43 from 192.168.3.74

Sun Microsystems Inc. SunOS 5.10 Generic January 2005

You have new mail.

4、ftp:下载和上传文件

ftp 192.168.1.250

user : briup

pass: briup

cd 切换服务器上的目录

lcd 切换本地目录

dir/ls 查看服务器上的文件列表

bye 断开,退出

bin 传输二进制文件(图片,电影,doc,ppt都是)

asc 传输文本文件 (.txt .java 写字板打开肉眼能识别的)

用bin模式肯定不会错的

get 下载

put 上传

mget 下载多个

mput 上传多个

hash 打印进度条

prompt 下载,上传前是否提示

八、Shell scripts:脚本编程

1、脚本

.sh 意味着本脚本是用sh的语法

.csh cshell的语法

.bash bash的语法

注意:95%的脚本是用sh写的,比较通用

#!/bins/sh 声明本shell遵守bourne shell 的格式

2、在shell中

$* 代表命令行传进来的多个参数

$1 第一

$2 第二个

`命令率先执行,将结果赋值给等号左边` 点

'字符串赋值给等号左边' 单引号

A=`echo hello` A是hello

B='echo hello' B是echo hello

3、lcf.sh

vi lcf.sh

#!/bin/sh

for oldname in $*

do

if [ -f $oldname ]

then

newname=`echo $oldname |tr '[A-Z]' '[a-z]'`

if [ -f $oldname != $newname ]

then

mv $oldname $newname

fi

fi

done

:wq

# chmod u+x lcf.sh

# touch A B C

# lcf.sh A B C

# ls

4.crontab:定时调用

/etc/cron.d/cron.allow

/etc/cron.d/cron.deny 两个文件用于对crontab进行访问控制

我喜欢的用法:

$crontab -l > a

$vi a //编辑a文件

$crontab a 重新初始化crontab 列表

另外的用法:

$crontab -e //然后对crontab文件进行编辑,最后保存。

当第一次使用crontab的时候可能会报一个错误,告诉你没有临时文件

$crontab a //随便找个文件初始化一下就可以

======================

crontab 文件格式

* * * * * /bin/ls

分钟 小时 天 月 星期几 /bin/ls 可执行程序

briupserver4% setenv EDITOR vi

briupserver4% crontab -e

"/tmp/crontabo8aGOk" 0 lines, 0 characters

* * * * * date >> /temp/xuxiang.txt

briupserver4% tail -f /temp/xuxiang.txt

tail: cannot open input

briupserver4% crontab -l

* * * * * date >> /temp/xuxiang.txt

briupserver4% tail -f /temp/xuxiang.txt

tail: cannot open input

briupserver4% crontab -r

briupserver4% rm /temp/xuxiang,txt

/temp/xuxiang,txt: No such file or directory

briupserver4% crontab -l

crontab: can't open your crontab file.

crontab是超级用户运行的,所以你在脚本中打印是看不到结果的,应该把结果>>某个文件

中,文件也要全路径,不能使用~

crontab中加载的顺序:

登录

1. /etc/.login

2.~/.cschr

3.~/.login

登出

1、~/ .logout

这些文件如何产生?

1. cp /etc/skel/* ~

2.mv ~/local.cshrc ~/.cshrc

3.vi ~/ .cshrc

加入自定义命令

4.立即生效: source ~/.cshrc

或者重新登录

source是csh专有命令

在环境变量中,$具有特殊的含义:

“$...”中$是带有含义的

‘$...’中就是一个字符而已,没有任何含义

path 是查找命令的位置和顺序

briupserver4%echo $path

/bin/usr/bin /usr/ucb /etc .

briupserver4%ping

ping:Command not found

briupserver4%set path=($path /usr/sbin)

briupserver4%echo $path

/bin/usr/bin /usr/ucb /etc . /usr/sbin

777-033=744-执行权限=644

%ls -ludir

udir: Nosuch file or directory

%umask

22

%umask 255

%mkdir abc

%ls -laabc

total 4

dr-x-w--w-2 xuxiang ajd0805 512 Apr 30 15:59 .

drwxrwxrwx3 xuxiang ajd0805 512 Apr 30 15:59 ..

%touchbeans

%ls -labeans

-r---w--w-1 xuxiang ajd0805 0 Apr 30 15:59 beans


2004-10-05 13:03:00 cnwolfwind 阅读数 798

(1)

管道  UNIX允许一个程序的输出作为另外一个程序输入,多个程序串起来看起来好象一条管道一样。通过各个简单任务的组合,就可以完成更大更复杂的任务,并极大提高了操作的方便性。后来DOS操作系统也借鉴并提供了这种机制。


(2)功能强大的Shell
       UNIX的命令解释器由Shell实现。UNIX提供了三种功能强大的Shell,每种Shell本身就是一种解释型高级语言,通过用户编程就可创造无数命令,使用方便


(3)

(1) Kernel(内核)

(2) Shell(外壳)

(3) 工具及应用程序




UNIX KernelUNIX内核)  UNIX操作系统的核心,指挥调度UNIX机器的运行,直接控制计算机的资源,保护用户程序不受错综复杂的硬件事件细节的影响。

 

UNIX ShellUNIX外壳)  是一个UNIX的特殊程序,是UNIX内核和用户的接口,是UNIX的命令解释器、也是一种解释性高级语言。目前常见的Shell有三种:

Shell类型

简称

命令

主要特点

Bourne Shell

B Shell

sh

最老、使用最广泛,每个UNIX都提供。

Korn Shell

K Shell

ksh

是对B Shell的扩充,兼容B Shell

C-Shell

 

csh

格式有点象C语言。功能强,命令记忆稍难,在大学和学院中较为流行。

一般系统缺省为Bourne Shell, 本文以此Shell为例。

要想将当前Shell改为其它 Shell,只需在操作系统提示符下键入相应的Shell命令即可。如在其它Shell下键输入命令:

        ksh

就进入了K Shell



(4)与UNIX有关的几个名词

终端(Terminal  终端是用户和计算机进行实时交互的接口设备。终端一般由显示器、键盘和终端控制器组成,有的还带有鼠标。显示器和键盘与终端控制器相连,终端控制器通过通用端口(如串口)和计算机主机相连。用户通过终端和计算机交流。一台UNIX主机可以连多个终端。终端分为两类:字符终端和图形终端。

 

    仿真终端  在某计算机上运行某一特定程序,把计算机当作另一台计算机的终端使用。目前仿真终端与UNIX主机的连接方式主要有网络连接和串口连接。

 

    控制台(Console 这是一种特殊的终端,由显示器、键盘(和鼠标)组成,分别连到主机的专用接口(监视器接口、键盘接口、鼠标接口)上。一般一台主机只能接一个控制台,控制台可以完成普通终端不能完成的工作:非常重要的信息(如严重的错误信息)只能在控制台上显示,有些特殊的任务(如执行修复工作)也只能在控制台上完成。除了实现以上特殊功能外,控制台还可以象其它终端那样工作。

 

    用户名(User)   UNIX是多用户操作系统,它允许多个用户同时使用。每个用户拥有用户名、登录口令以及操作特权。用户每次使用UNIX时必须先登录:输入用户名和口令。一般用户的UNIX操作系统提示符一般为”$”

 

    用户组(Group)  若干个用户可以组成一组,同组内的用户可以共享信息。

 

root用户  UNIX的超级用户,拥有其他用户没有的特权。root用户的UNIX操作系统提示符一般为”#”

 

进程(Process)  是正在执行的程序。UNIX允许多个进程同时存在,每个进程都有唯一代号称为进程标识符(pid --- process id)

 

前台进程(Foreground process)  可以和用户直接进行人机交互的进程。前台进程序可以接收键盘输入并将结果显示在显示器上。缺省状态下用户启动的UNIX程序运行在前台。

 

后台进程(Background process)  不直接和用户进行交互的进程。用户一般是感觉不到后台进程程序的运行。UNIX有很多系统进程在后台执行。

 

设备(Device)  或称设备文件,代表某个硬件,如磁盘、软盘、串口。UNIX对硬件的存取操作都是通过设备文件来完成的。设备文件放在/dev目录下,如/dev/hd0表示第一个软盘驱动器。

 

原始设备(Raw device)  也称为裸设备,没有经过加工的设备文件。原始设备文件名以r开头,如/dev/rhd0表示第一个软盘驱动器原始设备。

 

(5)UNIX大小写敏感。因此要注意目录名字的大小写还有命令的大小写


(6)UNIX文件无专用扩张名称,因此出现多个小数点无意义,只是区别。
     UNIX中”.NAME”代表隐藏文件
    
(7)文件存取权限   owner   group    other
                    r  w  x    r  w   x  r  w  x

      在ls -l 列出的从2到10开始就是对应这三种用户的存取权限
 

   格式2:绝对模式(absolute_mode), 符号模式的命令格式如下:

 

chmod  xyz  file…

 

    xyz分别是0-7的数字,分别表示属主、用户组、其他人对该文件的存取权限。xyz的取值公式均为:

  a*4 + b*2 + c

其中,

        a=1分别表示可读,a=0表示不可读;

        b=1分别表示可写,b=0表示不可写;

        c=1分别表示可执行,c=0表示不可执行;


(8)chown  改变文件夹的属主
chgrp  改变文件所在的组

(9) UNIX重定向与管道

重定向    >              

        <     重定向输入

        >   重定向输出

        >>  重定向输出并追加到尾部


管道       |



(10)

UNIX主机正常的关机过程为,在root用户下键入:

# shutdown  -g0 y

表示立即关机。由多用户模式进入单用户模式,执行如下命令:

# shutdown  -g0 -y su

[注意] 必须在运行完shutdown命令,并出现允许关机的信息时,再关掉主机电源。未出现允许关机的信息,千万不要关主机电源。
(11)

 

解释

UNIX命令

查看磁盘自由空间

df -v

查看磁盘使用情况

du [文件名]

 



(12)

 带有总线控制器的硬盘命名习惯

      cWtXdYsZ

  clogical controller number

  tphysical bus target number

  dDrive number

  sSlice (or partition) number (0 to 7)

      

W :若系统中仅有1个控制器,那么W的值通常为0

      X :对于SCSI控制器来说,X是该部件后面开关所设置的目标地址

      Y Y是与目标上相连的驱动器号,若硬盘的控制器是嵌入式的,则Y0

      Z :是分区号,标码由07,指定整个硬盘时,值为2

     指定具有总线控制器的(SCSIIPI)的硬盘的某个分区,可以这样规定设备名:

          /dev/dsk/cWtXdYsZ(块接口)/dev/rdsk/ cWtXdYsZ(原始接口)

    例子:/dev/rdsk/c0t0d0s0  ;第一控制器的第一个SCSI目标地址的第一硬盘的第一分区

          /dev/rdsk/c0t0d0s2  ;第一控制器的第一个SCSI目标地址的第一硬盘的第三分区


(13)设置网络的步骤

(1) root用户登录UNIX

(2) 查看/etc目录下hostsnetworksgateways文件是否存在,若不存在创建之

(3) 修改三文件内容,确保参数正确,注意三文件参数之间的关系

(4) 对内核进行重新连接(对于SCO UNIX可运行sysadmshsystem->kernal->relink

(5) 运行reboot重新启动UNIX



没有更多推荐了,返回首页