鸟哥的Linux私房菜第四章学习笔记

第4章 首次登陆和在线求助

一、要点总结

4.1 命令行

4.1.1 登录

  • 一般来说,不建议直接使用root的身份登陆系统。因为系统管理员的权限太高了,而Linux下面很多的指令行为是“没有办法复原”的。所以,使用一般帐号进行日常使用,“手滑”的情况会比较不严重。等到有需要修改或者是创建系统相关的管理工作时,再切换身份成为root。
  • 主机名的显示通常只取小数点前的字母。所以study.centos.vbird主机名在命令行界面只会显示study
  • 登录后~代表的是“使用者的主文件夹”的意思,不同用户有不同的主文件夹。举例来说,root的主文件夹在/root,所以~就代表/root的意思。而dmtsai的主文件夹在/home/dmtsai,所以如果你以dmtsai登陆时,他看到的~就会等于/home/dmtsai了。
  • 命令行模式登陆后所运行的程序被称为壳(Shell),Linux的壳程序就是bash。

4.1.2 执行命令

  • 可以以如下形式执行命令

    1
    2
    command  [-options]  parameter1  parameter2 ...
    # 指令 选项 参数(1) 参数(2)
    • 一行命令中第一个输入绝对是命令(command)或可执行文件(例如shell脚本)。
    • 命令、选项、参数等这几个东西中间以空格来区分,不论空几格shell都视为一格。所以空格是很重要的特殊字符。
    • 按下回车键后,该命令就立即执行。回车键代表着一行命令的开始启动。
    • 命令太长的时候,可以使用反斜线(\)来转义回车键,使命令连续到下一行。
    • 在Linux系统中,英文大小写字母是不一样的。举例来说,cd与CD并不同。
  • 执行命令的两种主要情况

    • 一种是该命令会直接显示结果,然后回到命令提示字符等待下一个命令的输入,如datecal
    • 一种是进入到该命令的环境,直到结束该指令才回到命令提示字符的环境,如bc
  • 三个案例命令

    • 查询日期时间date
    • 查询日历cal
    • 计算器bc

4.1.3 四个快捷键

Tab
  • [Tab]接在一串命令的第一个字段后面,则为【命令补全】。
  • [Tab]接在一串指令的第二个字段后面,则为【文件补齐】。
  • 若安装bash-completion软件,则在某些指令后面使用[tab]按键时,可以进行【选项/参数的补齐】功能。
[Ctrl]-C
  • 中断目前程序。
[Ctrl]-D
  • 代表“键盘输入结束(End Of File, EOF或End Of Input)”的意思。
  • 也可以用来取代exit的输入。例如你想要直接离开命令行,可以直接按下[Ctrl]-D(相当于输入exit)。
[shift]+{[PageUP]|[Page Down]}按键
  • 使用【Shift+Page Up】来往前翻页,使用【Shift+Page Down】来往后翻页。

4.1.4 注销

  • 注销不是关机,只是将用户退出系统。
  • 输入exit或按下[Ctrl]-D即可。

4.2 图形用户界面X Window

4.2.1 X Window和命令行的切换

  • Linux默认的情况下会提供六个Terminal来让使用者登陆,分别命名为tty1tty6的操作接口环境,使用**[Ctrl]+[Alt]+[F1][F6]**组合键切换。
  • 通常tty1是默认的图形界面模式。所以要切换到命令行可以按[Ctrl]+[Alt]+[F2]~[F6],而后可以按[Ctrl]+[Alt]+[F1]回到图形界面。
  • 在CentOS 7环境下,当启动完成之后,默认系统只会提供给你一个tty而已,因此无论是命令行界面还是图形界面,都是会出现在tty1。tty2~tty6其实一开始是不存在的!但是当你要切换时(按下[ctrl]+[alt]+[F2]),系统才产生出额外的tty2。
  • 所谓图形环境,实际上就是【命令行界面加上X Window软件】的组合。若在命令行环境中使用【startx】命令启动X Window,图形界面就会出现在当时那个tty上,但是有如下条件:
    • 并没有其他的X Window被启用;
    • 已经安装了X Window,并且X server是能够顺利启动的;
    • 最好要有窗口管理器,例如GNOME、KDE或者是普通的TWM等。

