Chinaunix首页 | 论坛 | 博客
  • 博客访问: 78714
  • 博文数量: 41
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 434
  • 用 户 组: 普通用户
  • 注册时间: 2017-03-23 09:31
个人简介

天行健,君子以自强不息;地势坤,君子以厚德载物

文章分类
文章存档

2018年(11)

2017年(30)

我的朋友

分类: LINUX

2018-01-06 18:23:53

如何实现部分编译:
1、只编译某子目录下的相关代码:
make dir/
make arch/
make drivers/net/
2、只编译部分模块
make M=drivers/net/
3、只编译某一模块
如:make drivers/net/pcnet32.ko
4、将编译完成的结果放置于别的目录中
make O=/tmp/kernel

5、cross compile:交叉编译
make ARCH=

脚本编译知识点:
1、变量中字符的长度:${#VARNAME}
2、变量赋值等:
${parameter:-word}:如果parameter为空或未定义,则变量展开为“word”;否则,展开为parameter的值;
例:[root@localhost ~]# A=3
    [root@localhost ~]# echo ${A:-30}
    3
    [root@localhost ~]# unset A    #取消A的赋值#
    [root@localhost ~]# echo ${A:-30}
    30
    [root@localhost ~]# A=${A:-30}
    [root@localhost ~]# echo $A
    30

${parameter:+word}:如果parameter为空或未定义,不做任何操作;否则,则展开为“word”值;
例:[root@localhost ~]# echo ${A:+30}
                                    #值为空#

${parameter:=word}:如果parameter为空或未定义,则变量展开为“word”,并将展开后的值赋值给parameter;
例:[root@localhost ~]# echo ${A:=30}
    30
    [root@localhost ~]# echo $A
    30

${parameter:offset}:取子串,从offset处的后一个字符开始,取字串;
例:[root@localhost ~]# A='hello world'
    [root@localhost ~]# echo ${A:2}
    llo world

${parameter:offset:length}:取子串,从offset处的后一个字符开始,取lenth长的字串;
例:[root@localhost ~]# A='hello world'
    [root@localhost ~]# echo ${A:2:3}
    llo
3、脚本配置文件
/etc/rc.d/init.d/服务脚本
服务脚本支持配置文件:/etc/sysconfig/服务脚本同名的配置文件
例:[root@localhost ~]# vim a.conf
    TEST="hello world."
    [root@localhost ~]# vim a.sh
    [root@localhost ~]# chmod +x a.sh
    #!/bin/bash
    #
    . /root/a.conf     #调用/root/a.conf#
    TEST=${TEST:-info} #变量TEST赋值,TEST若有值则输出;否则输出info#
    [ -n "TEST" ] && echo $TEST
    [root@localhost ~]# ./a.sh
    hello world.
4、局部变量
local VAR_NAME=
例1:[root@localhost ~]# vim b.sh
#!/bin/bash
#
a=1
test() {
        a=$[3+4]
}
test
for I in `seq $a 10`; do
        echo  $I
done

[root@localhost ~]# chmod +x b.sh
[root@localhost ~]# ./b.sh
7
8
9
10
例2:使用local局部变量
[root@localhost ~]# vim b.sh
#!/bin/bash
#
a=1
test() {
      local a=$[3+4]
}
test
for I in `seq $a 10`; do
        echo  $I
done

[root@localhost ~]# chmod +x b.sh
[root@localhost ~]# ./b.sh
1
2
3
4
5
6
7
8
9
10

5、命令mktemp
创建临时文件或目录
mktemp /tmp/file.XX   #创建临时文件#
例:[root@localhost ~]# mktemp /tmp/file.XX
/tmp/file.89
[root@localhost ~]# mktemp /tmp/file.XXX
/tmp/file.090
[root@localhost ~]# mktemp /tmp/file.XXXX
/tmp/file.5092
[root@localhost ~]# FILE=`mktemp /tmp/file.XXXX`
[root@localhost ~]# echo $FILE
/tmp/file.5094

mktemp -d /tmp/file.XX #创建临时目录#
例:[root@localhost ~]# mktemp -d /tmp/file.XXX
/tmp/file.097
[root@localhost ~]# ls /tmp
file.097

6、信号
kill -SIGNAL PID
PID如下:
[root@localhost ~]# kill -l
 1) SIGHUP     2) SIGINT     3) SIGQUIT     4) SIGILL
 5) SIGTRAP     6) SIGABRT     7) SIGBUS     8) SIGFPE
 9) SIGKILL    10) SIGUSR1    11) SIGSEGV    12) SIGUSR2
