linux笔记2-重定向、通配符与环境变量

重定向

标准输入(STDIN) 文件描述为0 默认从键盘输入
标准输出(STDOUT)文件描述为1 默认输出到屏幕
错误输出(STDERR)文件描述为2 默认输出到屏幕
通过命令和服务器进行交互过程中 的输入输出示例下:

[root@bogon ~]# ls root    // 标准输入
anaconda-ks.cfg  lines.txt  test  test2.txt  test.txt  tstd   // 标准输出
[root@bogon ~]# ls CCC //标准输入
ls: cannot access CCC: No such file or directory  // 错误输出

输出重定向:
命令 > 文件 标准输出重定向到一个文件中(覆盖文件原内容)
命令 2> 文件 错误输出重定向到一个文件中(覆盖文件原内容)
命令 >> 文件 标准输出重定向到一个文件中(追加到文件中)
命令 2>> 文件 标准输出重定向到一个文件中(追加到文件中)
命令 >> 文件 2>$1 标准输出与错误输出都重定向到一个文件中(追加到文件中)
输入重定向:
命令 < 文件 将文件作为命令的标准输入
命令 << 分解符 从标准输入中读入,只到遇见分解符才停止
命令 < 文件1 >文件2 将文件1作为命令的标准输入并将标准输出到文件2

示例

[root@bogon tmpdir]# man bash > manbash.txt
[root@bogon tmpdir]# echo "hahaha" >test.txt
[root@bogon tmpdir]# cat test.txt
hahaha
[root@bogon tmpdir]# echo "hahah" >> test.txt
[root@bogon tmpdir]# cat test.txt
hahaha
hahah
[root@bogon tmpdir]# cat test.txt |wc -l
2
[root@bogon tmpdir]# wc -l <test.txt
8
[root@bogon tmpdir]# echo <<over
> hi 
> nice to meet you 
> Hi 
> over

命令通配符

有时候我们想进行批量操作,这个时候需要用到通配符。如查看所有sda开头的目录属性

* 匹配另个或多个字符
?匹配任意单个字符
[0-9]匹配范围内数字
[abc]匹配范围内的任意字符
[root@bogon tmpdir]# ls /dev/vcs*
/dev/vcs   /dev/vcs2  /dev/vcs4  /dev/vcs6  /dev/vcsa1  /dev/vcsa3  /dev/vcsa5
/dev/vcs1  /dev/vcs3  /dev/vcs5  /dev/vcsa  /dev/vcsa2  /dev/vcsa4  /dev/vcsa6
[root@bogon tmpdir]# ls /dev/vcs[0-9]
/dev/vcs1  /dev/vcs2  /dev/vcs3  /dev/vcs4  /dev/vcs5  /dev/vcs6
\(反斜杠) 转义后面单个字符
'' (单引号)转义所有字符
"" (双引号)  变量依然生效
··(反引号 esc下的键)  执行命令语句
[root@bogon tmpdir]# PRICE=5
[root@bogon tmpdir]# echo "price is $PRICE"
price is 5
[root@bogon tmpdir]# echo "price is $$PRICE"
price is 2902PRICE
[root@bogon tmpdir]# echo "price is \$$PRICE"
price is $5
[root@bogon tmpdir]# echo 'price is \$$PRICE'
price is \$$PRICE
[root@bogon tmpdir]# uname -a
Linux bogon 3.10.0-1127.el7.x86_64 #1 SMP Tue Mar 31 23:36:51 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
[root@bogon tmpdir]# echo echo `uname -a`
echo Linux bogon 3.10.0-1127.el7.x86_64 #1 SMP Tue Mar 31 23:36:51 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
[root@bogon tmpdir]# 

PATH变量

alias 命令用于设置命令的别名,格式为:“alias 别名=命令”
如:担心复制文件时误将文件覆盖 可以执行 alias cp = “cp -i” ,每次覆盖都会询问用户
unalias 命令用于取消别名 格式:“unalias 别名”

[root@bogon tmpdir]# alias cp="cp -i"
[root@bogon tmpdir]# unalias cp

linux中一切皆文件,命令也是文件。当输入一个命令执行时的执行步骤:
1、如果是绝对路径的命令则直接执行
2、检查是否为别名命令
3、由bash判断时内部命令还是外部命令
内部命令:属于解释器内部的
外部命令:独立于解释器外的命令文件
4、通过$PATH变量中定义的路径查找命令然后执行。
PATH环境变量展示和修改

[root@bogon tmpdir]# PATH=$PATH:/root
[root@bogon tmpdir]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt/apps/jdk/bin:/root/bin:/root

谨慎而有经验的运维人员接手一台linux服务器后一定会质细腻命令查看下$PATH变量中是否有可以的目录

环境变量

linux中有很多环境变量可以使用env 来查看 如下:

[root@bogon tmpdir]# env
XDG_SESSION_ID=15
HOSTNAME=bogon
TERM=vt100
SHELL=/bin/bash
HISTSIZE=1000

变量定义和查看
变量定义:变量名称=值

一个用户定义的变量不能被其他用户使用,即定义变量的作用范围为当前用户。
可以使用 export 将局部变量升级为全局变量

[root@bogon tmpdir]# ETC="/etc"
[root@bogon tmpdir]# echo
[root@bogon tmpdir]# echo $ETC
/etc
[root@bogon tmpdir]# su hadoop
[hadoop@bogon tmpdir]$ echo $ETC
[hadoop@bogon tmpdir]$ su root
Password: 
[root@bogon tmpdir]# export ETC
[root@bogon tmpdir]# echo $ETC
[root@bogon tmpdir]# ETC="/etc"
[root@bogon tmpdir]# export ETC
[root@bogon tmpdir]# echo $ETC
/etc
[root@bogon tmpdir]# su hadoop
[hadoop@bogon tmpdir]$ echo $ETC
/etc

猜你喜欢

转载自blog.csdn.net/zhangxm_qz/article/details/109223575