Linux:管道符、重定向与环境变量

准备学习下大数据,查了下大数据的学习步骤,首先进行Linux的学习。Linx日常开发中还是经常使用到的,不过也没有系统的去学习过,毕竟公司也有运维,也就偷懒了。本文是根据刘遄老是的Linux就该这么学,做的阅读笔记。如果对这本书有兴趣,可以在https://www.linuxprobe.com/docs/LinuxProbe.pdf 在线阅读,当然为了表示支持,我自己也还是买了本实体书,哈哈ヾノ≧∀≦)o

输入输出重定向

输入重定向是指把文件导入到命令中,输出重定向是指把输出到屏幕的信息输出到实体文件中。
输入输出重定向分为3种:

  1. 输入重定向(STDIN,文件描述0),默认可以从键盘或者其他实体文件输入
  2. 输出重定向(STDOUT,文件描述1),默认输出到屏幕
  3. 错误输出重定向(STDERR,文件描述2),默认输出屏幕

输入重定向语法符号

符号 作用
命令 < 文件 将文件作为命令的标准输入
命令 << 分界符 从表示输入中读入,知道遇到分界符才停止(EOF)
命令 < 文件1 > 文件2 将文件1作为命令的输入,并输出到文件2中

例1:使用输入重定向统计文件行数

no5|no5-1|no5-2[root@localhost test]# wc -l table
4 table
[root@localhost test]# wc -l < table
4
[root@localhost test]# cat table | wc -l
4
[root@localhost test]#

其中 wc -l < tablecat table | wc -l 的命令效果一样的

例2:使用命令输入符输入文字

[root@localhost ~]# cat << EOF
> qwe
> ddd
> werwe
> EOF
qwe
ddd
werwe
[root@localhost ~]#

输出重定向的语法符号

符号 作用
命令 > 文件 将标准输出重定向到一个文件中(清空原有的文件内容)
命令 2> 文件 将错误信息输出重定向到一个文件中(清空原有文件内容)
命令 >> 文件 将标准输出重定向到一个文件中(追加到原有内容后面)
命令 2>> 文件 将错误信息输出重定向到一个文件中(追加到原有内容后面)
命令 >> 文件 2>&1 或者 命令 &>> 文件 将标准输出与错误信息共同输出到文件中(追加到原有内容后面)

在输出重定向中,可以省略文件描述1不写,不过错误输出的文件描述2必须要写

例1:把man bash命令输出是内容保存在text文件中

[root@localhost test]# touch text
[root@localhost test]# man bash > text
[root@localhost test]# more -2 text
BASH(1)     General Commands Manual     BASH(1)

[root@localhost test]#

例2:覆盖text文件中的内容

[root@localhost test]# echo "内容覆盖" > text
[root@localhost test]# cat text
内容覆盖
[root@localhost test]#

例3:把错误信息输出到text文件中

[root@localhost test]# ls -l abc
ls: 无法访问abc: 没有那个文件或目录
[root@localhost test]# ls -l abc 2> text
[root@localhost test]# cat text
ls: 无法访问abc: 没有那个文件或目录
[root@localhost test]#

管道命令符

管道符 | 其执行格式为 命令A | 命令B 其作用是把前一个命令原本要输出到屏幕上的标准正常数据当做后一个命令的标准输入,管道符不只是可以两个命令,也可以多个命令输出 命令A | 命令B | 命令C | ......。其功能十分强大,笔记这里就只记录下简单的用法,复杂用法考自己积累咯。

例1:翻页查看etc 目录下的内容

[root@localhost test]# ls -l /etc/ | more -10
总用量 1432
drwxr-xr-x.  3 root   root        101 5月   3 22:57 abrt
-rw-r--r--.  1 root   root         16 5月   3 23:02 adjtime
-rw-r--r--.  1 root   root       1518 6月   7 2013 aliases
-rw-r--r--.  1 root   root      12288 5月   3 23:03 aliases.db
drwxr-xr-x.  2 root   root         51 5月   5 23:02 alsa
drwxr-xr-x.  2 root   root       4096 5月   5 23:08 alternatives
-rw-------.  1 root   root        541 8月   3 2017 anacrontab
-rw-r--r--.  1 root   root         55 3月   1 2017 asound.conf
-rw-r--r--.  1 root   root          1 11月  6 2016 at.deny
[root@localhost test]#

例2:查询服务器中的ftp进程

[root@localhost test]# ps aux | grep ftp
root       1028  0.0  0.0  53212   580 ?        Ss   17:47   0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
root       4896  0.0  0.0 112676   984 pts/0    S+   18:44   0:00 grep --color=auto ftp
[root@localhost test]#

命令行的通配符

通配符规则:

*   代表任意字符(0到多个)
?  代表一个字符
[]  中间为字符组合,仅匹配其中任一一个字符

其实就和我们平时代码中写的正则规则差不多

例1:显示出当前目录下文件名前缀table的文件信息

[root@localhost test]# ls -l
总用量 12
-rw-r--r--. 1 ftpuser ftp  79 10月  5 23:29 table
-rw-r--r--. 1 ftpuser ftp  81 10月  5 23:40 table-c
-rw-r--r--. 1 root    root 49 10月 13 18:22 text
[root@localhost test]# ls -l table*
-rw-r--r--. 1 ftpuser ftp 79 10月  5 23:29 table
-rw-r--r--. 1 ftpuser ftp 81 10月  5 23:40 table-c
[root@localhost test]#

常用的转移字符

在linux中某些字符有其自身的特定含义,如果想要单纯的使用这些字符,需要进行转移,这里举例4个最常用的转义字符

  • 反斜杠 \ :反斜杠后面的变量变为一个单纯的字符串
  • 单引号 '' :转义其中所有的变量变为单纯的字符串
  • 双引号 "" :保留其中的变量属性,不进行转移
  • 反引号 `` : 把其中的命令执行结果返回

例1:双引号转义符,输出建立的变量NUM的值

[root@localhost test]# NUM=5
[root@localhost test]# echo "number is $NUM"
number is 5
[root@localhost test]#

从例1中看出,取出变量的值用的 $ 符号,如果我们要使用美元符,就需要转移

例2:输出带有美元符的字符串

[root@localhost test]# echo "price is $$NUM"
price is 1470NUM
[root@localhost test]# echo "price is \$$NUM"
price is $5
[root@localhost test]#

我们可以看到直接用两个$符号输出的结果是不对的,用了反斜杠转义符后才是我们预期的结果

例3:测试单引号转义符

[root@localhost test]# echo 'number is $NUM'
number is $NUM
[root@localhost test]#

从输出结果可以看到,单引号中所有的都识别为一个string

例4:输出字符串命令的结果

[root@localhost test]# uname -a
Linux localhost.localdomain 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
[root@localhost test]# echo `uname -a`
Linux localhost.localdomain 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
[root@localhost test]#

重要的环境变量

在Linux系统中,变量名称一般都是约定俗成的大写,我们可以通过变量名提取到对应的变量值。
Linux上执行命令分为 4 个步骤。

  1. 判断用户是否以绝对路径或相对路径的方式输入命令(如/bin/ls) ,如果是的话则直接执行。

  2. Linux 系统检查用户输入的命令是否为“别名命令” ,即用一个自定义的命令名称来替换原本的命令名称。可以用 alias 命令来创建一个属于自己的命令别名,格式为“alias 别名=命令” 。 若要取消一个命令别名, 则是用 unalias 命令, 格式为 “unalias 别名” 。

  3. Bash 解释器判断用户输入的是内部命令还是外部命令。内部命令是解释器内部的指令,会被直接执行;而用户在绝大部分时间输入的是外部命令,这些命令交由步骤 4 继续处理。可以使用“type 命令名称”来判断用户输入的命令是内部命令还是外部命令。

  4. 系统在多个路径中查找用户输入的命令文件,而定义这些路径的变量叫作 PA TH,可以简单地把它理解成是“解释器的小助手” ,作用是告诉 Bash 解释器待执行的命令可能存放的位置,然后 Bash 解释器就会乖乖地在这些位置中逐个查找。PATH 是由多个路径值组成的变量,每个路径值之间用冒号间隔,对这些路径的增加和删除操作将影响到 Bash 解释器对Linux 命令的查找。

Linux系统中最重要的10个环境变量

变量名称 作用
HOME 用户的主目录(家目录)
SHELL 用户使用的Shell解释器名称
HISTSIZE 输出的历史命令记录条数
histfilesize 保存的历史命令条数
MAIL 邮件保存路径
LANG 系统语言,语系名称
RANDOM 生成一个随机数
PS1 Bash解析器的提示符
PATH 定义解释器搜索用户执行命令的路径
EDITOR 用户默认的文本编辑器

例1:测试输出下几个环境变量

[root@localhost ~]# echo $HOME
/root
[root@localhost ~]# echo $HISTSIZE
1000
[root@localhost ~]# echo $MAIL
/var/spool/mail/root
[root@localhost ~]# echo $LANG
zh_CN.UTF-8
[root@localhost ~]# echo $RANDOM
11719

我们自定义的变量不是全局变量,只有当前用户可以使用,如果要不同用户可以使用,可以用 export 将变量变为全局变量

你可能感兴趣的:(Linux:管道符、重定向与环境变量)