rm / -rf指令的作用是?

news2024/11/29 4:34:08

学习Linux 指令,它是操作系统的前端,学好这部分内容一方面可以帮助你应对工作场景,另一方面可以让你在学习操作系统底层知识前,对 Linux 有一个大概的了解。
学习 Linux 指令之前,先来说一下什么是 Shell?Shell 把我们输入的指令,传递给操作系统去执行,所以 Shell 是一个命令行的用户界面。
早期程序员没有图形界面用,就用 Shell。而且图形界面制作成本较高,不能实现所有功能,因此今天的程序员依然在用 Shell。你平时还经常会看到一个词叫作bash(Bourne Again Shell),它是用 Shell 组成的程序。这里的 Bourne 是一个人名,Steve Bourne 是 bash 的发明者。
今天学习的所有指令,不是写死在操作系统中的,而是一个个程序。比如rm指令,你可以用which指令查看它所在的目录。如下图所示,你会发现rm指令在/usr/bin/rm目录中。
在这里插入图片描述
如上图所示,最前面部分是我的英文名字,@之后Hadoop02是我这台机器的名字。我输入了which rm,然后获得了/usr/bin/rm的结果,最终执行这条指令的是操作系统,连接我和操作系统的程序就是 Shell。Linux 对文件目录操作的指令就工作在 Shell 上,接下来我们讲讲文件目录操作指令。

Linux 对文件目录的抽象

Linux 对文件进行了一个树状的抽象。/代表根目录,每一节目录也用/分开,所以在上图所展示的/usr/bin/rm中,第一级目录是/根目录,第二级目录是usr目录,第三级是bin目录。最后的rm是一个文件。

路径(path)

像/usr/bin/rm称为可执行文件rm的路径。路径就是一个文件在文件系统中的地址。如果文件系统是树形结构,那么通常一个文件只有一个地址(路径)。目标文件的绝对路径(Absolute path),也叫作完全路径(full path),是从/开始,接下来每一层都是一级子目录,直到定位到目标文件为止。如上图所示的例子中,/usr/bin/rm就是一个绝对路径。

工作目录

为了方便你工作,Shell 还抽象出了工作目录。当用户打开 Shell 的时候,Shell 就会给用户安排一个工作目录。因此也就产生了相对路径。相对路径(Relative path)是以工作目录为基点的路径。比如:
当用户在/usr目录下的时候,rm文件的相对路径就是bin/rm;

  • 如果用户在/usr/bin目录下的时候,rm文件的路径就是./rm或者rm,这里用.代表当前目录;
  • 如果用户在/usr/bin/somedir下,那么rm的相对路径就是…/rm,这里用…代表上一级目录。
  • 我们使用cd(change directory)指令切换工作目录,既可以用绝对路径,也可以用相对路径。 这里我要强调几个注意事项:
  • 输入cd,不带任何参数会切换到用户的家目录,Linux 中通常是/home/{用户名}。以我自己为例,我的家目录是/home/aa;
  • 输入cd .什么都不会发生,因为.代表当前目录;
  • 输入cd…会回退一级目录,因为…代表上级目录。
    利用上面这 3 种能力,你就可以方便的构造相对路径了。
    ·Linux提供了一个指令pwd(Print Working Directory)查看工作目录。
    在这里插入图片描述
    几种常见的文件类型:
    Linux 下的目录也是一种文件;但是文件也不只有目录和可执行文件两种。常见的
    文件类型有以下 7 种:

普通文件(比如一个文本文件);
2.
目录文件(目录也是一个特殊的文件,它用来存储文件清单,比如/也是一个文件);
3.
可执行文件(上面的rm就是一个可执行文件);
4.
管道文件;
5.
Socket 文件;
6.
软链接文件(相当于指向另一个文件所在路径的符号);
7.
硬链接文件(相当于指向另一个文件的指针)。
你如果使用ls -F就可以看到当前目录下的文件和它的类型。比如下面这种图:
1.

  • 结尾的是可执行文件;

= 结尾的是 Socket 文件;
3.
@ 结尾的是软链接;
4.
| 结尾的管道文件;
5.
没有符号结尾的是普通文件;
6.
/ 结尾的是目录。
在这里插入图片描述

设备文件

