《Linux就该这么学》培训笔记_ch03_管道符、重定向与环境变量

文章最后会post上书本的笔记照片。

文章主要内容

输入输出重定向

输出重定向(命令执行结果 --> 文件):把原本要输出到屏幕的数据写入到指定文件。

  • 标准输出信息:文件相关权限、所有者、所属组、文件大小以及修改时间等信息。
  • 错误输出信息:报错提示信息。
  • 关于重定向的符号">":一个">",即">",为清空写入;两个">",即">>",为追加写入。
  • 标准输出重定向:仅重定向标准输出信息。符号:> 清空写入;>> 追加写入。
  • 错误输出重定向:仅重定向错误输出信息。符号:2> 清空写入;2>> 追加写入。
  • 标准/错误输出重定向:不论是标准输出信息还是错误输出信息都能重定向。符号:&> 清空写入;&>> 追加写入。
 touch test.txt                      #创建空白的文本文件
ls -l anaconda-ks.cfg > test.txt #文件anaconda-ks.cfg是存在的,所以输出信息为标准输出信息。命令执行之前,test.txt文件是无内容的,执行后,test.txt就会有一条标准输出的内容。
ls -l qwer.txt 2> test.txt #文件qwer.txt是不存在的,所以输出信息为错误输出信息。由于采用的是清空写入,因此在写入错误输出信息之前会把文件test.txt的原有内容清空,再写入,此时test.txt只有一条错误输出信息。
ls -l asdf.txt &>> test.txt #因为不知道文件asdf.txt是否存在,所以干脆用&>>,无论是标准还是错误的输出信息都进行重定向。由于采用追加写入,test.txt原有内容不会被删除,直接在原内容的下一行写入信息,此时test.txt有两条信息。

输入重定向(文件内容 --> 命令):把文件导入到命令中,Linux命令可以从文件获取输入。输入重定向相对冷门,不常用。

输入重定向中用到的符号及其作用:

  • 命令 < 文件:将文件作为命令的标准输入
  • 命令 << 分界符:从标准输入中读入,直到遇见分界符才停止
  • 命令 < 文件1 > 文件2:将文件1作为命令的标准输入并将标准输出到文件2
 wc -l anaconda-ks.cfg      #统计文件内容的行数。输出结果:47 anaconda-ks.cfg
wc -l < anaconda-ks.cfg #统计从标准输入读取的内容的行数。输出结果:47

两者之间的结果不同,是因为:

  • 第一句命令的命令对象是一个文件,因此输出结果带有文件名。
  • 第二句命令其实是通过标准输入读取了文件内容,再交给命令处理,因此第二句的命令对象实际是一段文本内容,因此就没有文件名输出了。

管道符(|)

管道符的作用:把前一个命令原本要输出到屏幕的标准正常数据当作是后一个命令的标准输入。格式: 命令A | 命令B。

管道符的适用场景很多,可以组合多次:命令A | 命令B | 命令C。

 grep "/sbin/nologin" /etc/passwd | wc -l     #通过匹配关键词/sbin/nologin找出所有被限制登录系统的用户,并通过wc命令进一步统计行数,得出所有被限制登录系统的用户有多少个。
ls -l /etc | more #用翻页的形式查看/etc目录中的文件列表及属性信息
echo "" | passwd --stdin linuxprobe #给用户linuxprobe的密码重置为123456

通配符

通配符:通用的匹配信息的符号。

常用通配符:

  • 星号(*):代表匹配零个或多个字符;
  • 问号(?):代表匹配单个字符;
  • 中括号([]):
    • [0-9]代表匹配0到9之间的单个数字;
    • [1,3,5]代表仅匹配1,3,5中的其中一个,等同[135];
    • [1-2,5-6]表示匹配这两个区间内的数字,等同于[1,2,5,6];
    • [abc]表示匹配a,b,c其中一个;
    • [a-z]代表匹配26个小写字母其中一个,[A-Z]则是匹配大写字母;

例子:先创建一些空文件,名字都是sda开头,后面加一些数字结尾,分别是:1,3,4,5,23,100,199,203

ls -l sda*            #结果:当前路径下所有sda开头的都列出来了
ls -l sda? #结果:sda1,sda3,sda4,sda5
ls -l sda[] #结果:sda1,sda3,sda5
ls -l sda[-,-] #结果:sda1,sda5
ls -l sda[-] #结果:sda1

中括号是不支持匹配超过两位以上的内容的,只能匹配单个字符。

常用的转义字符

  • 反斜杠(\):使反斜杠后面的一个变量变为单纯的字符串。
  • 单引号(''):转义其中所有的变量为单纯的字符串。
  • 双引号(""):保留其中的变量属性,不进行转义处理。
  • 反引号(``):把其中的命令执行后返回结果。
 PRICE=5                         #定义一个变量(变量一般用大写)PRICE,值为5,