13) SIGPIPE    14) SIGALRM    15) SIGTERM    16) SIGSTKFLT
17) SIGCHLD    18) SIGCONT    19) SIGSTOP    20) SIGTSTP
21) SIGTTIN    22) SIGTTOU    23) SIGURG    24) SIGXCPU
25) SIGXFSZ    26) SIGVTALRM    27) SIGPROF    28) SIGWINCH
29) SIGIO    30) SIGPWR    31) SIGSYS    34) SIGRTMIN
35) SIGRTMIN+1    36) SIGRTMIN+2    37) SIGRTMIN+3    38) SIGRTMIN+4
39) SIGRTMIN+5    40) SIGRTMIN+6    41) SIGRTMIN+7    42) SIGRTMIN+8
43) SIGRTMIN+9    44) SIGRTMIN+10    45) SIGRTMIN+11    46) SIGRTMIN+12
47) SIGRTMIN+13    48) SIGRTMIN+14    49) SIGRTMIN+15    50) SIGRTMAX-14
51) SIGRTMAX-13    52) SIGRTMAX-12    53) SIGRTMAX-11    54) SIGRTMAX-10
55) SIGRTMAX-9    56) SIGRTMAX-8    57) SIGRTMAX-7    58) SIGRTMAX-6
59) SIGRTMAX-5    60) SIGRTMAX-4    61) SIGRTMAX-3    62) SIGRTMAX-2
63) SIGRTMAX-1    64) SIGRTMAX    
脚本中,能实现信号捕捉,但9( 9) SIGKILL    )和15( 15) SIGTERM)信号无法捕捉

trap命令:
    trap 'COMMAND' 信号列表
例1:[root@localhost ~]# vim showdata.sh
#!/bin/bash
#
trap 'echo "You go...."' SIGINT   #捕捉信号,执行输出“You go....”命令,致使ctrl+c中断命令失效#
while : ; do
        date
        sleep 2
done
[root@localhost ~]# chmod +x showdata.sh
[root@localhost ~]# ./showdata.sh
2017年 12月 24日 星期日 04:13:04 CST
2017年 12月 24日 星期日 04:13:06 CST
2017年 12月 24日 星期日 04:13:08 CST
2017年 12月 24日 星期日 04:13:10 CST
You go....
2017年 12月 24日 星期日 04:13:11 CST
2017年 12月 24日 星期日 04:13:13 CST
You go....
2017年 12月 24日 星期日 04:13:14 CST
2017年 12月 24日 星期日 04:13:16 CST
2017年 12月 24日 星期日 04:13:18 CST

[1]+  Stopped                 ./showdata.sh   #Ctrl+z 转入后台运行#
[root@localhost ~]# kill %1      #终止后台脚本运行,1代表上行[1]#

例2:[root@localhost ~]# vim ping.sh
#!/bin/bash
#
NET=192.168.101
clearup() {
        echo "quit..."
        exit 1
}
trap 'clearup' SIGINT

for I in {1..100}; do
        if ping -c 1 -W 1 $NET.$I $> /dev/null; then
                echo "$NET.$I is up."
        else
                echo "$NET.$I is down."
        fi
done

[root@localhost ~]# chmod +x ping.sh
[root@localhost ~]# ./ping.sh
ping: unknown host $
192.168.101.1 is down.
ping: unknown host $
192.168.101.2 is down.
quit...

例3:将ping结果传送到临时文件,实现终止程序并删除临时文件;
[root@localhost ~]# vim ping.sh
#!/bin/bash
#
NET=192.168.101
FILE=`mktemp /tmp/file.XXX`
clearup() {
        echo "quit..."
        rm -f $FILE
        exit 1        
}
trap 'clearup' SIGINT

for I in {1..100}; do
        if ping -c 1 -W 1 $NET.$I $> /dev/null; then
                echo "$NET.$I is up." | tee >> $FILE
        else
                echo "$NET.$I is down."
        fi
done

[root@localhost ~]# chmod +x ping.sh
[root@localhost ~]# ./ping.sh
[root@localhost ~]# ./ping.sh
ping: unknown host $
ping: unknown host $
quit...

[root@localhost tmp]# ls   #同时打开窗口,查看#
file.992
[root@localhost tmp]# ls   #执行终止信号ctrl+c后,查看#
                            #为空#
7、一行执行多个语句,语句间用分号分隔
如语句:trap 'echo "quit.";exit 1' INT

8、任务计划
1、在未来的某个时间点执行一次某任务;
    at
    batch  #不需要指定时间,自主决定在系统空闲时执行计划#
用法:
    at 时间
    at> COMMAND
    at> Ctrl+d
    at -l   #显示作业列表相当于atq#
    at -d AT_JOB_ID #删除某个作业,相当于atrm AT_JOB_ID#
    例:
    [root@localhost ~]# at now+3minutes
    at> ls /var
    at> cat /cat/fstab
    at>               #Ctrl+D 结束#
    job 1 at 2017-12-24 15:13
    [root@localhost ~]# at -l
    1    2017-12-24 15:13 a root

    指定时间:
        绝对时间:HH:MM, DD:MM.YY , MM/DD/YY
        相对时间:now+#
                单位:minutes,hours,days,weeks
        模糊时间:noon,midnight,teatime
    命令的执行结果,将以邮件的形式
