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 的时候,就可以解决一些烦人的事情。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/36795.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

网络编程7——IP协议(子网掩码,NAT机制,IPv6协议) + 以太网

文章目录 前言一、IP协议协议头格式认识IP地址格式组成子网掩码 地址管理1.动态分配2.NAT机制3.IPv6协议 路由选择 二、以太网以太网帧格式认识MTU 总结 前言 本人是一个普通程序猿!分享一点自己的见解,如果有错误的地方欢迎各位大佬莅临指导,如果你也对编程感兴趣的话&#x…

MongoDB【MongoDB索引Index (索引概述、索引类型、复合索引、)】(三)-全面详解(学习总结---从入门到深化)

目录 MongoDB索引Index 聚合操作 通过聚合操作可以处理多个文档,并返回计算后的结果。 对多个文档进行分组对分组的文档执行操作并返回单个结果分析数据变化 聚合管道 分别由多个阶段来处理文档,每个阶段的输出是下个阶段的输入, 返回的是…

GitLab名词介绍

GitLab名词介绍 分支:active、stale、default、protected IDEA中git面板:本地、远程、HEAD 合并时的选项:Delete、squash 查看Git常用操作 分支:active、stale、default、protected 在分支页面下,有active、stale…

Acwing 849. Dijkstra求最短路 I

Acwing 849. Dijkstra求最短路 I 链接:849. Dijkstra求最短路 I - AcWing题库 /*题解:dijkstra算法模板对于单源最短路径dijkstra1.每次找到当前距离源最近的节点 作为确定距离的点2.通过这个点看能否让其他的节点来松弛其他点到源的距离重复12操作*/ #include<algorithm&g…

端口映射的作用?如何在路由器上做端口映射

一、端口映射作用 路由器中设置端口映射的主要作用&#xff0c;就是让Internet上的其他用户&#xff0c;可以访问你路由器下面电脑中的数据(软件、文件)。 当家里的电脑使用路由器上网后&#xff0c;在Internet下的其它电脑、手机等网络设备&#xff0c;将无法自接访问你电脑…

linux常用的命令

一.操作目录命令 1.1 ls 命令 语法&#xff1a; ls [选项] [目录或文件] 功能: 对于目录&#xff0c;该命令列出该目录下的所有子目录与文件。对于文件&#xff0c;将列出文件名以及其他信息。 常用选项&#xff1a; a 列出目录下的所有文件&#xff0c;包括以 . 开头的隐含…

仙境传说RO:添加自定义道具

仙境传说RO&#xff1a;添加自定义道具 大家好&#xff0c;我是艾西今天和大家聊一下仙境传说RO怎么添加自定义道具。在我们开服时加入一些道具模组等往往会让我们的服务器更有特色以及消费点&#xff0c;那么让我们直接进入正题开始操作&#xff1a;&#xff08;此处我们讲的…

【C#】Kestrel和IIS服务器下的同步与异步配置

最近在回看自己写的代码时&#xff0c;发现服务配置里最开头写了两段代码&#xff0c;第一感觉&#xff0c;这是啥功能&#xff0c;太久有点生疏了&#xff0c;经过一顿搜索和回顾&#xff0c;简单整理如下 目录 1、Kestrel服务器1.1、跨平台1.2、高性能1.3、可扩展性1.4、安全…

零矩阵

暴力解法&#xff1a;先全部检索&#xff0c;定位0所在的位置&#xff0c; 记录到新的数组 数组的行列分别进行去重 数组中记录的行列赋值为零 如果直接修改&#xff0c;在行被修改之后&#xff0c;修改列时会因为行已经被修改产生影响 import org.junit.Test;import java.uti…

二十三种设计模式第十四篇--策略模式

策略模式&#xff1a;主要围绕一个类的行为或者其算法在运行时更改&#xff0c;也是一种行为型模式。 在软件开发中&#xff0c;我们经常遇到需要根据不同的情况选择不同算法或行为的情况。传统的做法是使用大量的条件语句来实现这种逻辑&#xff0c;但这样的实现方式往往难以…

Python模拟MQTT v3.1.1服务器

