20180514笔记

隐藏权限 lsattr chattr
20180514笔记
chattr +i 设置这个权限 chattr -i 取消这个权限
lsattr 查看这个权限
20180514笔记
20180514笔记
Txt~表示缓存文件
Chattr +a只能在文件末尾追加。不能更改删除重命名可以更改时间信息。
Chattr -a可以取消这个权限。
20180514笔记
Lsattr -d 查看这个目录本身的权限
Lsattr -R 查看子目录下面的文件
1、setuid与setgid讲解
看一下系统中用到它的地方,以/etc/passwd和/usr/bin/passwd为例:
20180514笔记
分析一下,/etc/passwd的权限为 -rw-r--r-- 也就是说:该文件的所有者拥有读写的权限,而用户组成员和其它成员只有查看的权限。我们知道,在系统中我们要修改一个用户的密码,root用户和普通用户均可以用/usr/bin/passwd someuser这个命令来修改这个/etc/passwd这个文件,root用户本身拥有对/etc/passwd的写权限,无可厚非;那普通用户呢,这里就用到了setuid,setuid的作用是“让执行该命令的用户以该命令拥有者的权限去执行”,就是普通用户执行passwd时会拥有root的权限,这样就可以修改/etc/passwd这个文件了。它的标志为:s,会出现在x的地方,例:-rwsr-xr-x 。而setgid的意思和它是一样的,即让执行文件的用户以该文件所属组的权限去执行。
2、stick bit(粘滞位)
看一下系统中用到它的地方,以/tmp为例:
20180514笔记
我们知道/tmp是系统的临时文件目录,所有的用户在该目录下拥有所有的权限,也就是说在该目录下可以任意创建、修改、删除文件,那如果用户A在该目录下创建了一个文件,用户B将该文件删除了,这种情况我们是不能允许的。为了达到该目的,就出现了stick bit(粘滞位)的概念。它是针对目录来说的,如果该目录设置了stick bit(粘滞位),则该目录下的文件除了该文件的创建者和root用户可以删除和修改/tmp目录下的stuff,别的用户均不能动别人的,这就是粘滞位的作用。
3、如何设置上述特殊权限
20180514笔记
4、注意:有时你设置了s或t 权限,你会发现它变成了S或T,这是因为在那个位置上你没有给它x(可执行)的权限,这样的话这样的设置是不会有效的,你可以先给它赋上x的权限,然后再给s或t 的权限。

linux 创建连接命令 ln -s 软连接
ln 的功能是为某一个文件在另外一个位置建立一个同步的链接
这个命令最常用的参数是-s,
具体用法是:ln -s 源文件 目标文件。

当在不同的目录,用到相同的文件时,可以不需要在每一个需要的目录下都放一个必须相同的文件,只要在某个固定的目录,放上该文件,然后在其它的目录下用ln命令链接(link)它就可以,不必重复的占用磁盘空间。
例如:ln -s /bin/hello.sh /usr/local/bin/hello -s 是代号(symbolic)的意思。

这 里有两点要注意:
第一,ln命令会保持每一处链接文件的同步性,也就是说,不论你改动了哪一处,其它的文件都会发生相同的变化;
第二,ln的链接又软链接 和硬链接两种,
软链接就是ln -s src dst,它只会在你选定的位置上生成一个文件的镜像,不会占用磁盘空间,
硬链接ln src dst,没有参数-s, 它会在你选定的位置上生成一个和源文件大小相同的文件,无论是软链接还是硬链接,文件都保持同步变化。
连接的删除:
直接 rm dst
例如:rm /usr/local/bin/hello

如果你用ls察看一个目录时,发现有的文件后面有一个@的符号,那就是一个用ln命令生成的文件,用ls -l命令去察看,就可以看到显示的link的路径了。
20180514笔记
Hard Link (实体链接, 硬式连结或实际连结)

首先,我们知道几件重要的信息,包括:
1.每个文件都会占用一个 inode ,文件内容由 inode 的记录来指向;

  1. 想要读取该文件,必须要经过目录记录的文件名来指向到正确的 inode 号码才能读取。
    也就是说,其实文件名只与目录有关,但是文件内容则与 inode 有关。那么想一想, 有没有可能有多个档名对应到同一个 inode 号码呢?有的!那就是 hard link 的由来。 所以简单的说:hard link 只是在某个目录下新增一笔档名链接到某 inode 号码的关连记录而已。