2、周期性的执行某任务;
    cron:自身是一个不间断运行的服务
    anacron:是cron的补充,能够实现让cron因为各种原因在过去的时间该执行而未执行的任务再恢复正常执行一次;
    
    cron:
        系统cron任务
            定义在/etc/crontab
            格式:分钟 小时 天 月 周 用户 任务
        用户cron任务
            定义在/var/spool/cron/USERNAME
            格式:分钟 小时 天 月 周 任务
        时间的有效取值:
            分钟:0-59
            小时:0-23
            天:1-31
            月:1-12
            周:0-7,0和7都表示周日
        时间通配表示:
            *:对应的所有有效取值
                例:3 * * * *  表示每小时的第三分钟,即每小时执行一次
                    3 * * * *   表示每个周日的每小时的第三分钟
                    13 12 * * *  表示每天12点的第13分钟执行一次
                    13 12 6 * *  表示每月6号的12点第13分钟执行一次
            ,:离散时间点:
                例:10,40 * * * 2,5 表示每周二、五每小时的第10、40分执行一次
            -:连续时间点:
                例:10 02 * * 1-5 表示每周一至五两点第10分执行一次
            /:对应取值范围内没多久一次
                例:*/3 * * * * 表示每3分钟执行一次
                    每两小时执行一次:01 */2 * * *     注:最小单位必须指定一个值,否则表示每两小时的每一秒执行一次
                    每两天执行一次:10 04 */2 * *
        执行结果将以邮件形式发送给管理员,为避免这种情况出现可以使用重定向:
            */3 * * * * /bin/cat /etc/fstab > /dev/null 表示将表示每3分钟执行一次的正确结果重定向至/dev/null,保留错误结果
            */3 * * * * /bin/cat /etc/fstab &> /dev/null 表示将表示每3分钟执行一次的正确与错误的结果重定向至/dev/null
        cron的环境变量:cron执行的所有命令都去PATH环境变量指定的路径下去找
            cron PATH环境变量只有 /bin:/sbin:/usr/bin:/usr/sbin
            cron 中的路径需要使用绝对路径,或在脚本中自定义环境变量,如系统cron:
                 [root@localhost ~]# vim /etc/crontab
                 SHELL=/bin/bash
                PATH=/sbin:/bin:/usr/sbin:/usr/bin
                MAILTO=root
                HOME=/

                # run-parts
                01 * * * * root run-parts /etc/cron.hourly
                02 4 * * * root run-parts /etc/cron.daily
                22 4 * * 0 root run-parts /etc/cron.weekly
                42 4 1 * * root run-parts /etc/cron.monthly
                
            用户任务管理:
                crontab
                    -l:列出当前用户的cron任务
                        例:[root@localhost ~]# crontab -l
                            no crontab for root
                    -e:编辑当前用户的cron任务
                        例:[root@localhost ~]# crontab -e
                            */3 * * * * /bin/echo "how are ya?"
                    -r:移除当前用户所有任务
                        例:[root@localhost ~]# crontab -l
                            */3 * * * * /bin/echo "how are ya?"
                            [root@localhost ~]# crontab -r
                            [root@localhost ~]# crontab -l
                            no crontab for root
                    -u USERNAME -l|-e|-r:管理指定用户的cron任务
                        例:[root@localhost ~]# id hadoop   #查看是否存在hadoop用户#
                            uid=501(hadoop) gid=501(hadoop) groups=501(hadoop) context=root:system_r:unconfined_t:SystemLow-SystemHigh
                            [root@localhost ~]# crontab -u hadoop -e
                            */3 * * * * /bin/echo "How are ya?"
                            [root@localhost ~]# ls /var/spool/cron/
                            hadoop
                            [root@localhost ~]# su - hadoop
                            [hadoop@localhost ~]$ crontab -l
                            */3 * * * * /bin/echo "How are ya?"
                            [root@localhost ~]# crontab -u hadoop -r   #删除hadoop用户cron任务#
                            [root@localhost ~]# crontab -l
                            no crontab for root
            anacron:
                语法格式:
                    [hadoop@localhost ~]$ cat /etc/anacrontab
                    # /etc/anacrontab: configuration file for anacron

                    # See anacron(8) and anacrontab(5) for details.

                    SHELL=/bin/sh
                    PATH=/sbin:/bin:/usr/sbin:/usr/bin
                    MAILTO=root

                    1    65    cron.daily        run-parts /etc/cron.daily
                    7    70    cron.weekly        run-parts /etc/cron.weekly
                    30    75    cron.monthly        run-parts /etc/cron.monthly
            查看cron是否运行:
                [root@localhost ~]# service crond status
                crond (pid  3494) 正在运行...
            查看anacron是否运行:
                [root@localhost ~]# service anacron status
                anacron 已停
            查看系统每个运行级别下cron是否运行:
                [root@localhost ~]# chkconfig --list crond
                crond              0:关闭    1:关闭    2:启用    3:启用    4:启用    5:启用    6:关闭
阅读(1014) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~