第五章、首次登陆与在线求助 man page

最近升级日期:2009/08/17
终于可以开始使用Linux这个有趣的系统了!由于Linux系统使用了异步的磁盘/内存数据传输模式,同时又是个多人多任务的环境, 所以你不能随便的不正常关机,关机有一定的程序喔!错误的关机方法可能会造成磁盘数据的损毁呢! 此外,Linux有多种不同的操作方式,图形接口与文字接口的操作有何不同? 我们能否在文字接口取得大量的命令说明,而不需要硬背某些命令的选项与参数等等。这都是这一章要来介绍的呢!


首次登陆系统


登陆系统有这么难吗?并不难啊!虽然说是这样说,然而很多人第一次登陆Linux的感觉都是『接下来我要干啥?』如果是以图形接口登陆的话,或许还有很多好玩的事物, 但要是以文字接口登陆的话,面对着一片黑压压的屏幕,还真不晓得要干嘛呢!为了让大家更了解如何正确的使用Linux, 正确的登陆与离开系统还是需要说明的!


首次登陆CentOS 5.x图形接口


启动就启动呀!怎么还有所谓的登陆与离开呀?不是启动就能够用计算机了吗? 开什么玩笑,在Linux系统中由于是多人多任务的环境,所以系统随时都有很多任务在进行,因此正确的开关机可是很重要的! 不正常的关机可能会导致文件系统错乱,造成数据的毁损呢!这也是为什么通常我们的Linux主机都会加挂一个不断电系统啰!

如果在第四章一切都顺利的将CentOS 5.x完成安装并且重新启动后, 应该就会出现如下的等待登陆的图形画面才对。画面的左上方是CentOS 5的distribution说明, 而1号箭头所指处的四个文字则是可以改变工作环境的地方,2号箭头说明今天的日期/时间与主机名(www.vbird.tsai), 3号箭头就是我们可以使用账号登陆的输入框框啰。

X等待登陆的画面
图1.1.1、X等待登陆的画面

让我们来了解一下上图1号箭头所指的那四个功能吧!先点选一下『语言』按钮,你会发现屏幕出现很多可以选择的语系数据! 鸟哥撷取部分画面如下所示。在下图中你可以选择不同的中文或者是其他语言,等一下你登陆后, 屏幕就会显示你所选择的语系画面了。不过要注意的是,如果你选择的语系的软件文件并没有被安装, 那么登陆系统后就会出现很多乱码啊!如下图所示,鸟哥先选择台湾的繁体中文,然后按下『改变语言』按钮即可。

选择语系的画面
图1.1.2、选择语系的画面

接下来让我们单击『作业阶段』按钮吧!按下作业阶段后屏幕就会出现如下的画面。 所谓的作业阶段指的是你可以使用不同的图形接口来操作整个Linux系统。 这个图形接口并不是只有将壁纸背景更改而已,而是整个显示、控制、管理、图形软件都不相同了! 非常的好玩!目前CentOS 5.x默认至少就提供GNOME/KDE这两种图形接口(我们称为窗口管理员, Window Manager, 注1)。 如下图所示。CentOS 5.x默认使用的是GNOME这个玩意儿,如果你没有改变的话,那等一下就会登陆GNOME的图形接口啰。

更改作业阶段的窗口示意图
图1.1.3、更改作业阶段的窗口示意图

接下来准备要登陆啦!我们在经过第四章的安装过程后,理论上现在会有两个可用的账号,以鸟哥的安装为例, 我有root及vbird两个可用的账号喔!那第四章我们也说过,最好不要使用root啦!因此, 鸟哥就在图1.1.1的地方开始用vbird来登陆了,如下所示,记得输入完毕后要按『Enter』喔!

输入使用者账号的地方
图1.1.4、输入使用者账号的地方

接着系统会要你输入密码,此时请在密码栏填入该账号的密码!在你输入密码时该字段会显示黑点来取代! 这是为了保密啦!输入完毕后请按下『Enter』开始登陆啰!

输入密码的示意图
图1.1.5、输入密码的示意图

由于鸟哥在图1.1.2曾经修改过语系数据,因此系统就会询问你, 是否要将刚刚的配置变更成为默认值?还是只有这次登陆才使用呢?你可以按下『成为默认值』, 让你这次的决定套用到未来的操作喔!OK!让我们开始来玩一玩GNOME这个默认的窗口管理员吧!

询问是否将配置值更改为默认值的窗口
图1.1.6、询问是否将配置值更改为默认值的窗口

GNOME的操作与注销


终于给他看到图形接口啦!真是很开心吧!如下图所示,整个GNOME的窗口大约分为三个部分:

  • 上方任务栏(control panel)
    上半部有应用程序、位置与系统及快捷键的地方,可以看成是任务栏,你可以使用鼠标在1号箭头处 (应用程序) 点击一下, 就会有更多的程序集出现!然后移动鼠标就能够使用各个软件了。至于3号箭头所指的地方,就是系统时间与声音调整。 另外,在3号箭头的左边不是有个打X的符号吗?那个是CentOS 5.x的在线升级系统(update)。由于我们尚未连上Internet, 所以这边就会显示X喔。

  • 壁纸
    整个画面中央就是壁纸啦!在壁纸上默认有三个小按钮,例如箭头2所指的就是文件总管。你可以使用鼠标连击两下就能够打开该功能。 其实计算机与个人数据夹都是文件总管啦!如果有运行各种程序,程序的显示也都是在壁纸位置喔。

  • 下方任务栏
    下方任务栏的目的是将各工作显示在这里,可以方便使用者点选之用。其中4号箭头所指处为将所有工作最小化隐藏, 至于5号箭头处指的那四个玩意儿,就是四个虚拟壁纸(Virtual Desktop)了!GNOME提供四个壁纸给使用者操作, 你可以在那四个壁纸随便点一点,看看有啥不同!尤其是当你有运行不同的程序时,就会发现他的功能啦! ^_^
GNOME的窗口画面示意图
图1.2.1、GNOME的窗口画面示意图

Linux壁纸的使用方法几乎跟Windows一模一样,你可以在壁纸上按下右键就可以有额外的菜单出现; 你也可以直接按下壁纸上的『个人数据夹』,就会出现类似Windows的『文件总管』的文件/目录管理窗口, 里面则出现你自己的工作目录;好了,让我们点击一下『应用程序』那个按钮吧!看看下拉式菜单中有什么软件可用! 如下图所示。你要注意的是,因为我们的Linux尚未连上Internet,所以在线升级系统会有警告信息(2号箭头处), 请你将他关闭吧!

Tips:
关于『个人数据夹』的内容,记得我们之前说过Linux是多人多任务的操作系统吧? 每个人都会有自己的『工作目录』,这个目录是用户可以完全掌控的, 所以就称为『用户个人家目录』了。一般来说,家目录都在/home底下, 以鸟哥这次的登陆为例,我的账号是vbird,那么我的家目录就应该在/home/vbird/啰!
鸟哥的图示
应用程序的下拉式菜单示意图
图1.2.2、应用程序的下拉式菜单示意图
Tips:
那个在线升级的按钮不是不重要喔!而是因为我们尚未连上Internet所以这里才先将他略过的。 你的系统稳不稳定、安不安全与这个玩意儿相关性可大了!千万别小看他啰! 有兴趣的朋友可以到google先搜寻一下yum这个机制来看看先! ^_^ 因为你的Linux尚未在线升级过,所以先不要连上Internet喔!
鸟哥的图示

  • 使用文件总管

首先我们来了解一下常用的GNOME文件总管要怎么用?要说明的是,GNOME的文件总管其实称为『鹦鹉螺(Nautilus)』, 只是我们比较习惯称呼文件总管就是了。^_^。当你在壁纸中点选『个人数据夹』就会出现如下图示。 默认鹦鹉螺是用小图标来显示文件,而且隐藏文件也没有显示出来呢! 所以你只会看到一个文件。注意1号箭头所指的地方,你可以按下那个小按钮来切换到不同的目录去喔!

鹦鹉螺文件总管的默认显示画面
图1.2.3、鹦鹉螺文件总管的默认显示画面

鸟哥还是比较喜欢列表式的将所有数据都列出来,所以我们的配置需要修正一下。 请在上图中按下『编辑』点选『偏好配置』后,会出现如下图示,请将箭头所在处的两个地方修订一下, 包括以列表显示及显示隐藏文件喔!填完就按下右下角的『关闭』即可。

鹦鹉螺文件总管的偏好配置窗口
图1.2.4、鹦鹉螺文件总管的偏好配置窗口

将原本的画面关闭再重开一个文件总管,请如下图所示,按下『显示』选择『显示隐藏文件』及『以列表方式显示』后, 就可以发现到好多文件啰!什么是隐藏档呢?其实档名开头为小数点『.』的, 那个文件就是隐藏档了。所以在如下图的画面中,你会看到多出来的文件档名都是小数点开头的!

家目录下的隐藏文件数据
图1.2.5、家目录下的隐藏文件数据

除了自己的家目录之外,你可以在上图的左下角『vbird』处点一下,然后选择根目录(/),就会出现如下图示。 1号箭头告诉我们,这个vbird账号无法登陆该目录,所以有个红色的禁止图示;如果想要查阅某目录的内容, 如2号箭头所指处,你可以点一下三角形的图示,就能够将该目录内的数据捉出来了;最后,如同3号箭头所指的, 如果是出现纸张的图示,代表那是个文件而不是目录啰!

鹦鹉螺文件总管的目录/文件显示情况
图1.2.6、鹦鹉螺文件总管的目录/文件显示情况


  • 中文输入法

在CentOS 5.x当中所使用的中文输入法为SCIM软件,你要启动SCIM很简单,只要叫出任何一个能够输入文字的软件, 然后按下『Ctrl』+『Space(空格键)』就能够呼叫出来了!以下图为例,鸟哥运行『附属应用程序』内的『文字编辑』软件, 然后按下[ctrl]+[space]就出现下图。然后点一下图中的箭头所指处,你就会看到很多输入法了! 比较有趣的是那个『新酷音』输入法, 其实那就是大家常用的新注音啦!可以自动挑字的输入法!不错用喔!

SCIM中文输入法呼叫示意图
图1.2.7、SCIM中文输入法呼叫示意图


  • 注销GNOME

如果你没有想要继续玩X Window了,那就注销吧!如何注销呢?如下图所示,点选『系统』内的『注销』即可。 要记得的是,注销前最好将所有不需要的程序都关闭了再注销啊!

注销GNOME的按钮
图1.2.8、注销GNOME的按钮

会有一个确认窗口跑出来给我们确认一下,就给他点选『注销』吧!

注销GNOME的确认窗口
图1.2.9、注销GNOME的确认窗口

请注意喔,注销并不是关机!只是让你的账号离开系统而已喔!


  • 其他练习

底下的例题请大家自行参考并且实作一下喔!题目很简单,所以鸟哥就不额外抓图了!

  • 如何在上方任务栏中新增其他的图示(icons),让操作更方便?请尝试新增终端机图标;
  • 尝试浏览一下/etc这个目录内,有哪些文件/目录存在;
  • 请将/etc/crontab这个文件『复制』到你的家目录中;
  • 请修改四个Virtual Desktop的壁纸,让他们都不相同;
  • 尝试修改屏幕分辨率;

KDE的操作与注销


玩过了GNOME之后,接下来让我们来了解一下KDE这个也是很常见的窗口管理程序吧! 请回到图1.1.1中,在按下『作业阶段』后请选择KDE,然后输入你的账号密码来登陆KDE的环境。 登陆后的默认画面如下所示:

