我的Linux学习笔记·Bash特性和文件名通配
上一次笔记我们说到了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:]]:取非空白字符;
欢迎关注我们