4.2.2 文件显示和权限

  • 只要文件名的开头是小数点,那么该文件名就不会在一般观察模式中被显示出来。

  • 2的箭头指的是一般的目录,3的箭头指的是链接文件,4的箭头指的是禁止进入的目录。如果你的帐号没有权限进入该目录时,该目录就会出现一个【X】的符号。

各种目录的显示和权限

4.2.3 重启X Window

  • 直接注销,然后再重新登陆即可;
  • 在X Window中直接按下【Ctrl+Alt+Backspace】。这个方法要生效,需要提前进行以下设置:
    • 由【应用程序】的【工具】项目下的【优化工具】中,使用【打字】项目,并选择【杀死X服务器的按键序列】从【已禁用】改成【Ctrl+Alt+Backspace】的设置。

4.3 在线求助

4.3.1 知道命令但忘记参数使用--help

  • 几乎Linux上的命令在开发时,开发者就将可以使用的命令语法与参数写入命令的--help选项打印中。

4.3.2 不知道命令或文件格式找maninfo

man page
  • 在所有UNIX-like系统中都有。

  • man是manual的缩写。只要执行man something马上就会有清楚的说明出现,出现的这个页面叫man page

    • 当然,可以通过man man的方式查询它自己的用法。
    • 如果想找到所有和something命令有关的说明文件,使用-f参数
      1
      man -f something
    • 如果想模糊搜索。只要说明文件里包含something字符串就把它列出来,使用-k参数
      1
      man -k something
  • man something结果后的数字表示了something的类型,如下表

    代号 代表内容
    1 使用者在shell环境中可以操作的指令或可可执行文件
    2 系统核心可调用的函数与工具等
    3 一些常用的函数(function)与函数库(library),大部分为C的函数库(libc)
    4 设备文件的说明,通常在/dev下的文件
    5 配置文件或者是某些文件的格式
    6 游戏(games)
    7 惯例与协定等,例如Linux文件系统、网络协定、ASCII code等等的说明
    8 系统管理员可用的管理指令
    9 跟kernel有关的文件
    • 也可以通过在man命令后加上数字来限定搜索something命令的文件说明范围,比如

      1
      2
      man 1 something
      man 7 something
  • man page的操作方式

    按键 进行工作
    空格键 向下翻一页
    [Page Down] 向下翻一页
    [Page Up] 向上翻一页
    [Home] 去到第一页
    [End] 去到最后一页
    /string 向“下”搜寻 string 这个字串
    ?string 向“上”搜寻 string 这个字串
    n, N n 搜寻下一个(不论是 / 或 ?) , N “反向”搜寻
    q 结束这次的 man page
  • man page通常是放在/usr/share/man目录,然而,我们可以通过修改/etc/man_db.conf来修改man page的搜寻路径。

  • 还有两个命令和man相关,是man的简略写法

    1
    2
    whatis [命令或是数据]  # 相当于 man -f [命令或是数据]
    apropos [命令或是数据] # 相当于 man -k [命令或是数据]
    • 要注意的是,这两个特殊命令要能使用,必须要有创建 whatis 数据库才行!这个数据库的创建需要以 root 的身份下达如下的命令:

      1
      mandb # 旧版的Linux这个命令是使用makewhatis。CentOS7开始使用 mandb 了。
