跟阿銘學Linux習題答案


第一章:走進Linux

1、簡述它的發展歷史,列舉幾種代表性的發行版

Linux之前是Unix,由於Unix收費昂貴,so,Richard Stallman 發起了開發自由軟件的運動,並成立了自由軟件基金會(Free Software Foundation,FSF)和GNU 項目和協議GPL(是GNU General Public License)。之后一個大學的教授(名字為AndrewTanenbaum,譚邦寧)的Minix。經過對minix改造,芬蘭赫爾辛基大學的一位計算機系名為Linus Torvalds 的學生開發了Linux ;

 

2、請簡述GNU和GPL兩個概念,列舉幾種GPL協議發型的軟件;
FSF(Free Software Foundation)是自由軟件基金會,GNU 是FSF主要的項目。
GNU 的全稱為GNU’s not unix, 意思是“ GNU 不是UNIX”。
GNU計划,它的目標是創建一套完全自由的操作系統;
它要求軟件以源代碼的形式發布,並規定任何用戶能夠以源代碼的形式將軟件復制或發布給別的用戶。
GPL:GNU通用公共許可證(GNU General Public License)
簡單地理解,GPL 許可的核心是保證任何人有共享和修改自由軟件的自由,任何人有權取得、修改和重新發布自由軟件 的源代碼權利,但都必須同時給出具體更改的源代碼。
列舉軟件:vi、gcc等

 

3、列舉流行的Linux版本,說明特點
Debian(1993) → ubuntu(2004)
Slackware(1993)→suse(1994)
redhat(1994)→rhel(redhat企業版[2002]) 注:2002后之前的redhat變為Fedora,指rhel的實驗版
sentos(2003)→由redhat改過來的,免費,可以使用yum

 

第二章:初次安裝使用

1、32和64位操作系統區別?如何查看?

那就是64 位操作系統的CPU 運算速度更快,支持更大的內存使用,可以發揮更大更好的硬件性能,提升業務工作效率。
查看命令:uname -m (uname -a可以查看內核版本)也可用uname -r一起查看

2、swap的作用?如何划分;
要有一個swap(交換)分區,它的作用相當於Windows 里的虛擬內存,swap 分區的大小一般為物理內存容量的1.5 倍(內存<8GB)。但當系統物理內存大於8GB ,
則swap 分區配置8 ~ 16GB 即可,太大無用,浪費磁盤空間。swap 分區不是必需的,但是大多數情況應該設置,個別企業的數據庫應用場景不分swap。

3、查資料了解BootLoader、grub的概念和作用

Bootloader是嵌入式系統在加電后執行的第一段代碼,對CPU和硬件的初始化,再將操作系統映像或固化的嵌入式應用程序裝在到內存中然后跳轉到操作系統所在的空間,啟動操作系統運行。

grub是一個多重操作系統啟動管理器。用來引導不同系統,如windows,linux。


4、如何在安裝系統時給grub設置密碼

安裝界面勾選設置密碼,然后設置


5、在安裝Linux時你是如何分區的?

無特殊要求的話
200m的/boot、swap為真實內存的1.5倍(真實內存超過4g都分8g 的swap也可)、/分區分20G,其他都給/data

 

第三章 遠程登錄

1、Linux連接必須要用到sshd服務,默認監控什么端口,如何自定義sshd端口;
默認為22,sshd是系統自啟動服務
修改/etc/ssh這個目錄下面 sshd_config 這個文件中 port字段

2、常用的遠程工具有?
xshell、secureCRT、Putty等

3、網卡配置文件在哪?默認配置需要修改什么?
/etc/sysconfig/network-scripts/ifcfg-***
DEVICE=eth0
HWADDR=00:0C:29:5D:A8:83
TYPE=Ethernet
UUID=48a3ab45-edc3-434f-b04b-13af94863772
ONBOOT=yes (需要修改為yes,代表隨系統啟動)
NM_CONTROLLED=yes
#BOOTPROTO=dhcp
BOOTPROTO=static
IPADDR=10.0.0.254
NETMASK=255.255.255.0
GATEWAY=10.0.0.254


4、網卡重啟命令
service network restart
systemctl restart network.service

5、如何臨時關閉selinux?如何永久關閉?
setenforce 0
vi /etc/selinux/config 修改為SELINUX=disabled

6、查看Linux有幾塊網卡用什么命令?查看網卡ip用什么命令?
#lspci |grep -i eth
查看ip:ifconfig、ip addr
7、我們為什么要使用密匙登錄Linux呢?
為了安全,將密碼加密,用密碼加密的私匙解密公匙登錄。

 

 

第四章 文件和目錄管理


課后習題:
1、命令rmdir -p用來刪除一串目錄,比如rmdir -p /tmp/test/1/2/3 。如果2下除了3還有4,4下還有5,是否可以成功刪除?用rmdir -p刪除不存在的目錄時會不會報錯?是否能成功刪除:不能,因為3不是空的

# rmdir -p /tmp/test/1/2/3

rmdir: failed to remove directory `/tmp/test/1/2': Directory not empty

刪除不存在目錄會報錯。
# rmdir -p lalala
rmdir: failed to remove `lalala': No such file or directory

2、刪除一個目錄或文件時,在刪除之前會詢問y/n,如果直接回車會刪除嗎?輸入其他字符的效果是?
都相當於輸入了n的效果。

3、如何創建一串目錄?
用mkdir -p

