shell第一天作业
创始人
2024-05-01 07:41:12
0

题目

一、在当前主机编写脚本文件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~

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...
苏州离哪个飞机场近(苏州离哪个... 本篇文章极速百科小编给大家谈谈苏州离哪个飞机场近,以及苏州离哪个飞机场近点对应的知识点,希望对各位有...