# 本章习题

情景模拟题 1:由于 ~/.bash_history 仅能记录指令,我想要在每次注销时都记录时间,并将后续的指令 50 笔记录下来,要怎么做?

  • 目标:了解 history,并通过数据流重导向的方式记录历史命令
  • 前提:需要了解本章的数据流重导向,以及了解 bash 的各个环境配置文件信息

这里其实很简单,并不是要记录每条指令执行的时间,而是每次注销时的时间

# 退出的钩子在 ~./bash_logout
[mrcode@study tmp]$ vi ~/.bash_logout 
# 先把当前时间写入到文件第一行
date > ~/.myhistory 
# 再将最新 50 条指令追加写入到文件
history 50 >> ~/.myhistory
clear

1
2
3
4
5
6
7
8

简答题:

  • 在 Linux 上可以找到那些 shell(举出三个)?那个文件记录可用的 shell?而 Linux 预设的 shell 是?

    1. /bin/bash、/bin/tcsh、/bin/csh
    2. /etc/shells
    3. /bin/bash
  • 你输入一串指令之后,发现前面写的一长串数据是错误的,你想要删除游标所在处到最前面的指令串内容,应该如何处理?

    使用 ctrl + u 删除

  • 在 shell 环境下,有个提示字符(prompt),可用修改吗?要修改什么?默认的提示字符内容是?

    可用修改的,修改 PS1 变量,默认内容为 [\u@\h \W]\$

  • 如何显示 HOME 这个变量

    echo ${HOME}

  • 如何得知目前的所有变量与环境变量的设置?

    环境变量用 env 或 export ,使用 set 查看所有的环境变量

  • 是否可以设置一个变量名称为 3myhome?

    不可以,变量名不可以以数值作为开头

  • 在这样的练习中 A=B 且 B=C,若下达 unset $A 则取消的变量是 A 还是 B?

    被取消的是 B,因为 unset $A 相当于 unset B,所以取消的是 B,A 会继续存在

  • 如何取消变量与命令别名的内容?

    使用 unset 及 unalias

  • 如何设置一个变量名称为 name 内容为 It's my name?

    name="it's my name"name=it\‘s\my\name

  • bash 环境配置文件主要分为哪两种类型的读取?分别读取哪些重要文件?

    • login shell:主要读取 /etc/profile 以及 ~/.bash_profile
    • Non-login shell:主要读取 ~/.bashrc
  • CentOS 7.x 的 man page 的路径配置文件名?

    /etc/man_db.conf

  • 说明 ’、"、与 `在变量定义中的用途

    • ':表示普通字符串
    • ":具有变量上下文属性
    • `:被包裹的指令可以先被执行
  • 跳脱符号 \有什么特殊用途

    可以用来跳过特殊字符,例如 Enter、$ 等,使其成为一般字符

  • 连续命令中,;、$$、|| 有何不同?

    • ;:分别让两个 command 连续执行,不考虑 command1 的输出状态
    • $$:前一个指令必须没有错误信息,回传值为 0,则 command2 才会执行
    • ||:前一个指令必须有错误信息,与 && 相反
  • 如何将 last 的结果中,独立出账户,并且印出曾经登录过的账户?

    last | cut -d ' ' -f 1 | sort | uniq

  • 请问 fool && foo2 | foo3 > foo4 这个指令串中, foo1、foo2、foo3、foo4 是指令还是文件?整个指令的意义是?

    • Foo1、foo2、foo3 是指令,foo4 是文件
    • 若 foo1 执行错误时,则该指令串结束
    • 若 foo1 执行成功实,则执行 foo2 | foo3 > foo4,其中
      • foo2 的 stdout 结果传给 foo3 处理
      • Foo3 将来自 foo2 的 stdout 当成 stdin,处理完成后,将数据流重导向 foo4 这个装置/文件
  • 如何秀出在 /bin 下任何以 a 开头的文件名详细资料

    ls -ld /bin/a*

  • 如何秀出 /bin 下,文件名为 4 个字符的文件

    ls -ld /bin/????

  • 如何秀出 /bin 下,文件名开头不是 a-d 的文件

    ls -ld /etc/[^a-d]*

  • 想要让终端机接口的登录提示字符修改成我自己喜好的模样,需要修改哪个文件?

    /etc/issue

  • 接上题,如果我是想要使用者登录后,才显示欢迎信息,需要修改哪个文件?

    /etc/motd