• linux:档案与目录管理


    几个常见的目录处理命令:

      cd(change directory):变更目录

      pwd(print working directory):显示当前目录[目录为连结档,则只显示连结档的路径]([-P]不以连结档的目录路径显示,显示当前目录的完整物理地址而非连结档的地址,) 

        例如:/var/mail->var/spool/mail,使用pwd只显示连结档/var/mail,加入[-P]选项则显示连结档的实际物理地址var/spool/mail

      mkdir(make direcotory):创建一个新的空目录([-p]可以帮你创建多层目录,比如:mkdir -p zgw/zgw1/zgw2/zgw3;[-m]可以在创建目录的同时设置目录权限,比如:mkdir -m 711 zgw_temp)

      rmdir:删除一个新的空目录([-p]可以同时删除多层目录;比如:rmdir -p zgw_temp/zgw1/zgw2/zgw3)

    注意:使用相对路径必须确认你目前的路径才能切换到你想去的地方

      

    一、$PATH环境变量(关于执行档路径的变数$PATH;path:/etc/profile)

      问题:为什么我可以在任何目录执行/bin/ls这个命令呢?

      答案:因为linux下面有PATH环境变量

      获取环境变量echo $PATH

      在centos 7.0下面 /bin(连结到/usr/bin)->/usr/bin(sbin(连结到/usr/sbin)->/usr/sbin)

      以下几个问题有助于理解$PATH

      1>.假設你是root,如果你將ls由/bin/ls移動成為/root/ls(可用『mv /bin/ls /root』指令達成),然後你自己本身也在/root目錄下, 請問(1)你能不能直接輸入ls來執行?(2)若不能,你該如何執行ls這個指令?(3)若要直接輸入ls即可執行,又該如何進行?

      (1).要看/root目录是否存在与$PATH中,如果不存在则不能执行ls,存在则可以执行ls

      (2).现在ls在/root目录下,则可以使用/root/ls来执行,或者./ls来执行该指令档案

      (3).将/root这个路径加入到$PATH环境变量中就可以执行了{PATH="${PATH}:/root"}

      2>.如果有两个ls命令,一个在/usr/local/bin/ls、一个在/bin/ls目录下下面,当你执行ls指令时,哪个ls会被执行?

      答案:在$PATH环境环境变量中,哪个目录先被查到就执行哪个目录下的ls指令

      3>.为什么$PATH环境变量中不加入【.】呢?加入【.】的话执行起来很方便在/root目录下直接读取目录指令了?

      答案:因为每个使用者的工作目录都不同,也在不断的变化,不会固定,所以执行指令会有变动;再一个加入在/tmp目录下有个ls命令,大家都能进入/tmp目录下操作,如果执行ls指令会窃取用户个人信息或者私密信息,这是root账户进来执行了ls将会很糟糕【所以为了安全起见,不建议将(.)加入$PATH环境变量】

      总结:

        a.用户使用的预设的PATH不同,预设能够随意执行的指令也不同

        b.PATH是可以更改的

        c.直接使用绝对路径和相对路径来执行某个指令的档名来执行,会比搜寻PATH来的更正确

        d.指令应该放置在正确的目录下,执行才会比较方便

        e.本目录【.】最好不要放到PATH环境变量中

    二、档案与目录管理

      1>.档案与目录的视察:ls[command]在linux下面是个很重要也很常用的指令(-----找man、找--help、找info)

       

      2>.复制cp、移动mv、删除rm

        cp(常用,使用命令不加任何选项时目的当的权限和修改时间都跟源档案不一样):

          注意(在预设的条件中,cp的来源档与目的档的权限不同,目的档的拥有者通常会是指令的操作者),以及下图中注明常用的选项

          

      注意:

        -u选项是在源目标档和目的档有差异的时候才使用的,常用在备份的时候

        是否需要完整的保留原档案的资讯

        来源档案是否为连接档案(symbolic link file)

        来源档案是否为特殊的档案,如FIFO,socet

        来源档案是否为目录

      rm(移除目录或档案):

        

        注意:

          删除目录的时候使用【-r】没删除一个文件提示是否删除,在指令前面加上【】就可以了{ m -r etc}

          删除特殊字符开头的档名档案【+aa或者-aa】则进入当前目录使用【./-aa或者./+aa】也就是rm ./+aa或者rm ./-aa在man中还有一种写法rm -- -a

      mv(移动档案和目录或者更名):

        

    三、取得档案的档名和目录名

      basename:取的档案的最后档名

      dirname:取得档案的目录名

      

    四、档案内容的查询     【注意:善于利用echo,它可以在屏幕上输出任何信息】

      cat:由第一行开始显示档案内容

      tac:由最后一行开始显示档案内容(与cat刚好相反)

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

      more:一页一页的显示档案内容

      less:与more相似,但是它可以往前翻页

      tail:只尾巴几行

      head:只看头几行

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

      1.直接视察档案内容(一次性将资料全部显示的屏幕上面)

      cat("猫",Concatenate ) :

        

      nl:添加行号列打印

      

      2.可翻页查看档案内容(分页显示)

        more(一页一页翻动):

      

        less(一页一页翻动):man page就是呼叫了less进行查看档案的说明内容的

        

      3.资料截取head(预设只显示前10行)、tail(预设只显示尾10行)都是以行为单位来进行截取资料的:

         head(头):

        

        tail(尾):

        

      4.非纯文字档:od

      

    五、档案的建立或者修改档案的时间【touch】

       touch:最常用的就是【简历一个空的档案】与【将某个档案的日期修订为目前mtime和atime】  

       

       

    六、档案预设权限:umask(目前使用者在建立档案或目录的权限预设值)

        

       umask(0022):这个分数值指的是创建的目录或档案的权限需要减掉的权限(后面三位代表ugo三个分组的权限),

          建立档案:当使用者建立档案时,【预设没有x可执行权限】,只有rw的权限,所以档案建立预设最大的权限为666(666-022=644)

               (-rw-rw-rw-) - (-----w--w-) ==> -rw-r--r--

          建立目录:当建立目录时,由于x为是否可以进入目录有关,因此预设为所有的权限都开放,则目录建立预设最大的权限为777(777-022=755)

               (drwxrwxrwx) - (d----w--w-) ==> drwxr-xr-x

    七、档案隐藏属性(隐藏属性比如设置了【i】,连root都删除不了)

       chattr(设定档案隐藏属性;主要的是a与i)----系统安全很重要

      

      lsattr(查看档案或目录的隐藏属性):

      

    八、档案的特殊权限 SUID, SGID, SBIT(-rwSrwSrwT. 1 root root 0 Apr 26 09:11 test其中s和t都是大写的,说明对应的栏位为空,没有执行的权限)

      

      仔细看上面的档案和目录的属性,权限位出现了【t】与【s】

      SUID【s出现在拥有者的x权限上为SUID】(set uid)限制与功能:

        SUID只能在二进制程序(binary program)上面使用,不能在shell script上面使用,且对目录无效

        SUID权限只对二进制程序有效

        执行者要对该档案具备可执行【x】的权限

        本权限只在执行该程序的过程中有效

        执行者将具有该程序拥有者的权限(比如:/etc/shadow这个档案只有root可以查看和强行写入,但是你用一般账户执行【passwd】命令修改密码也是可以写入成功的,因为具有该特殊权限,让一般使用这账户在修改密码写入新密码到该档案时,身份临时变成了root,才能写入新密码修改密码成功)

        

        SGID【s出现在所属群组的x权限上为SGID】(set gid):SGID可以针对档案和目录

        

        对于档案有以下功能:

          对二进制位程序有效

          程序执行者对于该程序必须具备可执行的权限【x】

          执行者在执行该程序时会获得该程序群组的支援

        对于目录有一下功能:

          使用者对此目录具有读和执行的权限,该使用者能够进入此目录

          使用者在此目录下的有效群组将变成该目录的群组

          用途:若使用者对该目录有写的权限(【r】可以创建新的档案),则使用者所创建的档案的群组与该目录的群组相同(【专案开发】用户必须支援该目录的所属群组,该目录权限最好设定为2770)

          下面是情境模拟:

          

            

           

           认真实操上面的代码,有助于理解SGID的用处

        SBIT(只对目录有效果,比如:/tmp)对目录的作用:

          

          当使用者对该目录具有w、x的权限,亦即具有写入的权限

          当该使用者在该目录下建立档案或目录时,只有自己与root才有权利删除它

      SUID、SGID、SBIT的设定

        SUID:4(不是用在目录上面)

        SGID:2(档案目录都支持)

        SBIT:1(不是用在档案上面)

      语法:chmod [4,2,1或者三个当中的和][rwx][rwx][rwx](777) 档名

      比如:chmod 4755 test 【标识对该档案设置了SUID的功能】

         chmod 6755 test  【标识对该目录设置了SGID和SBIT的功能】

      

      也可以使用【ugo】【+-】【s/s/t】来设定

      比如(u+s,g+s,o+t):chmod u=rwxs,go=x test;chmod g+s,o+t test

      

    九、获取档案类型:file 【语法:file 档名/目录】

     总结:

      

     内容参考自鸟哥linux私房菜,传送门:http://linux.vbird.org/;

  • 相关阅读:
    Python动态生成方法
    aid learning安装python
    Pic Go使用阿里云OSS搭建图床
    QSqlQuery、QSqlQueryModel、QSqlTableModel的区别
    python文件上传错误“Required request part 'xxx' is not present”
    【已解决】执行yum命令失败:error: rpmdb: BDB0113 Thread/process 16978/139878363277376 failed: BDB1507 Thread died in Berkeley DB library
    C# DataTable Select用法
    Error in event handler: SyntaxError: Unexpected token '<'
    Lodash 两个数组合并-排重
    forEach,map,filter,find,some,every区别
  • 原文地址:https://www.cnblogs.com/zengguowang/p/5420158.html
Copyright © 2020-2023  润新知