Linux文件和目录管理
一、目录相关命令:mkdir、rmdir、rm -r、cp -r、mv
mkdir:(make directory,创建目录),如果文件已存在,则无法创建(一切皆文件)
-p选项:可以级联的去创建 mkdir -p 123/234/345
-v选项:可视化的显示
rmdir:(remove directory,删除目录),它只能删除一个空目录,非空不能删(有限制,不常用)
-p选项:级联的删除目录,但是有限制,比如说rmdir -p 123/234/345,如果最后一个目录,就是345目录如果是空目录的话,可以级联的删掉全部
rm:既可以删除文件,也可以删除目录
rm filename:删除文件
rm -r:删除目录
-f选项:强制(force)删除,不提示,删除一个不存在的目录也不会有任何提示
cp:复制文件
-r选项:复制目录,如果拷贝的源目录,在目标目录已存在,那么会覆盖并且不会提示
mv:重命名或者移动
在同级目录下,mv就是重命名
在不同的目录,mv就是移动或者覆盖
二、文件相关命令:cat、tac、more、less、head、tail
cat:查看文件内容
-A:查看同时显示结尾符
tac:逆序查看,与tac相反
more、less:按页查看文件内容,more只能向下翻,却不能往回看,常用的还是less
more:空格,下一屏;b,上一屏
less 快捷键:
g:文件首
G:文件尾
j:下一行(键盘上键也行)
k:上一行(键盘下键也行)
b:上一屏(page up)
f:下一屏(page down)
当然less也可以查找字符,“/word”:然后按n就可以查看下一个查找的,“?word”按n会往上查看
head:默认查看前10行
-n 20:查看前20行,可以指定
tail:默认查看末尾10行
-f:可以动态的去查看文件,显示文件最新追加的内容,用于查看一些日志文件
三、文件或者目录的属性
ls -l命令可查看文件属性与权限:
被分为9位:
第一个被占位表示意思:
-:普通文件
d:目录
l:链接文件
b:块设备文件
c:字符文件
p:管道文件
s:套接字文件
接下来每三位为一段,分为三段:第一段是文件的所有者(user)的权限,第二段是文件的所属组(group)的权限,第三段是文件的其他用户的权限。
r:表示可读
w:表示可写
x:表示可执行
但是rwx对于目录和文件概念是不一样的
r:对于文件来说是否可以查看这个文件内容,对于目录来说是否可以看到这目录下面的内容
w:对于文件来说是否可以修改这个文件内容,对于目录来说是否可以创建以及删除此目录下的内容
x:对于文件来说是否可以执行这个文件,对于目录来说是否可以进入到此目录,就是是否可以cd命令过去
若用数字表示:r:4、w:2、x:1,目录的最高权限是777,也就是drwxrwxrwx,而文件是666
四、更改权限、属主、属组
chmod:更改文件/目录权限
可以使用数字来表示权限,或者用rwx来更改权限
chmod 755 file //意思是将文件的设置为-rwxr-xr-x,这些数字分别是“r:4、w:2、x:1”
也可以使用符号的方式:chmod u=rwx,g=rx,o=rx -c file
chmod a=r file //这表示将u、g、o的权限都加上r的权限
-R:级联的更改属性
-c:更改权限后将会反馈信息,与-v选项类似
chown:更改目录/文件所属主和所属组,中间用冒号隔开
chown user1:user2 file //将file的所属主设置为user1,将所属组设置为user2
chown user1 //设置所属主
chown :user2 //设置所属组
-R:级联的更改
-c:更改后收到反馈信息
chgrp:更改文件或者目录的所属组,组名可以是用户组ID,也可以是用户组的组名,不过chown也可以完成,所有这个命令不常用
umask:用来限定新建目录或者文件权限的掩码,默认是0022
umask 后面跟数字:umask 001
作用:umask在每次进入系统时就被执行了,用来限定用户在创建新文件时,有最初的限定掩码来决定,比如说:umask 001,目录的最大权限是777,文件是666
目录: drwxrwxrwx 文件: -rw-rw-rw-
减去 ---------x 减去 ---------x
--------------------- -----------------------
drwxrwxrw- ==> 776 -rw-rw-rw- ==> 666
对于上面的文件可能有疑问,目录777-001=776没问题,文件666-001为什么还是666,那是因为权限不能单纯的用减法去对待,上面的文件本身就没有x权限,减去有何意义?
umask的权限使用命令设置后只会在当前终端生效,永久生效修改配置文件/ect/profile。
chattr:更改文件的隐藏权限
-R:级联
+<属性>:开启文件或目录的该项属性
-<属性>:关闭文件或目录的该项属性
=<属性>:指定文件或目录的该项属性
有两个较为常用的属性:
a:只能增加数据,不能删除数据,也不能修改数据,不能重命名
i:不能删除、改名、写数据,也不能重命名
lsattr:显示文件的隐藏权限
-R:级联
-a:显示全部,包括隐藏文件
-d:查看目录
特殊权限:SUID、SGID、SBIT
SUID:setgid,设置属主标识符,设置此特殊权限后,允许执行者以文件所有者的身份来执行
1、仅对二进制文件有效
2、执行者必须有该文件的执行权限(x)【否则显示的是大写S,-rwSrwxrwx】,否则根本无意
义
命令:chmod u+s file
SGID:setgid,设置属组标识符,设置此特殊权限后,允许执行者以文件所属组的身份来执行
1、对目录和二进制均有效
2、必须拥有该文件或者目录的执行权限(x)
对目录设置时:在该目录下创建的子目录,将继承父目录的所属组的权限,对于该目录下创建的文件也有效果
对二进制文件设置时:允许执行者以文件所属组的身份来执行
命令:chmod g+s file
SBIT:sticky bit,粘滞位
1、仅对目录有效
2、需要有该目录的执行权限
作用:当用户在该目录下创建文件或者目录后,只有文件的所有者或者root才有权限删除、更改
SUID、SUID、SBIT可以用数字表示权限,分别是4、2、1,也就是umask的第一位
chmod 4755 file //将file的权限改为drwsr-xr-x
五、命令、文件的搜索
which:用于查找"命令"的位置,会在$PATH下的路径查找,所以有局限性
用法:which "COMMAND"
type:显示一个命令的类型,判断出是内置命令还是外部命令
类型有:alias,别名
bulitin,内置命令
function:函数,SHELL的函数
file:文件,磁盘文件,外部命令
keyword:关键字,SHELL保留字
unfound:未找到
type cd,会提示你这是一个bulitin,内置命令
whereis:它可以搜索到命令的二进制文件、源代码文件和man帮助文档等相关文件的路径
显示的信息比which命令更为详细,什么选项也不加,则会显示所有信息
-b:只搜索命令的二进制文件路径
-m:只搜索命令的man文档路径
-s:只搜索命令的源代码路径
这个命令也比较局限,因为它会在固定的几个目录进行搜索:/bin、/sbin、/usr/bin、/usr/sbin、/usr/share/man/man1这几个目录搜索
locate:用来查找文件或者目录,相当于find -name,但是比find效率更高,因为locate搜索源是一个数据库/var/lib/mlocate/mlocate.db,而不是硬盘,这个数据库会含有本地的所有文件
默认centos没有安装:yum isntall -y mlocate,当这个命令安装就会自动创建数据库,首次使用这个数据库文件为空,需要使用命令来更新下,updatedb。
find:在指定目录下查找文件
用法:find 路径 表达式
表达式:
-type:类型搜索,f表示文件,d表示目录,s表示套接字文件...
举例:find .-type f //搜索当前目录下的所有文件
-name:具体名称搜索
-inum:以inode号来搜索
-size:以文件的大小来搜索
-atime/ctime/mtime:以时间戳来搜索
举例:find . -atime +/-10
+10:表示10天以前被访问过的文件
10:表示正好10天这一天的访问的文件
-10:表示10天以内被访问过的文件
-amin/cmin/mmim:单位为分钟,和上面类似
-uid、gid:以用户识别码、群组识别码的方式来搜索
-o:逻辑或
find命令的选项还有很多,很强大,具体有需求可以查找man帮助文档
stat:查看文件的时间戳、inode号等信息
六、软、硬链接
硬链接:
一般情况下,文件名和inode号码是“一 一对应”关系,每个inode号码对应一个文件名,但是,Unix/Linux系统允许,多个文件名指向同一个inode号码,这意味着,可以用不同的文件名访问同样的内容;对文件内容进行修改,会影响到所有相同inode的文件;但是,删除一个文件名,不影响另一个文件名的访问,这种情况就被称为“硬链接”(hard link)
ln命令可以创建硬链接: ln 源文件 目标文件
当创建硬链接后,源文件与目标文件的inode号码相同,都会指向同一个inode。inode信息中有一项叫做“链接数”,记录指向该inode的文件名总数,这回就会增加1,反过来,删除一个文件名,就会使得inode节点中的“链接数”减1。当这个值减到0时,表明没有文件名指向这个inode,系统就会回收这个inode号码,以及其所对应的block区域。
这里顺便说一下目录文件的“链接数”。创建目录时,默认会生成两个目录项:'.'和'..' ,前者的inode号码就是当前目录的inode号码,等同于当前目录的”硬链接;后者的inode号码就是当前目录的父目录的inode号码,等同于父目录的硬链接,所以,任何一个目录的“硬链接”总数,总是等于2加上它的子目录总数(含隐藏目录),这里的2是父目录对其的“硬链接”和当前目录下的“. 硬链接”。
软链接:
除了硬链接以外,还有一种特殊情况。文件A和文件B的inode号码虽然不一样,但是文件A的内容是文件B的路径。读取文件A时,系统会自动将访问者导向文件B,因此,无论打开哪一个文件,最终读取的都是一个文件。这时,文件A就称为文件B的“软链接”(soft link)或者“符号链接”(symbolic link)。
这就表示,文件A依赖于文件B而存在,如果删除了文件B,打开文件A就会报错:“No such fule or directory”.这是软链接与硬链接最大的不同:文件A指向文件B的文件名,而不是文件B的inode号码,文件B的inode“链接数
不会因此发生变化。
ln -s 可以创建软链接:ln -s 源文件或者源命令 目标文件或者目标目录
总结 : 软链接:对目录和文件都有效,且支持跨分区(文件系统),源文件被删除将会导致软链接无法使用
硬链接:硬性规定不能对目录进行硬链接,只对文件创建。不能跨文件系统,删除源文件对硬链接无影响。