第1章 linux無法上網
1) 第一步,先ping域名.
ping www.baidu.com
2)再ping一個公網ip ,
ping 223.5.5.5/223.6.6.6/114.114.114.114
[root@znix /]# ping 223.5.5.5
PING 223.5.5.5 (223.5.5.5) 56(84) bytes of data.
64 bytes from 223.5.5.5: icmp_seq=1 ttl=128 time=42.8 ms
2) ping 默認的網關
[root@znix ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
0.0.0.0 10.0.0.2 0.0.0.0 UG 0 0 0 eth0
第2章 系統的負載/cpu/內存太高了
1) 使用top 命令查看哪個進程占用cpu/內存多.
[root@znix /]# top
top - 15:29:37 up 4 days, 23:18, 4 users, load average: 0.00, 0.00, 0.00
Tasks: 92 total, 1 running, 91 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.3%us, 0.3%sy, 0.0%ni, 99.3%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 485984k total, 215144k used, 270840k free, 117300k buffers
Swap: 786428k total, 8664k used, 777764k free, 20700k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
16949 root 20 0 102m 4628 3572 S 0.0 1.0 0:00.14 sshd
17064 root 20 0 102m 4608 3568 S 0.0 0.9 0:00.06 sshd
16812 root 20 0 102m 2604 2400 S 0.0 0.5 0:00.84 sshd
2) 找出對應程序的pid號碼
a) 找到占用率較高的程序
16949 root 20 0 102m 4628 3572 S 0.0 1.0 0:00.14 sshd
3) strace -p 進程的pid號碼
a) 查看現在這個進程正在做什么事情.
[root@znix /]# strace -p 16949
Process 16949 attached
select(10, [3 5 9], [], NULL, NULL
第3章 定時任務
3.1 每分鍾顯示當前系統的日期 年-月-日_小時 ,把這個時間追加到 /tmp/date.log
3.1.1 .先運行命令
運行命令進行測試,確定命令可以執行.
[root@znix ~]# date +%F_%H >> /tmp/date.log
[root@znix ~]# cat /tmp/date.log
2017-09-08_09
3.1.2 命令放入腳本中
[root@znix scripts]# cat /server/scripts/date.sh
date +%F_%H:%M >> /tmp/date.log
3.1.3 測試腳本
[root@znix scripts]# /bin/sh /server/scripts/date.sh
[root@znix scripts]# tail -1 /tmp/date.log
2017-09-08_09:43
3.1.4 寫到定時任務
[root@znix scripts]# crontab -l |tail -2
#print time to file by hou 20170908
* * * * * /bin/sh /server/scripts/date.sh >/dev/null 2>&1
3.1.5 查看你定時任務的執行日歷
[root@znix scripts]# tail -2 /var/log/cron
Sep 8 09:53:41 znix crontab[16396]: (root) LIST (root)
Sep 8 09:54:01 znix CROND[16400]: (root) CMD (/bin/sh /server/scripts/date.sh >/dev/null 2>&1)
3.1.6 檢查結果
[root@znix ~]# cat /tmp/date.log
2017-09-08_09
3.2 命令中的sh與bash
[root@znix ~]# ll /bin/sh /bin/bash
-rwxr-xr-x. 1 root root 942200 Mar 23 08:15 /bin/bash
lrwxrwxrwx. 1 root root 4 Aug 10 18:34 /bin/sh -> bash
第4章 磁盤滿了之郵件服務
4.1 系統中的郵件服務
centos 6.x 為postfix
centos 5.x 為sendmail
4.2 關閉系統郵件服務
[root@znix ~]# /etc/init.d/postfix
Usage: /etc/init.d/postfix {start|stop|restart|reload|abort|flush|check|status|condrestart}
[root@znix ~]# /etc/init.d/postfix stop
Shutting down postfix: [ OK ]
4.2.1 關閉郵件服務后,系統的油價會放入/var/spool/postfix/maildrop/
[root@znix ~]# ls /var/spool/postfix/maildrop/ |wc -l
12
4.3 [企業案例] 如果定時任務規則結尾不加>/dev/null 2>&1或者追加到文件中>>/tmp/clsn 2>&1,很容易導致硬盤inode空間被占滿,從而系統服務不正常。
定時任務中-命令或腳本結果(正確及錯誤)定向到黑洞(>/dev/null 2>&1)或追加到文件中 >>/tmp/clsn.txt 2>&1.
實例4-1 情況一:
郵件服務關閉 沒有定向到空,會導致 /var/spool/postfix/maildrop/ 中有許多小文件
造成磁盤滿了,即inode滿了.
解決辦法:將郵件服務打開就會釋放inode.
[root@znix /]# /etc/init.d/postfix start
Starting postfix: [ OK ]
[root@znix /]# chkconfig |grep post
postfix 0:off 1:off 2:on 3:on 4:on 5:on 6:off
實例4-2 情況二:
郵件服務開啟/var/spool/cron/root會變大,發的郵件都會存到文件中,時間長了會將
解決辦法:定向到空即可
>/dev/null 2>&1
4.4 兩種輸出重定向
>/dev/null 2>&1
把正確的和錯誤的都放在 /dev/null(黑洞,一去不復返)
>>/tmp/clsn.txt 2>&1
把正確的和錯誤的都放在/tmp/clsn.txt
4.5 書寫定時任務要將內容輸出重定向
如果定時任務規則結尾不加>/dev/null 2>&1或者追加到文件中>>/tmp/clsn 2>&1,很容易導致硬盤inode空間被占滿,從而系統服務不正常。
4.6 創建和刪除大量小文件的方法
4.6.1 刪除小文件的方法
1)大量的小文件
[root@znix tmp]# ls |xargs rm
2)刪除文件所在的目錄 (權限、所有者、屬組)
3)臨時開啟郵件服務 (只對/var/spool/postfix/maildrop 這個目錄下的小文件)
4.6.2 創建小文件的方法
[root@znix tmp]# echo {1..400000}|xargs touch
[root@znix tmp]# ll -hd tmp/
drwxr-xr-x 2 root root 8.4M Sep 8 10:59 tmp/
4.7 管道與|xargs 區別:
| 傳遞的是文本
|xargs 后面的命令會任務傳遞過來的是文件
4.8 定時任務的位置
1.在用戶的定時任務中,默認存放在當前用戶的家目錄下
2.系統的定時任務存放在根下
第5章 練習題--定時任務
5.1 在定時任務中的環境變量
定時任務中,只能識別兩個位置的變量,使用其他位置命令的時候可以使用絕對路徑,也可以添加環境變量.
/usr/bin
/bin
添加環境變量,直接寫在定時任務的開始即可.可以將自己使用到的命令位置都添加上.
export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
5.2 每分鍾顯示當前的系統的ip地址還有系統日期date +%F 追加到文件中/tmp/ip.log
5.2.1 先測試一下命令
保證命令是執行沒有錯誤的.
[root@znix /]# date +%F
2017-09-08
[root@znix /]# /sbin/ifconfig eth0 |awk -F "[ :]+" 'NR==2 {print $4}'
10.0.0.201
5.2.2 將命令放入腳本
[root@znix ~]# cat /server/scripts/ip.sh
date +%F
/sbin/ifconfig eth0 |awk -F "[ :]+" 'NR==2 {print $4}'
5.2.3 書寫定時任務
[root@znix ~]# crontab -l |tail -2
#print ip & date
* * * * * /bin/sh /server/scripts/ip.sh >/tmp/ip.sh 2>&1
5.2.4 檢查執行結果
[root@znix tmp]# tail -f /tmp/ip.log
2017-09-08
10.0.0.201
5.3 每隔 2 個小時將/etc/services 文件打包備份到/tmp下(最每次備份成不同的備份包)。
5.3.1 測試命令是否正確
[root@znix ~]# cd / && /bin/tar zcf /tmp/ser_`date +%F_%H`.tar.gz etc/services
[root@znix /]# ll tmp/ser_2017-09-08_1*
-rw-r--r-- 1 root root 127314 Sep 8 16:15 tmp/ser_2017-09-08_16.tar.gz
5.3.2 寫入腳本中
[root@znix ~]# cat /server/scripts/ser.sh
cd / && /bin/tar zcf /tmp/ser_`date +%F_%H`.tar.gz etc/services
5.3.3 測試腳本
[root@znix /]# sh /server/scripts/ser.sh
[root@znix /]# ll tmp/ser_2017-09-08_1*
-rw-r--r-- 1 root root 127314 Sep 8 16:17 tmp/ser_2017-09-08_16.tar.gz
5.3.4 寫入定時任務
[root@znix ~]# crontab -l |tail -2
##dabao /etc/services
00 */2 * * * /bin/sh /server/scripts/ser.sh >/dev/null 2>&1
5.3.5 檢查結果
[root@znix /]# ll tmp/ser_2017-09-08_1*
-rw-r--r-- 1 root root 127314 Sep 8 11:59 tmp/ser_2017-09-08_11.tar.gz
-rw-r--r-- 1 root root 127314 Sep 8 12:11 tmp/ser_2017-09-08_12.tar.gz
-rw-r--r-- 1 root root 127314 Sep 8 16:17 tmp/ser_2017-09-08_16.tar.gz
5.4 每天晚上 12 點,打包站點目錄/var/www/html 備份到/data 目錄下(最好每次備份按時間生成不同的備份包)
5.4.1 測試命令
[root@znix /]# cd / && tar zcf /data/www_`date +%F`.tar.gz var/www/html
[root@znix /]# ll /data/www*
-rw-r--r-- 1 root root 117 Sep 8 16:21 /data/www_2017-09-08.tar.gz
5.4.2 寫入測試腳本
[root@znix /]# cat /server/scripts/www.sh
cd / && tar zcf /data/www_`date +%F`.tar.gz var/www/html
[root@znix /]# ll /data/www*
-rw-r--r-- 1 root root 117 Sep 8 16:21 /data/www_2017-09-08.tar.gz
5.4.3 寫入定時任務
[root@znix /]# crontab -l |tail -2
####dabao tar
00 00 * * * /bin/sh /server/scripts/www.sh >/dev/null 2>&1
5.4.4 檢查執行結果
[root@znix /]# ll /data/www*
-rw-r--r-- 1 root root 117 Sep 8 16:28 /data/www_2017-09-08.tar.gz