3月18日学习笔记

时间:2023-01-06 11:49:10

一、特殊权限(chattr、lsattr)
二、特殊权限(set_uid、set_gid、sticky_bit)
三、搜索文件(which、whereis、find、locate)
四、链接文件的建立(ln -s、ln)


一、特殊权限设置

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@laoqi tmp]# mkdir 2
[root@laoqi tmp]# chmod 777 2
[root@laoqi tmp]# chmod g+s 2
[root@laoqi tmp]# su - xiaoqi
[xiaoqi@laoqi ~]$ cd /tmp/
[xiaoqi@laoqi tmp]$ mkdir 2/123                                   //用户xiaoqi建立了一个目录
[xiaoqi@laoqi tmp]$ ls -ld 2/123
drwxrwsr-x. 2 xiaoqi root 4096 3月  20 00:21 2/123       //属组并不是xiaoqi,而是root





sticky_bit 特殊权限  防删除位   用户1创建的文件,只有用户1才能删除。
使用方法 :chomd o+t 目录名
实例:
[xiaoqi@laoqi 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命令,就可以看到某个系统命令是否存在,以及执行的到底是哪个位置的命令。
实例:
[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下的文件
updatedb     手动更新数据库
yum  install  -y  mlocate 


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 . -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的目录文件
-name  根据文件名查询

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


扩展:
进行哪些操作会修改3个time的时间呢?
vi文件     三个time都变(注:只进入vi,不修改就退出,只修改atime)
cat 文件     atime会变
echo 追加一个文本    m和 c

四、linux下的链接文件
ln  链接命令
软连接 






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


如果建立软链接使用相对路径会怎么样?
查看软链接信息,链接到的也是一个相对路径,根本看不到链接到哪里了
使用pwd -P,查看到的信息也是错误的


如何检查一个软链接的真实路径呢?
pwd -P     真正路径
pwd -L     逻辑路径


硬链接
不可以作用于目录
ln 文件名
ls -l
不能作用在不同分区 因为inode号会冲突
可以删除其中一个文件,同级
硬链接可以同步修改
硬链接=复制+同步+删除源文件无碍+不能跨分区+不能作用于目录
软链接=快捷方式+同步+删除源文件废废+能跨分区+也能作用于目录