Linux运维之管道符、重定向与环境变量

news2024/12/26 20:50:52

  前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 

目录

一、输入输出重定向

二、管道命令符

三、命令行的通配符

四、常用的转义字符

五、重要的环境变量

致谢


一、输入输出重定向

输入重定向是指把文件导入到命令中,而输出重定向则是把原本要输出到屏幕的的数据信息写入到指定文件中。在日常的学习和工作中,输出重定向的频率更高,所以又将输出重定向分为了标准输出重定向错误输出重定向两种不同的技术,以及清空写入追加写入两种模式

  • 标准输入重定向(STDIN,文件描述符为0):默认从键盘输入,可以从其他文件或命令中输入
  • 标准输出重定向(STDOUT,文件描述符为1):默认输出到屏幕
  • 错误输出重定向(STDERR,文件描述符为2):默认输出到屏幕

比如分别查看两个文件的属性信息,一个文件存在,一个不存在。虽然两个文件的操作都会在屏幕上输出一些信息,但这两个操作的差异其实很大:

 [root@linux ~]# touch linuxprobe
 [root@linux ~]# ls -l linuxprobe 
 -rw-r--r-- 1 root root 0 Oct  1 15:13 linuxprobe
 [root@linux ~]# ls -l xxxxxx
 ls: cannot access 'xxxxxx': No such file or directory

第一个的输出信息是该文件的一些相关权限、所有者、所属组、文件大小及修改时间等信息,这也是该命令的标准输出信息。而第二个是该命令的错误输出信息。那么,要想把原本输出到屏幕的数据转而写入到文件当中,就要区别对待这两种输出信息

对于输入重定向来讲,用到的符号及其作用:

符号作用
命令 < 文件将文件作为命令的标准输入
命令 << 分界符从标准输入中读入,直到遇见分界符才停止
命令 < 文件1 > 文件2将文件1作为命令的标准输入并将标准输出到文件2

对于输出重定向来讲,用到的符号及其作用:

符号作用
命令 > 文件将标准输出重定向到一个文件中(清空原有文件的数据
命令 2> 文件将错误输出重定向到一个文件中(清空原有文件的数据)
命令 >> 文件将标准输出重定向到一个文件中(追加到原有内容的后面)
命令 2>> 文件将错误输出重定向到一个文件中(追加到原有内容的后面)
命令 >> 文件 2>&1 或 命令 &>> 文件将标准输出与错误输出共同写入到文件这种(追加到原有内容的后面)

对于重定向中的标准输出模式,可以省略文件描述符1不写,而错误输出模式的文件描述符2是必须要写的

 # 通过标准输出重定向将man bash命令原本要输出到屏幕的信息写入到文件readme.txt中,然后显示readme.txt文件中的内容。
 [root@linux ~]# man bash > readme.txt
 [root@linux ~]# cat readme.txt
 ...

接下来尝试重定向技术中的覆盖写入与追加写入

 # 覆盖写入
 [root@linux ~]# echo "Welcom to LinuxProbe.Com" > readme.txt
 [root@linux ~]# echo "Welcom to LinuxProbe.Com" > readme.txt
 [root@linux ~]# echo "Welcom to LinuxProbe.Com" > readme.txt
 [root@linux ~]# cat readme.txt
 Welcom to LinuxProbe.Com
 ​
 # 追加写入
 [root@linux ~]# echo "Quality Linux learning materials" >> readme.txt
 [root@linux ~]# cat readme.txt
 Welcom to LinuxProbe.Com
 Quality Linux learning materials

虽然都是输出重定向技术,但是命令的标准输出和错误输出还是有区别的。标准输出可以将信息输入到文件中,而非错误的输出重定向依然输出到屏幕上。

 [root@linux ~]# ls -l linuxprobe > /root/stderr.txt
 [root@linux ~]# ls -l linuxprobe 2> /root/stderr.txt
 -rw-r--r-- 1 root root 0 Oct  1 15:13 linuxprobe
 ​
 [root@linux ~]# ls -l xxxxxx > /root/stderr.txt
 ls: cannot access 'xxxxxx': No such file or directory
 [root@linux ~]# ls -l xxxxxx 2> /root/stderr.txt
 [root@linux ~]# cat /root/stderr.txt 
 ls: cannot access 'xxxxxx': No such file or directory

还有一种情况,不区分标准还是错误输出,全部追加到文件中,使用&>>操作符

 [root@linux ~]# ls -l linuxprobe &>> readme.txt
 [root@linux ~]# ls -l xxxxx &>> readme.txt
 [root@linux ~]# cat readme.txt 
 -rw-r--r-- 1 root root 0 Oct  1 15:13 linuxprobe
 ls: cannot access 'xxxxx': No such file or directory

输出重定向的作用是把文件直接导入到命令中。接下来使用输入重定向把readme.txt文件导入给wc -l命令,统计一下文件中的内容行数

 [root@linux ~]# wc -l < readme.txt
 2

二、管道命令符

管道命令符格式:“命令A|命令B”。作用可以用一句话来概括:“把前一个命令原本要输出到屏幕的信息当作是后一个命令的标准输入

 找出被限制登录用户的命令是:grep /sbin/nologin /etc/passwd
 统计文本行数的命令则是:wc  -l
 合并为一条:
 [root@linux ~]# grep /sbin/nologin /etc/passwd | wc -l

可以将ps、grep、管道符三者结合到一起使用。搜索与bash有关的进程信息:

 [root@linux ~]# ps aux | grep bash
 root       31303  0.0  0.0 226248  5368 pts/0    Ss   08:04   0:00 bash
 root       32790  0.0  0.0 226120  5260 pts/0    S    10:16   0:00 bash
 root       33642  0.0  0.0 226120  5136 pts/0    S+   11:23   0:00 bash
 ...

如果需要将管道符处理后的结果既输出到屏幕,又同时写入到文件,则可以与tee命令结合使用

[root@linux ~]# ps aux | grep bash | tee result.txt
root       31303  0.0  0.0 226248  5368 pts/0    Ss   08:04   0:00 bash
root       32790  0.0  0.0 226120  5260 pts/0    S    10:16   0:00 bash
root       33642  0.0  0.0 226120  5136 pts/0    S+   11:23   0:00 bash
...
[root@linux ~]# cat result.txt 
root       31303  0.0  0.0 226248  5368 pts/0    Ss   08:04   0:00 bash
root       32790  0.0  0.0 226120  5260 pts/0    S    10:16   0:00 bash
root       33642  0.0  0.0 226120  5136 pts/0    S+   11:23   0:00 bash
...

三、命令行的通配符

通配符就是通用的匹配信息的符号

通配符含义
*任意字符
?单个任意字符
[a-z]单个小写字母
[A-Z]单个大写字母
[a-Z]单个字母
[0-9]单个数字
[:alpha:]任意字母
[:upper:]任意大写字母
[:lower:]任意小写字母
[:digit:]所有数字
[:alnum:]任意字母加数字
[:punct:]表单符号

示例:匹配所有在/dev目录中且以sda开头的文件:

[root@linux ~]# ls -l /dev/sda*
brw-rw---- 1 root disk 8, 0 Oct  1 11:56 /dev/sda
brw-rw---- 1 root disk 8, 1 Oct  1 11:56 /dev/sda1
brw-rw---- 1 root disk 8, 2 Oct  1 11:56 /dev/sda2

如果只想查看文件名以sda开头,但是后面还紧跟其他某一个字符的文件的相关信息

[root@linux ~]# ls -l /dev/sda?
brw-rw---- 1 root disk 8, 1 Oct  1 11:56 /dev/sda1
brw-rw---- 1 root disk 8, 2 Oct  1 11:56 /dev/sda2

除了使用[0-9]来匹配0~9之间的数字,也可以用[135]这样的方式仅匹配这三个指定数字中的一个,若没有匹配到则不会显示出来。

[root@linux ~]# ls -l /dev/sda[0-9]
brw-rw---- 1 root disk 8, 1 Oct  1 11:56 /dev/sda1
brw-rw---- 1 root disk 8, 2 Oct  1 11:56 /dev/sda2
[root@linux ~]# ls -l /dev/sda[135]
brw-rw---- 1 root disk 8, 1 Oct  1 11:56 /dev/sda1

通配符也不一定要放最后,也可以搜索/etc/目录中所有以.conf结尾的配置文件有哪些:

[root@linux ~]# ls -l /etc/*.conf
-rw-r--r--. 1 root root       55 May 17  2023 /etc/asound.conf
-rw-r--r--. 1 root root    25696 Oct 22  2020 /etc/brltty.conf
-rw-r--r--. 1 root root     1113 Mar 13  2024 /etc/chrony.conf
...

通配符不仅用于搜索文件或代替被通配的字符,还可以与创建文件命令相结合,唯一区别是要用到大括号,并且字段之间用逗号间隔:

[root@linux ~]# touch {AA,BB,CC}.conf
[root@linux ~]# ls -l *.conf
-rw-r--r-- 1 root root 0 Oct  1 16:34 AA.conf
-rw-r--r-- 1 root root 0 Oct  1 16:34 BB.conf
-rw-r--r-- 1 root root 0 Oct  1 16:34 CC.conf

再或者输出一些指定的信息

[root@linux ~]# echo file{1,2,3,4,5}
file1 file2 file3 file4 file5

四、常用的转义字符

为了更好的理解用户的表达,Shell解释器还提供了特别丰富的转义字符来处理输入的特殊数据。

4个最常用的转义字符如下:

  • 反斜杠(\):使反斜杠后面的一个变量变为单纯的字符
  • 单引号('')转义其中所有的变量单纯的字符串
  • 双引号("")保留其中的变量属性不进行转义处理
  • 反引号(``):把其中的命令执行后返回结果

先定义一个名为PRICE的变量并赋值为5,然后输出以双引号括起来的字符串与变量信息:

[root@linux ~]# echo "Price is $PRICE"
Price is 5

[root@linux ~]# echo "Price is \$$PRICE"
Price is $5

当只需要某个命令的输出值时,可以像命令这样,将命令用反引号括起来,打到预期效果

[root@linux ~]# echo `uname -a`
Linux linux 4.18.0-513.5.1.el8_9.x86_64 #1 SMP Fri Sep 29 05:21:10 EDT 2023 x86_64 x86_64 x86_64 GNU/Linux

对于双引号和单引号的使用,这里给出一个小技巧,就是参数中如果出现了空格,那么就加双引号,如果参数中没有空格,那就不用加~

五、重要的环境变量

变量是计算机系统用于保存可变值的数据类型。在Linux系统中,变量名称一般都是大写的,命令则都是小写的。

在用户执行了一条命令后,Linux系统中到底发生了什么事情呢?简单说,有4个步骤:

  • 判断用户是否以绝对路径或相对路径的方式输入命令(如/bin/ls),是的话则执行
  • Linux系统检查用户输入的命令是否为“别名命令,即用一个自定义的命令名称来替换原本的命令名称

之前在使用rm命令删除文件时,Linux系统都会要求用户再确认是否执行删除操作,其实这就是Linux系统为了防止用户误删除文件而特意设置的rm命令。

[root@linux ~]# ls
AA.conf  anaconda-ks.cfg  BB.conf  CC.conf  Desktop  Documents  Downloads  initial-setup-ks.cfg  linuxprobe  Music  Pictures  Public  readme.txt  result.txt  stderr.txt  Templates  Videos
[root@linux ~]# rm anaconda-ks.cfg 
rm: remove regular file 'anaconda-ks.cfg'? y

也可以使用alias命令来创建一个属于自己的命令别名,语法:“alias 别名=命令”,如要取消一个命令别名,则是用unalias命令。语法格式:“unalias 别名

[root@linux ~]# unalias rm 
[root@linux ~]# rm anaconda-ks.cfg 
[root@linux ~]# 
  • Bash解释器判断用户输入的是内部命令还是外部命令。内部命令是解释器内部的指令,会被直接执行;而用户在绝大部分时间输入的是外部命令,这些命令交由步骤四继续处理。可以使用“type 命令名称”来判断用户输入的命令是内部命令还是外部命令

[root@linux ~]# type echo
echo is a shell builtin
[root@linux ~]# type uptime
uptime is /usr/bin/uptime
  • 系统在多个路径中查找用户输入的命令文件,而定义这些路径的变量叫PATH,作用是告诉Bash解释器待执行的命令可能存放的位置,然后Bash解释器就会逐个查找。PATH是由多个路径值组成的变量,每个路径值之间用冒号间隔,对这些路径的增加和删除操作将影响到Bash解释器对Linux命令的查找。

[root@linux ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@linux ~]# PATH=$PATH:/root/bin
[root@linux ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin

Linux系统中最重要的10个环境变量

变量名称作用
HOME用户的主目录(家目录)
SHELL用户在使用的Shell解释器名称
HISTSIZE输出的历史命令记录条数
HISTFILESIZE保存的历史命令记录条数
MAIL邮件保存路径
LANG系统语言、语系名称
RANDOM生成一个随机数字
PS1Bash解释器的提示符
PATH定义解释器搜索用户执行命令的路径
EDITOR用户默认的文本编辑器

Linux作为一个多用户多任务的操作系统,能够为每个用户提供独立的、合适的工作环境,因此,一个相同的变量会因为用户身份的不同而不同

[root@linux ~]# echo $HOME
/root
[root@linux ~]# su - linuxprobe
[linuxprobe@linux ~]# echo $HOME
/home/linuxprobe

可以自行创建变量,例如设置一个名称为WORKDIR的变量,方便用户更轻松的进入一个层次较深的目录:

但这样的变量不具有全局性,作业范围也有限,默认不能被其他用户使用

[root@linux ~]# mkdir /home/workdir
[root@linux ~]# WORKDIR=/home/workdir
[root@linux ~]# cd $WORKDIR
[root@linux workdir]# pwd
/home/workdir

[root@linux workdir]# su linuxprobe
[linuxprobe@linuxprobe ~]# cd $WORKDIR
[linuxprobe@linuxprobe ~]# echo $WORKDIR
[linuxprobe@linuxprobe ~]# exit

后续要是不使用,则用unset命令取消

[root@linux workdir]# unset WORKDIR

致谢

在此,我要对所有为知识共享做出贡献的个人和机构表示最深切的感谢。同时也感谢每一位花时间阅读这篇文章的读者,如果文章中有任何错误,欢迎留言指正。 

学习永无止境,让我们共同进步!!

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

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

相关文章

快速下载!Windows 7旗舰版系统:集成所有补丁!

微软对Windows7系统停止支持后&#xff0c;Windows7设备不再收到安全补丁程序、修补程序。尽管如此&#xff0c;许多用户仍然认为Windows7是最好用、最经典的系统。有用户就特别喜欢Windows7旗舰版系统&#xff0c;那么接下来系统之家小编为大家带来的全补丁版本的Windows7系统…

C++精解【10】

文章目录 读写文件概述example csv读文件读取每个字段读取机器学习数据库iris constexpr函数GMP大整数codeblock环境配置数据类型函数类 EigenminCoeff 和maxCoeffArray类 读写文件 概述 fstream typedef basic_fstream<char, char_traits<char>> fstream;此类型…

STM32基本定时器、通用定时器、高级定时器区别

一.STM32基本定时器、通用定时器、高级定时器区别 STM32系列微控制器中的定时器资源分为基本定时器&#xff08;Basic Timer&#xff09;、通用定时器&#xff08;General Purpose Timer&#xff09;和高级定时器&#xff08;Advanced Timer&#xff09;三类&#xff0c;它们在…

类似Jira的在线项目管理软件有哪些?10 个主流的Jira替代方案

10 个 Jira 替代方案&#xff1a;PingCode、Worktile、Teambition、Redmine、Asana、monday.com、Zoho Projects、思码逸、Notion、Airtable。 Jira 是一款流行的项目管理工具&#xff0c;专为产品开发团队而设计。虽然它是一种多功能解决方案&#xff0c;几乎适用于任何类型的…

四、(1)网络爬虫入门及准备工作(爬虫及数据可视化)

四、&#xff08;1&#xff09;网络爬虫入门及准备工作&#xff08;爬虫及数据可视化&#xff09; 1&#xff0c;网络爬虫入门1.1 百度指数1.2 天眼查1.3 爬虫原理1.4 搜索引擎原理 2&#xff0c;准备工作2.1 分析爬取页面2.2 爬虫拿到的不仅是网页还是网页的源代码2.3 爬虫就是…

html+js+css登录注册界面

拥有向服务器发送登录或注册数据并接收返回数据的功能 点赞关注 界面 源代码 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <title>Login and Registration Form</title> <style> * …

2024“国培“来也UiBot6.0 RPA数字机器人开发综合应用

前言 (本博客中会有部分课程ppt截屏,如有侵权请及请及时与小北我取得联系~) 国培笔记: 依次读取数组中每个元素 输出调试信息 [ value=[ "vivian", value[0] "老师", "上午好,O(∩_∩)O哈哈~" ], v…

Nuxt3 的生命周期和钩子函数(九)

title: Nuxt3 的生命周期和钩子函数&#xff08;九&#xff09; date: 2024/7/3 updated: 2024/7/3 author: cmdragon excerpt: 摘要&#xff1a;本文介绍了Nuxt3中与Vite相关的五个生命周期钩子&#xff0c;包括vite:extend、vite:extendConfig、vite:configResolved、vite…

贴片电阻:01A、01B、01C、01D分别是什么意思?

贴片电阻的识别方法&#xff1a; 1、数字索位标称法 (一般矩形片状电阻采用这种标称法) 数字索位标称法就是在电阻体上用三位数字来标明其阻值。它的第一位和第二位为有效数字&#xff0c;第三位表示在有效数字后面所加“0”的个数&#xff0e;这一位不会出现字母。例如&…

Lua、AB包热更新总结

1.AB包热更新 &#xff08;1&#xff09;AB包是一种特定的压缩文件&#xff0c;可以放模型贴图音效等等 &#xff08;2&#xff09;Resources目录下打包时只读 无法修改&#xff1b;而AB包存储的位置是自定义的&#xff0c;能够动态更新&#xff0c;同时可以决定资源包初始的大…

用720云搭建数字孪生VR智慧安防系统,赋能安防升级!

“安全防范"一直是我国城镇化发展进程中重点关注的工作板块&#xff0c;随着时代发展需求与科技的日新月异&#xff0c;安防行业正在积极融合VR3D数字孪生技术&#xff0c;升级安防数字基础设施和安防产品服务创新。 今年2月&#xff0c;《数字中国建设整体布局规划》的出…

暑假学习DevEco Studio第一天

学习目标&#xff1a; 掌握构建第一个ArkTS应用 学习内容&#xff1a; 容器的应用 创建流程 点击file&#xff0c;new-> create project 点击empty ->next 进入配置界面 点击finsh&#xff0c;生成下面图片 这里需要注意记住index.ets &#xff0c;这是显示页面 –…

StarRocks 3.3 重磅发布,Lakehouse 架构发展进入快车道!

StarRocks 3.3 的发布标志着 Lakehouse 架构在数据分析领域迈向了一个新的高度。作为下一代 Lakehouse 架构的代表&#xff0c;StarRocks 3.3 在稳定性、计算性能、缓存设计、物化视图、存储优化和 Lakehouse 生态系统等方面进行了全方位的优化和创新。本文将逐一介绍 StarRock…

【多媒体】富客户端应用程序GUI框架 JavaFX 2.0 简介

JavaFX 最初是由 Oracle 推出的一个用于开发富客户端应用程序的框架&#xff0c;它提供了丰富的用户界面控件、布局容器、3D图形绘制、媒体播放和动画等功能&#xff0c;旨在取代较旧的 Swing 框架。JavaFX 于 2007 年推出&#xff0c;2011 年 10 月发布了2.0 版本。JavaFX 2.0…

如何创建移动类型

第一步打开事务代码&#xff1a; OMJJ 下面这个工作区可以不填&#xff0c;或者填入你的范围&#xff08;例如我准备copy Z52成为Z54 那么就可以输入从Z52到Z54&#xff0c;SAP的这个操作就是这么怪&#xff0c;哈哈&#xff09;不然就会出现一个这样的报错“在工作区中指定关…

YOLOv8改进 | 卷积模块 | SAConv可切换空洞卷积

秋招面试专栏推荐 &#xff1a;深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 &#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 专栏目录 &#xff1a;《YOLOv8改进有效…

[数据集][目标检测]螺丝螺母检测数据集VOC+YOLO格式2400张2类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;2400 标注数量(xml文件个数)&#xff1a;2400 标注数量(txt文件个数)&#xff1a;2400 标注…

JavaSE (Java基础):面向对象(上)

8 面向对象 面向对象编程的本质就是&#xff1a;以类的方法组织代码&#xff0c;以对象的组织&#xff08;封装&#xff09;数据。 8.1 方法的回顾 package com.oop.demo01;// Demo01 类 public class Demo01 {// main方法public static void main(String[] args) {int c 10…

为什么有些人思考得多,决策反而不好?避免过度拟合的终极指南:决策高手的秘密:灰度认知,黑白决策

在决策过程中&#xff0c;过度关注细节可能导致决策效果不佳&#xff0c;这被称为“过度拟合”。为了避免这种情况&#xff0c;我们需要进行“灰度认知&#xff0c;黑白决策”&#xff0c;即接受不确定性&#xff0c;关注整体趋势&#xff0c;设定明确目标&#xff0c;简化选择…

微信小程序 调色板

注意&#xff1a;是在uniapp中直接使用的一个color-picker插件&#xff0c;改一下格式即可在微信小程序的原生代码中使用 https://github.com/KirisakiAria/we-color-picker 这是插件的地址&#xff0c;使用的话先把这个插件下载下来&#xff0c;找到src&#xff0c;在项目创…