KDE登陆后的默认画面
图1.3.1、KDE登陆后的默认画面

上图中的箭头所指处的功能说明如下:

  • 壁纸:上图中整个蓝色画面就是壁纸。而一号箭头指的地方,一开始仅有垃圾桶而已,你可以自行添加其他的快速按钮在壁纸! 当有工作被运行时,该工作就是显示在这个壁纸的区域中;

  • 任务栏快捷键:2号箭头指的地方就是KDE的K菜单!你给他单击该菜单就会出现更多的选项功能。 感觉上就是开始菜单啰!至于K菜单的右边还有很多的快捷按钮,你可以自行点选看看;

  • 虚拟壁纸:3号箭头所指的就是虚拟壁纸。与GNOME相似的,CentOS的KDE也提供四个虚拟壁纸。 你可以在各个壁纸分别放置不同的底图哩!自己玩看看吧!

  • 任务栏:4号箭头处,当你有运行任何工作时,该工作的图标就会显示到这个地方。

  • 小时钟:5号箭头所指的地方就是目前的时间。默认是数字时钟,你可以将他改为圆形的小时钟喔!


  • KDE内的文件管理

同样的,得先来了解一下文件管理的软件啊!在GNOME文件总管称为鹦鹉螺, 在KDE文件总管称为『Konqueror, 征服家』。你可以按下『K菜单』然后选择『家目录』,如下所示:

开启征服家的方式之一
图1.3.2、开启征服家的方式之一

启动征服家默认会出现如下图所示的画面:

KDE的征服家显示文件数据图标
图1.3.3、KDE的征服家显示文件数据图标

如上图所示为征服家的默认显示情况。画面的左边有点类似目录的列表,右边则是文件详细的信息。 而征服家可以让妳仅选择使用者可以随意应用的家目录 (2号箭头处) 或者是整个系统的文件信息 (1号箭头处)。 征服家默认显示的是家目录啦。3号箭头处指出该目录内有哪些信息,4号箭头则是详细的文件参数啦。 接下来请点选『Root文件夹』吧!让我们瞧瞧整个文件系统有些什么东西?

根目录数据的显示
图1.3.4、根目录数据的显示

如上图所示,当你点选Root文件夹,并且按下/etc那个文件夹后,画面右边就会出现/etc文件夹的文件内容了。 一开始文件是以小图标来显示,如果你按下列表图标,就是上图中3号箭头处,那就会出现详细的文件数据了。 如下图所示:

文件数据的详细列表显示
图1.3.5、文件数据的详细列表显示

如上图所示,按下2号箭头处让加号 (+) 展开,妳就能够看到更详细的文件数据。然后拉动4号箭头处的移动钮, 你就能够看到3号箭头处的更详细的信息,包括文件大小、类型、更动时间、所属使用者与群组等参数数据。 其他更详细的数据就请自己玩玩吧!


  • 注销KDE或关机

如果不想要玩KDE了,请按下『K菜单』,然后选择『注销』功能,就会出现如下图示:

KDE的注销画面示意图
图1.3.6、KDE的注销画面示意图

如上图所示,画面最上方的『vbird』指的是你的账号,如果你使用不同的账号登陆,这里就会有不同的账号名称。 至于画面中的三个按钮功能为:

  • 『关闭目前的会话』:就是注销而已,会回到图1.1.1等待登陆的画面;
  • 『关闭计算机』:就是关机的功能;
  • 『重新启动计算机』:就是重新启动的功能!

至于更多的X window相关的使用技巧,以及相关的软件应用,鸟哥这里就不多说了, 因为鸟哥着重在Linux操作系统的基础应用以及网络服务器的应用啊! ^_^ 如果你还真的有兴趣, 建议你可以前往杨老师的网站上看看喔!http://apt.nc.hcc.edu.tw/docs/FC3_X/


  • 其他练习
  • 由『K菜单』-->『寻找文件/文件夹』启动搜寻,并找寻档名为 crontab 的文件在哪里?
  • 任务栏的最右方原本是数字形态的时钟,请将他改为图形显示的时钟;
  • 如何叫出控制台?控制面板的『区域性』里面的『键盘布局』有何用处?


  • 重新启动X Window的快速按钮

一般来说,我们是可以手动来直接修改X Window的配置文件的,不过,修改完成之后的配置项目并不会立刻被加载, 必须要重新启动X才行(特别注意,不是重新启动,而是重新启动X!) 。那么如何重新启动X呢? 最简单的方法就是:

  • 直接注销,然后再重新登陆即可;
  • 在X的画面中直接按下[Alt] + [Ctrl] + [Backspace]

第二个方法比较有趣,[backspace]是退格键,你按下三个按钮后X Window立刻会被重新启动。 如果你的X Window因为不明原因导致有点问题时,也可以利用这个方法来重新启动X喔!^_^


X window与文本模式的切换


我们前面一直谈到的是X Window的窗口管理员环境,那么在这里面有没有纯文本接口的环境啊? 当然有啊!但是,要怎么切换X Window与文本模式呢?注意喔,通常我们也称文本模式为终端机接口, terminal 或 console喔!Linux默认的情况下会提供六个Terminal来让使用者登陆, 切换的方式为使用:[Ctrl] + [Alt] + [F1]~[F6]的组合按钮。

那这六个终端接口如何命名呢,系统会将[F1] ~ [F6]命名为tty1 ~ tty6的操作接口环境。 也就是说,当你按下[crtl] + [Alt] + [F1]这三个组合按钮时 (按着[ctrl]与[Alt]不放,再按下[F1]功能键), 就会进入到tty1的terminal界面中了。同样的[F2]就是tty2啰!那么如何回到刚刚的X窗口接口呢?很简单啊!按下[Ctrl] + [Alt] + [F7]就可以了!我们整理一下登陆的环境如下:

  • [Ctrl] + [Alt] + [F1] ~ [F6]  :文字接口登陆 tty1 ~ tty6 终端机;
  • [Ctrl] + [Alt] + [F7]   :图形接口壁纸。

在Linux默认的登陆模式中,主要分为两种,一种是仅有纯文本接口(所谓的运行等级run level 3)的登陆环境,在这种环境中你可以有tty1~tty6的终端界面,但是并没有图形窗口接口的环境喔。 另一种则是图形接口的登陆环境(所谓的运行等级run level 5),这也是我们第四章安装妥当后的默认环境! 在这个环境中你就具有tty1~tty7了!其中的tty7就是启动完成后的默认等待登陆的图形环境!

如果你是以纯文本环境启动Linux的,默认的tty7是没有东西的!万一如此的话,那要怎么启动X窗口画面呢? 你可以在tty1~tty6的任意一个终端接口使用你的账号登陆后(登陆的方法下一小节会介绍), 然后下达如下的命令即可:

[vbird@www ~]$ startx 

不过startx这个命令并非万灵丹,你要让startx生效至少需要底下这几件事情的配合:

  • 你的tty7并没有其他的窗口软件正在运行(tty7必须是空出来的);
  • 你必须要已经安装了X Window system,并且X server是能够顺利启动的;
  • 你最好要有窗口管理员,例如GNOME/KDE或者是阳春的TWM等;
  • 启动X所必须要的服务,例如字型服务器(X Font Server, xfs)必须要先启动。

刚刚我们谈到的Linux启动时可以选择纯文本或者是窗口环境,也谈到了运行等级(run level)这东西! Linux默认提供了七个Run level给我们使用,其中最常用到的就是run level 3与run level 5这两者了。 如果你想要让Linux在下次启动时使用纯文本环境(run level 3)来登陆, 只要修订一下/etc/inittab这个文件的内容,就能够在下次重新启动时生效了! 因为我们尚未提到vi以及启动过程的详细信息, 所以啊,这部分得到系统管理员篇幅的时候再说明!别担心,再仔细的看下去吧!


在终端界面登陆linux


刚刚你如果有按下[Ctrl] + [Alt] + [F1]就可以来到tty1的登陆画面,而如果你是使用纯文本接口(其实是run level 3)启动Linux主机的话,那么默认就是会来到tty1这个环境中。这个环境的等待登陆的画面有点像这样:

CentOS release 5.3 (Final) 
Kernel 2.6.18-128.el5 on an i686 
 
www login: vbird 
Password: 
[vbird@www ~]$ _ 

上面显示的内容是这样的:

  1. CentOS release 5.3 (Final)
    显示Linux distribution的名称(CentOS)与版本(5.3);

  2. Kernel 2.6.18-128.el5 on an i686
    显示核心的版本为2.6.18-128.el5, 且目前这部主机的硬件等级为i686。如果是使用x86_64的Linux版本且安装到64位的PC,那你的硬件等级就会是『X86_64』喔!

  3. www login:
    那个www是你的主机名。我们在第四章安装时有填写主机名为: www.vbird.tsai,主机名的显示通常只取第一个小数点前的字母,所以就成为www啦!至于login:则是一支可以让我们登陆的程序。 你可以在login:后面输入你的账号。以鸟哥为例,我输入的就是第四章创建的vbird那个账号啦! 当然啰,你也可以使用root这个账号来登陆的。不过『root』这个账号代表在Linux系统下无穷的权力, 所以尽量不要使用root账号来登陆啦!

  4. Password:
    这一行则在第三行的vbird输入后才会出现,要你输入密码啰! 请注意,在输入密码的时候,屏幕上面『不会显示任何的字样!』, 所以不要以为你的键盘坏掉去!很多初学者一开始到这里都会拼命的问!啊我的键盘怎么不能用...

  5. [vbird@www ~]$ _
    这一行则是正确登陆之后才显示的信息, 最左边的vbird显示的是『目前用户的账号』,而@之后接的www则是『主机名』,至于最右边的~则指的是 『目前所在的目录』,那个$则是我们常常讲的『提示字符』啦!
Tips:
那个 ~ 符号代表的是『用户的家目录』的意思,他是个『变量!』 这相关的意义我们会在后续的章节依序介绍到。举例来说,root的家目录在/root, 所以 ~ 就代表/root的意思。而vbird的家目录在/home/vbird, 所以如果你以vbird登陆时,他看到的 ~ 就会等于/home/vbird喔!

至于提示字符方面,在Linux当中,默认root的提示字符为 # ,而一般身份用户的提示字符为 $ 。

还有,上面的第一、第二行的内容其实是来自于/etc/issue这个文件喔!
鸟哥的图示

好了这样就是登陆主机了!很快乐吧!耶~

另外,再次强调,在Linux系统下最好常使用一般账号来登陆即可,所以上例中鸟哥是以自己的账号vbird来登陆的。 因为系统管理员账号(root)具有无穷大的权力,例如他可以删除任何一个文件或目录。因此若你以root身份登陆Linux系统, 一个不小心下错命令,这个时候可不是『欲哭无泪』就能够解决的了问题的~

因此,一个称职的网络/系统管理人员,通常都会具有两个账号,平时以自己的一般账号来使用Linux主机的任何资源, 有需要动用到系统功能修订时,才会转换身份成为root呢!所以,鸟哥强烈建议你创建一个普通的账号来供自己平时使用喔! 更详细的账号信息,我们会在后续的『第十四章账号管理』再次提及! 这里先有概念即可!

那么如何离开系统呢?其实应该说『注销Linux』才对!注销很简单,直接这样做:

[vbird@www ~]$ exit 

就能够注销Linux了。但是请注意:『离开系统并不是关机!』 基本上,Linux本身已经有相当多的工作在进行,你的登陆也仅是其中的一个『工作』而已, 所以当你离开时,这次这个登陆的工作就停止了,但此时Linux其他的工作是还是继续在进行的! 本章后面我们再来提如何正确的关机,这里先创建起这个概念即可!


