标准输入(STDIN) 文件描述为0 默认从键盘输入 标准输出(STDOUT)文件描述为1 默认输出到屏幕 错误输出(STDERR)文件描述为2 默认输出到屏幕 通过命令和服务器进行交互过程中 的输入输出示例下:
[root@bogon ~]# ls root // 标准输入 anaconda-ks.cfg lines.txt test test2.txt test.txt tstd // 标准输出 [root@bogon ~]# ls CCC //标准输入 ls: cannot access CCC: No such file or directory // 错误输出输出重定向: 命令 > 文件 标准输出重定向到一个文件中(覆盖文件原内容) 命令 2> 文件 错误输出重定向到一个文件中(覆盖文件原内容) 命令 >> 文件 标准输出重定向到一个文件中(追加到文件中) 命令 2>> 文件 标准输出重定向到一个文件中(追加到文件中) 命令 >> 文件 2>$1 标准输出与错误输出都重定向到一个文件中(追加到文件中) 输入重定向: 命令 < 文件 将文件作为命令的标准输入 命令 << 分解符 从标准输入中读入,只到遇见分解符才停止 命令 < 文件1 >文件2 将文件1作为命令的标准输入并将标准输出到文件2
示例
[root@bogon tmpdir]# man bash > manbash.txt [root@bogon tmpdir]# echo "hahaha" >test.txt [root@bogon tmpdir]# cat test.txt hahaha [root@bogon tmpdir]# echo "hahah" >> test.txt [root@bogon tmpdir]# cat test.txt hahaha hahah [root@bogon tmpdir]# cat test.txt |wc -l 2 [root@bogon tmpdir]# wc -l <test.txt 8 [root@bogon tmpdir]# echo <<over > hi > nice to meet you > Hi > over有时候我们想进行批量操作,这个时候需要用到通配符。如查看所有sda开头的目录属性
* 匹配另个或多个字符 ?匹配任意单个字符 [0-9]匹配范围内数字 [abc]匹配范围内的任意字符 [root@bogon tmpdir]# ls /dev/vcs* /dev/vcs /dev/vcs2 /dev/vcs4 /dev/vcs6 /dev/vcsa1 /dev/vcsa3 /dev/vcsa5 /dev/vcs1 /dev/vcs3 /dev/vcs5 /dev/vcsa /dev/vcsa2 /dev/vcsa4 /dev/vcsa6 [root@bogon tmpdir]# ls /dev/vcs[0-9] /dev/vcs1 /dev/vcs2 /dev/vcs3 /dev/vcs4 /dev/vcs5 /dev/vcs6 \(反斜杠) 转义后面单个字符 '' (单引号)转义所有字符 "" (双引号) 变量依然生效 ··(反引号 esc下的键) 执行命令语句 [root@bogon tmpdir]# PRICE=5 [root@bogon tmpdir]# echo "price is $PRICE" price is 5 [root@bogon tmpdir]# echo "price is $$PRICE" price is 2902PRICE [root@bogon tmpdir]# echo "price is \$$PRICE" price is $5 [root@bogon tmpdir]# echo 'price is \$$PRICE' price is \$$PRICE [root@bogon tmpdir]# uname -a Linux bogon 3.10.0-1127.el7.x86_64 #1 SMP Tue Mar 31 23:36:51 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux [root@bogon tmpdir]# echo echo `uname -a` echo Linux bogon 3.10.0-1127.el7.x86_64 #1 SMP Tue Mar 31 23:36:51 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux [root@bogon tmpdir]#alias 命令用于设置命令的别名,格式为:“alias 别名=命令” 如:担心复制文件时误将文件覆盖 可以执行 alias cp = “cp -i” ,每次覆盖都会询问用户 unalias 命令用于取消别名 格式:“unalias 别名”
[root@bogon tmpdir]# alias cp="cp -i" [root@bogon tmpdir]# unalias cplinux中一切皆文件,命令也是文件。当输入一个命令执行时的执行步骤: 1、如果是绝对路径的命令则直接执行 2、检查是否为别名命令 3、由bash判断时内部命令还是外部命令 内部命令:属于解释器内部的 外部命令:独立于解释器外的命令文件 4、通过$PATH变量中定义的路径查找命令然后执行。 PATH环境变量展示和修改
[root@bogon tmpdir]# PATH=$PATH:/root [root@bogon tmpdir]# echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt/apps/jdk/bin:/root/bin:/root谨慎而有经验的运维人员接手一台linux服务器后一定会质细腻命令查看下$PATH变量中是否有可以的目录
linux中有很多环境变量可以使用env 来查看 如下:
[root@bogon tmpdir]# env XDG_SESSION_ID=15 HOSTNAME=bogon TERM=vt100 SHELL=/bin/bash HISTSIZE=1000变量定义和查看 变量定义:变量名称=值
一个用户定义的变量不能被其他用户使用,即定义变量的作用范围为当前用户。 可以使用 export 将局部变量升级为全局变量
[root@bogon tmpdir]# ETC="/etc" [root@bogon tmpdir]# echo [root@bogon tmpdir]# echo $ETC /etc [root@bogon tmpdir]# su hadoop [hadoop@bogon tmpdir]$ echo $ETC [hadoop@bogon tmpdir]$ su root Password: [root@bogon tmpdir]# export ETC [root@bogon tmpdir]# echo $ETC [root@bogon tmpdir]# ETC="/etc" [root@bogon tmpdir]# export ETC [root@bogon tmpdir]# echo $ETC /etc [root@bogon tmpdir]# su hadoop [hadoop@bogon tmpdir]$ echo $ETC /etc