知识点
chattr,lsattr,set_uid,set_gid,stick_bit,find,软链接,硬链接,文件互传
详细信息
chattr命令
change file attributes on a Linux file system 修改文件的属性。
chattr +i 文件 给予文件i属性,使得文件不能增减改操作
chattr +a 文件 只能增加
[root@localhost /]# mkdir -v /test
mkdir: 已创建目录 "/test"
[root@localhost /]# cd /test
[root@localhost test]# touch shiyan.txt
[root@localhost test]# ll shiyan.txt
-rw-r--r--. 1 root root 240 10月 21 23:36 shiyan.txt
[root@localhost test]# chattr +i shiyan.txt //给shiyan.txt添加chattr i属性
[root@localhost test]# lsattr !$
lsattr shiyan.txt
----i----------- shiyan.txt //显示为一个i标志,表示添加成功!
[root@localhost test]# rm -rf shiyan.txt
rm: 无法删除"shiyan.txt": 不允许的操作 //现在执行rm命令发现操作不被允许!
[root@localhost test]# chattr -i shiyan.txt
[root@localhost test]# rm -rf shiyan.txt //删除文件的chattr i 属性后就可以正常操作了!
[root@localhost test]# ls
如果操作对象是目录,又会是怎样!我们来做个小实验
[root@localhost ~]# mkdir /test
[root@localhost test]# cp /usr/bin/ls /test
[root@localhost test]# chattr +i /test
[root@localhost test]# touch .hudie
touch: 无法创建".hudie": 权限不够
[root@localhost ~]# lsattr /test
---------------- /test/ls
[root@localhost ~]# rm /test/ls
rm:是否删除普通文件 "/test/ls"?y
rm: 无法删除"/test/ls": 权限不够
[root@localhost ~]# chattr -i /test/
[root@localhost ~]# lsattr -d /test/
---------------- /test/
[root@localhost ~]# touch /test/hudie
[root@localhost ~]# rm /test/ls
rm:是否删除普通文件 "/test/ls"?y
[root@localhost ~]# ls /test
hudie
[root@localhost test]# vi hudie
[root@localhost test]# cat hudie
hunanldiejlej
[root@localhost test]# ll
-rw-r--r--. 1 root root 14 10月 23 22:08 hudie
[root@localhost test]# chmod 777 hudie
[root@localhost test]# ll
-rwxrwxrwx. 1 root root 14 10月 23 22:08 hudie
==如果一个目录设置了chattr i属性则该目录不能删除新增文件或者目录,但是已经创建好的文件可以修改内容和属性!==
lsattr命令
list file attributes on a Linux second extended file system 一个简单的查看文件属性命令。为chattr应运而生!
[root@localhost test]# chattr +i /test
[root@localhost test]# lsattr /test
---------------- /test/111.txt
---------------- /test/222.txt
[root@localhost test]# lsattr -d /test
----i----------- /test
[root@localhost test]# lsattr -d .
----i----------- . //可以看到有个i属性!
特殊权限set_uid
[root@localhost test]# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 6月 10 2014 /usr/bin/passwd
查看/usr/bin/passwd这个文件发现他的所有者权限为rws,这个就是set_uid的作用。用户使用passwd这个命令的时候临时获得所有者的权限。
设置set_uid需要有2个条件
- 必须是个二进制可执行文件
- 必须有x权限
命令格式为:chmod u+s 文件 或者 chmod u=rws 文件
[root@localhost test]# ll .
-rw-r--r--. 1 root root 10 10月 21 23:51 111.txt
[root@localhost test]# chmod 777 111.txt
[root@localhost test]# ll .
-rwxrwxrwx. 1 root root 10 10月 21 23:51 111.txt
[root@localhost test]# ll .
-rwsrwxrwx. 1 root root 10 10月 21 23:51 111.txt
[root@localhost test]# chmod u-s 111.txt
[root@localhost test]# ll .
-rwxrwxrwx. 1 root root 10 10月 21 23:51 111.txt
如果一个文件没有x权限,然后又被添加了uid属性,则文件权限会变成S
[root@localhost test]# touch www.txt
[root@localhost test]# ll .
-rw-r--r--. 1 root root 0 10月 23 22:34 www.txt
[root@localhost test]# chmod 4644 www.txt
[root@localhost test]# ll .
-rwSr--r--. 1 root root 0 10月 23 22:34 www.txt //由于www.txt这个文件没有x权限,所有在赋予set_uid的时候会变成S
特殊权限set_gid
使用效果和set_uid差不多,set_uid是暂时拥有所有者权限,而set_gid是暂时拥有所属组权限。
[root@localhost test]# chmod g=rws 222.txt
[root@localhost test]# ll 222.txt
-rw-rwSr--. 1 root root 0 10月 21 23:50 222.txt
但是如果作用的目标是目录,那就会有点不同
[root@localhost 444]# chmod g=rws /test/444/
[root@localhost 444]# ls -ld .
drwxrwSr-x. 2 root grapess 6 10月 22 00:28 .
[root@localhost 444]# mkdir -pv 1/2/3
mkdir: 已创建目录 "1"
mkdir: 已创建目录 "1/2"
mkdir: 已创建目录 "1/2/3"
[root@localhost 444]# ll 1
drwxr-sr-x. 3 root grapess 15 10月 22 00:30 2
[root@localhost 444]# cd 1
[root@localhost 1]# touch hello.txt
[root@localhost 1]# ll
-rw-r--r--. 1 root grapess 0 10月 22 00:35 hello.txt
将一个目录添加set_gid权限后,在这个目录里创建的所有东西都属于这个group。好像某人创办了一个公司,公司员工生产的所有产品都属于这个公司!
特殊权限stick_bit
[root@localhost tmp]# ls -ld /tmp
drwxrwxrwt. 10 root root 4096 10月 22 00:39 /tmp
目录/tmp的权限为rwxrwxrwt 这个t就是stick_bit位。在该目录下所有人都有rwx的权限,但是操作的对象仅限自己的文件。别人的文件他没办法动!
软链接
相当于windows的快捷方式。软链接的文件类型标志为l
[root@localhost tmp]# ls -l /bin
lrwxrwxrwx. 1 root root 7 5月 12 19:04 /bin -> usr/bin
[root@localhost etc]# cp yum.conf /test/
[root@localhost etc]# cd /test
[root@localhost test]# ll
-rw-r--r--. 1 root root 970 10月 22 00:48 yum.conf
[root@localhost test]# vi yum.conf
[root@localhost test]# ln -s yum.conf hello
[root@localhost /]# ls -il /test/
50377593 lrwxrwxrwx. 1 root root 8 10月 23 22:46 hello -> yum.conf
331 -rw-r--r--. 1 root root 970 10月 23 22:46 yum.conf
==通过ls -i发现软链接的inode和源文件的inode是不一样的==
硬链接
说到硬链接就要提到inode的概念!
[root@localhost test]# ln yum.conf yum.hard
[root@localhost test]# ll
-rw-r--r--. 2 root root 970 10月 22 00:48 yum.conf
-rw-r--r--. 2 root root 970 10月 22 00:48 yum.hard
[root@localhost test]# ls -il
331 -rw-r--r--. 2 root root 970 10月 22 00:48 yum.conf
331 -rw-r--r--. 2 root root 970 10月 22 00:48 yum.hard
==通过ls -i可以看出2个文件的inode号是一样的,硬链接其实就是一个文件的另一个分身,但是分身的本质inode都是一样的,所以系统在向这个文件写入内容的时候就是在给该inode写入,而2个文件的inode是相同的,所以就可以同时写入了!==
硬链接只能给文件,不能给目录,而且不能跨分区
find命令
find {范围}{条件}
- name 根据文件名查找
- iname 不区分文件名大小写
- size 根据文件大小查找
- inum 根据i节点号查找
- type 根据文件类型查找 f,d,l,c....
- atime access 根据访问时间查找
- ctime change 根据修改(属性修改)时间查找
- mtime modify 根据修改(内容修改)时间查找
[root@localhost test]# find /etc -type l -name sm*
/etc/pam.d/smtp
/etc/pam.d/smartcard-auth
[root@localhost test]# find /etc -type l -name sm* -exec ls -l {} \;
lrwxrwxrwx. 1 root root 25 5月 12 19:06 /etc/pam.d/smtp -> /etc/alternatives/mta-pam
lrwxrwxrwx. 1 root root 17 5月 12 19:09 /etc/pam.d/smartcard-auth -> smartcard-auth-ac
实际应用中find命令会搭配其他命令使用!
格式为:find 『范围』『条件』 -exec 『其他命令』 {} \ ; // 注意:\和;之间没有空格,{}和\之间有空格
[root@localhost /]# find / -name hello -exec ln -s {} /hello.soft \;
[root@localhost /]# ll
lrwxrwxrwx. 1 root root 11 10月 23 23:22 hello.soft -> /test/hello
window和linux文件互传
[root@localhost test]# yum install -y lrzsz
安装lrzsz服务,使用命令==sz==传文件到windows,使用==rz==传文件到linux