echo "Price is $PRICE" #结果:Price is 。
echo "Price is $$PRICE" #结果:Price is PRICE。$$作用是显示当前程序的进程ID号码(PID)
echo "Price is \$$PRICE" #结果:Price is $5。反斜杠把前面的$变成单纯的字符串
echo "Price is '$$$$'$PRICE" #结果:Price is 26822682。双引号在最外层,里层的单引号无法起到把$$变成普通字符串的作用
echo Price is '$$$$'$PRICE #结果:Price is $$$$。最外层没有双引号括住,单引号起作用,$$只是单纯的字符串
echo '"Price is $$$$$PRICE"' #结果:"Price is $$$$$PRICE"。单引号在最外层,里层的双引号无法起到保留变量属性的作用
AB=`uname -a` #用反引号把命令括起来(`命令`),可以把命令的执行结果赋值给变量。
echo $AB #变量$AB的值就是uname -a的执行结果

重要的环境变量

命令在Linux中的执行步骤

  • 第1步:判断用户是否以绝对路径或相对路径的方式输入命令(如/bin/ls),如果是则直接执行。
  • 第2步:Linux系统检查用户输入的命令是否为“别名命令”。
  • 第3步:Bash解释器判断用户输入的是内部命令还是外部命令。若是内部命令则直接执行,若是外部命令则进入下一步。
  • 第4步:系统在多个路径中查找用户输入的命令文件。

1.路径:文件存放的地方。命令路径即命令文件存放的地方。

  • 绝对路径:路径的写法一定是由根目录/写起的,如/bin/ls。
  • 相对路径:路径写法不是由根目录/写起的。比如,用户cd到/bin,此时用户所在路径为/bin,那么用户要执行ls命令只需要输入ls,而不需要输入/bin/ls。

2.命令别名

  • alias命令:为命令创建别名。格式:alias 别名=命令。
  • unalias命令:取消命令别名。格式:unalias 别名。
 alias nmb='echo ni ma bi'    #给命令echo ni ma bi起一个别名为nmb
alias nmb #查看别名nmb对应的真实命令
nmb #执行nmb别名命令,实际效果同echo ni ma bi,输出ni ma bi
unalias nmb #取消别名nmb
nmb #再执行别名nmb,发现已经无法使用了

3.type命令:用于判断用户输入的命令是内部命令还是外部命令。格式:type 命令名称。

 type echo     #输出结果:echo is a shell builtin,说明echo命令是内部命令
type rm #输出结果:rm is aliased to 'rm -i',
type mkdir #输出结果:mkdir is /usr/bin/mkdir,说明mkdir命令是外部命令

4.PATH变量:由多个执行命令的路径值组成的变量,每个路径之间用冒号:间隔。当用户输入的是外部命令,就需要通过PATH变量去查找外部命令的所在位置。

经典问题:将当前目录(.)添加到PATH中在某些情况下确实可以让用户免去输入命令所在路径的麻烦,但是如果系统被黑客入侵过并在公共目录存放了与命令名同名的木马文件,你又恰巧执行,那你就GG了。

env命令:用于查看系统所有的环境变量(挺多的)。

最重要的10个环境变量:

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

export命令:用于设置全局变量。格式:export 变量名。

 TEST=7148        #当前用户为root,创建变量TEST,值为7148.这种方式创建的变量不会永久生效。仅对当前命令行窗口生效,若完整切换用户(su - XXX)后将失效.若要永久生效则要修改/etc/profile和~/.bashrc。
echo $TEST #输出变量TEST的值,输出结果为7148
su linuxprobe #切换到linuxprobe用户
echo $TEST #当前用户为linuxprobe,因为TEST不是全局变量,只有其创建者root才能使用。因此输出结果为空行
exit #退出linuxprobe
export TEST #linuxprobe退出后返回root,把变量变为全局变量
su linuxprobe #切换到linuxprobe
echo $TEST #此时TEST是全局变量,因此linuxprobe可以使用TEST,输出结果为7148
  • /etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行,并从/etc/profile.d目录的配置文件中搜集shell的设置,
  • /etc/bashrc:为每一个运行bash shell的用户执行此文件,当bash shell被打开时,该文件被读取。
  • ~/.bash_profile:每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件。
  • ~/.bashrc:该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该文件被读取。

书本笔记

《Linux就该这么学》培训笔记_ch03_管道符、重定向与环境变量的更多相关文章

  1. Linux管道符、重定向与环境变量

    ——<Linux就该这么学>笔记 输入输出重定向输入重定向 指把文件导入到命令中输出重定向 指把原本要输出到屏幕的数据信息写入到指定文件中 输出重定向 分为标准输出重定向和错误输出重定向 ...

  2. Linux就该这么学(3)-管道符、重定向与环境变量(学习笔记)

    1.Linux命令与文件读写操作有关的重定向技术: 学习目标:主要解决输出信息的保存问题. 标准覆盖输出重定向: 标准追加输出重定向 错误覆盖输出重定向 错误追加输出重定向 输入重定向 标准输入(ST ...

  3. Linux 就该这么学 CH03 管道符、重定向和环境变量

    0 概述 1 输入输出重定向 重定向技术有5种模式: 标准覆盖输出重定向 标准追加输出重定向 错误覆盖输出重定向 错误追加输出重定向 输入重定向 输入重定向是将文件导入到命令中. 输出重定向是将输入到 ...

  4. linux入门系列7--管道符、重定向、环境变量

    前面文章我们学习了linux基础命令,如果将不同命令组合使用则可以成倍提高工作效率.本文将学习重定向.管道符.通配符.转义符.以及重要的环境变量相关知识,为后面的shell编程打下基础. 一.IO重定 ...

  5. linux CentOS 系统下如何将php和mysql命令加入到环境变量中

    在Linux CentOS系统上安装完php和MySQL后,为了使用方便,需要将php和mysql命令加到系统命令中,如果在没有添加到环境变量之前,执行“php -v”命令查看当前php版本信息时时, ...

  6. 《Linux命令行与shell脚本编程大全》 第六章环境变量

    很多程序和脚本都通过环境变量来获取系统信息.存储临时数据和配置信息. 6.1 什么是环境变量: bash shell用一个叫环境变量(environment variable)的特性来存储有关shel ...

  7. 第一天学JAVA,下载JDK,配置JAVA环境变量!!!

    步骤一:下载JDK https://www.oracle.com 我们首先进入到这个网站下载我们运行JAVA的所必须的JDK 进入到这个网站按照图示进入到下一个页面 因为刚学JAVA,我们的JDK版本 ...

  8. linux包安装,解压,压缩,包管理,环境变量

    linux 包安装,解压,压缩,包管理 centoscentos上有系统包管理器yum yum的配置一般有两种方式,一种是直接配置/etc目录下的yum.conf文件,另外一种是在/etc/yum.r ...

  9. Linux学习Day4:管道符、重定向与环境变量

    仅仅是学习Linux系统的命令还不够,只有把多个命令按照自己想要的方式进行组合使用,才能提高工作效率.今天的内容主要是关于如何把命令组合在一起使用,使得输入的命令更准确.更高效,也为接下来的Shell ...

随机推荐

  1. .net core启用 autoMapper

    启用 autoMapper   autoMapper 基于约定的对象映射器 目录 安装包 添加服务 书写映射关系 安装包   需要安装两个包:AutoMapper和AutoMapper.Extensi ...

  2. Windows git和cmd代理设置

    linux的比较简单,直接修改配置文件即可,这里就不再赘述 设置Git代理 http代理: 临时代理: export http_proxy=http://127.0.0.1:7777 export h ...

  3. (二)RFB协议具体通信说明

    .   消息说明  8.1     握手消息 8.1.1       RFB协议版本号 1.vnc服务器发送所能够支持的最高RFB协议版本号给客户端,格式如下: “RFB xxx.yyy\n”共12b ...

  4. beyond compare全文件夹比较,仅显示变化的文件

    beyond  compare是一款非常优秀的文件夹同步比较工具,赞. 非常强大的一点就是给定两个文件夹可以自动列出所有不同的文件和子文件夹,但是有一点可能很多人碰到过,也就是需要一个个点开才能重新比 ...

  5. Zabbix+Grafana打造高逼格监控系统

    第一章 zabbix监控的意义 1.1 为什么要监控 业务安全性的保障 系统的保障 产品持续性的运行 1.2 监控的内容 1.3 zabbix的选择性 [x] 纯命令监控太局限性 [x] 监控三剑客( ...

  6. 微服务架构 ------ 插曲 Mybatis逆向工程

    1.首先是pom.xml, 我们需要引入需要的mvn插件 <?xml version="1.0" encoding="UTF-8"?> <pr ...

  7. open live writer安装以及代码高亮、折叠插件安装

    一.目的 方便在本地写博客,不用在浏览器上写. 二.open live writer的安装 下载open live writer 这是我的 链接:https://pan.baidu.com/s/1u8 ...

  8. sklearn聚类评价指标

    sklearn中的指标都在sklearn.metric包下,与聚类相关的指标都在sklearn.metric.cluster包下,聚类相关的指标分为两类:有监督指标和无监督指标,这两类指标分别在skl ...

  9. 理解AMD ,CMD,CommonJS规范

    https://blog.csdn.net/xcymorningsun/article/details/52709608 理解AMD ,CMD,CommonJS规范 2016年09月30日 10:33 ...

  10. find、locate、whereis、which和type

    1. find $ find . -name '*' 2. locate 很快速的搜寻档案系统内是否有指定的档案,比find要快很多 其方法是先建立一个包括系统内所有档案名称及路径的资料库,之后当寻找 ...