Socket 是网络插座,是客户端和服务器之间同步数据的接口。其实,Linux 不只把 Socket 抽象成了文件,设备基本也都被抽象成了文件。因为设备需要不断和操作系统交换数据。而交换方式只有两种——读和写。所以设备是可以抽象成文件的,因为文件也支持这两种操作。
Linux 把所有的设备都抽象成了文件,比如说打印机、USB、显卡等。这让整体的系统设计变得高度统一。至此,我们了解了 Linux 对文件目录的抽象,接下来我们看看具体的增删改查指令。

文件的增删改查

增加

创建一个普通文件的方法有很多,最常见的有touch指令。比如下面我们创建了一个 a.txt 文
件。
在这里插入图片描述
touch指令本来是用来更改文件的时间戳的,但是如果文件不存在touch也会帮助创建一个空文件。如果你拿到一个指令不知道该怎么用,比如touch,你可以用man touch去获得帮助。man意思是 manual,就是说明书的意思,这里指的是系统的手册。如果你不知道man是什么,也可以使用man man。下图是使用man man的结果:
在这里插入图片描述
另外如果我们需要增加一个目录,就需要用到mkdir指令( make directory),比如我们创建一个hello目录,如下图所示:
在这里插入图片描述
创建之后我们可以用ls指令看到这个文件,ls是 list 的缩写。下面是指令 ‘ls’ 的执行结果。
在这里插入图片描述
如果想看到a.txt更完善的信息,还可以使用ls -l。-l是ls指令的可选参数。下图是ls -l的结果,你可以看到a.txt更详细的描述。
在这里插入图片描述

删除

如果我们想要删除a.txt可以用rm a.txt;如我们要删除hello目录,可以用rm hello。rm是 remove 的缩写。
在这里插入图片描述
但是当我们输入rm aa的时候,会提示hello是一个目录,不可以删除。因此我们需要增加一个可选项,比如-r即 recursive(递归)。目录是一个递归结构,所以需要用递归删除。最后,你会发现rm aa -r删除了hello目录。

修改

如果需要修改一个文件,可以使用nano或者vi编辑器。类似的工具还有很多,但是nano和vi一般是linux自带的。

查阅文件内容

当文件较小时,比如一个配置文件,想要快速浏览这个文件,可以用cat指令。下面 cat 指令帮助我们快速查看/etc/hosts文件。cat指令将文件连接到标准输出流并打印到屏幕上
在这里插入图片描述
标准输出流(Standard Output)也是一种文件,进程可以将要输出的内容写入标准输出流文件,这样就可以在屏幕中打印如果用cat查看大文件,比如一个线上的日志文件,因为动辄有几个 G,控制台打印出所有的内容就要非常久,而且刷屏显示看不到东西。而且如果在线上进行查看大文件的操作,会带来不必要的麻烦:首先因为我们需要把文件拷贝到输入输出流,这需要花费很长时间,这个过程会占用机器资源;其次,本身文件会读取到内存中,这时内存被大量占用,很危险,这可能导致其他应用内存不足。因此我们需要一些不用加载整个文件,就能查看文件内容的指令。

more

more可以帮助我们读取文件,但不需要读取整个文件到内存中。本身more的定位是一个阅读过滤器,比如你在more里除了可以向下翻页,还可以输入一段文本进行搜索。
在这里插入图片描述
如上图所示,我在more查看一个 nginx 日志后,先输入一个/,然后输入192.168看到的结果。more帮我找到了192.168所在的位置,然后又帮我定位到了这个位置。整个过程 more指令只读取我们需要的部分到内存中。

less

less是一个和more功能差不多的工具,打开man能够看到less的介绍上写着自己是more的反义词(opposite of more)。这样你可以看出linux生态其实也是很自由的一个生态,在这里创造工具也可以按照自己的喜好写文档。less支持向上翻页,这个功能more是做不到的。以现在less用得更多一些。

head/tail

head和tail是一组,它们用来读取一个文件的头部 N 行或者尾部 N 行。比如一个线上的大日志文件,当线上出了 bug,服务暂停的时候,我们就可以用tail -n 1000去查看最后的1000 行日志文件,寻找导致服务异常的原因。另一个比较重要的用法是,如果你想看一个实时的nginx日志,可以使用tail -f 文件名,这样你会看到用户的请求不断进来。查一下man,你会发现-f是 follow 的意思,就是文件追加的内容会跟随输出到标准输出流。

grep

