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

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

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

文章主要内容

  • 输入输出重定向
  • 管道命令符
  • 命令行的通配符
  • 常用的转义字符
  • 重要的环境变量

输入输出重定向

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

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

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

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

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

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

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

管道符(|)

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

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

1 grep "/sbin/nologin" /etc/passwd | wc -l     #通过匹配关键词/sbin/nologin找出所有被限制登录系统的用户,并通过wc命令进一步统计行数,得出所有被限制登录系统的用户有多少个。
2 ls -l /etc | more                            #用翻页的形式查看/etc目录中的文件列表及属性信息
3 echo "123456" | 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[135]        #结果:sda1,sda3,sda5
ls -l sda[1-2,5-6]    #结果:sda1,sda5
ls -l sda[1-100]      #结果:sda1

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

常用的转义字符

  • 反斜杠(\):使反斜杠后面的一个变量变为单纯的字符串。
  • 单引号(''):转义其中所有的变量为单纯的字符串。
  • 双引号(""):保留其中的变量属性,不进行转义处理。
  • 反引号(``):把其中的命令执行后返回结果。
1 PRICE=5                         #定义一个变量(变量一般用大写)PRICE,值为5,
2 echo "Price is $PRICE"          #结果:Price is 5。
3 echo "Price is $$PRICE"         #结果:Price is 2682PRICE。$$作用是显示当前程序的进程ID号码(PID)
4 echo "Price is \$$PRICE"        #结果:Price is $5。反斜杠把前面的$变成单纯的字符串5 echo "Price is '$$$$'$PRICE"    #结果:Price is 268226825。双引号在最外层,里层的单引号无法起到把$$变成普通字符串的作用
6 echo Price is '$$$$'$PRICE      #结果:Price is $$$$5。最外层没有双引号括住,单引号起作用,$$只是单纯的字符串
7 echo '"Price is $$$$$PRICE"'    #结果:"Price is $$$$$PRICE"。单引号在最外层,里层的双引号无法起到保留变量属性的作用
8 AB=`uname -a`                   #用反引号把命令括起来(`命令`),可以把命令的执行结果赋值给变量。9 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 别名。
1 alias nmb='echo ni ma bi'    #给命令echo ni ma bi起一个别名为nmb
2 alias nmb                    #查看别名nmb对应的真实命令
3 nmb                          #执行nmb别名命令,实际效果同echo ni ma bi,输出ni ma bi
4 unalias nmb                  #取消别名nmb
5 nmb                          #再执行别名nmb,发现已经无法使用了

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

1 type echo     #输出结果:echo is a shell builtin,说明echo命令是内部命令
2 type rm       #输出结果:rm is aliased to 'rm -i',
3 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 变量名。

1 TEST=7148        #当前用户为root,创建变量TEST,值为7148.这种方式创建的变量不会永久生效。仅对当前命令行窗口生效,若完整切换用户(su - XXX)后将失效.若要永久生效则要修改/etc/profile和~/.bashrc。
2 echo $TEST       #输出变量TEST的值,输出结果为7148
3 su linuxprobe    #切换到linuxprobe用户
4 echo $TEST       #当前用户为linuxprobe,因为TEST不是全局变量,只有其创建者root才能使用。因此输出结果为空行
5 exit             #退出linuxprobe
6 export TEST      #linuxprobe退出后返回root,把变量变为全局变量
7 su linuxprobe    #切换到linuxprobe
8 echo $TEST       #此时TEST是全局变量,因此linuxprobe可以使用TEST,输出结果为7148

书本笔记

