Linux 文件与目录管理

linux中什么是一个文件的路径呢,说白了就是这个文件存在的地方,例如/root/.ssh/authorized_keys这就是一个文件的路径如果你告诉系统这个文件的路径,那么系统就可以找到这个文件linux的世界中,存在着绝对路径和相对路径

绝对路径:路径的写法一定由根目录”/”写起,例如/usr/local/mysql这就是绝对路径

相对路径:路径的写法不是由根目录”/”写起,例如,首先用户进入到/然后再进入到home,命令为 cd /home然后 cd test此时用户所在的路径为 /home/test 。第一个cd命令后跟 /home 第二个cd命令后跟test,并没有斜杠,这个test是相对于/home目录来讲的,所以叫做相对路径

pwd这个命令打印出当前所在目录

[image]

cd进入到某一个目录

[image]

./指的是当前目录

../指的是当前目录的上一级目录

[image]

上图中,首先进入到/usr/local/lib/目录下,然后再进入 ./其实还是进入到当前目录下,用pwd查看当前目录,并没有发生变化,然后再进入../则是进入到了/usr/local/目录下,即/usr/local/lib目录的上一级目录你看明白了吗?

mkdir创建一个目录,这个命令在上一章节中提及过。mkdir其实就是make directory的缩写其语法为 mkdir [-mp] [目录名称],其中-m , –p为其选项,-m:这个参数用来指定要创建目录的权限,该参数不常用,所以笔者不做重点解释。-p:这个参数很管用的,先来做个试验,你会一目了然的

[image]

当我们想创建 /tmp/test/123目录,可是提示不能创建,原因是/tmp/test目录不存在,你会说,这个linux怎么这样傻,/tmp/test目录不存在就自动创建不就OK了嘛,的确linux确实很傻,如果它发现要创建的目录的上一级目录不存在就会报错然后linux也为我们想好了解决办法,即-p参数

[image]

你看到这里,是不是明白-p参数的作用了?没错,它的作用就是递归创建目录,即使上级目录不存在还有一种情况就是如果你想要创建的目录存在的话,会提示报错,然后你加上-p参数后,就不会报错了

[image]

rmdir删除一个目录

[image]

rmdir其实是rmove directory缩写,其只有一个选项-p类似与mkdir命令,这个参数的作用是将上级目录一起删除举个例子吧,新建目录mkdir -p d1/d2/d3 rmdir -p d1/d2/d3相当于是删除了d1,d1/d2, d1/d2/d3。如果一个目录中还有目录,那么当你直接rmdir该目录时,会提示该目录不为空,不能删除如果你非要删除不为空的目录,那你用rm指令吧

rm删除目录或者文件

rmdir只能删除目录但不能删除文件,要想删除一个文件,则要用rm命令了。rm同样也有很多选项你可以通过 man rm 来获得详细帮助信息在这里笔者只列举较常用的几个选项

-f强制的意思,如果不加这个选项,当删除一个不存在的文件时会报错

[image]

-i这个选项的作用是,当用户删除一个文件时会提示用户是否真的删除

[image]

如果删除,输入y否则输入 n

-r当删除目录时,加该选项,如果不加这个选项会报错。rm是可以删除不为空的目录的

[image]

你会发现,笔者在列举的rm例子中使用的是绝对路径,而ls则使用的相对路径这是为什么呢?

[image]

which用来查找一个命令的绝对路径,这个命令笔者不详细介绍,因为平时笔者只用来查找一个命令的绝对路径

alias用来设置指令的别名语法:alias[别名]=[指令名称],例如 alias rm='rm -i' ,即当我们使用rm命令时,实际上是使用的是rm –i ,而用绝对路径的/bin/rm则不会被alias,该命令在以后章节中会详细介绍

ls在前面的命令中多次用到它现在你已经明白它的含义了吧没有错,就是查看某个目录或者某个文件,是list的简写。ls后可以跟一个目录,也可以跟一个文件以下是ls的选项,在这里笔者并没有完全列出,只是列出了平时使用最多的选项其他选项,你可以自行通过man ls 查询

