{},花括号展开
pei@ubuntu:~$ echo a{A{1,2},B{3,4}}b
aA1b aA2b aB3b aB4b
” ,在双引号之间的文本,除了$,\ (反斜杠),和‘(单引号)之外,都被当作普通字符来看待。这意味着单词分割,路径名展开,波浪线展开,和花括号展开都被禁止,然而参数展开,算术展开,和命令替换仍然执行。使用双引号,我们可以处理包含空格的文件名。
’ ,可以禁止所有的展开,原样输出。
//~被展开为路径,*通配符展开,{}花括号展开,$(expression)展开,$((2+2))展开,$USER展开
pei@ubuntu:~$ echo text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER
text /home/pei/a.txt a b foo 4 pei
//~不展开,*不展开,{}不展开,$(expression)展开,$((2+2))展开,$USER展开
pei@ubuntu:~$ echo "text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER"
text ~/*.txt {a,b} foo 4 pei
//全部不展开
pei@ubuntu:~$ echo 'text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER'
text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER
//试一试转义字符 \
pei@ubuntu:~$ echo text \~/\*.txt \{a,b\} $(echo foo) $((2+2)) \$USER
text ~/*.txt {a,b} foo 4 $USER
一般来讲,通配符是shell相关的,常用来文件名操作什么的。
正则表达式则是用来过滤文本的,查找文件内容。
通配符
*:匹配0个字符或多个字符。
?:匹配任何单个字符,且不能为空字符。
[a-z]或[123]:匹配方括号中指定范围内的单个字符或方括号列出的其中一个字符。
[!9]:不匹配方括号中所列字符或指定范围内的单个字符。
正则表达式
POSIX 把正则表达式的实现分成了两类:基本正则表达式(BRE)和扩展的正则表达式(ERE)
BRE
^ 匹配所有以指定正则表达式开始的行。
$ 匹配所有以指定正则表达式结束的行。
* 匹配该字符的前一个字符的0次或多次出现。
. 匹配任何单个字符,功能上和通配符中的?符号相同。
[a-z]或[123] 匹配[]的任一个元素。
ERE
+ 匹配前面字符一次以上。
? 匹配字符1次或0次,即可有可无。
{m} {m,} {m,n} {,n} 表示前边字符的匹配次数,匹配次数是一个数 或者 区间。
() 将候选的元素放在括号内用 | 展开,例 a(b|c)d 匹配abd或者acd。
//必须加-E
pei@ubuntu:~$ grep -iE '^(zions|zippe)' /usr/share/dict/words
Zions
zipped
zipper
zipper's
zippered
zippering
zippers
//匹配这样一种格式,xxx xxx-xxxx 或者(xxx) xxx xxx-xxxx
pei@ubuntu:~$ echo "(555) 123-4567" | grep -E '^\(?[0-9]{3}\)? [0-9]{3}-[0-9]{4}$'
(555) 123-4567
pei@ubuntu:~$ echo "123-4567" | grep -E '^\(?[0-9]{3}\)? [0-9]{3}-[0-9]{4}$'
pei@ubuntu:~$ echo "555 123-4567" | grep -E '^\(?[0-9]{3}\)? [0-9]{3}-[0-9]{4}$'
555 123-4567
//发现包含空格和其它不规范字符的路径名
pei@ubuntu:~$ find . -regex '.*[^-\_./0-9a-zA-Z].*'
./.mozilla/firefox/Pending Pings
./.mozilla/firefox/wbjk9bl7.default/bookmarkbackups/bookmarks-2017-09-18_20_O51MxMYeOYYWoX469Lsi6w==.jsonlz4
./.mozilla/firefox/wbjk9bl7.default/features/{73ac8073-8b04-4519-9d3b-00626167b392}
//当前目录下有a.txt abtxt
pei@ubuntu:~$ find . -regex "./a\.txt"
./a.txt
pei@ubuntu:~$ find . -regex "./a.txt"
./a.txt
./abtxt
命令里一些通用的选项:
-a 通常指 all
-h 通常指 human, 也就是 human-readable
-i 可能指ignore ,即忽略大小写
-f 可能指force
-r 通常指 recursive
-n 通常指 n个数量
-v 通常指 显示过程
locate命令其实是find -name的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库/var/lib/locatedb,这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。
可以查找二进制程序、源代码文件和man手册页等相关文件的路径。和locate一样,数据存在数据库中,快但不及时。
比如 whereis pwd
显示pwd: /bin/pwd /usr/include/pwd.h /usr/share/man/man1/pwd.1.gz
如果加上-b,-s,-m则分别显示其中的一个。
1.find + exec
查找当前目录下所有.txt文件并把他们拼接起来写入到all.txt文件中。应该知道 {}这个东西是花括号展开,\; 代表着命令结束。
find . -type f -name “*.txt” -exec cat {} > all.txt \;
2.find + xargs
查找当前目录下的普通文件并去掉他们的可执行权限
find . -type f -print | xargs chmod a-x
3.find + grep
查找当前目录下的普通文件,并查找含有hello的行,然后统计行数。
find . -type f | xargs grep “hello” | wc -l
4.还有其他的一些选项,-type,-name,-maxdepth (0的话什么也没有,1的话就是只查找当前目录里边的,······),-size,-perm。!代表“非”, -o代表“或”。
which命令用于查找并显示给定命令的绝对路径,环境变量PATH中保存了查找命令时需要遍历的目录。
比如说which pwd 显示/bin/pwd
环境变量可以这样查看 echo $PATH,我的电脑上显示/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
监视系统输入输出设备和CPU的使用情况。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。同vmstat一样,iostat也有一个弱点,就是它不能对某个进程进行深入分析,仅对系统的整体情况进行分析。
例如
Device 监测设备名称; rrqm/s 每秒需要读取需求的数量; wrqm/s 每秒需要写入需求的数量; r/s 每秒实际读取需求的数量; w/s 每秒实际写入需求的数量; rsec/s 每秒读取区段的数量; wsec/s 每秒写入区段的数量; rkB/s 每秒实际读取的大小,单位为KB; wkB/s 每秒实际写入的大小单位为KB; avgrq-sz 需求的平均大小区段; avgqu-sz 需求的平均队列长度; await 等待I/O平均的时间(milliseconds); svctm I/O需求完成的平均时间; %util 被I/O需求消耗的CPU百分比。
http://man.linuxde.net/vmstat
显示虚拟内存状态(“Viryual Memor Statics”),但是它可以报告关于进程、内存、I/O等系统整体运行状态。
例如下图,每5s执行一次,执行100次,输出到vmstat.out文件中,并后台运行。
打印Linux中网络系统的状态信息。
pei@ubuntu:~/test$ netstat -i
Kernel Interface table
Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
ens33 1500 17883 0 0 0 9913 0 0 0 BMRU
lo 65536 344 0 0 0 344 0 0 0 LRU
//netstat -r route
pei@ubuntu:~/test$ netstat -r
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
default gateway 0.0.0.0 UG 0 0 0 ens33
link-local 0.0.0.0 255.255.0.0 U 0 0 0 ens33
192.168.168.0 0.0.0.0 255.255.255.0 U 0 0 0 ens33
//-p, --programs display PID/Program name for sockets
root@ubuntu:/home/pei/test# netstat -pt
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 ubuntu:44024 a184-51-15-141.dep:http ESTABLISHED 7251/firefox
tcp 0 1 ubuntu:33860 243.185.187.39:http SYN_SENT 7251/firefox
tcp 0 0 ubuntu:53238 ec2-54-69-100-200:https ESTABLISHED 7251/firefox
tcp 0 0 ubuntu:51910 117.18.237.29:http ESTABLISHED 7251/firefox
tcp 0 1 ubuntu:33858 243.185.187.39:http SYN_SENT 7251/firefox
tcp 0 0 ubuntu:55782 ec2-54-186-39-123:https ESTABLISHED 7251/firefox
tcp 0 0 ubuntu:60064 ec2-54-68-15-229.:https ESTABLISHED 7251/firefox
tcp 0 0 ubuntu:51904 117.18.237.29:http ESTABLISHED 7251/firefox
tcp 0 0 ubuntu:57468 server-54-192-75-:https ESTABLISHED 7251/firefox
//-l listening -t tcp
root@ubuntu:/home/pei/test# netstat -lt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:hostmon 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN
tcp 0 0 localhost:ipp 0.0.0.0:* LISTEN
tcp6 0 0 [::]:hostmon [::]:* LISTEN
tcp6 0 0 [::]:ssh [::]:* LISTEN
tcp6 0 0 ip6-localhost:ipp [::]:* LISTEN
top命令可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具。类似于任务管理器。
free是真正的空闲的,
buffers是用来给块设备做的缓冲大小、buffers是用来存储目录里面有什么内容,权限等等。
cached用来给文件做缓冲,用来记忆我们打开的文件。
所以操作系统目前可用内存总量=free + buffers/cached。而真正已用的是buffer/cache - used。
SWAP就是LINUX下的虚拟内存分区,它的作用是在物理内存使用完之后,将磁盘空间(也就是SWAP分区)虚拟成内存来使用.它和Windows系统的交换文件作用类似,但是它是一段连续的磁盘空间,并且对用户不可见。
top - 02:17:32 up 18:55, 1 user, load average: 0.00, 0.00, 0.00
Tasks: 238 total, 1 running, 237 sleeping, 0 stopped, 0 zombie
%Cpu(s): 4.1 us, 1.7 sy, 0.0 ni, 94.2 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 2027028 total, 215092 free, 1034668 used, 777268 buff/cache
KiB Swap: 2097148 total, 2027632 free, 69516 used. 764204 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1144 root 20 0 528620 53796 23924 S 2.0 2.7 4:45.72 Xorg
6987 pei 20 0 770964 28100 18324 S 2.0 1.4 0:29.52 gnome-terminal-
7489 root 20 0 44792 4144 3344 R 0.7 0.2 0:45.84 top
2038 pei 20 0 1065872 58236 26020 S 0.3 2.9 1:15.87 nautilus
2045 pei 20 0 594140 14500 10380 S 0.3 0.7 0:00.52 unity-fallback-
2126 pei 20 0 1242272 68096 27204 S 0.3 3.4 4:28.74 compiz
ulimit -a 查看
pei@ubuntu:~$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 11771
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 11771
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited