shell基础命令管理

一、shell简介

1.Shell是什么?
在计算机语言中,shell是指一种命令行解释器,是为用户和操作系统之间通信提供的一种接口(想象一下,若果没有一种与计算机沟通的方式,那么计算机如何得到来自人脑的指令呢),它接受来自用户输入的命令,并将其转化为一系列的系统调用送到内核执行,并将结果输入给用户。下图显示了shell在操作系统中的位置。
在这里插入图片描述
Shell分为两大类,一类是图形界面shell(Graphical User Interface),用户可以在GNOME桌面空白处单击鼠标右键,在弹出的菜单中单击Open terminal选项,打开shell。另一类是命令行式Shell(Command Line Interface),即CLI
事实上,Shell不只是一种解释器(在用户和系统间起着桥梁的作用),还是一种编程工具,称为脚本语言。与编译型语言(比如C/C++/Java等)不同,脚本语言又被称为解释型语言,这种语言经过编写后不需要做任何编译就可以运行。

2. Shell的功能是什么?

当一台系统运行起来时,内核会被调入内存中运行,由内核执行所有底层的工作,它会将所有应用程序及用户的操作翻译成CPU的基本指令,并将其送至处理器,这些过程听起来复杂,实际上也确实是非常底层和技术化的。为了对用户屏蔽这些复杂的技术细节,同时也是为了保护内核不会因用户直接操作而受到损害,有必要在内核之上创建一个层,该层就是一个“壳“,也就是shell名称的由来。
Bash Shell有两种工作模式,分别是互动模式和脚本模。 所谓互动模式就是由系统管理人员直接通过键盘输入命令,并等待其执行完毕后再执行下一条命令;而另一种模式是设计出一个脚本文件,将所有需要执行的命令写在该文件中,有Bash Shell读取并执行。很明显后一种工作模式的效率会更高,因为可以让工作变得“自动化“。

二、shell中常用的基本命令

1. diff命令

1. 命令格式

    diff 命令是用来比较两个文件或目录的不同
    diff [options] target1 target2
    diff file1 file2文件
    diff direcory1 directory2目录

2. diff在比较文件过程中结果读取方式、读取结果每一项的含义

  [num1,num2][a|c|d][num3,num4]
  num1,num2   表示在第一个文件中的行数
  num3,num4   表示在第二个文件中的行数
a表示添加 ----add
c表示更改 ----change
d表示删除 ----delete
<表示第一个文件中的内容
>表示第二个文件中的内容
分割线

例如:
2,4c2,4 表示改变第一个文件的第二行和第四行才能匹配到第二个文件

3. diff在比较目录过程中结果的读取,读取结果每一项表示含义

  Only in directroy/: filename
  directory   表示在那个目录中
  filename   表示在这个目录

4. diff中常用的参数说明

-b 或 --ignore-space-change不检查空格字符的不同
-B 或 --ignore-blank-lines不检查空白行
-c显示全部内文,并标出不同之处
-i 或 --ignore-case不检查大小写的不同
-p若比较的文件为 C 语言的程序码文件时,显示差异所在的函数名称
-q 或 --brief仅显示有无差异,不显示详细的信息
-r 或 --recursive比较子目录中的文件
-u以合并的方式来显示文件内容的不同

具体实验如下所示:

diff file1 file2文件
在这里插入图片描述
在这里插入图片描述
diff direcory1 directory2目录
在这里插入图片描述
-b 或 --ignore-space-change 不检查空格字符的不同
在这里插入图片描述
-B 或 --ignore-blank-lines 不检查空白行
在这里插入图片描述-c 显示全部内文,并标出不同之处
在这里插入图片描述
-i 或 --ignore-case 不检查大小写的不同
在这里插入图片描述
-p :若比较的文件为 C 语言的程序码文件时,显示差异所在的函数名称
在这里插入图片描述
-q 或 --brief :仅显示有无差异,不显示详细的信息
在这里插入图片描述
-u 以合并的方式来显示文件内容的不同
在这里插入图片描述
注意: -q和-c的不同之处再于-c更智能一些

2. patch命令

1. 命令格式

用于不同文件打补丁
命令格式 patch   [options]     file.old(旧文件)    file.path(补丁文件)使用补丁文件来完善旧文件

2. 实验步骤如下:

  yum install patch -y   ##安装打补丁的软件
  diff -u test.c test1.c > test.patch      ##生成补丁文件 test.patch 
  patch  test.c test.patch   ##修补文件test.c

yum install patch -y ##安装打补丁的软件
在这里插入图片描述
在这里插入图片描述
diff -u test.c test1.c > test.patch ##生成补丁文件 test.patch
在这里插入图片描述
patch test.c test.patch ##修补文件test.c
在这里插入图片描述

3. cut命令(多用于字符截取)
cut -d指定分隔符
cut -f 1,7/1-7指定截取的列
cut -c 1,4 /1-4指定截取的字符位置

实验操作如下:

首先拷贝/etc/passwd到/mnt下,如下所示:
在这里插入图片描述cut -d(分隔符) : -f(列) 1(第一列) passwd
在这里插入图片描述
cut -d(分隔符) : -f(列) 1,4(1和4) passwd
在这里插入图片描述
cut -d(分隔符) : -f(列) 1-4(1到4) passwd
在这里插入图片描述
cut -c(位置) 2-4(2到4) passwd
在这里插入图片描述
cut -c(位置)2,4(2和4) passwd
在这里插入图片描述