info page
  • Linux额外提供了一种线上求助的方法info命令

  • 与man page一口气输出一堆信息不同的是,info page是将文件数据拆成一个一个的段落,每个段落用自己的页面来撰写, 并且在各个页面中还有类似网页的“超链接”来跳到各不同的页面中,每个独立的页面也被称为一个节点(node)。

  • 按键

    按键 进行工作
    空白键 向下翻一页
    [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
  • CentOS 7将info page的文件放置到/usr/share/info/目录中。这样不以info page格式写成的说明文档(就是man page),虽然也能够使用info来显示,不过其结果就会跟man page相同。

4.3.3 软件的说明文档找/usr/share/doc目录

  • 很多软件都有额外的文档告诉你原理说明、版权信息、安装须知、预计工作事项、未来工作规划等,这些说明文件一般放在/usr/share/doc目录。

4.4 正确的关机

4.4.1 必要性

Linux系统中由于是多用户多任务的环境,所以系统随时都有很多不同的用户所下达的任务在进行, 因此正确的开关机非常重要。不正常的关机可能会导致文件系统错乱,造成数据的毁损(因为来不及把数据写回到文件中)。这也是为什么通常Linux主机都会加挂一个UPS(不间断电源)的缘故。

4.4.2 正确的流程

  1. 观察系统使用状态。
    • 使用who命令查看目前有谁在线。
    • 使用netstat -a命令查看网络的联机状态。
    • 使用ps -aux查看后台执行的程序。
  2. 使用shutdown通知在线用户关机的时刻
  3. 先同步sync后正确使用关机命令shutdownreboothaltpoweroff
    • 虽然现在上述关机命令均在关机前进行了sync的调用,但是还是保险点好。
    • 一般用户只有在主机前以物理终端(tty1~tty6)登录系统时可以执行关机命令。只有root用户可以通过远程管理工具(如ssh工具)执行关机命令。

4.4.3 关机相关的命令

数据同步写入磁盘:sync
  • 在命令行输入sync,在内存中尚未被更新的数据就会被写入硬盘中。
  • 一般用户使用sync所更新的硬盘数据就仅有自己的数据,而root可以更新整个系统中的数据。
常用的关机命令:shutdown
1
2
3
4
5
6
shutdown [-krhc] [时间] [警告信息]
# -k : 不要真的关机,只是发送警告信息出去。
# -r : 在将系统服务停掉以后重新启动(常用)。
# -h : 在将系统服务停掉以后关机(常用)。
# -c : 取消已经在进行的shutdown命令。
# 时间 : 制定关机时间。若缺省则默认1分钟后执行。
其他替代命令:reboothaltpoweroff
1
2
3
reboot # 重新启动
halt # 系统停止,屏幕可能会保留系统已经停止的信息
poweroff # 系统关机,所以没有提供额外的电力,屏幕空白
使用管理工具systemctl关机
  • 上面谈到的shutdownreboothaltpoweroff其实都是调用了systemctl这个命令。
1
2
3
4
5
6
systemctl [命令]
# 命令项目包括如下:
# halt 进入系统停止的模式,屏幕可能会保留一些信息,这与你的电源管理模式有关
# poweroff 进入系统关机模式,直接关机
# reboot 直接重新启动
# suspend 进入休眠模式

二、习题解答(非官方,仅为个人练习记录)

  1. 简单查询一下,Physical console、Virtual console、Terminal的说明是什么?

    Physical consoles是基于物理设备的终端,可以支持多个虚拟终端(Virtual console/terminal)。

  2. 请问如果我以命令行模式登录Linux主机时,我有几个终端接口可以使用?如何切换各个不同的终端接口?

    6个终端接口,分别是tty1~tty6。使用 [Ctrl]+[Alt]+[F1]~[F6]切换。

  3. 在Linux系统中,/VBird与/vbird是否为相同的文件?

    否,Linux区分大小写。

  4. 我想要知道date如何使用,应该如何查询?

    • 如果只是忘记options和参数,可以使用--help-h查询。

      1
      date -h
    • 如果想更具体地了解,可以在所有Unix-like环境下使用man以及在Linux下使用info来查询。

      1
      2
      man date
      info date
    • 部分软件还可以在/usr/share/doc目录下寻找说明文件,但是date是没有的。

  5. 我想要在今天的1:30让系统自己关机,要怎么做?

    1
    shutdown -h 1:30
  6. 如果Linux的X Window突然发生问题而挂掉,但Linux本身还是好好的,那么我可以按下哪三个按键来让X Window重启?

    如果事先设置【杀死X服务器的按键序列】为[Ctrl]+[Alt]+[Backspace],按下这三个按键即可。

  7. 我想要知道2010年5月2日是星期几?该怎么做?

    通过cal命令查看2010年5月的日历:

    1
    2
    cal 5 2010 
    # 查到结果为Mon
  8. 使用man date找出显示目前的日期与时间的参数,显示方式类似:2015/10/16-20:03。

    1
    2
    3
    4
    5
    man date 
    # 得到date格式为 date [OPTION]... [+FORMAT]
    # FORMAT里,%Y是year,%m是month,%d是day of month,%H是hour,%M是minute。
    # 则可以如下打印要求内容:
    date +%Y/%m/%d-%H:%M
  9. 若以X Window为默认的登录方式,那请问如何进入Virtual console呢?

    一般tty1是X Window,所以按下[Ctrl]+[Alt]+[F2]~[F6]切换到tty2~tty6即可。

  10. 简单说明在bash shell的环境下,[Tab]按键的用途?

    • [Tab]接在一串命令的第一个字段后面,则为【命令补全】。
    • [Tab]接在一串命令的第二个字段后面,则为【文件补全】。
    • 若安装了Bash-completion软件,则在某些命令后面使用[Tab]按键时,可以进行【选项/参数的补齐】功能。
  11. 如何强制终端一个程序的进行?(利用按键,非利用kill命令)

    同时按下[Ctrl]+[C]

  12. Linux提供相当多的在线查询,称为man page,请问,我如何知道系统上有多少关于passwd的说明?可以使用其他的程序来替代man的这个功能吗?

    查看关于man的所有说明:

    1
    man -f passwd

    可以使用info命令查询,也可以访问/usr/share/doc/passwd-0.79/文件夹查看相关信息。

  13. 在man page显示的内容中,命令(或文件)后面会接一组数字,这个数字若为1,5,8,表示该查询的命令(或文件)意义是什么?

    使用man man查询,得到如下结果:

    • 1 Executable programs or shell commands
    • 5 File formats and conventions eg /etc/passwd
    • 8 System administration commands (usually only for root)
  14. man page显示的内容的文件是放置在哪些目录中?

    使用man man查询得到:Each global manual page hierarchy such as /usr/share/man or /usr/X11R6/man may have any directory as its cat page hierarchy.

  15. 请问foo1 -foo2 foo3 foo4这一串命令中各代表什么意义?

    foo1是命令或可执行文件,foo2是选项,foo3foo4是参数。

  16. 当我输入man date时,在我的终端却出现一些乱码,请问可能的原因是什么?如何修正?

    终端在默认情况下,无法支持以中文编码输出数据。这个时候就需要将支持语系改为英文,才能以英文显示出正确的信息。

    1
    2
    3
    4
    locale # 显示目前所支持的语系
    # 修改语系成为英文语系:
    LANG=en_US.utf8
    export LC_ALL=en_US.utf8
  17. 我输入这个命令“ls -al /vbird”,系统回复我这个结果:“ls /vbird: No such file or directory”,请问发生了什么事?

    没有/vbird这个文件夹。

  18. 我想知道目前系统有多少命令是以bz为开头的,可以怎么做?

    命令行输入bz然后按[Tab]。

  19. 承上题,在出现的许多命令中,请问bzip2是干嘛用的?

    命令行输入

    1
    2
    bzip2 -h
    # 得到:bzip, a block-sorting file compressor.
  20. 在终端里面登录后,看到的提示符$与#有何不同?平时操作应该使用哪一个?

    $是一般用户的终端,#是root用户的终端。平时应该使用一般用户。

  21. 我使用dmtsai这个账号登录系统了,请问我能不能使用reboot来重启?若不能,请说明原因,若可以,请说明命令如何执行?

    如果是在主机的物理终端上登录系统泽可以,直接命令行输入reboot即可。如果是远程管理工具登录则不可以,只有root用户可以远程关机。