Linux环境中grep、find、locate、whereis、who、uname、whatis、apropos八大查找命令简明教程

news2024/11/18 17:43:40

我是荔园微风,作为一名在IT界整整25年的老兵,今天来聊聊 Linux环境中grep、find、locate、whereis、who、uname、whatis、apropos八大查找命令简明教程。

首先解释一下里面为什么没有man,说实话我运维系统以后,几乎不用这个命令,各社区论坛好帖子这么多,看看用例就可以学会了,我为什么还要看这么枯燥的man命令显示结果。我还是从实用角度来介绍下面的命令吧。

grep命令

在很多时候,并不需要像cat、more、less命令那样列出文件的全部内容,用户要做的只是找到包含某些信息的一行。这个时候,如果使用 more命令一行一行去找的话,无疑是费时费力的。当文件特别大的时候,这样的做法则完全不可行了。为了在文件中寻找某些信息,可以使用grep命令。

grep [OPTIONS] PATTERN [FILE...]

例如,有一个day文件,内容为7行字符,第一行是星期一的英文单词,第二行是星期二的英文单词,依次类推,为了在文件day中查找包含un的行,可以使用如下命令:

$ grep un day
Sunday

可以看到,grep有两个类型不同的参数。第一个是被搜索的模式(关键词),第二个是所搜索的文件。grep会将文件中出现关键词的行输出。可以指定多个文件来搜索,假设另外有一个weather文件,里面有各种天气的英文单词,每个一行,例如:

$ grep un day weather
day:Sunday
weather: sunny

如果要查找如两个英文单词(中间用空格分隔)这样的关键词,那么必须加单引号以把空格包含进去