4、使用mv命令,如果目標文件不是目錄,但該文件存在會怎樣?
# mv 1 3
mv: overwrite `3'?
會提示是否覆蓋

5、使用less命令查看文件/etc/passwd下共出現了幾個root?按哪個鍵可以上下逐行移動?
/root可以定位到第一個root,按n跳到下一個,
按j、k上下移動

6、為什么目錄必須要有x權限才能查看目錄下的文件呢?
按要求操作時確實有問題,提示權限錯誤,因為打開目錄就是在執行目錄。

7、Linux系統中默認的目錄權限?文檔權限?分別用3個數字表示。如果umask=001,那么用戶默認創建的目錄和文件的權限是?
首先要說默認的umask為0022,所以默認的目錄為755,普通文件644。目錄是由777-022得到的,文件是666-022(這個不能數字減,因為有些umask為033,直接用數字減會導致錯誤,正確的方法見下面的例子)
umask001,這時目錄權限776;文件權限,666

# umask 001

# mkdir test001
# touch test001file

#ll drwxrwxrw
- 2 root root 6 May 26 12:55 test001 -rw-rw-rw- 1 root root 0 May 26 12:55 test001file

 

8、用find找出/var目錄下最近一天內變化的文件,再用find找出/root目錄下一個小時內變更的文件;
介紹三個參數:-atime +n/-n 表示訪問或執行時間
-ctime +n/-n 表示寫入更改inode
-mtime +n/-n 表示內容修改
find /var -type f -ctime -1
find /root -type f -mmin -60(貌似不能用小時,這里用-mmin分鍾)

9、用find找出/etc目錄下一年沒有變更過的文件
find /etc/ -type f ! -mtime -365 (百度的)
find /etc/ -type f -mtime +365(我寫的)

10、為什么硬鏈接不能鏈接目錄?硬鏈接的文件是否占用空間大小?硬鏈接可否跨分區?
規定: 因為每個目錄下面都會有一個.和..也就是說每個目錄下面的子目錄肯定會有它本身和它上一級目錄,那么一旦設置了硬鏈接則會造成一種混亂,設置會導致死循環。
硬鏈接的文件並不會占用空間大小,它只是復制了該文件的一份inode信息;
硬鏈接文件是不可以跨分區創建的。(因為每個分區都有不同的iNode表)

11、Linux系統里,分別用什么符號表示純文本、二進制、目錄、鏈接文件、塊設備以及字符設備?
-:普通文件
d:目錄
l:鏈接
b:塊設備
c:設備文件
s:套接字文件

12、如何把dira目錄以及該目錄下的所有文件和目錄所有者修改為 user1、所屬組為users?
chown -R user1:user dira

13、修改dirb目錄的權限,使其所有者可讀、寫、執行,所屬組可讀且可執行,其他用戶不可讀、寫和執行用什么命令?
chmod 750 dirb

14、如何使文件只能寫不能刪除?如何使文件不能刪除、重命名、設定鏈接、寫入和新增數據?
chattr +a file 文件只能寫不能刪除
chattr +i file 文件不能被刪除、重命名、設定鏈接接、寫入、新增數據

15、Linux下的一個點"."和兩個點"..",分別表示?
當前目錄和上級目錄

16、cd - 表示?
切換到上次所在目錄

17、ls -l命令輸出第二列的意思是?如果一個目錄的第二列為3,那么這個3是如何得到的?
第二列數值該文件占用的inode
如果一個目錄的這列為3,我們可以通過使用 ls -al dir/ |grep ^d| wc -l 這條命令得到 

18、如果系統中沒有locate命令,我們需要安裝哪個軟件包?初次使用locate會報錯can not open '/var/lib/mlocate.db':No such file or directory我們需要怎么做?

沒有locate命令,需要安裝mlocate包,yum install -y mlocate, 初次使用報錯,是因為對應的數據庫文件還沒有生成,手動生成的命令是:updatedb

19、復制一個文件如果目標文件存在會提示是否覆蓋,如何做就不詢問了?
使用cp的絕對路徑 /bin/cp a.txt b.txt 因為cp可能有alias -i

20、加入一個文件一直在增加,如何動態的顯示這個文件的內容?
tail -f 文件名

21、如何查看當前用戶的目錄?
echo $HOME

22、假如一個目錄任何人可寫,怎么做到只有所有者才可更改?
chmod o+wt dir

23、簡述軟硬鏈接區別?
軟連接可以理解為,源文件的快捷方式,軟連接文件記錄的是源文件的路徑,占用空間非常小。當把源文件刪除后,那么軟連接文件也就變成一個壞文件了,不能使用了。
硬鏈接和源文件的inode信息是一模一樣的,可以說硬鏈接文件只是復制了一份源文件的inode信息,在我們看來硬鏈接文件和源文件沒有什么區別,刪除任何一個文件對方都不受影響,唯一的是少了一份inode,硬鏈接只能在同一個分區下創建,而軟連接不受限制。硬鏈接文件和源文件雖然看起來像是兩個文件,但是只占用一個文件的磁盤空間。

24、cat a.txt會更改a.txt的什么時間?chmod 644 a.txt會更改它的什么時間?vim呢?直接touch呢?
cat 會更改atime(訪問時間)
chmod 會更改ctime
vim 更改 atime 和 mtime 、ctime
touch 更改 atime 和 mtime 、ctime

 

第五章 系統用戶和用戶組管理

課后習題:
1、查看/etc/shadow第一行root賬號的第三個字段(:分隔)中的數字,計算這個數字是怎么得到的
答:shadow文件的第三個字段表示最近修改密碼的日期,為距離1970年1月1日的天數,注意1970年1月1日為1,然后經過幾天就加幾。關於/etc/shadow文件每個字段的含義請參考http://www.cnblogs.com/zhousir1991/archive/2011/07/25/2116520.html

2、寫出一個您認為很強悍的密碼.
答:LcY$&5jH%@*bGsN

3、查資料搞明白 /sbin/nologin 和 /bin/false 的區別,您知道他們用在什么場合嗎?

答:這兩個Shell都有禁止用戶登錄的功能,如果用戶啟動時的Shell被設置成之一都無法登錄系統。但是/bin/false相對更加嚴格,禁止一切服務,將用戶的shell設置為/bin/false,用戶會無法登錄,並且不會有任何提示。而/usr/sbin/nologin相對禮貌一些,將用戶的shell設置為/usr/sbin/nologin會禮貌的向用戶顯示一條信息,並拒絕用戶登錄:This account is currently not available。/usr/sbin/nologin可以用於FTP服務上,不讓用戶登錄但是仍可以提供FTP服務

4、請想一想,當我們創建一個新的賬號時,系統會修改哪幾個文件呢?

答:用戶密碼文件:/etc/passwd
加密密碼文件:/etc/shadow
用戶組文件:/etc/group
用戶組密碼文件:/etc/gshadow
創建home\user家目錄

5、假如我們已經創建了一個普通用戶user1, 默認這個用戶的家目錄為/home/user1, 做實驗證明能否直接修改/etc/passwd配置文件中user1的家目錄那個字段而改變user1的家目錄呢? (提示: 您可以使用 “cd ~ ”命令來進入當前用戶家目錄的方法來驗證)

答:[root@CentOS6 ~]# useradd user1
[root@CentOS6 ~]# su - user1
[user1@CentOS6 ~]$ cd ~
[user1@CentOS6 ~]$ pwd
/home/user1
[user1@CentOS6 ~]$ logout
[root@CentOS6 ~]# mkdir /tmp/rachy
[root@CentOS6 ~]# vi /etc/passwd
修改passwd文件中user1的配置行中/home/user1為/tmp/rachy,保存退出
[root@CentOS6 ~]# su - user1
-bash-4.1$ cd ~
-bash-4.1$ pwd
/tmp/rachy
-bash-4.1$ logout
[root@CentOS6 ~]#
可見,修改passwd配置文件可以直接修改用戶的家目錄。

6、/etc/passwd 文件以":"為分隔符,第三和第四個字段表示什么含義?如果把某一行的第三個字段改為‘0‘ 會發生什么?

答:第三個和第四個字段分別表示用戶id和組id,如果把某一行的第三個字段改為0,則該用戶變成root用戶。關於/etc/passwd文件每個字段的含義請參考

http://os.51cto.com/art/201003/187533.htm。

7、先新增一個組group11,然后再新增一個賬號user12, 使該賬號所屬組為剛剛新增的組。

答:[root@CentOS6 ~]# groupadd group11
[root@CentOS6 ~]# tail -2 /etc/group
user1:x:500:
group11:x:501:
[root@CentOS6 ~]# useradd -g group11 user12
[root@CentOS6 ~]# id user12
uid=501(user12) gid=501(group11) 組=501(group11)

8、如果刪除一個組時報錯: “cannot remove the primary group of user ‘aming‘” 這是什么意思?如何解決該問題呢?

答:刪除用戶組報錯說明該用戶組非空,可以先根據需要將里面的用戶刪除或者移到別的組,然后刪除空了的組。

9、如何刪除某個賬戶時,連帶這個賬戶的家目錄一並刪除?

答:userdel -r username 使用-r選項連帶家目錄一並刪除。

10. 如果您的Linux沒有命令"mkpasswd", 需要安裝哪個包?

答:需要安裝expect包,使用命令 yum install -y expect 進行安裝。

11. 普通賬戶可以修改自己的密碼嗎?

答:可以,需要輸入自己的舊密碼進行身份驗證,驗證通過即可修改。

12. 使用su時,后面加了 ‘-‘ 表示什么含義?

答:su user1 只切換到用戶user1,不切換環境變量,仍然是root用戶的環境變量;su - user1 切換到用戶user1,並切換到用戶user1的環境變量。

13. sudo的作用是什么呢?

答:使普通用戶臨時擁有root用戶的權限,通常用來執行某些命令,不需要知道root密碼,只需要知道自己的密碼即可,提高安全性。

14. 創建系統賬號時,帳戶名要符合什么樣的規范?

答:可以是大小寫字母、數字、減號(不能出現在首位)、點以及下划線,其他字符不合法。雖然用戶名中可以出現點,但不建議使用,尤其是首位為點時,另外減號也不建議使用,因為容易造成混淆。

15. Linux系統里,你知道最大uid能有多大嗎?默認創建一個普通帳號的uid最小是多少?

答:普通用戶的uid最大為65535,目前的 linux 核心 (2.6.x 版)已經可以最大支持到 4294967295 (2^32-1) 。默認普通賬號的最小uid為500。

16. 請思考,一個用戶可以同時屬於多個用戶組嗎?如果可以,如何把一個用戶加入到另外的組里? 同時加入多個組怎么做?

答:一個用戶可以同時屬於多個組;使用-g選項可以指定要加入的組;同時加入多個組可以使用命令usermod -g grp1,grp2,grp3 username。

 

第六章 磁盤管理

課后習題:
1. vi 與 vim 有什么區別呢,它們之間有什么關系?

Vim是從Vi發展出來的一個文本編輯器,可以看作是vi的升級版。Vim的主要功能與原始的Vi完全兼容,與Vi不同的是,vi不會顯示顏色,而vim會根據文件內容顯示不同顏色,方便閱讀和編輯。而且Vim具有代碼補完、編譯及錯誤跳轉等方便編程的豐富功能,在程序員中被廣泛使用。( Vim和Emacs並列成為類Unix系統用戶最喜歡的編輯器。)

2. 如何查看當前系統vim的版本?

vim --version

3. 如果想把文檔中出現的全部"abc"替換成"def"怎么做?又如何只替換每行中出現的第一個"abc"呢?

:1,$s/abc/def/g or :%s/abc/def/g

:1,$s/abc/def

 

4. 當搜索某個關鍵詞時,光標所定位的關鍵詞所在的行是如何決定的?如果想從當前關鍵詞移動到下一個關鍵詞怎么操作?移動到上一個關鍵詞又怎么操作?

需要看vim進入文檔時,光標所在位置,定位關鍵詞是依據於光標所在的位置。

如果使用/搜索關鍵詞,則按‘n‘向下移動,按shift + n 向上,如果使用?搜索關鍵詞,和前者正好相反。

 

5. 當編輯完文檔后,按ESC進入命令模式,輸入命令 :x 會怎么樣?

輸入命令:x后也能保存文件並退出,有點類似:wq ,但兩者有區別。

:x #寫入文件並退出。僅當文件被修改時才寫入,並更新文件修改時間,否則不會更新文件修改時間。

:wq #強制性寫入文件並退出。即使文件沒有被修改也強制寫入


6. 在一般模式下如何快速的把光標快速的向右或向左移動10個字符?

向右:10空格

向左:10l

 

7. vim + filename 表示什么含義, vim +10 filename 將會發生什么?

vim + 進入文檔后,定位到最后一行

vim +10 進入文檔后,光標定位到第10行

 

8. 用vim打開一個文檔后,我想讓光標跳到第20行,怎么做?跳到最后一行怎么做?

跳到20行,輸入20G

最后一行,輸入G


9. vim 打開文檔后,默認是不顯示行號的,如何做讓它顯示行號?

:set nu

 

10. vim打開文檔后,我想把20-50行中的第一個‘abc‘ 替換為 ‘efg‘ 怎么操作?如果是想替換所有呢?

:20,50s/abc/efg 只替換第一個

:20,50s/abc/efg/g 替換全部

 

11. vim打開文檔后,如何快速刪除前100行?

先按‘gg‘ 到第一行,然后輸入100d

 

12. vim打開文檔后,如何復制一行,並粘貼到第20行的下面?

定位到要復制的行,然后輸入yy,然后輸入20G,再輸入p

 

第七章 壓縮與解壓

課后習題:
1. gzip, bzip2 能否直接壓縮目錄呢?
不能直接壓縮目錄

2. 請快速寫出,使用gzip和bzip2壓縮和解壓一個文件的命令。
gzip 1.txt
gzip -d 1.txt.gz
bzip2 1.txt
bzip2 -d 1.txt.bz2

3. tar 在打包的時候,如果想排除多個文件或者目錄如何操作?
tar cvf 123.tar --exclude a.txt --exclude b.txt 123/

4. 請實驗,如果不加 "-" 是否正確, 如 tar zcvf 1.tar.gz 1.txt 2.txt ?
不加 - 一樣沒有問題

5. 如何使用tar打包和解包 .tar.gz, .tar.bz2 的壓縮包?
tar zcvf 1.tar.gz 1
tar zxvf 1.tar.gz
tar jcvf 1.tar.bz2 1
tar jxvf 1.tar.bz2

6. 找一個大點的文件,使用tar 分別把這個文件打成 .tar.gz和.tar.bz2 壓縮包,比較一下哪個包會更小,從而得出結論,是gzip壓縮效果好還是bzip2壓縮效果好?
理論上.tar.bz2的壓縮包小一些,但個別時候,有相反的情況。但大多時候bzip2壓縮效果好。

7. 使用tar打包並壓縮的時候,默認壓縮級別為幾? 想一想如何能夠改變壓縮級別呢?(提示,tar本身沒有這個功能哦,可以嘗試拆分打包和壓縮)
tar打包壓縮時,是按照gzip和bzip2的默認壓縮級別來的,gzip工具默認壓縮級別為6,bzip2默認壓縮級別為9.
改變默認壓縮級別可以這樣來做,首先tar打包,然后再使用gzip或者bzip2壓縮工具來壓縮,壓縮的時候指定壓縮級別。如: tar cvf 1.tar 123/; gzip -2 1.tar

 

第八章 文檔的壓縮與打包

課后習題:

1.gzip命令和bzip2命令能否直接壓縮目錄呢?

答:不可壓縮目錄,會報錯

2. 請快速寫出gzip和bzip2壓縮和解壓一個文件的命令

答:gzip 1.txt ;gzip -d 1.txt.gz
bzip2 1.txt ;bzip2 -d 1.txt.bz2

3. tar在打包時想排除多個文件或目錄怎么操作?

答:tar cvf xxx.tar --exclude filename

4. 請實驗如果不加-是否正確,如tar zcvf 1.tar.gz 1.txt

答:依然正常壓縮,故有無-都沒關系

5. 如何使用tar打包和解包格式為.tar.gz和.tar.bz2格式的壓縮包?

答:-z用gzip壓縮;-j用bz2壓縮;-x表示解壓;-c表壓縮
tar zcvf 1.tar.gz 1

tar zxvf 1.tar.gz

tar jcvf 1.tar.bz2 1

tar jxvf 1.tar.bz2


6. 找個大點文件,用.tar.gz和.tar.bz2格式的壓縮比較一下哪個包更小,並且判斷是gzip壓縮效果好還是bzip2壓縮效果好

答:理論上.tar.bz2的壓縮包小一些,但個別時候,有相反的情況。但大多時候bzip2壓縮效果好。

7.使用tar打包並壓縮時,默認壓縮級別是幾?如何指定級別?。

答:tar打包壓縮時,是按照gzip和bzip2的默認壓縮級別來的,gzip工具默認壓縮級別為6,bzip2
默認壓縮級別為9.
改變默認壓縮級別可以這樣來做,首先tar打包,然后再使用gzip或者bzip2壓縮工具來壓縮,壓縮的時候指定壓縮級別。如: tar cvf 1.tar 123/; gzip -2 1.tar

 

第九章 安裝rpm包或源碼包

課后習題:

1.區分rpm與-qi、-qf、-ql和-qa這四個不同組合的作用。
答:rpm -qi 包名 查看一個包的詳細信息

rpm -qf 文件名 查看一個文件是由哪個包安裝的

rpm -ql 包名 查看一個包安裝了哪些文件

rpm -qa 查看系統中安裝了哪些包


2. rpm -qi 后面如果跟一個未安裝的包名,會顯示什么信息?

答:包名 is not installed

3. 請找出 vim 這個命令是由哪個rpm包安裝來的?

答:rpm -qf `which vim`

4. 使用rpm安裝和卸載某個包的命令是什么?

答:安裝:rpm -i 包名 或 rpm --install 包名

卸載:rpm -e 包名 或 rpm --erase 包名

5. rpm安裝某個包有依賴關系時,如何忽略依賴關系,強制安裝該包?

答:rpm -i --nodeps 包名

6. 如何使用rpm升級一個包?

答:rpm -Uvh 包名

7. 使用yum搜索包含關鍵詞 "tidy" 的rpm包,並安裝,安裝后再使用yum將其卸載。

答:yum list |grep tidy

yum install -y tidy

yum remove tidy

8. 如何使用yum來下載一個rpm包?

答:yum install -y yum-plugin-downloadonly #安裝下載插件

yum install 包名 --downloadonly --downloaddir=/tmp/ #僅下載一個沒安裝的包vte到目錄/tmp/下

yum reinstall 包名 --downloadonly --downloaddir=/tmp/ #下載一個安裝過的包

9. 請到php的官方網站下載一個php的源碼包,動手試試編譯安裝它?(php官網地址 http://www.php.net/)

答:下載源碼包php-7.1.0.tar.gz

tar -zxvf php-7.1.0.tar.gz

cd php-7.1.0

./configure --prefix=/usr/local/php7

報錯:configure: error: xml2-config not found. Please check your libxml2 installation.

yum list |grep xml2

yum install -y libxml2*

./configure --prefix=/usr/local/php7 配置

echo $? 返回0表示配置成功

make 編譯

echo $? 返回0表示編譯成功

make install 安裝

echo $? 返回0表示安裝成功

 

10. 查資料搞明白 yum upgrade 以及 yum update 兩者的區別?它們在什么情況下使用?

答:yum --help看到:

update 更新系統中的一個或多個軟件包

upgrade 更新軟件包同時考慮軟件包取代關系

yum upgrade與yum update都能更新系統的所有軟件包,不同的就是upgrade相當一次大規模的升級,連帶了舊的要淘汰的包也升級。update 和 upgrade 的側重點不一樣,update主要是使軟件達到最新,但upgrade更側重的是軟件功能得到一個很大的提升,區別於頻繁的發布最新的補丁。upgrade不改變軟件設置和系統設置,系統版本升級,內核不改變;update改變軟件設置和系統設置,系統版本內核都升級。

yum upgrade : 用於大規模的版本升級,更新Linux系統和整個軟件版本

yum update : 用於安裝補丁文件,更新內核和軟件包到最新

 

11. 如何查看Linux系統中(CentOS)是否安裝過某個包?

答:yum list installed | grep 包名 或者 rpm -qa | grep 包名

 

12. ./configure 完成后,並不知道到底有沒有成功,用什么命令可以驗證呢?

答: 使用“echo $?”命令查看上條命令執行是否成功,返回碼為“0”表示成功,非零表示出錯。

 

13. 如果在./configure 這一步出現這樣的錯誤"configure: error: no acceptable C compiler found in $PATH" 我們該怎么辦?

答:表示在當前用戶的環境變量$PATH指示的路徑中沒有找到可用的C編譯器,需要安裝gcc :

yum install -y gcc

 

14. 有時,你忘記某個編譯參數是如何寫的,你怎么辦?

答:查看幫助文檔,README,INSTALL,CONFIGURE等,或者使用./configure --help

 

15. 如何使用光盤構建yum倉庫?

答:mount /dev/cdrom /mnt/

cd /etc/yum.repos.d       切換到配置文件夾下

mv CentOS-Base.repo CentOS-Base.repo.bak    不使用網絡yum源

vim CentOS-Media.repo 編輯本地配置文件CentOS-Media.repo

修改其內容如下:

[local_cdrom]                           //為yum名,可以自定義,指定使用yum時用到

name=cd

baseurl=file:///mnt/                        //掛載點目錄

gpgcheck=0

enabled=1

#gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6~

Esc:wq

yum list 右側的名字變成了local_cdrom

yum grouplist 查看本地yum可用的包

LANG=en 切換到英文

yum groupinstall -y "Khmer Support" 從制作好的本地yum源安裝一個語言套件

 

第十章 shell基礎知識

課后習題:
1. 設置環境變量 HISTSIZE , 使其能夠保存10000條命令歷史。

答: vim /etc/profile,搜索到HISTSIZE,將1000改為10000,然后保存退出,再執行 source /etc/profile使其生效。

[root@centos6 ~]# echo $HISTSIZE

1000

[root@centos6 ~]# HISTSIZE=10000 #臨時修改

[root@centos6 ~]# echo $HISTSIZE

10000

 

2. 為什么如果這樣設置PS1 (PS1="[\u@\h \W]\$ ") 顯示的結果和我們預想的不一樣,那要如何設置才能恢復原來默認的?

答: Shell中雙引號保留原有字符的特殊含義,單引號可以去掉原有字符的特殊含義。所以我們有兩種改法:

(1)PS1="[\u@\h \W]\\$ "

(2)PS2=‘[\u@\h \W]\$ ‘

 

3. 想辦法把當前目錄下的文件的文件名中的小寫字母全部替換為大寫字母。

答:使用腳本來完成該目標:

[root@centos6 ~/test 01:04 #10]# vim lower2Upper.sh

#!/bin/sh
for i in `ls`
do
    mv $i `echo $i |tr ‘[a-z]‘ ‘[A-Z]‘`
done

 

[root@centos6 ~/test 01:04 #10]# /bin/sh lower2Upper.sh

 

4. 使用sort以":"為分隔符,對/etc/passwd文件的第5段排序。

答:sort -t: -k5 -n /etc/passwd #按第5段排序

 

5. 使用cut以":"為分隔符,截出/etc/passwd的第三段字符。

答:cut -d: -f3 /etc/passwd #截出第三段

 

6. 簡述這幾個文件的作用: /etc/profile, /etc/bashrc, .bashrc, .bash_profile.

答:這幾個都是配置文件。

/etc/profile系統級的配置文件,其中變量對所有用戶都有效;

/etc/bashrc系統級的bash變量配置文件,任何用戶運行bash則會讀取其中內容。

.bashrc:用戶級的bash相關變量配置文件,只對當前用戶有效,無需登錄,主要通過該用戶運行命令行就會讀取該文件。

.bash_profile用戶級的變量配置文件,只對當前用戶生效,在用戶登錄后才讀取。

 

7. export 的作用是什么?

答:聲明一個變量,使其進入子shell后也生效

 

8. linux下自定義變量要符合什么樣的規則呢?

答:自定義變量的格式為 varname=value, 等號兩邊不能有空格;變量名只能由字母、數字和下划線組成,且不能以數字開頭;原則上自定義變量要小寫,不能與系統系統變量、函數名、關鍵字等相同;當變量內容帶有特殊字符(如空格)時,需要加上單引號;變量內容中本身帶有單引號,需要用到雙引號;如果變量內容中需要用到其他命令運行結果則可以使用反引號;

 

9. 如何把要運行的命令丟到后台跑?又如何把后台跑的進程給調到前台?

答:運行之前,可用“命令 &”直接在后台運行;正在運行的命令,可以使用jobs查看其PID,然后使用"bg PID"命令將其調到后台運行;也可以使用“fg PID”將其調到前台運行。
也可以用jobs查到jobs id 用 fg id 或bg id

 另:Ctrl +z 暫停進程

 

10. 列出當前目錄下以"test"開頭的文件和目錄。

答:ls -ld test*

 

11. 如何把一個命令的輸出內容不僅打印到屏幕上而且還可以重定向到一個文件內?

答:ls -ld test* |tee ls.log

 

12. 假如有個命令很長,我們如何使用一個簡單的字符串代替這個復雜的命令呢?請舉例說明。

答:可以使用別名alias:alias ls=‘ls --color=auto‘;

也可以使用變量:myls=‘ls --color=auto‘,調用時只需加上$符即可:$myls

 

13. 我如何實現這樣的功能,把一條命令丟到后台運行,而且把其正確輸出和錯誤輸出同時重定向到一個文件內?

答:vmstat 1 > /tmp/1.log 2>&1 &
shell上:
0表示標准輸入
1表示標准輸出
2表示標准錯誤輸出
> 默認為標准輸出重定向,與 1> 相同
2>&1 意思是把 標准錯誤輸出 重定向到 標准輸出.
&>file 意思是把 標准輸出 和 標准錯誤輸出 都重定向到文件file中


14. 如何按照大小(假如按照10M)分隔一個大文件,又如何按照行數(假如10000行)分隔?

答:split -b 10M filename

split -l 10000 filename

 

15. 做實驗,搞明白 ; && || 這三個符號的含義。

答:(1);結束一條命令,可以用來將多條命令寫在一行中

(2)&&邏輯與,前面語句為真才執行后面語句,前面為假不執行后面語句

(3)||邏輯或,前面語句為假才執行后面語句,前面為真不執行后面語句

 

16. 如果只想讓某個用戶使用某個變量如何做?

答:可以以該用戶身份編輯其家目錄下的.bashrc文件,加入一行 var=10,保存退出后執行

source .bashrc使其立刻生效即可。

 

17. 使用哪個命令會把系統當中所有的變量以及當前用戶定義的自定義變量列出來?

答:env只能列出系統變量,set不僅能列出系統變量,還能列出用戶變量。

 

第十一章 正則表達式

 

課后習題:
1. 如何把 /etc/passwd 中用戶uid 大於500 的行給打印出來?
awk -F ':' '$3 > 500' /etc/passwd

2. awk中 NR,NF兩個變量表示什么含義?awk -F ':' '{print $NR}' /etc/passwd 會打印出什么結果出來?
NR表示行號
NF是總共有多少段
NR表示行數,NF表示一共有多少段
awk -F ':' '{print $NR}' /etc/passwd 會依次打印對應的行數的段,第一行打印第一段,第二行打印第二段... 到了最后就打印空行了

3. 用grep把1.txt文檔中包含'abc'或者‘123’的行過濾出來,並在過濾出來的行前面加上行號.
grep -E -n 'abc|111' test.txt

4. grep -v '^$' 1.txt 這樣會過濾出哪些行?
會把非空行過濾出來

5. '.' '*' 和 '.*' 分別表示什么含義?'+'和'?'表示什么含義,這五個符號是否可以在grep中使用,是否可以在egrep、sed以及awk中使用?
'.':表示一個任意的字符;
'*':表示前面緊鄰的那個字符有零個或多個,即前面緊鄰的那個字符可以不存在,也可以有多個;
'.*':表示零個或多個的任意字符,包括空行;
'+':表示前面緊鄰的那個字符有一個或多個;
'?':表示前面緊鄰的那個字符有零個或一個;
grep和sed可以使用'.' 、 '*' 和 '.*',但是不能使用'+'和'?' egrep和awk全部可以使用。

 

6. grep 里面用到一個 {} ,它用在什么情況下?

{ },其內部為數字,表示前面的字符要重復的次數。數字可以是單個數字{n},也可以是一個區間{n1,n2}。注意,在字符串中,{ }左右都需要加上脫意字符 ‘\’。

例如, grep 'o\{3\}' /etc/passwd //輸出有3連續的'o'的行


7. sed有一個選項,可以直接更改文本文件,是哪個選項?
sed -i

8. sed -i 's/.*ie//;s/["|&].*//' file 這條命令表示什么操作呢?

該命令由;分割了兩部分,首先第一部分表示把file中出現的以ie結尾的字符串刪除,
第二部分是把file中以"或|或&開頭的字符串刪除


9. 如何刪除一個文檔中的所有數字或者字母?

刪除所有數字: sed -i 's/[0-9]//g' file
刪除所有字母: sed -i 's/[a-Z]//g' file


10. 截取日志1.log的第一段(以空格為分隔符), 按數字排序、然后去重,但是需要保留重復的數量如何做?

awk '{print $1}' 1.log |sort -n|uniq -c|sort -n

 

11. 使用awk過濾出1.log中第7段(空格分隔)為'200' 並且第8段為'11897'的行。

awk '$7 == "200" && $8 == "11897"' 1.log

 

12. 請比較這兩個命令的異同: grep -v '^[0-9]' 1.txt 和 grep '^[^0-9]' 1.txt

grep -v '^[0-9]' 1.txt //輸出文件中不以數字開頭的行,但輸出空行
grep '^[^0-9]' 1.txt //輸出文件中不以數字開頭的行,但不輸出空行(不是0到9開頭,但是需要有內容)

 

13. awk中的$0表示什么?為什么以下兩條命令的$0結果不一致呢? awk -F ':' '{print $0}' 1.txt 和 awk -F ':' '$7=1 {print $0}' 1.txt
$0表示整行
awk -F ':' '{print $0}' 1.txt //打印所有的行 ,即整個記錄
awk -F ':' '$7=1 {print $0}' 1.txt
//以冒號為分隔符,輸出時將每行的第七段的內容更改為1,並打印所有的行,此時並不會連帶分隔符一起輸出(因為此時有對分隔的段進行相關的操作,這樣分隔就有意義了,所以不會打印分隔符)

14. 使用grep過濾某個關鍵詞時,如何把包含關鍵詞的行連同上面一行打印出來,那下面一行呢?同時上面和下面都打印出來呢?

grep -B1 上面一行
grep -A1 下面一行
grep -C1 上下各一行

 

第十二章 shell腳本 

課后習題:

1. shell腳本中,怎么做可以把某一行給注釋掉
在該行的最前面加一個警號#

2. 如何執行一個shell腳本呢
bash 1.sh 或者 chmod +x 1.sh; ./1.sh

3. 為了方便管理,我們約定把shell腳本都放到哪個目錄下
放到 /usr/local/sbin/下

4. 為了更好的調試shell腳本,我們可以加一個選項來觀察shell腳本的執行過程,是哪個選項呢
bash -x 1.sh

5. 使用date命令打印5天前的日期,要求日期格式為: xxxx-xx-xx
date -d "-5 day" +%Y-%m-%d

6. 請判斷,阿銘的腳本哪里有問題
#! /bin/bash

a = 1
b = 2
echo $a, $b

賦值變量值的時候,帶了空格

7. shell腳本中如何使用數學運算請舉例說明。
a=1; b=2
c=$[$a+$b]
echo $c

8. shell腳本中有一個命令可以實現腳本和用戶交互,請問是哪個命令,怎么使用 

read -p
例如
read -p "please input a number" n
這樣會把用戶輸入的內容作為n這個變量的值

9. 在shell中如何進行大小或者等於判斷
大於       -gt

小於是      -lt

等於是      -ne

大於等於是    -ge

小於等於是    -le

格式如下:
if [ $a -ge 0 ]; then ... ;fi

10. shell腳本中,用什么符號表示並且,用什么符號表示或者
&& 並且
|| 或者

11. shell腳本中,case邏輯判斷的結構是什么樣的

case $a in 
1) 
command 
;; 
2) 
command 
;; 
*) 
command 
;; 
esac

 

12. 列舉出shell腳本中常用的循環結構。
for a in ... ; do ... ; done
while ...; do ...; done

13. shell腳本中函數的作用是什么函數結構是什么樣的
函數可以理解成shell腳本中一個小代碼單元,當要用到這段代碼時直接調用函數名即可,從而避免重復書寫這段代碼,提高代碼書寫效率和質量。
函數的結構為
function fu_name() {
.....
}

14. 寫腳本實現,把一個目錄下的所有文件(不含有目錄)全部在文件名后面加一個.bak
#! /bin/bash

for f in `find . -type f`; do mv $f $f.bak; done

15. 編寫一個shell腳本,將當前目錄下大小大於100k的文件全部移動到/tmp/ 目錄下。
for f in `find . -type f -size +100k`; do mv $f /tmp/ ; done

16. 寫一個小腳本,獲取本機的hostname、ip地址以及dns地址。

#!/bin/bash
hostname=`hostname` 
echo "hostname : " $hostname 
ip=`/sbin/ifconfig | grep inet[[:space:]] |awk '$2!="127.0.0.1"' | tr -s ' ' |cut -d' ' -f3` 
#
ip=`/sbin/ifconfig | grep inet[[:space:]] |awk '$2!="127.0.0.1"' |awk -F' ' '{print $2}'
echo "ip : " $ip dns=`cat /etc/resolv.conf |grep nameserver|grep -v '#'` echo "dns: "$dns

