LinuxNote 第三章 管道符,重定向与环境变量

第三章 管道符、重定向与环境变量

  • 重定向:命令与文件之间
  • 管道符:命令与命令之间

3.1 输入输出重定向

输入重定向:指把文件导入到命令中; (同 inputStream 理解)
输出重定向:指把原本要输出到屏幕的数据信息写入到制订文件中;(同 outputStream 理解)

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

输入重定向

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

输出重定向

符号作用
命令 > 文件将标准输出重定向到文件中(清空原文件)
命令 >> 文件将标准输出重定向到文件中(追加输出)
命令 2> 文件将错误输出重定向到文件中(清空原文件)
命令 2>> 文件将错误输出重定向到文件中(追加输出)
命令 &> 文件将标准输出和错误输出都重定向到文件中(清空原文件)
命令 &>> 文件将标准输出和错误输出都重定向到文件中(追加输出)
  • 示例:
[root@localhost ~]$ wc -l < initial-setup-ks.cfg
49
[root@localhost ~]$ wc -l initial-setup-ks.cfg >> a.txt

3.2 管道命令符

管道命令符:将前面命令原先要输出到屏幕上的内容,交由后面的命令二次处理(任意门);
管道命令符可以多嵌套使用

[root@localhost ~]$ ls -l /etc/ | more		# 使用more命令来浏览文件列表
total 1344
-rw-r--r--.  1 root root        16 Jan  9 01:00 adjtime
-rw-r--r--.  1 root root      1518 Sep 10  2018 aliases
drwxr-xr-x.  3 root root        65 Jan  9 00:55 alsa
drwxr-xr-x.  2 root root      4096 Jan  9 00:58 alternatives
-rw-r--r--.  1 root root       541 Oct  2  2018 anacrontab
...

#通过把管道符和passwd命令的--stdin参数相结合,可以用一条命令来完成密码重置操作
[root@linuxprobe ~]$ echo "linuxprobe" | passwd --stdin root	# --stdin参数专门用来接收标准输入
Changing password for user root.
passwd: all authentication tokens updated successfully.

3.3 命令行的通配符

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

使用范例及注意:

[root@localhost ~]$ ls -l /dev/sda*
brw-rw----. 1 root disk 8, 0 Jan 15 07:38 /dev/sda
brw-rw----. 1 root disk 8, 1 Jan 15 07:38 /dev/sda1
brw-rw----. 1 root disk 8, 2 Jan 15 07:38 /dev/sda2
[root@localhost ~]$ ll /dev/sd[:alpha:]
brw-rw----. 1 root disk 8, 0 Jan 15 07:38 /dev/sda
[root@localhost ~]$ ll /dev/s[a-Z][a-Z][0-9]	# 可以多个连接使用
brw-rw----. 1 root disk 8, 1 Jan 15 07:38 /dev/sda1
brw-rw----. 1 root disk 8, 2 Jan 15 07:38 /dev/sda2
[root@localhost ~]$ ls -l /dev/sda{1,2,3}		# 大括号范围内的若不存在则会报错
ls: cannot access '/dev/sda3': No such file or directory	# sda3不存在,报错提示
brw-rw----. 1 root disk 8, 1 Jan 15 07:38 /dev/sda1
brw-rw----. 1 root disk 8, 2 Jan 15 07:38 /dev/sda2
[root@localhost ~]$ ls -l /dev/sda[1,2,3]		# 中括号范围内若不存在不会报错
brw-rw----. 1 root disk 8, 1 Jan 15 07:38 /dev/sda1
brw-rw----. 1 root disk 8, 2 Jan 15 07:38 /dev/sda2

3.4 常用转义字符

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

[root@localhost ~]$ echo PRICE
PRICE
[root@localhost ~]$ PRICE=5
[root@localhost ~]$ echo "price is $PRICE"
price is 5
[root@localhost ~]$ echo 'price is $PRICE'
price is $PRICE
[root@localhost ~]$ echo "price is $$PRICE"		# $$的作用是显示当前程序的进程ID号码
price is 2569PRICE
[root@localhost ~]$ echo "price is \$$PRICE"
price is $5
[root@localhost ~]$ echo `uptime`
08:07:28 up 28 min, 1 user, load average: 0.08, 0.05, 0.06

3.5 重要的环境变量

变量名称一般都是大写的,这是一种约定俗称的规定;变量可以是值、路径等等
变量的修改立即生效,但重启后会重置,要修改/etc/profile才能永久生效;
变量不具有全局性,默认情况下不能被其他用户使用,可以使用export命令提升其为全局变量

解释器执行命令的步骤:

  • 1.判断用户是否以绝对路径或相对路径的方式输入命令(如/bin/ls),如果是的话则直接执行;
  • 2.Linux系统检查用户输入的命令是否为“别名命令”;(启用、解除别名见下)
  • 3.Bash解释器判断用户输入的是内部命令(少于1%)还是外部命令。内部命令是解释器内部的指令,会被直接执行;而用户在绝大部分时间输入的是外部命令(99%),这些命令交由步骤4继续处理。可以使用“type 命令名称”来判断用户输入的命令是内部命令还是外部命令:
  • 4.系统在多个路径中查找用户输入的命令文件,而定义这些路径的变量叫作PATH,可以简单地把它理解成是“解释器的小助手”,作用是告诉Bash解释器待执行的命令可能存放的位置,然后Bash解释器就会乖乖地在这些位置中逐个查找。PATH是由多个路径值组成的变量,每个路径值之间用冒号间隔,对这些路径的增加和删除操作将影响到Bash解释器对Linux命令的查找。
# 设置与取消别名
[root@localhost ~]$ alias ll	# 查看ll是什么的别名
alias ll='ls -l --color=auto'
[root@localhost ~]$ unalias ll	# 取消ll别名
[root@localhost ~]$ alias lx=ls	# 给ls取别名 lx

# 查看命令所属
[root@localhost ~]$ type echo
echo is a shell builtin		# 内部命令
[root@localhost ~]$ type ls
ls is aliased to `ls --color=auto'	# 别名
[root@localhost ~]$ type uptime
uptime is /usr/bin/uptime	# 外部命令

# 查看和修改外部命令文件查找路径
[root@localhost ~]$ echo $PATH
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/root/bin
[root@localhost ~]$ PATH=$PATH:/root/bin
[root@localhost ~]$ echo $PATH
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/root/bin:/root/bin

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

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

注意区分变量与环境变量

[root@localhost ~]$ echo $HOME
/root
[root@localhost ~]$ echo $SHELL
/bin/bash
[root@localhost ~]$ echo $LANG
en_US.UTF-8

[root@localhost ~]$ export $PRICE	# 提升变量为全局变量,其他用户也可以使用
[root@localhost ~]$ env				# 查看已经定义的环境变量

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mitays

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值