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 将变量变为全局变量

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容