17. 寫兩個小腳本驗證break和continue在循環中的作用。

#!/bin/bash 
for i in `seq 1 5` 
do
    echo $i 
 
if [ $1 -eq 3 ] 
then 
    break 
fi 
echo $i 
done 

輸出結果是;1 1 2 2 3 到最后一個echo 沒有輸出 結束了當前層

將上面的break 換成 continue
結果是: 1 1 2 2 3 4 4 5 5
當等於3的時候下面那句不執行,
繼續執行 之一到5

 

第十三章 系統管理

1. 如何看當前linux系統有幾顆物理cpu和每顆cpu的核數
物理cpu個數:cat /proc/cpuinfo |grep -c 'physical id'
cpu一共有多少核:grep -c processor /proc/cpuinfo
將cpu的總核數除以物理cpu的個數,得到每顆cpu的核數。

2. 查看系統負載有兩個常用的命令,是哪兩個這三個數值表示什么含義呢
兩個命令分別是 w 和 uptime
這三個系統負載值分別表示在1分鍾、5分鍾和15分鍾內平均有多少個任務處於活動狀態。

3. vmstat r, b, si, so, bi, bo 這幾列表示什么含義呢

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 2  0  29248 1003816      0 302720    0    1    37    58   90   89  2  1 98  0  0