文本模式下命令的下达

其实我们都是透过『程序』在跟系统作沟通的,本章上面提到的窗口管理员或文本模式都是一组或一只程序在负责我们所想要完成的命令。 文本模式登陆后所取得的程序被称为壳(Shell),这是因为这支程序负责最外面跟使用者(我们)沟通,所以才被戏称为壳程序! 更多与操作系统及壳程序的相关性可以参考第零章、计算器概论内的说明。

我们Linux的壳程序就是厉害的bash这一支!关于更多的bash我们在第三篇再来介绍。现在让我们来练一练打字吧!


开始下达命令


其实整个命令下达的方式很简单,你只要记得几个重要的概念就可以了。 举例来说,你可以这样下达命令的:

[vbird@www ~]$ command [-options] parameter1 parameter2 ... 
                  命令     选项      参数(1)    参数(2) 
说明: 
0. 一行命令中第一个输入的部分绝对是『命令(command)』或『可运行文件案』 
1. command 为命令的名称,例如变换路径的命令为 cd 等等; 
2. 中刮号[]并不存在于实际的命令中,而加入选项配置时,通常选项前会带 - 号, 
   例如 -h;有时候会使用选项的完整全名,则选项前带有 -- 符号,例如 --help; 
3. parameter1 parameter2.. 为依附在选项后面的参数,或者是 command 的参数;  
4. 命令, 选项, 参数等这几个咚咚中间以空格来区分,不论空几格 shell 都视为一格;  
5. 按下[Enter]按键后,该命令就立即运行。[Enter]按键代表着一行命令的开始启动。 
6. 命令太长的时候,可以使用反斜杠 (\) 来跳脱[Enter]符号,使命令连续到下一行。 
   注意!反斜杠后就立刻接特殊字符,才能跳脱! 
其他: 
a. 在 Linux 系统中,英文大小写字母是不一样的。举例来说, cd 与 CD 并不同。 
b. 更多的介绍等到第十一章 bash 时,再来详述。 

注意到上面的说明当中,『第一个被输入的数据绝对是命令或者是可运行的文件』! 这个是很重要的概念喔!还有,按下[Enter]键表示要开始运行此一命令的意思。我们来实际操作一下: 以ls这个『命令』列出『自己家目录(~)』下的『所有隐藏档与相关的文件属性』, 要达成上述的要求需要加入 -al 这样的选项,所以:

[vbird@www ~]$ ls -al ~ 
[vbird@www ~]$ ls           -al   ~ 
[vbird@www ~]$ ls -a  -l ~ 

上面这三个命令的下达方式是一模一样的运行结果喔!为什么?请参考上面的说明吧! 关于更详细的文本模式使用方式,我们会在第十一章认识BASH再来强调喔! 此外,请特别留意,在Linux的环境中, 『大小写字母是不一样的东西!』也就是说,在Linux底下, VBird与vbird这两个文件是『完全不一样的』文件呢!所以, 你在下达命令的时候千万要注意到命令是大写还是小写。例如当输入底下这个命令的时候,看看有什么现象:

[vbird@www ~]$ date  <==结果显示日期与时间 
[vbird@www ~]$ Date  <==结果显示找不到命令 
[vbird@www ~]$ DATE  <==结果显示找不到命令 

很好玩吧!只是改变小写成为大写而已,该命令就变的不存在了! 因此,请千万记得这个状态呦!


  • 语系的支持

另外,很多时候你会发现,咦!怎么我输入命令之后显示的结果的是乱码? 这跟鸟哥说的不一样啊!呵呵!不要紧张~我们前面提到过,Linux是可以支持多国语系的,若可能的话, 屏幕的信息是会以该支持语系来输出的。但是,我们的终端机接口(terminal)在默认的情况下, 无法支持以中文编码输出数据的。这个时候,我们就得将支持语系改为英文,才能够以英文显示出正确的信息。 那怎么做呢?你可以这样做:

1. 显示目前所支持的语系 
[vbird@www ~]$ echo $LANG 
zh_TW.UTF-8 
# 上面的意思是说,目前的语系(LANG)为zh_TW.UTF-8,亦即台湾繁体中文的万国码 
 
2. 修改语系成为英文语系 
[vbird@www ~]$ LANG=en_US 
# 注意到上面的命令中没有空格符,且英文语系为en_US才对喔! 
[vbird@www ~]$ echo $LANG 
en_US 
# 再次确认一下,结果出现,确实是en_US这个英文语系! 

注意一下,那个『LANG=en_US』是连续输入的,等号两边并没有空格符喔! 这样一来,就能够在『这次的登陆』察看英文信息啰!为什么说是『这次的登陆』呢? 因为,如果你注销Linux后,刚刚下达的命令就没有用啦! ^_^,这个我们会在第十一章再好好聊一聊的!好啰,底下我们来练习一下一些简单的命令, 好让你可以了解命令下达方式的模式:


基础命令的操作


底下我们立刻来操作几个简单的命令看看啰!

  • 显示日期与时间的命令: date
  • 显示日历的命令: cal
  • 简单好用的计算器: bc


1. 显示日期的命令: date


如果在文字接口中想要知道目前Linux系统的时间,那么就直接在命令列模式输入date即可显示:

[vbird@www ~]$ date 
Mon Aug 17 17:02:52 CST 2009 

上面显示的是:星期一, 八月十七日, 17:02 分, 52秒,在 2009 年的 CST 时区!台湾在CST时区中啦! 请赶快动手做做看呦!好了,那么如果我想要让这个程序显示出『2009/08/17』这样的日期显示方式呢? 那么就使用date的格式化输出功能吧!

[vbird@www ~]$ date +%Y/%m/%d 
2009/08/17 
[vbird@www ~]$ date +%H:%M 
17:04 

那个『+%Y%m%d』就是date命令的一些参数功能啦!很好玩吧!那你问我, 鸟哥怎么知道这些参数的啊?要背起来吗?当然不必啦!底下再告诉你怎么查这些参数啰!

从上面的例子当中我们也可以知道,命令之后的选项除了前面带有减号『-』之外,某些特殊情况下, 选项或参数前面也会带有正号『+』的情况!这部份可不要轻易的忘记了呢!


2. 显示日历的命令: cal


那如果我想要列出目前这个月份的月历呢?呵呵!直接给他下达cal即可!

[vbird@www ~]$ cal 
     August 2009 
Su Mo Tu We Th Fr Sa 
                   1 
 2  3  4  5  6  7  8 
 9 10 11 12 13 14 15 
16 17 18 19 20 21 22 
23 24 25 26 27 28 29 
30 31 

除了本月的日历之外,连同今日所在处都会有反白的显示呢!真有趣!cal (calendar)这个命令可以做的事情还很多,例如你可以显示整年的月历情况:

[vbird@www ~]$ cal 2009 
                               2009 
 
       January               February                 March 
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa 
             1  2  3    1  2  3  4  5  6  7    1  2  3  4  5  6  7 
 4  5  6  7  8  9 10    8  9 10 11 12 13 14    8  9 10 11 12 13 14 
11 12 13 14 15 16 17   15 16 17 18 19 20 21   15 16 17 18 19 20 21 
18 19 20 21 22 23 24   22 23 24 25 26 27 28   22 23 24 25 26 27 28 
25 26 27 28 29 30 31                          29 30 31 
 
        April                   May                   June 
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa 
          1  2  3  4                   1  2       1  2  3  4  5  6 
 5  6  7  8  9 10 11    3  4  5  6  7  8  9    7  8  9 10 11 12 13 
12 13 14 15 16 17 18   10 11 12 13 14 15 16   14 15 16 17 18 19 20 
19 20 21 22 23 24 25   17 18 19 20 21 22 23   21 22 23 24 25 26 27 
26 27 28 29 30         24 25 26 27 28 29 30   28 29 30 
                       31 
....(以下省略).... 

基本上cal这个命令可以接的语法为:

[vbird@www ~]$ cal [month] [year] 

所以,如果我想要知道2009年10月的月历,可以直接下达:

[vbird@www ~]$ cal 10 2009 
    October 2009 
Su Mo Tu We Th Fr Sa 
             1  2  3 
 4  5  6  7  8  9 10 
11 12 13 14 15 16 17 
18 19 20 21 22 23 24 
25 26 27 28 29 30 31 

那请问今年有没有13月啊?来测试一下这个命令的正确性吧!下达下列命令看看:

[vbird@www ~]$ cal 13 2009 
cal: illegal month value: use 1-12 

cal竟然会告诉我们『错误的月份,请使用1-12』这样的信息呢!所以, 未来你可以很轻易的就以cal来取得日历上面的日期啰!简直就是万年历啦! ^_^。 另外,由这个cal命令的练习我们也可以知道,某些命令有特殊的参数存在, 若输入错误的参数,则该命令会有错误信息的提示,透过这个提示我们可以藉以了解命令下达错误之处。 这个练习的结果请牢记在心中喔!


3. 简单好用的计算器: bc


如果在文本模式当中,突然想要作一些简单的加减乘除,偏偏手边又没有计算器!这个时候要笔算吗? 不需要啦!我们的Linux有提供一支计算程序,那就是bc喔。你在命令列输入bc后,屏幕会显示出版本信息, 之后就进入到等待指示的阶段。如下所示:

[vbird@www ~]$ bc 
bc 1.06 
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc. 
This is free software with ABSOLUTELY NO WARRANTY. 
For details type `warranty'. 
_ <==这个时候,光标会停留在这里等待你的输入 

事实上,我们是『进入到bc这个软件的工作环境当中』了! 就好像我们在Windows里面使用『小算盘』一样!所以,我们底下尝试输入的数据, 都是在bc程序当中在进行运算的动作。所以啰,你输入的数据当然就得要符合bc的要求才行! 在基本的bc计算器操作之前,先告知几个使用的运算符好了:

  • + 加法
  • - 减法
  • * 乘法
  • / 除法
  • ^ 指数
  • % 余数

好!让我们来使用bc计算一些咚咚吧!

[vbird@www ~]$ bc 
bc 1.06 
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc. 
This is free software with ABSOLUTELY NO WARRANTY. 
For details type `warranty'. 
1+2+3+4  <==只有加法时 
10 
7-8+3 
2 
10*52 
520 
10%3     <==计算『余数』 
1 
10^2 
100 
10/100   <==这个最奇怪!不是应该是 0.1 吗? 
0 
quit     <==离开 bc 这个计算器 

在上表当中,粗体字表示输入的数据,而在每个粗体字的底下就是输出的结果。 咦!每个计算都还算正确,怎么10/100会变成0呢?这是因为bc默认仅输出整数,如果要输出小数点下位数,那么就必须要运行 scale=number ,那个number就是小数点位数,例如:

