让Linux开机就挂载分区,有两种方法,一种是fstab,另一种是rc.local,我比较喜欢前一种。
注意:
fstab是在开机时就挂载,所以你要注意是否你的分区位于某个需要特别驱动程序的设备后,如RAID卡,因为Linux挂载时,有可能这个设备的驱动程序还没有起,这样使挂不上的
rc.local是在开结束后最后一个执行(因为在/etc/rc.*里他一直是S99的),如果遇到如上驱动程序的问题,你大可不必担心,因为驱动程序肯定早就起来了,所以你要注意的是你的应用是否有可能被排在了mount动作前。
我们来看下LABEL。
提到LABEL是因为,对于附加的硬盘我经常直接用设备名称来mount,当然是没什么问题了,但是当我希望他开机就挂好时就显得不是那么严谨了。为什么呢,因为我经常忘了拔U盘或者其他block设备,导致他们占用了原先我想挂载的那个设备的名称,比如你有一个内置硬盘是/dev/sda,可能这种情况下它变成了/dev/sdb,而那个U盘变成了/dev/sda,这样等到系统启动完毕,你就会发现挂载的不对了,或者根本系统就起不来(因为它还有可能占用了grub中的hd0,这是另外一个现象了)。
所以呢,用LABEL,并把它加入到fstab里就能更好地解决这个问题,因为Linux会按照LABEL去挂载,而不是设备名称,如果有同名的LABEL,我理解他挂载最先找到的那个分区。
设定swap分区的LABEL: mkswap -L LABEL名称 /dev/分区名称
挂载fstab中的swap: swapon -a
设定普通分区的LABEL: tune2fs -L LABEL名称 /dev/分区名称
查看普通分区的LABEL: tune2fs -l /dev/分区名称
首先,遍历文件系统的C程序a.c:
#include <sys/stat.h>
#include <ftw.h>
int list(const char *name, const struct stat *status, int type)
{
if(type == FTW_NS)
return 0;
printf("%s 0%3o\n", name, status->st_mode & 07777);
return 0;
}
int main(int argc, char *argv[])
{
if(argc == 1)
ftw(".", list, 1);
else
ftw(argv[1], list, 1);
exit(0);
}
编译成a.out可执行文件,我这里不是一次遍历整个根(/)目录,因为不是所有目录的权限都需要改,比如说/proc目录、再比如为了装oracle建的/u01目录。我只扫描我认为需要修改权限的目录,如下执行:./a.out /bin >bin.txt … 每个目录的文件及权限保存在独立的文件中,下面是我新装as 4系统下/bin目录下的文件权限(bin.txt的部分内容):
/bin 0755
/bin/traceroute6 04755
/bin/setserial 0755
/bin/rview 0755
/bin/touch 0755
/bin/awk 0755
/bin/mt 0755
/bin/ash 0755
… …
然后写个更改权限的简单脚本chgperm.sh:
#!/bin/sh
if [ $# != 1 ]
then
echo Usage : $0 \<filename\>
exit
fi
PERMFILE=$1
cat $PERMFILE | \
while read LINE
do
FILE=`echo $LINE | awk '{print $1}'`
PERM=`echo $LINE | awk '{print $2}'`
chmod $PERM $FILE
done
echo change perm finished!
如下执行即可:
sh chgperm.sh bin.txt
… …
如果系统中有getfacl 的命令的话,脚本都不用写了,直接用getfacl 获取正常系统的文件权限,到出问题的机器上用 setfacl 恢复。
在一台别的系统上
getfacl -R / > acl.bak
把acl.bak的文件copy过来
setfacl --restore acl.bak
学习linux设置定时任务的crontab命令。
定时向ntp服务进行时间同步,并记录日志。
首先,建立一个日志文件:
[root@icnote ~]#touch /var/log/upClock.log //建立更新log文件
[root@icnote ~]#chmod 740 /var/log/upClock.log //修改权限
[root@icnote ~]#crontab -e //编辑root用户的默认crontab
输入以下命令:
0 23 * * 0 ntpdate cn.pool.ntp.org >> /var/log/upClock.log
表示每个星期天的晚上23点同步时间 ,保存就ok了。
crontab 格式
*****task
*号按顺序排列,分别代表
首先,建立一个日志文件:
第一颗* 0~59分钟
第二颗* 1~23小时
第三颗* 1~31日
第四颗* 1~12月
第五颗* 0~6星期(0表示星期日)
task 表示要执行的操作 比如 ntpdate 10.1.0.41
附一些例子,供大家学习。
30 21* * * /apps/bin/cleanup.sh
上面的例子表示每晚的2 1 : 3 0运行/ a p p s / b i n目录下的c l e a n u p . s h。
45 4 1,10,22 * * /apps/bin/backup.sh
上面的例子表示每月1、1 0、2 2日的4 : 4 5运行/ a p p s / b i n目录下的b a c k u p . s h。
10 1 * * 6,0 /bin/find -name “core” -exec rm {} ;
上面的例子表示每周六、周日的1 : 1 0运行一个f i n d命令。
0,30 18-23 * * * /apps/bin/dbcheck.sh
上面的例子表示在每天1 8 : 0 0至2 3 : 0 0之间每隔3 0分钟运行/ a p p s / b i n目录下的d b c h e c k . s h。
0 23 * * 6 /apps/bin/qtrend.sh
上面的例子表示每星期六的11 : 0 0 p m运行/ a p p s / b i n目录下的q t r e n d . s h
实现定时task的两种方式
一种是编辑一个文件,用crontab 载入
一种是用crontab -e 直接编辑生效
例子:
每隔以一分钟往一个文件打入一堆字符
先vi crontab1
1-59 * * * * echo `date`” mysql” >> /opt/shuju/dazi.txt
最好加上注释
这样就能明确当前的这个定时任务的目的
然后 crontab crontab1载入crontab1这个定时任务
另外一种方法:
#every minute echo char to file
1-59 * * * * echo `date`” tian” >> /opt/shuju/da.txt
date 用单引号,是表示如果date是一个命令,就作为命令执行
如果你直接用date ,那么输出的是”date”这个字符串,而不是date这个命令的执行结果
>> 是附加到文件末尾,而>是直接覆盖文件
如果crontab -e无法编辑
那么是你的环境变量没有配置
请你进入 vi /etc/profile
加上
export EDITOR
crontab -l 列出所有定时任务
如何才能删除一个定时任务
可以这样做:
crontab -e ,然后,注释掉对应定时任务语句即可。
例如,删除刚刚定义的定时任务
#every minute echo char to file
1-59 * * * * echo `date`” oracle” >> /opt/shuju/tj.txt
只需要
#every minute echo char to file
#1-59 * * * * echo `date`” oracle” >> /opt/shuju/tj.txt
crontab -r 会删除所有的定时任务,使用时务必谨慎。