学习RedHat7第二课
初窥门径
经过第一课的学习,基本的命令操作,对linux系统有了最初的印象,接下来继续更加细致深入的学习,Linux系统中常见的“特殊字符”。
< >
----输入、输出重定向
输入重定向、输出重定向拆分来说可以分成“输入”、“输出”、“重定向”三个概念。
- 输入: 标准的输入通常是通过键盘来输入的,也可以通过文件或命令输入,文件描述为0;
- 输出: 标准的输出(这里特指正常的输出)通常是输出到屏幕,或是打印机等输出显示设备。正常的输出文件描述为1,这里特指报错(错误提示信息)的输出文件描述为2;
- 重定向: 重新指向,将原有(输入输出方式)的指向改写成其他方式(输入输出)。
总之,通过使用<>字符,改写标准输入输出方式,已新的方式输入输出。
‘<’----输入重定向
通常的用法:
cat < /etc/passwd
cat /etc/passwd
从显示结果来看和没有什么区别,但是原理上将,第一种是将passwd文件当做键盘输入,并显示到控制台;第二种则是调用cat命令读取passwd文件。
第二种用法:
cat << delimiter
作用是进入键盘输入,直到遇到delimiter(结束符:可任意替换)结束输入,并将delimiter之前输入作为参数传递给cat命令,显示出来。
‘>’----输出重定向
相较于<(输入),>(输出)常用的多。其实仔细划分的情况下,输出重定向分为正确内容输出重定向和报错提示输出重定向两个类别,这里笼统的划归到输出一类了。
输出重定向主要作用是将输出内容以文件形式保存下来,而不屏幕显示方式输出。
cat /etc/passwd > fileA
读取passwd文件,输入到A文件中(若A文件存在,则覆盖之前内容,若不存在,则创建A文件并写入)。
cat /etc/passwd >> fileA
'>>'表示追加内容,不会导致文件原有内容丢失(若A文件存在,则在文件结尾追加内容,若不存在,则创建A文件并写入)。
‘|’----管道符命令
管道符命令的作用用一句话概括“把前一个命令原本要输出到屏幕的标准正常数据当做是后一个命令的标准输入”。
如果能灵活运用‘|’(管道符),那么可以组合成丰富的命令组合,命令之间产生化学反应得到合适的最终结果。
比较常见的几种用法:
grep "/sbin/nologin" /etc/passwd | wc -l
–统计passwd文件中出现“/sbin/nologin”行数
ls -l /etc/ | more
–分页显示etc工作路径下的文件
ps -ef | grep ssh
–查看ssh进程是否存在
另外一类常用用法:
echo "redhat" | passwd --stdin root
–重置root密码为redhat(以root登录)
echo "Content" | mail -s "Subject" jeck
–发送邮件内容为“Content”标题为“Subject”到jeck用户
将echo命令输出结果作为管道符命令的参数。尤其在批量执行时可以减少交互命令,提高效率。
不仅可以两个命令相连,还可以“命令A|命令B|命令C”多条命令连接使用。关于管道符的更多用法,大家一起探索吧。
‘*’‘?’----命令行的通配符
通配符多种多样,尤其接触过正则表达式和Shell编程的同学,对通配符有一定的了解。简单来说,通配符是指用特定字符(字符串)代表一类指定字符。这里只简单介绍‘*’、‘?’、‘[]’,其他通配符不做深入展开。
‘*’–任意个字符
星号(*)代表匹配零个或多个字符。用法:
ls -l /dev/sd*
‘?’–任意单个字符
问号(?)代表匹配单个字符。用法:
ls -l /dev/sda?
‘[]’–单个中括号内任意字符(字符串)
中括号内加上数字[0-9]代表匹配0~9之间的单个数字的字符,而中括号内加上字母[abc]则是代表匹配a、b、c三个字符中的任意一个字符。
ls -l /dev/sda[135]
ls -l /dev/sd[bc][135]
实际效果如下:
常用转义字符
为了能够更好地理解用户的表达,Shell解释器还提供了特别丰富的转义字符来处理输入的特殊数据。
其实换句话说,最初定义时,将某些字符定义成特殊含义,但如果要是用这些特殊定义字符时,不加以区分的话,会造成混乱。这时候引入了转义字符,标记特殊字符的使用:1、用作字符本身输出(带转义),2、字符代表代表特定含义(直接使用)。
4种常用的转义字符:
- 反斜杠(\):使反斜杠后面的一个变量变为单纯的字符串。
- 单引号(’’):转义其中所有的变量为单纯的字符串。
- 双引号(""):保留其中的变量属性,不进行转义处理。
- 反引号(``):把其中的命令执行后返回结果。
现有变量PRICE=15,计划输出结果为Price is $15.。
PRICE=15
–定义变量PRICE值为15
$PRICE
–直接使用变量报错
echo "$PRICE"
–输出PRICE变量
echo "Price is $15."
–实际效果输出变量’1’和数字5
Price is \$15."
–用反斜杠表示$是一个字符
echo "Price is $$PRICE."
–将$整体当做一个变量,输出了$代表的值
echo "Price is \$$PRICE."
–反斜杠标识$,输出正确结果。
echo "Price is $""$PRICE."
–另外一种方法,使用两次双引号分割
echo uname -a
–直接输出
echo `uname -a
–通过反引号输出uname -a命令执行结果
环境变量(重要)
变量顾名思义,一个可变值,通过一串特定字符代表一个数值。
环境变量指的是环境中(计算机、服务器、Shell窗口)设定好的变量,每次都可以调用设定变量代表预设值。分别可以按照生效时限和范围分类。
- 按时限分为永久变量、临时变量
- 按范围分为单用户变量、全局变量
通过环境变量帮助Linux系统构建起能够为用户提供服务的工作运行环境,需要数百个变量协同工作才能完成。
定义临时环境变量:
WORKDIR=/home/workdir
使用环境变量:
cd $WORKDIR
提升临时变量为永久变量:
export WORKDIR
常用环境变量:
HOME
---------------用户的主目录(即家目录)
SHELL
-------------用户在使用的Shell解释器名称
HISTSIZE
----------输出的历史命令记录条数
HISTFILESIZE
----保存的历史命令记录条数
MAIL
---------------邮件保存路径
LANG
---------------系统语言、语系名称
RANDOM
-------------生成一个随机数字
PS1
-----------------Bash解释器的提示符
PATH
---------------定义解释器搜索用户执行命令的路径
EDITOR
------------用户默认的文本编辑器
环境变量存放位置:
/etc/profile
文件中存放永久环境变量,source或重启生效。
注:1、source FileName 用于在当前bash环境下读取并执行FileName中的命令;
2、source可用“.”代替,如:source /etc/profile
和. /etc/profile
是等效的。