示例代码 import logging import asyncio from hbmqtt.broker import Broker# 设置日志级别为DEBUG logging.basicConfig(levellogging.DEBUG)# 创建MQTT服务器 broker Broker()# 启动MQTT服务器 async def start_broker():await broker.start()# 停止MQTT服务器 async def s…

python离线安装ibm_db

下载离线包ibm_db以及clidriver 下载imb_db 在pypi官方网站https://pypi.org/project/ibm-db/#files下载离线安装包ibm_db-3.0.2.tar.gz。下载clidriver 下载地址&#xff1a;https://public.dhe.ibm.com/ibmdl/export/pub/software/data/db2/drivers/odbc_cli/nt32_odbc_cli.…

C语言学生信息管理系统

C语言版学生信息管理系统 一&#xff0c;开发环境 操作系统&#xff1a;windows10, windows11, linux, mac等。开发工具&#xff1a;Qt, vscode, visual studio等开发语言&#xff1a;c语言 二&#xff0c;功能需求 1. 用户界面: 提供一个简洁的文本界面&#xff0c;用户可…

AI 对抗超级细菌:麦克马斯特大学利用深度学习发现新型抗生素 abaucin

内容一览&#xff1a;鲍曼不动杆菌是一种常见的医院获得性革兰氏阴性病原体&#xff0c;通常表现出多重耐药性。利用传统方法&#xff0c;发现抑制此菌的新型抗生素很困难。但利用机器学习可以快速探索化学空间&#xff0c;从而增加发现新型抗菌分子的可能性。近期&#xff0c;…

AI大数据智能视频融合平台EasyCVR新增Ehome黑白名单配置

EasyCVR视频融合平台基于云边端智能协同架构&#xff0c;具有强大的数据接入、处理及分发能力&#xff0c;平台支持海量视频汇聚管理&#xff0c;可支持多协议接入&#xff0c;包括市场主流标准协议与厂家私有协议及SDK&#xff0c;如&#xff1a;国标GB28181、RTMP、RTSP/Onvi…

2023-07-12:RocketMQ如何做到消息不丢失?

2023-07-12&#xff1a;RocketMQ如何做到消息不丢失&#xff1f; 答案2023-07-12&#xff1a; RocketMQ通过刷盘机制、消息拉取机制和ACK机制等多种方式来确保消息投递的可靠性&#xff0c;防止消息丢失。 1.刷盘机制 RocketMQ中的消息分为内存消息和磁盘消息&#xff0c;内…

【Linux】基础开发工具——gcc/g++篇

文章目录 一、预处理1.1 头文件展开1.2 条件编译 二、编译三、汇编四、链接4.1 什么是库?4.2 库的分类4.3 目标文件和库是如何链接的&#xff1f;4.3.1 动态链接4.3.2 静态链接 4.4 动静态链接的优缺点对比 五、Debug&&release 前言 &#xff1a;  在前面的文章里给大…

1、计算机网络核心

序号地址1计算机网络核心2数据库相关3Redis4Linux相关5JVM的内容6GC相关的7Java多线程与并发8Java多线程与并发-原理9Java常用类库与技巧10Java框架-Spring 文章目录 1、OSI开放式互联参考模型2、TCP/IP3、TCP报文头4、TCP的三次握手5、TCP的四次挥手6、为什么会有TIME_WAIT状态…

ARM Coresight 系列文章 7 - ARM Coresight 通过 AHB-AP 访问 cpu 内部 coresight 组件

文章目录 如下图所示&#xff0c;如果A78想去访问M33的内部 coresight 组件 ETM&#xff0c;需要要怎么做&#xff1f; 答案也正是在图中&#xff0c;首先A78 通过AXI 互联&#xff0c;接入到 APBIC 的 slave port&#xff0c;再通过APBIC 的 master 送出&#xff0c;而APBIC中…

机器学习-进化算法

进化算法 遗传算法&#xff08;Genetic Algorithm&#xff0c;GA&#xff09;crossovermutation 进化策略&#xff08;Evolutionary Strategies&#xff0c;ES&#xff09;基因编程&#xff08;Genetic Programming&#xff09;Multi-objective Evolutionary Algorithms 遗传算…