作者:Georgekai
归档:学习笔记
2017/12/25
本章正题:linux文件属性、特殊符号、通配符、通配符与正则的区别
1.1 软链接与硬连接的区别
1.1.1 1.创建软连接(怎么来的)
cp -s 或 ln -s 意思一样
1.1.2 2.创建硬链接(怎么来的)
ln 源文件 链接文件
1.1.3 区别(什么意思)
1.软连接相当于windows中快捷方式,存放的是源文件的位置
2.硬链接相当于是文件的入口。多个硬链接,相当于是超市的前后门
3.硬链接也是个普通文件 (-),软链接是个链接文件(l),也叫符号链接
4.不能对目录创建硬链接,对文件创建硬链接防止误删除
5.在同一个分区中,俩个inode相同的文件互为硬链接
6.软连接/符号链接最常用
7.创建软链接一定要用绝对路径,软连接的默认权限是777
1.1.4 删除链接的影响(怎么没的)
1.只删除源文件,软链接失效
2.只删除硬链接,没有影响
3.删除源文件和硬链接,相当于没有任何的入口(硬连接数为0)
1.2 linux下面一个文件被彻底删除条件:
1.2.1 条件:
1.文件的硬连接数为0 (rm)
2.进程调用数为 0(谁还在使用这个文件)
1.2.2 找出谁正在使用这个文件
[[email protected] ~]# lsof |grep "/var/log/secure"
rsyslogd 1090 root 4w REG 8,3 5566 3 94252 /var/log/secure
注: rsyslog #进程/软件
1092 #PID进程号
5566 #文件大小
94252 #文件的Inode号码
secure #进程名
实例1-1 企业故障案例:文件没有彻底删除导致磁盘空间不足
注:文件没有彻底删除干净(硬链接数为0,进程调用不为0),导致磁盘空间满了
z
模拟故障:
[[email protected] ~]# seq 500000000 >> /var/log/messages
排查过程:
1. du -sh /* | grep G (不能统计没有文件名问的文件),查看空间被哪些文件占用
[[email protected] ~]# du -sh /*
8.0K /app
4.0G /var
注:grep G 是为了找出占磁盘空间更大的文件,还可以用 du -sh /var/* 这样继续排查哪个文件占用的
2. \rm /var/log/messages -f (询问后在删除),删除或转移占用空间的文件
[[email protected] ~]# \rm /var/log/messages -f
注:删除/var/log/messages ,重启服务后,会自动生成
3. df -h 查看后还没有释放出空间,说明可能是进程调用不为0
[[email protected] ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 19G 2.0G 16G 72% /
4. lsof | grep deleted 查看哪个文件已经删除了还被占用着
[[email protected] ~]# lsof |grep deleted
注:一般过滤出带deleted ,就表示文件删除了,但还被占用着
5. 然后重启这个服务,最后在用df -h查看会发现空间被释放
[[email protected] ~]# /etc/init.d/rsyslog restart
磁盘空间不足小结:
1. block满了,文件没有被彻底删除(硬链接书为0,进程调用数不为0)
1)lsof | grep delete
2. block满了,正常
1)df -h 哪里满了
2)du -sh /* 一层一层排查,排查带某个文件/目录
3)确认之后在删除大文件
3. Inode用光了,某个目录下有大量的小文件(使用定时任务)
1)找出系统中大于1M的目录 (一般目录下小文件多了,目录的大小也会变大)
[[email protected] ~]# ls -ldh /kai/
drwxr-xr-x. 83 root root 1.0M Dec 25 10:22 /kai/
注:只能查看文件夹本身的大小,不包含内容的大小
查看目录下的文件总大小:
[[email protected] ~]# du -sh /etc/
31M /etc/
注:包含目录里面内容的大小
1.2.3 如何在 linux中删除大量的小文件
1)创建大量小文件
[[email protected] ~]# echo {1..400000}.txt |xargs touch
2)删除大量小文件
[[email protected] ~]# ls *.txt |xargs rm
注:删除大量文件时,需要ls或find 和|xargs rm的配合
如果文件量太大还是不行,分类删除,如ls 1*.txt |xargs rm
也可以用find !-name“” 去排除后在删除。
1.3 linux中的三种时间戳
1)mtime 修改时间 modify time
文件的内容变化,ls默认的时间
[[email protected] data]# echo "123123" >> qq.txt
[[email protected] data]#stat qq.txt
File: `qq.txt'
Size: 175 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 523271 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2017-12-24 23:52:08.795965710 +0800
Modify: 2017-12-25 10:57:53.949964031 +0800
Change: 2017-12-25 10:57:53.949964031 +0800
注:mtime和ctime都会改变(内容和大小)
2)ctime 改变时间 change time
文件属性、大小、所有者、权限、所有者
[[email protected] data]# ln george.txt /tmp/george.txt
[[email protected] data]# stat qq.txt
File: `qq.txt'
Size: 175 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 523271 Links: 2
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2017-12-24 23:52:08.795965710 +0800
Modify: 2017-12-25 10:57:53.949964031 +0800
Change: 2017-12-25 10:59:06.172972245 +0800
注:只有ctime会改变 (links变了)
3) atime 访问时间 access time
查看文件的内容cat
[[email protected] data]# cat george.txt
[[email protected] data]# stat qq.txt
File: `qq.txt'
Size: 175 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 523271 Links: 2
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2017-12-25 10:59:32.379970440 +0800
Modify: 2017-12-25 10:57:53.949964031 +0800
Change: 2017-12-25 10:59:06.172972245 +0800
注:atime会根据内容改变和访问的条件才会改变。
验证属性的详细信息:
[[email protected] data]# stat qq.txt
File: `qq.txt'
Size: 154 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 523271 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2017-12-24 23:52:08.795965710 +0800
Modify: 2017-12-19 04:59:48.141998251 +0800
Change: 2017-12-19 23:04:58.263444678 +0800
1.4 通配符
1.4.1 回顾之前使用过的特殊符号
没特殊含义系列:
$ 1.命令行中 取出变量内容
2.awk中 区某一列
3.普通用户的命令提示胡
! 1.find或awk或sed中,取反的意思
2.命令行中,取历史命令并执行(echo !rm 然后在按方向键↑选择需要使用的命令)
echo !awk
!awk 表示取出最近一次以awk开头的命令并执行
history | grep awk
ctrl + r 输入awk
| 1.管道
# 1.注释
2.root用户的命令提示符
引号系列:
$() `` 1. 先运行里面的命令,把显示到屏幕上的内容留下来
' ' 1. 所见即所得,单引号的内容会原封不动显示出来
"" 1. 对双引号里面的特殊符号进行解析 如:$ $() `` !
重定向系列:
> 1. 重定向符号
>> 1. 追加输出重定向
2> 1. 错误输出重定向
2>> 1. 错误追加输出重定向
< 1. 输入重定向 常用的:xargs
<< 1. 追加输入重定向
~ 1. 用户的家目录
root ~/root
george ~ /home
. 1. 当前目录
.. 1. 当前目录的上级目录
判断系列:
&& 1. 并且
2. 前面的命令执行成功以后&&在执行后面的命令
如:ifdown eth0&&ifup eth0
| | 1. 或者
2. 前面的命令执行失败之后&&在执行后面的命令(一般这个目录不存在,然后在创建 ls /root/kai || mkdir /root/kai )
1.4.2 通配符(wildcard)
作用:1.方便我们查找出文件名
2.linux中大部分命令都可以使用通配符
1) * 所有、任意
例1:找出/oldboy/中以.txt结尾的文件
[[email protected] data]# find /oldboy/ -type f -name "*.txt"
例2:找出系统中带config的命令
[[email protected] /]# find /sbin -type f -name "*config*" |egrep "/bin|/sbin"
2) {} 生成序列
例1:[[email protected] /]# echo stu{01..10}
stu01 stu02 stu03 stu04 stu05 stu06 stu07 stu08 stu09 stu10
例2:[[email protected] /]# echo stu{01,08,10}
stu01 stu08 stu10
例3:[[email protected] /]# echo {z..a} {01..10}
z y x w v u t s r q p o n m l k j i h g f e d c b a 01 02 03 04 05 06 07 08 09 10
例4:[[email protected] /]# echo {z..a}{01..10} |xargs -n10
z01 z02 z03 z04 z05 z06 z07 z08 z09 z10
y01 y02 y03 y04 y05 y06 y07 y08 y09 y10
例5:[[email protected] data]# echo qq.txt{,.bak}
qq.txt qq.txt.bak
例6:[[email protected] data]# cp qq.txt{,.bak} 可以用来备份
1.5 正则表达式
作用:1.特殊符号帮助我们处理文件===正则表达式
2.在文件中过滤出你想要的或不想要的内容
1.5.1 正则表达式分类:
1)基础正则表达式:basic regular expression (BRE)
^ $ . [] [^]
2)扩展正则表达式:extended regular expression (ERE)
| + ( ) {} ?
1.5.2 正则与通配符的区别:
通配符: 作用:查找文件名
支持的命令:linux大部分命令都支持
正则: 作用:在文件中过滤文本内容
支持的命令: sed、grep、awk 语言也支持:Python Java
原文地址:http://blog.51cto.com/13055758/2054488