r 表示運行和等待cpu時間片的進程數
b 表示等待資源的進程數,比如等待i/o, 內存等
si 表示由交換區進入內存的數量
so 由內存進入交換區的數量
bi 從塊設備讀取數據的量(讀磁盤)
bo 從塊設備寫入數據的量(寫磁盤)

4. linux系統里,您知道buffer和cache如何區分
簡單講,buffer里的數據是將要寫入到磁盤里的,而cache里的數據時從磁盤里讀出來的。
cache用來緩存從磁盤中讀取出來的數據,以方便數據下次被訪問,提高數據的訪問效率,避免頻繁讀取磁盤操作。linux自動地使用所有空閑的內存作為高速緩沖,當程序需要更多的內存時,它也會自動地減小緩沖的大小。
buffer用來緩沖數據的磁盤寫入操作,通過將分散的寫操作集中進行,減少磁盤碎片和硬盤的反復尋道,從而提高系統性能。linux有一個守護進程定期清空緩沖內容(即寫磁盤),也可以通過sync命令手動清空緩沖。

5. 使用top查看系統資源占用情況時,哪一列表示內存占用呢
res這一列表示物理內存占用數量

6. 如何實時查看網卡流量為多少?如何查看歷史網卡流量 ?
sar -n DEV 1 100
sar -n DEV 可以查看當天的歷史網卡流量
sar -n DEV -f /var/log/sa/saxx 其中xx是日期

