1. 命令别名
定义clear别名为cls [root@localhost ~]# alias cls=clear 打印当前已生效别名 [root@localhost ~]# alias alias cls='clear' 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' 取消别名定义cls [root@localhost ~]# unalias cls 执行命令本身而不是别名 [root@localhost ~]# \ls anaconda-ks.cfg bd_logo1.png
2. 命令历史
查看所有有记录的历史命令 [root@localhost ~]# history 查看10条最近记录的历史命令 [root@localhost ~]# history 10 执行history列表中第10号命令 [root@localhost ~]# !10 执行history列表中最近一条以echo开头的命令 [root@localhost ~]# !echo 删除history列表中第10号命令 [root@localhost ~]# history -d 10 将当前缓冲的历史行追加到历史文件中 [root@localhost ~]# history -a 清空history列表 [root@localhost ~]# history -c 从历史文件中读取所有未被读取的行 [root@localhost ~]# history -n 读取历史文件并将内容追加到历史列表中 [root@localhost ~]# history -r
命令历史相关的环境变量
[root@localhost ~]# echo $HISTSIZE 1000 [root@localhost ~]# echo $HISTFILESIZE 1000 [root@localhost ~]# echo $HISTFILE /root/.bash_history [root@localhost ~]# echo $HISTCMD 733 [root@localhost ~]# echo $HISTCONTROL ignoredups
$HISTCONTROL有三种取值分别表示
ignoredups:忽略重复的命令;重复是指连续且相同的命令; ignorespace:以空白字符开头的命令不记入历史; ignoreboth:上述两者同时生效;
3. 快捷键
Ctrl+a:跳至命令行首; Ctrl+e:跳至命令行尾; Ctrl+k:删除光标所在处至尾部的内容; Ctrl+u:删除行首至光标所在处的内容; Ctrl+w:删除行尾一个单词(非英语单词,而是以空格分隔开的一段连续字符串);
4. 自动补全
略
5. 命令行展开
[root@localhost ~]# mkdir -pv /tmp/rootfs/{bin,sbin,lib,lib64,tmp,usr/{,local}/{bin,sbin},var/{log/httpd,spool}}
6. 命令执行状态与执行结果
[root@localhost ~]# echo $(date +%H:%M:%S) 22:13:06 [root@localhost ~]# echo `date +%H:%M:%S` 22:13:24 [root@localhost ~]# echo $? 0
7. 强引用与弱引用
[root@localhost ~]# echo '$SHELL' $SHELL [root@localhost ~]# echo "$SHELL" /bin/bash
8. 文件名通配
[root@localhost ~]# ls -l /etc/[ekm]*[[:digit:]]*.conf -rw-r--r--. 1 root root 112 Mar 6 2015 /etc/e2fsck.conf -rw-r--r--. 1 root root 495 Mar 6 2015 /etc/krb5.conf -rw-r--r--. 1 root root 936 Mar 6 2015 /etc/mke2fs.conf
常用的通配符有以下几个
*:匹配任意长度的任意字符; ?:匹配任意单个字符; [ ]:匹配指定集合内的任意单个字符; [^ ]:匹配指定集合外的任意单个字符;
更复杂的用法参照
[root@localhost tmp]# man 7 glob
注意:glob与正则表达式的区别。
9. 变量
bash是弱类型编程语言,bash中变量统统默认为字符型数据,且无需事先声明而直接使用。
bash变量有三种类型
本地变量, 作用域为当前shell进程,不包含其子进程;
环境变量, 作用域为当前shell进程及其子进程;
局部变量, 作用域为定义此变量的函数。
环境变量
Linux是一个多用户的操作系统。每个用户登录系统后,都会有一个专用的运行环境。通常每个用户默认的环境都是相同的,这个默认环境实际上就是一组环境变量的定义。
查看当前用户登录bash的环境变量
[root@localhost ~]# env [root@localhost ~]# printenv 或者 [root@localhost ~]# export [root@localhost ~]# declare -x
只读变量
[root@localhost ~]# declare -r myvar="how are you?" [root@localhost ~]# readonly myvar="how are you?"
查看当前bash进程中的只读变量
[root@localhost ~]# readonly declare -r BASHOPTS="checkwinsize:cmdhist:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:login_shell:progcomp:promptvars:sourcepath" declare -ir BASHPID declare -r BASH_COMPLETION_COMPAT_DIR="/etc/bash_completion.d" declare -ar BASH_VERSINFO='([0]="4" [1]="2" [2]="46" [3]="1" [4]="release" [5]="x86_64-redhat-linux-gnu")' declare -ir EUID="0" declare -ir PPID="2814" declare -r SHELLOPTS="braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor" declare -ir UID="0" declare -r myvar="how are you?"
只读变量不支持重新赋值,也不支持unset操作, 只能退出当前bash进程,该变量才会消失。
10. 重定向与管道
标准输入(stdin) 文件描述符为0 标准输出(stdout) 文件描述符为1 标准错误输出(stderr) 文件描述符为2
标准输出重定向
[root@localhost tmp]# echo "how are you?" > demo #覆盖 [root@localhost tmp]# echo "how old are you?" >> demo #追加
标准错误输出重定向
[root@localhost tmp]# echoooo "how are you?" 2> demo #覆盖 [root@localhost tmp]# echoooo "how old are you?" 2>> demo #追加
合并标准输出与标准错误输出
[root@localhost tmp]# echo "how are you?" &> demo #覆盖 [root@localhost tmp]# echo "how old are you?" &>> demo #追加 或者 [root@localhost tmp]# echo "how are you?" > demo 2>&1 #覆盖 [root@localhost tmp]# echo "how old are you?" &>> demo 2>&1 #追加
标准输入重定向
[root@localhost ~]# tr [a-z] [A-Z] < /etc/issue \S KERNEL \R ON AN \M MAGE EDUCATION LEARNING SERVICES HTTP://WWW.MAGEDU.COM
Here Document
cat << EOF > /tmp/issue.doc \S Kernel \r on an \m Mage Education Learning Services http://www.magedu.com EOF
管道
[root@localhost ~]# cat /etc/issue | tee /tmp/$(date +%Y%m%d%H%M%S)
11. 环境配置
bash的环境配置文件根据功能来分有三类:
profile类:为shell进程实现初始化配置。主要是运行初始化命令和脚本,并设置环境变量。
bashrc类:为shell进程实现启动配置。主要是定义umask和命令别名,并设置本地变量。
logout类:为shell进程提供终止进程前的清理工作,主要是清理变量和临时文件。
logout类的环境配置文件一般不会去做自定义修改,因此后面不讨论它。
bash的环境配置文件根据作用范围来分有两类:
全局:对所有用户都生效。/etc/profile, /etc/profile.d/*.sh, /etc/bashrc
用户:仅对某个用户生效。~/.bash_profile, ~/.bash_rc
登录式shell与非登录式shell启动时加载的配置文件数量和顺序不同。
登录式shell:账户登录的shell。如通过终端登录的shell,“su -l USERNAME”。
/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc
非登录式shell:没有通过账户登录的shell。如通过桌面环境打开的命令行接口,“su USERNAME”
~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh
注意:
全局环境配置文件只有管理员有权限修改。
只有加载了的配置文件中的环境配置才会生效。
当不同的配置文件中设置了相同的变量但值不同,后加载的会覆盖先前的配置。