前言

环境:Centos7.9

rc.local文件开机不执行

前些天在做Linux项目的时候发现,需要有些组件开机自启动,所有把脚本放到了 /etc/rc.local 下,同时也查看了rc.local 文件的权限,如下:

[oracle@master etc]$ ll /etc/rc.local 
lrwxrwxrwx. 1 root root 13 Jul 16 16:23 /etc/rc.local -> rc.d/rc.local

rc.local 文件已经有可执行权限,可是centos重启开机后,自己写得脚本却没有执行,这就纳闷了,于是把自己写的脚本单独拿出来在命令行执行,也会执行成功的,那么为什么centos重启后,自己写得脚本却没有执行,难道是/etc/rc.local 没有执行吗?不可能啊,rc.local 就是放开机自启动软件的脚本呀,也有可执行权限呀,怎么回事?

找到原因了

原来,挖槽,/etc/rc.local 执向的实际文件/etc/rc.d/rc.local 没有可执行权限,如下:

[oracle@master etc]$ ll /etc/rc.d/rc.local 
-rw-------. 1 root root 543 Jul 16 17:40 /etc/rc.d/rc.local

[oracle@master etc]$  chmod a+rx  /etc/rc.d/rc.local

于是给/etc/rc.d/rc.local赋予可执行权限,重启Centos,自己写得脚本执行正常。

为什么软连接的权限和实际执行的文件权限不同

于是,为了验证软链接的权限和实际执行的文件权限,为什么不同,故意进行测试,如下:

[oracle@master ~]$ touch file
[oracle@master ~]$ ln -s file lsfile
[oracle@master ~]$ ll file lsfile
-rw-r--r-- 1 oracle oinstall 0 Jul 17 23:40 file
lrwxrwxrwx 1 oracle oinstall 4 Jul 17 23:40 lsfile -> file

发现,系统默认创建的软链接权限是777,而软链接实际执行的文件却没有可执行权限,现在我们来改变软链接的权限看看,如下:

[oracle@master ~]$ chmod  000  lsfile 
[oracle@master ~]$ ll file lsfile
---------- 1 oracle oinstall 0 Jul 17 23:40 file
lrwxrwxrwx 1 oracle oinstall 4 Jul 17 23:40 lsfile -> file

我擦,看到的软链接的权限丝毫没变,其实际文件的权限变了,再试一次,如下:

[oracle@master ~]$ chmod +rw,u+x,g+x lsfile
[oracle@master ~]$ ll file lsfile
-rwxr-xr-- 1 oracle oinstall 0 Jul 17 23:40 file
lrwxrwxrwx 1 oracle oinstall 4 Jul 17 23:40 lsfile -> file

我擦,真的,改变软链接权限实际看来就是改变了其实际指向文件的权限,而软链接权限永远都是777。

再来测试,改变实际文件的属组看看,如下:

[oracle@master ~]$ sudo chown root.root lsfile 
[oracle@master ~]$ ll file  lsfile 
-rwxr-xr-- 1 root   root     0 Jul 17 23:40 file
lrwxrwxrwx 1 oracle oinstall 4 Jul 17 23:40 lsfile -> file			#软连接的属组没变

[oracle@master ~]$ sudo chown oracle.ntp  file 
[oracle@master ~]$ ll file 
-rwxr-xr-- 1 oracle ntp 0 Jul 17 23:40 file
[oracle@master ~]$ ll file  lsfile 
-rwxr-xr-- 1 oracle ntp      0 Jul 17 23:40 file
lrwxrwxrwx 1 oracle oinstall 4 Jul 17 23:40 lsfile -> file

[oracle@master ~]$ sudo chown  root:dba lsfile 
[sudo] password for oracle: 
[oracle@master ~]$ ll file  lsfile 
-rwxr-xr-- 1 root   dba      0 Jul 17 23:40 file					#属组和属组改变了
lrwxrwxrwx 1 oracle oinstall 4 Jul 17 23:40 lsfile -> file			#软链接显示的属组和属组没有改变了


