重定向 | 软硬链接

文章目录

        • 1.重定向
        • 2.软硬链接

1.重定向

C语言中默认会打开三个流:标准输入、标准输出和标准错误。而在Linux中分别对应的文件描述符是0,1,2,而对应的设备是:显示器、键盘、显示器。如果使用cat命令查看一个文本信息默认输出在显示器上,那么可以通过重定向的方式输入到一个文件中。
输出重定向 >: 将输出重定向到指定文件,会覆盖会文件内容。

xiyan@LAPTOP-87PRR6K8:~$ mkdir new
xiyan@LAPTOP-87PRR6K8:~$ cd new
xiyan@LAPTOP-87PRR6K8:~/new$ vim hello.txt
xiyan@LAPTOP-87PRR6K8:~/new$ cat hello.txt
hello 1
hello 2
xiyan@LAPTOP-87PRR6K8:~/new$ cat hello.txt > hello
xiyan@LAPTOP-87PRR6K8:~/new$ ls
hello  hello.txt
xiyan@LAPTOP-87PRR6K8:~/new$ echo hello world > hello # 会覆盖
xiyan@LAPTOP-87PRR6K8:~/new$ cat hello
hello world

追加重定向 >>: 将输出追加到指定文件的末尾,不覆盖已有内容

xiyan@LAPTOP-87PRR6K8:~/new$ echo hello world >> hello
xiyan@LAPTOP-87PRR6K8:~/new$ echo hello world >> hello
xiyan@LAPTOP-87PRR6K8:~/new$ cat hello
hello world
hello world
hello world

输入重定向 <: 可以从文件中输入内容,而不是从键盘读取。

xiyan@LAPTOP-87PRR6K8:~/new$ cat < hello
hello world
hello world
hello world

另外可以将一些错误的信息,输出到指定的文件中

xiyan@LAPTOP-87PRR6K8:~/new$ ls 1> info.txt - 命令正确输出
xiyan@LAPTOP-87PRR6K8:~/new$ cat info.txt
hello
hello.txt
info.txt
xiyan@LAPTOP-87PRR6K8:~/new$ pa 2> error.txt -错误的信息输出到文件中
xiyan@LAPTOP-87PRR6K8:~/new$ cat error.txt
pa: command not found
xiyan@LAPTOP-87PRR6K8:~/new$ gcc hello.c 2> error.txt - 将编译报错信息重定向到error.txt中
2.软硬链接

Linux中软硬链接都是给文件且别名,而它们本质的区别在于硬链接指向的是同一个inode,inode不能够跨文件系统,所以硬链接是不可用于跨文件系统的。而软件链接有独立的inode,它可以跨文件系统使用。(inode(索引节点)是用于存储文件或目录的元数据的数据结构)
创建硬链接:

xiyan@LAPTOP-87PRR6K8:~$ mkdir ln
xiyan@LAPTOP-87PRR6K8:~$ cd ln
xiyan@LAPTOP-87PRR6K8:~/ln$ pwd
/home/xiyan/ln
xiyan@LAPTOP-87PRR6K8:~/ln$ touch hello.txt
xiyan@LAPTOP-87PRR6K8:~/ln$ echo "hello world1" >> hello.txt
xiyan@LAPTOP-87PRR6K8:~/ln$ echo "hello world2" >> hello.txt
xiyan@LAPTOP-87PRR6K8:~/ln$ ln hello.txt hello.bak
xiyan@LAPTOP-87PRR6K8:~/ln$ echo "hello world3" >> hello.bak
xiyan@LAPTOP-87PRR6K8:~/ln$ cat hello.txt
hello world1
hello world2
hello world3
xiyan@LAPTOP-87PRR6K8:~/ln$ rm hello.txt
xiyan@LAPTOP-87PRR6K8:~/ln$ cat hello.bak
hello world1
hello world2
hello world3

如果为一个文件创建一个硬链接,修改链接文件源文件也跟着修改。而删除源文件,硬链接文件不会受影响,当所有的硬链接都删除文件才会被删除。类似于文件的拷贝。
创建软链接:

xiyan@LAPTOP-87PRR6K8:~/ln$ touch hello.c
xiyan@LAPTOP-87PRR6K8:~/ln$ ln -s hello.c hello.link
xiyan@LAPTOP-87PRR6K8:~/ln$ vim hello.link
xiyan@LAPTOP-87PRR6K8:~/ln$ cat hello.c
xiyan@LAPTOP-87PRR6K8:~/ln$ unlink hello.link

软链接可以链接到目录,软链接如果指向的源文件被删除,它会变成一个“死链接”(dangling link)。它相当于Windows中的快捷方式。
rm unlink都是删除文件,当引用计数变为0,没有文件名和inode关联,系统认为用户不管了这个文件了会删除。unlink有对应的系统调用接口。
注意一个细节:
文件的引用计数是1,而目录的引用计数是2。为什么呢? 文件就是代表一个文件名就对应一个inode而目录中的 .和目录名都指向同一个inode(76963)