-a全部的档案都列出,包括隐藏的。linux文件系统中同样也有隐藏文件这些隐藏文件的文件名是以.开头的例如.test, /root/.123, /root/.ssh 等等,隐藏文件可以是目录也可以是普通文件

-l详细列出文件的属性信息,包括大小创建日期所属主所属组等等。ll这个命令等同于ls –l 。

[image]

--color=never/always/auto never即不要显示颜色,always即总显示颜色,auto是由系统自行判断Redhat/CentOS系统中,默认是带颜色的,因为我们平时用的ls已经alias成了ls –color=tty 所以目录的颜色是蓝色的,而可执行文件的颜色是绿色这样有助于帮我们区分文件的格式

[image]

-d后边跟目录,如果不加这个选项则列出目录下的文件,加上后只列车目录本身

[image]

cp copy的简写,即拷贝格式为 cp [选项] [来源文件 ] [目的文件],例如我想把test1拷贝成test2,这样即可 cp test1 test2,以下介绍几个常用的选项

-d这里涉及到一个连接的概念连接分为软连接和硬连接在以后的章节中会详细解释,现在你只要明白这里的软连接跟windows中的快捷方式类似即可如果不加这个-d则拷贝软连接时会把软连接的目标文件拷贝过去,而加上后,其实只是拷贝了一个连接文件(即快捷方式)

[image]

上例中的ln命令即为建立连接的,以后再做详细解释

-r如果你要拷贝一个目录,必须要加-r选项,否则你是拷贝不了目录的

[image]

-i如果遇到一个存在的文件,会问是否覆盖Redhat/CentOS系统中,我们使用的cp其实是cp –i

[image]

下面简单做一个小试验,很快你就会明白-i选项的作用了

[image]

上例中,touch命令,看字面意思就是摸一下,没错,如果有这个文件,则会改变文件的访问时间,如果没有这个文件就会创建这个文件前面说过echo,其实就是打印,在这里所echo的内容”abc” “def”并没有显示在屏幕上,而是分别写进了文件 111222,其写入作用的就是这个大于号”>”linux中这叫做重定向,即把前面产生的输出写入到后面的文件中在以后的章节中会做详细介绍,这里你要明白它的含义即可cat命令则是读一个文件,并把读出的内容打印到当前屏幕上该命令也会在后续章节中详细介绍

-u该选项仅当目标文件存在时才会生效,如果源文件比目标文件新才会拷贝,否则不做任何动作

mv移动的意思,是move的简写格式为 mv [ 选项 ] [源文件] [目标文件],下面介绍几个常用的选项

-icp-i一样,当目标文件存在时会问用户是否要覆盖Redhat/CentOS系统中,我们使用的mv其实是mv –i

-u和上边cp命令的-u选项一个作用,当目标文件存在时才会生效,如果源文件比目标文件新才会移动,否则不做任何动作

该命令有集中情况,你注意到了吗?

1目标文件是目录,而且目标文件不存在;

2目标文件是目录,而且目标文件存在;

3目标文件不是目录不存在;

4目标文件不是目录存在;

目标文件是目录,存在和不存在,移动的结果是不一样的,如果存在,则会把源文件移动到目标文件目录中不存在的话移动完后,目标文件是一个文件这样说也许你会觉得有点不好理解,看例子吧

[image]

windows下的重命名,在linux下用mv就可以搞定

cat比较常用的一个命令,即查看一个文件的内容并显示在屏幕上

-n查看文件时,把行号也显示到屏幕上

[image]

上例中出现了一个”>>”,这个符号跟前面介绍的”>”的作用都是重定向,即把前面输出的东西输入到后边的文件中,只是”>>”是追加的意思,而用”>”,如果文件中有内容则会删除文件中内容,而”>>”则不会

-A显示所有东西出来,包括特殊字符

[image]

tac其实是cat的反写,同样的功能也是反向打印文件的内容到屏幕上

[image]

