合规国际互联网加速 OSASE为企业客户提供高速稳定SD-WAN国际加速解决方案。 广告
[TOC] ## 临时文件的安全问题 生成临时文件应该遵循下面的规则。 创建前检查文件是否已经存在。 确保临时文件已成功创建。 临时文件必须有权限的限制。 临时文件要使用不可预测的文件名。 脚本退出时,要删除临时文件(使用`trap`命令)。 ## mktemp 命令的用法 `mktemp`命令生成的临时文件名是随机的,而且权限是只有用户本人可读写 保证删除的文件正确的删除,使用`trap` ``` #!/bin/bash trap 'rm -f "$TMPFILE"' EXIT TMPFILE=$(mktemp) || exit 1 echo "Our temp file is $TMPFILE" ``` ## mktemp 命令的参数 -d参数可以创建一个临时目录 ``` $ mktemp -d /tmp/tmp.Wcau5UjmN6 ``` -p参数可以指定临时文件所在的目录 ``` $ mktemp -p /home/ruanyf/ /home/ruanyf/tmp.FOKEtvs2H3 ``` -t参数可以指定临时文件的文件名模板 X的数量最好大于6个 ``` $ mktemp -t mytemp.XXXXXXX /tmp/mytemp.yZ1HgZV ``` ## trap 命令 注意,`trap`命令必须放在脚本的开头。否则,它上方的任何命令导致脚本退出,都不会被它捕获 ``` $ trap -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 ``` ``` HUP:编号1,脚本与所在的终端脱离联系。 INT:编号2,用户按下 Ctrl + C,意图让脚本中止运行。 QUIT:编号3,用户按下 Ctrl + 斜杠,意图退出脚本。 KILL:编号9,该信号用于杀死进程。 TERM:编号15,这是kill命令发出的默认信号。 EXIT:编号0,这不是系统信号,而是 Bash 脚本特有的信号,不管什么情况,只要退出脚本就会产生。 ``` 语法 ``` $ trap [动作] [信号1] [信号2] ... ``` ``` $ trap 'rm -f "$TMPFILE"' EXIT ``` 上面命令中,脚本遇到EXIT信号时,就会执行rm -f "$TMPFILE"。 如果`trap`需要触发多条命令,可以封装一个 Bash 函数。 ``` function egress { command1 command2 command3 } trap egress EXIT ```