3.1 输入输出重定向
输入重定向是指把文件导入到命令中
输出重定向是指把文件要输出到屏幕的数据信息写入到指定改的文件中
- 标准输入重定向(STDIN,文件描述符为0):默认从键盘输入,也可以从其他文件或命令中输入
- 标准输出重定向(STDOUT,文件描述符为1):默认输出到屏幕
- 错误输出重定向(STDERR,文件描述符为2):默认输出到屏幕
输入重定向用到的符号及其作用
符号 | 作用 |
---|---|
命令 < 文件 | 将文件作为命令的标准输入 |
命令 << 分界符 | 从标准输入中读入,知道遇见分界符才停止 |
命令 < 文件1 > 文件2 | 将文件1作为命令的标准输入并键高标准输出到文件2 |
输出重定向用到的符号及作用
符号 | 作用 |
---|---|
命令 > 文件 | 将标准输出重定向到一个文件中(清空原有文件的数据) |
命令 2> 文件 | 将错误输出重定向到一个文件中(清空原有文件的数据) |
命令 >> 文件 | 将标准输出重定向到一个文件中(追加到原有内容的后面) |
命令 2>> 文件 | 将错误输出重定向到一个文件中(追加到原有的内容后面) |
命令 >> 文件 2>&1 或者 命令 &>> 文件 | 将标准输出与错误输出共同写入到文件中(追加原有内容的后面) |
对于重定向中的标准输出模式,可以省略文件描述符1 不写,而错误输出的文件描述符2必须写。接下来我们同过一个示例来理解上面的内容。该示例主要是通过标准输出重定向键man bash 命令原本要输出到屏幕的信息写入到文件readme.txt中,然后显示readme.txt文件中的内容。
[linuxprobe@linuxprobe Desktop]$ touch readme.txt
[linuxprobe@linuxprobe Desktop]$ man bash > readme.txt
[linuxprobe@linuxprobe Desktop]$ cat readme.txt
BASH(1) General Commands Manual BASH(1)
NAME
bash - GNU Bourne-Again SHell
SYNOPSIS
bash [options] [file]
COPYRIGHT
Bash is Copyright (C) 1989-2011 by the Free Software Foundation, Inc.
DESCRIPTION
...
接下来用例子说明标准输出重定向与错误输出重定向的区别
[linuxprobe@linuxprobe Desktop]$ cat asd
It's the loneliest feeling not to know who you are.
最孤独的感觉莫过于不知道自己是谁。
[linuxprobe@linuxprobe Desktop]$ ls -l zxc
-rw-rw-r--. 1 linuxprobe linuxprobe 104 Feb 22 16:42 zxc
[linuxprobe@linuxprobe Desktop]$ ls -l zxc > asd
[linuxprobe@linuxprobe Desktop]$ cat asd //说明输出标准重定向有将内容输入文档,但并没有显示在屏幕上
-rw-rw-r--. 1 linuxprobe linuxprobe 104 Feb 22 16:42 zxc
[linuxprobe@linuxprobe Desktop]$ ls -l zxc 2> asd
-rw-rw-r--. 1 linuxprobe linuxprobe 104 Feb 22 16:42 zxc
[linuxprobe@linuxprobe Desktop]$ cat asd //说明输出错误重定向将内容输出屏幕,但却把文档里面的内容清空
如果命令是错误的,执行同上的操作,报错信息会在执行输出错误重定向是写入文档
输入重定向的例子如下
[linuxprobe@linuxprobe Desktop]$ wc -l < readme.txt
2
3.2 管道命令符
命令符的作用是“把前一个命令原本要输出到屏幕的数据当做是后一个命令的标准输出”管道命令符可将下面两条命令合并成一条,具体两条命令如下:
- 找出被限制登录用户的命令是grep “/sbin/nologin”/etc/passwd;
- 统计文本行数的命令则是wc -l。
现在要做的就是把搜索命令的输出值传入给统计命令,则可用管道命令符:
[linuxprobe@linuxprobe Desktop]$ grep "/sbin/nologin" /etc/passwd | wc -l
33
以more形式显示/etc目录中的文件列表以及属性信息(正常会一股脑给你)
因此管道符相当于各个命令的融合器,将各个命令通过一定顺序的组合(多个管道符组合:命令A|命令B|命令C),融合成一个更加好用便捷的命令,所以管道命令符很好用
试着尝试修改用户密码
[root@linuxprobe Desktop]# echo "asd" | passwd --stdin root
Changing password for user root.
passwd: all authentication tokens updated successfully.
一开始修改密码是因为没有获得root而无法修改密码,因此要有一个获取root的过程,输入密码时密码是不显示的,所以不要以为没有输入。获取root的链接
3.3 命令行的通配符
通配符就是通用的匹配信息的符号,比如*代表匹配零个或者多个字符,?代表匹配单个字符[0-9]代表匹配0~9之间的单个数字的字符。
[root@linuxprobe Desktop]# ls -l /dev/sda*
brw-rw----. 1 root disk 8, 0 Feb 22 17:29 /dev/sda
brw-rw----. 1 root disk 8, 1 Feb 22 17:29 /dev/sda1
brw-rw----. 1 root disk 8, 2 Feb 22 17:29 /dev/sda2
[root@linuxprobe Desktop]# ls -l /dev/sda?
brw-rw----. 1 root disk 8, 1 Feb 22 17:29 /dev/sda1
brw-rw----. 1 root disk 8, 2 Feb 22 17:29 /dev/sda2
[root@linuxprobe Desktop]# ls -l /dev/sda[0-9]
brw-rw----. 1 root disk 8, 1 Feb 22 17:29 /dev/sda1
brw-rw----. 1 root disk 8, 2 Feb 22 17:29 /dev/sda2
3.4 常用的转义字符
四个常用的字符如下:
- 反斜杠(\):是反斜杠后面的一个变量变为单纯的字符串
- 单引号(’’):转义其中所有的变量为单纯的字符串
- 双引号(“”):保留其中的变量属性,不进行转义处理
- 反引号(``):把其中的命令执行后返回结果
[root@linuxprobe Desktop]# asd=5
[root@linuxprobe Desktop]# echo "prince is $asd"
prince is 5
[root@linuxprobe Desktop]# echo "prince is $$asd" //得到的并不是想要的结果,故要用反斜杠转义$,$$作用是显示当前程序进程的ID
prince is 16576asd
[root@linuxprobe Desktop]# echo "prince is \$$asd"
prince is $5
[root@linuxprobe Desktop]# echo `uname -a` //uname 命令用于查看系统内核与系统版本等信息
Linux linuxprobe.com 3.10.0-123.el7.x86_64 #1 SMP Mon May 5 11:16:57 EDT 2014 x86_64 x86_64 x86_64 GNU/Linux
3.5 重要的环境变量
用户在多个路径中寻找用户输入的命令文件,而定义这些路径的变量叫做PATH,他的作用是告诉Bash解释器执行行的命令可能存放的位置,然后BASH解释器就会在这些位置查找。PATH是由多个路径组成的变量,每个路径用冒号隔开,对这些路径的增加和删除会影响到BASH解释器对linux命令的查找。这些环境变量都需要大写
书中列举了10个常用的环境变量:
变量名称 | 作用 |
---|---|
HOME | 用户的主目录(即家目录) |
SHELL | 用户在使用的Shell解释器名称 |
HISTSIZE | 输出的历史命令记录条数 |
HISTFILESIZE | 保存的历史命令记录条数 |
邮件保存路径 | |
LANG | 系统语言、语系名称 |
RANDOM | 生成一个随机数字 |
PS1 | Bash解释器的提示符 |
PATH | 定义解释器搜索用户执行命令的路径 |
EDITOR | 用户默认的文本编辑器 |
export 可以将一般变量转化为全局变量