shell里的通配符和管道

复习;

硬连接必须是同一个磁盘分区内,不能跨设备,而软连接是可以的。

============================================================================================================

通配符

*代表通配任意多个字符

在aaa里有多个目录,一次全部删除

dashuai@ubuntu:~/aaa$ ls
a aa  aaaa  abcd asdf

那一个个的删除,太麻烦了,就可以使用通配符进行删除

dashuai@ubuntu:~/aaa$ rmdir a*
dashuai@ubuntu:~/aaa$ ls
dashuai@ubuntu:~/aaa$

前提是都是空目录!才能使用rmdir删除,这样我们就一下子全部删除了,不用并列或者一个个的删除。还有,比如只想删除b结尾的

dashuai@ubuntu:~/aaa$ ls
a1 a3  ab
dashuai@ubuntu:~/aaa$ rmdir *b
dashuai@ubuntu:~/aaa$ ls
a1 a3
dashuai@ubuntu:~/aaa$
这样就行了,不管什么东西,只要是b结尾的,全部删掉!而*是删除所有,因为可以通配任何字符。

==========================================================================================================

补充一个ls的选项–d,意思是如果是一个目录,那么只看这个目录本身的信息,不去看他里面的东西。

dashuai@ubuntu:~/aaa$ ls -l
total 8
drwxrwxr-x 2 dashuai dashuai 4096 May 2120:17 a1
drwxrwxr-x 2 dashuai dashuai 4096 May 2120:17 a3
dashuai@ubuntu:~/aaa$ ls -l -d
drwxrwxr-x 4 dashuai dashuai 4096 May 2120:18 .
这个样子。没有进入目录aaa里,而是直接看了aaa本身的详细信息。

===========================================================================================================

还有,比如以a打头3结尾的目录,全部删掉

dashuai@ubuntu:~/aaa$ ls
a1 a3  a32  afdf23 aggsx  ags
dashuai@ubuntu:~/aaa$ rmdir a*3
dashuai@ubuntu:~/aaa$ ls
a1 a32  aggsx  ags
dashuai@ubuntu:~/aaa$
 


通配符 ? 代表任意的一个字符

dashuai@ubuntu:~/aaa$ ls
a1 a32  aggsx  ags
dashuai@ubuntu:~/aaa$ ls ???
a32:
 
ags:
dashuai@ubuntu:~/aaa$
这样只列出三个字符的,注意是字符,不一定必须是字母,但是只能是代表任意一个,不能多不能少。

dashuai@ubuntu:~/aaa$ ls
a1 a32  aggsx  ags
dashuai@ubuntu:~/aaa$ ls -d a?
a1
dashuai@ubuntu:~/aaa$

加–d 可以列出目录,只列出a打头,然后接一个字符的。就是a1

 

通配一个字符集或者一个范围[ ],表示通配指定范围内的一个字符

dashuai@ubuntu:~/aaa$ touch a1 a2 a3 a4 a4aad af ag ah
dashuai@ubuntu:~/aaa$ ls
a1 a2  a3  a4 a4a  ad  af ag  ah
dashuai@ubuntu:~/aaa$

然后我们用[]通配符,只到a打头,然后接着数字的,两个字符的

dashuai@ubuntu:~/aaa$ ls a[0-9]
a1 a2  a3  a4
dashuai@ubuntu:~/aaa$

当然删除也可以啊,新建什么的

dashuai@ubuntu:~/aaa$ rm a[0-2]
dashuai@ubuntu:~/aaa$ ls
a3 a4  a4a  ad af  ag  ah
 
注意,也是通配一个字符。

dashuai@ubuntu:~/aaa$ ls
a1 a2  a3  a4 a5  a6  a7
dashuai@ubuntu:~/aaa$ echo a[1-12]
a1 a2
dashuai@ubuntu:~/aaa$ echo a[9-12]
a2
dashuai@ubuntu:~/aaa$
这样写,意思是

1-1,或者2

9-1 或者 2

有通配的就显示出来。并且一定是只匹配一个字符!!!!!!!!!!


注意:

这些通配符都是shell处理的,命令本身不处理这些通配符。在windows下,linux下,这些通配符都是常用的。

 

对于查看文件内容的命令,除了cat之外,还有很多,比如more,对于大文件专用,比如cat 查看passwd文件

