linux文件属性、特殊符号、通配符、通配符与正则的区别


作者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

时间: 2024-10-12 18:37:48

linux文件属性、特殊符号、通配符、通配符与正则的区别的相关文章

linux内特殊符号、通配符、正则表达式

1.特殊符号 ' '  所见即所得.原样输出. " "  特殊符号会被解析运行 ` `   相当于$(),先运行括号里面的命令,把结果留下 > 重定向(先清空文件,再追加内容到文件) >>    追加重定向(在文件最后追加内容) 2>    错误重定向 2>>     错误追加重定向 ~       当前用户家目录 ! 查找并运行历史命令.eg:!sed   查找最近的一条,包含sed的命令并运行.一般不用这个,用:history |grep sed

特殊符号(通配符)知识点总结

##特殊符号与正则表达式的区别     #()在awk/sed/grep中使用的特殊符号-->正则表达式     #()在命令行或脚本中使用的特殊符号-->以下特殊意义 ##特殊符号(通配符)列表 < 0< 输入重定向 mail -s 1091*****@qq.com </etc/hosts.txt ##将host.txt中的内容写入的邮件内容 > 输出重定向 >> 追加输出重定向 不覆盖之前的内容,在文档最后继续写入追加的内容 |  管道 将前一个命令得到

Day15 - linux的特殊符号与正则表达式

第1章 linux的特殊符号 1.1 通配符 * {} 1.1.1 含义 方便查找文件 通配符是用来找文件名字的. 1.1.2  * 通过find 命令找以 .sh 结尾的文件,使用*替代文件名字. find /oldboy -type f -name "*.sh" -mtime +7 -size +100k -size -10M 查找文件名中,包含有oldboy字节的文件. [[email protected] 20170118]# find -type f -name "

Linux之特殊符号与正则表达式

Linux中常用的特殊符号 '' 所见即所得,吃啥吐啥 "" 特殊符号会被解析运行 `` ==== $() 先运行里面的命令 把结果留下 > 重定向符号 先清空文件的内容 然后追加文件的最后 >> 追加重定向 追加文件的最后 2> 错误重定向 只有错误的信息 才会通过这个漏洞进入文件中 2>> 错误追加重定向 ~ 当前用户的家目录 root ~ /root oldboy ~ /home/oldboy ! 查找并运行历史命令 !awk 包含awk的命令

Linux中特殊符号的用法

在shell中常用的特殊符号罗列如下: # ;   ;; . , / \\ 'string'| !   $   ${}   $? $$   $* \"string\"* **   ? : ^ $#   [email protected] `command`{}   [] [[]] ()   (()) ||   && {xx,yy,zz,...}~   ~+   ~-   &   \\<...\\>   + - %=   ==   != #井号 (co

linux文件属性详细说明

转自:http://hi.baidu.com/inclover/blog/item/0a7f6f97efddde6755fb96e5.html 1. Linux 文件属性概说: Linux 文件或目录的属性主要包括:文件或目录的节点.种类.权限模式.链接数量.所归属的用户和用户组.最近访问或修改的时间等内容: [[email protected] ~]# ls -lih总计 104K 2408949 -rwxr-xr-x 1 root root    7 04-21 12:47 lsfile.s

(转)linux 中特殊符号用法详解

linux 中特殊符号用法详解 原文:https://www.cnblogs.com/lidabo/p/4323979.html # 井号 (comments)#管理员  $普通用户 脚本中 #!/bin/bash   #!/bin/sh井号也常出现在一行的开头,或者位于完整指令之后,这类情况表示符号后面的是注解文字,不会被执行. # This line is comments.echo "a = $a" # a = 0由于这个特性,当临时不想执行某行指令时,只需在该行开头加上 # 就

linux文件属性、文件类型、linux用户和权限、软链接和硬链接

作者:Georgekai 归档:学习笔记 2017/12/22 day12 georgekai~~习惯:操作前备份,操作后检查 本章正题: linux文件属性.文件类型.linux用户和权限.软链接和硬链接 1.1 文件属性 1.1.1 查看文件属性的含义 [[email protected] ~]# ls -lhi total 40K 791060 -rw-------. 1 root root 1.1K Dec 11 04:20 anaconda-ks.cfg 注: 791060  #是In

Linux文件属性(属主属组权限)

Linux文件属性 Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限.为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定. 在Linux中我们可以使用ll或者ls –l命令来显示一个文件的属性以及文件所属的用户和组 例如: [[email protected] /]# ls -l 总用量 24 lrwxrwxrwx. 1 root root 7 6月 6 21:30 bin -> usr/bin dr-xr-xr-x.