一、隐藏权限lsattr/chattr
设置隐藏权限是chattr(目录、文件都可以)
隐藏权限用ls -l是看不到的
例如:chattr +i 1.txt
[root@aming01 ~]# chattr +i 1.txt
[root@aming01 ~]# ls -l 1.txt
-rw-r--r--. 1 root root 0 5月 16 00:49 1.txt
当更改不了内容,ls后发现,没有权限
这时候要想一想,是不是有什么隐藏权限
使用lsattr来查看,发现多了个i,而一般文件时没有的
[root@aming01 ~]# lsattr 1.txt
----i----------- 1.txt
[root@aming01 ~]# touch 2.txt
[root@aming01 ~]# lsattr 2.txt
---------------- 2.txt
有i权限不能写内容,不能追加,改名,更改时间包括删除
删除权限使用方法 chattr -i 1.txt
[root@aming01 ~]# chattr -i 1.txt
[root@aming01 ~]# lsattr 1.txt
---------------- 1.txt
a权限(常用):改权限表示只能追加不能删除,不能写内容,非root用户不能设定该属性。
[root@aming01 ~]# chattr +a 1.txt
[root@aming01 ~]# rm 1.txt
rm:是否删除普通空文件 "1.txt"?y
rm: 无法删除"1.txt": 不允许的操作
[root@aming01 ~]# head -n2 /etc/passwd >> 1.txt
[root@aming01 ~]# cat 1.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
lsattr 查看目录或文件的特殊权限
[root@aming01 ~]# lsattr 1.txt
---------------- 1.txt
-R:连同子目录的数据一同列出
[root@aming01 ~]# lsattr -a /tmp/
---------------- /tmp/.
---------------- /tmp/..
---------------- /tmp/.font-unix
---------------- /tmp/.X11-unix
---------------- /tmp/.XIM-unix
---------------- /tmp/.ICE-unix
---------------- /tmp/.Test-unix
---------------- /tmp/hhh2
---------------- /tmp/2.txt
---------------- /tmp/3.txt
---------------- /tmp/4.txt
-a:把目录里面的隐藏文件一并一出
扩展:当vi一个文件时,会产生一个1.txt~带波浪号的文件,是一个缓存文件,把刚写入的东西覆盖到1.txt,覆盖成功后删除。如果加了权限,覆盖不了,就会存在1.txt~文件。
mv命令,当mv目录时,如果目标目录下面有一个要移动的目录同名的目录,并且非空,是无法移动成功的,无法覆盖。
二、特殊权限set_uid
chmod u+s /usr/bin/passwd;chmod 4755 /usr/bin/passwd
我们查看passwd权限时,发现是一个红色的文件,看权限,rws,其中s就是set_uid
而这个权限相当于普通用户执行passwd命令时,临时获得root权限,前提必须是二进制文件,也必须有x权限。
[root@aming01 ~]# which passwd
/usr/bin/passwd
[root@aming01 ~]# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 6月 10 2014 /usr/bin/passwd
密码的文件,权限为---------
[root@aming01 ~]# ls /etc/shadow
/etc/shadow
[root@aming01 ~]# ls -l !$
ls -l /etc/shadow
----------. 1 root root 588 5月 14 08:11 /etc/shadow
设置set_uid权限的方法 chmod u+s /usr/bin/ls或者chmod u=rws /usr/bin/ls
首先我们先切换到普通用户下,用su命令,ls下/root/,发现权限不够,查看下/root/权限,很严谨
所以我们给ls设置set_uid权限,就可以临时拥有root的身份
设置完后就能查看了
在普通用户下,ls -ld /root查看一下,权限还是r-xr-x---,但是ls有了set_uid,临时拥有了所有者的权限
去掉权限方法:chmod u-s /usr/bin/ls
在查看权限时,发现是大写S,这是没有s权限的
三、特殊权限set_gid
chmod g+s /usr/bin/ls ;chmod 2755 /usr/bin/ls
跟set_uid相似,临时拥有所属组的身份,不仅可以作用在文件上,也可以作用在目录上
[root@aming01 ~]# chmod g+s /usr/bin/ls
[root@aming01 ~]# ls -l !$
ls -l /usr/bin/ls
-rwxr-sr-x. 1 root root 117656 11月 6 2016 /usr/bin/ls
当作用在目录上时候,创建子目录或子文件和该目录的所属组保持一致。
[root@aming01 ~]# mkdir abc/ #创建一个目录
[root@aming01 ~]# ls -ld abc/ #查看当前目录权限
drwxr-xr-x. 2 root root 6 5月 16 03:32 abc/
[root@aming01 ~]# chmod g+s abc/
[root@aming01 ~]# ls -ld abc/ #再次查看权限
drwxr-sr-x. 2 root root 6 5月 16 03:32 abc/
[root@aming01 ~]# chown :user1 abc/ #更改所属组
[root@aming01 ~]# ls -ld abc/
drwxr-sr-x. 2 root user1 6 5月 16 03:32 abc/
[root@aming01 ~]# touch abc/1
[root@aming01 ~]# ls -ld abc/
drwxr-sr-x. 2 root user1 15 5月 16 03:34 abc/
[root@aming01 ~]# ls -l abc/
总用量 0
-rw-r--r--. 1 root user1 0 5月 16 03:34 1
[root@aming01 ~]# mkdir abc/def
[root@aming01 ~]# ls -l abc/
总用量 0
-rw-r--r--. 1 root user1 0 5月 16 03:34 1
drwxr-sr-x. 2 root user1 6 5月 16 03:34 def
再去掉set_gid权限,再创建一个文件
[root@aming01 ~]# chmod g-s abc/
[root@aming01 ~]# touch abc/2
[root@aming01 ~]# ls abc/
1 2 def
[root@aming01 ~]# ls -l abc/
总用量 0
-rw-r--r--. 1 root user1 0 5月 16 03:34 1
-rw-r--r--. 1 root root 0 5月 16 03:36 2
drwxr-sr-x. 2 root user1 6 5月 16 03:34 def
四、特殊权限stick_bit
stick_bit权限:防止别人删除自己的文件,root用户除外,主要看用户对文件所在的目录是否具有写权限,如果没有写权限,就不能删除该目录下的文件,也不能添加新的文件,如果想让用户有添加新文件但是不能删除别的用户的文件,则需要改属性,设置该属性后,就算用户对目录具有写权限,也不能删除其他用户的文件
使用方式 chmod 777 目录; chmod 1755 目录
[root@aming01 ~]# mkdir /tmp/1
[root@aming01 ~]# chmod 777 /tmp/1
[root@aming01 ~]# su user1 #切换到普通用户
[user1@aming01 root]$ chmod o+t /tmp/1
chmod: 更改"/tmp/1" 的权限: 不允许的操作
[user1@aming01 root]$ touch /tmp/1/1.txt
[user1@aming01 root]$ tree /tmp/1/ #发现无法删除
/tmp/1/
└── 1.txt
0 directories, 1 file
扩展:
file /use/bin/yum 查看文件类型
cat /etc/redhat-release 查看版本
五、软链接
软链接类似于windows的快捷方式,使用时尽量用绝对路径
当我们建立软链接的时候,目的文件不可以存在,否则建立不成功
使用方式 ln --s 源文件 目标文件
真正的文件在左边(目标文件)>软链接文件在右边(源文件)
[root@aming01 tmp]# touch yum.log
[root@aming01 tmp]# ln -s yum.log hhh1.log
[root@aming01 tmp]# ls -l
总用量 116
lrwxrwxrwx. 1 root root 7 5月 16 06:09 hhh1.log -> yum.log
1、当链接文件被删除时,不会对目标文件产生影响;但是删除目标文件时,链接就会失效。
但是在删除链接目录时,不要带/,例如:
软链接: /bin=>usr/bin
rm /bin才对,不应该rm /bin/,否则删除的是/usr/bin/
2、可以跨分区创建软链接
3、使用场景案例:
[root@aming01 tmp]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda3 28G 970M 27G 4% /
devtmpfs 735M 0 735M 0% /dev
tmpfs 745M 0 745M 0% /dev/shm
tmpfs 745M 8.6M 736M 2% /run
tmpfs 745M 0 745M 0% /sys/fs/cgroup
/dev/sda1 197M 97M 100M 50% /boot
tmpfs 149M 0 149M 0% /run/user/0
假如说/run跑的是日志,磁盘总有一天会满,而根目录下的空间很大,想办法借用一下根的空间。
假设/run下,/run/log/及其子目录占用很多空间,在根下创建以个/run_log/。
将/run/log/下的东西挪到/run_log/,日志实时变动的,不能用mv,要用rsync。
追加-->rsync -->rsync,4小时-1小时-10分钟-1分钟-10秒钟,以此下去。
先将/run/log更改名字(否则下面创建软链接时,/run/log已存在的话是无法创建软链接的)
这样就完成了,等于/run/log写的会跑到/run_log/
六、硬链接
硬链接本质为现有文件的另一个名字,假如2个文件使用了同一个inode,这两个文件就互为硬链接,因此硬链接和原文件是无法区分的。从技术上讲,它们共享相同的inode,而inode几乎包含文件的所有信息,包括指向数据块的直接/间接指针。
硬链接不支持目录,仅支持文件,不能跨分区,可删除,因为还有其他文件使用了inode
inode 用来记录文件的属性,权限,大小,各种信息。
系统会自动分好inode,可以用ls -i查看
[root@aming01 ~]# ls -i /
120 bin 16777281 etc 82 lib64 16777658 opt 7370 run 1 sys 50331713 var
64 boot 33583358 home 50332068 media 1 proc 125 sbin 16777288 tmp
3 dev 124 lib 83 mnt 33582977 root 33583359 srv 33583322 usr
/etc/下有74个子目录
[root@aming01 ~]# ls -la /etc/
总用量 1048
drwxr-xr-x. 74 root root 8192 5月 16 00:43 .
dr-xr-xr-x. 17 root root 245 5月 10 07:16 ..
-rw-r--r--. 1 root root 16 4月 24 23:36 adjtime
-rw-r--r--. 1 root root 1518 6月 7 2013 aliases
-rw-r--r--. 1 root root 12288 4月 24 23:38 aliases.db
drwxr-xr-x. 2 root root 236 4月 24 23:33 alternatives
[root@aming01 ~]# ls -id /etc/alternatives
33695239 /etc/alternatives
[root@aming01 ~]# ls -id /etc/alternatives/.
33695239 /etc/alternatives/.
[root@aming01 ~]# ls -id /etc/alternatives/..
16777281 /etc/alternatives/..
[root@aming01 ~]# ls -id /etc/
16777281 /etc/
.表示当前,..表示上一级,系统会以为..是/etc/的子目录,任何一个目录下面都会有一个..的子目录。
- 创建一个文件,这个文件和另外一个文件的inode号一样,那么这两个文件相互为硬链接文件。
- 只能对文件做硬链接,不能对目录做硬链接。
- 不能跨系统分区创建硬链接。
- 只能对已存在的文件进行创建。
- 删除一个硬链接文件并不影响其他有相同inode号的文件
七、find命令
find搜索命令,使用方式 find 路径 参数
三个time属性:
atime(=access time),即在读取文件或者执行文件时更改。
ctime(=change time),即在写入文件、更改所有者、权限或链接设置时随inode的内容更改而更改。
mtime(=modified time),即写入文件时随文件内容的更改而更改
atime +n /-n:表示访问或执行时间大于(+)、或小于(-)n天的文件
[root@aming01 ~]# find /tmp/ -atime -1
/tmp/
/tmp/systemd-private-f4ba9c9326394bc8bf3a609e48d84198-vgauthd.service-tVFcRw
/tmp/systemd-private-f4ba9c9326394bc8bf3a609e48d84198-vgauthd.service-tVFcRw/tmp
/tmp/hhh.log
/tmp/hhh1.log
/tmp/systemd-private-f4ba9c9326394bc8bf3a609e48d84198-vmtoolsd.service-BfPyXW
/tmp/systemd-private-f4ba9c9326394bc8bf3a609e48d84198-vmtoolsd.service-BfPyXW/tmp
/tmp/systemd-private-f4ba9c9326394bc8bf3a609e48d84198-vmtoolsd.service-BfPyXW/tmp/vmware-root
/tmp/yum.log
-ctime +n /-n:表示写入、更改inode属性(所有者,权限,链接等)的时间大于(+)、或小于(-)n天的文件
[root@aming01 ~]# find /tmp/ -ctime -1
/tmp/
/tmp/.font-unix
/tmp/.X11-unix
/tmp/.ICE-unix
/tmp/systemd-private-f4ba9c9326394bc8bf3a609e48d84198-vgauthd.service-tVFcRw
/tmp/systemd-private-f4ba9c9326394bc8bf3a609e48d84198-vgauthd.service-tVFcRw/tmp
/tmp/hhh.log
/tmp/hhh1.log
/tmp/systemd-private-f4ba9c9326394bc8bf3a609e48d84198-vmtoolsd.service-BfPyXW
/tmp/systemd-private-f4ba9c9326394bc8bf3a609e48d84198-vmtoolsd.service-BfPyXW/tmp
/tmp/systemd-private-f4ba9c9326394bc8bf3a609e48d84198-vmtoolsd.service-BfPyXW/tmp/vmware-root
/tmp/yum.log
-mtime +n/-n :表示写入时间大于或小于n天的文件
2、其他
找出tmp目录下所有用户wang的文件。
find /tmp -username wang
在tmp目录下找出所有uid为500的文件。
find /tmp -uid 500
查找tmp目录下比file文件大的文件。
find /tmp -size +file
在 /tmp文件夹下, 查找一个文件大小小于10K的文件。
find /tmp -size -10K
文件权限为-rwsrwsret的文件
find / -perm 7777 -type f
查找出来1.txt的硬链接文件。
find /root/ -inum 33610734 (文件名乱码了,删不掉,查到INODE,用INODE号删)
数字和时间的关系
+4代表大于等于5天前的文件,
-4代表小于等于4天前的文件,
4代表4~5之间的文件。
-exec command : command为其他命令,exec后面可接其他命令来处理查询的结果。
在/tmp目录下查找文件类型为一般文件,文件名包含t的,文件大小要求大于1k切小于3k的文件,并使用ls -l 来查看其权限
find /tmp -type f -name t* -size +1k -size -3k -exec ls -l {}\;
这个命令的意思:前面的条件搜到的文件。交给-exec 后面的命令处理。{}代表前面搜索的结果。;有特殊意义,所以需要转义。
[root@www ~]# find /var/log/ -type f -mtime +10 -exec cp {} {}.tmp \;
[root@www ~]# find /var/log/ -name *.tmp -exec rm {} \;
在/var/log/目录下10天之前的文件,拷贝为文件名.tmp
在/var/log/目录下,查找文件后缀名为.tmp的文件。然后删除。
3.3 xargx
xargx与exec类似
把目录下.bak的文件找出来,删除或者说目录下超过七天的文件删除掉
把前面的结果作为参数,依次递交给后面的命令处理。
xargs命令详解-未连接
[root@www ~]# find /var/log/ -mtime +10 -type f |xargs -i cp {} {}.1
[root@www ~]# ls /var/log/*.1
/var/log/anaconda.ifcfg.log.1 /var/log/anaconda.yum.log.1
[root@www ~]# ls /var/log/*.1 |xargs rm -rf
[root@www ~]# ls /var/log/*.1
ls: 无法访问/var/log/*.1: 没有那个文件或目录
删除的时候不用-i选项。
八、互传文件
Linux和windows互传文件,目前没有搭建samba和ftp我们可以使用一个工具,lrzsz。
先安装yum install -y lrzsz
[root@aming01 ~]# yum install -y lrzsz
已加载插件:fastestmirror
base | 3.6 kB 00:00:00
extras | 3.4 kB 00:00:00
updates | 3.4 kB 00:00:00
Loading mirror speeds from cached hostfile
* base: mirrors.163.com
* extras: centos.ustc.edu.cn
* updates: centos.ustc.edu.cn
正在解决依赖关系
--> 正在检查事务
---> 软件包 lrzsz.x86_64.0.0.12.20-36.el7 将被 安装
把Linux上的文件传到windows上去
使用方式 sz命令
把windows上的文件传到Linux上去
管道符:是将管道符前面命令的结果当成一个文件,给管道符后面的命令作为参数