more也是用来查看一个文件的内容当文件内容太多,一屏幕不能占下,而你用cat肯定是看不前面的内容的,那么使用more就可以解决这个问题了当看完一屏后按空格键继续看下一屏但看完所有内容后就会退出如果你想提前退出,只需按q键即可

less作用跟more一样,但比more好在可以上翻,下翻空格键同样可以翻页,而按”j”键可以向下移动(按一下就向下移动一行),按”k”键向上移动在使用moreless查看某个文件时,你可以按一下”/”键,然后输入一个word回车,这样就可以查找这个word如果是多个该word可以按”n”键显示下一个另外你也可以不按”/”而是按”?”后边同样跟word来搜索这个word,唯一不同的是,”/”是在当前行向下搜索,而”?”是在当前行向上搜索

head head后直接跟文件名,则显示文件的前十行如果加 –n 选项则显示文件前n

[image]

tailhead一样,后面直接跟文件名,则显示文件最后十行如果加-n选项则显示文件最后n

[image]

-f动态显示文件的最后十行,如果文件是不断增加的,则用-f选项如:tail -f /var/log/messages


另外linux下还有两个比较特殊的权限s和t,请点击linux下文件的特殊权限s和t

umask

上边也提到了默认情况下,目录权限值为766,普通文件权限值为644。那么这个值是由谁规定呢?追究其原因就涉及到了umask。

umask语法: umask xxx(这里的xxx代表三个数字)

查看umask值只要输入umask然后回车。 umask预设是0022,其代表什么含义?先看一下下面的规则:

1)若用户建立为普通文件,则预设没有可执行权限,只有rw两个权限最大为666-rw-rw-rw-

2)若用户建立为目录,则预设所有权限均开放,即777drwxrwxrwx

umask数值代表的含义为,上边两条规则中的默认值(文件为666,目录为777)需要减掉的权限所以目录的权限为(rwxrwxrwx) – (----w--w-) = (rwxr-xr-x),普通文件的权限为(rw-rw-rw-) – (----w--w-) = (rw-r--r--)。umask的值是可以自定义的,比如设定umask 002,你再创建目录或者文件时,默认权限分别为(rwxrwxrwx) – (-------w-) = (rwxrwxr-x)(rw-rw-rw-) – (-------w-) = (rw-rw-r--)。

[image]

umask可以在/etc/bashrc里面更改,预设情况下,rootumask022,而一般使用者则为002,因为可写的权限非常重要,因此预设会去掉写权限

chattr修改文件的特殊属性

