不管全世界所有人怎么说,我都认为自己的感受才是正确的。
无论别人怎么看,我绝不打乱自己的节奏。喜欢的事自然可以坚持,不喜欢怎么也长久不了。
———《当我谈跑步时我谈些什么》
输入输出重定向
输入重定向是指把文件导入到命令中.
输出重定向是指把原本要输出到屏幕的数据信息写入到指定文件中
在日常学习和工作中,使用输出重定向的频率更高,所以又将输出重定向分为标准输出重定向和错误输出重定向
两种不同的技术,以及清空写入与追加写入
两种模式.
输入重定向
- 标准输入重定向(STDIN, 文件描述符为0):默认从键盘输入,也可以从其他文件或命令中输入.
输入重定向
- 标准输出重定向(STDOUT, 文件描述符为1):默认输出到屏幕
- 错误输出重定向(STDERR, 文件描述符为2):默认输出到屏幕
输入重定向中用到的符号及其作用
符号 | 作用 |
---|---|
命令 < 文件 | 将文件作为命令的标准输入 |
命令 << 分节符 | 从标准输入读入, 直到遇见分界符才停止 |
命令 <文件1> 文件2 | 将文件1作为命令的标准输入并将标准输出到文件2 |
输出重定向中用到的符号及其作用
符号 | 作用 |
---|---|
命令 > 文件 | 将标准输出重定向到一个文件中(清空原有文件的数据) |
命令 2> 文件 | 将错误输出重定向到一个文件中(清空原有文件的数据) |
命令 >> 文件 | 将标准输出重定向到一个文件中(追加到原有内容的后面) |
命令 2>> 文件 | 将错误输出重定向到一个文件中(追加到原有内容的后面) |
命令 >> 文件 2>&1 或 命令 &>> 文件 | 将标准输出与错误输出共同写入到文件中(追加到原有内容的后面) |
管道命令符
执行格式为”命令A | 命令B
”
命令符的作用是”把前一个命令原本要输出到屏幕的数据当作是后一个命令的标准输入”
//例:将 root 密码更改为 linuxprobe
[root@linuxprobe ~]# echo "linuxprobe" | passwd --stdin root
Changing password for user root.
passwd: all authentication tokens updated successfully.
命令行的通配符
通配符就是通用的匹配信息的符号
符号 | 作用 |
---|---|
* | 代表匹配零个或多个字符 |
? | 代表匹配单个字符 |
[0-9] | 代表匹配0~9之间的单个数字的字符 |
[abc] | 代表匹配a,b,c 三个字符中的任意一个字符 |
//例:
[root@linuxprobe ~]# ls -l /dev/sda*
brw-rw----. 1 root disk 8, 0 May 11 10:55 /dev/sda
brw-rw----. 1 root disk 8, 1 May 11 10:55 /dev/sda1
brw-rw----. 1 root disk 8, 2 May 11 10:55 /dev/sda2
[root@linuxprobe ~]# ls -l /dev/sda?
brw-rw----. 1 root disk 8, 1 May 11 10:55 /dev/sda1
brw-rw----. 1 root disk 8, 2 May 11 10:55 /dev/sda2
[root@linuxprobe ~]# ls -l /dev/sda[0-9]
brw-rw----. 1 root disk 8, 1 May 11 10:55 /dev/sda1
brw-rw----. 1 root disk 8, 2 May 11 10:55 /dev/sda2
[root@linuxprobe ~]# ls -l /dev/sda[135]
brw-rw----. 1 root disk 8, 1 May 11 10:55 /dev/sda1
常用的转义字符
常用转义字符
符号 | 含义 |
---|---|
反斜杠(\) | 使反斜杠后面的一个变量变为单纯的字符串 |
单引号(”) | 转义其中所有的变量为单纯的字符串 |
双引号(“”) | 保留其中的变量属性, 不进行转义处理 |
反引号(“) | 把其中的命令执行后返回结果 |
//例:定义名为PRICE的变量并赋值为5,然后输出"Price is $5"
[root@linuxprobe ~]# PRICE=5
[root@linuxprobe ~]# echo "Price is $PRICE"
Price is 5
[root@linuxprobe ~]# echo "Price is $$PRICE"
Price is 107449PRICE
//$$作用是显示当前程序的进程ID号码
[root@linuxprobe ~]# echo "Price is \$$PRICE"
Price is $5
//通过转义字符"\"来使第一个 $ 作为美元符
//例2:使用 反引号 输出 系统版本和内核信息
[root@linuxprobe ~]# echo `uname -a`
Linux linuxprobe.com 3.10.0-693.el7.x86_64 #1 SMP Thu Jul 6 19:56:57 EDT 2017 x86_64 x86_64 x86_64 GNU/Linux
重要的环境变量
在Linux系统中,变量名称一般都是大写的,这是一种约定俗成的规范.
Linux系统中的环境变量是用来定义系统运行环境的一些参数.
为了通过环境变量帮助Linux系统构建起能够为用户提供服务的工作运行环境,需要数百个变量协同工作才能完成.
如何理解环境变量
通过一个例子理解变量
在Linux系统中一切都是文件,Linux命令也不例外.
简单来说,命令在Linux中的执行分为四个步骤
第一步:判断用户是否以绝对路径或相对路径的方式输入命令(如/bin/ls),如果是的话则直接执行.
第二步:Linux系统检查用户输入的命令是否为 “别名命令”,即用一个自定义的命令名称来替换原来的命令名称.可以用 alias 命令来创建一个属于自己的命令别名,格式为 “alias 别名=命令
“.若要取消一个命令别名,则是用 unalias 命令,格式为 “unalias 别名”.在使用 rm 命令删除文件时,Linux 系统都会要求我们再确认是否执行删除操作,其实这就是 Linux 系统为了防止用户误删除文件而特意设置的 rm 别名命令,接下来我们把它取消掉:
[root@linuxprobe ~]# ls
haha heihei linuxprobe readme2.txt readme.txt stderr.txt
[root@linuxprobe ~]# rm haha
rm: remove regular empty file ‘haha’? y
[root@linuxprobe ~]# alias rm
alias rm='rm -i'
[root@linuxprobe ~]# unalias rm
[root@linuxprobe ~]# rm heihei
[root@linuxprobe ~]#
第三步: Bash解释器判断用户输入的是内部命令还是外部命令.内部命令是解释器内部的命令,会被直接执行;而用户在绝大部分时间输入的是外部命令,这些命令交由步骤4继续处理.可以使用”type 命令名称”来判断用户输入的命令是内部命令还是外部命令.
第四步:系统在多个路径中查找用户输入的命令文件,而定义这些路径的变量叫作PATH,可以简单地把它理解成是”解释器的小助手”,作用是告诉Bash解释器待执行的命令可能存放的位置.然后Bash解释器就会在这些位置中逐个查找.PATH是由多个路径值组成的变量,每个路径值之间用冒号间隔,对这些路径的增加和删除操作将会影响到Bash解释器对Linux命令的查找
[root@linuxprobe ~]# echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/linuxprobe/.local/bin:/home/linuxprobe/bin
[root@linuxprobe ~]# PATH=$PATH:/root/bin
[root@linuxprobe ~]# echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/linuxprobe/.local/bin:/home/linuxprobe/bin:/root/bin
Linux中重要的10个环境变量
变量名称 | 作用 |
---|---|
HOME | 用户的主目录(即家目录) |
SHELL | 用户在使用的SHELL解释器名称 |
HISTSIZE | 输出的历史命令记录条数 |
HISTFILESIZE | 保存的历史命令记录条数 |
邮件保存路径 | |
LANG | 系统语言,语系名称 |
RANDOM | 生成一个随机数字 |
PS1 | Bash解释器的提示符 |
PATH | 定义解释器搜索用户执行命令的路径 |
EDITOR | 用户默认的文本编辑器 |
Linux作为一个多用户多任务的操作系统,能够为每个用户提供独立的,合适的工作运行环境,因此,一个相同的变量会因为用户身份的不同而具有不同的值.