《Linux就该这么学》--学习笔记(二)第三章 管道符、重定向与环境变量

与文件读写操作有关的重定向技术的的5中模式

标准覆盖输出重定向

标准追加输出重定向

错误覆盖输出重定向

错误追加输出重定向

输入重定向

3.1输入输出重定向

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

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

在这里插入图片描述

man man>readme.txt
echo "sxxx">readme.txt

## 直接将结果输出到s.txt文件中
[linuxprobe@linuxprobe ~]$ ls -l Desktos 2> s.txt
[linuxprobe@linuxprobe ~]$ cat s.txt 
ls: cannot access Desktos: No such file or directory

## 用输入重定向把readme.txt文件导入给wc -l命令
[root@linuxprobe ~]# wc -l < readme.txt
2

这等同于
wc -l < readme.txt
3.2管道命令符

把前一个命令原本要输出到屏幕的数据当作是后一个命令的标准输入

## 统计限制登录的人数
grep "/sbin/nologin" /etc/passwd | wc -l

## 翻页!!!
ls -l /etc/ | more

## 修改用户密码时,通常需要输入两次密码以进行确认,这在编写自动化脚本时将成为一个非常致命的缺陷,通过把管道符和passwd命令的--stdin参数结合,何以用一条命令来完成密码重置操作
[root@linuxprobe ~]# echo "linuxprobe" | passwd --stdin root
Changing password for user root.
passwd: all authentication tokens updated successfully.

**

留个坑,这块东西直接看看不懂,先把后面的学了

**

3.3命令行的通配符

通配符:通用的匹配信息的符号
星号(*):匹配零个或者多个字符
问好(?):匹配单个字符
[0-9]:匹配0~9之间的单个字符
[abc]:匹配a,b,c三个字符中的任意一个字符

3.4常用的转移字符

4个最常用的转移字符:

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

$$:美元符号与变量提取符号合并后$$作用使显示当前程序进程ID号码

3.5重要的环境变量

变量是计算机系统用于保存可变值的数据类型。在Linux系统中,变量名称一般都死大写的,这是一种约定俗成的规范。可以直接通过变量名称来提取到对应的变量值,Linux系统中的环境变量是用来定义系统运行环境的一些参数。
命令在Linux中的执行分为4个步骤:

第一步 判断用户是否以绝对路径或相对路径的方式输入命令(如/bin/ls),如果是的话则直接执行。
第二步 Linux系统检查用户输入的命令是否为“别的命令”,即用一个自定义的命令名称来替换原本的命令名称。可以用alias命令来创建一个属于自己的命令别名,“alias 别名=命令”,取消则是“unalias 别名”。之前在使用rm删除文件时,Linux系统都会要求我们再确认是否执行删除操作,其实这就是Linux系统为了防止用古湖误删除而特意设置的rm别名命令,接下来取消:

[linuxprobe@linuxprobe ~]$ alias rm='rm -i'
[linuxprobe@linuxprobe ~]$ touch aaa.222
[linuxprobe@linuxprobe ~]$ ls
aaa.222  Desktop  Documents  Downloads  etc.tar.gz  linuxprobe  Music  Pictures  Public  Templates  Videos
[linuxprobe@linuxprobe ~]$ rm aaa.222 
rm: remove regular empty file ‘aaa.222’? n
[linuxprobe@linuxprobe ~]$ ls
aaa.222  Desktop  Documents  Downloads  etc.tar.gz  linuxprobe  Music  Pictures  Public  Templates  Videos
[linuxprobe@linuxprobe ~]$ unalias rm
[linuxprobe@linuxprobe ~]$ rm aaa.222 

第三步:Bash解释器判断用户输入的是内部命令还是外部命令。内部命令是解释器内部的指令,会被直接执行;而用户在绝大部分时间输入的是外部命令,这些命令由第四步继续处理。可以使用“type 命令|名称”来判断用户输入的命令是内部还是外部命令
第四步:系统在多个路径中查找用户输入的命令文件,而定义这些路径的变量叫做PATH(默认大写的环境变量),可以简单的把它理解成是“解释器的助手”,作用是告诉Bash解释器待执行的命令可能存放的位置,然后Bash解释器就会逐个查找。PATH是由多个路径组成的变量,每个路径之间用冒号间隔,对这些路径的增加和删除操作将影响到Bash解释器对Linux命令的查找。

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

**

为什么??????

**
问:为什么不能将当前目录(.)添加到PATH中呢?
答:这样可以在某些情况下让用户面取输入命令所在路径的麻烦,但是如果黑客在比较常用的公共目录/tmp中存放了一个与ls或cd命令相同的木马文件,而用户又恰巧在公共目录执行了这些命令,那就可能中招。

可以用env命令来查看Linux中所有的环境变量

##变量比较多,活学活用,分页!
[linuxprobe@linuxprobe ~]$ env |more

在这里插入图片描述
Linux作为一个多用户多任务的操作系统,能够为每个用户提供独立的、合适的工作运行环境,因此,一个相同的变量会因为用户身份的不同而具有不同的值。
其实变量是由固定的变量名与用户或系统设置的变量值两部分组成的,我们完全可以自行创建变量,来满足工作需求。例如设置一个目录的“快捷方式”

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

但是这样的变量不具有全局性,作用范围也有限,默认情况下不能被其他用户使用,可以使用export命令将其提升为全局变量

[root@linuxprobe workdir]# su linuxprobe
Last login: Fri Mar 20 20:52:10 CST 2017 on pts/0
[linuxprobe@linuxprobe ~]$ cd $WORKDIR
[linuxprobe@linuxprobe ~]$ echo $WORKDIR
[linuxprobe@linuxprobe ~]$ exit
[root@linuxprobe ~]# export WORKDIR
[root@linuxprobe workdir]# su linuxprobe
Last login: Fri Mar 20 21:52:10 CST 2017 on pts/0
[linuxprobe@linuxprobe ~]$ cd $WORKDIR
[linuxprobe@linuxprobe workdir]$pwd
/home/workdir

就是照着书敲了一遍···

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值