有时候你需要查看一个指定ip的nginx日志,或者查看一段时间内的nginx日志。如果不想用less和more进入文件中去查看,就可以用grep命令。Linux 的文件命名风格都很短,所以也影响了很多人,比如之前我看到过一个大牛的程序,变量名从来不超过 5 个字母,而且都有意义。grep 这个词,我们分成三段来看,是 g|re|p。g 就是 global,全局;re 就是 regular expression,正则表达式;p 就是 pattern,模式。所以这个指令的作用是通过正则表达式全局搜索一个文件找到匹配的模式。我觉得这种命名真的很牛,软件命名也是一个世纪难题,grep这个名字不但发音不错,而且很有含义,又避免了名字过长,方便记忆。下面我们举两个例子看看 grep 的用法:
例 1:查找 ip 地址
我们可以通过grep命令定位某个ip地址的用户都做了什么事情,如下图所示:
在这里插入图片描述
例 2:查找时间段的日志
我们可以通过 grep 命令查找某个时间段内用户都做了什么事情。如下图所示,你可以看到在
某个 5 分钟内所有用户的访问情况。

查找文件

用户经常还会有一种诉求,就是查找文件。
之前我们使用过一个which指令,这个指令可以查询一个指令文件所在的位置,比如which
grep会,你会看到grep指令被安装的位置是/usr/bin。但是我们还需要一个更加通用的指
令查找文件,也就是 find 指令。

find

find 指令帮助我们在文件系统中查找文件。 比如我们如果想要查找所有.txt 扩展名的文件,
可以使用find / -iname “*.txt”,-iname这个参数是用来匹配查找的,i 字母代表忽略
大小写,这里也可以用-name替代。输入这条指令,你会看到不断查找文件,如下图所示:
在这里插入图片描述

总结

pwd指令查看工作目录。
cd指令切换工作目录。
which指令查找一个执行文件所在的路径。
ls显示文件信息。
rm删除文件。
touch修改一个文件的时间戳,如果文件不存在会触发创建文件。
vi和nano可以用来编辑文件。 cat查看完成的文件适合小型文件。
moreless查看一个文件但是只读取用户看到的内容到内存,因此消耗资源较少,适 合在服务器上看日志。 headtail可以用来看文件的头和尾。
grep指令搜索文件内容。grep是global regular pattern的组合
find指令全局查找文件。
在这里,我再强调一个指令,即man指令,它是所有指令的手册,所以你一定要多多运用,熟
练掌握。另外,一个指令通常有非常多的参数,但都需要用man指令去仔细研究。
/是文件系统根目录;
rm是删除指令;
-r是 recursive(递归);
-f是 force(强制),遇到只读文件也不提示,直接删除。
所以rm -rf /就是删除整个文件系统上的所有文件,而且不用给用户提示。

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

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

相关文章

使用FFMPEG加载外挂字幕小记

ffmpeg版本: FFMEPEG 4.4 继上一篇简易播放器实现后,优化过程中,加载外挂字幕小记的过程和遇到的坑记录如下: 视频字幕分为三种。 内嵌字幕,字幕与视频图像合二为一,成为视频帧的一部分。 内封字幕&…

Python浪漫520表白代码

目录 前言 表白界面 跳动的爱心 漂浮的爱心 满屏表白代码 前言 520是每年的5月20日,因数字“520”与“我爱你”发音相似而被许多年轻人用作表达爱意的节日。这个节日起源于中国互联网文化,逐渐传递到其他国家和地区。在这一天,情侣们通…

C++:深入理解C++11新特性:Chapter3:左值和右值

Chapter3:左值和右值 1. 将右值绑定到 左值2. 将右值绑定到 常量左值引用3. 将右值绑定到右值引用总结:5. 左值,右值和右值引用6. 引用类型可以引用的值 在C语言中,我们常常会提起左值(lvalue),右值&#x…

数组--part 5--螺旋矩阵(力扣59/54)(剑指offer 29)

文章目录 基本算法思想leetcode 59 螺旋矩阵 IIleetcode 54 螺旋矩阵剑指Offer 29 顺时针打印矩阵 基本算法思想 建议先去把题目看了,再来思考相关的代码。 错误的想法:实际上这种题型并不存在算法,只涉及到模拟,但是模拟难度并…

【51单片机】外部中断

🎊专栏【51单片机】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【Love Story】 🥰大一同学小吉,欢迎并且感谢大家指出我的问题🥰 目录 🍔原理 🍔注意管…

未来的数字签名方案:Dilithium、FALCON 和 SPHINCS+

1. 引言 当前的数字签名方案主要有: RSAECDSAEdDSA:已废弃DSA,将EdDSA纳入FIPS 186。 这些数字签名方案都不可抗量子攻击。为此,需要新的量子强健的签名方案,NIST引入了3种新的PQC数字签名标准化方案: …