[vbird@www ~]$ bc 
bc 1.06 
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc. 
This is free software with ABSOLUTELY NO WARRANTY. 
For details type `warranty'. 
scale=3     <==没错!就是这里!! 
1/3 
.333 
340/2349 
.144 
quit 

注意啊!要离开bc回到命令提示字符时,务必要输入『quit』来离开bc的软件环境喔! 好了!就是这样子啦!简单的很吧!以后你可以轻轻松松的进行加减乘除啦!

从上面的练习我们大概可以知道在命令列模式里面下达命令时,会有两种主要的情况:

  • 一种是该命令会直接显示结果然后回到命令提示字符等待下一个命令的输入;
  • 一种是进入到该命令的环境,直到结束该命令才回到命令提示字符的环境。

我们以一个简单的图示来说明:

命令下达的环境
图2.2.1、命令下达的环境,上图为直接显示结果,下图为进入软件功能

如图2.2.1所示,上方命令下达后立即显示信息且立刻回到命令提示字符的环境。 如果有进入软件功能的环境(例如上面的bc软件),那么就得要使用该软件的结束命令 (例如在bc环境中输入quit)才能够回到命令提示字符中!那你怎么知道你是否在命令提示字符的环境呢? 很简单!你只要看到光标是在『[vbird@www ~]$』这种提示字符后面, 那就是等待输入命令的环境了。很容易判断吧!不过初学者还是很容易忘记啦!


重要的几个热键[Tab], [ctrl]-c, [ctrl]-d

在继续后面章节的学习之前,这里很需要跟大家再来报告一件事,那就是我们的文本模式里头具有很多的功能组合键, 这些按键可以辅助我们进行命令的编写与程序的中断呢!这几个按键请大家务必要记住的!很重要喔!


  • [Tab]按键

[Tab]按键就是在键盘的大写灯切换按键([Caps Lock])上面的那个按键!在各种Unix-Like的Shell当中, 这个[Tab]按键算是Linux的Bash shell最棒的功能之一了!他具有『命令补全』与『文件补齐』的功能喔! 重点是,可以避免我们打错命令或文件名呢!很棒吧!但是[Tab]按键在不同的地方输入,会有不一样的结果喔! 我们举下面的例子来说明。上一小节我们不是提到 cal 这个命令吗?如果我在命令列输入 ca 再按两次 [tab] 按键, 会出现什么信息?

[vbird@www ~]$ ca[tab][tab]    <==[tab]按键是紧接在 a 字母后面! 
cadaver             callgrind_control   capifax             card 
cal                 cameratopam         capifaxrcvd         case 
caller              cancel              capiinfo            cat 
callgrind_annotate  cancel.cups         captoinfo           catchsegv 
# 上面的 [tab] 指的是『按下那个tab键』,不是要你输入中括号内的tab啦! 

发现什么事?所有以ca为开头的命令都被显示出来啦!很不错吧!那如果你输入『ls -al ~/.bash』再加两个[tab]会出现什么?

[vbird@www ~]$ ls -al ~/.bash[tab][tab] 
.bash_history  .bash_logout   .bash_profile  .bashrc 

咦!在该目录下面所有以 .bash 为开头的文件名都会被显示出来了呢!注意看上面两个例子喔, 我们按[tab]按键的地方如果是在command(第一个输入的数据)后面时,他就代表着 『命令补全』,如果是接在第二个字以后的,就会变成『文件补齐』的功能了!总结一下:

  • [Tab] 接在一串命令的第一个字的后面,则为命令补全;
  • [Tab] 接在一串命令的第二个字以后时,则为『文件补齐』!

善用 [tab] 按键真的是个很好的习惯!可以让你避免掉很多输入错误的机会!


  • [Ctrl]-c 按键

如果你在Linux底下输入了错误的命令或参数,有的时候这个命令或程序会在系统底下『跑不停』这个时候怎么办?别担心, 如果你想让当前的程序『停掉』的话,可以输入:[Ctrl]与c按键(先按着[Ctrl]不放,且再按下c按键,是组合按键), 那就是中断目前程序的按键啦!举例来说,如果你输入了『find /』这个命令时,系统会开始跑一些东西(先不要理会这个命令串的意义),此时你给他按下 [Ctrl]-c 组合按键,嘿嘿!是否立刻发现这个命令串被终止了!就是这样的意思啦!

[vbird@www ~]$ find / 
....(一堆东西都省略).... 
# 此时屏幕会很花,你看不到命令提示字符的!直接按下[ctrl]-c即可! 
[vbird@www ~]$ <==此时提示字符就会回来了!find程序就被中断! 

不过你应该要注意的是,这个组合键是可以将正在运行中的命令中断的, 如果你正在运行比较重要的命令,可别急着使用这个组合按键喔! ^_^


  • [Ctrl]-d 按键

那么[Ctrl]-d是什么呢?就是[Ctrl]与d按键的组合啊!这个组合按键通常代表着: 『键盘输入结束(End Of File, EOF 或 End Of Input)』的意思! 另外,他也可以用来取代exit的输入呢!例如你想要直接离开文字接口,可以直接按下[Ctrl]-d就能够直接离开了(相当于输入exit啊!)

总之,在Linux底下,文字接口的功能是很强悍的!要多多的学习他,而要学习他的基础要诀就是...多使用、多熟悉啦!


错误信息的察看


万一我下达了错误的命令怎么办?不要紧呀!你可以藉由屏幕上面显示的错误信息来了解你的问题点, 那就很容易知道如何改善这个错误信息啰!举个例子来说,假如想运行date却因为大小写打错成为DATE时, 这个错误的信息是这样显示的:

[vbird@www ~]$ DATE 
-bash: DATE: command not found 

上面那个bash:表示的是我们的Shell的名称, 本小节一开始就谈到过Linux的默认壳程序就是bash啰! 那么上面的例子说明了bash有错误,什么错误呢?bash告诉你:

DATE: command not found

字面上的意思是说『命令找不到』,那个命令呢?就是DATE这个命令啦! 所以说,系统上面可能并没有DATE这个命令啰!就是这么简单!通常出现『command not found』的可能原因为:

  • 这个命令不存在,因为该软件没有安装之故。解决方法就是安装该软件;
  • 这个命令所在的目录目前的用户并没有将他加入命令搜寻路径中,请参考bash的PATH说明;
  • 很简单!因为你打错字!

另外常见的错误就是我们曾经看过的例子,如下所示:

[vbird@www ~]$ cal 13 2009 
cal: illegal month value: use 1-12 

屏幕会告诉我们错误的信息啦!照着屏幕的信息去处理即可解决你的错误啦!是否很简单啊! 因此,以后如果出现了问题,屏幕上的信息真的是很重要的呢!不要忽略了他呦!

介绍这几个命令让你玩一玩先,更详细的命令操作方法我们会在第三篇的时候再进行介绍! 现在让我们来想一想,万一我在操作date这个命令的时候,手边又没有这本书,我要怎么知道要如何加那些奇怪的参数, 好让输出的结果符合我想要的输出格式呢?嘿嘿!到下一节鸟哥来告诉你怎么办吧!


Linux系统的在线求助man page与info page


先来了解一下Linux有多少命令呢?在文本模式下,你可以直接按下两个[Tab]按键,看看总共有多少命令可以让你用?

[vbird@www ~]$ <==在这里不要输入任何字符,直接输入两次[tab]按键 
Display all 2450 possibilities? (y or n) <==如果不想要看,按 n 离开 

如上所示,鸟哥安装的这个系统中,少说也有2000多个以上的命令可以让vbird这个账号使用。 那在Linux里面到底要不要背『命令』啊?可以啊!你背啊!这种事,鸟哥这个『忘性』特佳的老人家实在是背不起来 @_@ ~当然啦,有的时候为了要考试(例如一些认证考试等等的)还是需要背一些重要的命令与选项的! 不过,鸟哥主要还是以理解『在什么情况下,应该要使用哪方面的命令』为准的!

既然鸟哥说不需要背命令,那么我们如何知道每个命令的详细用法?还有,某些配置文件的内容到底是什么? 这个可就不需要担心了!因为在Linux上开发的软件大多数都是自由软件,而这些软件的开发者为了让大家能够了解命令的用法, 都会自行制作很多的文件,而这些文件也可以直接在在线就能够轻易的被使用者查询出来喔!很不赖吧! 这根本就是『联机帮助文件』嘛!哈哈!没错!确实如此。我们底下就来谈一谈,Linux到底有多少的在线文件数据呢?


man page


嗄?不知道怎么使用date这个命令?嘿嘿!不要担心,我们Linux上面的在线求助系统已经都帮你想好要怎么办了, 所以你只要使用简单的方法去寻找一下说明的内容,马上就清清楚楚的知道该命令的用法了!怎么看呢?就是找男人(man) 呀!喔!不是啦!这个man是manual(操作说明)的简写啦!只要下达:『man date』 马上就会有清楚的说明出现在你面前喔!如下所示:

[vbird@www ~]$ LANG="en" 
# 还记得这个咚咚的用意吧?前面提过了,是为了『语系』的需要啊!下达过一次即可! 
 
[vbird@www ~]$ man date 
DATE(1)                          User Commands                         DATE(1) 
# 请注意上面这个括号内的数字 
NAME  <==这个命令的完整全名,如下所示为date且说明简单用途为配置与显示日期/时间 
       date - print or set the system date and time 
 
SYNOPSIS  <==这个命令的基本语法如下所示 
       date [OPTION]... [+FORMAT] 
       date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]] 
 
DESCRIPTION  <==详细说明刚刚语法谈到的选项与参数的用法 
       Display  the  current  time  in  the given FORMAT, or set the system 
       date. 
 
       -d, --date=STRING  <==左边-d为短选项名称,右边--date为完整选项名称 
              display time described by STRING, not 'now' 
 
       -f, --file=DATEFILE 
              like --date once for each line of DATEFILE 
 
       -r, --reference=FILE 
              display the last modification time of FILE 
....(中间省略).... 
       # 找到了!底下就是格式化输出的详细数据! 
       FORMAT controls the output.  The only valid option  for  the  second 
       form  specifies  Coordinated  Universal Time.  Interpreted sequences 
       are: 
 
       %%     a literal % 
 
       %a     locale's abbreviated weekday name (e.g., Sun) 
 
       %A     locale's full weekday name (e.g., Sunday) 
....(中间省略).... 
ENVIRONMENT  <==与这个命令相关的环境参数有如下的说明 
       TZ     Specifies the timezone, unless  overridden  by  command  line 
              parameters.   If  neither  is  specified,  the  setting  from 
              /etc/localtime is used. 
 
AUTHOR  <==这个命令的作者啦! 
       Written by David MacKenzie. 
 
REPORTING BUGS  <==有问题请留言给底下的email的意思! 
       Report bugs to . 
 
COPYRIGHT  <==受到著作权法的保护!用的就是 GPL 了! 
       Copyright ? 2006 Free Software Foundation, Inc. 
       This is free software.  You may redistribute copies of it under  the 
       terms      of      the      GNU      General      Public     License 
       .  There is  NO  WARRANTY,  to 
       the extent permitted by law. 
 
SEE ALSO  <==这个重要,你还可以从哪里查到与date相关的说明文件之意 
       The  full  documentation for date is maintained as a Texinfo manual. 
       If the info and date programs are properly installed at  your  site, 
       the command 
 
              info date 
 
       should give you access to the complete manual. 
 
date 5.97                          May 2006                            DATE(1) 
Tips:
进入man命令的功能后,你可以按下『空格键』往下翻页,可以按下『 q 』按键来离开man的环境。 更多在man命令下的功能,本小节后面会谈到的!
鸟哥的图示

看(鸟哥没骂人!)马上就知道一大堆的用法了!如此一来,不就可以知道date的相关选项与参数了吗?真方便! 而出现的这个屏幕画面,我们称呼他为man page, 你可以在里头查询他的用法与相关的参数说明。如果仔细一点来看这个man page的话,你会发现几个有趣的东西。

首先,在上个表格的第一行,你可以看到的是:『DATE(1)』,DATE我们知道是命令的名称, 那么(1)代表什么呢?他代表的是『一般用户可使用的命令』的意思!咦!还有这个用意啊!呵呵! 没错~在查询数据的后面的数字是有意义的喔!他可以帮助我们了解或者是直接查询相关的数据。 常见的几个数字的意义是这样的:

代号代表内容
1使用者在shell环境中可以操作的命令或可运行文件
2系统核心可呼叫的函数与工具等
3一些常用的函数(function)与函式库(library),大部分为C的函式库(libc)
4装置文件的说明,通常在/dev下的文件
5配置文件或者是某些文件的格式
6游戏(games)
7惯例与协议等,例如Linux文件系统、网络协议、ASCII code等等的说明
8系统管理员可用的管理命令
9跟kernel有关的文件

上述的表格内容可以使用『man 7 man』来更详细的取得说明。透过这张表格的说明, 未来你如果使用man page在察看某些数据时,就会知道该命令/文件所代表的基本意义是什么了。 举例来说,如果你下达了『man null』时,会出现的第一行是:『NULL(4)』,对照一下上面的数字意义, 嘿嘿!原来null这个玩意儿竟然是一个『装置文件』呢!很容易了解了吧!

Tips:
上表中的1, 5, 8这三个号码特别重要,也请读者要将这三个数字所代表的意义背下来喔!
鸟哥的图示

再来,man page的内容也分成好几个部分来加以介绍该命令呢!就是上头man date那个表格内, 以NAME作为开始介绍,最后还有个SEE ALSO来作为结束。基本上,man page大致分成底下这几个部分:

代号内容说明
NAME简短的命令、数据名称说明
SYNOPSIS简短的命令下达语法(syntax)简介
DESCRIPTION较为完整的说明,这部分最好仔细看看!
OPTIONS针对 SYNOPSIS 部分中,有列举的所有可用的选项说明
COMMANDS当这个程序(软件)在运行的时候,可以在此程序(软件)中下达的命令
FILES这个程序或数据所使用或参考或连结到的某些文件
SEE ALSO可以参考的,跟这个命令或数据有相关的其他说明!
EXAMPLE一些可以参考的范例
BUGS是否有相关的臭虫!

有时候除了这些外,还可能会看到Authors与Copyright等,不过也有很多时候仅有NAME与DESCRIPTION等部分。 通常鸟哥在查询某个数据时是这样来查阅的:

  1. 先察看NAME的项目,约略看一下这个数据的意思;
  2. 再详看一下DESCRIPTION,这个部分会提到很多相关的数据与使用时机,从这个地方可以学到很多小细节呢;
  3. 而如果这个命令其实很熟悉了(例如上面的date),那么鸟哥主要就是查询关于OPTIONS的部分了! 可以知道每个选项的意义,这样就可以下达比较细部的命令内容呢!
  4. 最后,鸟哥会再看一下,跟这个数据有关的还有哪些东西可以使用的?举例来说,上面的SEE ALSO就告知我们还可以利用『info coreutils date』来进一步查阅数据;
  5. 某些说明内容还会列举有关的文件(FILES 部分)来提供我们参考!这些都是很有帮助的!

大致上了解了man page的内容后,那么在man page当中我还可以利用哪些按键来帮忙查阅呢?首先, 如果要向下翻页的话,可以按下键盘的空格键,也可以使用[Page Up]与[Page Down]来翻页呢!同时,如果你知道某些关键词的话, 那么可以在任何时候输入『/word』,来主动搜寻关键词!例如在上面的搜寻当中,我输入了『/date』会变成怎样?

DATE(1)                          User Commands                         DATE(1) 
 
NAME 
       date - print or set the system date and time 
 
SYNOPSIS 
       date [OPTION]... [+FORMAT] 
       date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]] 
 
DESCRIPTION 
       Display  the  current  time  in  the given FORMAT, or set the system date. 
 
....(中间省略).... 
 
/date <==只要按下/,光标就会跑到这个地方来,你就可以开始输入搜寻字符串咯 

看到了吗,当你按下『/』之后,光标就会移动到屏幕的最下面一行, 并等待你输入搜寻的字符串了。此时,输入date后,man page就会开始搜寻跟date有关的字符串, 并且移动到该区域呢!很方便吧!最后,如果要离开man page时,直接按下『 q 』就能够离开了。 我们将一些在man page常用的按键给他整理整理:

按键进行工作
空格键向下翻一页
[Page Down]向下翻一页
[Page Up]向上翻一页
[Home]去到第一页
[End]去到最后一页
/string向『下』搜寻 string 这个字符串,如果要搜寻 vbird 的话,就输入 /vbird
?string向『上』搜寻 string 这个字符串
n, N利用 / 或 ? 来搜寻字符串时,可以用 n 来继续下一个搜寻 (不论是 / 或 ?) ,可以利用 N 来进行『反向』搜寻。举例来说,我以 /vbird 搜寻 vbird 字符串, 那么可以 n 继续往下查询,用 N 往上查询。若以 ?vbird 向上查询 vbird 字符串, 那我可以用 n 继续『向上』查询,用 N 反向查询。
q结束这次的 man page

要注意喔!上面的按键是在man page的画面当中才能使用的! 比较有趣的是那个搜寻啦!我们可以往下或者是往上搜寻某个字符串,例如要在man page内搜寻vbird这个字符串, 可以输入 /vbird 或者是 ?vbird ,只不过一个是往下而一个是往上来搜寻的。而要 重复搜寻 某个字符串时,可以使用 n 或者是 N 来动作即可呢! 很方便吧!^_^

既然有man page,自然就是因为有一些文件数据,所以才能够以man page读出来啰!那么这些man page的数据 放在哪里呢?不同的distribution通常可能有点差异性,不过,通常是放在/usr/share/man这个目录里头,然而,我们可以透过修改他的man page搜寻路径来改善这个目录的问题!修改/etc/man.config (有的版本为man.conf或manpath.conf)即可啰!至于更多的关于man的信息你可以使用『 man man 』来查询呦!关于更详细的配置,我们会在第十一章 bash 当中继续的说明喔!


  • 搜寻特定命令/文件的man page说明文件

在某些情况下,你可能知道要使用某些特定的命令或者是修改某些特定的配置文件,但是偏偏忘记了该命令的完整名称。 有些时候则是你只记得该命令的部分关键词。这个时候你要如何查出来你所想要知道的man page呢? 我们以底下的几个例子来说明man这个命令有用的地方喔!

例题:
你可否查出来,系统中还有哪些跟『man』这个命令有关的说明文件呢?
答:
你可以使用底下的命令来查询一下:
[vbird@www ~]$ man -f man 
man                  (1)  - format and display the on-line manual pages 
man                  (7)  - macros to format man pages 
man.config [man]     (5)  - configuration data for man 
使用 -f 这个选项就可以取得更多与man相关的信息,而上面这个结果当中也有提示了 (数字) 的内容, 举例来说,第二行的『 man (7) 』表示有个man (7)的说明文件存在喔!但是却有个man (1)存在啊! 那当我们下达『 man man 』的时候,到底是找到哪一个说明档呢? 其实,你可以指定不同的文件的,举例来说,上表当中的两个 man 你可以这样将他的文件叫出来:
[vbird@www ~]$ man 1 man  <==这里是用 man(1) 的文件数据 
[vbird@www ~]$ man 7 man  <==这里是用 man(7) 的文件数据 
你可以自行将上面两个命令输入一次看看,就知道,两个命令输出的结果是不同的。 那个1, 7就是分别取出在man page里面关于1与7相关数据的文件文件啰! 好了,那么万一我真的忘记了下达数字,只有输入『 man man 』时,那么取出的数据到底是1还是7啊? 这个就跟搜寻的顺序有关了。搜寻的顺序是记录在/etc/man.conf这个配置文件当中, 先搜寻到的那个说明档,就会先被显示出来! 一般来说,通常会先找到数字较小的那个啦!因为排序的关系啊!所以, man man 会跟 man 1 man 结果相同!

除此之外,我们还可以利用『关键词』找到更多的说明文件数据喔!什么是关键词呢? 从上面的『man -f man』输出的结果中,我们知道其实输出的数据是:

  • 左边部分:命令(或文件)以及该命令所代表的意义(就是那个数字);
  • 右边部分:这个命令的简易说明,例如上述的『-macros to format man pages』

当使用『man -f 命令』时,man只会找数据中的左边那个命令(或文件)的完整名称,有一点不同都不行! 但如果我想要找的是『关键词』呢?也就是说,我想要同时找上面说的两个地方的内容,只要该内容有关键词存在, 不需要完全相同的命令(或文件)就能够找到时,该怎么办?请看下个范例啰!

例题:
找出系统的说明文件中,只要有man这个关键词就将该说明列出来。
答:
[vbird@www ~]$ man -k man 
. [builtins]         (1)  - bash built-in commands, see bash(1) 
.TP 15 php [php]     (1)  - PHP Command Line Interface 'CLI' 
....(中间省略).... 
zshall               (1)  - the Z shell meta-man page 
zshbuiltins          (1)  - zsh built-in commands 
zshzle               (1)  - zsh command line editor 
看到了吧!很多对吧!因为这个是利用关键词将说明文件里面只要含有man那个字眼的(不见得是完整字符串) 就将他取出来!很方便吧! ^_^(上面的结果有特殊字体的显示是为了方便读者查看, 实际的输出结果并不会有特别的颜色显示喔!)

事实上,还有两个命令与man page有关呢!而这两个命令是man的简略写法说~就是这两个:

[vbird@www ~]$ whatis  [命令或者是数据]   <==相当于 man -f [命令或者是数据] 
[vbird@www ~]$ apropos [命令或者是数据]   <==相当于 man -k [命令或者是数据] 

而要注意的是,这两个特殊命令要能使用,必须要有创建 whatis 数据库才行!这个数据库的创建需要以 root 的身份下达如下的命令:

[root@www ~]# makewhatis 
Tips:
一般来说,鸟哥是真的不会去背命令的,只会去记住几个常见的命令而已。那么鸟哥是怎么找到所需要的命令呢? 举例来说,打印的相关命令,鸟哥其实仅记得 lp (line print)而已。那我就由 man lp 开始,去找相关的说明, 然后,再以 lp[tab][tab] 找到任何以 lp 为开头的命令,找到我认为可能有点相关的命令后, 再以 man 去查询命令的用法!呵呵!所以,如果是实际在管理 Linux , 那么真的只要记得几个很重要的命令即可,其他需要的,嘿嘿!努力的找男人(man)吧!
鸟哥的图示

info page


在所有的Unix Like系统当中,都可以利用 man 来查询命令或者是相关文件的用法; 但是,在Linux里面则又额外提供了一种在线求助的方法,那就是利用info这个好用的家伙啦!

基本上,info与man的用途其实差不多,都是用来查询命令的用法或者是文件的格式。但是与man page一口气输出一堆信息不同的是,info page则是将文件数据拆成一个一个的段落,每个段落用自己的页面来撰写, 并且在各个页面中还有类似网页的『超链接』来跳到各不同的页面中,每个独立的页面也被称为一个节点(node)。 所以,你可以将info page想成是文本模式的网页显示数据啦!

不过你要查询的目标数据的说明文件必须要以info的格式来写成才能够使用info的特殊功能(例如超链接)。 而这个支持info命令的文件默认是放置在/usr/share/info/这个目录当中的。 举例来说,info这个命令的说明文件有写成info格式,所以,你使用『 info info 』可以得到如下的画面:

[vbird@www ~]$ info info 
File: info.info,  Node: Top,  Next: Getting Started,  Up: (dir) 
 
Info: An Introduction 
********************* 
 
The GNU Project distributes most of its on-line manuals in the "Info 
format", which you read using an "Info reader".  You are probably using 
an Info reader to read this now. 
 
....(中间省略).... 
 
   To read about expert-level Info commands, type `n' twice.  This 
