一、簡述它的發展歷史,列舉幾種表明性的發行版javascript
Linux以前是Unix,因爲Unix收費昂貴,so,Richard Stallman 發起了開發自由軟件的運動,併成立了自由軟件基金會(Free Software Foundation,FSF)和GNU 項目和協議GPL(是GNU General Public License)。以後一個大學的教授(名字爲AndrewTanenbaum,譚邦寧)的Minix。通過對minix改造,芬蘭赫爾辛基大學的一位計算機系名爲Linus Torvalds 的學生開發了Linux ;php
二、請簡述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等css
三、列舉流行的Linux版本,說明特色
Debian(1993) → ubuntu(2004)
Slackware(1993)→suse(1994)
redhat(1994)→rhel(redhat企業版[2002]) 注:2002後以前的redhat變爲Fedora,指rhel的實驗版
sentos(2003)→由redhat改過來的,免費,可使用yumhtml
一、32和64位操做系統區別?如何查看?java
那就是64 位操做系統的CPU 運算速度更快,支持更大的內存使用,能夠發揮更大更好的硬件性能,提高業務工做效率。
查看命令:uname -m (uname -a能夠查看內核版本)也可用uname -r一塊兒查看node
二、swap的做用?如何劃分;
要有一個swap(交換)分區,它的做用至關於Windows 裏的虛擬內存,swap 分區的大小通常爲物理內存容量的1.5 倍(內存<8GB)。但當系統物理內存大於8GB ,
則swap 分區配置8 ~ 16GB 便可,太大無用,浪費磁盤空間。swap 分區不是必需的,可是大多數狀況應該設置,個別企業的數據庫應用場景不分swap。mysql
三、查資料瞭解BootLoader、grub的概念和做用linux
Bootloader是嵌入式系統在加電後執行的第一段代碼,對CPU和硬件的初始化,再將操做系統映像或固化的嵌入式應用程序裝在到內存中而後跳轉到操做系統所在的空間,啓動操做系統運行。nginx
grub是一個多重操做系統啓動管理器。用來引導不一樣系統,如windows,linux。程序員
四、如何在安裝系統時給grub設置密碼
安裝界面勾選設置密碼,而後設置
五、在安裝Linux時你是如何分區的?
無特殊要求的話
200m的/boot、swap爲真實內存的1.5倍(真實內存超過4g都分8g 的swap也可)、/分區分20G,其餘都給/data
一、Linux鏈接必需要用到sshd服務,默認監控什麼端口,如何自定義sshd端口;
默認爲22,sshd是系統自啓動服務
修改/etc/ssh這個目錄下面 sshd_config 這個文件中 port字段
二、經常使用的遠程工具備?
xshell、secureCRT、Putty等
三、網卡配置文件在哪?默認配置須要修改什麼?
/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
四、網卡重啓命令
service network restart
systemctl restart network.service
五、如何臨時關閉selinux?如何永久關閉?
setenforce 0
vi /etc/selinux/config 修改成SELINUX=disabled
六、查看Linux有幾塊網卡用什麼命令?查看網卡ip用什麼命令?
#lspci |grep -i eth
查看ip:ifconfig、ip addr
七、咱們爲何要使用密匙登陸Linux呢?
爲了安全,將密碼加密,用密碼加密的私匙解密公匙登陸。
課後習題:
一、命令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
二、刪除一個目錄或文件時,在刪除以前會詢問y/n,若是直接回車會刪除嗎?輸入其餘字符的效果是?
都至關於輸入了n的效果。
三、如何建立一串目錄?
用mkdir -p
四、使用mv命令,若是目標文件不是目錄,但該文件存在會怎樣?
# mv 1 3
mv: overwrite `3'?
會提示是否覆蓋
五、使用less命令查看文件/etc/passwd下共出現了幾個root?按哪一個鍵能夠上下逐行移動?
/root能夠定位到第一個root,按n跳到下一個,
按j、k上下移動
六、爲何目錄必需要有x權限才能查看目錄下的文件呢?
按要求操做時確實有問題,提示權限錯誤,由於打開目錄就是在執行目錄。
七、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
八、用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分鐘)
九、用find找出/etc目錄下一年沒有變動過的文件
find /etc/ -type f ! -mtime -365 (百度的)
find /etc/ -type f -mtime +365(我寫的)
十、爲何硬連接不能連接目錄?硬連接的文件是否佔用空間大小?硬連接能否跨分區?
規定: 由於每一個目錄下面都會有一個.和..也就是說每一個目錄下面的子目錄確定會有它自己和它上一級目錄,那麼一旦設置了硬連接則會形成一種混亂,設置會致使死循環。
硬連接的文件並不會佔用空間大小,它只是複製了該文件的一份inode信息;
硬連接文件是不能夠跨分區建立的。(由於每一個分區都有不一樣的iNode表)
十一、Linux系統裏,分別用什麼符號表示純文本、二進制、目錄、連接文件、塊設備以及字符設備?
-:普通文件
d:目錄
l:連接
b:塊設備
c:設備文件
s:套接字文件
十二、如何把dira目錄以及該目錄下的全部文件和目錄全部者修改成 user一、所屬組爲users?
chown -R user1:user dira
1三、修改dirb目錄的權限,使其全部者可讀、寫、執行,所屬組可讀且可執行,其餘用戶不可讀、寫和執行用什麼命令?
chmod 750 dirb
1四、如何使文件只能寫不能刪除?如何使文件不能刪除、重命名、設定連接、寫入和新增數據?
chattr +a file 文件只能寫不能刪除
chattr +i file 文件不能被刪除、重命名、設定連接接、寫入、新增數據
1五、Linux下的一個點"."和兩個點"..",分別表示?
當前目錄和上級目錄
1六、cd - 表示?
切換到上次所在目錄
1七、ls -l命令輸出第二列的意思是?若是一個目錄的第二列爲3,那麼這個3是如何獲得的?
第二列數值該文件佔用的inode
若是一個目錄的這列爲3,咱們能夠經過使用 ls -al dir/ |grep ^d| wc -l 這條命令獲得
1八、若是系統中沒有locate命令,咱們須要安裝哪一個軟件包?初次使用locate會報錯can not open '/var/lib/mlocate.db':No such file or directory咱們須要怎麼作?
沒有locate命令,須要安裝mlocate包,yum install -y mlocate, 初次使用報錯,是由於對應的數據庫文件尚未生成,手動生成的命令是:updatedb
1九、複製一個文件若是目標文件存在會提示是否覆蓋,如何作就不詢問了?
使用cp的絕對路徑 /bin/cp a.txt b.txt 由於cp可能有alias -i
20、加入一個文件一直在增長,如何動態的顯示這個文件的內容?
tail -f 文件名
2一、如何查看當前用戶的目錄?
echo $HOME
2二、假如一個目錄任何人可寫,怎麼作到只有全部者纔可更改?
chmod o+wt dir
2三、簡述軟硬連接區別?
軟鏈接能夠理解爲,源文件的快捷方式,軟鏈接文件記錄的是源文件的路徑,佔用空間很是小。當把源文件刪除後,那麼軟鏈接文件也就變成一個壞文件了,不能使用了。
硬連接和源文件的inode信息是如出一轍的,能夠說硬連接文件只是複製了一份源文件的inode信息,在咱們看來硬連接文件和源文件沒有什麼區別,刪除任何一個文件對方都不受影響,惟一的是少了一份inode,硬連接只能在同一個分區下建立,而軟鏈接不受限制。硬連接文件和源文件雖然看起來像是兩個文件,可是隻佔用一個文件的磁盤空間。
2四、cat a.txt會更改a.txt的什麼時間?chmod 644 a.txt會更改它的什麼時間?vim呢?直接touch呢?
cat 會更改atime(訪問時間)
chmod 會更改ctime
vim 更改 atime 和 mtime 、ctime
touch 更改 atime 和 mtime 、ctime
課後習題:
一、查看/etc/shadow第一行root帳號的第三個字段(:分隔)中的數字,計算這個數字是怎麼獲得的
答:shadow文件的第三個字段表示最近修改密碼的日期,爲距離1970年1月1日的天數,注意1970年1月1日爲1,而後通過幾天就加幾。關於/etc/shadow文件每一個字段的含義請參考http://www.cnblogs.com/zhousir1991/archive/2011/07/25/2116520.html
二、寫出一個您認爲很強悍的密碼.
答:LcY$&5jH%@*bGsN
三、查資料搞明白 /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服務
四、請想想,當咱們建立一個新的帳號時,系統會修改哪幾個文件呢?
答:用戶密碼文件:/etc/passwd
加密密碼文件:/etc/shadow
用戶組文件:/etc/group
用戶組密碼文件:/etc/gshadow
建立home\user家目錄
五、假如咱們已經建立了一個普通用戶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配置文件能夠直接修改用戶的家目錄。
六、/etc/passwd 文件以":"爲分隔符,第三和第四個字段表示什麼含義?若是把某一行的第三個字段改成‘0‘ 會發生什麼?
答:第三個和第四個字段分別表示用戶id和組id,若是把某一行的第三個字段改成0,則該用戶變成root用戶。關於/etc/passwd文件每一個字段的含義請參考
http://os.51cto.com/art/201003/187533.htm。
七、先新增一個組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)
八、若是刪除一個組時報錯: 「cannot remove the primary group of user ‘aming‘」 這是什麼意思?如何解決該問題呢?
答:刪除用戶組報錯說明該用戶組非空,能夠先根據須要將裏面的用戶刪除或者移到別的組,而後刪除空了的組。
九、如何刪除某個帳戶時,連帶這個帳戶的家目錄一併刪除?
答: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
課後習題:
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源安裝一個語言套件
課後習題:
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 上下各一行
課後習題:
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 總之組和其餘用戶都不能讀不能寫也不能執行
課後習題:
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'
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能夠寫多個目錄,多個目錄間使用:分隔
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
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