举个例子来说,假设我系统有个 /root/crontab 他是 /etc/crontab 的实体链接,也就是说这两个档名连结到同一个 inode , 自然这两个文件名的所有相关信息都会一模一样(除了文件名之外)。实际的情况可以如下所示:
[root@study ~]# ll -i /etc/crontab
34474855 -rw-r--r--. 1 root root 451 Jun 10
[root@study ~]# ln /etc/crontab .
2014 /etc/crontab
<==建立实体链接的指令
[root@study ~]# ll -i /etc/crontab crontab
34474855 -rw-r--r--. 2 root root 451 Jun 10 2014 crontab
34474855 -rw-r--r--. 2 root root 451 Jun 10 2014 /etc/crontab

你可以发现两个档名都连结到 34474855 这个 inode 号码,所以您瞧瞧,是否文件的权限/属性完全一样呢? 因为这两个『档名』其实是一模一样的『文件』啦!而且你也会发现第二个字段由原本的 1变成 2 了! 那个字段称为『连结』,这个字段的意义为:『有多少个档名链接到这个 inode 号码』的意思。 如果将读取到正确数据的方式画成示意图,就类似如下画面:
20180514笔记
上图的意思是,你可以透过 1 或 2 的目录之 inode 指定的 block 找到两个不同的档名,而不管使用哪个档名均可以指到 real 那个 inode 去读取到最终数据!那这样有什么好处呢?最大的好处就是『安全』!如同上图中, 如果你将任何一个『档名』删除,其实 inode 与block 都还是存在的! 此时你可以透过另一个『档名』来读取到正确的文件数据喔!此外,不论你使用哪个『档名』来编辑,最终的结果都会写入到相同的 inode 与 block 中,因此均能进行数据的修改哩!一般来说,使用 hard link 设定链接文件时,磁盘的空间与 inode 的数目都不会改变! 我们还是由图1 来看,由图中可以知道, hard link 只是在某个目录下的 block 多写入一个关连数据而已,既不会增加 inode 也不会耗用 block 数量哩!
hard link 的制作中,其实还是可能会改变系统的 block 的,那就是当你新增这笔数据
Tips却刚好将目录的 block 填满时,就可能会新加一个 block 来记录文件名关连性,而导致磁盘空间的变化!不过,一般 hard link 所用掉的关连数据量很小,所以通常不会改变 inode 与磁盘空间的大小喔!

由图1 其实我们也能够知道,事实上 hard link 应该仅能在单一文件系统中进行的,应该是不能跨文件系统才对! 因为图1 就是在同一个 filesystem 上嘛!所以 hard link 是有限制的:

  1. 不能跨 Filesystem;
  2. 不能 link 目录。

不能跨 Filesystem 还好理解,那不能 hard link 到目录又是怎么回事呢?这是因为如果使用 hard link链接到目录时, 链接的数据需要连同被链接目录底下的所有数据都建立链接,举例来说,如果你要将 /etc 使用实体链接建立一个 /etc_hd 的目录时,那么在 /etc_hd 底下的所有档名同时都与 /etc 底下的檔名要建立 hard link 的,而不是仅连结到 /etc_hd 与 /etc 而已。 并且,未来如果需要在 /etc_hd底下建立新文件时,连带的, /etc 底下的数据又得要建立一次 hard link ,因此造成环境相当大的复杂度。 所以啰,目前 hard link 对于目录暂时还是不支持的啊!

二. Symbolic Link (符号链接,亦即是快捷方式)

相对于 hard link , Symbolic link 可就好理解多了,基本上, Symbolic link 就是在建立一个 独立的文件,而这个文件会让数据的读取指向他 link 的那个文件的档名!由于只是利用文件来做为指向的动作, 所以,当来源档被删除之后,symbolic link 的文件会『开不了』, 会一直说『无法开启某文件!』。实际上就是找不到原始『档名』而已啦!

举例来说,我们先建立一个符号链接文件链接到 /etc/crontab 去看看:
[root@study ~]# ln -s /etc/crontab crontab2
[root@study ~]# ll -i /etc/crontab /root/crontab2
34474855 -rw-r--r--. 2 root root 451 Jun 10
53745909 lrwxrwxrwx. 1 root root
2014 /etc/crontab
12 Jun 23 22:31 /root/crontab2 -> /etc/crontab

