【BASH】回顾与知识点梳理(三)
【BASH】回顾与知识点梳理 三
- 三. 命令别名与历史命令
- 3.1 命令别名设定: alias, unalias
- 3.2 历史命令:history
- 同一账号同时多次登入的 history 写入问题
- 无法记录时间
该系列目录 --> 【BASH】回顾与知识点梳理(目录)
三. 命令别名与历史命令
我们知道在早期的 DOS 年代,清除屏幕上的信息可以使用 cls 来清除,但是在 Linux 里面, 我们则是使用 clear 来清除画面的。那么可否让 cls 等于 clear 呢?可以啊!用啥方法? link file 还是什么的?别急!底下我们介绍不用 link file 的命令别名来达成。那么什么又是历史命令? 曾经做过的举动我们可以将他记录下来喔!那就是历史命令啰~底下分别来谈一谈这两个玩意儿。
3.1 命令别名设定: alias, unalias
命令别名是一个很有趣的东西,特别是你的惯用指令特别长的时候!还有, 增设默认的选项在一些惯用的指令上面,可以预防一些不小心误杀文件的情况发生的时候! 举个例子来说,如果你要查询隐藏档,并且需要长的列出与一页一页翻看,那么需要下达『 ls -al | more
』这个指令,鸟哥是觉得很烦啦! 要输入好几个单字!那可不可以使用 lm
来简化呢?当然可以,你可以在命令行下面下达:
[root@node-135 etc]# alias lm="ls -al|more"
立刻多出了一个可以执行的指令喔!这个指令名称为 lm ,且其实他是执行ls -al | more
啊!真是方便。不过, 要注意的是:『alias 的定义规则与变量定义规则几乎相同』, 所以你只要在 alias 后面加上你的 {『别名』='指令 选项...'
}, 以后你只要输入 lm 就相当于输入了 ls -al|more
这一串指令!很方便吧!
另外,命令别名的设定还可以取代既有的指令喔!举例来说,我们知道 root 可以移除 (rm) 任何数据!所以当你以 root 的身份在进行工作时,需要特别小心, 但是总有失手的时候,那么 rm 提供了一个选项来让我们确认是否要移除该文件,那就是 -i
这个选项!所以,你可以这样做:
[root@node-135 home]# rm='rm -i'
那么以后使用 rm 的时候,就不用太担心会有错误删除的情况了!这也是命令别名的优点啰! 那么如何知道目前有哪些的命令别名呢?就使用 alias 呀!
[root@node-135 home]# alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias lm='ls -al --color=auto|more'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias vi='vim'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
由上面的资料当中,你也会发现一件事情啊, vi 与 vim 是不太一样的,vim 可以多作一些额外的语法检验与颜色显示。一般用户会有 vi=vim
的命令别名,但是 root 则是单纯使用 vi 而已。 如果你想要使用 vi 就直接以 vim 来开启文件的话,使用『 alias vi='vim'
』这个设定即可。 至于如果要取消命令别名的话,那么就使用 unalias 吧!例如要将刚刚的lm 命令别名拿掉,就使用:
[root@node-135 home]# unalias lm
[root@node-135 home]# lm
-bash: lm: command not found
DOS 年代,列出目录与文件就是 dir ,而清除屏幕就是 cls ,那么如果我想要在 linux 里面也使用相同的指令呢?
很简单,透过 clear 与 ls 来进行命令别名的建置:
alias cls='clear'
alias dir='ls -l'
3.2 历史命令:history
前面我们提过 bash 有提供指令历史的服务!那么如何查询我们曾经下达过的指令呢?就使用history 啰!当然,如果觉得 histsory 要输入的字符太多太麻烦,可以使用命令别名来设定呢!
alias h='history'
如此则输入 h 等于输入 history 啰!好了,我们来谈一谈 history 的用法吧!
history [n]
history [-rawc] histfiles
#选项与参数
n :数字,意思是『要列出最近的 n 笔命令行表』的意思!
-c :将目前的 shell 中的所有 history 内容全部消除
-a :将目前新增的 history 指令新增入 histfiles 中,若没有加 histfiles ,则预设写入 ~/.bash_history
-r :将 histfiles 的内容读到目前这个 shell 的 history 记忆中;
-w :将目前的 history 记忆内容写入 histfiles 中!
在正常的情况下,历史命令的读取与记录是这样的:
- 当我们以 bash 登入 Linux 主机之后,系统会主动的由家目录的 ~/.bash_history 读取以前曾经下过的指令,那么 ~/.bash_history 会记录几笔数据呢?这就与你 bash 的 HISTFILESIZE 这个变量设定值有关了!
- 假设我这次登入主机后,共下达过 100 次指令,『等我注销时, 系统就会将 101~1100 这总共 1000 笔历史命令更新到 ~/.bash_history 当中。』 也就是说,历史命令在我注销时,会将最近的 HISTFILESIZE 笔记录到我的纪录文件当中啦!
- 当然,也可以用
history -w
强制立刻写入的!那为何用『更新』两个字呢? 因为 ~/.bash_history 记录的笔数永远都是 HISTFILESIZE 那么多,旧的讯息会被主动的拿掉! 仅保留最新的!
#范例一:列出目前内存内的所有 history 记忆
[dmtsai@study ~]$ history
# 前面省略
1017 man bash
1018 ll
1019 history
1020 history
# 列出的信息当中,共分两栏,第一栏为该指令在这个 shell 当中的代码,
# 另一个则是指令本身的内容喔!至于会秀出几笔指令记录,则与 HISTSIZE 有关!
#范例二:列出目前最近的 3 笔资料
[dmtsai@study ~]$ history 3
1019 history
1020 history
1021 history 3
#范例三:立刻将目前的资料写入 histfile 当中
[dmtsai@study ~]$ history -w
# 在默认的情况下,会将历史纪录写入 ~/.bash_history 当中!
[dmtsai@study ~]$ echo ${HISTSIZE}
1000
那么 history 这个历史命令只可以让我查询命令而已吗?呵呵!当然不止啊! 我们可以利用相关的功能来帮我们执行命令呢!举例来说啰:
[dmtsai@study ~]$ !number
[dmtsai@study ~]$ !command
[dmtsai@study ~]$ !!
#选项与参数:
number :执行第几笔指令的意思;
command :由最近的指令向前搜寻『指令串开头为 command』的那个指令,并执行;
!! :就是执行上一个指令(相当于按↑按键后,按 Enter)
[dmtsai@study ~]$ history66 man rm67 alias68 man history69 history
[dmtsai@study ~]$ !66 <==执行第 66 笔指令
[dmtsai@study ~]$ !! <==执行上一个指令,本例中亦即 !66
[dmtsai@study ~]$ !al <==执行最近以 al 为开头的指令(上头列出的第 67 个)
基本上 history 的用途很大的!但是需要小心安全的问题!尤其是 root 的历史纪录文件,这是 Cracker 的最爱!因为不小心的 root 会将很多的重要数据在执行的过程中会被纪录在 ~/.bash_history 当中,如果这个文件被解析的话,后果不堪吶!无论如何,使用 history 配合『 ! 』曾经使用过的指令下达是很有效率的一个指令下达方法!
同一账号同时多次登入的 history 写入问题
有些朋友在练习 linux 的时候喜欢同时开好几个 bash 接口,这些 bash 的身份都是 root 。 这样会有 ~/.bash_history 的写入问题吗?想一想,因为这些 bash 在同时以 root 的身份登入, 因此所有的 bash 都有自己的 1000 笔记录在内存中。因为等到注销时才会更新记录文件,所以啰, 最后注销的那个 bash 才会是最后写入的数据。唔!如此一来其他 bash 的指令操作就不会被记录下来了 (其实有被记录,只是被后来的最后一个 bash 所覆盖更新了) 。
由于多重登入有这样的问题,所以很多朋友都习惯单一 bash 登入,再用工作控制 (job control) 来切换不同工作! 这样才能够将所有曾经下达过的指令记录下来,也才方便未来系统管理员进行指令的 debug 啊!
[Ctrl] + [Alt] + [F2] ~ [F6] :文字接口登入 tty2 ~ tty6 终端机;
[Ctrl] + [Alt] + [F1] :图形接口桌面。
无法记录时间
历史命令还有一个问题,那就是无法记录指令下达的时间。由于这 1000 笔历史命令是依序记录的,但是并没有记录时间,所以在查询方面会有一些不方便。
history 增加时间戳
vim /etc/profile
#在最底端,增加下面一行代码:export HISTTIMEFORMAT="%F %T "
#保存完毕后,使用下面的方式,使之快速生效:source /etc/profile
history
...556 2023-08-01 11:26:18 vim /etc/profile557 2023-08-01 11:26:26 source /etc/profile558 2023-08-01 11:26:29 history
鸟哥经常需要设计在线题目给学生考试用,所以需要登入系统去设计环境,设计完毕后再将该硬盘分派给学生来考试使用。 只是,经常很担心同学不小心输入 history 就会得知鸟哥要考试的重点文件与指令,因此就得要使用
history -c; history -w
来强迫更新纪录文件了! 提供给您参考!
该系列目录 --> 【BASH】回顾与知识点梳理(目录)
相关文章:
【BASH】回顾与知识点梳理(三)
【BASH】回顾与知识点梳理 三 三. 命令别名与历史命令3.1 命令别名设定: alias, unalias3.2 历史命令:history同一账号同时多次登入的 history 写入问题无法记录时间 该系列目录 --> 【BASH】回顾与知识点梳理(目录) 三. 命令…...
C#设计模式之---单例模式
单例模式(Singleton) 单例模式,属于创建类型的一种常用的软件设计模式。通过单例模式的方法创建的类在当前进程中只有一个实例。 1)普通单例模式 using System; namespace SingletonPattern {/// /// 单例模式(非线程安全)/// …...

Git工具安装
Git 工具安装 1. 下载Git安装包2. 安装Git工具3. 简单的使用配置用户名 1. 下载Git安装包 打开官网 https://git-scm.com/downloads点击下载 2. 安装Git工具 右击以管理员身份运行 
深度学习——注意力机制、自注意力机制
什么是注意力机制? 1.注意力机制的概念: 我们在听到一句话的时候,会不自觉的捕获关键信息,这种能力叫做注意力。 比如:“我吃了100个包子” 有的人会注意“我”,有的人会注意“100个”。 那么对于机器来说…...

STM32入门学习之定时器中断
1.STM32的通用定时器是可编程预分频驱动的16位自动装载计数器。 STM32 的通用定时器可以被用于:测量输入信号的脉冲长度 ( 输入捕获 ) 或者产生输出波 形 ( 输出比较和 PWM) 等。 使用定时器预分频器和 RCC 时钟控制器预分频器,脉冲长度和波形 周…...
基本数据类型与包装数据类型的使用标准
Reference:《阿里巴巴Java开发手册》 【强制】所有的 POJO 类属性必须使用包装数据类型。【强制】RPC 方法的返回值和参数必须使用包装数据类型。【推荐】所有的局部变量使用基本数据类型。 比如我们如果自定义了一个Student类,其中有一个属性是成绩score,如果用Integer而不用…...
小研究 - 基于 SpringBoot 微服务架构下前后端分离的 MVVM 模型(二)
本文主要以SpringBoot微服务架构为基础,提出了前后端分离的MVVM模型,并对其进行了详细的分析以及研究,以此为相关领域的工作人员提供一定的技术性参考。 目录 4 SpringBoot 4.1 技术发展 4.2 技术特征 4.3 SpringBoot项目构建 4.4 目录结…...

ArmSoM-W3之RK3588安装Qt+opencv+采集摄像头画面
1. 简介 场景:在RK3588上做qt开发工作 RK3588安装Qtopencv采集摄像头画面 2. 环境介绍 这里使用了OpenCV所带的库函数捕获摄像头的视频图像。 硬件环境: ArmSoM-RK3588开发板、(MIPI-DSI)摄像头 软件版本: OS&…...
基于长短期神经网络的风速预测,基于LSTM的风速预测
目录 背影 摘要 LSTM的基本定义 LSTM实现的步骤 基于长短期神经网络LSTM的风速预测 完整代码: https://download.csdn.net/download/abc991835105/88171311 效果图 结果分析 展望 参考论文 背影 风速预测是一种比较难的预测,随机性比较大,长短期神经网络是一种改进党的RNN…...

Mybatis引出的一系列问题-spring多数据源配置
在日常开发中我们都是以单个数据库进行开发,在小型项目中是完全能够满足需求的。但是,当我们牵扯到像淘宝、京东这样的大型项目的时候,单个数据库就难以承受用户的CRUD操作。那么此时,我们就需要使用多个数据源进行读写分离的操作…...

Vue-组件二次封装
本次对el-input进行简单封装进行演示 封装很简单,就给激活样式的边框(主要是功能) 本次封装主要使用到vue自带的几个对象 $attrs:获取绑定在组件上的所有属性$listeners: 获取绑定在组件上的所有函数方法$slots: 获取应用在组件内的所有插槽 …...
[C++]02.选择结构与循环结构
02.选择结构与循环结构 一.程序流程结构1.选择结构1.1.if语句1.2.三目运算符1.3.switch语句 2.循环结构2.1.while语句2.2.do-while语句2.3.for语句2.4.break语句2.5.continue语句2.6.goto语句 一.程序流程结构 C/C支持的最基本的运行结构: 顺序结构, 选择结构, 循环结构顺序结…...

C语言案例 按序输出多个整数-03
难度2复杂度3 题目:输入多个整数,按从小到大的顺序输出 步骤一:定义程序的目标 编写一个C程序,随机输入整数,按照从小到大的顺序输出 步骤二:程序设计 整个C程序由三大模块组成,第一个模块使…...
如何获取vivado IP列表
TCL命令如下: set fid [open "vivado_included_ip_[version -short].csv" w] puts $fid "Name;Version" set ip_catalog [get_ipdefs *] foreach ip $ip_catalog{ set ipname [get_property DISPLAY_NAME [get_ipdefs $ip]]set iplib [get_p…...

计算机网络的定义和分类
计算机网络的定义和分类 计算机网络的定义 计算机网络的精确定义并未统一计算机网络最简单的定义是:一些互相连接的、自治的计算机的集合 互连:指计算机之间可以通过有线或无线的方式进行数据通信自治:是指独立的计算机,它有自己的硬件和软件ÿ…...
【css】超过文本显示省略号
显示省略号的前提:必须有指定宽度 一、单行文本超出部分显示省略号 属性取值解释overflowhidden当内容超过盒子宽度, 隐藏溢出部分white-spacenowrap让文字在一行内显示, 不换行text-overflowellipsis如果溢出的内容是文字, 就用省略号代替 .one-line{overflow:h…...

Java 8 中使用 Stream 遍历树形结构
在实际开发中,我们经常会开发菜单,树形结构,数据库一般就使用父id来表示,为了降低数据库的查询压力,我们可以使用Java8中的Stream流一次性把数据查出来,然后通过流式处理,我们一起来看看&#x…...

网络安全防火墙体验实验
网络拓扑 实验操作: 1、cloud配置 2、防火墙配置 [USG6000V1]int GigabitEthernet 0/0/0 [USG6000V1-GigabitEthernet0/0/0]ip add 192.168.200.100 24 打开防火墙的所有服务 [USG6000V1-GigabitEthernet0/0/0]service-manage all permit 3、进入图形化界面配置…...

YOLOv5引入FasterNet主干网络,目标检测速度提升明显
目录 一、背景介绍1.1 目标检测算法简介1.2 YOLOv5简介及发展历程 二、主干网络选择的重要性2.1 主干网络在目标检测中的作用2.2 YOLOv5使用的默认主干网络 三、FasterNet简介与原理解析3.1 FasterNet概述3.2 FasterNet的网络结构3.2.1 基础网络模块3.2.2 快速特征融合模块3.2.…...
SpringBoot运行时注入一个Bean
描述 使用GenericApplicationContext类的registerBean方法可以在项目运行时注入一个bean,获取GenericApplicationContext可以继承ApplicationContextAware,重写setApplicationContext,里面的参数就是ApplicationContext。 继承ApplicationC…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...