【linux之bash】
bash的发展
1974年 贝尔实验室 Bourne Bourne Shell --> Bsh.sh
1978年 berke bill jey C shell --> Csh tcsh
80年代初,贝尔实验室 Korn korn shell -->Ksh
1983年左右,基于bsh和ksh开发了bourne-again shell --> bash 红帽里面默认使用的shell
查看当前系统支持的shell类型
cat /etc/shells # List of acceptable shells for chpass(1). # Ftpd will not allow users to connect who are not using # one of these shells. /bin/bash /bin/csh /bin/ksh /bin/sh /bin/tcsh #/bin/zsh
bash 1.命令历史,命令补全 2.管道,重定向 3.命令别名 4.命令行编辑 5.命令行的展开 6.文件名的通配 7.变量的设定 8.编程
bash的命令历史记录
每个用户的家目录里面,有一个隐藏文件叫.bash_history
默认情况下,内存中的命令历史不会自动的存放到文件中,除非注销或重启
history 查看命令历史记录
-c:清空命令历史缓冲区
-w:手动的将历史缓冲区保存至文件
!1 :执行曾经执行过的第一条命令
命令补全
TAB键(由于shell中包含的PATH变量才能命令补全)
单击TAB建:补全唯一存在的命令
双击TAB建:命令参数在不唯一情况下为我们提供选择列表
echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
ESC+. 把上一个命令执行的最后一个参数补全(不同时按)
!$ : 把上一个命令执行的最后一个参数补全
ALT+. :在终端上有效。如上功能(同时按下)
管道
连接两个命令的通道,将前面命令的输出结果作为后面命令的执行条件或参数来使用
管道的符号: |
所有参与管道连接的命令一般都必须有输出结果,否则没有意义
命令的别名
自定义命令
alias
定义一个命令的别名;查看当前所有已经定义的别名
unalias
取消一个定义过的命令的别名
在设置命令别名的时候,使用命令来实现的会立即生效,但是注销后失效
alias cp='cp -i'
写入.bashrc,永久生效
开关机
注销: exit ,logout ,ctrl+d
重启: shutdown -r (now,0,+#,12:00) , reboot , init 6
关机: shutdown -h (now,0,+#,12:00), poweroff,halt,init 0
I/O重定向
- 文件描述符
0:标准输入:从键盘输入
1:标准输出:到显示器上的输出
2:标准错误:到显示器的错误消息
- 输入重定向
符号:<
- 输出重定向
符号:> (覆盖输出重定向)
>>(追加输出重定向)
<<:here document(此处文档)
cat << EOF > test.txt
das
sdas
sadas
EOF
- 错误重定向 2>, 2>>
/dev/null 黑洞设备
echo $? 用来描述上一条命令是否成功执行,如果成功执行,返回值为0;如果执行失败,返回值为1-127间的正整数。1,2,127被系统保留,其他我们可以自己定义
- &>:同时重定向(错误输出重定向)
一个命令在执行之后,有两个返回值,
1.命令执行结果返回值
2.命令执行状态返回值
创建文件
> new.txt
echo > new.txt
BASH中的特殊符号 man 7 glob
1.文件名通配符 *:通配绝大多数的多个字符(文件名最开始的.无法通配)。任意多个任意字符 ?:通配除了文件名开头的.以外的任意单个字符 []:通配任意指定范围内的单个字符(不允许包括特殊符号) ^:脱字符,取反,不包括,跟中括号配合使用: [:alpha:]:不区分大小写的字母,大写和小写字母 [:lower:]:小写字母 [:upper:]:大写字母 [:digit:]:数字 [:alnum:]:大写字母、小写字母和数字 [:space:]:空格 [:punct:]:特殊符号 ls *[[:space:]]* 中间带空格 ls *[^[:digit:]] 2.各种引号 "":弱引用符号,正常进行变量代换 '':强引用符号,不进行变量替换 ``:shell将反引号引用的内容当作命令优先执行,也叫命令替换 相当于$(命令) 3.反斜线 \ 转义字符,将其后一个字符转义为普通字符 4.逻辑操作符 1) &&-逻辑与 命令1 && 命令2 如果命令1的执行状态返回值为假,则命令2不执行 如果命令1的执行状态返回值为真,则命令2执行 只要前面为假,整个结果一定为假 只要前面为真,整个结果取决于后者 只要前面为假,后面不再判断 mkdir /bin && cd /bin 2)||-逻辑或 只要一个结果为真,整个结果就是真 只要判断一个结果为真,后面不再判断 如果命令1的执行状态返回值为假,则命令2执行 rm -rf /china || cd / 3)!-逻辑非 ! 命令:将命令的执行状态返回值取反 ! ls /china && mkdir /china 注意:!后面必须有空格,若不加空格就是读取命令缓冲区 !改变的是命令的执行状态返回值 4) :-并列
变量的设定
- bash的环境变量配置文件
从作用生效范围来划分,有两类
全局配置文件
/etc/profile /etc/bashrc /etc/profile.d/*.sh
用户个人配置文件(用户家目录下)
.bash_profile .bashrc
从配置文件的功能来将,有两类
profile类
设置全局变量,执行命令或脚本
bashrc类
设置本地变量,定义命令的别名
- 登录式shell
①su - | -l | --login USERNAME 的加载顺序
/etc/bashrc-->/etc/profile.d/*.sh
②从终端正常登录配置文件加载顺序:/etc/profile->/etc/profile.d/*.sh->-/.bash_profile->-/.bashrc->/etc/bashrc
- 非登录式shell
①su USERNAME
②在图形界面中打开的终端窗口
配置文件加载顺序:
/etc/profile->/etc/profile.d/*.sh->-/.bashrc
/etc/profile的作用:
USER变量;
LOGNAME变量;
MAIL变量;
PATH变量;
HOSTNAME变量;
HISTSIZE变量;
umask;
调用/etc/profile.d/*.sh
.bash_profile的作用
调用了.bashrc文件
在PATH变量后面加入了“:$HOME/bin”这个目录
.bashrc的作用
定义默认的别名
调用/etc/bashrc
- 注销时生效的环境变量配置文件
.bash_logout
历史记录配置文件
.bash_history
shell登录信息
本地终端欢迎信息:/etc/issue
alt + F2 切换终端
远程终端欢迎信息:/etc/issue.net
转义字符不能使用,是否显示此欢迎信息由SSH的配置文件
/etc/ssh/sshd_config决定,加入“Banner /etc/issue.net
才能显示(记得重启SSH服务)
service sshd restart
登陆后欢迎信息:/etc/motd
不管是本地登录,还是远程登录,都可以显示此欢迎信息