brings you to `Info for Experts', skipping over the `Getting Started' 
chapter. 
* Menu: 
 
* Getting Started::             Getting started using an Info reader. 
* Expert Info::                 Info commands for experts. 
* Creating an Info File::       How to make your own Info file. 
* Index::                       An index of topics, commands, and variables. 
 
--zz-Info: (info.info.gz)Top, 29 lines --Top------------------------------ 
Welcome to Info version 4.8. Type ? for help, m for menu item. 

仔细的看到上面这个显示的结果,里面的第一行显示了很多的信息喔!第一行里面的数据意义为:

  • File:代表这个info page的数据是来自info.info文件所提供的;
  • Node:代表目前的这个页面是属于Top节点。 意思是info.info内含有很多信息,而Top仅是info.info文件内的一个节点内容而已;
  • Next:下一个节点的名称为Getting Started,你也可以按『N』到下个节点去;
  • Up:回到上一层的节点总揽画面,你也可以按下『U』回到上一层;
  • Prev:前一个节点。但由于Top是info.info的第一个节点,所以上面没有前一个节点的信息。

从第一行你可以知道这个节点的内容、来源与相关链接的信息。更有用的信息是,你可以透过直接按下N, P, U来去到下一个、上一个与上一层的节点(node)!非常的方便! 第一行之后就是针对这个节点的说明。在上表的范例中,第二行以后的说明就是针对info.info内的Top这个节点所做的。

