“*” 通配符,代表零个或多个字符
[root@aming01 ~]# ls
1.txt 2.txt 666 aa.txt anaconda-ks.cfg txt.1
[root@aming01 ~]# ls *.txt
1.txt 2.txt aa.txt
“?” 代表一个字符
[root@aming01 ~]# ls
1.txt 2.txt 666 aa.txt anaconda-ks.cfg txt.1
[root@aming01 ~]# ls ??.*
aa.txt
[root@aming01 ~]# ls ?.*
1.txt 2.txt
“#” 注释字符
“\” 脱意字符
[root@aming01 ~]# echo a$b
a
[root@aming01 ~]# echo a\$b
a$b
“|” 管道符,将管道符左边的命令的输入内容,传递给右边的命令,例如我有一次做实验时,别人给我的解释
用来截取字符串,用法为cut -d ‘分某字符’ [-cf] n ,n是数字
-d:后面跟分割字符,需要用单引号括起来
-c:后面接的是第几个字符
-f:后面接的是第几个区块
cat passwd.bak这个文件,head只查看前两行,cut -d截取分割符号为“:”, -f 1 表示截取第一段,2表示第二段,1-3表示头三段;
[root@aming01 ~]# cp /etc/passwd ./passwd.bak
[root@aming01 ~]# cat passwd.bak |head -3
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@aming01 ~]# cat passwd.bak |head -3 |cut -d ":" -f 1
root
bin
daemon
[root@aming01 ~]# cat passwd.bak |head -3 |cut -d ":" -f 2
x
x
x
[root@aming01 ~]# cat passwd.bak |head -3 |cut -d ":" -f 1-4
root:x:0:0
bin:x:1:1
daemon:x:2:2
用做排序,格式为sort [-t 分隔符] [-kn1,n2] [-nru],n1和n2指的是数字,后面不加选项,则按ASCⅡ码值排序
-n: 以纯数字排序,而其中的字符和字母都会默认为0
-r :反向排序
-u:去重复
-t :分隔符
-kn1,n2:表示由n1区间排序到n2区间
[root@aming01 ~]# vi passwd.bak
[root@aming01 ~]# sort -n passwd.bak
adm:x:3:4:adm:/var/adm:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
halt:x:7:0:halt:/sbin:/sbin/halt
hhh:x:1001:1005::/home/qwe:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
su1:x:1003:1003::/home/su1:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
user1:x:1002:1002::/home/user1:/bin/bash
加上-r选项
[root@aming01 ~]# sort -nr passwd.bak
user1:x:1002:1002::/home/user1:/bin/bash
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
su1:x:1003:1003::/home/su1:/bin/bash
-f :忽略字母的大小写
默认以ASCII编码表进行排序。
[root@long01 ~]# echo -e "a\nB\nC\nd" | sort
B
C
a
d
[root@long01 ~]# echo -e "a\nB\nC\nd" | sort -f
a
B
C
d
=============================================
-b :忽略最前面的空白字符部分
[root@long01 ~]# echo -e "a\nB\n C" | sort -f
C
a
B
[root@long01 ~]# echo -e "a\nB\n C" | sort -fb
a
B
C
=============================================
-n :使用字符编码的大小进行排序
[root@long01 ~]# echo -e "a\nB\n1\n2\nC" | sort -f
1
2
a
B
C
[root@long01 ~]# echo -e "a\nB\n1\n2\nC" | sort -fn
B
C
a
1
2
=============================================
-r :反向排序
[root@long01 ~]# echo -e "a\nB\n C" | sort -fr
B
a
C
[root@long01 ~]# echo -e "a\nB\n C" | sort -f
C
a
B
=============================================
-u :就是 uniq ,内容相同的行只出现一次。
[root@long01 ~]# echo -e "a\nB\n C\na" | sort -f
C
a
a
B
[root@long01 ~]# echo -e "a\nB\n C\na" | sort -fu
C
a
B
=============================================
-t :指定分隔符,默认是用 [tab] 键来分隔
-k :以分隔符隔开的第几段进行排序,通常与-t同时使用。
[root@long01 ~]# cut -d ":" -f 1,3 /etc/passwd | tail -5 |sort
long10:1003
ntp:38
saslauth:997
user.1:1002
user2:1001
//cut -d ":" -f 1,3 #截取/etc/passwd文件内容中以冒号分隔的第一列和第三列内容
//tail -5 #显示最后5行
//sort -t ":" -k2 #以冒号分隔的第二列内容进行排序。
[root@long01 ~]# cut -d ":" -f 1,3 /etc/passwd | tail -5 |sort -t ":" -k2
user2:1001
user.1:1002
long10:1003
ntp:38
saslauth:997
echo -e 处理特殊字符若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出
比如echo “\n”会直接输出\n,
而echo -e “\n”会输出一个换行
用于统计文档的行数、字符数或词数
-l:统计行数
-m:统计字符数,包括空格、换行符等空白字符
-w:统计词数,以空格或空白字符区分 例如:adb ert fag gfag 4个
[root@aming01 ~]# wc -l passwd.bak
21 passwd.bak
[root@aming01 ~]# wc -m passwd.bak
913 passwd.bak
[root@aming01 ~]# wc -w passwd.bak
29 passwd.bak
cat -A命令可以显示隐藏字符,换行符$
[root@aming01 ~]# cat -A passwd.bak
root:x:0:0:root:/root:/bin/bash$
bin:x:1:1:bin:/bin:/sbin/nologin$
daemon:x:2:2:daemon:/sbin:/sbin/nologin$
adm:x:3:4:adm:/var/adm:/sbin/nologin$
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin$
sync:x:5:0:sync:/sbin:/bin/sync$
wc -L:统计内容中最长的一行的字符数。
[root@long01 ~]# cat /etc/passwd | wc -L
68
1
2
3
wc -c:统计内容的字节大小,Linux中:英文字符与数字都为1字节,中文字符为3字节
[root@long01 ~]# echo "123" | wc -m
4
[root@long01 ~]# echo "123龙" | wc -m
7
用来删除重复的行,经常与sort命令连在一起使用,先排序再去重,uniq -c表示统计重复的行数(常用)
先排序,后去重
[root@aming01 ~]# vim 1.txt
[root@aming01 ~]# cat 1.txt
111
123
111
456
456
666
-i 去除相同内容的行,忽略字母的大小写
[root@aming01 ~]# uniq -i 1.txt
111
123
111
456
666
[root@aming01 ~]# sort 1.txt |uniq -i
111
123
456
666
-c:统计内容相同的行的数量,需要先进行排序
[root@aming01 ~]# sort 1.txt |uniq -c
1
2 111
1 123
2 456
1 666
tee可以进行双向重定向,可以将命令的输出内容同时输入到文件和终端显示。
(把正确输出信息定向到一个文件中,并且在当前屏幕显示)
与输入输出重定向不同,tee命令需要配合管道符使用
[root@aming01 ~]# sort 1.txt |uniq -c > 2.txt
[root@aming01 ~]# cat 2.txt
1
2 111
1 123
2 456
1 666
[root@aming01 ~]# sort 1.txt |uniq -c |tee 2.txt
1
2 111
1 123
2 456
1 666
-a 以追加的方式将内容输入文件。
不使用-a选项时会覆盖文件原来的内容
[root@aming01 ~]# sort 1.txt |uniq -c |tee -a 2.txt
1
2 111
1 123
2 456
1 666
[root@aming01 ~]# cat 2.txt
1
2 111
1 123
2 456
1 666
1
2 111
1 123
2 456
1 666
tr命令可以用来删除或替换标准输入的内容。
格式: tr 选项 字符集1 字符集2
不带选项默认会使用字符集2替换字符集1
echo "192.168.1.1" | tr "." "_"
192_168_1_1
改变大小写:
[root@long01 ~]# echo "hello world" | tr "a-z" "A-Z"
HELLO WORLD
-d选项:删除输入内容中所有在字符集1中出现每一个字符
删除输入内容所有小写字母:
[root@long01 ~]# tail -5 /etc/passwd | tr -d "a-z"
::38:38:://://
2::1001:1001:://2://
.1::1002:1002:://.1://
10::1003:1003:://10://
::997:76:S ://:// ##注意不会删除大写字母。
删除所有字母:
[root@long01 ~]# tail -5 /etc/passwd | tr -d "A-Za-z"
::38:38:://://
2::1001:1001:://2://
.1::1002:1002:://.1://
10::1003:1003:://10://
::997:76: ://://
删除所有数字:
[root@long01 ~]# tail -5 passwd | tr -d "0-9"
ntp:x::::/etc/ntp:/sbin/nologin
user:x::::/home/user:/bin/bash
user.:x::::/home/user.:/bin/bash
long:x::::/home/long:/bin/bash
saslauth:x:::Saslauthd user:/run/saslauthd:/sbin/nologin
(注:tr并不能改变文件原有的内容。)
用于替换字符,常用于把小写字母变成大写字母,替换数字时,要去掉方括号[ ]
split命令可以将一个文件分割为多个小文件, 可以按大小分割,或者按行数分割。
使用场景:
有时我们需要分析一个日志文件,但是这个日志文件过于庞大(比如日志文件大小超过1G)
这样分析起来会比较慢, 此时我们就可以使用split命令将这个日志文件分割为多个小文件,提高效率。
例:
首先生成一个10M大小的测试文件
[root@long01 test]# dd if=/dev/zero of=./split.test bs=1M count=10
10+0 records in
10+0 records out
10485760 bytes (10 MB) copied, 0.0531762 s, 197 MB/s
[root@long01 test]# du -sbh ./split.test
10M ./split.test
使用split命令将前面生成的测试文件分割为1M大小的文件
分割后的文件名默认以xa开始,后缀以a开始
[root@long01 test]# split -b 1M split.test
[root@long01 test]# ls
split.test xaa xab xac xad xae xaf xag xah xai xaj
也可以指定分割后的文件名前缀与数字后缀,和后缀长度
格式: split -b 1M split.test -d -a 2 split.test.
-b : 指定按大小分割文件
split.test 需要分割的文件。
-d: 使用数字后缀
-a : 指定后缀长度
split.test. :分割后的文件名前缀
[root@long01 test]# split -b 1M split.test -d -a 2 split.test.
[root@long01 test]# ll
total 20480
-rw-r--r-- 1 root root 10485760 Jun 3 02:21 split.test
-rw-r--r-- 1 root root 1048576 Jun 3 02:30 split.test.00
-rw-r--r-- 1 root root 1048576 Jun 3 02:30 split.test.01
-rw-r--r-- 1 root root 1048576 Jun 3 02:30 split.test.02
-rw-r--r-- 1 root root 1048576 Jun 3 02:30 split.test.03
-rw-r--r-- 1 root root 1048576 Jun 3 02:30 split.test.04
-rw-r--r-- 1 root root 1048576 Jun 3 02:30 split.test.05
-rw-r--r-- 1 root root 1048576 Jun 3 02:30 split.test.06
-rw-r--r-- 1 root root 1048576 Jun 3 02:30 split.test.07
-rw-r--r-- 1 root root 1048576 Jun 3 02:30 split.test.08
-rw-r--r-- 1 root root 1048576 Jun 3 02:30 split.test.09
-l :按行数分割
[root@long01 test]# cp /etc/passwd .
[root@long01 test]# split -l 5 passwd -d -a 2 passwd.
[root@long01 test]# ls ./passwd.*
./passwd.00 ./passwd.01 ./passwd.02 ./passwd.03 ./passwd.04
可以指定文件大小,也可以指定文件名字前缀
split还可以根据行数分割
shell特殊符号下
变量前缀,! 变 量 前 缀 , ! 组合,正则里面表示行尾
;多条命令写到一行,用分号分割
~ 用户家目录,后面正则表达式表示匹配符
& 放到命令后面,会把命令丢到后台
正确重定向 >> 追加重定向 2> 错误重定向 2>> 错误追加重定向 &> 正确和错误输出重定向
[ ] 指定字符中的一个,[0-9],[a-zA-Z],[abc]
|| 和 && ,用于命令之间
||表示或者,放在两条命令之间,如果第一命令执行不成功,那么执行第二天命令;如果第一条命令执行成功,那么不会执行第二条命令
&&:只有前面的命令执行成功,才会执行后面的命令
判断1122目录是否存在,命令[ -d 1122 ]
相关测验题目(必须要做):http://ask.apelearn.com/question/5437
简易审计系统(必须要预习): http://www.68idc.cn/help/server/linux/2014042190951.html
关于PROMPT_COMMAND环境变量的含义 http://www.linuxnote.org/prompt_command-environment-variables.html
source exec 区别 http://alsww.blog.51cto.com/2001924/1113112
Linux特殊符号大全http://ask.apelearn.com/question/7720
sort并未按ASCII排序 http://blog.csdn.net/zenghui08/article/details/7938975