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 源文件或者源命令 目标文件或者目标目录

总结 :  软链接:对目录和文件都有效,且支持跨分区(文件系统),源文件被删除将会导致软链接无法使用 

           硬链接:硬性规定不能对目录进行硬链接,只对文件创建。不能跨文件系统,删除源文件对硬链接无影响。