软考A计划-真题-分类精讲汇总-第八章(面向对象)

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分享&am…

【CSS基础】

🎉🎉🎉点进来你就是我的人了博主主页:🙈🙈🙈戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔🤺🤺🤺 目录 一、CSS是什么? 语法规范 引入方…

基于matlab使用主动声纳系统进行水下目标检测

一、前言 此示例演示如何模拟具有两个目标的主动单基地声纳方案。声纳系统由各向同性投影仪阵列和单个水听器元件组成。投影仪阵列呈球形。反向散射信号由水听器接收。接收到的信号包括直接和多路径贡献。 二、水下环境 在浅水环境中,声源和目标之间存在多个传播路径…

网络工程师常用命令排行榜,Ping就在这一行

大家好,我是老杨。 如果问你,你在日常工作中用的最频繁的命令是哪个,你下意识的第一反应是什么。 年前,我做了个不完全统计,大概有100多位粉丝参与的问卷调查, 调查每一位网工在解决网络故障时使用最多的…

[PCIE703]FPGA实时处理器-XCKU060+ARM(华为海思视频处理器-HI3531DV200)高性能综合视频图像处理平台设计资料及原理图分享

板卡概述 PCIE703是自主研制的一款基于PCIE总线架构的高性能综合视频图像处理平台,该平台采用Xilinx的高性能Kintex UltraScale系列FPGA加上华为海思的高性能视频处理器来实现。 华为海思的HI3531DV200是一款集成了ARM A53四核处理器性能强大的神经网络引擎&#x…

基于matlab编程的线性规划整数解问题求解

背景: 自己读研期间曾经用matlab做过一些小项目和实验,自己的毕业论文实验仿真也是用的matlab,最近打算更换电脑,在翻阅电脑磁盘的时候找到了一些和matlab相关的代码和文档,简单整理和分享一下。 说明: …

Dubbo——微服务框架(单体式->分布式->微服务)

是什么? Dubbo是阿里巴巴开源的基于Java的高性能RPC(一种远程调用)分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案,它提供了三大核心能力:面向接口的远程…

别让你的云端“瘫痪”——教你如何优化云平台性能测试

目录 引言 目的 测试指标 系统性能指标 资源指标 中间件指标 数据库指标 稳定性指标 批量处理指标 可扩展性指标 可靠性指标 性能测试的过程 测试计划 性能测试项目检测与控制 测试分析 测试设计 测试执行 测试完成 性能分析 性能分析的前提 性能分析的流…

一篇文章让你轻松通过佛科院的电子线路CAD考试——Altium Designer 14原理图设计与PCB设计(叶林朋著)

第一章 考试大纲 通过多次作业练习,我得出了完成一个完整的考试流程: 首先先创建PCB工程,查找一下元件,看一下哪些元件需要我们自己画创建元件集成库,画原理图元件和封装导入所有元件后,按照题目所给的图进…

Springboot源码:自动装配流程解析

前言 前面在写业务框架后,由于项目依赖的Spring IOC,单将该项目install后,在其它项目引入时,会找不到所依赖的Bean。所以利用Springboot的自动转配,在项目启动时加载Bean,并注册到IOC容器中。 Springboot…

node笔记_连接mysql编写js脚本的crud

文章目录 ⭐前言⭐mysql的api依赖库⭐建立数据库连接⭐query执行sql语句💖 create 新增table数据库表💖 insert 插入表数据插入单条数据插入多条数据 💖 select 查询数据💖 delete 删除表数据删除单条数据删除多条数据 ⭐ 结束 ⭐…

prometheus实战之五:飞书通知告警

欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 《prometheus实战》系列链接 prometheus实战之一:用ansible部署prometheus实战之二:使用常见指标prometheus实战之三:告警…

Day968.如何开启一个遗留系统现代化项目? -遗留系统现代化实战

如何开启一个遗留系统现代化项目? Hi,我是阿昌,今天学习记录的是关于如何开启一个遗留系统现代化项目?的内容。那如何启动一个遗留系统现代化项目。 一、项目背景 说来有点唏嘘,国内遗留系统的重灾区,恰恰…

MongoDB概念和操作

一、相关概念 在mongodb中最基本的概念为:文档、集合、数据库 SQL术语/概念MongoDB术语/概念解释/说明databasedatabase数据库tablecollection数据库表/集合rowdocument数据记录行/文档columnfield数据字段/域indexindex索引table joins表连接,MongoDB不支持prima…