第二部分 Linux Shell高级编程技巧——第二章 Shell工具

小灰灰 2022-03-11 01:14 326阅读 0赞

笔记

  1. #Shell工具
  2. #日志文件
  3. #编辑
  4. #vi datelog.sh
  5. #查看文件内容
  6. [root@localhost 0418]# cat datelog.sh
  7. #!/bin/bash
  8. #datelog.sh
  9. #当前的日期
  10. current_date=`date "+%Y%m%d"`
  11. #今天的日志文件名
  12. todaylog="log/${current_date}.log}
  13. #如果日志文件不存在,创建一个
  14. if [ ! -f $todaylog ]
  15. then
  16. touch $todaylog
  17. fi
  18. #输出日志到日志文件
  19. log_time_format=`date "+%Y-%m-%d %T"`
  20. echo "${log_time_format} 命令开始" >>$todaylog
  21. #
  22. # command blocks
  23. sleep 4
  24. #
  25. #输出日志到日志文件
  26. log_time_format=`date "+%Y-%m-%d %T"`
  27. echo "${log_time_format} 命令结束" >>$todaylog
  28. #执行
  29. [root@localhost 0418]# ./datelog.sh
  30. #查看当前日期
  31. [root@localhost 0418]# date
  32. Thu Apr 18 11:35:52 CST 2013
  33. You have new mail in /var/spool/mail/root
  34. #查看date帮助手册
  35. [root@localhost 0418]# man date
  36. #编辑
  37. vi processlog.sh
  38. [root@localhost 0419]# cat processlog.sh
  39. #!/bin/bash
  40. #kill_process.sh
  41. #取得当前进程号
  42. current_PID=$$
  43. #获得特定进程的进程号并重定向到一个临时文件中
  44. ps -aux|grep "/usr/sbin/httpd"|grep -v "grep"|awk '{print $2}'>/tmp/${current_PID}.txt
  45. #命令块开始
  46. #for pid in `cat /tmp/${current_PID}.txt`
  47. #do
  48. #{
  49. #echo "Kill -9 $pid"
  50. #Kill -9 $pid
  51. #}
  52. #done
  53. #命令块结束
  54. #删除临时文件
  55. echo "rm -f /tmp/${current_PID}.txt"
  56. rm -f /tmp/${current_PID}.txt
  57. #改变权限
  58. [root@localhost 0418]# chmod 755 processlog.sh
  59. #启动httpd服务
  60. [root@localhost 0418]# service httpd start
  61. Starting httpd: perl: warning: Setting locale failed.
  62. perl: warning: Please check that your locale settings:
  63. LANGUAGE = (unset),
  64. LC_ALL = (unset),
  65. LANG = "en_US.en"
  66. are supported and installed on your system.
  67. perl: warning: Falling back to the standard locale ("C").
  68. [ OK ]
  69. #查看httpd进程详细信息并去除grep
  70. [root@localhost 0418]# ps -aux|grep "/usr/sbin/httpd"|grep -v " grep "
  71. root 19202 1.9 3.3 19656 8624 ? S 12:09 0:00 /usr/sbin/httpd
  72. #查看httpd进程详细信息并去除grep、打印进程号
  73. [root@localhost 0418]# ps -aux|grep "/usr/sbin/httpd"|grep -v "grep"|awk '{print $2}'
  74. 19202
  75. #执行
  76. [root@localhost 0418]# ./processlog.sh
  77. #查看
  78. [root@localhost 0418]# cat /t
  79. tftpboot tmp
  80. #查看tmp目录,发现19304.txt文件
  81. [root@localhost 0418]# cat /tmp/
  82. .X0-lock
  83. .X11-unix
  84. .fam_socket
  85. .font-unix
  86. .gdm_socket
  87. .iroha_unix
  88. 19304.txt
  89. OSL_PIPE_0_SingleOfficeIPC_e31798b4554fdedd4fea48cd4e93b7
  90. VMwareDnD
  91. jd_sockV4
  92. orbit-root
  93. orbit-student
  94. ssh-XXCs45Ko
  95. vmware-root
  96. #查看19304.txt内容
  97. [root@localhost 0418]# cat /tmp/19304.txt
  98. 19202
  99. #手动删除
  100. [root@localhost 0418]# rm -f /tmp/19304.txt
  101. #执行
  102. [root@localhost 0418]# ./processlog.sh
  103. rm -f /tmp/19421.txt
  104. #重新查看,发现没有内容
  105. [root@localhost 0418]# cat /tmp/19421.txt
  106. cat: /tmp/19421.txt: No such file or directory
  107. #信号
  108. #查看所有信号
  109. [root@localhost 0418]# kill -l
  110. 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL
  111. 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE
  112. 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2
  113. 13) SIGPIPE 14) SIGALRM 15) SIGTERM 17) SIGCHLD
  114. 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN
  115. 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
  116. 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO
  117. 30) SIGPWR 31) SIGSYS 33) SIGRTMIN 34) SIGRTMIN+1
  118. 35) SIGRTMIN+2 36) SIGRTMIN+3 37) SIGRTMIN+4 38) SIGRTMIN+5
  119. 39) SIGRTMIN+6 40) SIGRTMIN+7 41) SIGRTMIN+8 42) SIGRTMIN+9
  120. 43) SIGRTMIN+10 44) SIGRTMIN+11 45) SIGRTMIN+12 46) SIGRTMIN+13
  121. 47) SIGRTMIN+14 48) SIGRTMIN+15 49) SIGRTMAX-14 50) SIGRTMAX-13
  122. 51) SIGRTMAX-12 52) SIGRTMAX-11 53) SIGRTMAX-10 54) SIGRTMAX-9
  123. 55) SIGRTMAX-8 56) SIGRTMAX-7 57) SIGRTMAX-6 58) SIGRTMAX-5
  124. 59) SIGRTMAX-4 60) SIGRTMAX-3 61) SIGRTMAX-2 62) SIGRTMAX-1
  125. 63) SIGRTMAX
  126. #查看httpd进程详细信息
  127. [root@localhost 0418]# ps -ef |grep "httpd"
  128. root 19202 1 0 12:09 ? 00:00:00 /usr/sbin/httpd
  129. apache 19205 19202 0 12:09 ? 00:00:00 [httpd]
  130. apache 19206 19202 0 12:09 ? 00:00:00 [httpd]
  131. apache 19207 19202 0 12:09 ? 00:00:00 [httpd]
  132. apache 19208 19202 0 12:09 ? 00:00:00 [httpd]
  133. apache 19209 19202 0 12:09 ? 00:00:00 [httpd]
  134. apache 19210 19202 0 12:09 ? 00:00:00 [httpd]
  135. apache 19211 19202 0 12:09 ? 00:00:00 [httpd]
  136. apache 19212 19202 0 12:09 ? 00:00:00 [httpd]
  137. root 19533 2658 0 12:23 pts/0 00:00:00 grep httpd
  138. #查看httpd进程详细信息并去除grep
  139. [root@localhost 0418]# ps -ef |grep "httpd"|grep -v "grep"
  140. root 19202 1 0 12:09 ? 00:00:00 /usr/sbin/httpd
  141. apache 19205 19202 0 12:09 ? 00:00:00 [httpd]
  142. apache 19206 19202 0 12:09 ? 00:00:00 [httpd]
  143. apache 19207 19202 0 12:09 ? 00:00:00 [httpd]
  144. apache 19208 19202 0 12:09 ? 00:00:00 [httpd]
  145. apache 19209 19202 0 12:09 ? 00:00:00 [httpd]
  146. apache 19210 19202 0 12:09 ? 00:00:00 [httpd]
  147. apache 19211 19202 0 12:09 ? 00:00:00 [httpd]
  148. apache 19212 19202 0 12:09 ? 00:00:00 [httpd]
  149. #杀死进程19212
  150. [root@localhost 0418]# kill -s SIGKILL 19212
  151. [root@localhost 0418]# ps -ef |grep "httpd"|grep -v "grep"
  152. root 19202 1 0 12:09 ? 00:00:00 /usr/sbin/httpd
  153. apache 19205 19202 0 12:09 ? 00:00:00 [httpd]
  154. apache 19206 19202 0 12:09 ? 00:00:00 [httpd]
  155. apache 19207 19202 0 12:09 ? 00:00:00 [httpd]
  156. apache 19208 19202 0 12:09 ? 00:00:00 [httpd]
  157. apache 19209 19202 0 12:09 ? 00:00:00 [httpd]
  158. apache 19210 19202 0 12:09 ? 00:00:00 [httpd]
  159. apache 19211 19202 0 12:09 ? 00:00:00 [httpd]
  160. #功能同上
  161. [root@localhost 0418]# kill -9 19211
  162. #重新查看httpd进程详细信息并去除grep ,发现没有该进程,说明被终止
  163. [root@localhost 0418]# ps -ef |grep "httpd"|grep -v "grep"
  164. root 19202 1 0 12:09 ? 00:00:00 /usr/sbin/httpd
  165. apache 19205 19202 0 12:09 ? 00:00:00 [httpd]
  166. apache 19206 19202 0 12:09 ? 00:00:00 [httpd]
  167. apache 19207 19202 0 12:09 ? 00:00:00 [httpd]
  168. apache 19208 19202 0 12:09 ? 00:00:00 [httpd]
  169. apache 19209 19202 0 12:09 ? 00:00:00 [httpd]
  170. apache 19210 19202 0 12:09 ? 00:00:00 [httpd]
  171. #挂起进程
  172. [root@localhost 0418]# kill -s SIGHUP 19210
  173. #查看httpd进程详细信息并去除grep
  174. [root@localhost 0418]# ps -ef |grep "httpd"|grep -v "grep"
  175. root 19202 1 0 12:09 ? 00:00:00 /usr/sbin/httpd
  176. apache 19205 19202 0 12:09 ? 00:00:00 [httpd]
  177. apache 19206 19202 0 12:09 ? 00:00:00 [httpd]
  178. apache 19207 19202 0 12:09 ? 00:00:00 [httpd]
  179. apache 19208 19202 0 12:09 ? 00:00:00 [httpd]
  180. apache 19209 19202 0 12:09 ? 00:00:00 [httpd]
  181. #重新查看查看httpd进程详细信息并去除grep
  182. [root@localhost 0418]# ps -ef |grep "httpd"|grep -v "grep"
  183. root 19202 1 0 12:09 ? 00:00:00 /usr/sbin/httpd
  184. apache 19205 19202 0 12:09 ? 00:00:00 [httpd]
  185. apache 19206 19202 0 12:09 ? 00:00:00 [httpd]
  186. apache 19207 19202 0 12:09 ? 00:00:00 [httpd]
  187. apache 19208 19202 0 12:09 ? 00:00:00 [httpd]
  188. apache 19209 19202 0 12:09 ? 00:00:00 [httpd]
  189. #杀死子进程或者父进程下的所有子进程
  190. [root@localhost 0418]# kill -1 19209
  191. #查看httpd进程详细信息并去除grep
  192. [root@localhost 0418]# ps -ef |grep "httpd"|grep -v "grep"
  193. root 19202 1 0 12:09 ? 00:00:00 /usr/sbin/httpd
  194. apache 19205 19202 0 12:09 ? 00:00:00 [httpd]
  195. apache 19206 19202 0 12:09 ? 00:00:00 [httpd]
  196. apache 19207 19202 0 12:09 ? 00:00:00 [httpd]
  197. apache 19208 19202 0 12:09 ? 00:00:00 [httpd]
  198. apache 19616 19202 0 12:26 ? 00:00:00 [httpd]
  199. #查看httpd进程详细信息并去除grep
  200. [root@localhost 0418]# ps -ef |grep "httpd"|grep -v "grep"
  201. root 19202 1 0 12:09 ? 00:00:00 /usr/sbin/httpd
  202. apache 19205 19202 0 12:09 ? 00:00:00 [httpd]
  203. apache 19206 19202 0 12:09 ? 00:00:00 [httpd]
  204. apache 19207 19202 0 12:09 ? 00:00:00 [httpd]
  205. apache 19208 19202 0 12:09 ? 00:00:00 [httpd]
  206. apache 19616 19202 0 12:26 ? 00:00:00 [httpd]
  207. #结束进程号为19202的进程
  208. [root@localhost 0418]# kill -1 19202
  209. #查看httpd进程详细信息并去除grep
  210. [root@localhost 0418]# ps -ef |grep "httpd"|grep -v "grep"
  211. root 19202 1 0 12:09 ? 00:00:00 /usr/sbin/httpd
  212. exit crtl+D退出当前shell
  213. #trap捕捉信号
  214. #建立文件夹0419
  215. mkdir 0419
  216. #进入该目录
  217. cd 0419
  218. #拷贝0418所有文件到当前目录
  219. [root@localhost 0419]# cp ../0418/* .
  220. #编辑
  221. [root@localhost 0419]# vi trap1.sh
  222. #查看内容
  223. [root@localhost 0419]# cat trap1.sh
  224. #!/bin/bash
  225. #trap1.sh
  226. #注意此处为单引号,不是反引号
  227. trap ‘exitprocess’ 2
  228. LOOP=0
  229. function exitprocess()
  230. {
  231. echo "You just hit <CRTL-C>, at number $LOOP"
  232. echo "I will now exit"
  233. exit 1
  234. }
  235. while :
  236. do
  237. LOOP=$[$LOOP+1]
  238. echo $LOOP
  239. done
  240. #改变权限
  241. [root@localhost 0419]# chmod 755 trap1.sh
  242. #执行
  243. [root@localhost 0419]# ./trap1.sh
  244. #另一个终端查看进程
  245. [root@localhost 0419]# ps –ef
  246. root 4221 2113 0 15:57 ? 00:00:00 /usr/sbin/sshd
  247. root 4241 4221 0 15:58 pts/1 00:00:00 -bash
  248. root 4834 4180 6 16:19 pts/0 00:00:00 /bin/bash ./trap1.sh
  249. #结束进程
  250. kill -2 4834
  251. #执行终端打印信息
  252. You just hit <CRTL-C>, at number 38383
  253. I will now exit
  254. #重新编辑
  255. [root@localhost 0419]# vi trap1.sh
  256. #查看内容,增加休眠调用
  257. [root@localhost 0419]# cat trap1.sh
  258. #!/bin/bash
  259. #trap1.sh
  260. trap ‘exitprocess’ 2
  261. LOOP=0
  262. function exitprocess()
  263. {
  264. echo "You just hit <CRTL-C>, at number $LOOP"
  265. echo "I will now exit"
  266. exit 1
  267. }
  268. while :
  269. do
  270. LOOP=$[$LOOP+1]
  271. echo $LOOP
  272. #增加代码
  273. sleep 1
  274. done
  275. #执行
  276. [root@localhost 0419]# ./trap1.sh
  277. root 5245 4180 0 16:35 pts/0 00:00:00 /bin/bash ./trap1.sh
  278. #另一个终端,结束进程
  279. kill -4 5245
  280. #当前终端,显示信息
  281. Illegal instruction
  282. #不做任何处理
  283. kill -3 5305
  284. #会做处理
  285. kill -2 5305
  286. #拷贝文件
  287. [root@localhost 0419]# cp trap1.sh trap2.sh
  288. #查看内容
  289. [root@localhost 0419]# cat trap2.sh
  290. #!/bin/bash
  291. #trap2.sh
  292. LOOP=0
  293. trap 'exitprocess' 2
  294. HOLD1=/tmp/ho1d1.$$
  295. HOLD2=/tmp/hold2.$$
  296. function exitprocess()
  297. {
  298. echo -e "\nRecived Interrupt ..."
  299. echo -n "Do you really wish to exit?(Y?N)"
  300. read ANS
  301. case $ANS in
  302. Y|y)
  303. rm_tmp_file
  304. ;;
  305. N|n)
  306. ;;
  307. *)
  308. exitprocess
  309. ;;
  310. esac
  311. }
  312. function rm_tmp_file()
  313. {
  314. echo "<CRTL-C> detected .. Now cleaning up ...wait"
  315. rm /tmp/*.$$ 2>/dev/null
  316. exit 1
  317. }
  318. while :
  319. do
  320. LOOP=$[$LOOP+1]
  321. echo $LOOP
  322. df>>$HOLD1
  323. ps -xa >>$HOLD2
  324. sleep 1
  325. done
  326. #执行
  327. [root@localhost 0419]# ./trap2.sh
  328. 1
  329. 2
  330. 3
  331. 4
  332. 5
  333. 6
  334. 7
  335. 8
  336. 9
  337. 10
  338. 11
  339. 12
  340. 13
  341. 14
  342. 15
  343. 16
  344. 17
  345. 18
  346. 19
  347. 20
  348. 21
  349. 22
  350. 23
  351. 24
  352. 25
  353. 26
  354. 27
  355. 28
  356. 29
  357. 30
  358. 31
  359. 32
  360. 33
  361. 34
  362. 35
  363. 36
  364. 37
  365. 38
  366. 39
  367. 40
  368. 41
  369. 42
  370. 43
  371. 44
  372. 45
  373. 46
  374. 47
  375. 48
  376. 49
  377. 50
  378. 51
  379. 52
  380. 53
  381. 54
  382. 55
  383. Recived Interrupt ...
  384. Do you really wish to exit?(Y?N)N
  385. 56
  386. 57
  387. 58
  388. 59
  389. 60
  390. 61
  391. 62
  392. 63
  393. 64
  394. 65
  395. 66
  396. 67
  397. 68
  398. 69
  399. 70
  400. 71
  401. 72
  402. 73
  403. 74
  404. 75
  405. 76
  406. Recived Interrupt ...
  407. Do you really wish to exit?(Y?N)y
  408. <CRTL-C> detected .. Now cleaning up ...wait
  409. #查看tmp目录下的内容
  410. ls -al /tmp/
  411. -rw-r--r-- 1 root root 3816 Apr 19 16:50 ho1d1.5503
  412. -rw-r--r-- 1 root root 3816 Apr 19 16:50 ho1d2.5503
  413. #另一个终端查看进程
  414. ps –ef
  415. #结束进程
  416. kill -2 5503
  417. #eval
  418. #执行
  419. [root@localhost 0419]# MYFILE="cat myfile"; `eval $MYFILE`
  420. -bash: total: command not found
  421. #编辑
  422. vi myfile
  423. #查看内容
  424. [root@localhost 0419]# cat myfile
  425. ls –al
  426. #执行
  427. [root@localhost 0419]# MYFILE="cat myfile"; `eval $MYFILE`
  428. total 32
  429. drwxr-xr-x 2 root root 4096 Apr 19 16:54 .
  430. drwxr-xr-x 15 root root 4096 Apr 19 15:58 ..
  431. -rwxr-xr-x 1 root root 431 Apr 19 15:59 awkif.sh
  432. -rwxr-xr-x 1 root root 435 Apr 19 15:59 datelog.sh
  433. -rw-r--r-- 1 root root 7 Apr 19 16:54 myfile
  434. -rwxr-xr-x 1 root root 391 Apr 19 15:59 processlog.sh
  435. -rwxr-xr-x 1 root root 210 Apr 19 16:35 trap1.sh
  436. -rwxr-xr-x 1 root root 484 Apr 19 16:45 trap2.sh
  437. #重新编辑
  438. [root@localhost 0419]# vi myfile
  439. #查看内容
  440. [root@localhost 0419]# cat myfile
  441. ls
  442. #重新执行
  443. [root@localhost 0419]# MYFILE="cat myfile"; `eval $MYFILE`
  444. awkif.sh datelog.sh myfile processlog.sh trap1.sh trap2.sh
  445. #可以不使用变量
  446. [root@localhost 0419]# eval `cat myfile`
  447. awkif.sh datelog.sh myfile processlog.sh trap1.sh trap2.sh
  448. #logger
  449. #查看messages内容
  450. [root@localhost 0419]# cat /var/log/messages
  451. #向日志文件增加内容
  452. [root@localhost 0419]# logger -i "chinaitlab shenzhen"
  453. Apr 19 17:01:09 localhost root[6179]: chinaitlab shenzhen
  454. [root@localhost 0419]# logger -p 19 -i "chinaitlab shenzhen"
  455. #再次查看
  456. [root@localhost 0419]# cat /var/log/messages
  457. Apr 19 17:01:09 localhost root[6179]: chinaitlab shenzhen
  458. Apr 19 17:01:56 localhost root[6199]: chinaitlab shenzhen
  459. #向日志文件增加内容
  460. [root@localhost 0419]# logger -p 1 -i "chinaitlab shenzhen"
  461. #再次查看
  462. [root@localhost 0419]# cat /var/log/messages
  463. Apr 19 17:01:09 localhost root[6179]: chinaitlab shenzhen
  464. Apr 19 17:01:56 localhost root[6199]: chinaitlab shenzhen
  465. Apr 19 17:02:25 localhost root[6201]: chinaitlab shenzhen

附图

1366372420_6608.jpg

1366372437_8215.jpg

1366372447_7070.jpg

1366372457_5449.jpg

1366372468_9151.jpg

1366372481_7547.jpg

1366372490_9216.jpg











katoon Sina  CSDN
@Wentasy 博文仅供参考,欢迎大家来访。如有错误之处,希望批评指正。原创博文如需转载请注明出处,谢谢 :) [CSDN博客]

发表评论

表情:
评论列表 (有 0 条评论,326人围观)

还没有评论,来说两句吧...

相关阅读