再来,你也会看到有『Menu』那个咚咚吧!底下共分为四小节,分别是Getting Started等等的,我们可以使用上下左右按键来将光标移动到该文字或者『 * 』上面,按下Enter, 就可以前往该小节了!另外,也可以按下[Tab]按键,就可以快速的将光标在上表的画面中的node间移动, 真的是非常的方便好用。如果将info.info内的各个节点串在一起并绘制成图表的话,情况有点像底下这样:

info page各说明文件相关性的示意图
图3.2.1、info page各说明文件相关性的示意图

如同上图所示,info的说明文件将内容分成多个node,并且每个node都有定位与连结。 在各连结之间还可以具有类似『超链接』的快速按钮,可以透过[tab]键在各个超链接间移动。 也可以使用U,P,N来在各个阶层与相关链接中显示!非常的不错用啦! 至于在info page当中可以使用的按键,可以整理成这样:

按键进行工作
空格键向下翻一页
[Page Down]向下翻一页
[Page Up]向上翻一页
[tab]在 node 之间移动,有 node 的地方,通常会以 * 显示。
[Enter]当光标在 node 上面时,按下 Enter 可以进入该 node 。
b移动光标到该 info 画面当中的第一个 node 处
e移动光标到该 info 画面当中的最后一个 node 处
n前往下一个 node 处
p前往上一个 node 处
u向上移动一层
s(/)在 info page 当中进行搜寻
h显示求助菜单
?命令一览表
q结束这次的 info page

info page是只有Linux上面才有的产物,而且易读性增强很多~不过查询的命令说明要具有info page功能的话,得用info page的格式来写成在线求助文件才行!我们CentOS 5将info page的文件放置到/usr/share/info/目录中!至于非以info page格式写成的说明文件(就是man page),虽然也能够使用info来显示,不过其结果就会跟man相同。 举例来说,你可以下达『info man』就知道结果了! ^_^


其他有用的文件(documents)


刚刚前面说,一般而言,命令或者软件制作者,都会将自己的命令或者是软件的说明制作成『联机帮助文件』! 但是,毕竟不是每个文件都需要做成联机帮助文件的,还有相当多的说明需要额外的文件!此时,这个所谓的 How-To(如何做的意思)就很重要啦!还有,某些软件不只告诉你『如何做』, 还会有一些相关的原理会说明呢。

那么这些说明文件要摆在哪里呢?哈哈!就是摆在/usr/share/doc这个目录啦!所以说,你只要到这个目录底下, 就会发现好多好多的说明文件档啦!还不需要到网络上面找数据呢!厉害吧!^_^ 举例来说,你想要知道这一版的CentOS相关的各项信息,可以直接到底下的目录去瞧瞧:

  • /usr/share/doc/centos-release-notes-5.3/

那如果想要知道本章讲过多次的bash是什么,则可以到/usr/share/doc/bash-3.2/ 这个目录中去浏览一番!很多东西呦!而且/usr/share/doc这个目录下的数据主要是以套件(packages)为主的, 例如GCC这个套件的相关信息在/usr/share/doc/gcc-xxx(那个xxx表示版本的意思!)。 未来可得多多查阅这个目录喔! ^_^

总结上面的三个咚咚(man, info, /usr/share/doc/),请记住喔:

  • 在文字接口下,有任何你不知道的命令或文件格式这种玩意儿,但是你想要了解他,请赶快使用man或者是info来查询!
  • 而如果你想要架设一些其他的服务,或想要利用一整组软件来达成某项功能时,请赶快到/usr/share/doc 底下查一查有没有该服务的说明档喔!
  • 另外,再次的强调,因为Linux毕竟是外国人发明的,所以中文文件确实是比较少的! 但是不要害怕,拿本英文字典在身边吧!随时查阅!不要害怕英文喔!

超简单文书编辑器: nano


在Linux系统当中有非常多的文书编辑器存在,其中最重要的就是后续章节我们会谈到的vi这家伙! 不过其实还有很多不错用的文书编辑器存在的!在这里我们就介绍一下简单的nano这一支文书编辑器来玩玩先!

nano的使用其实很简单,你可以直接加上档名就能够开启一个旧档或新档!底下我们就来开启一个名为test.txt的档名来看看:

[vbird@www ~]$ nano text.txt 
# 不管text.txt存不存在都没有关系!存在就开启旧档,不存在就开启新档 
 
  GNU nano 1.3.12          File: text.txt                         
 
   <==这个是光标所在处 
 
 
 
 
 
 
                           [ New File ] 
^G Get Help^O WriteOut^R Read Fil^Y Prev Pag^K Cut Text^C Cur Pos 
^X Exit    ^J Justify ^W Where Is^V Next Pag^U UnCut Te^T To Spell 
# 上面两行是命令说明列,其中^代表的是[ctrl]的意思 

如上图所示,你可以看到第一行反白的部分,那仅是在宣告nano的版本与档名(File: text.txt)而已。 之后你会看到最底下的三行,分别是文件的状态(New File)与两行命令说明列。命令说明列反白的部分就是组合键, 接的则是该组合键的功能。那个指数符号(^)代表的是键盘的[Ctrl]按键啦!底下先来说说比较重要的几个组合按键:

  • [ctrl]-G:取得联机帮助(help),很有用的!
  • [ctrl]-X:离开naon软件,若有修改过文件会提示是否需要储存喔!
  • [ctrl]-O:储存文件,若你有权限的话就能够储存文件了;
  • [ctrl]-R:从其他文件读入数据,可以将某个文件的内容贴在本文件中;
  • [ctrl]-W:搜寻字符串,这个也是很有帮助的命令喔!
  • [ctrl]-C:说明目前光标所在处的行数与列数等信息;
  • [ctrl]-_:可以直接输入行号,让光标快速移动到该行;
  • [alt]-Y:校正语法功能开启或关闭(单击开、再单击关)
  • [alt]-M:可以支持鼠标来移动光标的功能

比较常见的功能是这些,如果你想要取得更完整的说明,可以在nano的画面中按下[ctrl]-G或者是[F1]按键, 就能够显示出完整的naon内命令说明了。好了,请你在上述的画面中随便输入许多字, 输入完毕之后就储存后离开,如下所示:

  GNU nano 1.3.12          File: text.txt                         
 
Type some words in this nano editor program. 
You can use [ctrl] plus some keywords to go to some functions. 
Hello every one. 
Bye bye. 
   <==这个是由标所在处 
 
                           [ New File ] 
^G Get Help^O WriteOut^R Read Fil^Y Prev Pag^K Cut Text^C Cur Pos 
^X Exit    ^J Justify ^W Where Is^V Next Pag^U UnCut Te^T To Spell 

此时按下[crtl]-X会出现类似下面的画面:

  GNU nano 1.3.12          File: text.txt                         
 
Type some words in this nano editor program. 
You can use [ctrl] plus some keywords to go to some functions. 
Hello every one. 
Bye bye. 
 
 
Save modified buffer (ANSWERING "No" WILL DESTROY CHANGES) ?    
 Y Yes 
 N No           ^C Cancel 

如果不要储存数据只想要离开,可以按下N即可离开。如果确实是需要储存的,那么按下Y后,最后三行会出现如下画面:

File Name to Write: text.txt  <==可在这里修改档名或直接按[enter] 
^G Get Help     ^T To Files     M-M Mac Format  M-P Prepend 
^C Cancel       M-D DOS Format  M-A Append      M-B Backup File 

如果是单纯的想要储存而已,直接按下[enter]即可储存后离开nano程序。不过上图中最底下还有两行,我们知道指数符号代表[crtl], 那个M是代表什么呢?其实就是[alt]啰!其实nano也不需要记太多命令啦!只要知道怎么进入nano、怎么离开,怎么搜寻字符串即可。 未来我们还会学习更有趣的vi呢!


正确的关机方法


OK!大概知道启动的方法,也知道基本的命令操作,而且还已经知道在线查询了,好累呦! 想去休息呢!那么如何关机呢?我想,很多朋友在DOS的年代已经有在玩计算机了! 在当时我们关掉DOS的系统时,常常是直接关掉电源开关,而 Windows 在你不爽的时候,按着电源开关四秒也可以关机!但是在Linux则相当的不建议这么做!

Why?在 Windows (非 NT 主机系统) 系统中,由于是单人假多任务的情况,所以即使你的计算机关机, 对于别人应该不会有影响才对!不过呢,在 Linux 底下,由于每个程序 (或者说是服务) 都是在在背景下运行的,因此,在你看不到的屏幕背后其实可能有相当多人同时在你的主机上面工作, 例如浏览网页啦、传送信件啦以 FTP 传送文件啦等等的,如果你直接按下电源开关来关机时, 则其他人的数据可能就此中断!那可就伤脑筋了!

此外,最大的问题是,若不正常关机,则可能造成文件系统的毁损 (因为来不及将数据回写到文件中,所以有些服务的文件会有问题!)。所以正常情况下,要关机时需要注意底下几件事:

  • 观察系统的使用状态
    如果要看目前有谁在在线,可以下达『who』这个命令,而如果要看网络的联机状态,可以下达 『 netstat -a 』这个命令,而要看背景运行的程序可以运行『 ps -aux 』这个命令。使用这些命令可以让你稍微了解主机目前的使用状态!当然啰,就可以让你判断是否可以关机了 (这些命令在后面Linux常用命令中会提及喔!)

  • 通知在线使用者关机的时刻
    要关机前总得给在线的使用者一些时间来结束他们的工作,所以,这个时候你可以使用 shutdown 的特别命令来达到此一功能。

  • 正确的关机命令使用
    例如 shutdown 与 reboot 两个命令!

所以底下我们就来谈一谈几个与关机/重新启动相关的命令啰!

  • 将数据同步写入硬盘中的命令: sync
  • 惯用的关机命令: shutdown
  • 重新启动,关机: reboot, halt, poweroff
Tips:
由于Linux系统的关机/重新启动是很重大的系统运行,因此只有root才能够进行例如shutdown, reboot等命令。 不过在某些distributions当中,例如我们这里谈到的CentOS系统,他允许你在本机前的tty7使用图形接口登陆时, 可以用一般账号来关机或重新启动!但某些distributions则在你要关机时,他会要你输入root的密码呢!^_^
鸟哥的图示