xiyan@LAPTOP-87PRR6K8:~/ln$ touch test.txt
xiyan@LAPTOP-87PRR6K8:~/ln$ mkdir mydir
xiyan@LAPTOP-87PRR6K8:~/ln$ ll -i
76963 drwxr-xr-x  2 xiyan xiyan 4096 Nov  8 21:56 mydir/
76862 -rw-r--r--  1 xiyan xiyan    0 Nov  8 21:56 test.txt
xiyan@LAPTOP-87PRR6K8:~/ln$ cd mydir/
xiyan@LAPTOP-87PRR6K8:~/ln/mydir$ ll -i
76963 drwxr-xr-x 2 xiyan xiyan 4096 Nov  8 21:56 ./
76887 drwxr-xr-x 3 xiyan xiyan 4096 Nov  8 21:56 ../
xiyan@LAPTOP-87PRR6K8:~/ln$ cd mydir/
xiyan@LAPTOP-87PRR6K8:~/ln/mydir$ cd ..
xiyan@LAPTOP-87PRR6K8:~/ln$ ln test.txt test.bak
xiyan@LAPTOP-87PRR6K8:~/ln$ ll -i
76862 -rw-r--r--  2 xiyan xiyan    0 Nov  8 22:05 test.bak
76862 -rw-r--r--  2 xiyan xiyan    0 Nov  8 22:05 test.txt
xiyan@LAPTOP-87PRR6K8:~/ln$ ln -s test.txt test.link
xiyan@LAPTOP-87PRR6K8:~/ln$ ll -i
76862 -rw-r--r--  2 xiyan xiyan    0 Nov  8 22:05 test.bak
76966 lrwxrwxrwx  1 xiyan xiyan    8 Nov  8 22:10 test.link -> test.txt
76862 -rw-r--r--  2 xiyan xiyan    0 Nov  8 22:05 test.txt

硬链接的引用计数会生是因为多个硬链接共享同一个inode。而软链接不会产生引用计数是因为独有的inode。

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

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

相关文章

云轴科技ZStack助力新远科技开启化工行业智能制造新篇章

新远科技基于云轴科技ZStack Cube超融合和ZStack Zaku容器云平台打造了灵活高效的IT基础设施&#xff0c;实现了IaaS和PaaS层的全面覆盖&#xff0c;优化了资源利用率&#xff0c;降低了硬件成本和运维复杂性&#xff0c;同时强化了数据安全和业务连续性。 化工行业的数字化先…

软件测试PO模式

V1&#xff1a;不使用任何设计模式和单元测试框架 V2&#xff1a;使用UnitTest管理用例 V3&#xff1a;使用方法封装的思想&#xff0c;对代码进行优化 V4&#xff1a;采用PO模式的分层思想对代码进行拆分 V5&#xff1a;对PO分层之后的代码继续优化 V6&#xff1a;PO模式深入封…

网页版五子棋——匹配模块(客户端开发)

前一篇文章&#xff1a;网页版五子棋——用户模块&#xff08;客户端开发&#xff09;-CSDN博客 目录 前言 一、前后端交互接口设计 二、游戏大厅页面 1.页面代码编写 2.前后端交互代码编写 3.测试获取用户信息功能 结尾 前言 前面文章介绍完了五子棋项目用户模块的代码…

Spring设计模式

设计模式 是一种软件开发中的解决方案&#xff0c;设计原则。目的是使代码具有扩展性&#xff0c;可维护性&#xff0c;可读性&#xff0c;如&#xff1a; 单例模式&#xff08;Singleton Pattern&#xff09; Spring IoC 容器默认会将 Bean 创建为单例&#xff0c;保证一个类…

【设计模式】结构型模式(一):适配器模式、装饰器模式

结构型模式&#xff08;一&#xff09;&#xff1a;适配器模式、装饰器模式 1.适配器模式&#xff08;Adapter&#xff09;2.装饰器模式&#xff08;Decorator&#xff09;2.1 主要特点2.2 组成部分2.3 示例代码2.3.1 Component 组件2.3.2 ConcreteComponent 具体组件2.3.3 Dec…

Go Energy 跨平台(GUI)应用编译和安装包制作

构建打包 energy cli 平台介绍描述windowNSIS安装包制作工具可通过 energy cli 安装linuxdpkg 命令系统自带macosenergy 仅生成 xxx.app系统自带 安装包制作 config/energy_[os].json是初始化应用时自动生成的应用配置文件&#xff0c;在编译和制作应用安装包时使用 Windows…

【Linux】进程信号全攻略(二)

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;Linux 目录 一&#xff1a;&#x1f525; 再谈信号的捕捉 &#x1f98b; 关于信号捕捉的细节部分&#xff08;sigaction函数&#xff09; 二&#xff1a;&#x1f525; 穿插话题 - 操作系统是怎么运…

鸿蒙的进击之路