dashuai@ubuntu:/$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
www-data:x:33:33:www-data:/var/www:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
list:x:38:38:Mailing ListManager:/var/list:/bin/sh
irc:x:39:39:ircd:/var/run/ircd:/bin/sh
gnats:x:41:41:Gnats Bug-Reporting System(admin):/var/lib/gnats:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
libuuid:x:100:101::/var/lib/libuuid:/bin/sh
syslog:x:101:103::/home/syslog:/bin/false
messagebus:x:102:105::/var/run/dbus:/bin/false
avahi-autoipd:x:103:106:Avahi autoipdaemon,,,:/var/lib/avahi-autoipd:/bin/false
usbmux:x:104:46:usbmuxdaemon,,,:/home/usbmux:/bin/false
whoopsie:x:105:110::/nonexistent:/bin/false
kernoops:x:106:65534:Kernel Oops TrackingDaemon,,,:/:/bin/false
rtkit:x:107:114:RealtimeKit,,,:/proc:/bin/false
speech-dispatcher:x:108:29:SpeechDispatcher,,,:/var/run/speech-dispatcher:/bin/sh
colord:x:109:117:colord colour managementdaemon,,,:/var/lib/colord:/bin/false
lightdm:x:110:118:Light DisplayManager:/var/lib/lightdm:/bin/false
avahi:x:111:120:Avahi mDNSdaemon,,,:/var/run/avahi-daemon:/bin/false
hplip:x:112:7:HPLIP systemuser,,,:/var/run/hplip:/bin/false
pulse:x:113:121:PulseAudiodaemon,,,:/var/run/pulse:/bin/false
saned:x:114:123::/home/saned:/bin/false
dashuai:x:1000:1000:Ubuntu,,,:/home/dashuai:/bin/bash
dashuai@ubuntu:/$
而more命令是分步查看,对大文件,会暂停的。按回车键往下走一行,按空格键往下走一屏幕。但是如果很长的文件,那很麻烦,想退出,就按q,退出就行了。


注意:

dashuai@ubuntu:/$ ls^C
dashuai@ubuntu:/$
ctrl+c停止执行这个命令,任意键不能是这个键!!


还有less命令,也是分屏显示文件内容,但是more不能后退,而less可以进退自如,使用方向键随意的查看文件的内容,翻看内容。


有的时候我们对文件内容不感兴趣,我们可以只看文件的开头,使用head命令,默认显示前十行行,当然可以带着选项数字,指定显示多少行。

dashuai@ubuntu:/$ head /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
dashuai@ubuntu:/$


同理只想看后几行,就用tail,尾巴的意思,也是10行,也可以加上选项数字。

dashuai@ubuntu:/$ tail -2 /etc/passwd
saned:x:114:123::/home/saned:/bin/false
dashuai:x:1000:1000:Ubuntu,,,:/home/dashuai:/bin/bash
dashuai@ubuntu:/$


统计文件的内容,使用wc命令 word count,统计三个数据,行数,单词数,字符数

dashuai@ubuntu:/$ wc /etc/passwd
 34   56 1663 /etc/passwd
dashuai@ubuntu:/$


只统计行数wc –l,-c只要字符数,-w只要单词数

dashuai@ubuntu:/$ wc -l /etc/passwd
34 /etc/passwd
dashuai@ubuntu:/$

注意:

这个命令不是真正的去查找单词,而是以空格,换行为标准,比如一行东东,如果没有空格,就默认是一个单词了。显然是单词数统计不太准确了!但是行数很准确的。

 

可以查找字符串的命令,是grep命令,在一个文件里查找包含指定的字符串的行,并把字符串所在行打印出来。

格式;grep 字符串文件

dashuai@ubuntu:~$ grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
dashuai@ubuntu:~$ grep Root /etc/passwd
dashuai@ubuntu:~$ grep -i Root /etc/passwd
root:x:0:0:root:/root:/bin/bash
这里使用i选项,可以忽略大小写,ignore的意思。

 

查找不包含某个关键字的行,使用反检索reverse,grep –v 字符串文件。这样查出来,东西很多,不好看,就可以使用重定向 > 命令到别的文件,然后more或者less等命令去查看。然后再rm删除这个文件即可。

dashuai@ubuntu:~$ grep -v dashuai /etc/passwd> linshi.txt;more linshi.txt;rm linshi.txt
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
 
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
www-data:x:33:33:www-data:/var/www:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
list:x:38:38:Mailing ListManager:/var/list:/bin/sh
irc:x:39:39:ircd:/var/run/ircd:/bin/sh
gnats:x:41:41:Gnats Bug-Reporting System(admin):/var/lib/gnats:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
libuuid:x:100:101::/var/lib/libuuid:/bin/sh
syslog:x:101:103::/home/syslog:/bin/false
messagebus:x:102:105::/var/run/dbus:/bin/false
avahi-autoipd:x:103:106:Avahi autoipdaemon,,,:/var/lib/avahi-autoipd:/bin/false
usbmux:x:104:46:usbmux daemon,,,:/home/usbmux:/bin/false
--More--(61%)
 

这样的命令集合,用的很多,但是很麻烦,在unix/linux里就有了管道


管道 | :将一个命令的输出作为下一个命令的输入,意思就是将左边的命令输出当作一个文件,交给右边的命令来处理。

dashuai@ubuntu:~$ grep root /etc/passwd | wc
     1       1      32
是这个样子

dashuai@ubuntu:~$ grep dashuai /etc/passwd| wc -l
1
dashuai@ubuntu:~$ gerp dashuai /etc/passwd
No command 'gerp' found, did you mean:
 Command 'grep' from package 'grep' (main)
gerp: command not found
dashuai@ubuntu:~$ grep dashuai /etc/passwd
dashuai:x:1000:1000:Ubuntu,,,:/home/dashuai:/bin/bash
dashuai@ubuntu:~$

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值