posted @ 2019-05-12 14:44 RNG丶Perfume 阅读( ...) 评论( ...) 编辑 收藏

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

  1. linux下使用source /etc/profile保存配置后,新的环境变量只能在一个终端里面有效

    博客园 首页 新随笔 联系 管理 订阅 <div class="blogStats"><!--done--> 随笔- 6  文章- 2  评论- 2 < ...

  2. Linux学习03——管道符、重定向和环境变量

    20190913: 今天学习了管道符.重定向和环境变量三个知识: 1.重定向: 首先重定向,我们分为输入重定向和输出重定向 输出重定向: 是指把原本要输出到屏幕的数据信息写入到指定文件中. 输出重定向 ...

  3. linux管道符、重定向与环境变量。

    3.1 输入输出重定向 既然我们已经在上一章学完了几乎所有基础且常用的Linux命令,那么接下来的任务就是把多个Linux命令适当地组合到一起,使其协同工作,以便我们更加高效地处理数据.要做到这一点, ...

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

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

  5. Linux基础.umask,权限影响,文件类型,/根目录文件,环境变量,alias别名,man手册

    一. 为什么文件的起始权限都是664,目录都是775? 文件: 默认创建没有执行权限 目录: 默认有执行权限 --> 因为目录没有没有执行权限,就不能切换到目录中 -rw-rw-r-- 1 ge ...

  6. Linux Centos8系统 修改 /etc/profile文件,添加java相关的环境变量

    目录 问题现象: 问题分析: 解决方法: 问题现象: 今天在linux系统上安装了jdk并打算配置环境变量,但在修改 /etc/profile文件的时候,却无法保存了,出现了警告:         E ...

  7. Jmeter学习笔记一:Jmeter安装以及环境变量配置

    什么是Jmeter Apache JMeter是Apache组织开发的基于Java的压力测试工具. 适用的测试领域: 用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域.它 ...

  8. 部署虚拟环境安装Linux系统(Linux就该这么学)笔记

    作者:chenhao 1.安装配置VM虚拟机 VMware WorkStation虚拟机软件是一款桌面计算机虚拟软件,让用户能够在单一主机上同时运行多个不同的操作系统.每个虚拟操作系统的硬盘分区.数据 ...

  9. Linux笔记-shell脚本中加载环境变量(适用于crontab)

    这里主要是crontab中调用sh总是提示找不到xxxx的环境变量有问题,单独运行却没问题. 这里只要在对应的sh文件中添加: #!/bin/bash. /etc/profile 这样既可加载/etc ...

最新文章

  1. Python中*args和**kwargs的区别
  2. 【机器视觉案例】(5) AI视觉,远程手势控制虚拟计算器,附python完整代码
  3. GDCM:处理DICOM文件的示例
  4. js 原型prototype继承模式
  5. 1-5 三整数排序(算法竞赛入门经典)
  6. android oneshot自动播放bug,移动端常见bug汇总001
  7. JUnit 4测试驱动开发结构图
  8. 天地图给一个区域添加标题_一个小罐子就能做腌酸菜,7天就能吃,无任何添加,吃着更放心...
  9. 联通3G用户破千万 建成全球规模最大WCDMA网络
  10. 《奇点来临》——阿西莫夫三大定律
  11. asp程序ajax怎么写,ASP+AJAX+ACCESS数据库实例讲解三个步骤分享
  12. matlab huffman树,Huffman树图像加密算法
  13. 2021年茶艺师(初级)考试总结及茶艺师(初级)模拟试题
  14. nyoj-506-洗澡
  15. 3nf mysql表_数据库三大范式(1NF,2NF,3NF)及ER图
  16. 从淘宝 UWP 的新功能 -- 比较页面来谈谈 UWP 的窗口多开功能(转)
  17. 实现一个操作系统系列2-《操作系统真象还原》BIOS启动
  18. VINS-Mono视觉SLAM总体设计框架解读
  19. springboot 集成 actuator
  20. php mysql mvc_PHP MVC框架【Myphp】的编写

热门文章

  1. 表格html适应手机端,纯CSS实现响应式表格适应移动端
  2. 【 Settlers‘ Training 题解(Codeforce)】
  3. 你负责看比赛,其他的放着我来 | 苏宁体育赛事直播频道化运营关键技术
  4. 手机html5 tap事件,HTML5触摸事件演化tap事件介绍
  5. GPS(rinex格式)数据解析详细解读
  6. 查看mysql错误日志命令_查看mysql错误日志
  7. 双指缩放canvas图片_小程序实现图片双指缩放
  8. CUDA 分块矩阵乘法
  9. 零基础掌握交互设计的重点笔记
  10. 三房转债,福新转债上市价格预测