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 找出谁正在使用这个文件

[root@georgekai ~]# 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),导致磁盘空间满了

 图片1.pngz

模拟故障:

[root@georgekai ~]# seq 500000000 >> /var/log/messages

 

 

排查过程:

1. du -sh /*  | grep G (不能统计没有文件名问的文件),查看空间被哪些文件占用

[root@georgekai ~]# du -sh /*

8.0K /app

4.0G /var

注:grep G  是为了找出占磁盘空间更大的文件,还可以用 du -sh /var/* 这样继续排查哪个文件占用的

2. \rm  /var/log/messages  -f (询问后在删除),删除或转移占用空间的文件

[root@georgekai ~]# \rm /var/log/messages -f

注:删除/var/log/messages  ,重启服务后,会自动生成


3. df -h 查看后还没有释放出空间,说明可能是进程调用不为0

[root@georgekai ~]# df -h

Filesystem      Size  Used Avail Use% Mounted on

/dev/sda3        19G  2.0G   16G  72%  /


4. lsof  | grep deleted  查看哪个文件已经删除了还被占用着

[root@georgekai ~]# lsof |grep deleted

注:一般过滤出带deleted ,就表示文件删除了,但还被占用着 


5. 然后重启这个服务,最后在用df -h查看会发现空间被释放

[root@georgekai ~]# /etc/init.d/rsyslog restart

 

 

磁盘空间不足小结:

1. block满了,文件没有被彻底删除(硬链接书为0,进程调用数不为0

  1lsof  | grep delete

2. block满了,正常

 1df -h 哪里满了

 2du -sh /* 一层一层排查,排查带某个文件/目录

 3)确认之后在删除大文件

3. Inode用光了,某个目录下有大量的小文件(使用定时任务)

 1)找出系统中大于1M的目录 (一般目录下小文件多了,目录的大小也会变大)

 [root@georgekai ~]# ls -ldh /kai/

 drwxr-xr-x. 83 root root 1.0M Dec 25 10:22 /kai/

 注:只能查看文件夹本身的大小,不包含内容的大小

查看目录下的文件总大小:

 [root@georgekai ~]# du -sh /etc/

 31M /etc/

 注:包含目录里面内容的大小


 

1.2.3 如何在 linux中删除大量的小文件

 1)创建大量小文件

 [root@georgekai ~]# echo {1..400000}.txt |xargs touch

 

 2)删除大量小文件

 [root@georgekai ~]# ls *.txt |xargs rm

 注:删除大量文件时,需要ls或find 和|xargs rm的配合

 如果文件量太大还是不行,分类删除,如ls 1*.txt |xargs rm

 也可以用find  !-name“” 去排除后在删除。

 

1.3 linux中的三种时间戳

 1mtime 修改时间 modify time

 文件的内容变化,ls默认的时间

 [root@georgekai data]# echo "123123" >> qq.txt

 [root@georgekai 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都会改变(内容和大小)

 2ctime  改变时间 change time

 文件属性、大小、所有者、权限、所有者

 [root@georgekai data]# ln george.txt /tmp/george.txt

 [root@georgekai 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

[root@georgekai data]# cat george.txt

[root@georgekai 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会根据内容改变和访问的条件才会改变。

 

验证属性的详细信息


[root@georgekai 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.findawksed中,取反的意思

    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结尾的文件

[root@georgekai data]# find /oldboy/ -type f -name "*.txt"

 

2:找出系统中带config的命令

[root@georgekai /]# find /sbin -type f -name "*config*" |egrep "/bin|/sbin"

 

 

2 {}  生成序列

1[root@georgekai /]# echo stu{01..10}

stu01 stu02 stu03 stu04 stu05 stu06 stu07 stu08 stu09 stu10

2[root@georgekai /]# echo stu{01,08,10}

stu01 stu08 stu10

3[root@georgekai /]# 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[root@georgekai /]# 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[root@georgekai data]# echo qq.txt{,.bak}

qq.txt qq.txt.bak

6:[root@georgekai 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大部分命令都支持

 

正则:              作用:在文件中过滤文本内容

     支持的命令: sedgrepawk    语言也支持:Python Java

 

小伙伴们可以关注我的微信公众号:linux运维菜鸟之旅,更新比51cto慢一些,不过要方便许多

qrcode_for_gh_5ecc48d3d14a_258.jpg

关注“中国电信天津网厅”公众号,首次绑定可免费领2G流量,为你的学习提供流量! 

qrcode_for_gh_d20dccd1c74b_258.jpg