阿铭笔记第五讲

一、特殊权限设置

    chattr       这个命令为文件或目录添加特殊权限,较常用的有i、a这两个权限。

  •     chattr +i   名称(文件或目录) 

                   文件:文件添加此权限后无法写入数据,无法重命名、删除此文件。

                  目录:目录添加此权限后无法再写入文件、无法删除目录内的文件或目录、无法移动或重命名目录内的数据。

  •     chattr -i [文件或目录名]    为文件或目录去掉i权限


实例:

[root@laoqi tmp]# chattr +i 2        //给目录2添加i权限

[root@laoqi tmp]# lsattr -d 2         //查看目录2的权限

----i--------e- 2                                //显示有i权限


  • chattr +a     追加特殊权限

            文件:无法写入数据

            目录:只能追加信息,不能删除或移动内容。

  • chattr -a [文件或目录名]         去掉a权限

实例:

  • [root@laoqi tmp]# chattr +a 1           //为文件1添加a权限

  • [root@laoqi tmp]# lsattr 1                  //查看文件1的特殊权限

  • -----a-------e- 1                                   //文件1目前有a权限

  • [root@laoqi tmp]# vi 1                     //vi进入该文件,无法写入任何数据


注:默认一个文件没有任何特殊权限

  • lsattr 常用选项

    •     -V 显示lsattr版本

    •     -a 显示所有文件,包括隐藏文件

    •     -d 显示目录本身特效

    •     -R 递归显示,连同子目录的数据一通列出

[root@laoqi tmp]# ls -ld /usr/bin/passwd 
-rwsr-xr-x. 1 root root 25980 2月  22 2012 /usr/bin/passwd

上面的rws的s 是set_uid权限  这个权限可以让其他用户临时拥有属主的权限,
如果把这个文件的set_uid权限去掉,则普通用户无法修改自己的密码。
#chmod u+s   /usr/bin/passwd
注意:如果属主没有x执行权限,添加s权限后,会变成大S,且没有任何意义
什么样的文件可以设置s权限?:可执行文件、必须是二进制文件


  set_gid 简写sgid     让其他用户新建目录或文件时,继承父目录所属组。
实例:
    [root@debris tmp]# mkdir 2
    [root@debris tmp]# chmod 777 2
    [root@ladebrismp]# chmod g+s 2
    [root@debris tmp]# su - debris

    [xiaoqi@ladebris]$ cd /tmp/
    [xiaoqi@debris tmp]$ mkdir 2/123                      //用户xidebris了一个目录
    [xiaoqi@ladebrismp]$ ls -ld 2/123
drwxrwsr-x. 2 xidebrisoot 4096 3月  20 00:21 2/123       //属组并不是debris,而是root

sticky_bit 特殊权限  防删除位   用户1创建的文件,只有用户1才能删除。
使用方法 :chomd o+t 目录名
实例:
    [xiaoqi@debris tmp]$ ls -ld /tmp/           
drwxrwxrwt. 4 root root 4096 3月  20 00:20 /tmp/         //tmp目录下的文件,只有创建它的用户才能修改

删除目录下的文件,有写权限
强制写入(删掉原来的文件,重新建立一个文件  属主和属组都变了)
    set_uid、set_gid、stick_bit可以分别用数字来表示:
    set_uid     4
    set_gid     2
    stick_bit      1
这样在给文件添加权限时,就可以这样设置了:
    实例:chmod 4755 /tmp/2     给/tmp/2添加set_uid权限
    实例:chmod 6644 /tmp/2     给/tmp/2添加set_gid权限和set_uid权限
    实例:chmod 5644 /tmp/2     给/tmp/2添加set_uid权限和sticky_bit权限

三、搜索文件
    which    在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪个位置的命令。

 

#type cp  查看命令类型
实例:
    [root@laoqi ~]# which grep
    /bin/grep

 

  • whereis      

    只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s),如果省略参数,则返回所有信息。
whereis 会在固定的几个目录中搜索  /bin 、/sbin//、/usr/bin/、 /usr/sbin/、 /usr/share/man/man1/
/bin   /usr/bin   /usr/share      局限于这两个目录下

实例:whereis grep
    [root@laoqi ~]# whereis grep                    
grep: /bin/grep /usr/share/man/man1/grep.1.gz           //返回所有信息(二进制文件、man说明文件、源代码文件)
    [root@laoqi ~]# whereis -b grep                                   //只搜索二进制文件
grep: /bin/grep 
    [root@laoqi ~]# whereis -m grep                                  //只搜索man说明文件
grep: /usr/share/man/man1/grep.1.gz
    [root@laoqi ~]# whereis -s grep                                   //只搜索源代码文件
grep:

  • locate   相当于find -name     

    不搜索具体目录,而是搜索一个数据库(var/lib/locatedb) ,这个数据库中含有本地所有文件信息。LINUX系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。实例:locate /etc/sh     搜索etc目录下所有以sh开头的文件
实例:locate ~/m     搜索用户主目录下,所有以m开头的文件
实例:locate -i ~/m     搜索用户主目录下,所有以m开头的文件,并且忽略大小写。
不检索/tmp下的文件

  • yum  install  -y  mlocate 安装

  • updatedb     手动更新数据库

 

  • find      查找命令

使用格式: find 指定目录 指定条件 指定动作
     指定目录     所要搜索的目录及其所有子目录。默认为当前目录
     指定条件     所要搜索的文件的特征。
     指定动作     对搜索结果进行特定的处理
  指定条件:  -type d    //类型为目录的文件
                        -type f     //类型为普通文件
                        -name “文件名”      //根据文件名搜索
  指定动作:  -mtime +1     //修改时间(修改文件内容)一天以上
                     -mtime -1      //一天以内
                     -mmin -10    //10分钟以内
                     -mmin +10   //10分钟以上
                     -atime +1     //访问时间一天以上
                     -ctime +1     //改变时间(修改文件信息)一天以上
实例:#find  -name 'my*'     搜索当前目录(含子目录)中,所有文件名以my开头的文件;
            #find  -name 'my*' -ls     搜索当前目录中,所有以my开头的文件,并显示它们的详细信息;

 

            #find   /root   -name  "*txt" -mmin -60 |xarge ls -l  搜索root目录下txt的文件并显示详细信息;

            #find   /root   -name  "*txt" -mmin -60 -exec ls -l {} \;  
            #find   -type f -mmin -10     搜索当前目录中,所有过去10分钟更新过的普通文件;

            如果不加-type f参数,则搜索普通文件+特殊文件+目录

实例: #find  /etc/init.d/  -type d           //搜索/etc/init.d目录下所有的目录文件
          #find  /etc/init.d/ !  -type d        //搜索/etc/init.d目录下非目录的文件(!是取反的意思)
          #find  /etc/ -type d -name "cron.d"           //搜索/etc/下文件名为cron.d的目录文件
          #find  /etc/ -type d -a -name "cron.d"      //搜索/etc/下文件名为cron.d的目录文件
          #find  /etc/ -type d -o -name "cron.d"      //搜索/etc/的目录文件或文件名为cron.d的文件
          #find  /etc/ -type d -name "cron.d" -mtime -1  //搜索/etc/下最近一天修改过的名为cron.d的目录文件

stat命令查看文件的三个time(ctime、mtime、atime)
    实例:stat 文件名

  • atime +n/-n:表示访问或执行时间大于或小于N天的文件        

  •  mtime +n/-n:表示写入时间大于或小于N天的文件        

  •  ctime +n/-n:表示写入、更改inode属性(如更改所有者、权限或者链接)时间大于或小于N天的文件       

 

扩展:
    进行哪些操作会修改3个time的时间呢?

  •    查看一个文件(atime改变),  写一些文件(mtime改变),   写完之后文件大小变了(ctime改变)

  •     cat 文件:atime会变

  •     echo 追加一个文本  :  mtime改变和ctime改变


四、linux下的链接文件

  • ln  链接命令

软连接(文件、目录都行)
    #ln -s  建立软链接

 

    #ln -s /root/3.txt  /tmp/21.txt     创建软链接要使用绝对路径

    注如果建立软链接不使用相对路径会怎么样?(问题在于用目录和不同目录下)

        查看软链接信息,链接到的也是一个相对路径,根本看不到链接到哪里了

    使用pwd ,查看到的信息也是错误的

    如何检查一个软链接的真实路径呢?

        pwd -P     真正路径

        pwd -L     逻辑路径


硬链接

   #ln 

  •     不可以作用于目录

  • spacer.gif

    创建好后的图:除了文件名,其他的都一样

  •     spacer.gif

  • 不能作用在不同分区 因为inode号会冲突

  • spacer.gif

  • 可以删除其中一个文件,同级硬链接可以同步修改

  • 硬链接=复制+同步+删除源文件无碍+不能跨分区+不能作用于目录

  • 软链接=快捷方式+同步+删除源文件废废+能跨分区+也能作用于目录

 

 

 

 欢迎大家访问记忆碎片 www.debris.cn  ,在碎片中寻找你的记忆!

 

你可能感兴趣的:(find,软链接,查找命令)