Linux基础指令(四)

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

目录

前言

欢迎各位伙伴来到学习 Linux 指令的 第四天

在上一篇文章 Linux基本指令(三) 当中我们学会了通过学习 echo 指令引入了 Linux 系统中输出重定向、追加重定向、输入重定向等概念的学习同时也重新认识了 cat 指令究竟是在做什么事情。而后我们了解了查阅文本的阅读工具指令 more 和 less并对比了其的异同。然后我们顺势讲到了 head 和 tail 指令让我们在查阅文本信息的时候方便许多的指令最后我们再由 head 指令 和 tail指令顺势的引出了 管道文件 的概念然后给大家讲清楚了什么是管道为什么要有管道管道有什么用处等概念。

再上一篇指令文章的学习中我们开始逐步的接触到了一些系统层面的概念难度肯定有所提升但就是这样的难度我们还有很多要面临

OK废话不多说我们开启今天的学习
今天我们要学习的是……


1. find & which 指令

1.1 find

大家如果去 man 一下 find可以发现find 的选项 特别特别多真的是看不过来一点。
所以呢我这里就讲一个最常见的

find ~ -name 要查找的名字文件或者目录都可以
// 这其中的 ~ 号就是家目录的意思大家可以理解为find就是从家目录开始往下一层一层去搜素你要查找的信息

在这里插入图片描述

1.2 which

which就是 在系统路径中去查找 特定的指令 所在的路径

which + 想要查找的指令

在这里插入图片描述
看到这里我相信很多人肯定有个疑惑
为什么指令还可以查找的
为什么指令还有所谓的路径
最后。。。什么是指令

如果有兴趣了解这些问题的话大家可以看看 如何看待Linux下的各种命令 这篇文章。

如果没有过多的兴趣那么大家只需要记住一句话就可以了那就是Linux下的各种命令 / 指令它的本质都是可执行程序


1.3 alias

不知道有没有细心的铁子注意到这么一个现象那就是为什么 which ls 下面不仅显示了 ls 的路径还显示了其它东西呢 这个 alias 是个什么东西呀

在这里插入图片描述

alias #给命令其别名
alias hh='ls -al'  # 给ls -al 这一条命名起了另外一个名字叫做hh

在这里插入图片描述
给 ls -al 起别名换言之就是起了别名之后 hh 就是 ls -al ls -al 就是 hh运行谁都是一样的效果

大家也不用担心起了别名之后怎么删除这个别名当退出用户账号之后这个别名也就自动失效了。

1.4 where

这个指令是给大家拓展一下的它也是用来查找文件路径的一个指令不严格匹配这个日常用的比较少大家了解一下就好了。

在这里插入图片描述


2、grep 指令

在这里插入图片描述
我们可以看到grep ‘666‘ file把 file 这个文件中有关 ’666‘ 的文本信息过滤出来并且打印在屏幕上

所以什么是 grep ?? —— grep 就是一个行文本过滤工具

不知道大家对 cat 这条指令还有没有印象cat 就是查看目标文件的内容
而与它相反的是 tactac 就是逆置查看目标文件的内容

那假设我此时想要将 file 这个文件中的所有关于’666’的文本信息过滤出来并且逆置显示出来我可以怎么做呢大家可以先思考你会怎么做

首先要过滤其次要逆置本质上这属于两条命令的工作了那涉及到连接多条命令我们是不是可以考虑用刚刚学习到的管道来处理呢

grep '666' file.txt  | tac

在这里插入图片描述
我们还可以在上面的基础上再提取前3行的文本信息然后输出重定向到一个文件当中

grep '666' file.txt  | tac | head -3 > tmp.txt

在这里插入图片描述
类似这种玩法还有很多这里就不一一给大家展示了有兴趣的可以自己下来去尝试组合一下运用上面所学习到的 head、tail、或者是输出重定向等等指令灵活运用。

其次 grep还可以带 -n 行号进行过滤显示这里的行号表示的是该文本信息在文件中对应的是第几行的意思。

