第九章 远程连接 网络环境示例 图9-1显示了网络和主机之间的关系。 网络 一个网络就是一个连接,机器可以使用它来互相交换信息。两种类型的网络分别为: 1、本地网LAN:LAN指的是覆盖较小区域的网络,通常在几千公尺范围内。 2、城域网WAN:一个可以延伸到几千公里以外的网络。 主机 一个主机就是指网络上的一台计算机,本地主机指的是你当前工作使用的计算机,远程主机为另外一个系统中的用户访问的机器。 使用telnet命令 telnet命令是Solaris操作环境下的一个应用程序,它使用TCP/IP协议来连接另外一个系统。 telnet连接使你可以登录到一个远程系统,并且工作在该环境下。使用telnet命令,可以: 1、在远程机器上开启一个会话; 2、访问并不运行在UNIX环境下机器。 命令格式 telnet hostname 下面的示例是使用telnet命令连接到一个名为host1的远程系统: $ telnet host1 使用rlogin命令 使用rlogin命令可以在另外一个工作站上建立一个远程登录会话。 命令格式 rlogin hostname –option 示例 要远程登录到另外一台主机,执行下面命令: $ rlgoin host2 指定一个不同的loginID 使用-l选项可以为远程login会话指定一个不同的loginID。 命令格式 rlogin –l hostname username 当你在为远程login会话指定一个不同的loginID时,首先要确定在远程机器中该用户存在,系统管理员可以检查改用户是否存在,需要知道的信息包括: 1、计算机名称; 2、loginID; 3、新帐号的密码; 作为另外一个用户登录到远程系统 下面的示例显示了作为另外一个用户登录到远程系统中: $ rlogin host1 –l user2 在远程系统上执行程序 rsh命令可以用于在远程系统上执行一个程序 命令格式 rsh hostname –l username command rsh hostname –l username IP_Address command 示例: 要远程运行命令,执行下面的命令: $rsh host1 showrev $rsh host –l ssa1 ls /var/mail 从另外一台机器中拷贝文件 使用rcp命令可以从另外一台机器拷贝文件或者目录 命令格式 rcp source_file hostname:destination_file rcp hostname:source_file destination_file 在网络之间拷贝文件 从本地计算机中拷贝文件到一个远程主机上,使用下面的语法: $rcp dante saturn:/tmp 要从远程主机上拷贝文件到本地/tmp目录下,使用下面的语法: $ rcp saturn:/tmp/dante /tmp 要远程带-r选项拷贝目录,语法如下: rcp –r $HOME/perm saturn:/tmp 如果你正在包含你要拷贝到另外一个计算机的文件和目录的目录下,只要键入文件和目录名即可,否则必须使用绝路径。 使用ftp命令 ftp命令,是工业应用标准的一部分,用于在相同或者不同的操作系统之间传输ASCII或者二进制文件。 一旦你使用ftp命令成功访问了一个远程站点,一些熟悉的文件和目录访问命令例如cd和ls命令可以使用。 如果你没有访问文件的权限,如果你使用了ls命令,系统将只是返回一个提示符作为响应 如果站点管理员为某一用户设置了访问许可,ls命令将只显示允许访问的目录中的文件 和本地系统中一样,cd命令用于改变远程系统的目录 在ftp会话过程中,如果需要改变你自己本地系统的目录,使用lcd命令 结束ftp会话,在ftp提示符下键入bye 命令格式 ftp hostname 第十章 系统进程 进程概述 每个在Solaris操作环境下运行的程序都会创建一个进程。当你登录到系统中,启动shell,这就是一个进程。当你执行一条命令或者运行一个应用程序,也会创建一个进程。 进程就是在系统中运行的任何程序。 系统也将启动称为守护程序的进程,守护程序是系统启动阶段开启的程序,对于操作系统的功能的实现至关重要。 每个进程都会分配一个唯一的进程识别号(PID),操作系统内核使用PID来跟踪和管理进程。对于用户而言,PID号是用来识别和控制进程的。 进程的UID和GID 对内核而言,要想知道一个进程允许做的工作,必须存储谁是该进程的所有者信息。为了这个目的,内核存储了两种类型的UID和GID。 一个进程真实的UID和GID和开启进程的用户的UID和GID是一样的。用于跟踪目的。 父进程 当一个进程开启以后,开启该进程的进程一份复制也将被创建。新创建的进程称为子进程,创建子进程的进程称为父进程。然后子进程修改父进程所使用的代码为你所要求执行的命令代码。 在命令执行过程中,shell被阻塞知道子进程执行完毕。一旦子进程执行完毕,正在等待的父进程终止子进程,shell显示提示符等待执行下一个命令。 查看进程和PID ps(进程状态)命令列出当前系统中正在运行的进程。 对于每个进程来说,ps命令显示PID号、终端识别符(TTY)、累积执行时间(TIME)和命令(CMD)。 命令格式 ps –options options 在ps命令中可以使用以下选项: -e打印出系统中每个进程信息包括:PID、TTY、TIME和CMD。 -f产生完整列表,增加了字段UID(进程所有者)、PPID(父进程ID)和STIME(进程开启时间) 显示所有进程的完整列表 下面的示例显示所有进程的完整列表: $ ps –ef | more ps –ef命令输出的说明: 输出值说明 UID进程所有者的登录名称 PID唯一的进程识别号 PPID父进程的PID号 CCPU的利用率,在Solaris8中不再使用 STIME进程开启时间(hh:mm:ss) TTY开启进程的控制终端类型 TIME进程累积执行时间 CMD命令名称 搜索特定的进程 要快速定位一个特定的进程,可以使用管道来把ps命令的输出送到grep命令中来寻找指定的命令名称。例如,要查找所有与打印有关的活动进程,执行下面的命令: $ ps –e | grep lp pgrep命令 pgrep命令提供了一种更为有效的通过名称来快速查找某一进程的方法。 备注:pgrep命令是在Solaris8操作环境中第一次发布的。 默认情况下,pgrep命令显示匹配在命令中指定的规则的任何进程的PID,例如: $ pgrep lp 命令格式 pgrep –options pattern options(选项): 在pgrep命令中你可以使用以下选项: -x只显示完全匹配pattern的进程的PID -n只显示最新(最近创建的)的匹配pattern的进程的PID -U只显示属于某一指定用户的进程的PID(使用loginID或者UID) -l显示PID和进程名称 备注:pgrep还有其他几个有用的选项,参考man手册来得到可用的选项的完整列表。 在下面的示例中,使用-l选项来同时显示进程的PID和名称: $ pgerp –l lp $ pgerp –l mail 在接下来的示例中,组合使用x和l,来显示完全匹配pattern的进程PID和名称。 $ pgerp –lx dtmail 给进程发送信号 信号 信号通常用于控制系统中运行的进程。信号量可以发送给一个进程,用来指示出现了一个事件,进程需要作出响应。 例如,如果你键入control+c来终止一个命令,这将发送一个中断信号给进程,相应地进程退出作为响应。 信号是一个简单的信息,包含了一个信号号码作为给进程的信息。 在Solaris操作环境中有许多可用的信号,每个信号都分配了一个唯一的号码、名称以及相应的动作。你可以选择与一个信号有关的动作。 在下面的man手册页中可以找到这些信号完整的动作列表和他们各自默认情况下的动作: $man –s3head signal 下面给出了一些信号号码和名称 信号的号码信号名称动作响应 1SIGHUP挂起退出 2SIGINT中断退出 9SIGKILL杀死退出 15SIGTERM 终止退出 说明:1,SIGHUP,以个挂起信号将使电话线或者终端连接结束; 2,SIGINT,一个中断信号是键盘产生的,通常就是按control+c键; 9,SIGKILL,用于杀死进程的信号,不可以忽略这个信号; 15,SIGTERM,以一个正常的方式来终止进程的信号,一些进程可以忽略该信号 终止进程 下面部分讲述如何使用kill命令来终止进程 kill命令 kill命令用于给一个或者多个正在运行的进程发送信号,这个命令通常用于终止进程。 备注:普通用户只可以杀死那些他自己所属的进程,而root用户可以杀死任何进程 命令格式 kill –signal process-ID 终止一个进程: 在终止一个进程之前,你需要知道该进程的PID。可以使用ps或者pgrep命令来得到进程的PID。 $ kill PID 例如: $ pgrep –l mail 12047 dtmail $ kill 12047 同时终止多个进程: $ kill PID PID PID PID PID 使用不指定信号的kill命令,默认情况下,发送信号15给每个进程,该信号的功能就是使得进程终止。 一些进程可以忽略该信号,那些等待一个资源的进程。例如在等待一个磁带驱动来完成一个操作的进程将忽略该信号,继续执行原来的操作。 那些不响应信号15可以通过发送信号9的kill命令来强制终止,例如: $kill –9 PID pkill命令 pkill命令也用于终止一个进程,默认情况下使用信号15。这个命令可以使用进程名称来终止进程。 命令格式 pkill [-options] pattern pkill中使用的选项核pgrep使用的选项一样,例如: $ pgrep –l mail 215 sendmail 470 dtmail $ pkill 470 使用进程名称来杀死dtmail进程: $ pkill dtmail 使用-n选项来杀死最近创建的Korn shell进程 $ pkill –n ksh 远程杀死进程 当一个工作站对鼠标和键盘输入都没有响应时,会话已经被锁死了。你可以使用rlogin或者telnet从另外一个系统上远程登录到该系统。 一旦登录成功后,你可以调用pkill命令来终止已经崩溃的会话,例如: $ rlogin host1 $ pkill –9 loginshell 任务管理 shell可以同时执行多个不同任务,开启一个应用程序、发送一个打印请求、在目录中执行ls命令都是任务的例子。 当在窗口环境下执行任务时,任务在前台运行,当任务完成后给出一个特殊的窗口。但是,你也可以在后台执行任务,窗口将会被锁死,这样你可以在前台开启一个新的任务。 每个任务都由shell分配一个任务ID号,shell对多个任务的处理称为任务控制,一个任务就是一个由终端控制的进程,包含PID。 你可以使用下面的命令来控制任务: 命令功能 jobs 显示当前正在运行的任务ID号 bg %n把任务放在后台运行(n是任务ID号) fg %n把任务放在前台运行(n是任务ID号) ^Z挂起一个任务 stop %n停止指定的后台任务(n是任务ID号) 要使一个任务在后台运行,可以键入需要执行的命令,在命令后面跟&符号。 例如,下面的命令行就是在后台执行find命令,在当前工作目录查找名为core的所有文件,然后打印每个core文件的完整路径名到一个名为list的新文件中。 $ find . –name core > list & shell将返回一个用括号括起来的任务ID号和该任务的PID。可是使用任务ID号来控制任务,而PID是内核用于管理任务的。 使用jobs命令来列出当前任务 $ jobs 使用fg命令来把一个后台命令放到前台执行 $fg %l 要重新把该任务放在后台执行,首先使用control+z键来挂起该任务,然后再使用bg命令。 find . –name core > list ^Z [1] + stopped(SIGTSTP)find . –name core > list & $ jobs [1] + stopped(SIGTSTP)find . –name core > list & $ bg %1 [1] find . –name core > list & $ 要终止一个后台任务,使用指定的任务ID号作为stop命令的参数: $ stop %1 [1] + stopped(SIGSTOP) script1 &
|