目录

  • 一. 简介
  • 二. 常见用法
    • 2.1 输出重定向
    • 2.2 错误重定向
    • 2.3 同时重定向标准输出 + 错误
    • 2.4 输入重定向
    • 2.5 特殊设备
  • 三. 这样设计的好处
    • 3.1 区分正常信息和错误信息
    • 3.2 方便调用方脚本处理
    • 3.3 与管道结合时更清晰
  • 四. 案例
    • 4.1 if判断
    • 4.2 ls查询


一. 简介

⏹在 Linux/Unix 中,一切都是文件(文件、目录、设备、管道、网络套接字等)。
当进程打开一个文件(或设备、socket 等),内核会返回一个 整数编号 来代表它,这个编号就是 FD
File Descriptor(文件描述符)的简写。

进程之后对这个文件的所有操作(读、写、关闭等)都是通过FD文件描述符来完成的。

FD名称说明默认指向
0stdin标准输入键盘
1stdout标准输出终端屏幕
2stderr标准错误终端屏幕

二. 常见用法

2.1 输出重定向

写法含义
command > file标准输出写入文件,覆盖
command >> file标准输出追加到文件
command 1> file等同于 > file,指定 stdout

2.2 错误重定向

写法含义
command 2> file标准错误写入文件
command 2>> file标准错误追加到文件
command 2>&1stderr 重定向到 stdout 的位置

2.3 同时重定向标准输出 + 错误

写法含义
command > file 2>&1stdout 和 stderr 都写入 file
command &> fileBash专用简写,stdout+stderr 一起写入 file
command &>> filestdout+stderr 一起追加到 file

2.4 输入重定向

写法含义
command < file把文件作为标准输入
command 0< file等同于 < file

2.5 特殊设备

写法含义
>/dev/null丢弃 stdout
2>/dev/null丢弃 stderr
&>/dev/null丢弃 stdout + stderr(Bash常用,不兼容sh)
💥>/dev/null 2>&1丢弃 stdout + stderr(兼容所有shell)

三. 这样设计的好处

3.1 区分正常信息和错误信息

  • stdout 通常表示程序的正常结果(比如命令执行的输出)。
  • stderr 用来提示警告、错误、用户输入异常等情况。
echo "正常结果"      # 发到 stdout
echo "出错了!" >&2  # 发到 stderr

3.2 方便调用方脚本处理

  • 上层脚本或调用者可以分别捕获 stdout 和 stderr。
./myscript.sh >output.log 2>error.log

3.3 与管道结合时更清晰

  • 管道| 只会传递 stdoutstderr 会被分开。
  • 如果 command1 里错误信息走 stderr,它就不会影响后面的数据处理逻辑。
command1 | command2

四. 案例

4.1 if判断

⏹判断指定的环境变量是否存在

  • >/dev/null 2>&1:用于将printenv USERNAME的标准输出和错误全部丢弃
# 兼容所有shell的写法
if printenv USERNAME >/dev/null 2>&1; thenecho "环境变量 USERNAME 存在"
elseecho "环境变量 USERNAME 不存在"
fi# bash专用的写法
if printenv USERNAME &>/dev/null; thenecho "环境变量 USERNAME 存在"
elseecho "环境变量 USERNAME 不存在"
fi

⏹判断指定的命令是否存在

if ! command -v keytool >/dev/null 2>&1; thenecho "【keytool】命令并没有被安装, 请确认!"exit 1
fi

4.2 ls查询

  • 有2个文件夹,其中0915的文件夹只有root用户才能读取其中的文件
  • 直接ls -l 09*查看时,会提示权限不足
  • 2>/dev/null将标准错误丢弃之后,屏幕上不会显示错误提示
apluser@FengYeHong-HP:work$ ls -ld 09*
drwx------ 2 root    root    4096 Sep 15 18:58 0915
drwxr-xr-x 2 apluser apluser 4096 Sep 15 19:00 0915_01
apluser@FengYeHong-HP:work$
apluser@FengYeHong-HP:work$ ls -l 09*
ls: cannot open directory '0915': Permission denied
0915_01:
total 0
apluser@FengYeHong-HP:work$
apluser@FengYeHong-HP:work$ ls -l 09* 2>/dev/null
0915_01:
total 0
  • ls 09* >out.txt 2>err.txt:stdout 到 out.txt,stderr 到 err.txt
apluser@FengYeHong-HP:work$ ls 09*
ls: cannot open directory '0915': Permission denied
0915_01:
apluser@FengYeHong-HP:work$
apluser@FengYeHong-HP:work$ ls 09* >out.txt 2>err.txt
apluser@FengYeHong-HP:work$
apluser@FengYeHong-HP:work$ cat out.txt
0915_01:
apluser@FengYeHong-HP:work$
apluser@FengYeHong-HP:work$ cat err.txt
ls: cannot open directory '0915': Permission denied
  • ls 09* >all_info.txt 2>&1:stdout 和 stderr 都输出到 all.txt
apluser@FengYeHong-HP:work$ ls 09* >all_info.txt 2>&1
apluser@FengYeHong-HP:work$
apluser@FengYeHong-HP:work$ cat all_info.txt
ls: cannot open directory '0915': Permission denied
0915_01:

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

零基础新手小白快速了解掌握服务集群与自动化运维(二)Linux Journalctl命令、Journalctl日志持久化存储

Linux提供了一个强大的日志系统&#xff0c;它可以跟踪和记录系统的各种活动。在这个系统中&#xff0c;journalctl是一个非常重要的工具&#xff0c;用于查询和操作由systemd进程管理的日志。 本文将深入探讨journalctl命令&#xff0c;介绍其基本使用、高级选项及示例等内容…

【学习】【js】栈数据结构

栈 栈是一种遵从后进先出&#xff08;LIFO&#xff09;原则的有序集合。新添加或待删除的元素都保存在栈的同一端&#xff0c;称作栈顶&#xff0c;另一端就叫栈底。在栈里&#xff0c;新元素都靠近栈顶&#xff0c;旧元素都接近栈底。 基于数组的栈 时间复杂度O(n),占用较多的…

【Linux】基本指令 · 下

alias 指令起别名为什么 ls -l 指令等价于 ll 指令呢&#xff1f;指令就是可执行程序&#xff0c;和我们自己写的代码编译好的程序&#xff0c;没有本质区别&#xff01; 指令在系统的某一个位置存在&#xff01; 执行指令前&#xff0c;现在系统中查找对应的指令指令在根目录下…

计算机视觉(opencv)实战二十二——指纹图像中提取特征点,计算两两指纹之间的相似度

指纹识别原理与代码实现详解指纹识别是一种常见的生物特征识别技术&#xff0c;广泛应用于门禁系统、手机解锁、考勤打卡、身份认证等场景。其核心思想是&#xff1a;从指纹图像中提取特征点&#xff0c;计算两幅指纹之间的相似度&#xff0c;并根据相似度判断是否为同一人。本…

Linux基础之部署mysql数据库

文章目录一、环境准备二、源码解压与依赖三、CMake 编译配置四、配置 MySQL权限管理修改配置文件 /etc/my.cnf五、环境变量设置六、数据库初始化七、服务管理八、账号密码管理一、环境准备 yum -y install gcc gcc-c ncurses ncurses-devel bison cmakegcc / gcc-c&#xff1a…

代码审计-PHP专题原生开发文件上传删除包含文件操作监控Zend源码解密1day分析

快速分析脆弱&#xff1a;1、看文件路径2、看代码里面的变量&#xff08;可控&#xff09;3、看变量前后的过滤文件安全挖掘点&#xff1a;1、脚本文件名2、应用功能点3、操作关键字文件上传&#xff0c;文件下载(读取)&#xff0c;文件包含&#xff0c;文件删除等emlog-文件上…

零基础搭建 Hexo 博客:从本地到 GitHub Pages 全流程指南

零基础搭建 Hexo 博客&#xff1a;从本地到 GitHub Pages 全流程指南 Hexo 是一个快速、简洁且高效的博客框架&#xff0c;支持使用 Markdown 来编写文章&#xff0c;并能快速生成静态网页&#xff0c;非常适合想要搭建个人博客的同学。本文将带你从零开始&#xff0c;本地搭建…

Git 简介

Git 是目前全球最流行的分布式版本控制系统&#xff08;Distributed Version Control System, DVCS&#xff09;&#xff0c;核心作用是追踪文件修改历史、支持多人协同开发&#xff0c;并能高效管理代码&#xff08;或任何文本类文件&#xff09;的版本迭代。它由 Linux 内核创…

后端Web实战-Spring原理

目录 1. 配置优先级 2. Bean管理 2.1 获取Bean 2.2 Bean作用域 面试题&#xff1a;Lazy是如何解决循环依赖问题的&#xff1f; 2.3 第三方Bean 3. SpringBoot原理 3.1 起步依赖 3.2 自动配置 3.2.1 概述 3.2.2 自动配置的原理及常见方案 3.2.2.1 概述 3.2.2.2 方案…

在 Qoder 等 AI 二创 IDE 里用 VS Code Remote-SSH 的“曲线连接”实战

目标&#xff1a;让你在 Qoder 等在线/AI 辅助 IDE 中&#xff0c;也能像本地 VS Code 一样通过 Remote-SSH 连接到自己的远程服务器进行开发。 前提&#xff1a;只在你拥有或被授权的服务器上使用&#xff0c;遵守所用平台的条款与限制。两句话说清楚 先用本地 VS Code 正常连…

python发送请求SSL验证设置

这个错误通常是由于SSL/TLS握手失败导致的&#xff0c;可能原因包括证书验证问题、不兼容的加密协议或网络连接中断。以下是几种解决方案&#xff0c;按推荐顺序排列&#xff1a; 方案一&#xff1a;临时禁用SSL验证&#xff08;快速测试&#xff09; response requests.get(u…

工厂自动化正从 “人工堆叠” 向 “设备替代” 快速转变

​人工进行零件排列&#xff0c;虽在操作灵活性上有一定表现&#xff0c;但实际应用中存在明显短板&#xff0c;对工厂自动化转型形成制约。从成本来看&#xff0c;一名工人日均工资约数百元&#xff0c;若需 5-6 名工人协同作业&#xff0c;月均人力成本易突破万元&#xff0c…

中标麒麟7.4部署gitlab-runner

1. 部署环境 本次部署环境完全断网。需要离线下载gitlab-runner及其依赖。 本次部署环境为中标麒麟7.4。目前机器上部署了gitlab&#xff0c;安装了maven。 2. 部署步骤 2.1 在外部下载好依赖 我首先在腾讯云上布置了一个centos7.9的虚拟机&#xff0c;没有安装任何东西。 …

在 IDEA 2024 创建 Vue 项目(保姆级)

目录 一、 前后端分离 1. 简介 2. 实现前后端分离的常用前端框架 3. 前后端分离和动静分离 3.1 前后端分离: 3.2 动静分离: 二、 Vue.js概述 1. 简介 2. SPA介绍 2.1 优点 2.2 缺点 3. MVVM介绍 3.1 示例 三、 名词解释 1. Node.js 2. npm 3. webpack 4. Vue…

Coze源码分析-资源库-创建知识库-后端源码-应用/领域/数据访问

3. 应用服务层 3.1 知识库应用服务 文件位置: backend/application/knowledge/knowledge.go func (k *KnowledgeApplicationService) CreateKnowledge(ctx context.Context, req *dataset.CreateDatasetRequest) (*dataset.CreateDatasetResponse, error) {// 1. 转换文档类型d…

Shopify指纹手机矩阵:无限扩店,横扫FB/GG广告封号风险

一、 为什么需要为Shopify使用指纹手机&#xff1f;虽然Shopify不会因为你多开店而封号&#xff0c;但以下场景需要隔离环境&#xff1a;规避广告平台关联&#xff1a;这是最核心的用途。你会用Facebook、Google、TikTok等广告平台为你的Shopify店铺引流。这些广告平台严格禁止…

【Python】家庭用电数据分析Prophet预测

数据集&#xff1a;Household Electricity Consumption | Kaggle 目录 数据集简介 探索性分析 Prophet预测 Prophet模型 Prophet理念 Prophet优点 数据集简介 240000-household-electricity-consumption-records数据集包含了一个家庭6个月的用电数据&#xff0c;收集于2…

信息系统运维管理

运行维护服务指的是采用信息技术手段及方法&#xff0c;依据客户提出的服务要求&#xff0c;为其在使用信息系统过程中提出的需求提供的综合服务是信息技术服务中的一种主要类型。运行维护服务对象是指信息系统工程建设项目交付的内容&#xff0c;包括机房基础设施&#xff0c;…

系统编程完结整理以及补充

Shell&#xff08;命令与脚本语法&#xff09; 系统编程&#xff08;一&#xff09;shell的学习-CSDN博客 功能/概念语法/关键字参数/用法说明返回值/效果难易点注意事项示例/实验提示定义函数func_name() { commands; }无参数或通过 $1 $2 ... 传参函数执行参数传递、全局变…

第十四届蓝桥杯青少组C++选拔赛[2022.12.18]第二部分编程题(2、字符翻转)

参考程序&#xff1a;#include <bits/stdc.h> using namespace std;int main() {string s;cin >> s; // 读取输入字符串&#xff0c;若无输入则结束for (int i 0; i < (int)s.size(); i) {// i 从 0 开始&#xff0c;位置是 i1&#xff1b;如果 i 是奇数&#…