Linux bash基础特性
1.补全
命令补全
以给定的字符串开头,敲击tab键,如果能够唯一的标识一个命令程序文件,则直接补全;如果不能唯一标识,则需要再次敲击tab键,给出列表
路径补全
在给定的起始路径下,以对应路径下的打头的字符串来逐一匹配起始路径下的每个文件
2.快捷键
快捷键 | 含义 |
---|---|
Ctrl+c | 终止前台运行的程序 |
Ctrl+d | 退出 |
Ctrl+l | 清屏 |
Ctrl+a | 光标移动的命令行行首 |
Ctrl+e | 光标移动的命令行行尾 |
Ctrl+u | 删除光标之前的所有字符 |
Ctrl+k | 删除光标之后的所有的字符 |
Ctrl+r | 搜索历史命令 |
3.命令历史
HISTSIZE shell进程中可以保留的命令历史条数
HISTFILE 持久保存的命令历史文件
HISTFILESIZE 在.bash_history中保存命令的记录总数
退出shell时保存历史命令到历史文件.bash_history
[root@localhost ~]# echo $HISTFILE
/root/.bash_history
[root@localhost ~]# echo $HISTSIZE
1000
[root@localhost ~]# echo $HISTFILESIZE
1000
命令语法
history [-c] [-d offset] [n]
history -anrw [filename]
history -ps arg [arg...]
OPTION
history # 列出最近的#条命令
-c 清空命令历史
-d offset 删除指定位置的命令历史
-r 从文件.bash_history中读取命令历史至命令历史列表中
-w 将命令历史列表写入到命令历史文件.bash_history中
调用命令历史列表中的命令
!# 再次执行命令历史列表中的第#条命令
!! 执行上一条命令
!STRING 再一次执行命令历史列表中最近一个以string开头的命令
调用上一条命令的最后一个参数
快捷键 ESC+.
字符串 !$
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
[root@localhost ~]# vim 【Esc+.】 ;会自动将上一条命令的参数补充
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
[root@localhost ~]# vim !$
控制命令历史记录的方式
环境变量
HISTCONTROL 控制命令历史记录的变量
igonredups 忽略重复命令
igonrespace 忽略以空白字符开头的命令
igonreboth 以上两者同时生效
修改变量的值 NAME=‘VALUE’
[root@localhost ~]# echo $HISTCONTROL
ignoredups
[root@localhost ~]# HISTCONTROL='ignorespace'
[root@localhost ~]# echo $HISTCONTROL
ignorespace
history历史命令列表加时间戳
[root@zycentos7 ~]# vim /etc/profile
export HISTTIMEFORMAT="%F %T `whoami` "
[root@zycentos7 ~]# source /etc/profile
history实时追踪,用户行为审计
[root@zycentos7 ~]# vim /etc/profile
export HISTTIMEFORMAT="%F %T `whoami` "
if [ ! -d /usr/local/domob/record/${LOGNAME} ]
then
mkdir -p /usr/local/domob/record/${LOGNAME}
chmod 300 /usr/local/domob/record/${LOGNAME}
fi
export HISTORY_FILE="/usr/local/domob/record/${LOGNAME}/.bash_history"
export PROMPT_COMMAND='{ date "+%Y-%m-%d %T ##### $(who am i |awk "{print \$1\" \"\$2\" \"\$5}") #### $(history 1 | { read x cmd; echo "$cmd"; })"; } >>$HISTORY_FILE'
[root@zycentos7 ~]# chmod 777 /usr/local/domob/record/ ;设置目录权限
[root@zycentos7 ~]# chmod +t /usr/local/domob/record/ ;+t表示
实时追踪:
[root@zycentos7 ~]# tail -f /usr/local/domob/record/root/.bash_history
[root@zycentos7 ~]# tail -f /usr/local/domob/record/zhao/.bash_history
4.Linux命令别名
查看当前系统中的命令别名 alias
[root@localhost ~]# alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
设置别名
alias NAME='command'
[root@localhost ~]# alias net='vim /etc/sysconfig/network-scripts/ifcfg-ens33'
[root@localhost ~]# alias|grep net
alias net='vim /etc/sysconfig/network-scripts/ifcfg-ens33'
取消别名
unalias NAME
永久别名设置
1.root每次登入就自动生效别名
把别名加在 /etc/profile
或 ~/.bashrc
中, source ~/.bashrc
2.每一位用户都生效别名,把别名加在 /etc/bashrc
最后面,然后 source /etc/bashrc
5.变量
本地变量
局部变量
环境变量
6.特殊重要符号
| 管道
把前一个命令的输出当做下一个命令的输入
[root@localhost ~]# a=10|echo $a
[root@localhost ~]#
a=10无结果,a没有定义过
. 当前目录
… 上一级目录
;分隔多条命令
`` 反单引号,命令替换
‘’ 强引用,不做命令替换
[root@localhost ~]# echo '$HISTSIZE'
$HISTSIZE
“” 弱引用,可以实现变量和命令的替换
[root@localhost ~]# echo "$HISTSIZE"
1000
{} 扩展符
示例1
[root@localhost ~]# touch test.tar.gz{,.bak}
[root@localhost ~]# ll test.tar.gz{,.bak}
-rw-r--r--. 1 root root 0 Nov 6 18:56 test.tar.gz
-rw-r--r--. 1 root root 0 Nov 6 18:56 test.tar.gz.bak
示例2
[root@localhost ~]# for i in {1..5};do echo "this is test$i" > test$i;done
[root@localhost ~]# ll test*
-rw-r--r--. 1 root root 14 Nov 6 18:57 test1
-rw-r--r--. 1 root root 14 Nov 6 18:57 test2
-rw-r--r--. 1 root root 14 Nov 6 18:57 test3
-rw-r--r--. 1 root root 14 Nov 6 18:57 test4
-rw-r--r--. 1 root root 14 Nov 6 18:57 test5