mp77的UNIX课件笔记(4.a)

了解UNIX的文件系统是必要的,就像对于windows我们所了解到的。但二者最大的区别就在于熟知前者会对进一步的工作有决定性的推动作用;后者呢?最终还是无奈地回归平台。原定于本节详细介绍文件系统,但为了提升实用效果我们决定先插入一章全面介绍UNIX基本应用程序的内容(由于本节内容过于冗长,分两部分加以说明)。

 

一、 常用UNIX系统命令

 

1、 man,即mannual,可以通过此命令查看UNIX在线文档并查找关于本系统的命令、工具、开发函数的详细介绍、选项及使用方法。甚至对于man本身,可以输入:

# man man

即可查阅man命令有关的系统手册信息。

事实上还有一些更为常用的查看帮助方法,这在执行一些特定工作时能大大提高查找效率。例如:

# command –help

–help本身是查看命令帮助的选项,少数命令还支持-h选项。–help的好处是只列出命令的输入格式以及全部选项说明,也就是最常用的一种帮助查看方式。

# info command

info是GNU下的一个文本工具,Linux中涵盖了大量的系统开发信息,包含几乎所有man和–help中的内容,一般只有专业人员才会用到。

# which command

显示命令的具体目录。

 

2、 显示系统信息。基本系统信息包括了系统时间、在线用户以及当前连接的终端设备。

# date

查看系统日期,其强大之处在于可以定制输出格式,自身甚至可以进行大量实用运算。

例如输入:

# date ”+%Y.%m.%d %H:%M:%S Day %j”

2009.5.20 17:51:05 Day 140

“%j”记录已经历当年的天数,更多参数可在–help中查询。

# cal

查看某月日历,空参数则直接返回当月日历,另外可以用

# cal month year

指定查看日历。

# who

查看在线用户,显示用户ID、登录终端以及登录时间,如果用户通过网络登录,还会附带显示登录主机名称。

这里需要解释一下“登录终端”功能。Linux采用了虚拟终端技术,这种技术可以使得用户在虚拟shell对远程主机进行操作,即Virtual Terminal。具体来讲,就是通过键盘Alt+F1-F6键在6个不同的shell间进行切换,每个shell的登录用户是任意的(甚至是可以相同的)。平时没事的时候,我们可以在不同的终端登录不同用户,并互相进行一些用户间操作(显得有些浪费时间……)。关于Virtual Terminal的设置在/etc/inittab中,如下内容:

# Run gettys in standard runlevels

1:2345:respawn:/sbin/mingetty tty1

2:2345:respawn:/sbin/mingetty tty2

3:2345:respawn:/sbin/mingetty tty3

4:2345:respawn:/sbin/mingetty tty4

5:2345:respawn:/sbin/mingetty tty5

6:2345:respawn:/sbin/mingetty tty6

 

ttyX指定相关终端的名称,minigetty将终端与login进行连接,实现验证登录用户的功能。另外如果系统安装了X-window,那么该系统启动后占用下一个未被占用的终端(如果/etc/inittab中x值为5默认启动X-window模式的话,则该系统占用tty1终端)。另外如果在X-window系统中使用ctrl+alt+F1-F6依然可以进行文本、X-window模式间的切换(理论上是可行的,但笔者在Virtual Machine 6.5挂载redhat 9.0中似乎无法实现此功能,或者是因为切换成本太高,有时甚至会导致X-window崩溃5.23备注:家里的ubuntu8.1完全是可行的)。

# who am i

# whoami

以上两条命令显示当前主机登录用户情况。

# w

显示当前系统的详细状态,包括运行时间、在线用户数量、IDLE(该终端空闲时间)、JCPU(该终端的所有作业占用的CPU时间)、PCPU(该终端的前台作业占用的CPU时间)以及what(显示该终端当前正在运行的命令或程序)。

# uptime

仅仅显示w命令的表头内容,如系统时间、在线用户数量、平均CPU占用时间等等。

# tty

显示当前终端的设备文件名。

 

3、 更新用户信息。

# usermod

该命令只能被root用户使用,可以更改指定用户的用户名、密码等信息。普通用户使用时会显示command not found错误。

# passwd

全用户使用,简易更新当前用户的登录密码,并且有评价当前密码复杂度的功能。

 

4、 与其他用户通信。

# write mp77

Hello world!

可以向正在登录的用户发送消息,消息可以换行,Ctrl+D结束发送,可以使用<重定向文档中的内容。

# talk mp77

如果接收方允许接收对话,则屏幕分成上下两部分,两用户可以以键盘会话。终止talk的执行按Ctrl+C键或Ctrl+D键。

如果对方此时没有登录系统或者虽已登录但拒绝消息,通信失败。与其他UNIX系统上的用户会话的talk命令中应有对方主机名,如cdc.xynet.edu.cn主机上的用户wang通信,执行下列命令:

# talk wang@cdc.xynet.edu.cn

设置本机是否允许接收消息,则输入以下命令:

# mesg

显示当前mesg状态。

# mesg y

将mesg状态置为yes,允许接收消息。

# mesg n

拒绝接收消息,但任何时候都无法拒绝root向用户发送的消息。

# wall

即write to all,广播方式向所有已登录用户发送消息,该命令无法被屏蔽,默认使用权限为所有用户,因此很多系统管理员需设置禁止普通用户使用该命令。

 

5、 mail

mail是一种系统应用程序,从理论上说,mail也是用户间通信的一种方式(但不限于此功能),鉴于其功能强大且比较复杂,移至本段说明。

# mail -s ”title” username@hostname.address

向username发送一封邮件,可以通过重定向输入文件,邮件内容按Ctrl+D结束输入。

紧接着会出现Cc:即Carbon copy,建立副本并抄送往其他用户。如果要发送带附件的邮件,建议安装更为强大的electronic mail agent,例如mutt(Redhat 9.0附带此软件包):

# mutt -a [appendix] -s [title]

接着按提示操作即可,注意mutt编辑邮件内容时会自动调用vi,完成后需要保存退出并自动退回mutt界面,按y完成发送。

如果用户接收到新邮件,则每次登录时系统会提示You have new mail。输入mail即可。

此时会进入&的命令提示符状态,并且只会解释mail中定义的一些命令或选项,查看帮助输入?即可。

所有未读邮件会在提示符上方列表中显示,顶行的箭头指示当前操作对应于某邮件,事实上我们也可以使用后面的ID直接指定操作对象,现说明几种常用功能:

# q

阅读当前邮件,如果删除则输入d,所有未读邮件保存在/var/spool/mail/username中。

对邮件操作结束后有两种退出模式:

# x //不存档退出,即还原之前的所有操作,已读邮件仍被列为未读。

# q //存档退出,已读邮件会从/var/spool/mail/username中删除,并存入该用户主目录下的mbox中。

 

6、 远程数据交流,包括远程登录和远程文件传输两种功能。

远程登录有rlogin、telnet等命令。

# rlogin hostname

# telnet localhost

前文提到rlogin因为缺乏安全性支持,已经不被推荐使用,因而主流依然是telnet。

连接成功后会提示输入login name以及password,验证成功后会直接进入Virtual terminal模式进行远程控制。期间输入^]可以挂起远程terminal进入telnet>命令提示符,输入help可以查看命令帮助,z挂起telnet回到VT模式,close关闭当前连接,quit直接退出telnet。

# rcp username@hostname:directory dstdirectory

rcp即remote file copy远程文件复制,本功能类似windows中的共享功能,且仅能在UNIX主机间使用。需要注意的是,rcp需要提前预知远程主机用户名,以及拥有远程复制的权限。此外还可以-x开启传输加密功能(增加主机负担)。

更为强大灵活的工具要依赖ftp,其基本格式类似telnet,但内部命令完全不同。

# ftp hostname

ftp登录远程主机,连接成功后提示输入用户名和密码,并进入ftp>命令提示符。也可以在提示符内输入open hostname连接目标主机。help可以查看ftp命令集,常用的有get(下载)、put(上传)、delete(删除)、bye(断开)等。

这里值得注意的是ftp的ascii和binary两种传输模式。

ftp默认使用ascii传输文件,这是因为在不同系统环境中传输数据时,有可能会遇到双方主机文本格式不同的问题,因此需要通过ftp对源文本文件进行转译以适应这种变化。但当传输的内容是直接建立在二进制基础上时,这种转译就有可能破坏所传输文件。这时切换至binary模式可以解决此类问题。

对ftp感兴趣的读者可以参考RFC 959,空闲时间按标准自己做个ftp客户端玩玩(强调是空闲时间…)。