数据同步写入磁盘: sync


第零章、计算器概论里面我们谈到过数据在计算机中运行的模式, 所有的数据都得要被读入内存后才能够被CPU所处理,但是数据又常常需要由内存写回硬盘当中(例如储存的动作)。 由于硬盘的速度太慢(相对于内存来说),如果常常让数据在内存与硬盘中来回写入/读出,系统的效能就不会太好。

因此在Linux系统中,为了加快数据的读取速度,所以在默认的情况中, 某些已经加载内存中的数据将不会直接被写回硬盘,而是先缓存在内存当中,如此一来, 如果一个数据被你重复的改写,那么由于他尚未被写入硬盘中,因此可以直接由内存当中读取出来, 在速度上一定是快上相当多的!

不过,如此一来也造成些许的困扰,那就是万一你的系统因为某些特殊情况造成不正常关机 (例如停电或者是不小心踢到power)时,由于数据尚未被写入硬盘当中,哇!所以就会造成数据的升级不正常啦! 那要怎么办呢?这个时候就需要sync这个命令来进行数据的写入动作啦! 直接在文字接口下输入sync,那么在内存中尚未被升级的数据,就会被写入硬盘中!所以,这个命令在系统关机或重新启动之前, 很重要喔!最好多运行几次!

虽然目前的 shutdown/reboot/halt 等等命令均已经在关机前进行了 sync 这个工具的呼叫, 不过,多做几次总是比较放心点~呵呵~

[root@www ~]# sync 
Tips:
事实上sync也可以被一般账号使用喔!只不过一般账号用户所升级的硬盘数据就仅有自己的数据, 不像root可以升级整个系统中的数据了。
鸟哥的图示

惯用的关机命令: shutdown


由于Linux的关机是那么重要的工作,因此除了你是在主机前面以tty7图形接口来登陆系统时, 不论用什么身份都能够关机之外,若你是使用远程管理工具(如透过pietty使用ssh服务来从其他计算机登陆主机), 那关机就只有root有权力而已喔!

嗯!那么就来关机试试看吧!我们较常使用的是shutdown这个命令,而这个命令会通知系统内的各个程序 (processes),并且将通知系统中的run-level内的一些服务来关闭。shutdown可以达成如下的工作:

  • 可以自由选择关机模式:是要关机、重新启动或进入单人操作模式均可;
  • 可以配置关机时间: 可以配置成现在立刻关机, 也可以配置某一个特定的时间才关机。
  • 可以自定义关机信息:在关机之前,可以将自己配置的信息传送给在线 user 。
  • 可以仅发出警告信息:有时有可能你要进行一些测试,而不想让其他的使用者干扰, 或者是明白的告诉使用者某段时间要注意一下!这个时候可以使用 shutdown 来吓一吓使用者,但却不是真的要关机啦!
  • 可以选择是否要 fsck 检查文件系统 。

那么shutdown的语法是如何呢?聪明的读者大概已经开始找『男人』了!没错,随时随地的 man 一下,是很不错的举动!好了,简单的语法守则为:

[root@www ~]# /sbin/shutdown [-t 秒] [-arkhncfF] 时间 [警告信息] 
选项与参数: 
-t sec : -t 后面加秒数,亦即『过几秒后关机』的意思 
-k     : 不要真的关机,只是发送警告信息出去! 
-r     : 在将系统的服务停掉之后就重新启动(常用) 
-h     : 将系统的服务停掉后,立即关机。 (常用) 
-n     : 不经过 init 程序,直接以 shutdown 的功能来关机 
-f     : 关机并启动之后,强制略过 fsck 的磁盘检查 
-F     : 系统重新启动之后,强制进行 fsck 的磁盘检查 
-c     : 取消已经在进行的 shutdown 命令内容。 
时间   : 这是一定要加入的参数!指定系统关机的时间!时间的范例底下会说明。 
范例: 
[root@www ~]# /sbin/shutdown -h 10 'I will shutdown after 10 mins' 
# 告诉大家,这部机器会在十分钟后关机!并且会显示在目前登陆者的屏幕前方! 
# 至于参数有哪些呢?以下介绍几个吧! 

此外,需要注意的是,时间参数请务必加入命令中,否则shutdown会自动跳到 run-level 1 (就是单人维护的登陆情况),这样就伤脑筋了!底下提供几个时间参数的例子吧:

[root@www ~]# shutdown -h now 
立刻关机,其中 now 相当于时间为 0 的状态 
[root@www ~]# shutdown -h 20:25 
系统在今天的 20:25 分会关机,若在21:25才下达此命令,则隔天才关机 
[root@www ~]# shutdown -h +10 
系统再过十分钟后自动关机 
[root@www ~]# shutdown -r now 
系统立刻重新启动 
[root@www ~]# shutdown -r +30 'The system will reboot'  
再过三十分钟系统会重新启动,并显示后面的信息给所有在在线的使用者 
[root@www ~]# shutdown -k now 'This system will reboot'  
仅发出警告信件的参数!系统并不会关机啦!吓唬人! 

重新启动,关机: reboot, halt, poweroff


还有三个命令可以进行重新启动与关机的任务,那就是reboot, halt, poweroff。 其实这三个命令呼叫的函式库都差不多,所以当你使用『man reboot』时,会同时出现三个命令的用法给你看呢。 其实鸟哥通常都只有记shutdown与reboot这两个命令啦!不过使用poweroff这个命令却比较简单就是了!^_^ 通常鸟哥在重新启动时,都会下达如下的命令喔:

[root@www ~]# sync; sync; sync; reboot 

既然这些命令都能够关机或重新启动,那他有没有什么差异啊?基本上,在默认的情况下, 这几个命令都会完成一样的工作!(因为halt会先呼叫shutdown,而shutdown最后会呼叫halt!)。 不过,shutdown可以依据目前已启动的服务来逐次关闭各服务后才关机;至于halt却能够在不理会目前系统状况下, 进行硬件关机的特殊功能!你可以在你的主机上面使用root进行底下两个命令来关机,比较看看差异在哪里喔!

[root@www ~]# shutdown -h now 
[root@www ~]# poweroff -f 

更多halt与poweroff的选项功能,请务必使用man去查询一下喔!


切换运行等级: init


本章上头有谈到过关于run level的问题。之前谈到的是系统运行的模式,分为纯文本(run level 3)及图形接口模式(run level 5)。除了这两种模式外,有没有其他模式呢?其实Linux共有七种运行等级, 七种等级的意义我们在后面会再谈到。本章你只要知道底下四种运行等级就好了:

  • run level 0:关机
  • run level 3:纯文本模式
  • run level 5:含有图形接口模式
  • run level 6:重新启动

那如何切换各模式呢?可以使用init这个命令来处理喔!也就是说,如果你想要关机的话, 除了上述的shutdown -h now以及poweroff之外,你也可以使用如下的命令来关机:

[root@www ~]# init 0 

启动过程的问题排解


事实上,Linux主机是很稳定的,除非是硬件问题与系统管理员不小心的动作,否则, 很难会造成一些无法挽回的错误的。但是,毕竟我们目前使用的可能是练习机,会常常开开关关的, 所以确实可能会有一些小问题发生。好了,我们先来简单的谈一谈,如果无法顺利启动时, 你应该如何解决。要注意的是,底下说到的内容很多都还没有开始介绍, 因此,看不懂也不要太紧张~在本书全部都读完且看第二遍时,你自然就会有感觉了! ^_^


文件系统错误的问题


在启动的过程中最容易遇到的问题就是硬盘可能有坏轨或文件系统发生错误(数据损毁)的情况, 这种情况虽然不容易发生在稳定的Linux系统下,不过由于不当的开关机行为, 还是可能会造成的,常见的发生原因可能有:

  • 最可能发生的原因是因为断电或不正常关机所导致的文件系统发生错误, 鸟哥的主机就曾经发生过多次因为跳电,家里的主机又没有安装不断电系统, 结果就导致硬盘内的文件系统错误!文件系统错误并非硬件错误,而是软件数据的问题喔!

  • 硬盘使用率过高或主机所在环境不良也是一个可能的原因, 例如你开放了一个FTP服务,里面有些数据很有用, 所以一堆人抢着下载,如果你又不是使用较稳定的SCSI接口硬盘,仅使用一般PC使用的硬盘, 虽然机率真的不高,但还是有可能造成硬盘坏轨的。此外,如果主机所在环境没有散热的设备, 或者是相对湿度比较高的环境,也很容易造成硬盘的损坏喔!

解决的方法其实很简单,不过因为出错扇区所挂载的目录不同,处理的流程困难度就有差异了。 举例来说,如果你的根目录『/』并没有损毁,那就很容易解决,如果根目录已经损毁了,那就比较麻烦!


  • 如果根目录没有损毁:

假设你发生错误的partition是在/dev/sda7这一块,那么在启动的时候,屏幕应该会告诉你:press root password or ctrl+D : 这时候请输入root的密码登陆系统,然后进行如下动作:

  • 在光标处输入root密码登陆系统,进行单人单机的维护工作;
  • 输入『 fsck /dev/sda7 』(fsck 为文件系统检查的命令,/dev/sda7为错误的partition,请依你的情况下达参数), 这时屏幕会显示开始修理硬盘的信息,如果有发现任何的错误时,屏幕会显示: clear [Y/N]? 的询问信息,就直接输入 Y 吧!
  • 修理完成之后,以 reboot 重新启动啰!


  • 如果根目录损毁了

一般初学者喜欢将自己的硬盘只划分为一个大partition,亦即只有根目录, 那文件系统错误一定是根目录的问题啰!这时你可以将硬盘拔掉,接到另一台Linux系统的计算机上, 并且不要挂载(mount)该硬盘,然后以root的身份运行『 fsck /dev/sdb1 』(/dev/sdb1 指的是你的硬盘装置文件名,你要依你的实际状况来配置),这样就 OK 啰!

另外,也可以使用近年来很热门的Live CD,也就是利用光盘启动就能够进入Linux操作系统的特性, 你可以前往:『http://knoppix.tnc.edu.tw/』 这个网站来下载,并且刻录成为CD,这个时候先用Live CD光盘启动,然后使用fsck去修复原本的根目录, 例如: fsck /dev/sda1 ,就能够救回来了!


  • 如果硬盘整个坏掉:

如果硬盘实在坏的离谱时,那就先将旧硬盘内的数据,能救出来的救出来,然后换一颗硬盘来重新安装Linux吧! 不要不愿意换硬盘啊!啥时后硬盘会坏掉谁也说不准的!

那么硬盘该如何预防发生文件系统错误的问题呢?可以参考底下说明:

  • 妥善保养硬盘
    例如:主机通电之后不要搬动,避免移动或震动硬盘;尽量降低硬盘的温度,可以加装风扇来冷却硬盘; 或者可以换装 SCSI 硬盘。

  • 划分不同的partition
    为什么磁盘分区这么重要!因为Linux每个目录被读写的频率不同,妥善的块分配将会让我们的Linux更安全! 通常我们会建议划分下列的磁盘区块:
    • /
    • /boot
    • /usr
    • /home
    • /var
    这样划分有些好处,例如/var是系统默认的一些数据缓存或者是cache数据的储存目录, 像 e-mail 就含在这里面。如果还有使用proxy时,因为常常存取,所以有可能会造成磁盘损坏, 而当这部份的磁盘损坏时,由于其他的地方是没问题的,因此数据得以保存,而且在处理时也比较容易!

忘记 root 密码:


常常有些朋友在配置好了Linux之后,结果root密码给他忘记去!要重新安装吗?不需要的, 你只要以单人维护模式登陆即可更改你的root密码喔!由于lilo这个启动管理程序已经很少见了, 这里鸟哥使用grub启动管理程序作为范例来介绍啰!

先将系统重新启动,在读秒的时候按下任意键就会出现如同第四章图3.2的菜单画面,仔细看菜单底下的说明, 按下『e』就能够进入grub的编辑模式了。此时你看到的画面有点像底下这样:

root (hd0,0) 
kernel /vmlinuz-2.6.18-128.el5 ro root=LABEL=/ rhgb quiet 
initrd /initrd-2.6.18-128.el5.img 

此时,请将光标移动到kernel那一行,再按一次『 e 』进入kernel该行的编辑画面中, 然后在出现的画面当中,最后方输入 single :

kernel /vmlinuz-2.6.18-128.el5 ro root=LABEL=/ rhgb quiet single 

再按下『 Enter 』确定之后,按下 b 就可以启动进入单人维护模式了! 在这个模式底下,你会在tty1的地方不需要输入密码即可取得终端机的控制权(而且是使用root的身份喔!)。 之后就能够修改root的密码了!请使用底下的命令来修改root的密码喔!

[root@www ~]# passwd 
# 接下来系统会要求你输入两次新的密码,然后再来reboot即可顺利修订root密码了! 

这里仅是介绍一个简单的处理方法而已,更多的原理与说明将会在后续的各相关章节介绍的喔!


重点回顾


  • 为了避免瞬间断电造成的Linux系统危害,建议做为服务器的Linux主机应该加上不断电系统来持续提供稳定的电力;
  • 默认的图形模式登陆中,可以选择语系以及作业阶段。作业阶段为多种窗口管理员软件所提供,如GNOME及KDE等;
  • CentOS 5.x默认的中文输入法为使用SCIM这个软件所提供的输入;
  • 不论是KDE还是GNOME默认都提供四个Virtual Desktop给使用者使用;
  • 在X的环境下想要重新启动X的组合按键为:『[alt]+[ctrl]+[backspace]』;
  • 默认情况下,Linux提供tty1~tty6的文字接口登陆,以及tty7的图形接口登陆环境;
  • 除了run level 5默认取得图形接口之外,run level 3亦可使用 startx 进入图形环境;
  • 在终端机环境中,可依据提示字符为$或#判断为一般账号或root账号;
  • 取得终端机支持的语系数据可下达『echo $LANG』或『locale』命令;
  • date可显示日期、cal可显示日历、bc可以做为计算器软件;
  • 组合按键中,[tab]按键可做为命令补齐或档名补齐,[crtl]-[c]可以中断目前正在运行中的程序;
  • 联机帮助系统有man及info两个常见的命令;
  • man page说明后面的数字中,1代表一般账号可用命令,8代表系统管理员常用命令,5代表系统配置文件格式;
  • info page可将一份说明文件拆成多个节点(node)显示,并具有类似超链接的功能,添加易读性;
  • 系统需正确的关机比较不容易损坏,可使用shutdown, poweroff等命令关机。

本章习题


( 要看答案请将鼠标移动到『答:』底下的空白处,按下左键圈选空白处即可察看)

情境模拟题一:我们在tty1里面看到的欢迎画面,就是在那个login:之前的画面(CentOS release 5.3 (Final)...)是怎么来的?
  • 目标:了解到终端机接口的欢迎信息是怎么来的?
  • 前提:欢迎信息的内容,是记录到/etc/issue当中的
  • 需求:利用man找到该文件当中的变量内容
情境模拟题一的解决步骤:
  1. 欢迎画面是在/etc/issue文件中,你可以使用『nano /etc/issue』看看该文件的内容(注意,不要修改这个文件内容,看完就离开),这个文件的内容有点像底下这样:
    CentOS release 5.3 (Final) 
    Kernel \r on an \m 
    
  2. 与tty2比较之下,发现到核心版本使用的是 \r 而硬件等级则是 \m 来取代,这两者代表的意义为何? 由于这个文件的档名是issue,所以我们使用『man issue』来查阅这个文件的格式;

  3. 透过上一步的查询我们会知道反斜杠(\)后面接的字符是与mingetty(8)有关,故进行『man mingetty』这个命令的查询。

  4. 由于反斜杠(\)的英文为『escape』因此在上个步骤的man环境中,你可以使用『/escape』来搜寻各反斜杠后面所接字符所代表的意义为何。

  5. 请自行找出:如果我想要在/etc/issue文件内表示『时间(localtime)』与『tty号码(如tty1, tty2的号码)』的话, 应该要找到那个字符来表示(透过反斜杠的功能)?(答案为:\t 与 \l)

简答题部分:
  • 请问如果我以文本模式登陆Linux主机时,我有几个终端机接口可以使用?如何切换各个不同的终端机接口?
    共有六个, tty1 ~ tty6 ,切换的方式为 Crtl + Alt + [F1]~[F6],其中, [F7] 为图形接口的使用。
  • 在Linux系统中,/VBird与/vbird是否为相同的文件?
    两者为不同的文件,因为 Linux 系统中,大小写字母代表意义不一样!
  • 我想要知道 date 如何使用,应该如何查询?
    最简单的方式就是使用 man date 或 info date 来查看,如果该套件有完整说明的话,那么应该也可以在 /usr/share/doc 里面找到说明档!
  • 我想要在今天的 1:30 让系统自己关机,要怎么做?
    shutdown -h 1:30
  • 如果我 Linux 的 X Window 突然发生问题而挂掉,但 Linux 本身还是好好的,那么我可以按下哪三个按键来让 X window 重新启动?
    [crtl]+[alt]+[backspace]
  • 我想要知道 2010 年 5 月 2 日是星期几?该怎么做?
    最简单的方式直接使用 cal 5 2010 即可找出 2010 年 5 月份的月历。
  • 使用 man date 然后找出显示目前的日期与时间的参数,成为类似:2009/10/16-20:03
    date +%Y/%m/%d-%H:%M
  • 若以 X-Window 为默认的登陆方式,那请问如何进入 Virtual console 呢?
    可以按下 [Ctrl] + [Alt] + [F1] ~ [F6] 进入 Virtual console ( 共六个 ); 而按下 [Ctrl] + [Alt] + [F8] 或 [F7] 可回到 X-Window 的 desktop 中!
  • 简单说明在 bash shell 的环境下, [tab] 按键的用途?
    [Tab] 按键可做为命令补齐或文件补齐的功能,与所接的命令位置有关。 接在一串命令的第一个单字后面,则为命令补齐,否则则为文件补齐!
  • 如何强制中断一个程序的进行?(利用按键,非利用 kill 命令)
    可以利用 [Ctrl] + c 来中断!
  • Linux 提供相当多的在线查询,称为 man page,请问,我如何知道系统上有多少关于 passwd 的说明?又,可以使用其他的程序来取代 man 的这个功能吗?
    可以利用 man -f passwd 来查询,另外,如果有提供 info 的文件数据时 (在 /usr/share/info/ 目录中) ,则能够利用 info passwd 来查询之!
  • man -k passwd 与 man -K passwd 有什么差异(大小写的 K )?
    小写的 -k 为查询关键词,至于 -K 则是整个系统的 man page 查询~ 每个被检查到有关键词的 man page file 都会被询问是否要显示, 你可以输入『ynq』,来表示:y:要显示到屏幕上;n:不显示;q:结束 man 的查询。
  • 在 man 的时候, man page 显示的内容中,命令(或文件)后面会接一组数字,这个数字若为 1, 5, 8 ,表示该查询的命令(或文件)意义为何?
    代表意义为 1) 一般用户可以使用的命令或可运行文件案 5)一些配置文件的文件内容格式 8)系统管理员能够使用的管理命令。
  • man page 显示的内容的文件是放置在哪些目录中?
    放置在 /usr/share/man/ 与 /usr/local/man 等默认目录中。
  • 请问这一串命令『 foo1 -foo2 foo3 foo4 』中,各代表什么意义?
    foo1 一定是命令, -foo2 则是 foo1 这个命令的选择项目参数, foo3 与 foo4 则不一定, 可能是 foo1 的参数配置值,也可能是额外加入的 parameters。
  • 当我输入 man date 时,在我的终端机却出现一些乱码,请问可能的原因为何?如何修正?
    如果没有其他错误的发生,那么发生乱码可能是因为语系的问题所致。 可以利用 LANG=en 或者是 LANG=en_US 等配置来修订这个问题。
  • 我输入这个命令『ls -al /vbird』,系统回复我这个结果:『ls: /vbird: No such file or directory』 请问发生了什么事?』
    不要紧张,很简单的英文,因为系统根本没有 /vbird 这个文件的存在啊! ^_^
  • 你目前的 Linux 底下,默认共有多少可以被你运行的命令?
    最简单的做法,直接输入两次 [tab] 按键即可知道有多少命令可以被运行。
  • 我想知道目前系统有多少命令是以 bz 为开头的,可以怎么作?
    直接输入 bz[tab][tab] 就可以知道了!
  • 承上题,在出现的许多命令中,请问 bzip2 是干嘛用的?
    在使用 man bzip2 之后,可以发现到,其实 bzip2 是用来作为压缩与解压缩文件案用的!
  • Linux 提供一些在线文献数据,这些数据通常放在那个目录当中
    通常放在 /usr/share/doc 当中!
  • 在终端机里面登陆后,看到的提示字符 $ 与 # 有何不同?平时操作应该使用哪一个?
    # 代表以 root 的身份登陆系统,而 $ 则代表一般身份使用者。依据提示字符的不同, 我们可以约略判断登陆者身份。一般来说,建议日常操作使用一般身份使用者登陆,亦即是 $ !
  • 我使用dmtsai这个账号登陆系统了,请问我能不能使用reboot来重新启动? 若不能,请说明原因,若可以,请说明命令如何下达?
    理论上reboot仅能让root运行。不过,如果dmtsai是在主机前面以图形接口登陆时,则dmtsai还是可以透过图形接口功能来关机。

参考数据与延伸阅读


  • 注1:为了让Linux的窗口显示效果更佳,很多团体开始发展壁纸应用的环境,GNOME/KDE都是。 他们的目标就是发展出类似Windows壁纸的一整套可以工作的壁纸环境,他可以进行窗口的定位、放大、缩小、 同时还提供很多的壁纸应用软件。底下是KDE与GNOME的相关连结:
    http://www.kde.org/
    http://www.gnome.org/
  • 杨锦昌老师的X Window操作图解,以Fedora Core 3为例:http://apt.nc.hcc.edu.tw/docs/FC3_X/
  • man 7 man :取得更详细的数字说明内容

2002/07/16:第一次完成吧?
2003/02/06:重新编排与加入 FAQ
2004/05/01:在shutdown的命令部分,修改 shutdown -k "messages" 成为 shutdown -k now "messages",很抱歉,写错了!
2005/06/17:将原本的文章移动到 这里
2005/06/27:终于写完了!写的真久~没办法,将 man page 扩大解释,添加的幅度还挺多的!
2005/08/23:刚刚才发现,那个man page的内部命令说明中, n 与 N 的说明错误了!已订正!
2007/12/08:透过网友sheaushyong的发现,之前将Live CD中,说明要挂载 / 才 fsck 是不对的!请查阅此处
2008/09/03:将原本的Fedora Core IV的文章移动到此处
2008/09/08:加入了一些图示说明,尤其是info的部分多了一个示意图!
2008/09/09:加入了nano这个简单的文书编辑器说明,以及情境模拟题的解释!
2009/09/17:修订了显示的信息,将图片重新抓图汇整。