1. 题记&#xff1a; 为什么要写鸿蒙&#xff0c;因为她是华为的&#xff0c;为什么是华为就要写&#xff0c;因为华为背负了国人太多太多的包袱&#xff0c;或点赞或抨击。 我是强烈支持华为的&#xff0c;但我会客观公正地去评价华为的产品&#xff0c;就比如这篇博文&#…

Swagger的介绍和使用方式+常用注解

介绍: 使用Swagger你只需要按照它的规范去定义接口及接口相关的信息&#xff0c;就可以做到生成接口文档&#xff0c;以及在线接口调试页面.简单来说就是我们只需要知道使用Swagger可以帮助我们后端生成接口文档 Swagger官网:https://swagger.io/ 因为单独使用Swagger会有些…

FFmpeg 4.3 音视频-多路H265监控录放C++开发十三:将AVFrame转换成AVPacket。视频编码,AVPacket 重要函数,结构体成员学习

前提&#xff1a; 从前面的学习我们知道 AVFrame中是最原始的 视频数据&#xff0c;这一节开始我们需要将这个最原始的视频数据 压缩成 AVPacket数据&#xff0c; 我们前面&#xff0c;将YUV数据或者 RGBA 数据装进入了 AVFrame里面&#xff0c;并且在SDL中显示。 也就是说&…

QinQ VLAN技术

QinQ VLAN技术的主要作用包括扩展VLAN数量、实现私网VLAN透传、提供二层隔离和多租户环境等。以下是对这些作用的详细介绍&#xff1a; 扩展VLAN数量 解决VLAN ID不足问题&#xff1a;QinQ技术通过在原有的802.1Q标签基础上再增加一层802.1Q标签&#xff0c;从而将VLAN数量从40…

【机器学习】24. 聚类-层次式 Hierarchical Clustering

1. 优势和缺点 优点&#xff1a; 无需提前指定集群的数量 通过对树状图进行不同层次的切割&#xff0c;可以得到所需数量的簇。树状图提供了一个有用的可视化-集群过程的可解释的描述树状图可能揭示一个有意义的分类 缺点&#xff1a; 计算复杂度较大, 限制了其在大规模数据…

分析报告、调研报告、工作方案等的提示词

什么是提示词&#xff1f; 提示词的英文是Prompt&#xff0c;是你与人工智能&#xff08;AI&#xff09;进行交流的方式。简单来说&#xff0c;提示词就是你给AI的一段文字或问题&#xff0c;AI根据这段文字或问题来生成回应或完成任务。 举个例子&#xff1a;假设你在使用一…

Sentinel通过限流对微服务进行保护

目录 雪崩问题 解决雪崩问题的方法&#xff1a; 我们使用sentinel组件实现微服务的保护 一&#xff1a;下载sentinel 二.启动sentinel 三.访问&#xff1a;localhost:8080 默认的账号和密码都是sentinel 微服务整合sentinel 一.导入sentinel依赖 二.在application.yml配…

第三十篇——微分(上):如何从宏观变化了解微观趋势?

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么&#xff1f; 四、总结五、升华 一、背景介绍 微分给我们带来的思维方式的变化&#xff0c;更加符合现在这个时代对于我…

Springboot项目报错记录

SpringBoot测试报错&#xff1a;Unable to find a SpringBootConfiguration, you need to use Context 该测试类所在测试包test下的包名和类路径java下的包名不一致导致的 引发以下报错 java.lang.IllegalStateException: Unable to find a SpringBootConfiguration, you need…

VTK知识学习(3)-显示圆柱

1、添加显示控件 前台界面 <WindowsFormsHost x:Name"windowHost" Grid.Row"1"/> 构造函数中添加。 private RenderWindowControl renderWindowControl new RenderWindowControl();public MainWindow(){InitializeComponent();windowHost.Child …

《FreeRTOS的配置与临界段》

目录 1.FreeRTOS配置的重要性 2.初学者使用FreeRTOSConfig.h 文件 3.“INCLUDE_”开始的宏 4.FreeRTOS 中断配置和临界段 4.1 中断简介 4.2 中断优先级分组定义 4.3优先级设置 4.4 重要的中断屏蔽寄存器 一、PRIMASK 和 FAULTMASK 寄存器 二、BASEPRI 寄存器 4.5 F…

Vue:模板 MVVM

Vue&#xff1a;模板 & MVVM 模板插值语法指令语法 MVVMdefineProperty数据代理 模板 Vue实例绑定一个容器&#xff0c;想要向容器中填入动态的值&#xff0c;就需要使用模板语法。模板语法分为插值语法和指令语法。 插值语法 插值语法很简单&#xff0c;使用{{}}包含一…

极简实现酷炫动效:Flutter隐式动画指南第三篇自定义Flutter隐式动画

目录 前言 一、TweenAnimationBuilder 二、使用TweenAnimationBuilder实现的一些动画效果 1.调整透明度的动画 2.稍微复杂点的组合动画 3.数字跳动的动画效果 前言 上两节博客分别介绍了Flutter中的隐式动画的基础知识以及使用隐式动画实现的一些动画效果。当系统提供的隐…