grep -n ‘666’ file.txt

在这里插入图片描述

我们刚刚讲 grep 的时候它的作用是把包含 666 的行给我过滤显示出来
那么加上 -v之后它的意思就变成了把 包含 666 的行给我去掉我不要了我只要不包含 666 的行文本

grep -v '666' file.txt   

演示案例我换了一个方便观察的文本进行演示。带上 -v 之后包含 main 的那一行文本就被过滤出去了。
在这里插入图片描述

同样的 -v 的同时也可以带上行号显示

grep -vn 'main' file.txt 

在这里插入图片描述

可能有人要问了那… grep 还能带其他的选项吗 —— 答案是能
但我们先来看一组现象

在这里插入图片描述

我们可以看到hello 文件里的printf 有纯大写的也有纯小写的还有大小写混合的
grep ’printf‘ hello 之后我们可以看到显示出来的是纯小写的 printf也就是说grep它是一种绝对匹配

有人又要问了什么是绝对匹配 —— 绝对匹配就是 严格区分大小写

那问题来了那能不能让 grep 不区分 大小写进行过滤啊 —— 答案是能

grep -i  	# 忽略大小写的不同所以大小写视为相同

在这里插入图片描述

最终的结果看-i 确实可以忽略大小写的不同只要是包含 printf 这几个字母的行文本都被过滤显示了出来


3、xargs 指令

虽然说这个指令可能不是很常见但是我们还是有必要了解一下它是干什么的

首先xargs它是参数的意思

然后我们先来看看 echo 的一些操作

echo ”-l -a -i“ 	//那么-l -a -i 就会显示在屏幕上
echo “-l -a -i“ | wc -l		//就会统计管道文件中数据的行数

我们都知道 ls 这个命令有很多的选项。
那假如我此刻我想要 把 echo ”-l -a -i“ 输出的内容通过管道交给 ls我应该怎么操作呢

在这里插入图片描述
我们可以看到如果直接就将其交给管道是行不通的它并没有把 -l -a -i 等选项带给 lsls 以默认的方式执行了。

这又是为什么呢

echo ”-l -a -i“ 输出的内容交给管道再给到 ls 的话那么也相当于ls 需要从管道当中读取 " -l -a -i " 这些数据可是 ls 它会不会读取呢 —— 它不会

但是 ls 它有命令行参数呀那我就猜测能不能把 ehco 通过管道传递给 ls 的数据 转化为 命令行参数交给 ls这样ls不就可以相当于 带上了 -l -a -i 这些选项了吗

等等我们刚刚不是才说了xargs它是参数的意思的吗

于是我就想着那我能不能给它带上然后 ls 就可以 将 ehco 传递给管道的数据进而转化为 自己的命令行参数以此达到 ls -l -a -i 的效果呢

echo "-l -a -i" | xargs ls

在这里插入图片描述
很好我非常满意实操结果跟我们的预期一模一样xargs 它就是这么用的

所以我们回头看 xargs是干嘛用的呢 ==》
目前的层次我们可以简单理解为xargs 就是将管道输出的数据 转化为 命令行参数然后再带给后面某个程序去使用

最后可能有人要疑惑啦说通过你刚刚将的案例那是不是只能是 通过 echo 将数据传递给管道然后才能使用 xargs这样的工具吗
==》
答案肯定不是的不管是通过什么传递给管道的数据都可以使用

在这里插入图片描述
就像上边的我用echo 将数据 输出重定向到了一个文件当中然后我再通过 cat将 tmp 文件中的数据输出到管道中最后再由 xargs 将管道的输出数据 转化为命令行参数带给 ls也是一样的效果的

而这一组案例中我可不是通过 echo 将数据输出给管道的

OKgrep 这条指令我们就讲到这里


结语

OK本章的基本指令就讲到这。如果能给你带来一定的帮助或者是收获我很开心。
同时觉得对你有帮助的伙伴们也可以 点赞 + 收藏⭐️ + 关注➕ 支持一下
感谢各位观看

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: linux