10.3.2 【Linux】历史命令:history

简介: 10.3.2 【Linux】历史命令:history
[dmtsai@study ~]$ alias h='history'

 

在正常的情况下,历史命令的读取与记录是这样的:

当我们以 bash 登陆 Linux 主机之后,系统会主动的由主文件夹的 ~/.bash_history 读取以前曾经下过的指令,那么 ~/.bash_history 会记录几笔数据呢?这就与你 bash 的HISTFILESIZE 这个变量设置值有关了!


假设我这次登陆主机后,共下达过 100 次指令,“等我登出时, 系统就会将 101~1100 这总共 1000 笔历史命令更新到 ~/.bash_history 当中。” 也就是说,历史命令在我登出时,会将最近的 HISTFILESIZE 笔记录到我的纪录档当中。


当然,也可以用 history -w 强制立刻写入的!那为何用“更新”两个字呢? 因为~/.bash_history 记录的笔数永远都是 HISTFILESIZE 那么多,旧的讯息会被主动的拿掉! 仅保留最新的!


10.4 Bash Shell的操作环境:

10.4.1 路径与指令搜寻顺序


指令运行的顺序可以这样看:


1. 以相对/绝对路径执行指令,例如“ /bin/ls ”或“ ./ls ”;


2. 由 alias 找到该指令来执行;


3. 由 bash 内置的 (builtin) 指令来执行;


4. 通过 $PATH 这个变量的顺序搜寻到的第一个指令来执行。


举例来说,你可以下达 /bin/ls 及单纯的 ls 看看,会发现使用 ls 有颜色但是 /bin/ls 则没有颜色。 因为 /bin/ls 是直接取用该指令来下达,而 ls 会因为“ alias ls='ls --color=auto' ”这个命令别名而先使用! 如果想要了解指令搜寻的顺序,其实通过 type -a ls 也可以查询的到。


例题:设置 echo 的命令别名成为 echo -n ,然后再观察 echo 执行的顺序答:

先 alias 再 builtin 再由 $PATH 找到 /bin/echo。


10.4.2 bash 的进站与欢迎讯息: /etc/issue, /etc/motd

以CentOS 7.1 作为范例,里面默认有三行,较有趣的地方在于 \r 与\m。 就如同 $PS1 这变量一样,issue 这个文件的内容也是可以使用反斜线作为变量取用喔!你可以 man issue 配合 man agetty 得到下面的结果:

例题:如果你在 tty3 的进站画面看到如下显示,该如何设置才能得到如下画面?


> CentOS Linux 7 (Core) (terminal: tty3) > Date: 2015-07-08 17:29:19 > Kernel 3.10.0-229.el7.x86_64 on an x86_64 > Welcome!


注意,tty3 在不同的 tty 有不同显示,日期则是再按下 [enter] 后就会所有不同。答:很简单,用 root 的身份,并参考上述的反斜线功能去修改 /etc/issue 成为如下模样即可(共五行):

10.4.3 bash的环境配置文件


login 与 non-login shell


login shell:取得 bash 时需要完整的登陆流程的,就称为 login shell。举例来说,你要由tty1 ~ tty6 登陆,需要输入使用者的帐号与密码,此时取得的 bash 就称为“ login shell。


non-login shell:取得 bash 接口的方法不需要重复登陆的举动,举例来说,(1)你以 Xwindow 登陆 Linux 后, 再以 X 的图形化接口启动终端机,此时那个终端接口并没有需要再次的输入帐号与密码,那个 bash 的环境就称为 non-login shell了。(2)你在原本的 bash 环境下再次下达 bash 这个指令,同样的也没有输入帐号密码, 那第二个 bash(子程序) 也是 non-login shell 。


为什么要介绍 login, non-login shell 呢?这是因为这两个取得 bash 的情况中,读取的配置文件数据并不一样所致。 由于我们需要登陆系统,所以先谈谈 login shell 会读取哪些配置文件?一般来说,login shell 其实只会读取这两个配置文件:


1. /etc/profile:这是系统整体的设置,你最好不要修改这个文件;


2. ~/.bash_profile 或 ~/.bash_login 或 ~/.profile:属于使用者个人设置,你要改自己的数据,就写入这里!


/etc/profile (login shell 才会读)


你可以使用 vim 去阅读一下这个文件的内容。这个配置文件可以利用使用者的识别码(UID) 来决定很多重要的变量数据, 这也是每个使用者登陆取得 bash 时一定会读取的配置文件! 所以如果你想要帮所有使用者设置整体环境,那就是改这里。不过,没事还是不要随便改这个文件,这个文件设置的变量主要有:


PATH:会依据 UID 决定 PATH 变量要不要含有 sbin 的系统指令目录;


MAIL:依据帐号设置好使用者的 mailbox 到 /var/spool/mail/帐号名;


USER:根据使用者的帐号设置此一变量内容;


HOSTNAME:依据主机的 hostname 指令决定此一变量内容;


HISTSIZE:历史命令记录笔数。CentOS 7.x 设置为 1000 ;


umask:包括 root 默认为 022 而一般用户为 002 等!


/etc/profile 可不止会做这些事而已,他还会去调用外部的设置数据!在 CentOS 7.x 默认的情况下,下面这些数据会依序的被调用进来:


/etc/profile.d/*.sh


其实这是个目录内的众多文件!只要在 /etc/profile.d/ 这个目录内且扩展名为 .sh ,另外,使用者能够具有 r 的权限, 那么该文件就会被 /etc/profile 调用进来。在 CentOS 7.x 中,这个目录下面的文件规范了 bash 操作接口的颜色、 语系、ll 与 ls 指令的命令别名、vi 的命令别名、which 的命令别名等等。如果你需要帮所有使用者设置一些共享的命令别名时, 可以在这个目录下面自行创建扩展名为 .sh 的文件,并将所需要的数据写入即可。


/etc/locale.conf


这个文件是由 /etc/profile.d/lang.sh 调用进来的!这也是我们决定 bash 默认使用何种语系的重要配置文件! 文件里最重要的就是 LANG/LC_ALL 这些个变量的设置。


/usr/share/bash-completion/completions/*


目录下面的内容是由 /etc/profile.d/bash_completion.sh 这个文件载入的。


~/.bash_profile (login shell 才会读)


bash 在读完了整体环境设置的 /etc/profile 并借此调用其他配置文件后,接下来则是会读取使用者的个人配置文件。 在 login shell 的 bash 环境中,所读取的个人偏好配置文件其实主要有三个,依序分别是:


1. ~/.bash_profile


2. ~/.bash_login


3. ~/.profile


bash 的 login shell 设置只会读取上面三个文件的其中一个, 而读取的顺序则是依照上面的顺序。也就是说,如果 ~/.bash_profile 存在,那么其他两个文件不论有无存在,都不会被读取。 如果 ~/.bash_profile 不存在才会去读取 ~/.bash_login,而前两者都不存在才会读取~/.profile 的意思。 会有这么多的文件,其实是因应其他 shell 转换过来的使用者的习惯而已。 先让我们来看一下 dmtsai 的 /home/dmtsai/.bash_profile 的内容是怎样呢?

文件内有设置 PATH 这个变量。而且还使用了 export 将 PATH 变成环境变量。由于PATH 在 /etc/profile 当中已经设置过,所以在这里就以累加的方式增加使用者主文件夹下的~/bin/ 为额外的可执行文件放置目录。这也就是说,你可以将自己创建的可执行文件放置到你自己主文件夹下的 ~/bin/ 目录。那就可以直接执行该可执行文件而不需要使用绝对/相对路径来执行该文件。


其他相关配置文件


事实上还有一些配置文件可能会影响到你的 bash 操作的,下面就来谈一谈:


/etc/man_db.conf


如果你是以 tarball 的方式来安装你的数据,那么你的man page 可能会放置在 /usr/local/softpackage/man 里头,那个 softpackage 是你的套件名称, 这个时候你就得以手动的方式将该路径加到 /etc/man_db.conf 里头,否则使用 man 的时候就会找不到相关的说明文档。


~/.bash_history


默认历史命令就记录在这里。这个文件能够记录几笔数据,则与 HISTFILESIZE 这个变量有关,每次登陆 bash后,bash 会先读取这个文件,将所有的历史指令读入内存, 因此,当我们登陆 bash 后就可以查知上次使用过哪些指令。


~/.bash_logout


这个文件则记录了“当我登出 bash 后,系统再帮我做完什么动作后才离开”的意思。 你可以去读取一下这个文件的内容,默认的情况下,登出时, bash 只是帮我们清掉屏幕的讯息而已。不过,你也可以将一些备份或者是其他你认为重要的工作写在这个文件中 (例如清空暂存盘), 那么当你离开 Linux 的时候,就可以解决一些烦人的事情。

相关实践学习
CentOS 7迁移Anolis OS 7
龙蜥操作系统Anolis OS的体验。Anolis OS 7生态上和依赖管理上保持跟CentOS 7.x兼容,一键式迁移脚本centos2anolis.py。本文为您介绍如何通过AOMS迁移工具实现CentOS 7.x到Anolis OS 7的迁移。
相关文章
|
3天前
|
Linux
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
18 3
|
3天前
|
监控 安全 Linux
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景,包括 ping(测试连通性)、traceroute(跟踪路由路径)、netstat(显示网络连接信息)、nmap(网络扫描)、ifconfig 和 ip(网络接口配置)。掌握这些命令有助于高效诊断和解决网络问题,保障网络稳定运行。
16 2
|
24天前
|
运维 安全 Linux
Linux中传输文件文件夹的10个scp命令
【10月更文挑战第18天】本文详细介绍了10种利用scp命令在Linux系统中进行文件传输的方法,涵盖基础文件传输、使用密钥认证、复制整个目录、从远程主机复制文件、同时传输多个文件和目录、保持文件权限、跨多台远程主机传输、指定端口及显示传输进度等场景,旨在帮助用户在不同情况下高效安全地完成文件传输任务。
171 5
|
24天前
|
Linux
Linux系统之expr命令的基本使用
【10月更文挑战第18天】Linux系统之expr命令的基本使用
72 4
|
11天前
|
缓存 监控 Linux
|
14天前
|
Linux Shell 数据安全/隐私保护
|
15天前
|
域名解析 网络协议 安全
|
21天前
|
运维 监控 网络协议
|
22天前
|
监控 Linux Shell
|
3天前
|
安全 网络协议 Linux
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。通过掌握 ping 命令,读者可以轻松测试网络连通性、诊断网络问题并提升网络管理能力。
18 3