I was looking for something in /etc the other day, and didn't know if it was there or in a subdirectory. So I did a grep -r:
[root@dg etc]# fgrep -ir "testing 1 2 3" *
fgrep: rc0.d/K88syslog: No such file or directory
fgrep: rc1.d/K88syslog: No such file or directory
fgrep: rc2.d/K88syslog: No such file or directory
fgrep: rc2.d/S40snortd: No such file or directory
fgrep: rc2.d/S12phone_log: No such file or directory
fgrep: rc2.d/S55zabbix_agentd: No such file or directory
fgrep: rc3.d/K88syslog: No such file or directory
Whoops. That's not good.
Linux uses AT&T Sys V-type directories for startup and shutdown, and links those files to /etc/init.d. That means that under /etc/rc.d, you've got a bunch of directories corresponding to the various runlevels:
[root@dg ~]# ls -lad /etc/rc.d/rc*.d
drwxr-xr-x 2 root root 4096 Dec 8 15:32 /etc/rc.d/rc0.d
drwxr-xr-x 2 root root 4096 Dec 8 15:32 /etc/rc.d/rc1.d
drwxr-xr-x 2 root root 4096 Jan 28 02:14 /etc/rc.d/rc2.d
drwxr-xr-x 2 root root 4096 Jan 28 02:14 /etc/rc.d/rc3.d
drwxr-xr-x 2 root root 4096 Jan 28 02:14 /etc/rc.d/rc4.d
drwxr-xr-x 2 root root 4096 Jan 28 02:14 /etc/rc.d/rc5.d
drwxr-xr-x 2 root root 4096 Dec 8 15:32 /etc/rc.d/rc6.d
and in each of those directories, you've got a link to init.d for the various start and stop scripts:
[root@dg ~]# ls -la /etc/rc.d/rc5.d/S*|more
lrwxrwxrwx 1 root root 22 Dec 8 15:32 /etc/rc.d/rc5.d/S02lvm2-monitor -> ../i
nit.d/lvm2-monitor
lrwxrwxrwx 1 root root 17 Jun 24 2007 /etc/rc.d/rc5.d/S03sysstat -> ../init.d
/sysstat
lrwxrwxrwx 1 root root 18 Jun 23 2007 /etc/rc.d/rc5.d/S08iptables -> ../init.
d/iptables
That means that at runlevel 5, lvm2-monitor will start first, followed by sysstat, iptables, etc. The down scripts are prefixed with a 'K', and work the same way:
[root@dg ~]# ls -la /etc/rc.d/rc5.d/K*|more
lrwxrwxrwx 1 root root 20 Feb 7 2008 /etc/rc.d/rc5.d/K00xendomains -> ../init.
d/xendomains
lrwxrwxrwx 1 root root 17 Jan 31 2009 /etc/rc.d/rc5.d/K01dnsmasq -> ../init.d/d
nsmasq
lrwxrwxrwx 1 root root 24 Sep 6 17:26 /etc/rc.d/rc5.d/K01setroubleshoot -> ../i
nit.d/setroubleshoot
So anyway. What did those error messages in grep tell me? It says that I have files in the various rcx.d directories that are linked to a nonexistent file in /etc/init.d. Not a real problem, because the file will just fail to do anything - but something that really should be cleaned up.
However, while I was checking things out, I spotted something that potentially could be a real problem.
[root@dg init.d]# ls -la /etc/rc2.d/S99ossec
-r-xr-xr-x 1 root root 1087 May 9 2006 /etc/rc2.d/S99ossec
That's not a link - it's really a file!
One of two things can happen in this case, both of them bad. If you've made a change to the file in /etc/init.d, it won't be reflected in the level 2 startup. Or, worse - if you've removed the app and deleted the file in /etc/init.d, it could be running something you don't want to run.
My cleanup script looks like this:
#!/bin/bash
# cleanup_rc
MAIL="/bin/mail"
cd /etc/rc.d||{ $ECHO "$0 failed chdir"|$MAIL tim;exit 1; }
DIRS="`find . -name "rc*.d" -type d`"
for i in $DIRS
do
cd /etc/rc.d
cd $i
FILES="`find . -type f`"
for j in $FILES
do
FNAME="`basename $j`"
rm -f $FNAME
ln -s ../init.d/${FNAME:3} $FNAME
done
FILES="`find . -type l -follow`"
for j in $FILES
do
rm -f $j
done
done
exit 0
It finds all regular files in /etc/rc.d/rc*.d, deletes the file, and creates a link to init.d. Then, it finds all files that don't exist in init.d, and deletes them.
Works like a charm:
[root@dg init.d]# cleanup_rc
[root@dg init.d]# ls -la /etc/rc2.d/S99ossec
lrwxrwxrwx 1 root root 15 Jan 28 11:29 /etc/rc2.d/S99ossec -> ../init.d/ossec
[root@dg init.d]# cd /etc
[root@dg etc]# fgrep -r "testing 1 2 3" *
[root@dg etc]#
NixSPAM blocklist shuts down
1 day ago
No comments:
Post a Comment