shell中常用的基础命令详解
Posted 是大姚呀
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell中常用的基础命令详解相关的知识,希望对你有一定的参考价值。
shell中常用的基础命令
文章目录
1、diff 文件内容比较命令
a)用法:diff [options] files|directorys
b)输出信息:
[num1,num2] [a|c|d] [num3,num4]
num1,num2 ##第一个文件中的行
a ##添加
c ##更改
d ##删除
< ##第一个文件中的内容
> ##第二个文件中的内容
num3,num4 ##第二个文件中的行
c)常用参数:
参数 | 含义 |
---|---|
-b | 对比时忽略空格 |
-B | 对比时忽略空行 |
-i | 对比时忽略大小写 |
-c | 显示文件所有内容并标示不同 |
-r | 对比目录 |
-u | 对比后合并输出 |
2、patch文件修补命令
patch 原文件 补丁文件 ##使用补丁文件修改更新原始文件
patch -b 原文件 补丁文件 ##使用补丁文件修改更新原始文件时备份原文件
实验步骤:diff命令+patch命令
1)切换到一个空目录/mnt中,vim新建并编辑文件westos输入三行内容,保存退出编辑后cat查看该文件并将显示内容输出重定向到westos.new文件中生成文件westos的副本
2)编辑westos.new在第二行最后加入一个空格,此时diff比较两个文件内容显示2c2,即相较于第一个文件westos的第二行,第二个westos.new文件的第二行中进行了更改操作;在diff比较两个文件内容时使用-b参数,可以忽略空格显示两个文件内容相同
3)编辑westos.new删除第二行最后加入的空格并在其后面插入空行,此时diff比较两个文件内容显示2a3,即相较于第一个文件westos的第二行,第二个westos.new文件的第三行中进行了添加操作;在diff比较两个文件内容时使用-B参数,可以忽略空行显示两个文件内容相同
4)编辑westos.new删除第二行及其后面插入的空行,此时diff比较两个文件内容显示2d1,即相较于第一个文件westos的第二行,第二个westos.new文件的第一行后进行了删除操作
5)编辑westos.new重新输入第二行并在其后面添加字符a,此时diff比较两个文件内容显示2c2,即相较于第一个文件westos的第二行,第二个westos.new文件的第二行中进行了更改操作;在diff比较两个文件内容时使用-c参数,可以显示两个文件所有内容并标示不同;在diff比较两个文件内容时使用-u参数,可以对比两个文件所有内容合并后输出,将合并的输出重定向生成补丁文件westos.path
如果需要将补丁打到某一原文件中,需要安装patch软件,使用patch 原文件 补丁文件
命令打补丁(这里要注意,如果原文件内容对比显示缺少,打补丁后文件内容会添加;如果原文件内容对比显示多出,打补丁后文件内容会缺少),打补丁后原文件内容会被覆盖,如果需要备份原文件,在执行patch命令时可以使用-b得到备份文件(.orgi后缀)
6)建立两个目录,在一个目录下新建文件,diff使用-r参数对比两个目录内容,可以显示目录内容的不同
3、cut数据截取命令
cut -d : ##指定:为分隔符
-f ##指定显示的列:5表示第五列;3,5表示3和5列;3-5表示3到5列;
##5-表示第五列以后;-5表示到第五列
-c ##指定截取的字符(数字用法同-f)
实验步骤:
1)切换到一个空目录/mnt中,复制/etc/passwd文件到该目录中,避免文件内容过长删除一部分内容,可以看到文件中的内容是以:分隔的,执行cut命令使用-d参数指定以:为分隔符号、使用-f参数可以指定截取passwd文件的第几列
指定以:为分隔符号截取passwd文件的第1列
指定以:为分隔符号截取passwd文件的第1列到第3列
指定以:为分隔符号截取passwd文件的第1列和第3列
指定以:为分隔符号截取passwd文件的第3列到最后一列
指定以:为分隔符号截取passwd文件第3列前全部内容
2)执行cut命令使用-c参数指定截取passwd文件的第1个到第4个字符(指定数字的用法与-f参数相同)
3)命令练习:过滤ens3网卡上的ip并在输出时只显示该ip
思路:将ifconfig查询显示的信息通过管道,截取前两行后再截取IP所在的最后一行,对其执行cut命令指定以’'空格为分隔符号截取第10列即可得到ip
4、sort排序命令
sort -n ##纯数字排序
-r ##倒序排序
-u ##去掉重复后排序
-o ##将排序结果输出到指定文件
-t ##指定分隔符
-k ##指定排序的列
实验步骤:
1)切换到一个空目录/mnt中,新建编辑文件westos,写入多行数字,此时直接使用sort对文件进行排序,得到的是以首个字符为排序准则的排序结果,这是不对的,需要使用-n参数对文件进行纯数字排序
2)使用-r参数对文件westos进行纯数字倒序排序
3)使用-u参数去掉重复行后再对文件westos进行纯数字倒序排序
4)编辑文件westos,在每行数字前插入westos:,此时使用sort对文件进行排序需要使用-t指定以:为分隔符号、使用-k参数指定对文件的第几列进行排序
指定以:为分隔符号对文件westos的第2列进行纯数字排序
5)指定以:为分隔符号对文件westos的第2列进行纯数字倒序排序
6)指定以:为分隔符号,去掉重复行后再对文件westos的第2列进行纯数字倒序排序
5、uniq重复数据处理命令
uniq -c #合并重复并统计重复个数
-d #显示重复的行
-u #显示唯一的行
实验步骤:
1)编辑文件westos,删除在每行数字前插入的westos:,此时使用-n参数对文件westos进行纯数字排序后可以通过管道,使用uniq命令-d显示westos文件中重复的行、-u显示westos文件中只出现一次的数字即唯一的行、-c合并重复的行并统计重复的次数
2)查找文件westos中出现次数最多的数字:对文件westos进行纯数字排序后通过管道,使用uniq -c合并重复的行并统计重复的次数,通过管道指定以空格为分隔符号对将统计结果的第1列即重复次数进行排序,使用管道截取排序结果的最后一行后,指定以空格为分隔符号截取第8列即重复次数最多的数字
3)命令练习:查找能登陆系统用户中UID最大的用户,并显示其名称
思路:抓取/etc/passwd文件中以bash$结尾的行(即能登陆系统的用户),将显示的信息通过管道指定以“:”为分隔符号对第3列(UID所在列)进行纯数字倒序排序,截取排序结果的第一行,对其执行cut命令指定以“:”为分隔符号截取第1列即可得到能登陆系统用户中UID最大的用户名称
6、tr字符转换命令
tr 'a-z' 'A-Z' ##小写转大写
tr 'A-Z' 'a-z' ##大写转小写
实验步骤:
1)切换到一个空目录/mnt中,新建编辑文件westos,写入一行小写字符和一行大写字符,cat查看文件内容将显示结果通过管道进行字符转换
注意: 只能转换单个字符,如不能将’hello’转换为’test’;可以将给定范围(大写/小写)的字符转换为一个指定字符
7、&& || 条件判断
&& ##符合条件作动作
|| ##不符合条件作动作
实验步骤:
1)执行id 用户名
可以查看系统中某用户是否存在,我们可以将命令执行结果导入垃圾箱并使用&&判断如果符合无报错信息条件则输出yes—用户存在,使用||判断如果不符合无报错信息条件则输出no—用户不存在
2)编写脚本判断某一用户是否在系统中存在:使用id命令查看系统中是否存在某用户,将输出结果&>导入垃圾箱/dev/null,使用&&判断如果符合无报错信息条件则执行输出系统中存在该用户的动作,使用||判断如果不符合无报错信息条件则执行输出系统中不存在该用户的动作(-e参数表示编辑颜色,\\033表示执行动作,[32m表示转换字符颜色为绿色,[31m表示转换字符颜色为红色,32、31分别为绿色和红色的颜色代码),$+
数字一般是位置参数的用法,如果在运行脚本时需要识别命令行输入的参数,可以在脚本里通过$+
数字指定获取命令行输入的第几个参数
3)编写脚本判断某个ip能否ping通
8、test比较命令
a)test命令的四则运算
test = [] ##[]就相当于test命令,但[后和]前都必须有空格
"test $a = $b" = [ "$a" = "$b" ]
= ##等于
!= ##不等于
-eq ##等于
-ne ##不等于
-le ##小于等于
-lt ##小于
-ge ##大于等于
-gt ##大于
b)test的条件关系
-a ##并且
-o ##或者
c)test对空的判定
-n ##nozero 判定内容不为空
-z ##zero 判定内容为空
d)test对于文件的判定
-ef ##文件节点号是否一致(硬链)
-nt ##文件1是不是比文件2新
-ot ##文件1是不是比文件2老
-d ##文件类型是否为目录
-S ##文件类型是否为套接字
-L ##文件类型是否为软连接
-e ##文件是否存在
-f ##文件类型是否为普通文件
-b ##文件类型是否为块设备
-c ##文件类型是否为字符设备
实验步骤:
1)在系统中建立a、b两个变量并都赋值为1,此时使用test命令可以对两个变量的值进行相同、不同、大于等于、小于等判断操作,注意在判断时变量前要加$符并用“”引起来(如果是数字只需要用“”引起来),命令执行后无结果显示,我们需要使用&&判断如果符合相同条件则执行输出yes的动作,使用||判断如果不符合相同条件则执行输出no的动作
2)在系统中建立变量c并都赋值为5,此时执行test命令使用-a或-o参数可以连接多个判断条件,对变量的值进行判断(!表示条件反选,只对其后所跟的一则运算生效)
3)变量a的值为1,此时使用test命令对变量a进行值为空判断时结果为no,unset对当前变量a的值彻底删除后再次使用test命令对变量a进行值为空判断,结果为yes
4)执行test命令对/mnt目录中的文件进行相关判定
说明: ls -i 可以查看文件的节点号;ln -s(software)生成的软链接也是普通文件;ln生成的硬链接相当于复制了一份文件
5)命令练习:编写脚本判断文件类型
file_check.sh 在执行时如果脚本后未指定检测文件报错“未指定检测文件,请指定”,如果脚本后指定文件不存在报错“此文件不存在”,当文件存在时检测文件类型并显示到输出中
以上是关于shell中常用的基础命令详解的主要内容,如果未能解决你的问题,请参考以下文章