【Linux】软硬链接 文件存储,删除,文件目录管理 (cp、mv、rm、cut、sort、uniq、wc、head、tail、split 、which、whereis、type、find)

目录

  一、文件存储

  二、硬链接与软链接

  硬链接

  如何创建硬链接:

  硬链接知识小结

  软连接

  如何创建软连接?

  软连接知识小结:

  三、文件删除的原理

  四、文件目录管理命令

  cp命令

  mv 命令

  rm 命令

  find命令

  cut命令

  sort 命令

  uniq 命令

  wc 命令

  head命令  

  tail命令

  split命令

五、文件搜索工具

  字符匹配

  分组及引用

  Linux文件搜索命令

         which命令

          whereis命令

          type命令

          find命令


  一、文件存储

文件存储?

文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。

操作系统读取硬盘的时候,一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是4KB,即连续八个 sector组成一个 block。

ee7a51023f324157b1b27c02eecb6fd1.png

什么是inode?

储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为"索引节点"。

显示文件和文件系统的详细信息

可以用stat命令,查看某个文件的inode信息:

faec05f95c7c4e8fac4db286315aa22a.png

文件的时间戳,共有三个:

ctime显示的是文件的权限、拥有者、所属的组、链接数发生改变时的时间。当然当内容改变时也会随之改变(即inode内容发生改变和Block内容发生改变时)

mtime指文件内容上一次变动的时间,

atime指文件最后被访问的时间。

* 链接数,即有多少文件名指向这个inode

 df命令  查看文件系统磁盘空间占用情况

查看每个硬盘分区的inode信息,可以使用df -i命令。

inode也会消耗硬盘空间,所以硬盘格式化的时候,操作系统自动将硬盘分成两个区域。

一个是数据区,存放文件数据;另一个是inode区(inode table),存放inode所包含的信息。

每个inode节点的大小,一般是128字节或256字节。

inode节点的总数,在格式化时就给定,一般是每1KB或每2KB就设置一个inode。

31986691680f45438367ff122f7d92fa.png

表面上,用户通过文件名,打开文件。实际上,系统内部这个过程分成三步:

首先,系统找到这个文件名对应的inode号码;

其次,通过inode号码,获取inode信息;

最后,根据inode信息,找到文件数据所在的block,读出数据。

使用ls -i命令,可以看到文件名对应的inode号码:

7a3163cc752a41cfa8dd8ea3d63ac4b6.png

Unix/Linux系统中,目录(directory)也是一种文件。打开目录,实际上就是打开目录文件。

目录文件的结构非常简单,就是一系列目录项(dirent)的列表。

每个目录项,由两部分组成:所包含文件的文件名,以及该文件名对应的inode号码。

df -h命令  以可读性较高的方式来查看磁盘使用情况;

  二、硬链接与软链接

  硬链接

源文件与硬链接文件的inode是一样的;硬链接文件与原始文件其实是同一个文件,只不过是不同的名字而已。硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。仅删除一个链接并没有影响。

  如何创建硬链接:

ln 源文件名 硬链接名 

如果给一个源文件创建了硬链接文件,将硬链接文件移动至其他文件后不小心将源文件删除,然后通过cp命令将硬件文件弄到之前源文件所在地址后,在使用ls -i命令查看inode号,会发现他的inide号改变了,通过mv命令将硬件文件弄到之前源文件所在地址后它的inode号没有变。

改名和移动不会影响inode号,cp命令才会影响。

  硬链接知识小结

7e68a7520f9e4762b22aacf71dd1ccfe.png


  软连接

软连接的源文件和链接文件的内容一样,inode号不一样;将软连接文件删除,源文件还可以访问,将源文件删除,则不能访问链接文件。

  如何创建软连接?

ln -s 源文件名 软连接文件名

  软连接知识小结:

913c8952830b413cb5a3cdba92259e15.png

内存会被进程占用, 只有当进程被释放时,内存才会被释放


  三、文件删除的原理

每个文件都有2各link计数器:i_count(内存引用计数器)和i_nlink(磁盘引用计数器);

想要彻底删除文件,必须使该文件的i_count和i_nlink都为0;

