shell第一天作业

news/2025/1/11 19:56:42/

题目

一、在当前主机编写脚本文件history_max.sh显示主机中执行频率最高的前5个命令。

方法一:利用~/.bash_history文件

方法二:利用history命令

二、判断主机是否存在rhel用户,如果存在则设置密码为redhat,如果不存在则创建用户并设置密码。

三、通过设置变量HISTTIMEFORMAT,使得当执行history命令时输出格式如下


一、在当前主机编写脚本文件history_max.sh显示主机中执行频率最高的前5个命令。

方法一:利用~/.bash_history文件

思路:找到记录历史命令的文件~/.bash_history,通过sort、uniq等命令进行排序、统计操作,进而得到结果并输出。

操作:

1、查看~/.bash_history文件内容

2、根据~/.bash_history文件内容特征,用vim编写history_max.sh脚本

[root@client_2 shell]# vim history_max.sh 
#!/bin/bash
history_file=~/.bash_history
echo "  count cmd"
echo "`sort $history_file | uniq -c | sort -k1 -nr | head -5`"

注释:

sort  表示将切割出的内容排序;

uniq -c 表示删除连续的重复行并在每列旁边显示该行连续重复出现的次数;

sort -k1 -nr 表示指定第一列为排序依据并以数值型倒序排序。

3、设置history_max.sh脚本为可执行文件

[root@client_2 shell]# chmod a+rx history_max.sh 

4、运行脚本

[root@client_2 shell]# ./history_max.sh count cmd58 ll38 vim history_max.sh 26 ./history_max.sh 16 mount15 cd

方法二:利用history命令

思路:使用history命令获取记录历史命令,再通过tr、cut、sort、uniq等命令进行替换、切割、排序、统计操作,进而得到结果并输出。

操作:

1、查看history输出内容

2、根据history输出内容特征,用vim编写history_max.sh脚本

[root@client_2 shell]# vim history_max.sh 
#!/bin/bash
echo "  count cmd"
history | tr -s ' ' | cut -d' ' -f3- | sort | uniq -c | sort -k1 -nr | head -5

注释:

tr -s ' ' 表示将history输出的重复空格删除;

cut -d' ' -f3- 表示切割出以空格为分隔符的第3列及以后的所有列;

sort  表示将切割出的内容排序;

uniq -c 表示删除连续的重复行并在每列旁边显示该行连续重复出现的次数;

sort -k1 -nr 表示指定第一列为排序依据并以数值型倒序排序。

注意:若将history命令的输出结果保存到变量中,那么echo该变量时要将该变量加双引号,不加双引号会输出为一行,不方便阅读。如下:

#!/bin/bashecho "  count cmd"
hist="`history | tr -s ' ' | cut -d' ' -f3- | sort | uniq -c | sort -k1 -nr | head -5`"
echo "$hist"

3、设置history_max.sh脚本为可执行文件

[root@client_2 shell]# chmod a+rx history_max.sh 

4、运行脚本

[root@client_2 shell]# source history_max.sh count cmd58 ll38 vim history_max.sh 27 ./history_max.sh 16 mount15 cd

注意:这里要用source方式来执行脚本文件,如果用./history_max.sh命令执行,则不会返回结果。

因为./history_max.sh命令会创建出一个bash子进程,脚本调用history命令会在该子进程中进行,不会在本进程中进行,当脚本运行结束子进程也结束,本进程不会有返回结果;

而source命令并没有创建新的子shell进程,脚本里面所有创建的变量都会保存到当前的shell里面,所以无论是将history的返回值写到变量里输出还是直接调用history命令,都能够有返回结果。所以这里要用source方法。

二、判断主机是否存在rhel用户,如果存在则设置密码为redhat,如果不存在则创建用户并设置密码。

操作:

1、使用vim编辑useradd_rhel.sh脚本

[root@client_2 shell]# vim useradd_rhel.sh 
#!/bin/bash
if grep rhel /etc/passwd &> /dev/null
thenecho "user rhel already exists."
elseuseradd rhel -p redhatecho "add user rhel successfully."
fi

2、设置useradd_rhel.sh脚本为可执行文件

[root@client_2 shell]# chmod a+rx useradd_rhel.sh 

3、运行脚本

[root@client_2 shell]# ./useradd_rhel.sh 
add user rhel successfully.[root@client_2 shell]# ./useradd_rhel.sh 
user rhel already exists.

三、通过设置变量HISTTIMEFORMAT,使得当执行history命令时输出格式如下:

[2022-12-25 16:53:42][root]history

操作:

1、打开 /etc/profile 或 /etc/bashrc 文件,设置环境变量HISTTIMEFORMAT

[root@client_2 ~]# vim /etc/profile
export HISTTIMEFORMAT="[%F %T][`whoami`]"

2、重新读取文件

[root@client_2 ~]# source /etc/profile

3、验证生效

[root@client_2 ~]# history | more1  [2022-12-25 15:18:20][root]ping www.baidu.com2  [2022-12-25 15:18:20][root]cd /etc/yum.repos.d/3  [2022-12-25 15:18:20][root]ll4  [2022-12-25 15:18:20][root]mv redhat.repo redhat.repo .bak

over~


http://www.ppmy.cn/news/6920.html

相关文章

Cesium打包入门(gulp与esbuild)

本文针对Cesium源码包的打包工具gulp和esbuild进行了初步探讨,属于入门篇。 首先简要介绍采用gulpesbuild如何为多个源代码文件打包成一个单独文件,然后介绍了下Cesium中的源码包的结构,并简要分析了其打包的相关函数。 本文编译环境IDE使用…

利用WordPress搭建属于自己的网站

怎么用WordPress给自己搭建了一个网站?可能很多人都想拥有属于自己的网站,这篇文章就找你怎么利用WordPress搭建属于自己的网站。如果你也正好有搭建个人网站的想法,那么本文会给你一个参考,我尽量写的比较详细,给自己…

【C++求解数学题】大圆圈里面三角形个数相等

本文介绍的问题是一道来自于二年级(上)数学的练习题。 问题 在下图中画8个Δ\DeltaΔ,使每个大圆圈里都有4个Δ\DeltaΔ. 示例: 每个大圆圈里面均有4个Δ\DeltaΔ. 方法 按照“变量-范围-条件”的三段式穷举法解题框架,对…

BDD - Specflow Bindings

BDD - Specflow Bindings什么是 BindingBindings 的类型Step DefinitionshooksBindings 是全局共享的什么是 Binding Gherkin feature 文件更接近于自由文本而不是代码,他们不能按原样执行。将需求说明书关联到应用接口的 Automation 应该优先开发。而将 Gherkin S…

D. Lucky Chains edu139 div2

Problem - D - Codeforces 题意是给你a和b,要求__gcd(ak,bk)1的k最多可以增加多少个1 分析: 遇到这种的最大公约数的问题,有很大概率都是推公式,以及使用筛法去把所有的质数筛出来利用质因子去缩短时间 这题就是一个推公式的题…

【Leetcode】101. 对称二叉树、104. 二叉树的最大深度、226. 翻转二叉树

作者:一个喜欢猫咪的的程序员 专栏:《Leetcode》 喜欢的话:世间因为少年的挺身而出,而更加瑰丽。 ——《人民日报》 目录 101. 对称二叉树 104. 二叉树的最大深度 226. 翻转二叉树 101. 对称二…

学到羊之Kafka

1 kafka 是啥 Kafka 是一款开源的消息引擎系统,用来实现解耦的异步式数据传递。即系统 A 发消息给到 消息引擎系统,系统 B 通过消息引擎系统读取 A 发送的消息,在大数据场景下,能达到削峰填谷的效果。 2 Kafka 术语 Kafka 中的分…

国内葡萄酒行业数据浅析

大家好,这里是小安说网控。 葡萄酒是最为常见的果酒,在国内酒品市场上占据着一席之地。近年来,受整体经济环境影响,葡萄酒行业的各项数据都不甚理想。 今年,1-10月份,国内葡萄酒产值,无论是当期…