2021SC@SDUSC
实验九:其他命令部分
1.实验目的
1)掌握 Ubuntu 系统下文件系统中其他命令部分命令行的原理及使用
2.实验内容
本次实验主要是掌握 Linux 系统下的其他部分的使用,主要包括以下内容:
第九部分(其他部分):
1.hash 命令 – 显示与清除命令运行时查询的哈希表
2.wait 命令 – 等待指令
3.bc 命令 – 浮点运算
4.rmmod 命令 – 删除模块
5.history 命令 – 显示与操纵历史命令
3.实验环境
树莓派 4B,系统为 Ubuntu 21.10 系统 。实验的编程环境为 Terminal 终端程序
4.实验步骤
1.hash 命令 – 显示与清除命令运行时查询的哈希表
(1)语法
hash [参数] [目录]
(2)功能
Linux系统下会有一个hash表,每个SHLL独立,当你新开一个SHELL的时候,这个hash表为空,每当你执行过一条命令时,hash表会记录下这条命令的路径,就相当于缓存一样。第一次执行命令shell解释器默认的会从PATH路径下寻找该命令的路径,当你第二次使用该命令时,shell解释器首先会查看hash表,没有该命令才会去PATH路径下寻找。
注:hash表的作用:大大提高命令的调用速率。
(3)参数
-l 显示哈希表中的命令
-p<指令> 将具有完整路径的命令加入到哈希表中
-r 清除哈希表中的记录
-t 显示哈希表中命令的完整路径
(4)实例
hash 显示hash缓存:
[root@localhost ~]$hash
hits command
3 /usr/bin/apropos
3 /usr/bin/whatis
1 /usr/bin/systemctl
22 /usr/bin/man
hash –l 显示hash缓存,可作为输入使用:
-l参数带有命令的全路径
[root@localhost ~]$hash -l
builtin hash -p /usr/bin/apropos apropos
builtin hash -p /usr/bin/whatis whatis
builtin hash -p /usr/bin/systemctl systemctl
builtin hash -p /usr/bin/man man
hash –p path name将命令全路径path起别名为name:
[root@localhost ~]$hash
hits command
0 /usr/bin/free
2 /usr/bin/lsblk
2 /usr/bin/uname
1 /usr/bin/man
1 /usr/bin/tr
1 /usr/bin/ls
1 /usr/bin/tree
2 /usr/bin/free
[root@localhost ~]$hash -p /usr/bin/free Myfree
`free=Myfree`
[root@localhost ~]$Myfree
total used free shared buff/cache available
Mem: 995896 187620 426380 3532 381896 596012
Swap: 2097148 26276 2070872
[root@localhost ~]$free
total used free shared buff/cache available
Mem: 995896 187404 426596 3532 381896 596228
Swap: 2097148 26276 2070872
hash –t name 打印缓存中name的路径:
[root@localhost ~]$hash
hits command
1 /usr/bin/lsblk
2 /usr/bin/uname
1 /usr/bin/man
1 /usr/bin/tr
1 /usr/bin/ls
1 /usr/bin/tree
2 /usr/bin/free
[root@localhost ~]$hash -t lsblk
/usr/bin/lsblk
2.wait 命令 – 等待指令
(1)语法
wait [参数]
(2)功能
wait命令 用来等待指令的指令,直到其执行完毕后返回终端。该指令常用于shell脚本编程中,待指定的指令执行完成后,才会继续执行后面的任务。该指令等待作业时,在作业标识号前必须添加备份号”%”。
(3)参数
进程或作业标示:指定进程号或者作业号。
(4)实例
使用命令wait等待作业号为1的作业完成后再返回,输入如下命令:
wait %1 #等待作业号为3的作业完成
执行上面的指令后,将输出指定作业号的指令,如下所示:
find / -name password
3.bc 命令 – 浮点运算
(1)语法
bc [选项]
(2)功能
bc 命令是任意精度计算器语言,通常在linux下当计算器用。它类似基本的计算器, 使用这个计算器可以做基本的数学运算。
常用的运算:
- + 加法
- – 减法
- * 乘法
- / 除法
- ^ 指数
- % 余数
(3)参数
- -i:强制进入交互式模式;
- -l:定义使用的标准数学库
- -w:对POSIX bc的扩展给出警告信息;
- -q:不打印正常的GNU bc环境信息;
- -v:显示指令版本信息;
- -h:显示指令的帮助信息。
(4)实例
$ bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
2+3
5
5-2
3
2+3*1
5
输入 quit 退出。
通过管道符
$ echo "15+5" | bc
20
scale=2 设小数位,2 代表保留两位:
$ echo 'scale=2; (2.777 - 1.4744)/1' | bc
1.30
bc 除了 scale 来设定小数位之外,还有 ibase 和 obase 来其它进制的运算:
$ echo "ibase=2;111" |bc
7
进制转换
#!/bin/bash
abc=192
echo "obase=2;$abc" | bc
<pre>
<p>
执行结果为:11000000,这是用bc将十进制转换成二进制。</p>
<pre>
#!/bin/bash
abc=11000000
echo "obase=10;ibase=2;$abc" | bc
执行结果为:192,这是用bc将二进制转换为十进制。
4.rmmod 命令 – 删除模块
(1)语法
rmmod [参数] [模块名称]
(2)功能
rmmod命令用于删除模块。执行rmmod指令,可删除不需要的模块。Linux操作系统的核心具有模块化的特性,应此在编译核心时,务须把全部的功能都放如核心。你可以将这些功能编译成一个个单独的模块,待有需要时再分别载入它们。
(3)参数
- -a 删除所有目前不需要的模块。
- -s 把信息输出至syslog常驻服务,而非终端机界面。
(4)实例
显示已安装的模块
# lsmod
Module Size Used by
cramfs 39042 1
nfsd 238935 11
lockd 64849 1 nfsd
nfs_acl 2245 1 nfsd
auth_rpcgss 33735 1 nfsd
sunrpc 193181 10 nfsd,lockd,nfs_acl,auth_rpcgss
exportfs 3437 1 nfsd
xt_TCPMSS 2931 0
xt_tcpmss 1197 0
xt_tcpudp 2011 0
iptable_mangle 2771 0
ip_tables 9991 1 iptable_mangle
x_tables 14299 4
……省略部分结果
pppoe 8943 0
pppox 2074 1 pppoe
binfmt_misc 6587 1
snd_ens1371 18814 0
gameport 9089 1 snd_ens1371
snd_ac97_codec 100646 1 snd_ens1371
ac97_bus 1002 1 snd_ac97_codec
snd_pcm_oss 35308 0
卸载模块
# rmmod -v pppoe //卸载模块pppoe
Checking ppoe for persistent data
安装模块
# insmod -v pppoe >1.log //安装模块
~# tail -b 30 1.log //显示文件信息
5.history 命令 – 显示与操纵历史命令
(1)语法
history [参数] [目录]
(2)功能
history命令 用于显示指定数目的指令命令,读取历史命令文件中的目录到历史命令缓冲区和将历史命令缓冲区中的目录写入命令文件。
该命令单独使用时,仅显示历史命令,在命令行中,可以使用符号!
执行指定序号的历史命令。例如,要执行第2个历史命令,则输入!2
。
历史命令是被保存在内存中的,当退出或者登录shell时,会自动保存或读取。在内存中,历史命令仅能够存储1000条历史命令,该数量是由环境变量HISTSIZE
进行控制。
(3)参数
-c:清空当前历史命令;
-a:将历史命令缓冲区中命令写入历史命令文件中;
-r:将历史命令文件中的命令读入当前历史命令缓冲区;
-w:将当前历史命令缓冲区命令写入历史命令文件中。
(4)实例
使用history命令显示最近使用的10条历史命令,输入如下命令:
[root@localhost ~]# history 10
92 ls
93 cd ..
94 ls
95 exit
96 ls -a
97 cd .ssh/
98 ls
99 cat known_hosts
100 exit
101 history 10