(一).命令别名

alias用于获取当前用户可用的别名定义

[root@localhost ~]# alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'

定义别名:~]# alias  NAME='COMMAND'(生命周期:当前shell进程)

撤消别名:~]# unalias NAME

注意:如果别名和命令名相同时,直接调用原命令,非别名:可使用"\COMMAND"

[root@localhost ~]# alias cls='clear'
[root@localhost ~]# unalias cls
[root@localhost ~]# \ls
$             anaconda-ks.cfg       m_q    rootfs    textfile2
2016-03-04-10-27-51  initial-setup-ks.cfg  n_p    text1
2016-03-05-14-09-21  m_p

(二).命令历史

查看所有有记录的历史命令
[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:上述两者同时生效;

(三).快捷键

Ctrl+a:跳至命令行首;
Ctrl+e:跳至命令行尾;
Ctrl+k:删除光标所在处至尾部的内容;
Ctrl+u:删除行首至光标所在处的内容;
Ctrl+w:删除行尾一个单词(非英语单词,而是以空格分隔开的一段连续字符串);

(四).命令补全和路径补全

shell中可以通过tab键补全,不能惟一标识,再次点击tab可给列表

[root@localhost ~]# whi
which     while     whiptail 
[root@localhost ~]# /etc/gr
groff/  grub.d/

(五).命令行展开

~: 自动替换为用户家目录;

~USERNAME:自动替换为指定用户的家目录;

例:[root@localhost ~]# mkdir -pv /etc/rootfs/{bin,sbin,lib,lib64,tmp,usr}
mkdir: 已创建目录 "/etc/rootfs"
mkdir: 已创建目录 "/etc/rootfs/bin"
mkdir: 已创建目录 "/etc/rootfs/sbin"
mkdir: 已创建目录 "/etc/rootfs/lib"
mkdir: 已创建目录 "/etc/rootfs/lib64"
mkdir: 已创建目录 "/etc/rootfs/tmp"
mkdir: 已创建目录 "/etc/rootfs/usr"

目录管理类命令:

mkdir(建议目录):

[root@localhost ~]# mkdir -pv  /tmp/abcd
mkdir: 已创建目录 "/tmp/abcd"

  -m, --mode=MODE:直接给定目录权限;

rmdir(删除目录):

[root@localhost ~]# rmdir -pv /tmp/abcd
rmdir: 正在删除目录 "/tmp/abcd"
rmdir: 正在删除目录 "/tmp"
rmdir: 删除目录 "/tmp" 失败: 目录非空

(六).命令的执行状态结果

[root@localhost ~]# echo $(date +%H:%M:%S)
22:13:06
[root@localhost ~]# echo `date +%H:%M:%S`
22:13:24
[root@localhost ~]# echo $?
0

(七).bash中的引用

[root@localhost ~]# echo '$SHELL'                    (''强引用)
$SHELL
[root@localhost ~]# echo "$SHELL"                    (""弱引用)
/bin/bash
[root@localhost ~]# echo `echo '$SHELL'`                 (`` 命令引用)
$SHELL

   ①文件查看命令:

   more:more 命令类似 cat ,以一页一页的形式显示翻页,按space就往下一页显示,按 b 往回翻页

从第 20 行开始显示 testfile 之文档内容。
more +20 testfile

  less:less 与 more 类似,但使用 less 可以随意浏览文件, more 仅能向前移动,却不能向后移 动,而且 less 在查看之前不会加载整个文件。

查看命令历史使用记录并通过less分页显示
[root@localhost test]# history | less
    1  ls
    2  mount /dev/cdrom /mnt
    3  ls
    4  cd /nt
    5  cd /mnt
    6  ls
    7  cd Packages/
    8  ls

  head:默认查看文件的前10行;-n 5:查看前5行;

[root@localhost ~]# history |head -n 5
    1  ls
    2  mount /dev/cdrom /mnt
    3  ls
    4  cd /nt
    5  cd /mnt

  tail:默认查看文件的后10行;-n 5:查看后5行;

  查看倒数第5行:

[root@localhost ~]# history |tail -5
  680  man tail | tail -5
  681  man tail | tail -5 |tail 1
  682  man tail | tail -5 |tail -1
  683  man tail | tail -5 |head -1
  684  history |tail -5
[root@localhost ~]# history |tail -5 | head -1
  681  man tail | tail -5 |tail 1

 start:显示inode内容

查看 text2 文件的inode内容内容
[root@localhost ~]# stat text2
  文件:"text2"
  大小:0             块:0          IO 块:4096   普通空文件
设备:fd00h/64768d    Inode:206363417   硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2016-03-05 14:18:26.985156998 +0800
最近更改:2016-03-05 14:16:59.502151869 +0800
最近改动:2016-03-05 14:16:59.502151869 +0800
创建时间:-

  touch:改变文件或目录时间,如果没有文件则创建文件;

[root@localhost ~]# touch testfile | ls -l testfile
-rw-r--r--. 1 root root 0 3月   6 17:04 testfile

   ②文件管理工具:

  cp:复制文件,如果目标文件不存在,则事先创建文件,而后复制内容导入;

[root@localhost ~]# ll /etc/text2
-rw-r--r--. 1 root root 66 3月   5 22:12 /etc/text2
[root@localhost ~]# cp /etc/text2 -if /tmp/text2 |ll /tmp/text2
cp:是否覆盖"/tmp/text2"? -rw-r--r--. 1 root root 66 3月   6 17:12 /tmp/text2
y
其他用法:man cp

  mv:移动现有的文件或目录,或是更改文件或目录的名称,

mv  文件名   文件名将源文件名改为目标文件名
mv  文件名   目录名将文件移动到目标目录
mv  目录名   目录名目标目录已存在,将源目录
移动到目标目录;目标
目录不存在则改名
mv  目录名   文件名出错
 再如将/usr/student下的所有文件和目录移到当前目录下,命令行为:
 $ mv /usr/student/*  .

 rm:删除一个文件或者目录。

  • -i 删除前逐一询问确认。

  • -f 即使原档案属性设为唯读,亦直接删除,无需逐一确认。

  • -r 将目录及以下之档案亦逐一删除。

   【注意:请不要执行“rm -rf  /”或“rm -rf  /*”】

(八).文件名通配

显示/etc中以e、k、m开头所有的数字,最后以.conf结尾的文件详细信息:
[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
常用的通配符:
 *:匹配任意长度的任意字符;
?:匹配任意单个字符;
[ ]:匹配指定集合内的任意单个字符;
[^ ]:匹配指定集合外的任意单个字符;
其他用法:man 7 glob

(九).变量

bash是弱类型编程语言,bash中变量统统默认为字符型数据,无需事先声明可以直接使用。

bash变量种类:
            本地变量:作用域为当前shell进程;不包括其子进程;
            环境变量:使用域为当前shell进程及其子进程;
            局部变量:作用域为定义此变量的函数;         
            位置参数变量
            特殊变量

   本地变量声明及引用:

[root@localhost ~]# name=wangqiang
[root@localhost ~]# echo $name
wangqian

  撤销变量:unset name;(PS:所有的本地变量在shell进程终止时,会被自动撤销;)

  环境变量声明及引用:

[root@localhost ~]# name=wangqiang
[root@localhost ~]# echo $namewangqiang
[root@localhost ~]# export        查看环境变量命令:export,declare -x,env,printenv
declare -x name="wangqiang"
[root@localhost ~]# unset name

 只读变量:常量  (shell终止,变量终止);不支持重新赋值,也不支持撤销操作;

[root@localhost ~]# declare -r myvar="how are you?"
[root@localhost ~]# readonly myvar="how are you?"
[root@localhost ~]# readonly 
declare -r myvar="how are you?

(十).I/O重定向和管道

输入数据流: <--,标准输入(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

管道:把前一个命令的输出作为后一个命令的输入;

  tee:从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件。

          -a或--append  附加到既有文件的后面,而非覆盖它.

[root@localhost ~]
# cat /etc/issue | tee /tmp/$(date +%Y%m%d%H%M%S)