lsattr/chattr,set_uid,set_gid,stick_bit,软链接,硬链接,find,互传文件

一、隐藏权限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/的子目录,任何一个目录下面都会有一个..的子目录。


  1. 创建一个文件,这个文件和另外一个文件的inode号一样,那么这两个文件相互为硬链接文件。
  2. 只能对文件做硬链接,不能对目录做硬链接。
  3. 不能跨系统分区创建硬链接。
  4. 只能对已存在的文件进行创建。
  5. 删除一个硬链接文件并不影响其他有相同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之间的文件。

image.png


-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上去



管道符:是将管道符前面命令的结果当成一个文件,给管道符后面的命令作为参数

猜你喜欢

转载自blog.csdn.net/iamfishhh/article/details/80385694