对目录创建软链接看看,如下:
[oracle@master ~]$ mkdir test && ln -s test lntest	&& touch test/filexxx		#对test目录创建一个软建立并创建一个普通文件
[oracle@master ~]$ ll  test/filexxx 
-rw-r--r-- 1 oracle oinstall 0 Jul 18 00:01 test/filexxx
[oracle@master ~]$ ll  lntest/filexxx 
-rw-r--r-- 1 oracle oinstall 0 Jul 18 00:01 lntest/filexxx

[oracle@master ~]$ chmod 000 test/filexxx 							#对test/filexxx 改变权限
[oracle@master ~]$ ll test/filexxx 
---------- 1 oracle oinstall 0 Jul 18 00:01 test/filexxx
[oracle@master ~]$ ll lntest/filexxx 
---------- 1 oracle oinstall 0 Jul 18 00:01 lntest/filexxx			

[oracle@master ~]$ chmod +rw ./lntest/filexxx 						#再加回权限
[oracle@master ~]$ ll test/filexxx  lntest/filexxx 
-rw-r--r-- 1 oracle oinstall 0 Jul 18 00:01 lntest/filexxx
-rw-r--r-- 1 oracle oinstall 0 Jul 18 00:01 test/filexxx


[oracle@master ~]$ ll test/      lntest/ -d						#查看目录的权限
drwxr-xr-x 2 oracle oinstall 21 Jul 18 00:01 lntest/
drwxr-xr-x 2 oracle oinstall 21 Jul 18 00:01 test/

[oracle@master ~]$ sudo chown -R root:dba lntest/					#修改软链接的属组和属主
[oracle@master ~]$ ll test/      lntest/ -d
drwxr-xr-x 2 root dba 21 Jul 18 00:01 lntest/						#两者的属组和属主都改变了
drwxr-xr-x 2 root dba 21 Jul 18 00:01 test/
[oracle@master ~]$ ll test/      lntest/ 
lntest/:
total 0
-rw-r--r-- 1 root dba 0 Jul 18 00:01 filexxx						#加了-R,所以其下的文件属组和属主都变了
test/:
total 0
-rw-r--r-- 1 root dba 0 Jul 18 00:01 filexxx

[oracle@master ~]$ sudo chown -R  oracle:root test/				#修改的是实际文件的权限
[oracle@master ~]$ ll test/      lntest/ -d
drwxr-xr-x 2 oracle root 21 Jul 18 00:01 lntest/					#两者的属组和属主都改变了
drwxr-xr-x 2 oracle root 21 Jul 18 00:01 test/						#两者的属组和属主都改变了

[oracle@master ~]$ chmod -x test/									#改变实际文件的权限试试
[oracle@master ~]$ ll test/      lntest/ -d					
drw-r--r-- 2 oracle root 21 Jul 18 00:01 lntest/					#两者的权限都改变了
drw-r--r-- 2 oracle root 21 Jul 18 00:01 test/						#两者的权限都改变了

[oracle@master ~]$ chmod +x lntest/								#改变软链接文件的权限试试
[oracle@master ~]$ ll test/      lntest/ -d
drwxr-xr-x 2 oracle root 21 Jul 18 00:01 lntest/					#两者的权限都改变了
drwxr-xr-x 2 oracle root 21 Jul 18 00:01 test/						#两者的权限都改变了

总结

对指向普通文件类型的软链接来说:
1、以后直接对/etc/rc.d/rc.local 赋予可执行权限;
2、修改软链接的内容就是修改实际文件的内容;
3、创建一个普通文件的软链接的其权限默认就是777,但不要易误以为看到软链接具有的权限就以为其实际文件也具有权限,这是错误的看法;
4、对软链接进行权限chmod、属主属组chown的修改,其权限修改结果会直接反映到其实际文件,但软链接具有的权限及属主属主仍保持不变;
5、当实际文件的属主属组改变了,由于第3点所说的,所以建议删除软链接,重新建立软链接;

对指向目录类型的软链接来说:
6、无论对软链接还是对实际目录文件作出权限属主等的修改,两者都是保持一致的。

以上,就是本人测试的结果,可能不是完全的正确,欢迎懂的人多多交流。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