通配符就是通用的匹配信息的符号,比如星号(*)代表匹配零个或多个字符, 问号(?)代表匹配单个字符,中括号内加上数字[0-9]代表匹配 0~9 之间的单个数字的字符, 而中括号内加上字母[abc]则是代表匹配 a、b、c 三个字符中的任意一个字符。
匹配所有在/dev 目录中且以 nvme 开头的文件:
[root@rhel-8 ~]# ls -l /dev/nvme*crw-------. 1 root root 243, 0 Nov 1410:37 /dev/nvme0 brw-rw----. 1 root disk 259, 0 Nov 1410:37 /dev/nvme0n1 brw-rw----. 1 root disk 259, 1 Nov 1410:37 /dev/nvme0n1p1 brw-rw----. 1 root disk 259, 2 Nov 1410:37 /dev/nvme0n1p2
如果只想查看文件名以 sda 开头,但是后面还紧跟其他某一个字符的文件的相关信息, 这时就需要用到问号来进行通配了:
[root@rhel-8 ~]# ls -l /dev/nvme?crw-------. 1 root root 243, 0 Nov 1410:37 /dev/nvme0
除了使用[0-9]来匹配 0~9 之间的单个数字,也可以用[012]这样的方式仅匹配这 3 个指 定数字中的一个;若没有匹配到数字 1 或 3 或 5,则不会显示出来:
[root@rhel-8 ~]# ls -l /dev/nvme[0-9]crw-------. 1 root root 243, 0 Nov 1410:37 /dev/nvme0 [root@rhel-8 ~]# ls -l /dev/nvme[012]crw-------. 1 root root 243, 0 Nov 1410:37 /dev/nvme0 [root@rhel-8 ~]# ls -l /dev/nvme[135]ls: cannot access '/dev/nvme[135]': No such file or directory
通配符不一定非要放到最后面,也可以放到前面。比如,可以使用下述命令来搜索/etc/ 目录中所有以.conf 结尾的配置文件有哪些:
[root@rhel-8 ~]# ls -l /etc/*.conf-rw-r--r--. 1 root root 55 Feb 12019 /etc/asound.conf -rw-r--r--. 1 root root 25696 Dec 122018 /etc/brltty.conf -rw-r--r--. 1 root root 1083 Apr 42018 /etc/chrony.conf ...
通配符不仅可用于搜索文件或代替被通配的字符,还可以与创建文件的命令相结合, 一口气创建出好多个文件。不过在创建多个文件时,需要使用大括号,并且字段之间用逗 号间隔:
[root@rhel-8 ~]# touch {aa,bb,cc}.conf[root@rhel-8 ~]# ls -l *.conf-rw-r--r--. 1 root root 0 Nov 1419:40 aa.conf -rw-r--r--. 1 root root 0 Nov 1419:40 bb.conf -rw-r--r--. 1 root root 0 Nov 1419:40 cc.conf
通配符还可以输出一些指定的信息:
[root@rhel-8 ~]# echo file{1,2,3,4,5}file1 file2 file3 file4 file5