4. sort命令(多用于字符排序)
sort -n纯数字排序
sort -r倒序
sort -u去掉重复数字
sort -o输出到指定文件中
sort -t指定分隔符
sort -k指定要排序的列

实验操作如下:

首先编写一个脚本,脚本中写入一些数字,如下所示:
在这里插入图片描述
sort haha 仅对第一列数字排序
在这里插入图片描述
sort -n haha 对数字排序
在这里插入图片描述
sort -nr haha 对数字倒序排序
在这里插入图片描述
sort -nru haha 去掉重复的数字对数字倒序排序
在这里插入图片描述
sort -nru haha -o westos 指定排序结果到westos文件中
在这里插入图片描述
进入文件加入分隔符,再加一列数字如下所示:在这里插入图片描述
sort -n haha 仅仅对分隔符前的数字进行排序
在这里插入图片描述
sort -t(指定分隔符) : -k(指定列) 2 -n haha
在这里插入图片描述

5. uniq命令(对重复的字符做相应的处理)
uniq -u显示唯一的行
uniq -d显示重复的行
uniq -c每行显示一次并统计重复次数

实验步骤如下:

vim haha 进入文件删除一列和分隔符,如下所示:
在这里插入图片描述
sort n haha | uniq -c 每个数字只显示一次,并且显示出现的次数
在这里插入图片描述
sort n haha | uniq -d 显示重复的行并且进行排序
在这里插入图片描述
sort n haha | uniq -u 显示唯一的行并且排序
在这里插入图片描述

6. &&(条件为真)和||(条件为假)命令
  &&命令:用来执行条件成立后执行的命令
  ||命令: 用来执行条件不成立后执行的命令

实验步骤如下:

ping -c1 -w1 172.25.254.12(真机,肯定通) && echo up
ping -c1 -w1 $1 &> /dev/null && echo yes || echo no如果成立就是yes,如果不成立就是no
在这里插入图片描述
注意:-c表示ping的次数,-w表示ping的等待时间

7. test命令(用来检测某个条件是否成立)
  test命令(=和 == 均是相等的意思,与c语言不一样,c语言中 = 是赋值的意思,==是相等的意思)
  test 命令 和 [ ] 等同,功能一样
  test "$A" == "$B" 等同 [ "$A" == "$B" ]
  [ "$A" = "$B" ]       相等 
  [ "$A" != "$B" ]      不相等 
  [ "$A" -eq "$B" ]     等于
  [ "$A" -ne "$B" ]     不等于
  [ "$A" -le "$B" ]     小于等于
  [ "$A" -lt "$B" ]     小于
  ["$A" -ge "$B" ]      大于等于
  ["$A" -gt "$B" ]      大于
  ["$A" -ne "$B" -a "$A" -gt "$B" ]    与条件(必须条件都满足才成立)
  ["$A" -ne "$B" -o "$A" -gt "$B" ]    或条件(至少有一个条件满足才成立)
  [-z "$A" ]         判断是否为空,空为真,非空为假
  [-n "$A" ]         和条件相反就是真,非空为真,空为假 
  ["file1" -ef "file2" ]      判断前后两个文件是否互相为硬链接 
  ["file1" -nt "file2" ]      判断前面的硬链接是否与新 
  ["file1" -ot "file2" ]      判断前面的硬链接是否旧 
  [-e "file" ]                判断文件是否存在
  [-f "file" ]                判断文件是否为普通文件
  [-L "file" ]                是否为软链接 
  [-S "file" ]                判断是否为套接字
  [-b "file" ]                判断是否为块设备
  [-d "file" ]                判断是否为目录
  [-c "file" ]                判断是否为字符设备

实验步骤如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  cd /mnt
  ls
  ln /mnt/haha  /mnt/feng
  [ "haha"  -ef  "feng" ] && echo yes || echo no

在这里插入图片描述

  [ "/mnt/westos" -nt "/mnt/passwd" ]  &&  echo yes || echo no
  [ "/mnt/westos" -ot "/mnt/passwd" ]  &&  echo yes || echo no

在这里插入图片描述

  [  -e "/mnt" ] && echo yes || echo no
  [  -e "/mnt/linux" ] && echo yes || echo no
  [  -f "/mnt/" ] && echo yes || echo no
  [  -f "/mnt/haha" ] && echo yes || echo no

在这里插入图片描述

  ln -s ggg hhh
  [  -L "hhh" ]  &&  echo yes || echo no

在这里插入图片描述

  yum install mariadb-server -y 
  systemctl start mariadb
  ls -l /var/lib/mysql/mysql.sock
  [ -S "/var/lib/mysql/mysql.sock" ] && echo yes || echo no 

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  [ -b "/dev/vda" ] && echo yes || echo no
  [ -d "/dev/vda" ] && echo yes || echo no
  [ -d "/dev/" ] && echo yes || echo no
  [ -c "/dev/pts/0" ] && echo yes || echo no

在这里插入图片描述

8. tr命令(大小写转换)
  vim test.sh
      echo $1 | tr 'a-z' 'A-Z'
  sh test hello
  vim test.sh
      echo $1 | tr 'A-Z' 'a-z'
  sh test.sh LOVE

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_42566251

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值