$ grep 'struct list' stack.h
struct list {
      struct list *next;
      struct list *top;
typedef struct list list;

严格地说,grep通过“基础正则表达式(basic regular expression)”进行搜索。和grep相关的一个工具是egrep,除了使用“扩展的正则表达式(extended regular expression)”,egrep和 grep完全一样。“扩展正则表达式”能够提供比“基础正则表达式”更完整地表达规范。

find 命令

随着文件增多,使用搜索工具成了顺理成章的事情。find就是这样一个强大的命令,它能够迅速在指定范围内查找到文件。find命令的基本语法如下:

find [OPTION] [path...][expression]

例如,希望在/usr/bin/目录中查找zip命令:

$ find /usr/bin/ -name zip -print
/usr/bin/zip

从这个例子中可以看到,find命令需要一个路径名作为查找范围,在这里是/usr/bin/。find会深入到这个路径的每一个子目录中去寻找,因此如果指定“/”,那么就查找整个文件系统。-name选项指定了文件名,在这里是zip。可以使用通配符来指定文件名,如“find~/ -name *.c-print”将列出用户主目录下所有的c程序文件。-print表示将结果输出到标准输出(在这里也就是电脑屏幕)。注意find命令会打印出文件的绝对路径。

find命令还能够指定文件的类型。在Linux中,包括目录和设备都以文件的形式表现,可以使用-type选项来定位特殊文件类型。例如,在/etc/目录中查找名叫init.d的目录:

$ find /etc/ -name init.d -type d -print
find: /etc/ssl/private: Permission denied
find: /etc/cups/ssl; Permission denied
/etc/init.d

注意:在输出结果中出现了两行Permission denied。这是由于普通用户并没有进入这两个目录的权限,这样find在扫描时将跳过这两个目录。-type选项可以使用的参数如下所示。


参数  含义

b       块设备文件

f        普通文件

c       字符设备文件

p       命名管道

d       目录文件

l        符号链接

还可以通过指定时间来指导 find命令查找文件。-atime n用来查找最后一次使用在n天前的文件,-mtime n则用来查找最后一次修改在n天前的文件。但是在实际使用过程中,很少能准确确定n的大小。在这种情况下,可以用+n表示大于n,用-n表示小于n。例如,在/usr/bin/中查找最近100天内没有使用过的命令(也就是最后一次使用在100天或100天以前的命令)。

$ find /usr/bin/ -type f -atime +100 -print
/usr/bin/pilconvert.py
/usr/bin/espeak-synthesis-driver.bin
/usr/bin/pildriver.py
/usr/bin/pilfont.py
/usr/bin/gnome-power-bugreport.sh
/usr/bin/gnome-power-cmd.sh
/usr/bin/pilprint.py
/usr/bin/pilfile.py

类似地,下面这个命令查找当前目录中,在最近一天内修改过的文件。

$ find . -type f -mtime -1 -print
./text1
./day
./weather

locate命令

尽管find命令已经展现了其强大的搜索能力,但对于大批量的搜索而言,还是显得慢了一些,特别是当用户完全不记得自己的文件放在哪里的时候。这时,locate命令会是一个不错的选择。如下:

$ locate *. doc
/fishbox/share/doc/办公文档1.doc
/fishbox/share/doc/办公文档2.doc
/fishbox/share/doc/办公文档3.doc

这些搜索结果几乎是一瞬间就出现了。locate并没有进入子目录搜索,它有一点类似于桌面搜索,通过检索文件名数据库来确定文件的位置。locate命令自动建立整个文件名数据库,不需要用户插手。如果希望立刻生成该数据库文件的最新版本,那么可以使用updatedb命令。运行这个命令需要有root权限,更新整个数据库大概耗时1分钟。

whereis命令

whereis命令主要用于查找程序文件,并提供这个文件的二进制可执行文件、源代码文件和使用手册页存放的位置。例如,查找find命令:

$ whereis find
find: /usr/bin/find /usr/share/man/man1/find.1.gz

可以使用-b选项让whereis命令只查找这个程序的二进制可执行文件。

$ whereis -b find
find: /usr/bin/find

如果whereis无法找到文件,那么将返回一个空字符串。

$ whereis xxx
xxx:

whereis无法找到某个文件的可能原因是,这个文件没有存在于任何 whereis命令搜索的子目录中。whereis命令检索的子目录是固定编写在它的程序中的。这看起来多少有点像是个缺陷,但把搜索限制在固定的子目录如/usr/bin、/usr/sbin和/usr/share/man中可以显著加快文件查找的进度。

who命令

在一台服务器上,同一时间往往会有很多人同时登录。who命令可以查看当前系统中有哪些人登录,以及他们都工作在哪个控制台上。

$ who
quzhou  tty7  2008-09-30  21:12  (:0)
quzhou  pts/0  2008-09-30  21:13  (:1.0)

有些时候,可能会忘记自己是以什么身份登录到系统,特别当需要以特定身份启动某个服务器程序时。这个时候,whoami这个命令会很有用。正如这个命令的名字那样,whoami会回答“我是谁”这个问题。

$ whoami
quzhou

uname命令

另一个常用的命令是uname,用于显示当前系统的版本信息。带-a选项的uname命令会给出当前操作系统的所有有用信息。

$ uname -a
Linux lewis-laptop 2.6.24-19-generic #1 SMP Fri Jul 11 21: 01: 46 UTC 2008x86 64 GNU/Linux

在大部分时候,需要的只是其中的内核版本信息。此时可以使用-r选项。

uname -r
2.6.24-19-generic

作者简介:荔园微风,1981年生,高级工程师,浙大工学硕士,软件工程项目主管,做过程序员、软件设计师、系统架构师,早期的Windows程序员,Visual Studio忠实用户,C/C++使用者,是一位在计算机界学习、拼搏、奋斗了25年的老将,经历了UNIX时代、桌面WIN32时代、Web应用时代、云计算时代、手机安卓时代、大数据时代、ICT时代、AI深度学习时代、智能机器时代,我不知道未来还会有什么时代,只记得这一路走来,充满着艰辛与收获,愿同大家一起走下去,充满希望的走下去。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/706803.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Solr框架 01 Solr框架简介,安装,配置(Analysis,Dataimport)

Solr简介: Solr是一个高性能,基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展,并对查询性能进行了优化,并且提供了一个完善的功能管理界面&am…

2023年6月Web3行业月度发展报告区块链篇 | 陀螺科技会员专享

6月,合规与监管成为本月加密领域的主旋律,在海外,SEC接连起诉币安与Coinbase两大交易平台,并将除BTC、ETH、USD系等的几乎所有加密货币列为证券,引发市场哗然,行情也与之紧密关联,随着做市商缓慢…

threejs使用外部模型

个人博客地址: https://cxx001.gitee.io 前面我们都是用Threejs提供的几何体来创建网格,对于简单几何体(如球体和方块)来说非常有效,但当你想要创建复杂的三维模型时,这不是最好的方法。通常情况下,你可以使用三维建模工具&#…

android实现启动未声明的Activity

实现原理:首先创建一个占位StubActivity,这个Activity必须要添加声明,用来代替目标的Activity,然后在ActivityThread中的Handler回调中替换掉原来的Callback,改为自己的Callback,并在此修改成自己要启动的真…

Appium自动化测试 —— 断言

😏作者简介:博主是一位测试管理者,同时也是一名对外企业兼职讲师。 📡主页地址:【Austin_zhai】 🙆目的与景愿:旨在于能帮助更多的测试行业人员提升软硬技能,分享行业相关最新信息。…

六.函数的定义与调用

目录 一.内置函数: 二.标准库函数 三、自定义函数 1、函数定义 2、函数调用 3、函数参数 值传递: 引用传值: 4、函数返回多个值 5、defer语句 6、init函数: 一.内置函数: Go 语言拥有一些不需要进行导入操…

实现java代码加密,jar\war加密

Springboot 项目代码加密,对你的代码进行加密,市面工具无法实现反编译。加密 Class 文件中每个方法的 Java 字节码,运行时在 JVM实现动态解密。 支持的部署环境Windows/Linux/macOS支持的框架SpringMVC、SpringBoot、Maven场景java加固&…

JAVA-编程基础-08-try-catch性能探究

Lsion <dreamlison163.com>, v1.0.0, 2023.04.01 JAVA-编程基础-08-try-catch性能探究 文章目录 JAVA-编程基础-08-try-catch性能探究try-catch会影响性能吗&#xff1f; try-catch会影响性能吗&#xff1f; 在 for 循环里面搞了个 try-catch&#xff0c;不知道try-cat…

Java的SPI

JavaSPI&#xff0c;全称是ServiceProviderInterface。 它是一种基于接口的动态扩展机制&#xff0c;相当于Java里面提供了一套接口。然后第三方可以实现这个接口来完成功能的扩展和实现。 举个简单的例子。 在Java的SDK里面&#xff0c;提供了一个数据库驱动的接口java.sql.Dr…

ModaHub魔搭社区:向量数据库Milvus性能优化问题(一)

目录 性能优化问题 为什么重启 Milvus 服务端之后&#xff0c;第一次搜索时间非常长&#xff1f; 为什么搜索的速度非常慢&#xff1f; 如何进行性能调优&#xff1f; 应如何设置 IVF 索引的 nlist 和 nprobe 参数&#xff1f; 性能优化问题 为什么重启 Milvus 服务端之后…

如何创建你的第一个西门子200PLC程序

更多关于西门子S7-200PLC内容请查看&#xff1a;西门子200系列PLC学习课程大纲 创建西门子200PLC程序分五步&#xff1a;1.打开Micro/WIN软件&#xff1b;2.新建工程&#xff1b;3.打开程序编辑器&#xff1b;4.输入程序指令&#xff1b;5.保存程序。 我们以下图程序为例讲解西…

Unable to reload Maven project

原因就是IDEA的版本与Maven的版本冲突。 IDEA的日志报错如下&#xff1a; 我当时IDEA是2020版&#xff0c;Maven是3.8.5. 后来把Maven换成3.6.3版本就可以了。

途乐证券|沪深两市震荡整理 机器人概念成市场新热点

周四&#xff0c;A股三大指数维持窄幅震荡整理走势&#xff0c;沪深两市成交额仍维持在9000亿元下方&#xff0c;北向资金净卖出超70亿元。盘面上&#xff0c;减速器、机器人概念持续爆发&#xff0c;煤炭、电力板块领跌。 香港途乐证券有限公司&#xff08;191883.com&#xf…

【每日一题】Leetcode - 剑指 Offer 43. 1~n 整数中 1 出现的次数

题目 Leetcode - 剑指 Offer 43. 1&#xff5e;n 整数中 1 出现的次数 解题思路 分解数字中的每一位&#xff0c;判断记录 结果 class Solution {public int countDigitOne(int n) {int count 0;for (int i 1; i < n; i) {int localI i;while (localI / 10 ! 0) {in…

Leetcode-每日一题【143.重排链表】

题目 给定一个单链表 L 的头节点 head &#xff0c;单链表 L 表示为&#xff1a; 请将其重新排列后变为&#xff1a; 不能只是单纯的改变节点内部的值&#xff0c;而是需要实际的进行节点交换。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5]输出&#xff1a;[1,5,2,…

Ubuntu 23.10 现在由Linux内核6.3提供支持

对于那些希望在Ubuntu上尝试最新的Linux 6.3内核系列的人来说&#xff0c;今天有一个好消息&#xff0c;因为即将发布的Ubuntu 23.10&#xff08;Mantic Minotaur&#xff09;已经重新基于Linux内核6.3。 Ubuntu 23.10的开发工作于4月底开始&#xff0c;基于目前的临时版本Ubu…

光模块封装类型有哪些?光模块“皮肤”大揭秘

什么是光模块&#xff1f; 光模块&#xff08;Optical Transceiver&#xff09;全称为光收发一体模块&#xff0c;它是光通信中的核心器件&#xff0c;能够完成信号的光-电/电-光转换过程&#xff0c;它由光电子器件、功能电路和光接口等部件组成&#xff0c;其中的光电子器件…

【STL】iterator adapters_反向迭代器的实现

放在专栏【C知识总结】&#xff0c;会持续更新&#xff0c;期待支持 本章相关文章&#xff1a; 【STL】容器适配器 【STL】list的模拟实现 【STL】vector的模拟实现 1、反向迭代器介绍 1.1、前言 在前文中我们已经讲过STL中的适配器概念&#xff0c;即在底层将一个类的接口转…

centos7卸载自带jdk(openjdk)

前提&#xff1a;root模式 1、查看自带jdk 首先确定我们有自带的jdk&#xff0c;然后搜索jdk java -version rpm -qa | grep jdk 2、使用如下命令卸载openjdk rpm -e --nodeps [name] 复制带有openjdk的那两行&#xff0c;有的人可能有多行。一条条执行。 最后java -ver…

win10/11环境解决fastboot模式看不到设备

问题描述&#xff1a; C:\Users\good>adb devices * daemon not running. starting it now on port 5037 * * daemon started successfully * List of devices attached ? device C:\Users\good>fastboot devices fastboot devices 不是内部或外部命令&#xff0…