一、bash

    1.bash也是一个程序,该程序什么时候被调用?

        用户登陆、使用su命令切换用户、直接执行bash命令都会打开一个新的bash,这种shell称之为子shell,子shell可以不和父shell类型相同,比如,子shell可以是cshell,可以是kshell,也就是说子shell的类型任意。

    2.如何查看当前的shell类型

echo $SHELL

    3.如何查看bash的具体使用方法

man bash

    更加详细的信息:

二、bash环境中的命令行编辑

    1.光标跳转

        ctrl+a:光标跳转到命令行首

        ctrl+e:光标跳转到命令行尾部

        ctrl+d:删除当前光标所在字符

        ctrl+u:删除当前光标到行首的所有字符

        ctrl+k:删除当前光标到行尾的所有字符

    2.清屏方法

        使用ctrl+l快捷键或者使用命令

clear

    3.命令补全和路径补全

    使用tab键能够实现命令补全或者路径补全,但是二者的实现原理不一样:命令补全是在PATH环境变量下找相应的命令,但是路径补全是在打头的路径下进行搜索的。

三、命令历史相关

    1.怎样查看命令历史      

history

    2.history相关

        (1). history是内部命令(type命令查看),需要使用help查看,不能使用man查看。

        (2). 使用

echo $HISSIZE

            查看能够缓存的历史记录数量。默认是1000条。

        (3). history命令选项

histroy           -c            #清空历史记录           -d 500        #删除第500条记录           -d 500 10     #删除第500条记录到之后的十条记录之间的所有记录           -w            #写入到配置文件中~/.bash_history

        (4). 如果用户正常退出的话,历史记录会被保存到~/.bash_history中,下次登陆可以继续使用,否则不被保存;可以使用history -w手动保存当前历史记录到配置文件~/.bash_history

    3.执行某条历史记录中的命令

        !n:执行第n条命令

        !-n:执行倒数第n条命令

        !!:执行最近一条命令

        !string:执行以string开头的最后一条命令

        !$:引用自后一条命令使用的最后一个参数,可以使用alt+.快捷键或者按下ESC键不放再按下.

四、命令别名

    使用别名能够使得用户键入命令的效率更高,给命令其别名的目的就是“化繁为简”,将复杂而且经常使用的命令使用一个简单的命令代替。

    1.查看所有别名

alias

    2.起别名

alias cls=clear

    3.解除别名绑定

unalias cls

    4.如何调用命令本身而不是别名

使用\COMMAND即可。

五、命令引用

    命令引用的目的就是将某个命令的执行结果作为另外一个命令的执行参数。

    命令引用的方式就是$()或者使用``

    1.显示当前目录(自定义)

kdyzm@kdyzm:~$ echo "this is $(pwd) dir"    #这里必须使用双引号this is /home/kdyzm dir

    2.显示当前文件夹中所有文件的文件类型列表

kdyzm@kdyzm:~$ file $(ls)a.txt:            emptyb.txt:            ASCII textdatastructure:    directoryDesktop:          directoryDocuments:        directoryDownloads:        directoryexamples.desktop: UTF-8 Unicode textMusic:            directoryPictures:         directoryProgramFiles:     directoryPublic:           directorySoftWare:         directoryTemplates:        directoryVideos:           directory

    3.动态创建以当前时间为名字的文件

kdyzm@kdyzm:~$ touch "file-$(date +'%Y-%m-%d_%H:%M:%S').txt"kdyzm@kdyzm:~$ ll file*-rw-rw-r-- 1 kdyzm kdyzm 0  1月 28 17:27 file-2016-01-28_17:27:45.txt

六、文件名通配glob

    1.通配符

        *    :匹配任意长度的任意字符

        ?    :匹配长度为1的任意字符

        []   :匹配制定范围内的任意单个字符

        [^]:不匹配指定范围内的任意单个字符

    2.通过man 7 glob命令查看glob中的特殊通配符号

[:alnum:]  [:alpha:]  [:blank:]  [:cntrl:][:digit:]  [:graph:]  [:lower:]  [:print:][:punct:]  [:space:]  [:upper:]  [:xdigit:]    so  that  one can say "[[:lower:]]" instead of "[a-z]", and have thingswork in Denmark, too, where there are three letters  past  'z'  in  thealphabet.  These character classes are defined by the LC_CTYPE categoryin the current locale.

    3.示例

        (1). 显示所有字母开头,字母结尾,中间有空白的所有文件:

ls [[:alpha:]]*[[:space:]]*[[:alpha:]]

        (2). 显示所有以任意字符开头,以数字结尾,中间没有空格的文件

        错误的写法:

ls *[^[:space:]]*[[:digit:]]

        实际上只是使用通配符时解决不了该问题的,需要使用正则表达式解决该问题,存档待续。

七、bash的配置文件

    1.配置文件分类

        (1). 全局配置文件

/etc/profile/etc/profile.d/*.sh/etc/bashrc

        (2). 个人配置文件

~/.bash_profile~/.bashrc

    2.不同类别的配置文件有不同的作用

        (1). profile类的配置文件:设定环境变量,如果想要对所有用户都生效,就在/etc/profile.d文件夹中创建.sh文件即可; 运行脚本或者命令,可以针对全局或者个人的配置文件进行选择。

        (2). bashrc类的配置文件:设定本地变量;定义命令别名。

    3.登陆式shell如何读取配置文件

/etc/profile-->/etc/profile.d/*.sh-->~/.bash_profile-->~/.bashrc    -->/etc/bashrc

    4.非登陆式shell如何读取配置文件

~/.bashrc-->/etc/bashrc-->/etc/profile.d/*.sh