1. 程式人生 > >跟阿銘學Linux習題答案

跟阿銘學Linux習題答案

使用curl comm 安全 pen 地址 來源 sort selinux 一起

第一章:走進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,直接用數字減會導致錯誤,正確的方法見下面的例子)
這時目錄權限744;文件權限644

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

cp -r yum.repos.d/ yum.repos.d.bak 將配置文件文件夾備份

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

rm -rf CentOS-Base.repo 刪掉配置文件CentOS-Base.repo,不使用網絡yum源

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

修改其內容如下:

[local_cdrom]

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

[root@centos6 ~]# cat /etc/profile |grep HISTSIZE

HISTSIZE=1000

export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL

[root@centos6 ~]# vim /etc/profile #永久修改

HISTSIZE=10000

Esc:wq

[root@centos6 ~]# source /etc/profile

[root@centos6 ~]# echo $HISTSIZE

10000

[root@centos6 ~]#

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

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 -a | grep ‘inet addr‘ | awk -f ‘:‘ ‘{print $2}‘ | awk ‘{print $1}‘`
for i in $ip
do
echo "`ifconfig | grep -b1 "$i" | grep -v ‘inet addr‘ | awk ‘{print $1}‘` "$i""
done
dns=`cat /etc/resolv.conf |grep nameserver|grep -v ‘#‘`
echo $dns

17. 寫兩個小腳本驗證break和continue在循環中的作用。
#!/bin/bash
for i in `seq 1 5`
echo $i
do
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 這幾列表示什麽含義呢
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) 重啟網絡服務

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 總之組和其他用戶都不能讀不能寫也不能執行

第十四章

第十五章

第十六章

第十七章

第十八章

第十九章

第二十章

第二十一章

第二十二章

第二十三章

跟阿銘學Linux習題答案