语法: chattr [+-=][ASaci [文件或者目录名]

+-=:分别为增加减少设定

A:增加该属性后,文件或目录的atime将不可被修改;

S:增加该属性后,会将数据同步写入磁盘中;

a:增加该属性后,只能追加不能删除,非root用户不能设定该属性;

c:自动压缩该文件,读取时会自动解压;

i:增加后,使文件不能被删除重命名设定连接写入新增数据;

[image]

增加i属性后不能在该目录中建立文件

[image]

增加a属性后,只能追加不能删除

lsattr列出文件/目录的特殊属性

语法: lsattr [-aR] [文件/目录名]

-a:类似与ls-a选项,即连同隐藏文件一同列出;

-R:连同子目录的数据一同列出

[image]

在上例中,test4是在test3目录增加a属性后建立的,所以test4也有a属性,通过这个例子可以看出,chattr的属性是级联生效的,不仅对当前目录生效而且会对目录下的文件同样生效

linux下搜索一个文件

windows下有一个搜索工具,可以让我们很快的找到一个文件,这是很有用的然而在linux下搜索功能更加强大

which用来查找可执行文件的绝对路径

在前面章节中已经多次用到该命令,需要注意的一点是,which只能用来查找PATH环境变量中出现的路径下的可执行文件这个命令用的也是蛮多的,有时候我们不知道某个命令的绝对路径,which一下很容易就知道了

[image]

当查找的文件在PATH变量中并没有时,就会报错

whereis通过预先生成的一个文件列表库去查找跟给出的文件名相关的文件

语法: whereis [-bmsu] [文件名称]

-b:只找binary文件

-m:只找在说明文件manual路径下的文件

-s:只找source来源文件

-u:没有说明档的文件

[image]

说明:whereis笔者几乎很少用到,如果你感兴趣请深入研究

locate类似于whereis,也是通过查找预先生成的文件列表库来告诉用户要查找的文件在哪里后边直接跟文件名如果你的linux没有这个命令,请安装软件包 mlocate ,这个软件包在你的系统安装盘里,后缀名是RPM,随后介绍的find命令会告诉你如何查找这个包如果你装的CentOS你可以使用这个命令来安装 yum install –y mlocate 。 前提是你的CentOS能连互联网至于yum这个命令如何使用,到后续章节你自然会明白如果你刚装上这个命令,初次使用会报错

[image]

这是因为系统还没有生成那个文件列表库你可以使用updatedb命令立即生成(更新)这个库如果你的服务器上正跑着重要的业务,那么你最好不要去运行这个命令,因为一旦运行,服务器的压力会变大这个数据库默认情况下每周更新一次所以你用locate命令去搜索一个文件,正好是在两次更新时间段内,那你肯定是得不到结果的你可以到/etc/updated.conf去配置这个数据库生成(更新)的规则。locate命令笔者用的也并不多,所以你只要明白有这么一个东西即可你用到时再去深究其用法吧

find这个搜索工具是笔者用的最多的一个,所以请你务必要熟悉它

语法: find [路径] [参数]下面介绍几个笔者经常用的参数

-atime +n:访问或执行时间大于n天的文件

-ctime +n:写入更改inode属性(例如更改所有者权限或者连接)时间大于n天的文件

-mtime +n:写入时间大于n天的文件

看到这里,你对这三个time是不是有些晕了,那笔者就先给你介绍一下这三个time属性

文件的 Access timeatime是在读取文件或者执行文件时更改的文件的 Modified timemtime是在写入文件时随文件内容的更改而更改的文件的 Create timectime是在写入文件更改所有者权限或链接设置时随 Inode 的内容更改而更改的因此,更改文件的内容即会更改 mtime ctime,但是文件的 ctime可能会在 mtime未发生任何变化时更改,例如,更改了文件的权限,但是文件内容没有变化如何获得一个文件的atime mtime以及ctime

ls -l命令可用来列出文件的 atime、ctime mtime。

ls -lc filename         列出文件的 ctime

ls -lu filename         列出文件的 atime

ls -l filename         列出文件的 mtime    

atime不一定在访问文件之后被修改,因为:使用ext3文件系统的时候,如果在mount的时候使用了noatime参数那么就不会更新atime的信息而这是加了 noatime 取消了,不代表真实情況反正,這三個 time stamp都放在 inode mtime, atime修改inode就一定會改,既然 inode改了, ctime也就跟著要改了

继续讲find常用的参数

-name filename直接查找该文件名的文件,这个使用最多了

[image]

-type type:通过文件类型查找文件类型在前面部分已经简单介绍过,相信你已经大体上了解了。type包含了 f, b, c, d, l, s等等后续的内容还会介绍文件类型的

[image]

linux的文件系统

搞计算机的应该都知道windows的系统格式化硬盘时会指定格式,fat或者 ntfs。linux的文件系统格式为Ext2,或者Ext3 。早期的linux使用Ext2格式,目前的linux都使用了Ext3。 Ext2文件系统虽然是高效稳定的但是,随着Linux系统在关键业务中的应用,Linux文件系统的弱点也渐渐显露出来了,因为Ext2文件系统是非日志文件系统这在关键行业的应用是一个致命的弱点。Ext3文件系统是直接从Ext2文件系统发展而来,Ext3文件系统带有日志功能,可以跟踪记录文件系统的变化,并将变化内容写入日志,写操作首先是对日志记录文件进行操作,若整个写操作由于某种原因 (如系统掉电)而中断,系统重启时,会根据日志记录来恢复中断前的写操作,而且这个过程费时极短目前Ext3文件系统已经非常稳定可靠它完全兼容Ext2文件系统用户可以平滑地过渡到一个日志功能健全的文件系统中来这实际上了也是ext3日志文件系统初始设计的初衷

Linux文件系统在windows中是不能识别的,但是在linux系统中你可以挂载的windows的文件系统,linux目前支持MS-DOSVFATFATBSD等格式如果你使用的是Redhat或者CentOS,那么你不要妄图挂载NFS格式的文件到linux下,因为它不支持NFS。虽然有些版本的linux支持NFS,但不建议使用,因为目前的技术还不成熟

Ext3文件系统为Redhat/CentOS默认使用的文件系统,除了Ext3文件系统外,有些linux发行版例如SuSE默认的文件系统为reiserFSExt3独特的优点就是易于转换,很容易在 Ext2 Ext3之间相互转换,而具有良好的兼容性,其它优点 ReiserFS都有,而且还比它做得更好如高效的磁盘空间利用和独特的搜寻方式都是Ext3所不具备的,速度上它也不能和 ReiserFS相媲美,在实际使用过程中,reiserFS也更加安全高效,据说反删除功能也不错

ReiserFS的优势在于,它是基于 B*Tree快速平衡树这种高效算法的文件系统,例如在处理小于 1k的文件比 Ext3 10再一个就是 ReiserFS空间浪费较少,它不会对一些小文件分配 inode,而是打包存放在同一个磁盘块 ()中,Ext2/Ext3是把它们单独存放在不同的簇上,如簇大小为 4k,那么 2 100字节的文件会占用 2个簇,ReiserFS则只占用一个当然 ReiserFS也有缺点,就是每升级一个版本,都要将磁盘重新格式化一次

【ln建立连接档

前面提到过两次连接档的概念,现在终于该好好介绍下这部分内容了连接档分为两种,硬连接(hard link)和软连接(symbolic link

Hard Links上面内容中说过,当系统要读取一个文件时,就会先去读inode table,然后再去根据inode中的信息到块区域去将数据取出来hard link 是直接再建立一个inode连接到文件放置的块区域也就是说,进行hard link的时候实际上该文件内容没有任何变化,只是增加了一个指到这个文件的inode,不过这样一来就会有个问题,因为增加的inode会连接到块区域,而目录本身仅仅消耗inode而已,那么hard link就不能连接目录了请你记住,hard link 有两个限制:1不能跨文件系统,因为不通的文件系统有不同的inode table 2 不能连接目录

Symbolic Linkshard link不同,这个是建立一个独立的文件,而这个文件的作用是当读取这个连接文件时,它会把读取的行为转发到该文件所link的文件上这样讲,也许比较绕口,那么就来举一个例子现在有文件a,我们做了一个软连接文件b(只是一个连接文件,非常小),b指向了文件a。当读取b时,那么b就会把读取的动作转发到a上,这样就读取到了文件a。所以,当你删除文件a时,文件b并不会被删除,但是再读取b时,会提示无法打开文件而,当你删除b时,a是不会有任何影响的

看样子,似乎 hard link比较安全,因为即使某一个 inode被杀掉了,只要有任何一个 inode存在,那么该文件就不会不见!不过,不幸的是,由于 Hard Link的限制太多了,包括无法做目录的 link,所以在用途上面是比较受限的!反而是 Symbolic Link的使用方向较广!那么如何建立软连接和硬连接呢?这就用到了ln命令

ln语法: ln [-s] [来源文件] [目的文件]

ln常用的选项就一个-s,如果不加就是建立硬连接,加上就建立软连接

[image]

在建立硬连接前后,123目录所占空间大小并没有改变

[image]

当把源文件删除后,空间仍旧没有变化说明了删除一个文件其实只是删除了inode信息

[image]

不能创建目录的硬连接

[image]

建立软连接后,456目录增加了4k

[image]

删除源文件后会提示没有这个文件的错误

[image]

目录是可以软连接的

[image]

删除软连接对源文件没有任何影响


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值