输入、输出重定向
重定向是将文件和命令之间的操作符
输入重定向
将文件的内容,导入到命令中
# 统计文件的行数,输入到文件中 >>> [root@localhost ~]# cat test.txt you are right [root@localhost ~]# wc -l < test.txt 1
符号 作用 命令 < 文件 将文件作为命令的标准输入 命令 << 分界符 从标准输入中读入,直到遇见分界符才停止 命令 < 文件1 > 文件2 将文件1作为命令的标准输入并将标准输出到文件2 输入重定向
将命令的输出重定向到文件中
# 演示使用覆盖和追加输出 >>> [root@localhost ~]# cat a.txt 1 [root@localhost ~]# cat test.txt you are right [root@localhost ~]# wc -l < test.txt > a.txt [root@localhost ~]# cat a.txt 1 [root@localhost ~]# wc -l < test.txt > a.txt [root@localhost ~]# cat a.txt 1 [root@localhost ~]# wc -l < test.txt >> a.txt [root@localhost ~]# cat a.txt 1 1
符号 作用 命令 > 文件 将标准输出重定向到一个文件中(清空原有文件的数据) 命令 2> 文件 将错误输出重定向到一个文件中(清空原有文件的数据) 命令 >> 文件 将标准输出重定向到一个文件中(追加到原有内容的后面) 命令 2>> 文件 将错误输出重定向到一个文件中(追加到原有内容的后面) 命令 &>> 文件 将标准输出与错误输出共同写入到文件中(追加到原有内容的后面)
管道符
管道符是命令和命令直接的操作符,将前一个命令的输出结果作为下一个命令的标准输入。
命令1 | 命令2
## 使用管道符修改用户的密码
echo "linuprobe" | passwd --stdin root
## 使用自定义分节符来接受用户的输入,并发送邮件
mail -s "readme" root@linuxprobe.com << over
tip:可以使用多个管道符进行命令的拼接
通配符
>>>
[root@localhost ~]# ls -l *.txt
-rw-r--r--. 1 root root 4 Jan 18 01:21 a.txt
-rw-r--r--. 1 root root 0 Jan 17 01:12 b.txt
-rw-r--r--. 1 root root 15 Jan 10 19:35 test.txt
[root@localhost ~]# ls -l [a,b,c].txt
-rw-r--r--. 1 root root 4 Jan 18 01:21 a.txt
-rw-r--r--. 1 root root 0 Jan 17 01:12 b.txt
[root@localhost ~]# ls -l {a,b,c}.txt
ls: cannot access 'c.txt': No such file or directory
-rw-r--r--. 1 root root 4 Jan 18 01:21 a.txt
-rw-r--r--. 1 root root 0 Jan 17 01:12 b.txt
常见通配规则
符号 | 意思 |
---|---|
* | 零个或者多个任意字符 |
? | 任意单个字符 |
[0-9] | 0-9中的任意一个数字 |
[1,3,5] | 三个字符中的任意一个字符,也可以写为[135] |
{1,3,5} | 如果不存在相应字符的内容,命令输出时会报错 |
常用的转义字符
[root@localhost ~]# PRICE= 5
bash: 5: command not found...
[root@localhost ~]# PRICE=5
[root@localhost ~]# echo 'price is $PRICE'
price is $PRICE
[root@localhost ~]# echo "price is $PRICE"
price is 5
[root@localhost ~]# echo "price is $$PRICE"
price is 2548PRICE
[root@localhost ~]# echo "price is \$$PRICE"
price is $5
[root@localhost ~]# echo `uname`
Linux
字符 | 含义 |
---|---|
'' | 单引号,将里面的内容当作字符对待 |
“” | 双引号,如果里面有变量,则会用变量的值替换变量名 |
\ | 反斜杆,将其后跟的内容转义为字符 |
`` | 反引号,将里面的内容做为命令,执行后输出结果 |
重要的环境变量
命令的执行方式:
- 路径形式直接执行
- 别名的形式执行
- 内部命令
- 外部命令
使用别名alias
通过别名,可以将复杂的命令简化
>>>
[root@localhost ~]# alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='(alias; declare -f) | /usr/bin/which --tty-only --read-alias --read-functions --show-tilde --show-dot'
alias xzegrep='xzegrep --color=auto'
alias xzfgrep='xzfgrep --color=auto'
alias xzgrep='xzgrep --color=auto'
alias zegrep='zegrep --color=auto'
alias zfgrep='zfgrep --color=auto'
alias zgrep='zgrep --color=auto'
[root@localhost ~]# alias test=ls
[root@localhost ~]# test
anaconda-ks.cfg c Downloads Pictures test.txt
a.txt Desktop initial-setup-ks.cfg Public Videos
b.txt Documents Music Templates
[root@localhost ~]# unalias test
[root@localhost ~]# test
判断命令是否为外部命令
>>>
[root@localhost ~]# type cd
cd is a shell builtin
[root@localhost ~]# type uname
uname is /usr/bin/uname
环境变量的使用
linux可以为不同的用户提供不同的运行环境,一个变量对于不同的用户值可能不同
变量名称 | 作用 |
---|---|
HOME | 用户的主目录(即家目录) |
SHELL | 用户在使用的Shell解释器名称 |
HISTSIZE | 输出的历史命令记录条数 |
HISTFILESIZE | 保存的历史命令记录条数 |
邮件保存路径 | |
LANG | 系统语言、语系名称 |
RANDOM | 生成一个随机数字 |
PS1 | Bash解释器的提示符 |
PATH | 定义解释器搜索用户执行命令的路径 |
EDITOR | 用户默认的文本编辑器 |
当Bash解释外部命令的时候,会在用户定义的变量PATH中进行查找,PATH由多个路径值组成,每个路径使用冒号间隔。
[root@localhost ~]# echo $PATH
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/root/bin
[root@localhost ~]# PATH=$PATH:/root/c
[root@localhost ~]# echo $PATH
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/root/bin:/root/c
变量的使用
# 定义变量
WORKDIR=/home/workdir
# 使用变量
echo $WORKDIR
# 提高变量的作用域,将其作为全局变量,其他用户也可以使用
export WORKDIR
# 显示当前用户的所有变量
env
# 显示Bash中的所有变量,包括用户的变量
set