好比一个文件正在被进程调用,而用户却使用rm将文件删除了,这时虽然找不到这个文件了,但是调用该文件的进程仍然在执行,该文件的内存未被释放。 因为rm操作只是将i_nlink数减少了,如果没有其它链接文件那么它的i_nlink数为0,但由于该文件还在被进程引用,所以i_count不为0,系统并没有真正的删除这个文件,想要彻底删除文件,必须使该文件的i_count和i_nlink都为0。

6cc7748f6992494ab210ed5f1cb88ab5.png

  四、文件目录管理命令

  cp命令

copy 实现文件或目录的拷贝

copy file1 file2 实现文件 file1 的内容拷贝到文件 file2 上,如果文件 file2 已存在则覆盖,不存在则创建


常用参数:

  • -i:交互式复制,有文件覆盖的时候提醒用户确认
  • -f:强制覆盖 (相当于复制文件时若有同名的文件则强制覆盖)
  • -d:复制符号链接文件本身,而非源文件
  •  -P:保留源文件或者目录的路径
  • -R, -r,  递归拷贝

  • -p  保留源文件的属性权限时间等

  mv 命令

可以实现移动文件或重命名

mv 后可以是一个目录也可以是一个文件;如果源文件和目标文件在同一目录中,那就是改名。

  • -f:强制覆盖,如果目标文件已经存在,则不询问,直接强制覆盖;
  • -i:交互移动,如果目标文件已经存在,则询问用户是否覆盖(默认选项);
  • -n:如果目标文件已经存在,则不会覆盖移动,而且不询问用户;
  • -v:显示文件或目录的移动过程;
  • -u:若目标文件已经存在,但两者相比,源文件更新,则会对目标文件进行升级;

  rm 命令

实现删除文件或目录 

常见参数有:

-f, 强制性删除并没有提示

-r, -R,递归删除包含目录下的子目录及文件

-d:删除空文件夹

  find命令

 find 命令是直接在硬盘中进行搜索的,如果指定的搜索范围过大,find命令就会消耗较大的系统资源,导致服务器压力过大。所以,在使用 find 命令搜索时,不要指定过大的搜索范围。

命令格式:

[root@localhost ~]# find 搜索路径 [选项] 搜索内容

例子: 查找/目录下所有以.log 结尾的文件

[root@rsys_server test]# find / -name "*.log" 

263de279e4d64dd88d066b39df3ac131.png

  cut命令

就是在文件中负责剪切数据用的。cut 是以每一行为一个处理对象的;


常用参数:

  • -d  自定义分割符,如果不定义则使用默认分隔符 tab 键;
  • -f   显示指定字段的内容
  • -c 参数指定切割字符数从起始数到截止数;(cut -c "1-2" wb 切割wb文件中的前两个字符)
  • -b:以字节为单位进行分割

举例:

以空格为分割符切割,显示第一个字段内容;


以空格为分割符切割,显示第一个字段到第三个字段内容;

 以空格为分割符切割,显示第一个字段和第三个字段内容;

 显示cut.txt文件中第1个和第3个字符

显示cut.txt文件中第1个到第3个字符

  sort 命令

sort 命令用来排序,通常是结合文本处理工具使用;

常用参数:

-b忽略每行前面的空格字符。
-f忽略大小写
-M将前面3个字母依照月份的缩写进行排序。
-n依照数值的大小排序。
-o <输出文件>将排序后的结果存入制定的文件。
-r以相反的顺序来排序。
-t <分隔字符>指定排序时所用的栏位分隔字符。
-k

指定需要排序的栏位

-u相同数据仅出现一行

如下:

[root@localhost ~]# sort -k 2 -t "." sort.txt
 AA:BB:CC
 ee:60:5.1
 dd:20:4.2
 cc:50:3.3
 ee:40:5.3
 bb:10:2.4
 aa:30:1.9

(表示按"."分隔开。将第二列从小到大排序。)

  uniq 命令

主要用来实现去除重复行 前提条件是必须是先排序过的文本