7. 如何查看當前系統都有哪些進程
ps aux

8. ps 查看系統進程時,有一列為stat, 如果當前進程的stat為ss 表示什么含義如果為z表示什么含義
ss表示當前的進程是主進程,且處於休眠狀態; z表示僵屍進程

9. 如何查看系統都開啟了哪些端口
netstat -lnp

10. 如何查看網絡連接狀況
netstat -an

11. 想修改ip,需要編輯哪個配置文件,修改完配置文件后,如何重啟網卡,使配置生效
vim /etc/sysconfig/network-scripts/ifcft-eth0 如果是eth1則文件名為ifcft-eth1
修改網卡后,可以使用命令: ifdown eth0; ifup eth0 重啟網卡,也可以重啟網絡服務:service network restart

12. 能否給一個網卡配置多個ip 如果能,怎么配置
可以給一個網卡配置多個ip,配置步驟如下:
1) cd /etc/sysconfig/network-scripts/ cp ifcfg-eth0 ifcfg-eth0:1
2) vim ifcfg-eth0:1 #修改device和ipaddr、netmask以及gateway的值(如果有必要)
3) 重啟網絡服務

臨時配置的話:ifconfig eth:0 192.168.0.xx/24 up

 

13. 如何查看某個網卡是否連接着交換機
mii-tool eth0 或者 mii-tool eth1

14. 如何查看當前主機的主機名,如何修改主機名要想重啟后依舊生效,需要修改哪個配置文件呢
輸入命令 hostname 可以查看當前主機名,修改主機名可以通過命令: hostname newhostname
要想重啟后依舊生效,需要修改配置文件 /etc/sysconfig/network

15. 設置dns需要修改哪個配置文件
需要修改 /etc/resolv.conf,
有時修改該文件后再重啟網絡服務dns相關設置丟失的話,需要在/etc/sysconfig/network-scripts/ifcfg-eth0中增加dns1=xxxxx這樣的設置

16. 使用iptables 寫一條規則:把來源ip為192.168.1.101訪問本機80端口的包直接拒絕
iptables -I INPUT -s 192.168.1.101 -p tcp --dport 80 -j REJECT

17. 要想把iptable的規則保存到一個文件中如何做如何恢復
保存:iptables-save > 1.ipt
恢復:iptables-restore < 1.ipt

18. 如何備份某個用戶的任務計划
直接拷貝用戶的cron文件 cp /var/spool/cron/username /bak/

19. 任務計划格式中,前面5個數字分表表示什么含義
分   時  日  月  周

20. 如何可以把系統中不用的服務關掉
ntsysv 工具
或者使用chkconfig servicename off

