• Linux文件与目录管理


    一、目录的相关操作

      比较特殊的目录:

        .   代表此层目录

          ..  代表上一层目录

          -   代表前一个工作目录

        ~  代表“目前用户身份”所在的主文件夹

        ~account  代表account这个用户的主文件夹(account是个账号名称)

      处理目录的命令:

        cd: 切换目录

        pwd: 显示当前目录

        mkdir: 新建一个新的目录

        rmdir: 删除一个空的目录

      1、cd(切换目录)(change directory)

        cd [相对路径或绝对路径]

        特殊 cd ~ 可以回到个人的主文件夹里去

      2、pwd (print working directory)

        pwd [-P] 

        参数:

          -P :显示出当前的路径,而非使用连接(link)路径。

      3、mkdir(make directory)

        mkdir [-mp] 目录名称

        参数:

          -m: 配置文件的权限,直接设置,不需要看默认权限(umask)

          -p: 帮助你直接将所需要的目录(包含上层目录)递归创建起来。

        创建多层目录: mkdir -p test1/test2/test3

        新建权限为rwx--x--x的目录: mkdir -m 711 test2

       4、rmdir [-p] 目录名称 (remove directory)

        参数:

          -p: 连同上层“空的”目录也一起删除

       

    二、文件与目录管理

      1、查看文件与目录:ls

      语法: ls [-aAdfFhilnrRSt] 目录名称

         ls [--color={never,auto,always}] 目录名称

         ls [--full-time] 目录名称

      参数:

        -a: 全部的文件,连同隐藏文件(开头为.文件)一起列出来

        -A : 列出全部的文件(连同隐藏文件,不包括.与..那两个目录)

        -d:  仅列出目录本身,而不是列出目录内的文件数据

        -f: 直接列出结果, 而不进行排序(ls默认会以文件名排序)

        -F: 根据文件、目录等信息给予附加数据结构,例如:

          *:代表可执行文件  /:代表目录    =:代表socket文件  l: 代表FIFO文件

        -h : 将文件容量以人类易读的方式(例如GB,KB等)列出来

        -i: 列出inode号码,inode的意义下一章将会介绍

        -l: 列出长数据串, 包含文件的属性与权限等数据

        -n: 列出UID与GID,而非用户与用户组的名称(UID与GID会在账号管理提到)

        -r:  将排序结果反向输出,例如:原本文件名由小到大,反向则为由大到小

        -R: 连同子目录内容一起列出来,等于该目录下的所有文件都会显示出来

        -S: 以文件容量大小排序,而不是用文件名排序

        -t: 依时间排序,而不是用文件名

        --color=never : 不要依据文件特性给予颜色显示

        --color=always : 显示颜色

        --color=auto : 让系统自行依据设置来判断是否给予颜色

        --full-time: 以完整时间模式(包含年、月、日、时、分)输出

        --time={atime, ctime}: 输出访问时间或改变权限属性时间(ctime)

                    而非内容更改时间(modification time)    

        

      2、复制、删除与移动:cp, rm, mv

        cp(copy): 除了单纯复制之外,还可以创建连接文件(就是快捷方式),对比两文件的新旧而予以更新,以及复制整个目录等功能

        语法:  

          cp [-adfilprsu] 源文件  目标文件

          cp [options] source1 source2 source3 ... directory

        参数:

          -a: 相当于-pdr的意思

          -d: 若源文件为连接文件的属性(link file), 则复制连接文件属性而非文件本身。

          -f: 为强制(force)的意思,若目标文件已存在且无法开启,则删除后再尝试一次

          -i: 若目标文件已经存在, 在覆盖时会先询问操作的进行

          -l: 进行硬连接(hard link)的连接文件创建,而非复制文件本身

          -p: 连同文件属性一起复制过去, 而非使用默认属性(备份常用)

          -r: 递归持续复制, 用于目录的复制行为(常用)

          -s: 复制成为符号链接文件(symbolic link),即“快捷方式”文件

          -u: 若destination比source旧才更新destinatioin

          最后注意,如果源文件有两个以上,则最后一个目的文件一定要是“目录”才行

          在默认情况下,cp的源文件与目的文件的权限是不同的,目的文件的所有者通常会是命令操作者本身。加上-a或-p等可以完整复制文件权限的参数才行。

          由于cp有种种的文件属性与权限的特性,所以在复制时,必须清楚了解到:

            a. 是否需要完整保留来源文件的信息?

            b. 源文件是否为软连接文件(symbolic link file)?

            c. 源文件是否为特殊的文件, 例如FIFO、socket等

            d.源文件是否为目录?

        

        rm(移除文件或目录)

        语法: rm [-fir] 文件或目录

        参数:

          -f: 就是force的意思,忽略不存在的文件,不会出现警告信息。

          -i: 互动模式, 在删除前会询问用户是否操作

          -r: 递归删除。最常用在目录的删除。这是非常危险的参数

        mv(移动文件与目录,或更名)

        语法:mv [-fiu] source destination

           mv [options] source1 source2 source3 ... directory

        参数:

          -f: force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖。

          -i: 若目标文件(destination)已经存在时, 就会询问是否覆盖;

          -u: 若目标文件已经存在,且source比较新,才会更新(update)

        如果有多个源文件或目录,则最后一个目标文件一定是“目录”,意思是说,将所有的数据移动到该目录的意思。

        另一个更改文件名的命令: rename

      3、取得路径的文件名与目录名称: basename 和 dirname

        如: basename /etc/sysconfig/network ---------> network

            dirname /etc/sysconfig/network--------->/etc/sysconfig

    三、文件内容查阅

      cat: 由第一行开始显示文件内容。

       tac: 从最后一行开始显示。可以看出tac是cat的倒写形式

       nl: 显示的时候,顺便输出行号

      more: 一页一页地显示文件内容

      less: 与more类似,但是比more更好,可以往前翻页

      head: 只看头几行

      tail: 只看结尾几行

      od: 以二进制的方式读取文件内容

      1、直接查看文件内容:cat tac nl

        cat(concatenate):

         语法: cat [-AbEnTv]

        参数: -A: 相当于-vET的整合参数, 可列出一些特殊字符,而不是空白而已。

            -b: 列出行号,仅针对非空白行做行号显示,空白行不标行号

            -E: 将结尾的断行字符$显示出来

            -n: 打印出行号,连同空白行也会有行号,与-b的参数不同

            -T: 将[Tab]按键以^I显示出来

            -v: 列出一些看不出来的特殊字符。

        tac(反向列示): cat是由“第一行到最后一行连续显示在屏幕上”,tac则是“由最后一行到第一行反向在屏幕上显示出来”

        nl [-bnw] 文件  (添加行号打印):

          参数:

            -b : 指定行号指定的方式, 主要两种:

              -b a: 表示不论是否为空行,也同样列出行号(类似cat -n)

              -b t: 如果有空行,空的那一行不要列出行号(默认值)

            -n: 列出行号表示的方法,主要有三种:

              -n ln: 行号在屏幕的最左方显示

              -n rn: 行号在自己字段的最右方显示,且不加0

                -n rz: 行号在自己字段的最右方显示,且加0

            -w: 行号字段占用的位数。

      2、可翻页查看:more less

        more(一页一页翻动):

          如果more后面接的文件内容行数大于屏幕输出的行数时,最后一行就会显示目前显示的百分比,而且还可以在最后一行输入一些有用的命令。在more这个程序的运行过程中,你有几个按键可以按的:

          空格键(Space): 代表向下翻一页

          Enter: 代表向下滚动一行

          /字符串 : 代表在这个显示的内容当中,向下查询“字符串”这个关键字

          :f  : 立刻显示出文件名以及目前显示的行数

          q :代表立刻离开more,不再显示该文件内容

          b或[ctrl]-b: 代表往回翻页,不过这操作只对文件有用,对管道无用

        less(不只可以向下查询,也可以向上查询):

          在less这个程序中,可以输入的命令有:

          空格键: 向下翻动一页

          [PageDown]: 向下翻动一页

          [PageUp]: 向上翻动一页

          /字符串  : 向下查询“字符串”的功能

          ?字符串: 向上查询“字符串”的功能

          n: 重复前一个查询(与/或?有关)

          N: 反向重复前一个查询(与/或?有关)

          q: 离开less这个程序

      3、数据选取:

        head与tail都是以“行”为单位来进行数据选取

        head(取出前面几行):

          head [-n number] 文件

          参数: -n 后面接数字,代表显示几行的意思

        tail(取出后面几行):

          tail [-n number] 文件

          参数: -n: 后面接数字,代表显示几行的意思。

              -f: 表示持续检测后面所接的文件名,要等到按下[ctrl]-c 才会结束tail的检测,要让文件有数据写入时就立刻显示到屏幕上,就利用-f这个参数

      4、非纯文本文件: od

        od [-t TYPE] 文件

        参数:

        -t: 后面可以接各种“类型 (TYPE)”的输出,例如:

          a : 利用默认的字符来输出

          c :   使用ASCII字符来输出

          d[size]: 利用十进制(decimal)来输出数据, 每个整数占用size bytes

          f[size]: 利用浮点数(floating)来输出数据,每个整数占用size bytes

          o[size]: 利用八进制(octal)来输出数据,每个整数占用size bytes

          x[size]: 利用十六进制(hexadecimal)来输出数据,每个整数占用size bytes

     四、修改文件时间与创建新文件:touch

      文件的三个时间:

        modification time(mtime):

          当该文件的“内容数据”更改时, 就会更新这个时间,内容数据指的是文件的内容,而不是文件的属性或权限。

        status time(ctime):

          当该文件的“状态”改变时, 就会更新这个时间。举例来说,像是权限与属性被更改了,都会更新这个时间。

        access time(atime):

          当“该文件的内容被取用”时, 就会更新这个读取时间(access)。举例来说,我们使用cat去读取文件,就会更新该文件的atime

        默认情况下,ls显示出来的是该文件的mtime, 也就是这个文件的内容上次被更改的时间。

        --time=atime 查看access time

        --time=ctime 查看status time

        touch [-acdmt] 文件

        参数: 

          -a: 仅修改访问时间:

          -c: 仅修改文件的时间,若该文件不存在则不创建新文件。

          -d: 后面可以接欲修改的日期而不用目前的日期,也可以使用--date="日期或时间"

            -m: 仅修改mtime;

          -t: 后面可以接欲修改的时间而不用目前的时间,格式为[YYMMDDhhmm]

      touch这个命令最常用的情况:

        创建一个空的文件;

        将某个文件日期修改为目前日期(mtime与atime)

    五、文件与目录的默认权限与隐藏权限

       1、文件默认权限: umask

        umask 就是指定在新建文件或目录时候的权限默认值,代表拿走的权限:

        查看方式有两种:

           直接输入umask, 可以看到数字形态的权限设置分数。

           一种则加入-S(Symbolic)这个参数,就会以符合类型的方式来显示出权限

        

        umask会有四组数字,第一组是特殊权限用的,后面三项则是我们熟知的user group others的权限组。

        要注意的是,umask的分数指的是“该默认值需要减掉的权限”。

        例如umask 022, 所以user并没拿掉任何权限,不过group与others的权限被拿掉了2(也就是w这个权限),那么当用户:

          新建文件时: (-rw-rw-rw-) - (-----w--w-) = (-rw-r--r--)

          新建目录时:(drwxrwxrwx)- (d----w--w-) = (drwxr-xr-x)

        umask [0002] 设置默认权限

      默认情况下,root的umask会拿掉较多的属性,root的umask默认是022,这是局域安全的考虑,至于一般身份用户,通常他们的umask为002,即保留同用户组的写入权利。

       2、文件隐藏属性chattr, lsattr

        chattr (设置文件的隐藏属性):chattr命令只能在Ext2/Ext3的文件系统上面生效,其他的文件系统可能就无法支持这个命令了。

        chattr [+-=] [ASacdistu] 文件或目录名称

        参数:

          +: 增加某一个特殊参数, 其他原本存在参数则不动。

          -: 删除某一个特殊参数, 其他原本存在参数则不动。

          =: 仅有后面接的参数

        A: 当设置了A这个属性时, 若你有访问此文件(或目录)时, 他的访问时间atime将不会被修改,可避免I/O较慢的机器过度访问磁盘。这对速度较慢的计算机有帮助

        S: 一般文件是异步写入磁盘的,如果加上S这个属性时, 当你进行任何文件的修改,该改动会“同步”写入磁盘中

        a:  当设置a之后,这个文件将只能增加数据,而不能删除也不能修改数据,只有root才能设置这个属性。

        c:  这个属性设置之后,将会自动将此文件压缩,在读取的时候将会自动解压缩,但是在存储的时候,将会先进行压缩后再存储(看来对大文件似乎蛮有用的

        d: 当dump程序被执行的时候,设置d属性将可使该文件(或目录)不会被dump备份。

        i: 这个i可就很厉害了。它可以让一个文件“不能被删除、改名、设置连接也无写入或添加数据。”对于系统安全性有相当大的帮助。只有root能设置此属性“

        s:  当文件设置了s属性时,如果这个文件被删除,他将会被完全从这个硬盘空间中删除

        u: 与s相反, 当使用u来配置文件时, 如果该文件被删除了,则数据内容其实还存在于磁盘中,可以使用来找回该文件。

        注: 属性设置常见的是a与i的设置值,而且很多设置值必须要身为root才能设置

       lsattr [-adR] 文件或目录

      参数:

        -a: 将隐藏文件的属性也秀出来。

        -d: 如果接的是目录,仅列出目录本身的属性而非目录内的文件名

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

      3、文件特殊权限:SUID, SGID, SBIT

        

       Set UID(SUID):

        当s这个标志出现在文件所有者的x权限上时,例如上面的/usr/bin/passwd权限“-rwsr-xr-x”,此时被称为Set UID, 简称为SUID的特殊权限。基本上SUID有这样的限制与功能:

         a. SUID权限仅对二进制程序有效;

        b. 执行者对于该程序需要具有x的可执行权限

        c. 本权限仅在执行该程序的过程中(run-time)有效

        d. 执行者将具有该程序所有者(owner)的权限

       注: SUID仅可用在二进制程序上,不能够在shell script 上面, 且SUID对于目录也是无效的

      

      Set GID(SGID):

        s在用户组的x时则称谓SGID

        与SUID不同,SGID可以针对文件或目录来设置。如果对于文件来说,SGID有如下的功能:

         a. SGID对二进制程序有用

         b. 程序执行者对于该程序来说,需具备x的权限

         c. 执行者在执行的过程中将会获得该程序用户组的支持

        对于目录来说, 有如下功能:

          a. 用户若对于此目录具有r与x的权限时, 该用户能够进入此目录;

          b. 用户在此目录下的有效用户组(effective group)将会变成该目录的用户组

          c。若用户在此目录下具有w的权限(可以新建文件), 则用户所创建的新文件的用户组与此目录的用户组相同。

       Sticky Bit(SBIT): t在其他人组的x时,称为SBIT, 目前前只针对目录有效,SBIT杜宇目录有以下功能:

         a. 当用户对于此目录具有w,x权限,即具有写入的权限时:

         b. 当用户在该目录下创建文件或目录时, 仅有自己与root才有权利删除该文件。

      SUID/SGID/SBIT权限设置

        数字形态更改权限的方式为“三个数字”的组合, 那么如果在这三个数字之前再加上一个数字的话,最前面的那个数字就代表这几个权限了

        4为SUID

        2为SGID

        1为SBIT

        如“chmod 4755 filename”---"-rwsr-xr-x"

        也可以通过符号法来处理:其中SUID为u+s, 而SGID为g+s, SBIT则是o + t, 如下

        chmod g+s, o+t test

      4、查看文件类型:file

        file 文件  --》 可以查看文件的基本数据,例如属于ASCII或者是data文件,或者是binary,且其中有没有使用到动态函数库(share library)等等信息。

     

    六、命令与文件的查询:

      1、脚本文件名的查询:

        which或type查找命令放在哪里

        which(寻找“执行文件”)

          which [-a] command 

          -a: 将所有由PATH目录中可以找到的命令均列出来,而不是只第一个被找到的命令名称

      2、文件名的查找:

        whereis(寻找特定文件):

          whereis [-bmsu] 文件或目录名

          参数:

            -b: 只找二进制格式的文件

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

            -s: 只找source源文件

            -u: 查找不在上述三个选项中的其他特殊文件

        locate (关键字查找文件)

          locate [-ir] keyword

          -i: 忽略大小写的差异

            -r: 后面可接正则表达式的显示方式

        注意: locate: 依据/var/lib/mlocate内的数据库记载,找出用户输入的关键字文件名。 whereis也是一样的

           如何更新数据库: 命令updatedb: 根据/etc/updatedb.conf的设置去查找系统硬盘内的文件名,并更新/var/lib/mlocate内的数据库文件。

        find:

          find [PATH] [option] [action]

          参数:

            1、与时间有关的参数: 共有 -atime, -ctime与-mtime, 下面以-mtime说明:

              -mtime n : n位数字,意义为在n天之前的“一天之内”被更改过的文件

              -mtime +n: 列出在n天之前(不含n天本身)被更改过的文件名

              -mtime -n: 列出在n天之内(含n天本身)被更改过的文件名

              -newer file: file 为一个存在的文件, 列出比file还要新的文件名

            2、与用户或用户组名有关的参数:

              -uid n: n为数字, 这个数字是用户的账号ID,即UID,这个UID是记录在/etc/passwd里面与账号名称对应的数字

              -gid n: n 为数字, 这个数字是用户组名的ID,即GID,这个GID记录在/etc/group中

              -user name: name 为用户账号名称,例如dmtsai

              -group name: name为用户组名,例如users

              -nouser: 寻找文件的所有者不存在/etc/passwd的人

              -nogroup: 寻找文件的所有用户组不存在于/etc/group中的文件

                  当你自行安装软件时,很可能该软件的属性当中并没有文件所有者,这是可能的,在这个时候,就可以使用-nouser与-nogroup查找

            3、 与文件权限即名称有关的参数:

              -name filename: 查找文件名为filename的文件

              -size [+-]SIZE:  查找比SIZE还要大(+)或小(-)的文件。这个SIZE的规格有:

                        c: 代表 byte, k: 代表 1024byte 所以要比50kb还要大的文件,就是“-size +50k”

              -type TYPE: 查找文件的类型为TYPE的,类型主要有:一般正规文件(f)、设备文案(b,c)、目录(d)、连接文件(l)、socket(s)及FIFO(p)等属性

              -perm mode : 查找文件权限“刚好等于”mode的文件,这个mode类似chmod的属性值,举例来说, -rwsr-xr-x的属性值为4755

              -perm -mode : 查找文件权限“必须要全部包括mode的权限”的文件,举例来说,我们要查找-rwsr-xr-x,即0744的文件,使用-perm-0744,

                      当一个文件的权限为-rwsr-xr-x,即4755时,也会被列出来, 因为-rwsr-xr-x 的属性已经包括了-rwxr--r--的属性了。

              -perm -mode : 查找文件权限“包含任意mode的权限”的文件,举例来说,我们查找-rwxr-xr-x, 即-perm +755时, 但一个文件属性为 -rw-------也会被列出来,因为他有-rw...的属性存在。

     

            4、其他可进行的操作:

              -exec command: command为其他命令, -exec后面可再接其他的命令来处理查找到的结果。

              -pring : 将结果打印到屏幕上,这个操作是默认操作          

              例如: find / -perm +7000 -exec ls -l {} ;

              {}代表的是“由find找到的内容”,如上图所示,find的结果会被放置到{}位置中

              -exec 一直到“;”是关键字,代表find额外命令的开始(-exec)到结束(;),在这中间的就是find命令内的额外命令,在本例中就是“ls -l {}”

              因为“;”在bash环境下是有特殊意义的,因此用反斜扛转义

          find还可以利用通配符来找寻文件名

          find不但可以指定查找的目录(连同子目录),并且可以利用额外的参数来找到最正确的文件名。

    七、权限与命令间的关系(极重要)

       1、进入目录成为“可工作目录”的基本权限:

          可使用的命令: 例如cd等切换工作目录的命令

          目录所需权限: 用户对这个目录至少需要具有x的权限

          额外需求:如果用户想要在这个目录内利用ls查阅文件名,则用户对此目录还需要r的权限

       2、用户在某目录内读取一个文件的基本权限:

          可使用命令: cat more less 等

          目录所需权限: 用户对这个目录至少需要具有x权限

          文件所需要权限: 用户对文件至少需要具有r权限才行

       3、让用户可以修改一个文件的基本权限:

          可使用的命令: 例如nano或未来要介绍的vi编辑器等

          目录所需权限: 用户在该文件所在的目录至少要有x权限

          文件所需权限: 用户对该文件至少要有r,w权限

        4、让一个用户可以创建一个文件的基本权限:

          目录所需权限: 用户在该目录要具有w,x的权限,重点在w

        5、让用户进入某目录并执行该目录下的某命令的基本权限

          目录所需权限:用户在该目录至少要有x的权限

          文件所需权限: 用户在该文件至少需要有x的权限

  • 相关阅读:
    《网络攻防第四周作业》
    《网络攻防第三周作业》20179313
    15.javaweb XML详解教程
    小程序新功能:直接进入内嵌网页!
    为什么要创业?听听扎克伯格怎么说
    面试官:“还有什么问题问我吗?”我...
    双十一为何规则复杂,套路多多
    如何设置电信光猫?图解手把手教你(超级详细)
    14.javaweb AJAX技术详解
    android黑科技系列——自动注入代码工具icodetools
  • 原文地址:https://www.cnblogs.com/SamLXW/p/6145645.html
Copyright © 2020-2023  润新知