命令总结
1、mkdir 建立目录 ( rmdir (鸡肋) 删除空目录 )
mkdir ab cd 创建俩个目录
mkdir-p mkdir -p /aa/bb/cc 递归创建目录
cd / ; mkdir 555 分号 分割 两个命令能够一起执行.
2、ls 列印 ,显示
ls -l 列印目录以长格式;
ls -a 所有 ;包括隐含 文件
ls -l /etc |more 管道符在后面,分页显示 ;
ls -d 查看目录 ;
ls -ld ; 参数组合
ll = ls -l
ls -t 修改时间排序
ls -r 倒序排序
ls -i 显示 inod 节点
ls -l /etc |grep "^d" 显示 目录 ^表示 以这个开头
ls -l --time-style=long-iso /etc 标准 时间 输出
3、cd 进入目录 change directory
相对路径
相对路径是针对当前路径来说的
. 代表当前路径,
cd date 当前目录的 =./date
cd . 进入当前路径 ,执行结果当前路径不变
cd .. 进入上一级路经
cd / 直接进根
绝对路径
从根开始算
cd / 进入 根
cd /aa/bb/cc 进入 cc
pwd print word directory 打印当前目录 显示当前目录
4、touch 创建文件
touch /data/aa.txt 创建文件
ls /data 显示data下文件
touch stu{1..100} 创建 stu 开头的 100个文件
5、Vi 编辑
a、 i 进入编辑模式
esc 退出到命令模式
:qw 写入退出
:q直接退出
:q! 强行 直接退出
6、cat 看文件内容
cat /aa/old.txt
cat >old.txt 创建文件并记入内容。或者替换原来文件内容
iam
ctrl +c
cat >>old.txt<<oo 追加 内容 不替换 。两对相同字母夹起的部分 。
> dafafafsafdfsa
> oo
cat /aa.txt -n 显示行号
7、echo 打印
echo “I am robin” 〉old.txt >重定向追加文本覆盖到文件。如果没有文件 会创建,如果有会清空内容覆盖成新的内容
echo “I am robin” >> >>追加重定向文本不覆盖到文件
<
<<
箭头是数据的流向。
> old.txt 清空 old.txt
echo 1 2 3 4 > old.txt 加入内容
xargs -n 2 <old.txt 分成 两组 将old.txt内容 给 xargs 处理
1 2 结果
3 4
输入 0+小于号(0可不加) 0< (<输入重定向) 0<< (<<输入追加重定向)
正常输出 1+大于号(1可不加) 1> ( >输出重定向 ) 1>> (>>输出追加重定向)
正常输出 2+大于号(2必需加) 2> ( 错误输出重定向 ) 2>> (错误输出追加重定向)
echo old >c.txt 2>&1 ==== echo old >c.txt 2>c.txt
8、xargs 从标注输入获取内容创建和执行命令 -n 数字 分组
echo 1 2 3 4 5 6 7 8 >old.txt ; xargs -n 4 <old.txt
分号 分割 两个命令 ,1 将内容 输进 old.txt 2 分组
1 2 3 4
5 6 7 8
find . -type f |xargs sed -i 's#robin#lubin#g'
9、printf 打印
10、ifconfig -a 查看所有 网卡,包括未激活
11、lspci | grep Ethernet 检查计算机上的以太网卡设备是否被内核检测到
12、ifconfig eth0 up 激活 eth0 网卡
13、;分隔多个命令
14、cp 拷贝文件 cp [-aipru] 源文件 目标文件
-a = -pdr
-d 若源文件为链接文件,link file ,则复制链接文件属性而非档案本身;
-f 强制,若目标文件已经存在,且无法开启,则移除后再试;
-i 若目标文件已经存在时,在覆盖时先询问
-r 递归 ,用于复制目录;
-u 若目标存在,则目标文件比源文件旧才复制。
-p 连同档案属性一同拷贝过去,而非使用默认属性
若源文件时多个,则目标文件在最后,且时目录。
cp -a /cptest/new/* /cptest/old 将 目录new 下的所有文件和目录 考到 目录old 下
rm -r /cptest/old/* 删除 old 下所有文件目录
rm -r /cptest/old 删除 old 目录
cp -a /cptest/new /cptest/old 或 cp -a /cptest/new/ /cptest/old 将 目录new 考到 目录old 下
* --通配符,代表所有
cp /dev/文件 /tmp/
\cp /mnt/test.txt /tmp 如目标文件夹存在 同名文件 +\则无提示直接覆盖 (忽略别名)
/bin/cp /mnt/test.txt /tmp 如目标文件夹存在 同名文件 +\则无提示直接覆盖 (忽略别名)
unalias cp 取消 cp的别名。
15、mv 移动文件或目录 mv /dev/oldboy.txt /
mv [-ifu] [源文件/源目录] [目标文件/目标目录]
-i 如果目标存在,询问是否覆盖
-f 强制,不询问
-u若目标存在,源文件新才会移动
mv /aaa /bbb ==== 改名
mv `find /data -type f -name "*.txt"` /tmp
查找到 /data 下的 文本文件 然后 移动到 /tmp
16、rm 删除文件 rm -f 不提示直接删除
rm-fr 删除目录(有文件的) 谨慎用 -r递归删除
find /da -type f -name "robin" -exec rm {} \; 用find删除.
17、 ..上级目录 .当前目录 cd..
18、which ls 显示命令所在目录
19、head显示文件头部
head -2 /dev/t .txt -2 取文档前 两行 默认10行 前面10行
20、tail 显示文件尾部
tail -1 robin.txt 显示 文档 尾部 一行
21、path 环境变量 命令指明所在目录 ,否则系统找不到 。
PATH="$PATH:/oldboy" 如要永久生效要加在配置文件里
22、whereis whereis ls
23、yum install tree -y 安装 tree 命令
24、tree /dev 显示目录结构
tree -Ld 1 /oldboy 仅显示 一级目录 L 层数 d 目录 1一层
/oldboy├── ext
├── test
├── xiaodong
├── xiaofan
└── xingfujie
25、man 命令帮助 man mkdir --help mkdir --help
26、网卡开机链接启动 vi/etc/sysconfig/network-scripts/目录下ifcfg-eth0这个文件,把ONBOOT="no"改为yes
27、find 查找
-type f (file ) d(dierctory) c(character)
-name ""
-mtime 按修改时间
-atime 访问时间
-ctime 改变时间、文件属性改变
find / -type d -name "etc"
28、| 管道
find /data -type d -name "cc" -mtime 1 |xargs rm -fr
从 /data 目录 查找 类型是目录的 名字为 cc 的 时间为 在一天之内改动的 目录 然后管道至 xargs 强制删除
29、 alias 别名
显示和设置系统别名
\ 和使用全路径,忽略别名。
30、seq 打序列。
seq 1(开始) 3公差 10 (结束)
1
4
7
10
seq 100 > aa.txt
head -30 aa.txt| tail -11
20
21
22
23
24
25
26
27
28
29
30
31、
33、date -s '20180201 01:01:01' 修改时间
34、 cat /etc/redhat-release 查看版本
CentOS release 6.9 (Final)
uname -r 查看内核
2.6.32-696.20.1.el6.x86_64
uname -m 查看 32 /64 位
x86_64
35、ps -ef |grep ssh 查看shh进程
root 7948 1 0 21:27 ? 00:00:00 /usr/sbin/sshd
root 8171 7948 0 22:01 ? 00:00:00 sshd: root@pts/0
root 8283 8175 0 23:03 pts/0 00:00:00 grep ssh
36、netstat -lntup |grep ssh
查看 ssh 进程监听过程
37、 /etc/init.d/iptables stop 关闭防火墙
38、 /etc/init.d/sshd restart 重启动 ssh
39、rz 传送文件
rz -y 强行覆盖。
40、sz 下载文件
41、useradd lu 增加用户
42、passwd 修改密码
43、whoami 查看当前用户
44、hostname 显示和设置主机名
hostname robin 临时设置主机名为robin
vi /etc/sysconfig/network 永久修改主机名.
45、su - root 切换至 root 用户
46、sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
关闭selinux 步骤
vi /etc/selinux/config
cp /etc/selinux/config /etc/selinux/configold
sed 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
getenforce
setenforce 0 不重启生效 Permissive
47、vi /etc/inittab 查看和更改运行级别 (永久要vi)
Default runlevel. The runlevels used are:
# 0 - halt (Do NOT set initdefault to this)
# 1 - Single user mode
# 2 - Multiuser, without NFS (The same as 3, if you do not have networking)
# 3 - Full multiuser mode
# 4 - unused
# 5 - X11
# 6 - reboot (Do NOT set initdefault to this)
#
id:3:initdefault:
init 0 关机
init 6 重起
runlevel 看运行级别。
50、shutdown –h now 关机命令
Init 0
halt
reboot 重启
shutdown –r
init 6
51、 /etc/init.d/iptables stop 临时停防火墙
/etc/init.d/iptables status 查看状态
Chkconfig iptables off 永久停防火墙
52、echo ‘LANG=”zh_CN.UTF-8”’>/ect/sysconfig/i18n
. /ect/sysconfig/i18n 生效
更改字符集 vi或 echo
53、history 察看历史 –c 清空历史 –d 铲除指定的。
54、export TMOUT=10 10秒钟退出登录
55、exportHISTORY=5 命令行历史记录5个
56、exportHISFILESIZE=5 命令行文件历史记录5个~/.bash_history
57、echo ‘exportTMOUT=300’>>/etc/profile 永久生效
echo ‘exportHISTSIZE=5’>>/etc/profile
echo ‘exportHISTFILESIZE=5’>>/etc/profile
source/etc/profile 此命令使配置生效,不用重新启动系统。
58、>/etc/issue.net
>/etc/issue
清除版本信息。
59、mount 挂载
Mount /dev/cdrom /mnt
df –h 察看设备挂载点
60、关闭selinux
getenforce 查看 enforcing
setenforce 0 临时关闭 Permissive 这个为 提示但不干预状态
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
(或 sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config )
这个时候 getenforce 查看 仍为 Permissive
vi 发现已经文件内容 改变 (或 grep SELINUX=disable /etc/selinux/config) ,重启动生效。
61、配置 rsync 服务(部分记录)
rsync -avz /backup/ rsync_backup@172.16.1.41::backup/ --password-file=/etc/rsync.password
uid=rsync
gid=rsync
use chroot=no
max connections=200
timeout=300
pid file=/var/run/rsyncd.pid
lock file=/var/run/rsyncd.lock
log file=/var/log/rsyncd.log
[backup]
path=/backup
ignore errors
read only=false
list=false
hosts allow=172.16.1.0/24
#hosts deny=0.0.0.0/32(allow 和deny 只要一个 )
auth users = rsync_backup
secrets file = /etc/rsync.password
61、date -s '2018/02/08 11:15:00'
62、nl nginx.conf nl 为显示行号 命令。
1 stu01
2 stu02
3 stu03
4 stu04
5 stu05
6 stu06
7 stu07
8 stu08
9 stu09
10 stu10
11 stu11
12 stu12
13 stu13
14 stu14
15 stu15
16 stu16
17 stu17
18 stu18
19 stu19
63、more (或less,好些)一屏一屏显示文件内容
more /etc/robin.txt
less /etc/robin.txt
64、wc -l /etc/services 显示行号 。
wc -L 最长行长度。
65、vi /etc/sysconfig/i18n 更改语言环境(字符集)
6.5默认以下
LANG="en_US.UTF-8"
SYSFONT="latarcyrheb-sun16"
可以优化为:
LANG="zh_CN.UTF-8"
UTF-8 是编码方式en_US.UTF-8 和 zh_CN.UTF-8 是语言环境,也就是字符集
en_US.UTF-8 和 zh_CN.UTF-8 包含的字符数量是基本上一样的,大概是七万个汉字,编码都是 UTF-8 编码,字符集是 Unicode,版本是 4.1 吧?zh_CN.GB18030 和 zh_CN.GBK 的字符集都与 Unicode 3 是等价的,记得应该是这样
语言环境的差别就是另一回事了,中国人和外国人表示时间啦,数字啦,习惯都不一样,所以必须区分开。大部分程序根据语言环境变量来选择界面的语言是中文还是英文。
所以一般linux系统的语言环境设置成:export LANG=zh_CN.UTF-8,代表中国人使用的unicode字符集
en_US.UTF-8:你说英语,你在美国,字符集是utf-8
zh_CN.UTF-8:你说中文,你在中国,字符集是utf-8
如果你的LANG环境变量是en_US.UTF-8,那么系统的菜单、程序的工具栏语言、输入法默认语言就都是英文的。
如果你的LANG环境变量是zh_CN.UTF-8,那么系统的菜单、程序的工具栏语言、输入法默认语言就都是中文的。
66、chkconfig 查看和设置开机自启动的命令
--list 列表自启动
--level 级别
chkconfig --list sshd 查看指定服务 启动级别
chkconfig sshd off 关服务 。
chkconfig --add oldboyd 添加某脚本到chkconfig 控制 添加文件一般在 /etc/init.d/ 并经过编辑 “chkconfig: 2345 55 25”行。
67、 ntsysv 编辑开机自启动服务。 setup 选项也可以。
68、 stat 显示 文件属性
stat aa
File: "aa"Size: 0 Blocks: 0 IO Block: 4096 普通空文件
Device: 803h/2051d Inode: 261635 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2018-02-09 11:20:18.276990504 +0800
Modify: 2018-02-09 11:20:11.848996812 +0800
Change: 2018-02-09 11:20:11.848996812 +0800
69、dumpe2fs /dev/sda1 |grep -i "inode size" 显示 inode 大小 inode = index node 存放 文件属性 ,可以查看大小 。
dumpe2fs 1.41.12 (17-May-2010)
Inode size: 128
70、 df -i 查看 inode 总量和使用情况
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda3 2469152 56573 2412579 3% /
tmpfs 185499 1 185498 1% /dev/shm
/dev/sda1 51200 38 51162 1% /boot
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 37G 1.5G 34G 5% /
tmpfs 725M 0 725M 0% /dev/shm
/dev/sda1 190M 36M 145M 20% /boot
磁盘空间是否满了 ,是两项参数 ,inode 一个是block 满了 。
72、file 显示文件类型 普通文件分为(文本、数据、二进制程序)
file /etc/rc.d/rc1.d/K16abrtd
file /etc/ld.so.conf
/etc/ld.so.conf: ASCII text 文本
file /var/log/wtmp
/var/log/wtmp: data 数据
file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped 二进制 可执行文件
file grub.conf 连接文件
grub.conf: symbolic link to `../boot/grub/grub.conf'
73、last 显示登陆信息
74、lastlog 显示最后的登陆信息
75、ln 创建硬连接文件
ln -s 创建软连接文件
76、id 查看用户信息。
id root
uid=0(root) gid=0(root) groups=0(root)
77、du 查看文件 和目录大小
du -sh s大小 h人类可读
du /etc -sh
30M /etc
78、三剑客正则表达
元字符 | 功能 | 意思 |
^ | 匹配行首 行首不是字段首 | 以某些字符开行头 |
$ | 匹配行尾 行尾巴 | 以某些字符结行尾 |
^$ | 空行的意思 | 空行的意思 |
. | 匹配任意单个字符 | 任意一个字符 |
* | 字符* 匹配0或多个前面的字符 | 重复前面的任意多个字符 ab* 前面字符 左面的一个字符0或无穷个 表示一个a后面 O个-无穷多个b |
\ | 转义符,屏蔽一个元字符的特殊含义 | 表示去掉有意义的元字符的含义 |
[] | 匹配中括号内的任意一个字符 | 匹配中括号内的任意一个字符 [abc] 匹配字符集合内的任意一个字符[a-zA-Z],[0-9] [a-z]所有小写字母 [A-Z]所有大写字母 [^abc] 匹配不包含^后的任意(任意一个)字符的内容 |
.* | 代表任意多个字符 | 代表任意多个字符 |
lele\{n\} | 用来匹配前面lele出现次数。n为次数 | 就是统计前面lele出现的次数 |
lele\{n,\} | 含义同上,但次数最少为n | 从功能就可以看出 |
lele\{n,m\} | 义同上,但lele出现次数在n与m之间 | 从功能也可以看出 |
lele\{n,m\} | 义同上,但lele出现次数在n与m之间 | 从功能也可 |
+ ab+ 左面的一个字符有1个或无穷个 表示一个a后面 1个到无穷多个b
? ab? 左面的一个字符有0个或一个 表示一个a后面 0个或1个b
{n} 左面的那个字符有n个 egrep -w 'ab{3}$' a.txt ab{3} 匹配b三次
{n,m} 左边的字符n到m个
{n,} 左边的字符n个到无穷个
a\{n,m\} 重复n到m次,前一个重复的字符,如果用egrep/sed -r 可以去掉斜线
a\{n,\} 重复至少n次,前一个重复的字符。如果用egrep/sed -r 可以去掉斜线
a\{n\} 重复n次,前一个重复的字符。如果egrep/sed -r 可以去掉斜线
a\{,m\} 随便重复,但是不能超过m次
注意:egrep或sed -r 过滤一般特殊字符可以不转义
正则表达式:
Linux正则表达式(Regular Expression)主要遵从POSIX BRE或者POSIX ERE标准。什么是POSIX呢,POSIX Portable Operating System Interface 可移植操作系统接口ERE是BRE的扩展版本,具体更强的处理能力,并增加了一些元字符(metacharactor)。
BRE主要的能力集有:
1) 普通字符(Literal text),如a,b,c等
2)非打印字符,包括TAB,回车,换行,回车换行(WINDOWS)
3)任意字符.
4)字符集,包括单词型字符([[:alnum:]]),非单词型字符([^[:alnum:]]),数字([[:digit:]]),非数字([^[:alnum:]]),空格、TAB、换行等空白字符([[:space:]])以及非空白字符([^[:space:]])
5)边缘匹配符,不管是BRE还是ERE,都只支持匹配行首或行尾,不像perl,还可以匹配单词首和单词尾
6)匹配重复次数(Quantifier/Repetition)
7)分组及后向引用
8)多项匹配(Alteration),使用元字符|,该特性只ERE支持,BRE没有此功能
BRE与ERE似乎对ASCII和UNICODE是否都支持尚待确认;
正前向查找和负前向查找不支持;
正后向查找和负后向查找不支持;
BRE与ERE在能力上区别仅在多项匹配的能力上,其他方面没有大的差别,主要的区别体现在元字符上。
BRE只定义了4组元字符:
[] 用于在多个字符中选定一个字符进行匹配,[]内可以有-以示范围,但-本身不是元字符
. 用于匹配任意字符
^ 用于匹配时表示“非”的含义,还有一个用法是匹配行首
$ 用于匹配行尾
ERE在此基础上增加了3组元字符的定义:
{} 用于表示重复匹配的次数。BRE中只将{}当作普通字符对待,要使用此功能必须加\进行转义,即“\{\}”
() 用于分组。BRE中只将()当作普通字符对待,要使用此功能必须加\进行转义,即“\(\)”
| 完全为ERE新增的多项匹配能力定义的,BRE无多项匹配能力,只将|作普通字符对待
- 可以识别4种不同类型的引字符号: 单引号字符' 双引号字符" 反斜杠字符\ 反引号字符`
- 1. 单引号 ( '' )
- # grep Susan phonebook
- Susan Goldberg 403-212-4921
- Susan Topple 212-234-2343
- 如果我们想查找的是Susan Goldberg,不能直接使用grep Susan Goldberg phonebook命令,grep会把Goldberg和phonebook当作需要搜索的文件
- # grep 'Susan Gold' phonebook
- Susan Goldberg 403-212-4921
- 当shell碰到第一个单引号时,它忽略掉其后直到右引号的所有特殊字符
- 2. 双引号 ( " " )
- 双引号作用与单引号类似,区别在于它没有那么严格。单引号告诉shell忽略所有特殊字符,而双引号只要求忽略大多数,具体说,括在双引号中的三种特殊字符不被忽略:$,\,` ,即双引号会解释字符串的特别意思,而单引号直接使用字符串.如果使用双引号将字符串赋给变量并反馈它,实际上与直接反馈变量并无差别。如果要查询包含空格的字符串,经常会用到双引号。
- # x=*
- # echo $x
- hello.sh menus.sh misc.sh phonebook tshift.sh
- # echo '$x'
- $x
- # echo "$x"
- *
- 这个例子可以看出无引号、单引号和双引号之间的区别。在最后一种情况中,双引号告诉shell在引号内照样进行变量名替换,所以shell把$x替换为*,因为双引号中不做文件名替换,所以就把*作为要显示的值传递给echo。 对于第一种情况需要进一步说明,shell在给变量赋值时不进行文件名替换(这从第三种情况中也能看出来),各步骤发生的精确次序如下: shell扫描命令行,把x的值设为星号*;
- shell再次扫描命令行,碰到星号*,把它替换成当前目录下的文件清单;
- shell启动执行echo命令,把文件清单作为参数传递给echo.
- 这个赋值的先后次序非常重要:shell先作变量替换,然后作文件名替换,最后把这行处理为参数
- 3. 反引号(``)
- 命令替换是指shell能够将一个命令的标准输出插在一个命令行中任何位置。shell中有两种方法作命令替换:把shell命令用反引号或者$(...)结构括起来,其中,$(...)格式受到POSIX标准支持,也利于嵌套。
- # echo The date and time is `date`
- The date and time is 三 6月 15 06:10:35 CST 2005
- # echo Your current working directory is $(pwd)
- Your current working directory is /home/howard/script.
- 4. 反斜杠 backslash-escaped( \ )
- 反斜杠一般用作转义字符,或称逃脱字符,linux如果echo要让转义字符发生作用,就要使用-e选项,且转义字符要使用双引号
- echo -e "\n"
- 反斜杠的另一种作用,就是当反斜杠用于一行的最后一个字符时,shell把行尾的反斜杠作为续行,这种结构在分几行输入长命令时经常使用。
- BTW
- $()和``的区别
- 反引号和$()的功能是命令替换,将反引号或$()中的字符串做为命令来执行,我们在用shell编程时经常用的到 将系统命令的执行结果赋给一个变量
- 但反引号内不能再引用反引号,而$()中可以引用反引号
- [root@music b]# cat aa
- 13
- 45
- mimi bibi
- [root@music b]# data=`cat `ls``
- 没反应,我Ctrl+c了
- [root@music b]# data=$(cat `ls`)
- [root@music b]# echo $data
- 13 45 mimi bibi
grep 过滤 三剑客命令
grep -v 排除过滤 取反
grep -v robin robin.txt 把 robin.txt 显示 不包含 robin的 内容 并打印出来
grep -n . robin.txt 对 文件打印行号。 -n对匹配的内容打印行号 . 代表任意匹配内容。
-o 只显示匹配内容
-q 安静模式,不打印 echo $? 为0显示输出正确
-l 过滤成功显示文件名,不成功无
-A 2 'root' /etc/passwd 过滤root所在后两行 (显示错误相关信息)
-B 5 'root' /etc/passwd 过滤root所在前5行
-C 如果匹配成功,则将匹配行及前后n行都打印出来 -color
-c 如果匹配成功,显示行数
-E egrep
-i 忽略大小写
-w 过滤单词,(不连贯)
-r 递归
egrep = grep -E
egrep r([abc123\/\-])t -必须放到最后去 -在数字后有指向性,如果想要匹配的字符就是-本身,必须放到最后去[12312\-]
egrep '[a-zA-Z]' a.txt 所有英文字母的
跟'r[aa-zz]t'一样的
r[0-9]{2}t ===== r[0-9][0-9]t
'r[0-9]+t' 数字有一个或无穷个
'^[^0-9]' 开头取反 以非数字开头的
egrep 'company(y|ies)' a.txt 或的关系
grep -n "^$" 1.log 打印空行及行号
grep -vn "^$" 1.log 打印空行以外的及行号
--color=auto 以特定颜色亮显示匹配关键字
-C context,显示匹配字符串及其前后各num行
扩展正则
必须用 grep -E 或egrep
(1)+ 重复一个或一个以上前面的字符(和基础正则*的区别) +要求重复数量至少为1,*可以为0,所以字符串为空也可以匹配
基础正则*是匹配0个或多个前面的那个字符
(2)?重复“0个或一个”前面的字符 (和基础正则.的区别)
(可以没有) 基础正则.是匹配有且只有一个字符,代表任意一个字符
(3)|用或的方式查符合多个条件的字符串
(4)()找出“用户组”字符串 分组过滤,后向引用
例子:
egrep "go+d" 1.txt
egrep "go*d" 1.txt
egrep "go?d" 1.txt
egrep "go.d" 1.txt
egrep "god|good" 1.txt
egrep "g(o|oo)d" 1.txt
\b 取出单词边界
grep "\boldboy\b" oldboy.log 只取出oldboy的,oldboy1不
sed 流编辑器。对文件内容的增、删、改、替换、查、 三剑客
vi person.txt
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
引号中命令(非sed后面的参数)
a ∶新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
sed '2a 106,dandan,CSO' person.txt
101,oldboy,CEO
102,zhangyao,CTO
106,dandan,CSO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
sed '2a 106,dandan,CSO\n107,bingbing,COO' person.txt \n 为换行符号
101,oldboy,CEO
102,zhangyao,CTO
106,dandan,CSO
107,bingbing,COO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
i ∶插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
sed '2i 106,dandan,CSO' person.txt
101,oldboy,CEO
106,dandan,CSO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
c ∶取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d ∶删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
p ∶列印,亦即将某个选择的资料印出。通常 p 会与参数 sed -n 一起运作~
s ∶取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!sed -n 静态模式
sed '3s#0#9#' person.txt 注意这个没有 用 g ,g是全局替换 ,没有用 仅对 3行进行替换
101,oldboy,CEO
102,zhangyao,CTO
193,Alex,COO
104,yy,CFO
105,feixue,CIO
sed -n '20,30'p aa.txt
将 aa 20-30行 列印
-n 取消默认输出 p =print
sed 's#old#new#g' oldboy.txt >tt.txt 不改oldboy内同 但 重新生成 tt.txt
sed -i 's#old#new#g' oldboy.txt 改了 oldboy内容
find /root -type f -name "*.txb" |xargs sed -i 's#ro#lu#g' 将 /root 下的 *.txb 内容中 robin 改 lubin
sed -i 's#lu#ro#g' `find /root -type f -name "*.txb"` 效果等同上一条。
sed -nr 's#([^:]+)(:.*:)(/.*$)#\3\2\1#gp' /etc/passwd 将 passwd 第一列 和最后列对调
sed -e 多个模式
sed -i '' test 输出到文件
sed -f '' 指定文件
sed '3d' test 删除第三行
sed '1,4d' test 删除1到4行
sed '1d;4d' test 删除1行和4行
sed '3p' test 打印第三行
sed -n '3p' test
sed '3c 1111' test 覆盖第三行
sed '3a 11111' test 第三行后追加一行
sed '3i 111' test 第三行前插入
sed '/sb.*$/d' a.txt 匹配0或没有 ======== sed '/sb/d' a.txt
sed '/^s/c 111' a.txt
sed 's/sb/SB/' test 只改每行遇到的第一个sb
sed 's/sb/SB/g' test 改所有的sb
sed '4s/sb/SB/g' test 只改所有的sb
sed 'aa/sb/SB/g' test 把aa那行的sb改了
sed '/^[0-9][a-z]+sb$/s/sb/SB/g' test 匹配一行内容所有表达
sed -r '/^[0-9] ([a-Z]+)xsb$ /s/sb/SB/g' a.txt 扩展正则 匹配alexsb
sed -r 's///g' test 定位 /换的源/换的结果/g
sed -r '###'
sed -ri '///'
32、awk 过滤,输出内容 三剑客
awk 'NR>19&&NR<31' aa.txt
NR是行号
awk
awk [ options ] 'pattern {action}' file
awk 参数 模式(动作) file 模式即条件 动作就是干什么,由大括号里面一条或多条语句组成。
pattern 即模式,找谁 action 干啥
域和记录
filed 域,区域,字段,列
$0,整行,一个记录 $1 $2 $3 $NF最后一行 $0整行
$ 表示取
FS 区域分隔符 awk -F 记录字段分隔符的内容
NF 列的数量一行有多少列(区域)
head /etc/passwd > /servers/files/awkfile.txt
awk -F ":" 'NR>=3&&NR<=5{print $1,$3}' /servers/files/a.txt
字段分隔符FS 指定的值可以是一个正则表达式(匹配字符串)
ifconfig eth1 | awk 'NR==2{print $1}' 输出inet6 为第一列
ifconfig eth1 | awk -F "[: ]+" 'NR==2{print $2}' 输出inet6 分割完变成第二列
RS 每个记录读入(输入)的时候的分隔符 上下分割每行
NR 行号 awk处理的记录的数
ORS 输出时候的分隔符
awk使用内置变量RS来存放记录分隔符,RS表示的输入的记录分隔符,之歌值可通过BEGIN模块重新定义修改。
awk 'BEGIN{FS=":";RS="\n"}'
awk '{print NR,$0}' 1.txt 显示行号
awk 'BEGIN{RS="/"}{print NR,$0}' 1.txt
行:默认以回车换行\n,结束的.RS(行分隔符)RS表示着行的结束。
RS为空值
awk 'BEGIN{RS=""}{print NR,$0}' 1.txt 只会显示一行行号
当RS值为空时,每个记录被空行或多个空行分割,同时无论FS分隔符为何值,FS同时也会被\n分割。
sed -r 's#[:/0-9]+# #g' awkfile.txt
sed -r 's#[:/0-9]+# #g' awkfile.txt >count.txt
sort 排序
sort 默认是升序,sort -r 降序
sort -u 去除重复行
uniq 去重
-i 忽略大小写字符
-c 进行计数
-u 只显示唯一的行
cut 从文件文件中截取
-d 后接分割字符
-f 依据-d的分隔符将信息分割成数段,-f 取出第几段
-c 以字符的单位取出固定字符区间
wc 统计
-l 仅取出列,统计行数
-w 仅列出多少字,统计单词出现次数
-m 多少字符,统计文件的字节数
wc /etc/passwd
40(行数) 45(单词数)1719(字节数)
正则表达式
实战准备
1.调整别名
alias grep='grep --color=auto'
2.环境变量
locale
export LC_ALL=C
3.准备例子
vi /oldboy/old.log
I am oldboy teacher!
I teach linux
I like badminton ball,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our site is http://www.etiantian.org
my qq num is 49000448
not 4900000448
my god,i am not oldbey,but OLDBOY!
1、 grep m oldboy.log 找出 所有 含 m的行 。
grep m oldboy.log
I am oldboy teacher!I like badminton ball,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
my qq num is 49000448
my god,i am not oldbey,but OLDBOY!
2、 grep "^m" oldboy.log 找出以m开头的行
my blog is http://oldboy.blog.51cto.com
my qq num is 49000448
my god,i am not oldbey,but OLDBOY!
3、grep "m$" oldboy.log 找出m结尾的行
my blog is http://oldboy.blog.51cto.com
4、grep -n "^$" oldboy.log 找出空行 -n 列行号
3:
8:
5、grep -vn "^$" oldboy.log 排除空行并打印行号
1:I am oldboy teacher!
2:I teach linux.
4:I like badminton ball,billiard ball and chinese chess!
5:my blog is http://oldboy.blog.51cto.com
6:our site is http://www.etiantian.org
7:my qq num is 49000448
9:not 4900000448
10:my god,i am not oldbey,but OLDBOY!
6、 grep -n "." oldboy.log . 匹配每一个字符
1:I am oldboy teacher!
2:I teach linux.
4:I like badminton ball,billiard ball and chinese chess!
5:my blog is http://oldboy.blog.51cto.com
6:our site is http://www.etiantian.org
7:my qq num is 49000448
9:not 4900000448
10:my god,i am not oldbey,but OLDBOY!
7、grep -n ".*" oldboy.log 匹配所有字符 包括空行
1:I am oldboy teacher!
2:I teach linux.
3:
4:I like badminton ball,billiard ball and chinese chess!
5:my blog is http://oldboy.blog.51cto.com
6:our site is http://www.etiantian.org
7:my qq num is 49000448
8:
9:not 4900000448
10:my god,i am not oldbey,but OLDBOY!
9、grep -n "\.$" oldboy.log 列 . 结尾行 \转义 .。
:I teach linux.
10、grep -no "oldboy" oldboy.log 列印 含 oldboy 并只显示匹配内容 -o只显示 匹配内容,没有 -o 将显示行
1:oldboy
5:oldboy
11、 grep -n "0*" oldboy.log 显示0个或多个0的行 ,所以全显示出来了。
1:I am oldboy teacher!
2:I teach linux.
3:
4:I like badminton ball,billiard ball and chinese chess!
5:my blog is http://oldboy.blog.51cto.com
6:our site is http://www.etiantian.org
7:my qq num is 49000448
8:
9:not 4900000448
10:my god,i am not oldbey,but OLDBOY!
12、grep -n "[abc]" oldboy.log 显示 含 有 a 或b或c 的 行
1:I am oldboy teacher!
2:I teach linux.
4:I like badminton ball,billiard ball and chinese chess!
5:my blog is http://oldboy.blog.51cto.com
6:our site is http://www.etiantian.org
10:my god,i am not oldbey,but OLDBOY!
13、grep -n "[^abc]" oldboy.log 显示不 含 有 a 或b或c 的 行。 ^代表不。
1:I am oldboy teacher!
2:I teach linux.
4:I like badminton ball,billiard ball and chinese chess!
5:my blog is http://oldboy.blog.51cto.com
6:our site is http://www.etiantian.org
7:my qq num is 49000448
9:not 4900000448
10:my god,i am not oldbey,but OLDBOY!
14、grep -n "[0-9]" oldboy.log 匹配所有数字
5:my blog is http://oldboy.blog.51cto.com
7:my qq num is 49000448
9:not 4900000448
查看ett.txt(100行)内第20到30行内容
seq 100>ett.txt
head 取头部的几行,默认前10行
1.head -30 ett.txt |tail -11 tail 取尾部的最后n行,默认后10行(tail 文件)
2.tail -81 ett.txt |tail -11
3.sed -n '20,30p' ett.txt
sed -n '30p' ett.txt 也可以用的
sed '2s/root/sb/g' 1.txt 改第二行所有root
sed '2s/root/sb/' 1.txt 改第二行第一个
awk
awk -F:'{print $1,$4}' /etc/passwd 指定分隔符
$0 整行
NF 多少段 $NF 最后一段
NR 行号 (直接NR)
awk -F: 'NR==1{print $1,NR}' test
awk -F: 'NR<=3{print NR,"---"$1}' test ' " " '自己定义输出
'NR>=3 && NR<=5{print NR,"-------",$1}' test
'NR<=2 || NR>=7{print NR,"-------",$1}' test
'/nologin$/{print $1}' test
'$1~/^r.*t$/{print $3,NR}' tes
'$3 >=7{print NR,$1}' test
count=7
awk -v x=$count -F: '$3 >= x{print NR,$1,$3}' test
UID大于等于x的打出来
ifocnifg |awk 'NR==2{print $2}'
cat a.txt |sort |uniq -c
cat test |cut -d: -f1
du -sh 统计文件大小
find / -type f (普通文件)
find / -name "*.txt"
find / -size +10M and -size -30M
dd if=/dev/zero of=/a.txt bs=20M count=1