# 本章习题
情景模拟题 1:由于 ~/.bash_history
仅能记录指令,我想要在每次注销时都记录时间,并将后续的指令 50 笔记录下来,要怎么做?
- 目标:了解 history,并通过数据流重导向的方式记录历史命令
- 前提:需要了解本章的数据流重导向,以及了解 bash 的各个环境配置文件信息
这里其实很简单,并不是要记录每条指令执行的时间,而是每次注销时的时间
# 退出的钩子在 ~./bash_logout
[mrcode@study tmp]$ vi ~/.bash_logout
# 先把当前时间写入到文件第一行
date > ~/.myhistory
# 再将最新 50 条指令追加写入到文件
history 50 >> ~/.myhistory
clear
2
3
4
5
6
7
8
简答题:
在 Linux 上可以找到那些 shell(举出三个)?那个文件记录可用的 shell?而 Linux 预设的 shell 是?
- /bin/bash、/bin/tcsh、/bin/csh
- /etc/shells
- /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
- login shell:主要读取 /etc/profile 以及
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
← 重点回顾 正则表达式与文件格式化处理 →