Linux加强篇003-管道符、重定向与环境变量

目录

前言

1. 输入输出重定向

2. 管道命令符

3. 命令行的通配符

4. 常用的转义字符

5. 重要的环境变量


前言

悟已往之不谏,知来者之可追。实迷途其未远,觉今是而昨非。舟遥遥以轻飏,风飘飘而吹衣。问征夫以前路,恨晨光之熹微。

第一版我已经全部放到我的精选里了,大家可以点开我的头像主页,选择精选观看,本系列依照《Linux就该这么学》第二版随书学习练习操作,将一些课本上不顺畅的地方,全部以最简方式免费开源展示给大家,资源大家可以自行百度,学习起来我们既要多巴胺也要内啡肽。

这两天异常的疲惫,但是也是鼓起勇气继续更新,天冷加衣,希望大家注意身体。为什么要写运维的东西呢,因为是云计算云服务器的基础,感觉是在给自己和大家提醒,不要觉得事情本来就如同你看到的那么简单,有的时候还是要看一下原理。延伸一下在校的也要提前展望一下将来——思危,在职的还是要学一些东西的——思退,失业的也可以补充一下自己——思变,以后都要进入职场的大熔炉里,在其位谋其政,同时思危、思退、思变。同样一首天王的歌送给大家<周杰伦-以父之名>,希望大家继续努力搬砖学习!

1. 输入输出重定向

输入重定向是指把文件导入到命令中,而输出重定向则是指把原本要输出到屏幕的数据信息写入到指定文件中。

标准输入重定向(STDIN,文件描述符为0):默认从键盘输入,也可从其他文件或命令中输入。

标准输出重定向(STDOUT,文件描述符为1):默认输出到屏幕。

错误输出重定向(STDERR,文件描述符为2):默认输出到屏幕。

[root@bogon ~]# ll test2

-rw-r--r--. 1 root root 48 Nov  8 15:25 test2

[root@bogon ~]# ll test3

ls: cannot access 'test3': No such file or directory

输入重定向中符号及作用

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

输入重定向中符号及作用

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

重定向中的标准输出模式,可以省略文件描述符1不写,而错误输出模式的文件描述符2是必须要写,通过标准输出重定向将man bash命令原本要输出到屏幕的信息写入到文件bash.txt中,然后显示bash.txt文件中的内容:

[root@bogon ~]# man bash > bash.txt

[root@bogon ~]# head -n 3 bash.txt  

BASH(1)                                            General Commands Manual                                           BASH(1)

NAME

[root@bogon ~]#  

覆盖写入模式向文件中写入数据时,每一次都会覆盖掉上一次写入的内容,所以最终文件中只有最后一次的写入结果:

[root@bogon ~]# echo "i like linux" > bash.txt

[root@bogon ~]# head -n 1 bash.txt  

i like linux

[root@bogon ~]#  

通过追加写入模式向bash.txt文件写入一次数据:

[root@bogon ~]# head -n 2 bash.txt  

i like linux

i love linux

[root@bogon ~]#  

标准输出将原本要输出到屏幕的信息写入到文件中:

[root@bogon ~]# ll bash.txt 2> test2

-rw-r--r--. 1 root root 26 Nov 10 15:34 bash.txt

不区分标准输出和错误输出,只要命令有输出信息则全部追加写入到文件中:

[root@bogon ~]# ll bash.txt &>> test2

[root@bogon ~]# ll bash1.txt &>> test2

[root@bogon ~]# cat test2

-rw-r--r--. 1 root root 26 Nov 10 15:34 bash.txt

ls: cannot access 'bash1.txt': No such file or directory

使用输入重定向把bash.txt文件导入给wc -l命令,统计一下文件中的内容行数(只读取信息流数据):

[root@bogon ~]# wc -l < bash.txt  

2

2. 管道命令符

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

找出被限制登录用户的命令是grep /sbin/nologin /etc/passwd和统计文本行数的命令则是wc -l,将两条命令通过管道合并:

[root@bogon ~]# grep /sbin/nologin /etc/passwd | wc -l

42

用翻页的形式查看/etc目录中的文件列表及属性信息:

[root@bogon ~]# ll /etc/ | more

drwxr-xr-x.  2 root root        34 Nov  6 11:30 cupshelpers

drwxr-xr-x.  4 root root        78 Nov  6 11:27 dbus-1

drwxr-xr-x.  4 root root        31 Nov  6 11:28 dconf

drwxr-xr-x.  2 root root        33 Nov  6 11:36 default

drwxr-xr-x.  2 root root        40 Nov  6 11:29 depmod.d

--More--

用一条命令来完成密码重置操作:

[root@bogon ~]# echo "123" | passwd --stdin root

Changing password for user root.

passwd: all authentication tokens updated successfully.

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

[root@bogon ~]# ps aux | grep bash

root        1051  0.0  0.1  26244  2324 ?        S    15:02   0:00 /bin/bash /usr/sbin/ksmtuned

root        2346  0.0  0.3  27688  5708 pts/0    Ss   15:03   0:00 -bash

root        2964  0.0  0.0  12136  1148 pts/0    S+   15:58   0:00 grep --color=auto bash

显示系统中所有与bash相关的进程信息,并同时将输出到屏幕和文件中:

[root@bogon ~]# ps aux | grep bash | tee result.txt

root        1051  0.0  0.1  26244  2324 ?        S    15:02   0:00 /bin/bash /usr/sbin/ksmtuned

root        2346  0.0  0.3  27688  5708 pts/0    Ss   15:03   0:00 -bash

root        3056  0.0  0.0  12136  1036 pts/0    S+   16:05   0:00 grep --color=auto bash

[root@bogon ~]# cat result.txt  

root        1051  0.0  0.1  26244  2324 ?        S    15:02   0:00 /bin/bash /usr/sbin/ksmtuned

root        2346  0.0  0.3  27688  5708 pts/0    Ss   15:03   0:00 -bash

root        3056  0.0  0.0  12136  1036 pts/0    S+   16:05   0:00 grep --color=auto bash

3. 命令行的通配符

通配符就是通用的匹配信息的符号,比如星号(*)代表匹配零个或多个字符,问号(?)代表匹配单个字符,中括号内加上数字[0-9]代表匹配0~9之间的单个数字的字符,而中括号内加上字母[abc]则是代表匹配a、b、c三个字符中的任意一个字符。

Linux系统中通配符及含义

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

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

[root@bogon ~]# ll /dev/nvm*

crw-------. 1 root root 244, 0 Nov 10 15:02 /dev/nvme0

brw-rw----. 1 root disk 259, 0 Nov 10 15:02 /dev/nvme0n1

brw-rw----. 1 root disk 259, 1 Nov 10 15:02 /dev/nvme0n1p1

brw-rw----. 1 root disk 259, 2 Nov 10 15:02 /dev/nvme0n1p2

brw-rw----. 1 root disk 259, 3 Nov 10 15:02 /dev/nvme0n1p3

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

[root@bogon ~]# ll /dev/nvme0n1p?

brw-rw----. 1 root disk 259, 1 Nov 10 15:02 /dev/nvme0n1p1

brw-rw----. 1 root disk 259, 2 Nov 10 15:02 /dev/nvme0n1p2

brw-rw----. 1 root disk 259, 3 Nov 10 15:02 /dev/nvme0n1p3

批量创建文件:

[root@bogon ~]# touch {AA,BB,CC}.conf

[root@bogon ~]# ll *.conf

-rw-r--r--. 1 root root 0 Nov 10 16:17 AA.conf

-rw-r--r--. 1 root root 0 Nov 10 16:17 BB.conf

-rw-r--r--. 1 root root 0 Nov 10 16:17 CC.conf

4. 常用的转义字符

4个最常用的转义字符

反斜杠(\):使反斜杠后面的一个变量变为单纯的字符。

单引号(' '):转义其中所有的变量为单纯的字符串。

双引号(" "):保留其中的变量属性,不进行转义处理。

反引号(` `):把其中的命令执行后返回结果。

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

[root@bogon ~]# PRICE=5

[root@bogon ~]# echo "price is $PRICE"

price is 5

特殊符号提取转义成单纯文本:

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

Price is $5

反引号与uname -a命令结合,使用echo命令来查看本机的Linux版本和内核信息:

[root@bogon ~]# echo `uname -a`

Linux bogon 4.18.0-348.el8.x86_64 #1 SMP Tue Oct 19 15:14:17 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

5. 重要的环境变量

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

第1步判断用户是否以绝对路径或相对路径的方式输入命令(如/bin/ls),如果是绝对路径则直接执行,否则进入第2步继续判断。

第2步Linux系统检查用户输入的命令是否为“别名命令”,即用一个自定义的命令名称来替换原本的命令名称。

用alias命令来创建一个属于自己的命令别名,语法格式为“alias别名=命令”

若要取消一个命令别名,则是用unalias命令,语法格式为“unalias别名”

第3步:Bash解释器判断用户输入的是内部命令还是外部命令。内部命令是解释器内部的指令,会被直接执行;而用户在绝大部分时间输入的是外部命令,这些命令交由步骤4继续处理。

可以使用“type命令名称”来判断用户输入的命令是内部命令还是外部命令:

[root@bogon ~]# type echo

echo is a shell builtin

[root@bogon ~]# type uptime

uptime is /usr/bin/uptime

第4步:系统在多个路径中查找用户输入的命令文件,而定义这些路径的变量叫作PATH,可以简单地把它理解成是“解释器的小助手”,作用是告诉Bash解释器待执行的命令可能存放的位置,然后Bash解释器就会乖乖地在这些位置中逐个查找。PATH是由多个路径值组成的变量,每个路径值之间用冒号间隔,对这些路径的增加和删除操作将影响到Bash解释器对Linux命令的查找。

[root@bogon ~]# echo $PATH

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

[root@bogon ~]# PATH=$PATH:/root/bin

[root@bogon ~]# echo $PATH

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin

作为一名态度谨慎、有经验的运维人员,在接手一台Linux系统后一定会在执行命令前先检查PATH变量中是否有可疑的目录。

最重要的10个环境变量

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

查看HOME变量在不同的用户身份下都有哪些值:

[root@bogon ~]# echo $HOME

/root

[root@bogon ~]# su - centos8

Last login: Tue Nov  7 08:58:40 CST 2023 on pts/0

[centos8@bogon ~]$ echo $HOME

/home/centos8

设置一个名称为WORKDIR的变量,方便用户更轻松地进入一个层次较深的目录:

root@bogon ~]# mkdir /home/workdir

[root@bogon ~]# WORKDIR=/home/workdir

[root@bogon ~]# cd $WORKDIR

[root@bogon workdir]# pwd

/home/workdir

变量不具有全局性,作用范围也有限,默认情况下不能被其他用户使用:

[root@bogon workdir]# su centos8

[centos8@bogon workdir]$ cd $WORKDIR

[centos8@bogon ~]$ echo $WORKDIR

[centos8@bogon ~]$ exit

使用export命令将其提升为全局变量:

[root@bogon workdir]# export WORKDIR

[root@bogon workdir]# su centos8

[centos8@bogon workdir]$ cd $WORKDIR

[centos8@bogon workdir]$ pwd

/home/workdir

不使用这个变量了,则可执行unset命令把它取消掉:

[root@bogon workdir]# unset WORKDIR

[root@bogon workdir]#  

直接在终端设置的变量能够立即生效,但在重启服务器后就会失效,因此我们需要将变量和变量值写入到.bashrc或者.bash_profile文件中,以确保永久能使用它们。

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

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

相关文章

使用Pytorch从零开始构建Conditional PixelCNN

条件 PixelCNN PixelCNN 是 PixelRNN 的卷积版本&#xff0c;它将图像中的像素视为一个序列&#xff0c;并在看到前面的像素后预测每个像素&#xff08;定义如上和左&#xff0c;尽管这是任意的&#xff09;。PixelRNN 是图像联合先验分布的自回归模型&#xff1a; p ( x ) …

【开源】基于Vue和SpringBoot的食品生产管理系统

项目编号&#xff1a; S 044 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S044&#xff0c;文末获取源码。} 项目编号&#xff1a;S044&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 加工厂管理模块2.2 客户管理模块2.3…

【Proteus仿真】【STM32单片机】智能垃圾桶设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真STM32单片机控制器&#xff0c;使用报警模块、LCD1602液晶模块、按键模块、人体红外传感器、HCSR04超声波、有害气体传感器、SG90舵机等。 主要功能&#xff1a; 系统运行后&…

Spring基于xml注入bean的几种方式; Spring 框架中都用到了哪些设计模式;Spring的自动装配

文章目录 Spring基于xml注入bean的几种方式&#xff1a;Spring的自动装配&#xff1a;在Spring框架xml配置中共有5种自动装配&#xff1a;基于注解的方式&#xff1a; Spring 框架中都用到了哪些设计模式&#xff1f; Spring基于xml注入bean的几种方式&#xff1a; &#xff0…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《基于Fisher时段划分的配电网源网荷储多时间尺度协调优化调控策略》

这个标题涉及到电力系统领域的一些关键概念和方法。让我们逐步解读&#xff1a; 基于Fisher时段划分&#xff1a; "基于"表示这个策略或方法的核心基础是某个特定的理论或技术。"Fisher时段划分"可能指的是使用Fisher信息矩阵进行时间划分。Fisher信息矩阵…

居家适老化设计第三十条---卫生间之坐便

以上产品图片均来源于淘宝 侵权联系删除 在居家适老化中&#xff0c;马桶是非常重要的设施之一&#xff0c;它能够提供方便、安全、舒适的上厕所体验。以下是一些居家适老化中常见的马桶设计和功能&#xff1a;1. 高度合适&#xff1a;为了方便老年人坐起和站起&#xff0c;马…

Da-transunet:将空间和通道双重关注与Transformer u-net相结合用于医学图像分割

DA-TRANSUNET: INTEGRATING SPATIAL AND CHANNEL DUAL ATTENTION WITH TRANSFORMER U-NET FOR MEDICAL IMAGE SEGMENTATION 1、方法1.1 模型1.2 双注意力模块&#xff08;DA-Block&#xff09;1.2.1 PAM&#xff08; 位置注意力模块&#xff09;1.2.2 CAM&#xff08;通道注意力…

面试:Kubernetes相关问题

文章目录 Kubernetes的工作流程可以分为以下几个步骤&#xff1a;简述Kubernetes中的Deployment、StatefulSet、DaemonSet的区别在Kubernetes中&#xff0c;如何进行存储管理在Kubernetes中&#xff0c;如何实现滚动升级和回滚在Kubernetes中&#xff0c;如何进行日志和监控的管…

基于环形队列的生产者消费者模型线程池

目录 信号量 信号量是什么 信号量的操作 基于环形队列的生产者消费者模型 我们想怎么写这个模型 线程池 线程池的实现 线程的属性及方法 线程池的属性及方法 主线程 信号量 信号量也是通信的一种&#xff0c;前面在进程间通信的时候&#xff0c;我们说信号量到线程的…

NX二次开发UF_CURVE_ask_int_parms_sc 函数介绍

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan UF_CURVE_ask_int_parms_sc Defined in: uf_curve.h int UF_CURVE_ask_int_parms_sc(tag_t int_curve_object, int * num_objects_set_1, tag_t * * object_set_1, int * num_object…

一文了解 StandardTokenizer 分词器,分词原理

一、StandardTokenizer简介 什么是StandardTokenizer&#xff1f; StandardTokenizer是HanLP中的一个分词器&#xff0c;也是默认的标准分词器。它基于词典和规则的方式对中文文本进行分词&#xff0c;将输入的句子切分成一个个独立的词语。 StandardTokenizer的主要特点如下…

Swing程序设计(6)边界布局,网格布局

文章目录 前言一、布局介绍 1.边界布局2.网格布局3.网格组布局.总结 前言 Swing程序中还有两种方式边界布局&#xff0c;网格布局供程序员使用。这两种布局方式更能体现出软件日常制作的排列布局格式。 一、布局介绍 1.BorderLayout边界布局 语法&#xff1a;new BorderLayout …

laravel8安装多应用多模块(笔记三)

先安装laravel8 Laravel 安装&#xff08;笔记一&#xff09;-CSDN博客 一、进入项目根目录安装 laravel-modules composer require nwidart/laravel-modules 二、 大于laravel5需配置provider&#xff0c;自动生成配置文件 php artisan vendor:publish --provider"Nwid…

windows cmd执行远程长脚本

背景 有时候我们想在未进行一些环境设置&#xff0c;或者工具使用者电脑中执行一段初始化脚本&#xff0c;为了简化使用者的理解成本&#xff0c;通常给使用者一段代码执行初始化电脑中的设置&#xff0c;尤其是这段初始化脚本比较长的时候。 脚本制作者 比如将需要执行的命…

【ARM CoreLink 系列 3.1 -- CCI-500 详细介绍 -上半部】

文章目录 1.1 CCI-500 介绍1.2 CCI-500 features 详细介绍1.2.1 Data Coherency between ACE Masters1.2.2 Quality of Service (QoS)1.2.3 (I/O) Coherency1.2.4 Crossbar Interconnect Functionality1.2.5 Performance Monitoring Unit (PMU)1.2.6 DVM Message Transport1.2.…

H5ke12--2--学生选课表格的编辑

方法1不可以修改的用label,如何按了哪一行 就会在下面有个文本显示可编辑的一行 方法2每一行后面都有一个编辑, 3对每一个修改,每一个td失去焦点都会有,直接到达我们服务器 注意 如果用span的每一个html元素都可以自己定义属性 Data-属性名,data-Address links也要给为span 1…

递归算法学习——二叉树的伪回文路径

1&#xff0c;题目 给你一棵二叉树&#xff0c;每个节点的值为 1 到 9 。我们称二叉树中的一条路径是 「伪回文」的&#xff0c;当它满足&#xff1a;路径经过的所有节点值的排列中&#xff0c;存在一个回文序列。 请你返回从根到叶子节点的所有路径中 伪回文 路径的数目。 示例…

软件设计中如何画各类图之二深入解析数据流图(DFD):系统设计与分析的关键视觉工具

目录 1 前言2 数据流图&#xff08;DFD&#xff09;的重要性3 数据流图的符号说明4 清晰的数据流图步骤4.1 确定系统边界4.2 识别数据流4.3 定义处理过程4.4 确认数据存储4.5 建立数据流动的连线4.6 细化和优化 5 数据流图的用途6 使用场景7 实际应用场景举例8 结语 1 前言 当…

经典的回溯算法题leetcode子集问题思路代码详解

目录 子集问题 leetcode78题.子集 leetcode90题.子集II 如果各位对回溯不太了解可以看我昨天写的文章&#xff0c;以及上一篇着重整列了回溯经典的组合问题。 回溯算法详解-CSDN博客 经典的回溯算法题leetcode组合问题整理及思路代码详解-CSDN博客 子集问题 组合问题我们…

使用 Python 和 NLTK 进行文本摘要

一、说明 文本摘要是一种自然语言处理技术&#xff0c;允许用户将大量文本总结为小块&#xff0c;而不会丢失任何重要信息。本文介绍NLP中使用Gensim和Sumy实现文本摘要的步骤。 二、为什么要总结文本&#xff1f; 互联网包含大量信息&#xff0c;而且每秒都在增加。文本摘要可…