常用参数:

  • -c:在每行前加出现次数(uniq命令加-c选项可以实现对重复次数进行统计。)
  • -d:只输出重复行
  • -i:比较时不区分大小写
  • -u:只显示唯一行
  • -s:跳过
  • -w:忽略

  wc 命令

统计文件的字节或者行数等信息


常用参数:

  • -c:统计字节数
  • -l:统计行数
  • -L:统计最长行的长度
  • -m:统计字符数
  • -w:统计单词数,以空格为分界点

  head命令  

显示前几行


  tail命令

显示后几行


-f 随着文件自增自动显示最后新增的内容(新增的内容并不会保存到源文件中)

  split命令

分割文档命令


  • -l num :指定分割的行数num行
  • -b :按照每个文件的大小分割 KB MB
  • -d :使用数字做后缀 搭配-a使用 指定数字长度
  • -c :分割的文件单行的最大字节数 byte-

Linux命令之文件分割split命令_恒悦sunsite的博客-CSDN博客_split命令icon-default.png?t=N7T8https://blog.csdn.net/carefree2005/article/details/122703056

这个博客巨详细!!)

五、文件搜索工具

  字符匹配

.    匹配任意单个字符(grep 'r..t' /etc/passwd)

*    匹配其前面字符任意次;0,1,多次;例如grep "x*y" 

\?  匹配其前面字符0次或1次;(基本正则要加/,扩展正则不用加)

\+  匹配其前面字符1次或多次;  

.*   匹配任意多个字符

(使用grep命令即为正则表达式,不适用grep为通配符。)

单词:非特殊字符组成的连续字符(字符串)都称为单词;

\<root    用于单词模式的左侧,类似于以某个单词开头;

root\>    用于单词模式的左侧,类似于以某个单词结尾

\<apple\>  用于匹配完整的单词;


  分组及引用

08a7ca4cd4074172a06bb84bd9e16bf0.png

  Linux文件搜索命令

         which命令

        在$PATH的所有目录里搜索某个系统命令的位置,默认在第一个文件中查找到了就不去其它文件里找到;内部命令也是找不到的(例如:history)

        -a   在所有目录里找系统命令

        --skip-alias   只有文件目录没有别名(针对有命令别名的)

          whereis命令

        查询命令或程序的帮助手册的位置

        -b   只查找可执行命令

        -m  只查找帮助文件

          type命令

        用来分辨该命令是外部命令还是内部命令(shell builtin)还是别名

          find命令

        功能描述:在目录中查找文件。不仅可以按照文件名搜索文件,还可以按照权限、大小、时间、inode 号等来搜索文件。但是 find 命令是直接在硬盘中进行搜索的,如果指定的搜索范围过大,find命令就会消耗较大的系统资源,导致服务器压力过大。所以,在使用 find 命令搜索时,不要指定过大的搜索范围。

       命令格式:find 搜索路径 [选项] 搜索内容

        常用参数:

  1.  -name: 按照文件名搜索;
  2.  -iname: 按照文件名搜索,不区分文件名大小;
  3.  -inum: 按照 inode 号搜索;
  4.  -size[+-]大小:按照指定大小搜索文件(这里的"+"的意思是搜索比指定大小还要大的文件,"-" 的意思是搜索比指定大小还要小的文件。)
  5. -atime [+-]时间:  在过去 n 天内被读取过的文件
  6. -mtime [+-]时间: 在过去 n 天内修改过的文件
  7.  -ctime [+-]时间:  ctime 并不总是代表文件的创建时间。它通常表示文件状态的最后改变时间,这可能包括文件的元数据(如权限、所有权等)的变更。

        这三个时间的区别我们在 stat 命令中已经解释过了,这里用 mtime 数据修改时间来举例,重点说说 "[+-]"时间的含义。

        -5:代表5天内天修改的文件。

         5: 代表前5~6天那一天修改的文件。

        +5: 代表5天前修改的文件。

f3c2dabe161047a9bf433ad970058dda.png

        6738803fb42f47d498baf7c6de97e4bd.png

f2c83afc088e4f76a6974b5d12367818.png

举例:

实例1:ls -l命令放在find命令的-exec选项中 

命令:

find . -type f -exec ls -l {} \;

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LKsTaRt~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值