由上表的结果我们可以知道两个文件指向不同的 inode 号码,当然就是两个独立的文件存在! 而且连结档的重要内容就是他会写上目标文件的『文件名』, 你可以发现为什么上表中连结档的大小为 12bytes 呢? 因为箭头(-->)右边的档名『/etc/crontab』总共有 12 个英文,每个英文占用 1 个 bytes ,所以文件大小就是 12bytes 了!
关于上述的说明,我们以如下图示来解释:图2 符号链接的文件读取示意图
20180514笔记
由 1 号 inode 读取到连结档的内容仅有档名,根据档名链接到正确的目录去取得目标文件的 inode ,最终就能够读取到正确的数据了。你可以发现的是,如果目标文件(/etc/crontab)被删除了,那么整个环节就会无法继续进行下去, 所以就会发生无法透过连结档读取的问题了!这里还是得特别留意,这个 Symbolic Link 与 Windows 的快捷方式可以给他划上等号,由 Symboliclink 所建立的文件为一个独立的新的文件,所以会占用掉 inode 与 block 喔!由上面的说明来看,似乎 hard link 比较安全,因为即使某一个目录下的关连数据被杀掉了, 也没有关系,只要有任何一个目录下存在着关连数据,那么该文件就不会不见!举上面的例子来说,我的/etc/crontab 与 /root/crontab 指向同一个文件,如果我删除了 /etc/crontab 这个文件,该删除的动作其实只是将 /etc 目录下关于 crontab 的关连数据拿掉而已, crontab 所在的 inode 与 block 其实都没有被变动喔!不过由于 Hard Link 的限制太多了,包括无法做『目录』的 link , 所以在用途上面是比较受限的!反而是 Symbolic Link 的使用方面较广喔!好了, 说的天花乱坠,看你也差不多快要昏倒了!没关系,实作一下就知道怎么回事了!要制作连结档就必须要使用 ln 这个指令呢!

[root@study ~]# ln [-sf] 来源文件 目标文件
选项与参数:
-s :如果不加任何参数就进行连结,那就是 hard link,至于 -s 就是 symbolic link
-f :如果 目标文件 存在时,就主动的将目标文件直接移除后再建立!

范例一:将 /etc/passwd 复制到 /tmp 底下,并且观察 inode 与 block
[root@study ~]# cd /tmp
[root@study tmp]# cp -a /etc/passwd .
[root@study tmp]# du -sb ; df -i .
6602 . <==先注意一下这里的容量是多少
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/mapper/centos-root 10485760 109748 10376012 2% /

利用 du 与 df 来检查一下目前的参数~那个 du -sb 是计算整个 /tmp 底下有多少 bytes 的容量啦!

例二:将 /tmp/passwd 制作 hard link 成为 passwd-hd 文件,并观察文件与容量[root@study tmp]# ln passwd passwd-hd
[root@study tmp]# du -sb ; df -i .
6602 .
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/mapper/centos-root 10485760 109748 10376012 2% /

仔细看,即使多了一个文件在 /tmp 底下,整个 inode 与 block 的容量并没有改变!

[root@study tmp]# ls -il passwd*
2668897 -rw-r--r--. 2 root root 2092 Jun 17 00:20 passwd
2668897 -rw-r--r--. 2 root root 2092 Jun 17 00:20 passwd-hd

原来是指向同一个 inode 啊!这是个重点啊!另外,那个第二栏的连结数也会增加!

范例三:将 /tmp/passwd 建立一个符号链接
[root@study tmp]# ln -s passwd passwd-so
[root@study tmp]# ls -li passwd*
2668897 -rw-r--r--. 2 root root 2092 Jun 17 00:20 passwd
2668897 -rw-r--r--. 2 root root 2092 Jun 17 00:20 passwd-hd
2668898 lrwxrwxrwx. 1 root root
6 Jun 23 22:40 passwd-so -> passwd

passwd-so 指向的 inode number 不同了!这是一个新的文件~这个文件的内容是指向

passwd 的。passwd-so 的大小是 6bytes ,因为 『passwd』 这个单字共有六个字符之故

[root@study tmp]# du -sb ; df -i .
6608 .
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/mapper/centos-root 10485760 109749 10376011 2% /

呼呼!整个容量与 inode 使用数都改变啰~确实如此啊!

范例四:删除源文件 passwd ,其他两个文件是否能够开启?
[root@study tmp]# rm passwd
[root@study tmp]# cat passwd-hd
.....(正常显示完毕!)
[root@study tmp]# cat passwd-so
cat: passwd-so: No such file or directory
[root@study tmp]# ll passwd*
-rw-r--r--. 1 root root 2092 Jun 17 00:20 passwd-hd
lrwxrwxrwx. 1 root root
6 Jun 23 22:40 passwd-so -> passwd

怕了吧!符号链接果然无法开启!另外,如果符号链接的目标文件不存在,

其实档名的部分就会有特殊的颜色显示喔!

Tips(总结):