21. 如何讓某個服務(假如服務名為 nginx)只在3,5兩個運行級別開啟,其他級別關閉
chkconfig nginx off
chkconfig --level 35 nginx on

22. rsync 同步命令中,下面兩種方式有什么不同呢
(1) rsync -av /dira/ ip:/dirb/ 是通過ssh方式同步的
(2) rsync -av /dira/ ip::dirb 是通過rsync服務的方式同步的

23. rsync 同步時,如果要同步的源中有軟連接,如何把軟連接的目標文件或者目錄同步?
如果源中有軟連接,那么需要加一個-l選項

24. 某個賬號登陸linux后,系統會在哪些日志文件中記錄相關信息?
有兩個日志文件:
1)/var/log/secure 這個記錄驗證用戶信息的過程
2)/var/log/wtmp 這個日志記錄成功登陸的用戶信息

25. 網卡或者硬盤有問題時,我們可以通過使用哪個命令查看相關信息?
dmesg

26. 分別使用xargs和exec實現這樣的需求,把當前目錄下所有后綴名為.txt的文件的權限修改為777.
xargs: find ./ -type f -name "*.txt" |xargs chmod 777
exec: find ./ -type f -name "*.txt" -exec chmod 777 {} ;

27. 有一個腳本運行時間可能超過2天,如何做才能使其不間斷的運行,而且還可以隨時觀察腳本運行時的輸出信息
使用screen工具

28. 在linux系統下如何按照下面要求抓包:只過濾出訪問http服務的,目標ip為192.168.0.111,一共抓1000個包,並且保存到1.cap文件中
tcpdump -nn -s0 host 192.168.0.111 and port 80 -c 1000 -w 1.cap

29. rsync 同步數據時,如何過濾出所有.txt的文件不同步
--exclude="*.txt"

30. rsync同步數據時,如果目標文件比源文件還新,則忽略該文件,如何做?
-u 選項

31. 想在linux命令行下訪問某個網站,並且該網站域名還沒有解析,如何做 ?
修改 /etc/hosts 增加解析記錄,或者使用curl -x

32. 自定義解析域名的時候,我們可以編輯哪個文件是否可以一個ip對應多個域名是否一個域名對應多個ip
編輯 /etc/hosts ,可以一個ip對應多個域名,不可以一個域名對多個ip

33. 我們可以使用哪個命令查看系統的歷史負載(比如說兩天前的)
sar -q -f /var/log/sa/saxx 其中xx為兩天前的日期

34. 在linux下如何指定dns服務器,來解析某個域名
dig @dnsip domain.com

35. 使用rsync同步數據時,假如我們采用的是ssh方式,並且目標機器的sshd端口並不是默認的22端口,那我們如何做
rsync "--rsh=ssh -p port"

36. rsync同步時,如何刪除目標數據多出來的數據,即源上不存在,但目標卻存在的文件或者目錄
--delete

37. 使用free查看內存使用情況時,哪個數值表示真正可用的內存量
第二行 -/+ buffers/cache 對應的free的那一個數

38. 有一天你突然發現公司網站訪問速度變的很慢很慢,你該怎么辦呢(服務器可以登陸,提示:你可以從系統負載和網卡流量入手)
首先登陸服務器,先看看負載情況,使用命令w, 如果第一個數值很大,再使用vmstat 1 查看是哪些資源缺乏造成的負載高,可以通過r,b,si,so 幾列的數值推算是因為哪些資源缺乏。比如r列數值很大,需要使用top命令查看是哪個進程占用cpu比較多,如果si,so兩列的數值變化頻繁,則說明內存不足,也可以使用top命令查看哪些進程占用較多內存。
如果系統的負載不高,則需要查看一下網卡流量是否正常: sar -n dev 1 10 對比平時的網絡流量看是否正常。

39. rsync使用服務模式時,如果我們指定了一個密碼文件,那么這個密碼文件的權限應該設置成多少才可以
600 或者 400 總之組和其他用戶都不能讀不能寫也不能執行

 

第十四章  LAMP搭建

課后習題:

1. 為什么下載源碼包需要到官網上去下載
簡單說就是為了安全,如果是非官方下載的源碼包,有可能被別有用心的人動過手腳,畢竟是源碼的,任何人都可以修改代碼。

2. 64位機器是否可以安裝32位rpm包64位機器是否可以安裝32位的mysql二進制免編譯包
64位機器是可以安裝32位rpm包的,同樣的64位機器也能安裝32位的mysql二進制免編譯包(centos5.x的確是支持,但是centos6.x不支持)。

3. 編譯安裝apache時, 如果不加--with-included-apr 會有什么問題
會報錯,cannot use an external apr with the bundled apr-util,因為apr是一個底層的接口庫,編譯apache必須要有這個支持。

4. 編譯php時,必須加上 --with-apxs2=/usr/local/apache2/bin/apxs 這是什么意思呢
apxs是apache編譯動態模塊並自動配置加載到httpd.conf文件的一個工具,由於php也是作為apache的一個動態加載模塊,我們編譯php的目的就是為了生成這個模塊,所以必須要指定apxs的地址。

5. 當配置好apache的配置文件后,如何檢驗配置文件是否正確
/usr/local/apache2/bin/apachectl -t

6. 如何查看80端口是否啟動
netstat -lnp |grep ':80'

7. 更改apache配置文件httpd.conf后,如何重新加載配置文件
/usr/local/apache2/bin/apachectl graceful

8. 如何查看apache加載了哪些模塊
/usr/local/apache2/bin/apachectl -m

9. 怎么查看php加載了哪些模塊
/usr/local/php/bin/php -M

10. 簡單描述靜態加載和動態共享模塊的區別。
不管編譯httpd還是php,都會有一個靜態模塊和動態模塊的概念。首先,動態和靜態模塊宏觀上分析,靜態會直接編譯進httpd這個可執行文件內,而動態的模塊是單獨的一個文件;其次,靜態模塊是和httpd這個文件一同加載的,只要服務一開啟就會加載所有的靜態模塊,而動態模塊是根據需求什么時候用什么時候加載。

11. 當我們配置好lamp環境后,訪問php程序無法解析,你如何去排查這個問題呢
(1) apachectl -m 看是否加載了libphp5.so
(2) 如果沒有加載,那查看/usr/local/apache2/modules/是否有libphp5.so,然后查看httpd.conf 中是否有loadmodule libphp5.so
(3) 再看httpd.conf中是否有 addtype application/x-httpd-php .php
(4) apache一定要重啟服務

12. 如何配置apache的虛擬主機
vim httpd.conf
#include conf/extra/httpd-vhosts.conf
把該行最前面的#去掉,然后修改:
<directory />
options followsymlinks
allowoverride none
order deny,allow
deny from all
</directory>
改為
<directory />
options followsymlinks
allowoverride none
order deny,allow
allow from all
</directory>

再 vim conf/extra/httpd-vhosts.conf 根據實際需求修改

13. 如何配置apache的用戶驗證
vi httpd.conf
在相應的虛擬主機配置文件段,加入
<directory *>
allowoverride authconfig
authname "自定義的"
authtype basic
authuserfile /data/.htpasswd // 這個目錄你可以隨便寫一個,沒有限制
require valid-user
</directory>

保存后,然后創建apache的驗證用戶 htpasswd -c /data/.htpasswd test

14. 如何配置apache的日志以及日志按天切割
在httpd.conf 在相應的虛擬主機配置段,加入
customlog "|/usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/www.yourdomain.com-access_%y%m%d.log 86400" combined
注意,需要寫成絕對路徑,寫成相對的路徑可能不生效

15. 如何配置apache的圖片等靜態文件的過期時間

httpd.conf 中加入

<ifmodule mod_expires.c>
expiresactive on
expiresbytype image/gif "access plus 1 days"
expiresbytype image/jpeg "access plus 24 hours"
expiresbytype image/png "access plus 24 hours"
expiresbytype text/css "now plus 2 hour"
expiresbytype application/x-javascript "now plus 2 hours"
expiresbytype application/x-shockwave-flash "now plus 2 hours"
expiresdefault "now plus 0 min"
</ifmodule>

16. 如何限定某個目錄下的php文件沒有執行權限
vim httpd.conf
在相關的虛擬主機段,加入
<directory /www/htdocs/path>
php_admin_flag engine off
</directory>
其中 /www/htdocs/path 為要限制的目錄

17. 如何配置apache的域名重定向
要把訪問域名 www.domain1.com 的域名轉發到 www.domain2.com 上
實現:
在相關的虛擬主機中增加
<ifmodule mod_rewrite.c>
rewriteengine on
rewritecond %{http_host} ^www.domain1.com$
rewriterule ^(.*)$ http://www.domain2.com/$1 [r=301,l]
</ifmodule>

如果是多個域名重定向到一個域名
<ifmodule mod_rewrite.c>
rewriteengine on
rewritecond %{http_host} ^www.domain.com[or]
rewritecond %{http_host} ^www.domain1.com$
rewriterule ^(.*)$ http://www.domain2.com/$1 [r=301,l]
</ifmodule>

18. 如何配置php的錯誤日志
vim php.ini 檢查並配置如下兩項
log_errors = on
error_log = logs/error.log

19. 如何在php中配置open_basedir, 是否可以在httpd.conf 中針對虛擬主機配置open_basedir
vim php.ini
加入 open_basedir=/var/www/
httpd.conf中也可以針對虛擬主機限制openbasedir:
在相對應的虛擬主機配置文件中加入:
php_admin_value open_basedir "/var/www/htdocs"

20. 如何禁止php的函數exec
vim php.ini 找到
disable_functions =
改為
disable_functions = exec 如果是多個函數,可以在exec后面繼續增加函數名用逗號分開即可

21. 我們以源碼安裝lamp環境時,先安裝哪個,后安裝哪個為什么呢
安裝順序可以是 mysql apache php 也可以是 apache mysql php
把php放到最后,這是因為安裝php時,需要指定mysql安裝目錄,也需要指定apache的apxs工具

22. 怎么確定你的php.ini 在哪個目錄下
php -i |grep 'configuration file'

23. 怎么確定你的php的extension_dir 在哪里
php -i |grep 'extension_dir'

 

 

第十五章 LNMP搭建

1. 到mysql官方下載一個源碼包,嘗試編譯安裝,編譯參數可以參考我們已經安裝過的mysql的編譯參數。
操作略,有問題的話把問題發出來。
mysql官網 http://dev.mysql.com/downloads/mysql/5.1.html#downloads 選擇source code
查看mysql編譯參數的方法是 cat /usr/local/mysql/bin/mysqlbug|grep configure

2. mysql的配置文件my.cnf,是否可以放到除了/etc/目錄下的其他目錄下
可以放到其他目錄下,不過啟動的時候需要指定配置文件,或者在啟動腳本中定義一下配置文件的路徑
手動啟動mysql的命令: /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/my.cnf --user=mysql --datadir=/data/mysql
或者在啟動腳本中/etc/init.d/mysqld 中,搜索conf=/etc/my.cnf,並修改

3. 比較一下,lamp環境和lnmp環境編譯php時,編譯參數有哪些區別
lamp的php有指定 apxs,lnmp中沒有指定;lnmp中有一項叫做 --enable-fpm,lamp沒有

4. 安裝好php后,比較一下lamp的php和lnmp的php的目錄結構有什么不同
lnmp的php比lamp的php多出來幾個目錄:sbin, share, var

5. 想一想,lamp環境下的php安裝目錄 /usr/local/php 是否可以刪除
可以刪除掉,因為lamp中的php是作為apache的一個動態模塊libphp5.so來調用的,唯一有影響的是如果指定了php的配置文件php.ini在php的目錄下,如果刪除后則配置文件失效。

6. php的配置文件是什么 php-fpm 的配置文件是什么
php的配置文件時php.ini, php-fpm的配置文件時 php-fpm.conf

7. 如何檢測nginx配置文件是否有錯如何檢測php-fpm的配置文件是否有錯
/usr/local/nginx/sbin/nginx -t
/usr/local/php/sbin/php-fpm -t

8. 在本章中,出現了兩次 "chmod 755 /etc/init.d/xxx" 其中xxx 為php-fpm 和 nginx, 想一想為什么要更改他們的權限,如果不改,會有什么問題
因為php-fpm和nginx是啟動腳本,腳本執行必須要有執行權限,如果不給執行權限,不能正確把它們加入到系統服務中。

9. nginx是如何做到解析php文件的它是如何和php聯系在一起的
nginx解析php,是以代理的方式代理的php-fpm,在nginx的配置文件中有這樣一段:
location ~ .php$ {
include fastcgi_params;
fastcgi_pass unix:/tmp/php-fcgi.sock;
fastcgi_index index.php;
fastcgi_param script_filename /backup/sphinx/build/html$fastcgi_script_name;
}
這就是用來指定php-fpm的,nginx本身不能解析php,它只是一個簡單的web服務軟件,但nginx有一個很好的功能就是可以作為代理服務器,而php-fpm是可以解析php的,所以只要nginx代理一下php-fpm就可以解析php啦。

10. 配置nginx的訪問日志,並編寫日志切割腳本按天切割。
配置nginx的日志,首先需要定義一下日志格式,這個格式在 nginx.conf的 httpd模塊下配置,參考格式:
log_format main1 '$proxy_add_x_forwarded_for - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';
其中 main1為日志格式的名字,這個會用到。然后在虛擬主機配置段中,也就是server部分中配置加上
access_log /var/log/xxx/access.log main1;
日志切割腳本(已知訪問日志為/var/log/xxx/access.log):

#! /bin/bash
d=`date -d "-1 day" +%y%m%d`
/bin/mv /var/log/xxx/access.log /var/log/xxx/$d-access.log
/bin/kill -hup `cat /usr/local/nginx/logs/nginx.pid` //其中nginx的pid文件為/usr/local/nginx/logs/nginx.pid

假如腳本的名字為 /usr/local/sbin/nginx_logrotate.sh,加入計划任務
0 0 * * * /bin/bash /usr/local/sbin/nginx_logrotate.sh

11. 配置nginx域名重定向,比如一個虛擬主機支持多個域名訪問,abc.com 和 123.com 那么讓123.com的訪問跳轉到 abc.com在相應的虛擬配置文件中加入:
if ($host != 'abc.com' ) {
rewrite ^/(.*)$ http://abc.com/$1 permanent;
}

12. 配置nginx的用戶驗證
需要先安裝 htpasswd命令: yum install -y httpd
htpasswd -c /usr/local/nginx/conf/htpasswd test // 添加test用戶,第一次添加時需要加-c參數,第二次添加時不需要-c參數
在nginx相應虛擬主機配置文件中添加
location / {
root /data/www/wwwroot/count;
auth_basic "auth";
auth_basic_user_file /usr/local/nginx/conf/htpasswd;
}

13. 針對nginx站點,設置禁止某個目錄下的php程序解析
比如說,禁止abc目錄下的php解析:

location ~ .*abc/.*.php$
{
deny all;
}

14. 使用nginx代理一個站點
例如,想在我們的nginx服務器上代理www.baidu.com, 可以創建一個新的虛擬配置文件baidu.conf
server {
listen 80;
server_name www.baidu.com;

location / {
proxy_pass http://61.135.169.125/;
proxy_set_header host $host;
proxy_set_header x-real-ip $remote_addr;
proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
}
# access_log /tmp/1.log;
}

15. 配置nginx限制只讓某個ip訪問
在相應的虛擬主機配置文件中,加入
allow 1.1.1.1;
allow 2.2.2.2;
deny all;

16. 設置nginx 防盜鏈,比如只想讓www.lishiming.net 這個域名的referer訪問,其他站點不能訪問
首先一點需要明確,防盜鏈是針對圖片或者其他靜態文件來設置的,比如我不想讓其他網站引用我網站的圖片,就可以這樣設置防盜鏈。
在相應虛擬配置文件中加入:

location ~* ^.+.(gif|jpg|png|swf|flv|rar|zip|doc|pdf|gz|bz2|jpeg|bmp|xls)$ {
valid_referers none blocked server_names www.lishiming.net; // 對這些域名的網站不進行盜鏈。
if ($invalid_referer) {
return 403;
}
}
當還可以寫多個白名單域名,或者使用通配符:valid_referers none blocked server_names *.lishiming.net *.baidu.com;
有時,我們也有這樣的需求,如果別的網站引用了我們的圖片,可以讓它顯示成我們自己指定的一張圖片:
if ($invalid_referer) {
rewrite ^/ http://www.example.com/nophoto.gif;
}

