8.1 shell介绍
Shell是系统跟计算机硬件交互时使用的中间介质,它只是系统的一个工具。
用户直接面对的不是计算机硬件而是Shell,用户把指令告诉shell,然后shell再传输给系统内核,接着内核再去支配计算机硬件去执行各种操作。
CentOS默认安装的shell版本是bash.
8.2 命令历史
Linux中执行的命令记录预设为1000条历史记录,可以用history命令查看已经存了多少条,这些记录保存在用户的家目录.bash_history文件中。特别注意的是,只有当用户正常退出当前的shell中,在当前的shell中运行的命令才会保存至该文件中,如果不正常退出,命令则保存不全。
1000条命令使是由环境变量HISTSIZE定义,可用echo $HISTSIZE查看。
变量HISTSIZE可在/etc/profile中定义,修改后保存退出,只有退出终端或者使用命令source/etc/profile才可以生效。
变量HISTTIMEFORMAT指定此变量的格式(让其生效方法和HISTSIZE相似)
例子:HISTTIMEFORMAT=”%Y/%m/d%%H:%M:%S”
[root@localhost /]#HISTTIMEFORMAT="%Y/%m/d% %H:%M:%S"
[root@localhost /]# echo $HISTTIMEFORMAT
%Y/%m/d% %H:%M:%S
[root@localhost /]# history
82 2018/05/d% 19:06:16ls -l /usr/bin/passwd
83 2018/05/d% 19:06:16chmod u+s/usr/bin/ls
84 2018/05/d% 19:06:16ls -l/usr/bin/ls
命令history –c可以把当前内存中的命令清空,不能清空配置文件。
什么时候命令保存到.bash_history文件中?
只有当正常退出终端时,才会保存到该文件中去。
如何让命令历史永久保存?
使用命令:chattr +a~/.bash_history
!是与命令历史有关的一个特殊字符,常用有以下3个。
0、!!:表示执行上一条命令。
1、!n:表示执行命令历史中的第n条命令。
2、!字符串(字符串大于等于1):例如!pw表示执行命令历史中最近一次以pw开头的命令。
8.3 命令补全和别名
0、tab键可以补全一个指令,一个路径或者一个文件名。连续按两次tab键,系统则会把所有的命令或者文件名都列出来。
1、参数补全,安装bash-completion,
安装命令:yum install –ybash-completion,安装完成后,重启才会生效。
2、alias别名命令重新起名
格式:alias 命令别名=’具体的命令’
3、各用户都有自己的配置别名的文件,可在第一个地方~/.bashrc中查看
4、ls /etc/profile.d/,可在这第二个地方查看别名的配置文件
5、自定义的alias放到~/.bashrc
8.4 通配符
通配符*可以匹配0个或多个字符,
用通配符?匹配一个字符
[]里面可以写一个范围
{},例子:ls {1.2}.txt,要加逗号。
8.5 输入输出重定向
>输入重向,cat 1.txt >2.txt,会把1.txt内容输入到2.txt文件中,2.txt文件原内容消失。
>>追加重定向,cat 1.txt >>2.txt, 会把1.txt内容追加到到2.txt文件中,原文件存在。
2>错误重定向 lsaaa 2> a.txt ,会把错误信息存到a.txt文件中
2>>错误追加重定向
&>,正确错误同时输出
<输入重定向,wc –l <1.txt ,左边必须是一个命令,否则不支持。
8.6 管道符和作业控制
0、 管道符是用于将前一个指令的输出作为后一个指令的输入。
[root@localhosttest]# cat 2.txt |wc -l
2
[root@localhosttest]# cat 2.txt |grep 'd'
sdfds
1、 ctrl z表示暂停一个任务
[root@localhosttest]# vi 1.txt
[1]+ 已停止 vi 1.txt
2、jobs查看后台的任务
[root@localhost test]# jobs
[1]+ 已停止 vi 1.txt
3、bg[id]把任务调到后台
[root@localhost test]# bg 1
[1]+ vi 1.txt &
4、fg[id]把任务调到前台
5、命令后面加&直接丢到后台
8.7/8.8 shell变量
变量是使用一个较简单的字符串来替代某些具有特殊意义的设定以及数据。通常shell预设的变量都是大写的。
变量格式:
变量命名规则:字母、数字,下划线,但首字母不能为数字。
设定变量的格式a=b,其中a为变量名,b为变量的内容,等号两边不能有空格。
当变量内容带有特殊字符时,需要加上单引号。
0、 变量内容中本身带有单引号,这时候就需要加双引号了
1、 变量内容中需要用到其他命令,则要使用反引号
2、 变量内容需要累加其他变量的内容,则要使用双引号
使用env命令就可以列出系统预设的全部系统环境变量。
HOSTNAME:表示主机的名称
SHELL表示当前用户的shell类型
HISTSIZE表示历史记录数
MAIL表示当前用户的邮件存放目录
PATH表示该变量决定了shell将到哪些目录中寻找命令或程序。
PWD表示当前目录
LANG与语言相关的环境变量
HOME表示当前用户的家目录
LOGNAME表示当前用户的登录名
env命令显示的变量只是环境变量,系统预设的变量还有很多,可以使用set命令把系统预设的全部变量都显示出来。
set命令不仅可以显示系统预设的变量,也可以显示用户的自定义变量。如下:
[root@localhost test]# myname=zanghao
[root@localhost test]# echo $myname
zanghao
[root@localhost test]# set |grep myname
myname=zanghao
虽然可以自定义变量,但该变量只能在当前的shell中生效。
[root@localhost test]# bash //执行该命令会进入一个子shell中
[root@localhost test]# echo $myname
[root@localhost test]# exit 退出到上一个shell环境中
exit
[root@localhost test]# echo $myname
zanghao
如果想让设置的环境变量一直生效,此时分为两种情况
0、 允许系统内所有用户登录后都能使用该变量,方法如下:
#vi /etc/profile,在最后一行中加入exportmyname=zanghao,然后运行source /etc/profile生效。此时再运行bash命令或者切换到其他用户就可以看到效果了
1、 仅允许当前用户使用该变量。在用户主目录下的.bashrc文件的最后一行加入export myname, 然后运行source /etc/profile生效.此时再登陆其他账户,则不再生效。
Source命令的作用是将目前设定的配置刷新,即不用注销再登陆也能生效。
8.9 环境变量配置文件
/etc/profile:用户环境变量,交互、登录才执行。
/etc/bashrc:用户不用登录,执行shell就生效。
.bashrc:该文件包含专属于自己的shell信息。
.bash_profile:该文件定义了用户的个人化路径与环境变量的文件名称。当用户登录时,该文件仅执行一次。
.bash_history:用于记录命令历史
.bash_logout:当退出shell时,会执行该文件。可以将一些清理的工作放到这个文件中。
扩展
bashrc和bash_profile的区别 http://ask.apelearn.com/question/7719