一週第一次課
1.1 學習之初
1.2 約定
1.3 認識Linux
1.4 安裝虛擬機
1.5 安裝centos7php
一週第二次課
1.6/1.7 配置IP
1.8 網絡問題排查html
一週第三次課
1.9 使用PuTTY遠程鏈接Linux
1.10 使用xshell鏈接Linux
1.11 PuTTY密鑰認證
1.12 xshell密鑰認證
#####################
給你們定個規矩:
當天任務務必要在次日上午11點前完成,並回復專貼(發上你的筆記連接,要求能夠直接點進去看)。
沒有在11點前回復專貼或者不回覆筆記的,都會扣10分,即便後期補上的也會扣5分。java
一週第四次課
1.13 單用戶模式
1.14 救援模式
1.15 克隆虛擬機
1.16 Linux機器相互登陸mysql
一週第五次課
2.1/2.2 系統目錄結構
2.3 ls命令
2.4 文件類型
2.5 alias命令linux
二週第一次課
2.6 相對和絕對路徑
2.7 cd命令
2.8 建立和刪除目錄mkdir/rmdir
2.9 rm命令nginx
二週第二次課
2.10 環境變量PATH
2.11 cp命令
2.12 mv命令
2.13 文檔查看cat/more/less/head/tailweb
二週第三次課
2.14 文件和目錄權限chmod
2.15 更改全部者和所屬組chown
2.16 umask
2.17 隱藏權限lsattr/chattr算法
二週第四次課
2.18 特殊權限set_uid
2.19 特殊權限set_gid
2.20 特殊權限stick_bit
2.21 軟連接文件
2.22 硬鏈接文件sql
二週第五次課
2.23/2.24/2.25 find命令
2.26 文件名後綴shell
三週第一次課
2.27linux和windows互傳文件
3.1 用戶配置文件和密碼配置文件
3.2 用戶組管理
3.3 用戶管理
三週第二次課
3.4 usermod命令
3.5 用戶密碼管理
3.6 mkpasswd命令
三週第三次課
3.7 su命令
3.8 sudo命令
3.9 限制root遠程登陸
擴展
sudo與su比較 http://www.apelearn.com/bbs/thread-7467-1-1.html
sudo配置文件樣例 www.opensource.apple.com/source/sudo/sudo-16/sudo/sample.sudoers
sudo -i 也能夠登陸到root嗎? http://www.apelearn.com/bbs/thread-6899-1-1.html
三週第四次課
4.1 df命令
4.2 du命令
4.3/4.4 磁盤分區
擴展學習 parted分區gpt格式 http://www.apelearn.com/bbs/thread-7243-1-1.html
三週第五次課)
4.5/4.6 磁盤格式化
4.7/4.8 磁盤掛載
4.9 手動增長swap空間
四周第一次課
4.10/4.11/4.12 lvm講解
4.13 磁盤故障小案例
四周第二次課
5.1 vim介紹
5.2 vim顏色顯示和移動光標
5.3 vim通常模式下移動光標
5.4 vim通常模式下複製、剪切和粘貼
四周第三次課
5.5 進入編輯模式
5.6 vim命令模式
5.7 vim實踐
擴展
vim的特殊用法 http://www.apelearn.com/bbs/thread-9334-1-1.html
vim經常使用快捷鍵總結 http://www.apelearn.com/bbs/thread-407-1-1.html
vim快速刪除一段字符 http://www.apelearn.com/bbs/thread-842-1-1.html
vim亂碼 http://www.apelearn.com/bbs/thread-6753-1-1.html
小鍵盤問題 http://www.apelearn.com/bbs/thread-7215-1-1.html
vim加密 http://www.apelearn.com/bbs/thread-7750-1-1.html
四周第四次課
6.1 壓縮打包介紹
6.2 gzip壓縮工具
6.3 bzip2壓縮工具
6.4 xz壓縮工具
四周第五次課
6.5 zip壓縮工具
6.6 tar打包
6.7 打包並壓縮
看下這個帖子: http://ask.apelearn.com/question/5435
五週第一次課
7.1 安裝軟件包的三種方法
7.2 rpm包介紹
7.3 rpm工具用法
7.4 yum工具用法
7.5 yum搭建本地倉庫(視頻中ppt小錯誤: gpcheck改成gpgcheck,yum cean 改成 yum clean)
擴展
1. yum保留已經安裝過的包 http://www.360doc.com/content/11/0218/15/4171006_94080041.shtml
2. 搭建局域網yum源 http://ask.apelearn.com/question/7627
五週第二次課
7.6 yum更換國內源
7.7 yum下載rpm包
7.8/7.9 源碼包安裝
擴展
1. 配置yum源優先級 http://ask.apelearn.com/question/7168
2. 把源碼包打包成rpm包 http://www.linuxidc.com/Linux/2012-09/70096.htm
五週第三次課
8.1 shell介紹
8.2 命令歷史
8.3 命令補全和別名
8.4 通配符
8.5 輸入輸出重定向
五週第四次課
8.6 管道符和做業控制
8.7/8.8 shell變量
8.9 環境變量配置文件
擴展
bashrc和bash_profile的區別 http://ask.apelearn.com/question/7719
五週第五次課
8.10 shell特殊符號cut命令
8.11 sort_wc_uniq命令
8.12 tee_tr_split命令
8.13 shell特殊符號下
相關測驗題目:http://ask.apelearn.com/question/5437
擴展
1. source exec 區別 http://alsww.blog.51cto.com/2001924/1113112
2. Linux特殊符號大全http://ask.apelearn.com/question/7720
3. sort並未按ASCII排序 http://blog.csdn.net/zenghui08/article/details/7938975
六週第一次課
9.1 正則介紹_grep上
9.2 grep中
9.3 grep下
擴展
把一個目錄下,過濾全部*.php文檔中含有eval的行
grep -r --include="*.php" 'eval' /data/
六週第二次課
9.4/9.5 sed
六週第三次課
9.6/9.7 awk
擴展
把這裏面的全部練習題作一下
http://www.apelearn.com/study_v2/chapter14.html
六週第四次課
複習
擴展
打印某行到某行之間的內容http://ask.apelearn.com/question/559
sed轉換大小寫 http://ask.apelearn.com/question/7758
sed在某一行最後添加一個數字http://ask.apelearn.com/question/288
刪除某行到最後一行 http://ask.apelearn.com/question/213
打印1到100行含某個字符串的行 http://ask.apelearn.com/question/1048
六週第五次課
複習
擴展
awk 中使用外部shell變量http://ask.apelearn.com/question/199
awk 合併一個文件 http://ask.apelearn.com/question/493
把一個文件多行鏈接成一行 http://ask.apelearn.com/question/266
awk中gsub函數的使用 http://ask.apelearn.com/question/200
awk 截取指定多個域爲一行 http://ask.apelearn.com/question/224
過濾兩個或多個關鍵詞 http://ask.apelearn.com/question/198
用awk生成如下結構文件 http://ask.apelearn.com/question/5494
awk用print打印單引號 http://ask.apelearn.com/question/1738
合併兩個文件 http://ask.apelearn.com/question/945
awk的參考教程 http://www.cnblogs.com/emanlee/p/3327576.html
七週一次課
10.1 使用w查看系統負載
10.2 vmstat命令
10.3 top命令
10.4 sar命令
10.5 nload命令
七週二次課
10.6 監控io性能
10.7 free命令
10.8 ps命令
10.9 查看網絡狀態
10.10 linux下抓包
擴展tcp三次握手四次揮手 http://www.doc88.com/p-9913773324388.html
tshark幾個用法:http://www.aminglinux.com/bbs/thread-995-1-1.html
七週三次課
10.11 Linux網絡相關
10.12 firewalld和netfilter
10.13 netfilter5表5鏈介紹
10.14 iptables語法
擴展(selinux瞭解便可)
1. selinux教程 http://os.51cto.com/art/201209/355490.htm
2.selinux pdf電子書 http://pan.baidu.com/s/1jGGdExK
七週四次課
10.15 iptables filter表案例
10.16/10.17/10.18 iptables nat表應用
擴展
1. iptables應用在一個網段 http://www.aminglinux.com/bbs/thread-177-1-1.html
2. sant,dnat,masquerade http://www.aminglinux.com/bbs/thread-7255-1-1.html
3. iptables限制syn速率 http://www.aminglinux.com/bbs/thread-985-1-1.html
七週五次課
10.19 iptables規則備份和恢復
10.20 firewalld的9個zone
10.21 firewalld關於zone的操做
10.22 firewalld關於service的操做
八週一次課
10.23 linux任務計劃cron
10.24 chkconfig工具
10.25 systemd管理服務
10.26 unit介紹
10.27 target介紹
擴展
1. anacron http://blog.csdn.net/strikers1982/article/details/4787226
2. xinetd服(默認機器沒有安裝這個服務,須要yum install xinetd安裝) http://blog.sina.com.cn/s/blog_465bbe6b010000vi.html
3. systemd自定義啓動腳本 http://www.jb51.net/article/100457.htm
八週二次課
10.28 rsync工具介紹
10.29/10.30 rsync經常使用選項
10.31 rsync經過ssh同步
八週三次課
10.32/10.33 rsync經過服務同步
10.34 linux系統日誌
10.35 screen工具
擴展
1. Linux日誌文件總管logrotate http://linux.cn/article-4126-1.html
2. xargs用法詳解 http://blog.csdn.net/zhangfn2011/article/details/6776925
九周第四次課
11.1 LAMP架構介紹
11.2 MySQL、MariaDB介紹
11.3/11.4/11.5 MySQL安裝
擴展
mysql5.5源碼編譯安裝 http://www.aminglinux.com/bbs/thread-1059-1-1.html
mysql5.7二進制包安裝(變化較大) http://www.apelearn.com/bbs/thread-10105-1-1.html
九周第五次課
11.6 MariaDB安裝
11.7/11.8/11.9 Apache安裝
擴展
apache dso https://yq.aliyun.com/articles/6298
apache apxs http://man.chinaunix.net/newsoft/ApacheMenual_CN_2.2new/programs/apxs.html
apache工做模式 http://www.cnblogs.com/fnng/archive/2012/11/20/2779977.html
十週第一次課
11.10/11.11/11.12 安裝PHP5
11.13 安裝PHP7
php中mysql,mysqli,mysqlnd,pdo究竟是什麼 http://blog.csdn.net/u013785951/article/details/60876816
查看編譯參數 http://ask.apelearn.com/question/1295
十週第二次課
11.14/11.15 Apache和PHP結合
11.16/11.17 Apache默認虛擬主機
十週三次課
11.18 Apache用戶認證
11.19/11.20 域名跳轉
11.21 Apache訪問日誌
擴展
apache虛擬主機開啓php的短標籤 http://ask.apelearn.com/question/5370
十週四次課
11.22 訪問日誌不記錄靜態文件
11.23 訪問日誌切割
11.24 靜態元素過時時間
擴展
apache日誌記錄代理IP以及真實客戶端IP http://ask.apelearn.com/question/960
apache只記錄指定URI的日誌 http://ask.apelearn.com/question/981
apache日誌記錄客戶端請求的域名 http://ask.apelearn.com/question/1037
apache 日誌切割問題 http://ask.apelearn.com/question/566
十一週一次課
11.25 配置防盜鏈
11.26 訪問控制Directory
11.27 訪問控制FilesMatch
擴展
幾種限制ip的方法 http://ask.apelearn.com/question/6519
apache 自定義header http://ask.apelearn.com/question/830
apache的keepalive和keepalivetimeout http://ask.apelearn.com/question/556
十一週二次課
11.28 限定某個目錄禁止解析php
11.29 限制user_agent
11.30/11.31 php相關配置
擴展
apache開啓壓縮 http://ask.apelearn.com/question/5528
apache2.2到2.4配置文件變動 http://ask.apelearn.com/question/7292
apache options參數 http://ask.apelearn.com/question/1051
apache禁止trace或track防止xss http://ask.apelearn.com/question/1045
apache 配置https 支持ssl http://ask.apelearn.com/question/1029
十一週三次課
11.32 php擴展模塊裝安
擴展
apache rewrite教程 http://coffeelet.blog.163.com/blog/static/13515745320115842755199/ http://www.cnblogs.com/top5/archive/2009/08/12/1544098.html
apache rewrite 出現死循環 http://ask.apelearn.com/question/1043
php錯誤日誌級別參考 http://ask.apelearn.com/question/6973
php開啓短標籤 http://ask.apelearn.com/question/120
php.ini詳解 http://legolas.blog.51cto.com/2682485/493917
十一週四次課
複習LAMP
十一週五次課
複習LAMP
十二週一次課
12.1 LNMP架構介紹
12.2 MySQL安裝
12.3/12.4 PHP安裝
12.5 Nginx介紹
擴展
Nginx爲何比Apache Httpd高效:原理篇 http://www.toxingwang.com/linux-unix/linux-basic/1712.html
apache和nginx工做原理比較 http://www.server110.com/nginx/201402/6543.html
mod_php 和 mod_fastcgi以及php-fpm的比較 http://dwz.cn/1lwMSd
概念瞭解:CGI,FastCGI,PHP-CGI與PHP-FPM http://www.nowamagic.net/librarys/veda/detail/1319/ https://www.awaimai.com/371.html
十二週二次課
12.6 Nginx安裝
12.7 默認虛擬主機
12.8 Nginx用戶認證
12.9 Nginx域名重定向
擴展
nginx.conf 配置詳解 http://www.ha97.com/5194.html http://my.oschina.net/duxuefeng/blog/34880
nginx rewrite四種flag http://www.netingcn.com/nginx-rewrite-flag.html http://unixman.blog.51cto.com/10163040/1711943
十二週三次課
12.10 Nginx訪問日誌
12.11 Nginx日誌切割
12.12 靜態文件不記錄日誌和過時時間
十二週四次課
12.13 Nginx防盜鏈
12.14 Nginx訪問控制
12.15 Nginx解析php相關配置
12.16 Nginx代理
擴展
502問題彙總 http://ask.apelearn.com/question/9109
location優先級 http://blog.lishiming.net/?p=100
十三週一次課
12.17 Nginx負載均衡
12.18 ssl原理
12.19 生成ssl密鑰對
12.20 Nginx配置ssl
擴展
針對請求的uri來代理 http://ask.apelearn.com/question/1049
根據訪問的目錄來區分後端的web http://ask.apelearn.com/question/920
nginx長鏈接 http://www.apelearn.com/bbs/thread-6545-1-1.html
nginx算法分析 http://blog.sina.com.cn/s/blog_72995dcc01016msi.html
十二週三次課
12.21 php-fpm的pool
12.22 php-fpm慢執行日誌
12.23 open_basedir
12.24 php-fpm進程管理
十二週四次課
複習LNMP
擴展
nginx中的root和alias區別 http://blog.csdn.net/21aspnet/article/details/6583335
nginx的alias和root配置 http://www.ttlsa.com/nginx/nginx-root_alias-file-path-configuration/
http://www.iigrowing.cn/shi-yan-que-ren-nginx-root-alias-location-zhi-ling-shi-yong-fang-fa.html 這個更詳細
十二週五次課
複習LNMP
十三週一次課
13.1 設置更改root密碼
13.2 鏈接mysql
13.3 mysql經常使用命令
擴展
mysql5.7 root密碼更改 http://www.apelearn.com/bbs/thread-7289-1-1.html
myisam 和innodb引擎對比 http://www.pureweber.com/article/myisam-vs-innodb/
mysql 配置詳解: http://blog.linuxeye.com/379.html
mysql調優: http://www.aminglinux.com/bbs/thread-5758-1-1.html
同窗分享的親身mysql調優經歷: http://www.apelearn.com/bbs/thread-11281-1-1.html
十三週二次課
13.4 mysql用戶管理
13.5 經常使用sql語句
13.6 mysql數據庫備份恢復
擴展
SQL語句教程 http://www.runoob.com/sql/sql-tutorial.html
什麼是事務?事務的特性有哪些? http://blog.csdn.net/yenange/article/details/7556094
根據binlog恢復指定時間段的數據 http://www.centoscn.com/mysql/2015/0204/4630.html
mysql字符集調整 http://xjsunjie.blog.51cto.com/999372/1355013
使用xtrabackup備份innodb引擎的數據庫 innobackupex 備份 Xtrabackup 增量備份 http://zhangguangzhi.top/2017/08/23/innobackex%E5%B7%A5%E5%85%B7%E5%A4%87%E4%BB%BDmysql%E6%95%B0%E6%8D%AE/#%E4%B8%89%E3%80%81%E5%BC%80%E5%A7%8B%E6%81%A2%E5%A4%8Dmysql
相關視頻
連接:http://pan.baidu.com/s/1miFpS9M 密碼:86dx
連接:http://pan.baidu.com/s/1o7GXBBW 密碼:ue2f
十三週三次課
14.1 NFS介紹
14.2 NFS服務端安裝配置
14.3 NFS配置選項
十三週四次課
14.4 exportfs命令
14.5 NFS客戶端問題
15.1 FTP介紹
15.2/15.3 使用vsftpd搭建ftp
十三週五次課
15.4 xshell使用xftp傳輸文件
15.5 使用pure-ftpd搭建ftp服務
擴展
vsftp使用mysql存放虛擬用戶並驗證 http://www.aminglinux.com/bbs/thread-342-1-1.html
ftp的主動和被動模式 http://www.aminglinux.com/bbs/thread-961-1-1.html
十四周一次課
16.1 Tomcat介紹
16.2 安裝jdk
16.3 安裝Tomcat
擴展
java容器比較 http://my.oschina.net/diedai/blog/271367
http://www.360doc.com/content/11/0618/21/16915_127901371.shtml
j2ee、j2se、ejb、javabean、serverlet、jsp之間關係 http://bbs.csdn.net/topics/50015576
tomcat server.xml配置詳解 http://blog.csdn.net/yuanxuegui2008/article/details/6056754
tomcat經常使用數據庫鏈接的方法 http://wjw7702.blog.51cto.com/5210820/1109263
十四周二次課
16.4 配置Tomcat監聽80端口
16.5/16.6/16.7 配置Tomcat虛擬主機
16.8 Tomcat日誌
擴展
邱李的tomcat文檔 https://www.linuser.com/forum.php?mod=forumdisplay&fid=37
JAR、WAR包區別 http://blog.csdn.net/lishehe/article/details/41607725
tomcat常見配置彙總 http://blog.sina.com.cn/s/blog_4ab26bdd0100gwpk.html
resin安裝 http://fangniuwa.blog.51cto.com/10209030/1763488/
1 tomcat 單機多實例
http://www.ttlsa.com/tomcat/config-multi-tomcat-instance/
2 tomcat的jvm設置和鏈接數設置
http://www.cnblogs.com/bluestorm/archive/2013/04/23/3037392.html
3 jmx監控tomcat
http://blog.csdn.net/l1028386804/article/details/51547408
4 jvm性能調優監控工具jps/jstack/jmap/jhat/jstat
http://blog.csdn.net/wisgood/article/details/25343845
http://guafei.iteye.com/blog/1815222
5 gvm gc 相關
http://www.cnblogs.com/Mandylover/p/5208055.html
http://blog.csdn.net/yohoph/article/details/42041729
十四周三次課
說明:有很多同窗不能一次性把實驗作成功,這是由於還不熟悉,建議至少作3遍
17.1 MySQL主從介紹
17.2 準備工做
17.3 配置主
17.4 配置從
17.5 測試主從同步
有的同窗,遇到主從不能正常同步,提示uuid相同的錯誤。這是由於克隆機器致使。
https://www.2cto.com/database/201412/364479.html
十四周四次課、五次課(1月24日、1月25日)
說明:這兩天無新課,主要是擴充知識面
注意:這兩天的任務,須要回專貼。須要大家經過看這些東西總結成本身的心得。 不能照搬,必需要本身理解,能看多少就看多少,看不完也沒有關係,但必定要去理解。
不停庫不鎖表在線主從配置 http://seanlook.com/2015/12/14/mysql-replicas/
mysql主從常見問題 http://www.10tiao.com/html/706/201603/403220961/1.html
mysql主從延遲 http://f.dataguru.cn/thread-461916-1-1.html
深刻探究主從延遲 http://ningg.top/inside-mysql-master-slave-delay/
mysql主從不一樣步如何作 http://www.jb51.net/article/33052.htm
mysql 主主 http://www.cnblogs.com/ygqygq2/p/6045279.html
mysql-proxy 實現讀寫分離 http://my.oschina.net/barter/blog/93354
mycat實現讀寫分離 http://www.th7.cn/db/mysql/201708/250280.shtml
atlas相關 http://www.oschina.net/p/atlas
mysql一主多從 http://blog.sina.com.cn/s/blog_4c197d4201017qjs.html
mysql環形主從 http://ask.apelearn.com/question/11437
cobar實現分庫分表 http://blog.csdn.net/huoyunshen88/article/details/37927553
mysql分庫分表方案 http://my.oschina.net/ydsakyclguozi/blog/199498
mysql架構演變 http://www.aminglinux.com/bbs/thread-8025-1-1.html
MHA架構 http://www.dataguru.cn/thread-457284-1-1.html
比較複雜的mysql集羣架構 http://ask.apelearn.com/question/17026
十五週一次課
18.1 集羣介紹
18.2 keepalived介紹
18.3/18.4/18.5 用keepalived配置高可用集羣
擴展
heartbeat和keepalived比較http://blog.csdn.net/yunhua_lee/article/details/9788433
DRBD工做原理和配置 http://502245466.blog.51cto.com/7559397/1298945
mysql+keepalived http://lizhenliang.blog.51cto.com/7876557/1362313
十五週二次課
18.6 負載均衡集羣介紹
18.7 LVS介紹
18.8 LVS調度算法
18.9/18.10 LVS NAT模式搭建
擴展
lvs 三種模式詳解 http://www.it165.net/admin/html/201401/2248.html
lvs幾種算法 http://www.aminglinux.com/bbs/thread-7407-1-1.html
關於arp_ignore和 arp_announce http://www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html
lvs原理相關的 http://blog.csdn.net/pi9nc/article/details/23380589
十五週三次課
18.11 LVS DR模式搭建
18.12 keepalived + LVS
擴展
haproxy+keepalived http://blog.csdn.net/xrt95050/article/details/40926255
nginx、lvs、haproxy比較 http://www.csdn.net/article/2014-07-24/2820837
keepalived中自定義腳本 vrrp_script http://my.oschina.net/hncscwc/blog/158746
lvs dr模式只使用一個公網ip的實現方法 http://storysky.blog.51cto.com/628458/338726
十五週四次課
19.1 Linux監控平臺介紹
19.2 zabbix監控介紹
19.3/19.4/19.6 安裝zabbix
19.5 忘記Admin密碼如何作
十五週五次課
19.7 主動模式和被動模式
19.8 添加監控主機
19.9 添加自定義模板
19.10 處理圖形中的亂碼
19.11 自動發現
擴展
zabbix監控交換機(思科) http://tryrus.blog.51cto.com/10914693/1789847
zabbix遠程執行命令 http://www.ywnds.com/?p=6610
zabbix分佈式部署 http://sfzhang88.blog.51cto.com/4995876/1364399
zabbix監控tomcat(版本有點老,你們只須要參考步驟,不能照搬) http://www.jianshu.com/p/e3825a885a1b http://www.fblinux.com/?p=616
十六週一次課
19.12 添加自定義監控項目
19.13/19.14 配置郵件告警
19.15 測試告警
19.16 不發郵件的問題處理
十六週二次課
20.1 shell腳本介紹
20.2 shell腳本結構和執行
20.3 date命令用法
20.4 shell腳本中的變量
十六週三次課
20.5 shell腳本中的邏輯判斷
20.6 文件目錄屬性判斷
20.7 if特殊用法
20.8/20.9 case判斷
十六週四次課
20.10 for循環
20.11/20.12 while循環
20.13 break跳出循環
20.14 continue結束本次循環
20.15 exit退出整個腳本
擴展
select用法 http://www.apelearn.com/bbs/thread-7950-1-1.html
十六週五次課
20.16/20.17 shell中的函數
20.18 shell中的數組
20.19 告警系統需求分析
十七週一次課
20.20 告警系統主腳本
20.21 告警系統配置文件
20.22 告警系統監控項目
十七週二次課
20.23/20.24/20.25 告警系統郵件引擎
20.26 運行告警系統
十七週三次課
20.27 分發系統介紹
20.28 expect腳本遠程登陸
20.29 expect腳本遠程執行命令
20.30 expect腳本傳遞參數
十七週四次課
20.31 expect腳本同步文件
20.32 expect腳本指定host和要同步的文件
20.33 構建文件分發系統
20.34 批量遠程執行命令
擴展:
shell多線程 http://blog.lishiming.net/?p=448
十七週五次課
複習shell腳本
擴展: 給你提供一本電子書 連接:http://pan.baidu.com/s/1mg49Taw 密碼:yk4b shell習題作一下 http://www.apelearn.com/study_v2/chapter15.html#shll