输入输出重定向
命令的输入重定向和输出重定向的原理
输入重定向是指把文件导入到命令中,而输出重定向则是指把原本要输出到屏幕的数据信息写入到指定文件中
- 标准输入重定向(STDIN,文件描述符为0):默认从键盘输入,也可从其他文件或命令中输入。
- 标准输出重定向(STDOUT,文件描述符为1):默认输出到屏幕,也可输出到其他文件或命令中。
- 错误输出重定向(STDERR,文件描述符为2):默认输出到屏幕,同上。
输入重定向中用到的符号及其作用
符号 | 作用 |
---|---|
命令 < 文件 | 将文件作为命令的标准输入 |
命令 << 分界符 | 从标准输入中读入,直到遇见分界符才停止 |
命令 < 文件1 > 文件2 | 将文件1作为命令的标准输入并将标准输出到文件2 |
输出重定向中用到的符号及其作用
符号 | 作用 |
---|---|
命令 > 文件 | 将标准输出重定向到一个文件中(清空原有文件的数据) |
命令 2> 文件 | 将错误输出重定向到一个文件中(清空原有文件的数据) |
命令 >> 文件 | 将标准输出重定向到一个文件中(追加到原有内容的后面) |
命令 2>> 文件 | 将错误输出重定向到一个文件中(追加到原有内容的后面) |
命令 >> 文件 2>&1 | 将标准输出与错误输出共同写入到文件中(追加到原有内容的后面) |
命令 &>> 文件 | 作用同上 ,简化写法 |
代码演示:
# > 重定向echo输出内容到readme.txt中(清空模式)
# >> 重定向echo输出内容到readme.txt中(追加模式)
[root@localhost ~]# echo "Welcome to LinuxProbe.Com" > readme.txt
[root@localhost ~]# echo "Quality linux learning materials" >> readme.txt
[root@localhost ~]# cat readme.txt
Welcome to LinuxProbe.Com
Quality linux learning materials[root@linuxprobe ~]# grep "/sbin/nologin" /etc/passwd | wc -l
33
#通过输入重定向将readme.txt的内容作为wc命令的输入,统计readme.txt文件的行数
[root@localhost ~]# wc -l < readme.txt
2
管道命令符
管道命令符的作用
把前一个命令原本要输出到屏幕的标准正常数据当作是后一个命令的标准输入。
代码演示:
#grep命令找出系统中所有禁止登录的用户,通过管道符,交给wc命令统计行数
[root@localhost ~]# grep "/sbin/nologin" /etc/passwd | wc -l
33
#通过组合echo命令和管道符,再加上passwd的 --stdin参数,实现指令式的更改密码操作
[root@localhost ~]# echo "linuxprobe" | passwd --stdin root
Changing password for user root.
passwd: all authentication tokens updated successfully.
管道符可以在命令组合中多次使用;
#ifconfig输出网卡信息,grep提取出带有IP字段的行,head输出第一行,cut根据空格分隔文本,提取出IP
[root@localhost ~]# ifconfig | grep inet | head -n 1 | cut -d ' ' -f 10
192.168.10.10
命令行的通配符
常用通配符写法及作用:
符号 | 作用 |
---|---|
星号(*) | 代表匹配零个或多个字符 |
问号(?) | 代表匹配单个字符 |
中括号内加上数字[0-9] | 代表匹配0~9之间的单个数字的字符 |
中括号内加上字母[abc] | 代表匹配a、b、c三个字符中的任意一个字符。 |
代码演示:
#列出/dev目录下所有以sda开头的文件
[root@localhost ~]# ls -l /dev/sda*
brw-rw----. 1 root disk 8, 0 May 4 15:55 /dev/sda
brw-rw----. 1 root disk 8, 1 May 4 15:55 /dev/sda1
brw-rw----. 1 root disk 8, 2 May 4 15:55 /dev/sda2
#列出/dev目录下所有以sda开头,其后有且必须有一个字符的文件
[root@localhost ~]# ls -l /dev/sda?
brw-rw----. 1 root disk 8, 1 May 4 15:55 /dev/sda1
brw-rw----. 1 root disk 8, 2 May 4 15:55 /dev/sda2
#列出/dev目录下所有以sda开头,且其后只有一个数字的文件
[root@localhost ~]# ls -l /dev/sda[0-9]
brw-rw----. 1 root disk 8, 1 May 4 15:55 /dev/sda1
brw-rw----. 1 root disk 8, 2 May 4 15:55 /dev/sda2
#列出/dev目录下所有以sda开头,且其后只有1,3,5中任意一个数字的文件
[root@localhost ~]# ls -l /dev/sda[135]
brw-rw----. 1 root disk 8, 1 May 4 15:55 /dev/sda1
常用的转义字符
-
反斜杠(\):使反斜杠后面的一个变量变为单纯的字符串。
-
单引号(’’):转义其中所有的变量为单纯的字符串。
-
双引号(""):保留其中的变量属性,不进行转义处理。
-
反引号(``):把其中的命令执行后返回结果。
代码演示:
[root@localhost ~]# PRICE=5 #定义变量PRICE并赋值为5
[root@localhost ~]# echo "Price is $PRICE" #双引号不对变量进行转义处理
Price is 5 #$加变量名,输出变量的值
[root@localhost ~]# echo "Price is $$PRICE" #在价格前显示一个$符号
Price is 3767PRICE #$$会显示出当前进程的ID号码
[root@localhost ~]# echo "Price is \$$PRICE" #使用反斜杠对$符号进行转义
Price is $5 #输出结果中可以显示出$符号
[root@localhost ~]# echo `ls | wc -l` #将反引号里的内容作为命令执行
6 #结果为当前目录下的文件个数
[root@localhost ~]# echo `notacommand` #执行notacommand
-bash: notacommand: command not found #报错,指令未找到
重要的环境变量
命令在Linux系统中的执行分为4个步骤。
第1步: 判断用户是否以绝对路径或相对路径的方式输入命令;
第2步: Linux系统检查用户输入的命令是否为“别名命令”;
第3步: Bash解释器判断用户输入的是内部命令还是外部命令;
第4步: 系统在环境变量PATH中查找用户输入的命令文件;
代码详解:
#绝对路径与相对路径
[root@localhost ~]# /bin/ls #绝对路径
[root@localhost ~]# ls #相对路径
#别名命令
[root@localhost ~]# alias rm=‘rm -i’ #添加别名命令
[root@localhost ~]# alias rm #显示rm命令的别名信息
alias rm='rm -i' #执行rm命令会被替换为rm -i
[root@localhost ~]# rm readme.txt #rm为定义后的别名命令
rm: remove regular file ‘readme.txt’? n #再次确认是否删除
[root@localhost ~]# unalias rm #取消别名命令
[root@localhost ~]# rm readme.txt #直接删除,无需再次确认
#内外部命令
[root@localhost ~]# type echo
echo is a shell builtin #echo命令是一个内部命令
[root@localhost ~]# type cat
cat is /usr/bin/cat #cat命令是一个外部命令
#环境变量PATH
[root@localhost ~]# echo $PATH #输出环境变量的值
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
[root@localhost ~]# PATH=$PATH:/root/bin #将/root/bin添加到PATH中
[root@localhost ~]# echo $PATH #重新输出PATH变量
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
Linux系统中最重要的10个环境变量
变量名称 | 作用 |
---|---|
HOME | 用户的主目录(即家目录) |
SHELL | 用户在使用的Shell解释器名称 |
HISTSIZE | 输出的历史命令记录条数 |
HISTFILESIZE | 保存的历史命令记录条数 |
邮件保存路径 | |
LANG | 系统语言、语系名称 |
RANDOM | 生成一个随机数字 |
PS1 Bash | 解释器的提示符 |
PATH | 定义解释器搜索用户执行命令的路径 |
EDITOR | 用户默认的文本编辑器 |
代码演示:
#HOME环境变量
[root@localhost ~]# echo $HOME #输出root用户的HOME变量值
/root #root用户的家目录
[root@localhost ~]# su - user #切换用户
Last login: Fri Feb 27 19:49:57 CST 2017 on pts/0
[user@localhost ~]$ echo $HOME #输出user用户的HOME变量值
/home/user #user用户的家目录
#自定义变量
[root@localhost ~]# mkdir /home/workdir #创建目录
[root@localhost ~]# WORKDIR=/home/workdir #创建变量并赋值
[root@localhost ~]# cd $WORKDIR #利用变量切换目录
[root@localhost workdir]# pwd #查看当前工作目录
/home/workdir
[root@localhost workdir]# su user #切换用户
Last login: Fri Mar 20 20:52:10 CST 2017 on pts/0
[user@localhost ~]$ cd $WORKDIR #使用WORKDIR变量
[user@localhost ~]$ echo $WORKDIR #WORKDIR对user用户不可见
[user@localhost ~]$ exit #退出user用户
[root@localhost ~]# export WORKDIR #提升WORKDIR为全局变量
[root@localhost ~]# su user #重新切换为user
Last login: Fri Mar 20 21:52:10 CST 2017 on pts/0
[user@localhost ~]$ cd $WORKDIR #user用户使用WORKDIR
[user@localhost workdir]$ pwd #查看当前工作目录
/home/workdir #user用户使用WORKDIR成功