17. nginx設置根據user_agent來限制訪問,比如禁止baidu的蜘蛛訪問站點
baidu蜘蛛的user_agent 為 mozilla/5.0 (compatible; baiduspider/2.0; +http://www.baidu.com/search/spider.html)
所以,我們可以寫成這樣:
location / {
if ($http_user_agent ~ 'baiduspider'){
return 403;
}
}


18. nginx配置虛擬目錄

問題:
www.111.com 站點的root目錄為 /data/web/ ,現在想在www.111.com 下放一個站點,www.111.com/abc/
但不能直接在/data/web/下創建abc目錄,要放在 /data1/abc/下。

解決辦法:
使用nginx的alias功能實現虛擬目錄
在配置文件中加入
location ~ /abc/(.*)$ {
alias /data1/abc/$1;
}

19. php-fpm.conf 中配置多個pool,如何針對每一個pool配置open_basedir 以及slow_log
php-fpm.conf中可以配置多個pool,並且可以針對每一個pool配置open_basedir和slow_log
首先,php-fpm.conf的配置文件格式為:
[global]

...
...
...

[www.domain1.com]

...
...
...

[www.domain2.com]

...
...
...

配置open_basedir和slow_log需要在相應的pool中加入:
slowlog = log/www.default.com.slow
request_slowlog_timeout = 1
php_admin_value[open_basedir]=/data/release/www.domain.com/:/tmp/
其中,open_basedir可以寫多個目錄,多個目錄間使用:分隔

 

第十六章 MySQL

1. 如何更改系統環境變量PATH
vim /etc/profile 加入 PATH=$PATH:/usr/local/mysql/bin

2. 默認mysql安裝好后,並沒有root密碼,如何給root設置一個密碼
mysqladmin -uroot password 'newpass'

3. 如何更改root密碼
mysqladmin -uroot -p123456(-p舊密碼) password '111111'(新密碼)

4. 如何連接遠程的mysql服務器
mysql -uusername -ppass -hhostip -pport

5. 如何查看當前登陸mysql的賬戶
select user();

6. 在mysql命令行下,怎么切換某個庫
use databasename;

7. 如何查看一個表都有哪些字段
desc tablename;

8. 如何查看某個表使用的是哪種數據庫引擎
show create tableg;

9. 如何查看當前數據庫有哪些隊列
show processlist;

10. 當有很多隊列時,如何查看有哪些慢查詢
看慢查詢日志,慢查詢日志在/etc/my.cnf中設置方法是增加:
log_slow_queries = logname
long_query_time = 1 //查詢時間超過1s會記錄日志

11. 如何查看當前mysql的參數值
show variables;

12. 如何不重啟mysql服務,更改某個參數
set global xxx = xxx; 比如
set global wait_timeout = 10;

13. 用什么工具備份數據庫請區分myisam引擎和innodb引擎兩種存儲引擎的備份。
mysqldump 備份數據庫,mysqldump可以備份兩種引擎的數據。但是innodb引擎的數據使用xtrabackup工具更快

14. 簡單描述myisam和innodb引擎的區別。
innodb不支持fulltext類型索引;
innodb不保存表的行數;
myisam的數據直接存在系統的文件中,而innodb的數據庫會事先創建一個數據表空間文件,然后再從這個表空間文件中存數據;
myisam不提供事務支持,innodb提供事務支持事務,外部鍵等高級 數據庫功能;
myisam的鎖是對整個表鎖定,innodb是行鎖;

15. 如果你的mysql服務啟動不了,而當前終端又沒有報錯,你如何做
查看mysql的日志,日志默認在datadir下,以hostname為名字的.err文件

16. 要備份的庫字符集是gbk的字符集,為了避免出現亂碼的情況,如何在備份和還原的時候指定字符集為gbk
備份指定 mysqldump --default-character-set=gbk
恢復指定 mysql --default-character-set=gbk

17. 錯誤日志中,如果出現提示說某個表損壞需要修復,你如何修復這個表呢
repair table tablename;

18. 備份myisam引擎的數據庫時,我們除了使用mysqldump工具備份外,還可以直接拷貝數據庫的源數據(.frm, .myd, .myi三種格式的數據),其中哪一個文件可以不拷貝若想恢復該文件,如何做
.myi的文件可以不拷貝,恢復的時候,需要修復表,但加上 use_frm, 如
repair table tb1 use_frm;

19. 如果mysql的root密碼忘記了如何做
1) 編輯mysql主配置文件 my.cnf vim /etc/my.cnf
在[mysqld]字段下添加參數 skip-grant
2) 重啟數據庫服務 service mysqld restart
3) 這樣就可以進入數據庫不用授權了 mysql -uroot
4) 修改相應用戶密碼 use mysql;
update user set password=password('your password') where user='root';
flush privileges;
5) 修改/etc/my.cnf 去掉 skip-grant , 重啟mysql服務

20. 如何更改mysql的普通賬戶密碼
update user set password=password('your password') where user='username';

21. mysql的命令歷史文件在哪里,為了安全我們其實是可以做一個小處理,不讓mysql的命令歷史記錄在文檔中,請想一想如何利用之前我們學過的知識做到
~/.mysql_history
我們可以這樣不保存mysql命令歷史: cd ~; rm -f .mysql_history; ln -s /dev/null .mysql_history

22. 如何讓mysql的監聽端口為3307,而不是默認的3306
vim /etc/my.cnf
把port = 3306 改為 port = 3307

 

第十七章 nfs服務

1. nfs配置,需要安裝哪些包
nfs-utils 和 rpcbind

2. 如果不開啟rpcbind服務,就啟動nfs,會怎么樣
如果不開啟rpcbind服務,會報錯:rpc.nfsd: writing fd to kernel failed: error 111 (connection refused)

3. nfs配置文件中,no_root_squash, all_squash, root_squash 分表表示什么含義
no_root_squash: 在客戶端不限制root賬號,客戶端上root賬號對nfs共享目錄擁有至高權限
all_squash: 在客戶端上限制所有賬戶,如果不指定anonuid/anongid則默認會把所有賬戶限定為nfsnobody
root_squash: 在客戶端上限制root賬戶而不限定其他普通用戶,如果不指定anonuid/anongid則默認會把所有賬戶限定為nfsnobody

4. 用什么命令來查看某個服務器上的nfs共享信息
showmount -e nfsserverip

5. 如何把遠程的共享nfs掛載到本地如何查看本機已經共享的nfs資源
mount -t nfs nfsserverip:/dir /mnt
df -h 查看

6. 在nfs服務器上,假如更改了配置文件,如何不重啟nfs服務使配置生效
exportfs -arv

7. 掛載nfs時,經常加上一個選項 -o nolock, 它的作用是什么呢
-o nolock 是為了不加文件鎖。

8. 請根據需求寫成相應的配置:把/data/123/目錄共享,針對192.168.10.0/24網段,限制客戶端上所有用戶,並限定為uid=800,gid=800
/data/123 192.168.10.0/24(rw,sync,all_squash,anonuid=800,anongid=800)

 

 

第十八章

1. ftp 服務默認監聽哪個端口,我們是否可以更改它
ftp默認監聽21端口,可以更改這個默認監聽端口。pure-ftpd 可以修改配置文件,加上一行:bind 0.0.0.0,2100 其中2100是修改后的端口。而vsftpd服務需要在配置文件/etc/vsftpd/vsftpd.conf 加入一行: listen_port=2100

2. 常用搭建ftp服務的軟件有哪些 系統自帶的是哪一種
pure-ftpd vsftpd, 系統自帶是后者

3. 使用pureftp 如何創建一個用戶 如何刪除一個用戶
創建:pure-pw useradd test1 -uwww -d /data/ftp
刪除:pure-pw userdel test1

4. 如何更改用戶的密碼(pureftp)
更改密碼的辦法是:先刪除賬號,再重新創建同名賬號。

5. 如何查看當前有幾個用戶(pureftp)
pure-pw list

6. 使用vsftpd軟件搭建一個ftp服務器,你需要滿足這樣的需求:創建3個賬戶,user1, user2, user3 ,其中這三個用戶都可以訪問同一個目錄,但是user1可讀寫,但user2和user3只讀.
思路:根據課上我提供給大家的文檔來搭建vsftpd虛擬賬號,然后創建user1,user2,user3三個賬號,在創建他們的配置文件時,指定相同的家目錄,但user1 write_enable=yes, user2 write_enable=no, user3 write_enable=no

7. 使用vsftpd軟件搭建一個ftp服務器,你需要滿足這樣的需求:創建3個賬戶,user1, user2, user3 ,其中這三個用戶都可以訪問同一個目錄,但是每個用戶都可以讀取其他用戶的文件,但是只能更改自己的文件,不能更改其他用戶的文件。
思路:vsftpd搭建ftp服務,使用系統賬號作為ftp的賬號,然后要訪問的目錄做一個t權限(類似於tmp目錄)
參考配置文件: cat /etc/vsftpd/vsftpd.conf
anonymous_enable=no
local_enable=yes
write_enable=yes
local_umask=022
anon_upload_enable=no
anon_mkdir_write_enable=no
dirmessage_enable=yes
xferlog_enable=yes
connect_from_port_20=yes
xferlog_std_format=yes
chroot_local_user=yes
listen=yes
pam_service_name=vsftpd
userlist_enable=yes
tcp_wrappers=yes
local_root=/tmp/123

創建ftp目錄: mkdir /tmp/123
修改權限:chmod 1777 /tmp/123
創建賬號:useradd user1; useradd user2; useradd user3
創建密碼:passwd user1; passwd user2; passwd user3

8. 使用vsftpd軟件搭建一個ftp服務器,要求任何人都可以登錄(匿名登錄),並且匿名賬戶可以讀、寫。
參考配置: cat /etc/vsftpd/vsftpd.conf
anonymous_enable=yes
local_enable=yes
write_enable=yes
local_umask=022
anon_umask=022
anon_other_write_enable=yes
anon_world_readable_only=no
anon_upload_enable=yes
anon_mkdir_write_enable=yes
dirmessage_enable=yes
xferlog_enable=yes
connect_from_port_20=yes
xferlog_std_format=yes
chroot_local_user=yes
listen=yes
pam_service_name=vsftpd
userlist_enable=yes
tcp_wrappers=yes
還需配置: chmod 777 /var/ftp/pub

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM