查看原文
其他

我的Linux学习笔记·Bash特性和文件名通配

2017-03-26 阿现 生信媛

上一次笔记我们说到了shell,它是我们与内核交互的一个界面。今天的笔记将详细介绍一下bash.

 

Bash是Bourne-Again Shell的缩写,它是许多Linux发行版的默认shell。除了bash之外,还有ash,ksh,csh,zsh等,它们的很多特性都大致类同。当一个用户成功登录系统后,系统将会执行一个Bash程序,作为我们和系统交互的界面,也就是我们输入命令的地方。Bash提供了命令行提示符,普通用户的提示符为$,root以#作为提示符。我们可以在提示符后面输入命令,比如我们想看当前的shell类别,输入

echo $SHELL即可。


Bash的命令行编辑

Tab:命令补全

Tab具有命令补全功能,比如我们要输入一个命令history来查看命令历史,我们只需要输入hist,然后摁tab键,系统就会自动帮我们补全成history.

又比如我们的当前文件夹下有一个叫做hello的文件,我们要把它删除,只需输入hel,然后摁tab键,系统就会自动帮我们找到hello文件。但是假如我们同时还有一个叫做helle的文件,摁一次tab键系统只能帮我们补全到hell,再摁两次,系统则会显示出所有的可能(即hello和helle)。

Bash的命令行还有一些快捷键:

Ctrl+a:跳到命令行首;

Ctrl+e:跳到命令行尾;

Ctrl+d:=delete键

Ctrl+u:删除光标至命令行首内容;

Ctrl+k:删除光标至命令行尾内容;

Ctrl+l:清屏;

 

命令历史

我们可以通过history命令查看命令历史,命令历史存放在用户家目录下的.bash_history文件内。

history

-c: 清空命令历史;

-d:history -d 500删除第500个历史;history-d 500 10删除第500个及后面的共10个历史;

-w: 保存命令历史至历史文件中;环境变量中的HISTSIZE可以控制保存的命令条数;

!n: 执行命令历史中的第n条命令;

!-n:执行命令历史中倒数第n条命令;

!!: 执行刚刚执行的命令;

!string: 执行命令历史中最近一条以string开头的命令;

!$:引用上一个命令的最后一个参数;或按ESC(松开后)按点号;或Alt+. ;

  例如,我们刚刚新建一个文件名为hello的文件:

  touch hello

  接着,我们把它删除,

  rm 摁ESC(松开后)摁点号,命令行就会补全为:rm hello

 

命令别名

alias可以让我们实现用更加简短的名称来定义linux中的shell命令,从而简化命令行输入,提高效率。

alias的基本使用方法为:alias 别名=‘命令 –选项’。

例如:我们想要输入la等效于ls –la。输入la,会提示

-bash: la: command not found;

我们定义别名

alias la=’ls–la’,

之后再输入la,系统就会显示出当前文件夹下所有的文件。

若要撤销命令别名,可以使用unalias命令。

在shell中定义的别名仅在当前shell的生命周期中有效,有效范围为当前shell进程;

可通过配置文件定义别名以使其永久有效;

打开家目录下的.bashrc,在其中加入我们想要定义的别名,如

alias la=’ls –la’

保存退出后,输入

source .bashrc

这时,我们再输入la命令,就和输入ls –la等效了。

 

命令替换

Bash具有命令替换的功能,即把命令中的某个子命令替换为执行结果,使用格式为:

$(COMMAND)或`COMMAND`(反引号)

例如,date +%F命令可以查看今天的日期,我们若想建一个新文件,以今天的日期命名,则可以使用以下命令:


文件名通配

我们使用命令行查找或删除某些文件,如果文件有很多,我们依靠输入完整的文件名挨个删除是很麻烦的。Bash提供了一套字符串模式匹配规则,即通过定义一些通配符来匹配相应的文件,大大提高了我们的效率。文件名通配(globbing)和正则表达式是有区别的,通配符多用于文件名的匹配,而正则表达式多针对文件内容。我们常用的文本过滤工具如awk等都是用正则表达式。

下面是常用的一些通配符。

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

例如我们的当前文件夹下有4个文件:

a.txt

b.txt

c.txt

d.xls

我们想要删除以txt结尾的文件,则可以使用命令:

rm *.txt

另外还有一些常用的通配符,用法都大同小异。

?:匹配任意单个字符;

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

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

[::]:中括号和冒号中间加某些字母,可以表示某个范围的字符,外面再加一个中括号可表示匹配;

[[:space:]]:空白字符;

[[:punct:]]:标点符号;

[[:lower:]]:小写字母;

[[:upper:]]:大写字母;

[[:alpha:]]:大小写字母;

[[:digit:]]:数字;

[[:alnum:]]:数字和大小写字母;

[^[:space:]]:取非空白字符;

欢迎关注我们




您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存