/tmp 这个目录是干嘛用的吗?是给大家作为暂存盘用的啊! 所以,您会发现,过去我们在进行测试时,都会将数据移动到 /tmp 底下去练习~ 嘿嘿!因此,有事没事,
记得将 /tmp 底下的一些怪异的数据清一清先!
要注意啰!使用 ln 如果不加任何参数的话,那么就是 Hard Link 啰!如同范例二的情况,增加了 hard
link 之后,可以发现使用 ls -l 时,显示的 link 那一栏属性增加了!而如果这个时候砍掉 passwd 会
发生什么事情呢?passwd-hd 的内容还是会跟原来 passwd 相同,但是 passwd-so 就会找不到该文件
啦!而如果 ln 使用 -s 的参数时,就做成差不多是 Windows 底下的『快捷方式』的意思。当你修改 Linux
下的 symbolic link 文件时,则更动的其实是『原始档』, 所以不论你的这个原始档被连结到哪里去,
只要你修改了连结档,原始档就跟着变啰! 以上面为例,由于你使用 -s 的参数建立一个名为
passwd-so 的文件,则你修改 passwd-so 时,其内容与 passwd 完全相同,并且,当你按下储存之后,
被改变的将是 passwd 这个文件!

此外,如果你做了底下这样的连结:
ln -s /bin /root/bin
那么如果你进入 /root/bin 这个目录下,『请注意呦!该目录其实是 /bin 这个目录,因为你做了连结
档了!』所以,如果你进入 /root/bin 这个刚刚建立的链接目录, 并且将其中的数据杀掉时,嗯! /bin
里面的数据就通通不见了!这点请千万注意!所以赶紧利用『rm /root/bin 』 将这个连结档删除吧!
三. 关于目录的 link 数量:

或许您已经发现了,那就是,当我们以 hard link 进行『文件的连结』时,可以发现,在 ls -l 所显
示的第二字段会增加一才对,那么请教,如果建立目录时,他默认的 link 数量会是多少? 让我们来
想一想,一个『空目录』里面至少会存在些什么?呵呵!就是存在 . 与 .. 这两个目录啊! 那么,
当我们建立一个新目录名称为 /tmp/testing 时,基本上会有三个东西,那就是:
/tmp/testing
/tmp/testing/.
/tmp/testing/..
而其中 /tmp/testing 与 /tmp/testing/. 其实是一样的!都代表该目录啊~而 /tmp/testing/.. 则代表 /tmp
这个目录,所以说,当我们建立一个新的目录时, 『新的目录的 link 数为 2 ,而上层目录的 link
数则会增加 1 』 不信的话,我们来作个测试看看:

[root@study ~]# ls -ld /tmp
drwxrwxrwt. 14 root root 4096 Jun 23 22:42 /tmp
[root@study ~]# mkdir /tmp/testing1
[root@study ~]# ls -ld /tmp
drwxrwxrwt. 15 root root 4096 Jun 23 22:45 /tmp
[root@study ~]# ls -ld /tmp/testing1

这里的 link 数量加 1 了!drwxr-xr-x. 2 root root 6 Jun 23 22:45 /tmp/testing1/

瞧!原本的所谓上层目录 /tmp 的 link 数量由 14 增加为 15 ,至于新目录 /tmp/testing 则为 2 ,
这样可以理解目录的 link 数量的意义了
Find 的使用
文件查找
find .(当前目录) -name
find . -name ".txt" -print
find . -name '[A-Z,a-z,1-100]
'.txt -print
find . -name "1.txt" -prune -o -name ".txt" -print
目录查找
find . -path"./aa " -prune -o -name "
.txt" -print
find . -path"./aa " -prune -o -path "./bb" -prune -o -name "*.txt" -print

权限查找
find . -prem 775 -print
不查找aaa下的文件 find . -path "./aa" -prune -0 -perm 775 -print
find . -path "./aa" -prune -0 -path "./bb" -prune -o -perm 775 -print
find . ( -path "./aaa" -o -path "./bbb" ) -prune -o -perm 775 -print

按类型查找
find .-type l -print

按属主查找
find / -user www -type f -print
查找属主被删除
find / -nouser -type f -print

find / -group apache -type -f -print

按照时间查找
两天之内被改过的
find .-mtime -2 -type f -print
两天之前被改过的
find .-mtime +2 -type f -print
十分钟之前被改过的
find . -cmin +10 -type f -print

按照文件新旧查找

查找比aa.txt新的文件
find . -newer "aa.txt" -type f -print
查找比aa.txt旧的文件
find . ! -newer "aa.txt" -type f -print
查找比aa.txt新的比bb.txt旧的文件
find . -newer “aa.txt”! -newer“bb.txt" -type f -print

按照文件大小查找
在根目录小大于1M的
find / -size +1M -type -print
小于1M的文件
find / -size -1M -type -print
执行命令
find . -name "1.txt" -ok rm {} \; 新建 touch 12a.txt
find . -name "12a.txt" -exec cp {}{}.bak \;

转载于:https://blog.51cto.com/13749388/2116696

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值