面試題、例題、知識點 彙總

centos 7 卸載 mariadb 的正確命令
列出全部被安裝的rpm package rpm -qa | grep mariadb
卸載 rpm -e mariadb-libs-5.5.37-1.el7_0.x86_64
錯誤:依賴檢測失敗:
libmysqlclient.so.18()(64bit) 被 (已安裝) postfix-2:2.10.1-6.el7.x86_64 須要
強制卸載,由於沒有--nodeps rpm -e --nodeps mariadb-libs-5.5.37-1.el7_0.x86_64
rpm -q tree &> /dev/null || yum -q -y install vsftpd 這是一鍵安裝腳本。
RAID-10的工做原理
RAID10結合RAID1和RAID0,先鏡像,再條帶化;
特色: 磁盤數:最低4個,2n個,n大於等於2;
優勢:讀性能很高,寫性能比較好,數據安全性好,容許同時有N個磁盤失效;
缺點:利用率只有50%,開銷大;
可用空間:N*min(S1,S2,...其中最小空間)/2;
有容錯能力:每組鏡像最多隻能壞一塊;
適用領域:多用於要求高可用性和高安全性的數據庫應用;
RAID-01:先分紅兩組作成RAID-0,再把組成的RAID-0作成RAID-1;不符合經常使用方法,每一組有一塊壞的硬盤可能性大;
RAID-50的工做原理
是RAID5和RAID0的結合,先實現RAID5,再條帶化;(先作RAID-5在作RAID-0,最少6塊盤,每組容許壞1塊盤,空間利用率靈活)、RAID7(某家公司的私有技術,實際是文件服務器)
特色:磁盤數:最低6個;
優勢:比RAID5有更好的讀性能,比相同容量的RAID5重建時間更短,能夠允許N個磁盤同時失效;
缺點:設計複雜,比較難實現;同一個RAID5組內的兩個磁盤失效會致使整個陣列失效;
適用領域:大型數據庫服務器、應用服務器、文件服務器等應用;
重啓linux網絡的時候出現 this device is not active的解決辦法
1.service NetworkManager stop
2.chkconfig NetworkManager off
3./etc/init.d/inetwork restart
進入救援模式的幾種方法node

centos7最小化安裝,在默認狀況下,會出現以下界面:
Install centos 7
Test  this  media  &  install  centos 7
Troubleshooting
將鼠標置於第一項,按tab鍵,會彈出:
vlinuz  initrd=initrd.ing  inst.stage2=hd:LABEL=centos\x207\x28x86_64 quiet
此處輸入一個參數便可進入救援模式,或者  輸入rescue 加參數 也行
鼠標置於Troubleshooting,按tab鍵,會彈出:
vlinuz  initrd=initrd.ing  inst.stage2=hd:LABEL=centos\x207\x28x86_64 rescue quiet
或者:鼠標置於Install centos 7 按esc鍵,會出現
boot:此時輸入「rescue」  也能進入救援模式

shell腳本常見面試題

1 Shell腳本是什麼、它是必需的嗎?
答:一個Shell腳本是一個文本文件,包含一個或多個命令。做爲系統管理員,咱們常常須要使用多個命令來完成一項任務,咱們能夠添加這些全部命令在一個文本文件(Shell腳本)來完成這些平常工做任務。mysql

二、什麼是默認登陸shell,如何改變指定用戶的登陸shell
答:在Linux操做系統,「/bin/bash」是默認登陸shell,是在建立用戶時分配的。使用chsh命令能夠改變默認的shell。示例以下所示:
#chsh <用戶名> -s <新shell>
#chsh linuxtechi -s /bin/shlinux

三、能夠在shell腳本中使用哪些類型的變量?
答:在shell腳本,咱們可使用兩種類型的變量:
系統定義變量
用戶定義變量
系統變量是由系統系統本身建立的。這些變量一般由大寫字母組成,能夠經過「set」命令查看。nginx

用戶變量由系統用戶來生成和定義,變量的值能夠經過命令「echo $<變量名>」查看。 c++

四、如何將標準輸出和錯誤輸出同時重定向到同一位置?
答:有兩種方法:
A、2>&1 (如# ls /usr/share/doc > out.txt 2>&1 )
B、 &> (如# ls /usr/share/doc &> out.txt )web

五、 shell腳本中「if」語法如何嵌套?
答:基礎語法:
if [ 條件 ]
then
命令1
命令2
…..
else
if [ 條件 ]
then
命令1
命令2
….
else
命令1
命令2
…..
fi
fi面試

六、shell腳本中「$?」標記的用途是什麼?
答:在寫一個shell腳本時,若是你想要檢查前一命令是否執行成功,在if條件中使用「$?」能夠來檢查前一命令的結束狀態。簡單的例子以下:
root@localhost:~# ls /usr/bin/shar
/usr/bin/shar
root@localhost:~# echo $?
0 若是結束狀態是0,說明前一個命令執行成功。
root@localhost:~# ls /usr/bin/share
ls: cannot access /usr/bin/share: No such file or directory
root@localhost:~# echo $?
2 若是結束狀態不是0,說明命令執行失敗。正則表達式

七、在shell腳本中如何比較兩個數字 ?
答:在if-then中使用測試命令( -gt 等)來比較兩個數字,例子以下:redis

#!/bin/bash
x=10
y=20
if [ $x -gt $y ]
then
echo 「x is greater than y」
else
echo 「y is greater than x」
fi

八、shell腳本中break命令的做用 ?
答:break命令一個簡單的用途是退出執行中的循環。咱們能夠在while和until循環中使用break命令跳出循環。
九、 shell腳本中continue命令的做用 ?
答:continue命令不一樣於break命令,它只跳出當前循環的迭代,而不是整個循環。continue命令不少時候是頗有用的,例如錯誤發生,但咱們依然但願繼續執行大循環的時候。算法

十、 告訴我shell腳本中Case語句的語法 ?
case 變量 in
值1)
命令1
命令2
…..
最後命令
!!
值2)
命令1
命令2
……
最後命令
;;
esac

十一、shell腳本中while循環語法 ?
答:如同for循環,while循環只要條件成立就重複它的命令塊。不一樣於for循環,while循環會不斷迭代,直到它的條件不爲真。基礎語法:
while [ 條件 ]
do
命令…
done

十二、 如何使腳本可執行 ?
答:使用chmod命令來使腳本可執行。例子以下:

chmod a+x myscript.sh

1三、「#!/bin/bash」的做用 ?
答:#!/bin/bash是shell腳本的第一行,稱爲釋伴(shebang)行。這裏#符號叫作hash,而! 叫作 bang。它的意思是命令經過 /bin/bash 來執行。

1四、 shell腳本中for循環語法 ?
答:for 循環的基礎語法:
for 變量 in 循環列表
do
命令1
命令2
….
最後命令
done

1五、 如何調試shell腳本 ?
答:使用'-x'參數(sh -x myscript.sh)能夠調試shell腳本。另外一個種方法是使用‘-nv’參數( sh -nv myscript.sh)。

1六、shell腳本如何比較字符串?
答:test命令能夠用來比較字符串。測試命令會經過比較字符串中的每個字符來比較。

1七、Bourne shell(bash) 中有哪些特殊的變量 ?
答:下面的表列出了Bourne shell爲命令行設置的特殊變量。
內建變量 解釋
$0 命令行中的腳本名字
$1 第一個命令行參數
$2 第二個命令行參數
….. …….
$9 第九個命令行參數
$# 命令行參數的數量
$* 全部命令行參數,以空格隔開

1八、 在shell腳本中,如何測試文件 ?
答:test命令能夠用來測試文件。基礎用法以下表格:
Test 用法
-d 文件名 若是文件存在而且是目錄,返回true
-e 文件名 若是文件存在,返回true
-f 文件名 若是文件存在而且是普通文件,返回true
-r 文件名 若是文件存在並可讀,返回true
-s 文件名 若是文件存在而且不爲空,返回true
-w 文件名 若是文件存在並可寫,返回true
-x 文件名 若是文件存在並可執行,返回true

1九、在shell腳本中,如何寫入註釋 ?
答:註釋能夠用來描述一個腳本能夠作什麼和它是如何工做的。每一行註釋以#開頭。例子以下:
#!/bin/bash
#This is a command
echo 「I am logged in as $USER」

20、如何讓 shell 就腳本獲得來自終端的輸入?
答:read命令能夠讀取來自終端(使用鍵盤)的數據。read命令獲得用戶的輸入並置於你給出的變量中。例子以下:
#vi /tmp/test.sh
#!/bin/bash
echo ‘Please enter your name’
read name
echo 「My Name is $name」
#./test.sh
Please enter your name
LinuxTechi
My Name is LinuxTechi

2一、如何取消變量或取消變量賦值 ?
答:「unset」命令用於取消變量或取消變量賦值。語法以下所示:
#unset <變量名>

2二、 如何執行算術運算 ?
答:有兩種方法來執行算術運算:
1.使用expr命令
#expr 5 + 2
2.用一個美圓符號和方括號($[ 表達式 ])例如:
test=$[16 + 4] ; test=$[16 + 4]

2三、do-while語句的基本格式 ?
答:do-while語句相似於while語句,但檢查條件語句以前先執行命令(LCTT 譯註:意即至少執行一次。)。下面是用do-while語句的語法
do
{
命令
} while (條件)

2四、在shell腳本如何定義函數呢 ?
答:函數是擁有名字的代碼塊。當咱們定義代碼塊,咱們就能夠在咱們的腳本調用函數名字,該塊就會被執行。示例以下所示:
$ diskusage () { df -h ; }
譯註:下面是我給的shell函數語法,原文沒有
[ function ] 函數名 [()]
{
命令;
[return int;]
}

centos六、7上禁用防火牆、啓動at任務、時間同步

centos6 
service   atd   start    此次當即啓動
chkconfig   atd   on    下次開機啓動
service   iptables   stop   此次當即中止防火牆
chkconfig   iptables   off    下次開機時也不要啓動

centos7
systemctl   start   atd.service     此次當即啓動
systemctl   enable   atd.service    下次開機啓動
systemctl   stop   firewalld    此次已經啓動,當即中止防火牆
systemctl   disable   firewalld    此次運行時關閉,下次開機時也不要啓動

centos六、7都要作的一步:
時間同步:crontab   -e
計劃任務:*/30  *  *  *  *  /usr/bin/ntpdate   172.20.0.1  &>  /dev/null

date命令:系統時間
date [OPTION]... [+FORMAT]:顯示日期時間;
date [MMDDhhmm[[CC]YY][.ss]]:設定日期時間;
FORMAT:格式說明
%F:日期,顯示爲數字,格式爲:2016-03-02;
%D:顯示英制格式,月日年,顯示格式爲:03/02/16;
%T:時間,顯示爲數字,格式爲:15:52:16;
%Y:年份,只顯示完全年份數字(4位數字),顯示格式爲:2016;
%y:顯示年份的後兩位,顯示格式爲:16;
%m:月份,只顯示數字,顯示格式爲:03;
%d:日期,只顯示數字,顯示格式爲:02;
%H:小時,只顯示數字,顯示格式爲(00..23):15;
%k:小時,顯示格式爲(0..23);
%I:小時,格式爲(01..12);
%l:小時,顯示格式爲(1..12);
%h:顯示月份,顯示格式爲:3月;
%M:分鐘,只顯示數字,顯示格式爲:52;
%S:秒鐘,只顯示數字,顯示格式爲:16;
%a:縮寫星期;
%A:完整星期;
%b:縮寫月份;
%B:完整月份;
%r:顯示格式爲(11:11:04 PM);
%R:同%H%M,格式爲(23:37)
%s:從1970年1月1日至此刻所經歷的秒數;timestamp;顯示格式爲:1456905397;

文件系統的掛載:把額外的文件系統與當前根文件系統上的某個目錄創建關聯關係,並以之做爲新的文件的訪問入口的操做過程,就叫作掛載(mount),拆除此關聯關係的過程,即爲卸載(umount);

破解centos7,centos6和centos5 的root口令
1、centos5,6破解root口令,前提:待在電腦前,重啓電腦
一、在滾動條出現時,按esc鍵,出現菜單界面,按「 a 」鍵,輸入「 1 」模式,(注意:quit後要空一格輸入),此時效果爲:無需任何操做便可進入root用戶的命令行,
二、在命令行輸入「 passwd 」,便可更改新口令,輸入2次,

2、centos7破解root口令,
一、首先在菜單界面按【e】鍵,進入啓動文件界面後
二、按【↓】拉到底部
在 "LANG=zh_cn.UTF-8" 同行後面加上「init=/bin/sh」
而後按【Ctrl+X】進入「單用戶模式」
三、輸入【ls】,回車,再輸入【mount –o remount ,rw / 】,回車 (注意空格)
四、輸入【passwd】(注意:密碼不能少於8位),重複輸入兩次密碼
五、輸入【touch /.autorelabel】,回車,再輸入【exec /sbin/init】回車
以便重啓系統。
安裝虛擬機時修改網卡名稱爲eth0的方法:(按tab鍵即會彈出)
面試題、例題、知識點 彙總
[root@centos7 network-scripts]#vi ifcfg-eth0
BOOTPROTO=none
DEVICE=eth0
ONBOOT=yes
IPADDR=192.168.141.200
DNS1=192.168.0.1
DNS2=114.114.114.114 #僅主機不需加網關!
[root@centos7 network-scripts]#vi ifcfg-eth1
BOOTPROTO=none
DEVICE=eth1
ONBOOT=yes
IPADDR=172.18.9.200
GATEWAY=172.18.0.1 #加上網關便可ping通外網!
DNS1=172.18.0.1
1、修改命令提示符:
[root@200 ~]#cd /etc/profile.d
[root@200 profile.d]#vim env.sh
PS1="[\e[1;32m][\u@\h \W]\$[\e[0m]" #命令提示符爲淡綠色!不用source生效便可永久保存!

2、系統添加一塊新硬盤不用關閉系統便可加載硬盤信息的操做:
[root@centos7 ~]#ls /sys/class/scsi_host
host0 host1 host2
[root@centos7 ~]#echo "- - -" > /sys/class/scsi_host/host0/scan

3、設置命令別名(簡化操做,節省時間):
[root@centos7 ~]#ls -a
. .. anaconda-ks.cfg .bash_history .bash_logout .bash_profile .bashrc .cshrc .tcshrc
[root@centos7 ~]#vi .bashrc
alias cdnet='cd /etc/sysconfig/network-scripts/'
alias xy='systemctl restart network'
alias scan='echo "- - -" > /sys/class/scsi_host/host0/scan'
[root@centos7 ~]#source .bashrc #source 使其生效!

4、建立本地光盤yum源:
yum install gcc gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel systemd-devel net-tools vim iotop bc zip unzip zlib-devel lrzsz tree screen lsof tcpdump wget ntpdate
一、掛載本地光盤;mount /dev/sr0 /mnt
[root@centos6 ~]# mount /dev/sr0 /mnt
mount: block device /dev/sr0 is write-protected, mounting read-only
二、清空/etc/yum.repos.d/的自帶文件
[root@centos6 ~]# cd /etc/yum.repos.d/
[root@centos6 yum.repos.d]# ls
CentOS-Base.repo CentOS-Debuginfo.repo CentOS-fasttrack.repo CentOS-Media.repo CentOS-Vault.repo
[root@centos6 yum.repos.d]# rm -f *
三、編輯base.repo文件
[root@centos6 ~]# vim /etc/yum.repos.d/base.repo
[base]
name=file
baseurl=file:///mnt
gpgcheck=0

#[epel]
#name=epel
#baseurl=https://mirrors.aliyun.com/epel/6/x86_64/
#gpgcheck=0 由於更多的在用本地光盤yum源,因此把aliyun源給禁用,要註釋掉,避免衝突
四、清除yum緩存,重讀repolist列表:
[root@centos7 yum.repos.d]# yum clean all
Loaded plugins: fastestmirror, langpacks
Cleaning repos: base
Cleaning up list of fastest mirrors
[root@centos7 yum.repos.d]# yum repolist
Loaded plugins: fastestmirror, langpacks
Determining fastest mirrors
base | 3.6 kB 00:00:00
(1/2): base/group_gz | 166 kB 00:00:00
(2/2): base/primary_db | 6.0 MB 00:00:00
repo id repo name status
base file 10,019
repolist: 10,019
五、使用本地yum源安裝目標軟件:yum install xxxx

當出現以下問題時:#yum install -y redis
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
No package redis available.
Error: Nothing to do
解決辦法:
#wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
#rpm -ivh epel-release-6-8.noarch.rpm
#yum -y install redis 便可安裝成功!

絕對路徑:以正斜杆開頭,完整的文件的位置路徑,可用於任何想指定一個文件的時候。 相對路徑:不以斜槓開頭,指定相對於當前工做目錄或某目錄的位置。硬連接:ln 目標文件名 連接名,軟鏈接: ln -s 目標文件名
軟硬:{共性}:修改軟硬連接文件,全部的文件都是同步修改的。
硬連接: 本質:同一個文件多個名字、連接數:有一個以上的連接,不可跨分區,只容許對文件建立連接,不依賴原始文件,刪除硬連接文件的源文件,硬連接文件仍然存在,不佔用空間,格式:ln 目標文件 連接名
軟鏈接:本質: 一個文件對應快捷方式,是不一樣文件,連接數:只有一個連接,能夠跨分區,能夠對目錄和文件夾進行連接,依賴於原始文件,刪除源文件,軟鏈接則指向一個空文件,它具備依賴性,佔用磁盤空間,格式: ln -s 目標文件 源文件
自定義分區:
/dev/sda1 /boot 1G
/dev/sda2 / 50G
/dev/sda3 swap 2G
/dev/sda4 擴展分區
/dev/sad5 /data 10G

Centos7 重啓網卡命令:systemctl restart network
Centos6 重啓網卡命令:service network restart
設置主機和IP綁定信息:cat /etc/hosts
查看內存信息: cat /proc/meminfo
修改IP地址: vim /etc/sysconfig/network--scripts/ifcfg--ens33
su 與 su-的區別:
su:非交互式登陸,在環境變量下不切換
su-:交互式登陸(徹底切換),當前目錄改變爲切換用戶,在家目錄,連同環境一同切換。
對/etc/目錄,分別執行命令,實現如下功能
(1)按從大到小順序顯示文件列表 : ll -S /etc
(2)只顯示隱藏文件 :ll -d /etc/.
(3)只顯示目錄 : ll -d /etc/
/
(4)按mtime時間顯示文件列表 : ll -t /etc
(5)按atime時間顯示文件列表 : ll -u /etc
正則表達式部分:
0-9: [0-9] 10-99: [1-9][0-9] 100-199:1[0-9][0-9] 200-249:2[0-4][0-9] 250-255:25[0-5]
過濾ifconfig命令結果中全部大於0且小於255的三位數
ifconfig | egrep -o "\<((1[0-9]{2}|2[0-4][0-9]|25[0-4]))"
取IPV4地址:ifconfig ens33| grep -Eo "([0-9]{1,3}.){3}[0-9]{1,3}" head -1
取分區利用率:df | grep " /dev/sd " | grep -o " [0-9]{1,3}%" | grep -o " [0-9]+ " | sort -nr | head - n1
取分區利用率:sed -rn ' s/^([^[:space:]]+).([0-9]+)%./\2/p'
用戶:sed -rn ' s/^([^[:space:]]+).([0-9]+)%./\1/p'
查看版本型號: cut -d "." -f1 /etc/redhat-release |egrep -o "[0-9]+"
查看版本型號:grep -o " [0-9]+. " /etc/redhat-release | grep -o " [0-9]+ "
查看版本型號:sed -rn " s/.([0-9]+)../\1/p " /etc/redhat-release
匹配手機號碼:egrep -o " 1[0-9]{10} " tel.txt
匹配email郵箱:egrep -o "([[:alnum:]]|_)+@[[:alnum:]]+.com$" mail.txt
取/etc/sysconfig/network-scripts/ifcfg-ens33基名,用兩種方法實現。
A、basename /etc/sysconfig/network-scripts/ifcfg-ens33
B、echo /etc/sysconfig/network-scripts/ifcfg-ens33 | egrep -o "[^/]+$"
|grep -o ".[^/] 取基名 |egrep -o "[^/]+$" 取/下的基名
|egrep -o "[^/]+/?$" 取/前的目錄名
|sed -r 's@(./)([^/]+)/?@\2@' 取基名
|sed -r 's@(.
/)([^/]+)/?@\1@' 取目錄名
使用sed命令取IPV4地址:
一、|sed -n '2p' |sed -r 's/inet//' |sed -r 's/netmask.//' |tr -d " "
二、|sed -n '2p' sed -e 's/^.
inet//' -e 's/.//'
三、|sed -n -e '2s/^.
inet//' -e '2s/ .//p'
四、|sed -nr '2s@.
inet (.) .n.@\1@p'
五、|sed -nr '2s/[^0-9]+([0-9.]+).
/\1/p'
統計/var/log/httpd/access.log日誌訪問頻繁前十的地址,並從大到小排序。
cat access.log |cut -d" " -f1 |sort |uniq -c |sort -nr|head -n10
例題:一塊新硬盤插入linux主機後,怎樣才能正常使用:
一、格式化分區用fdisk命令進行,二、製做文件系統用mkfs.xfs命令進行,三、掛載用mount命令進行,四、編輯配置文件「 /etc/fstab 」實現自動掛載。

搜狐面試題:echo " a b c " |read x y z ;echo x=$x y=$y z=$z
結果:x=  y=  z= 
echo " a b c " |{ read x y z ;echo x=$x y=$y z=$z;}
結果:x=a  y=b  z=c
echo "   a b c" | {read x y z ;echo x=$x  y=$y  z=$z;}
結果:x=a  y=b  z=c
echo "   a b c " | while read  x,y,z;do echo x=$x y=$y z=$z,done
結果:x=a  y=b  z=c
若cat > f1   --->abc  xx  yy  zz  234
cat  f1  |while  read  x y z  ;do  echo  x=$x  y=$y  z=$z;done
結果:x=a  y=b  z=c 
x=xx  y=yy  z=zz
x=2  y=3  z=4
新浪面試題:cp /etc/fstab /data/dir 問:他須要有最小權限是什麼?

答:分三步:一、探究cp外部命令有啥權限,他至少必需要有x:執行權限。二、
/etc/fstab:/fstab 只要有讀權限就能夠了,前提是/etc要有x執行權限,/etc能夠沒有讀權限,只要/etc有基本可執行權限進得去就能夠。三、/data/dir:至少要有執行和寫權限。
總結:命令的權限:一、cp:這是個程序,至少要有執行權限,二、要拷貝的文件:/etc/fstab:/fstab 至少要有讀權限,而所在文件夾必需要有可執行權限,要不進不去,三、要拷貝的目標文件夾至少要有執行和寫權限。
usermod [OPTION] login
-u UID: 新UID
-g GID: 新主組
-G GROUP1[,GROUP2,...[,GROUPN]]]:新附加組,原來的附加組將會被覆蓋;若保留原有,則要同時使用-a選項
-s SHELL:新的默認SHELL
-c 'COMMENT':新的註釋信息
-d HOME: 新家目錄不會自動建立;若要建立新家目錄並移動原家數據,同時使用-m選項
-l login_name: 新的名字
-L: lock指定用戶,在/etc/shadow 密碼欄的增長 !
-U: unlock指定用戶,將 /etc/shadow 密碼欄的 ! 拿掉
例題:建立下面的用戶、組和組成員關係
名字爲webs 的組
用戶nginx 使用webs 做爲附屬組
用戶varnish,也使用webs 做爲附屬組
用戶mysql,不可交互登陸系統,且不是webs 的成員, nginx, varnish, mysql密碼都是magedu
[root@magedu ~]# groupadd webs
[root@magedu ~]# useradd -G webs nginx
[root@magedu ~]# useradd -G webs varnish
[root@magedu ~]# useradd -s /sbin/nologin mysql
[root@magedu ~]# echo "magedu"|passwd --stdin nginx
[root@magedu ~]# echo "magedu"|passwd --stdin varnish
[root@magedu ~]# echo "magedu"|passwd --stdin mtsql

編寫顯示系統信息的腳本:(要考慮到可更改性,可維護性)
[root@centos7 script35]# vim systeminfo.sh 
#!/bin/bash
#********************************************************************
#Author:                Xingxiaoyatongxue
#QQ:                    1098775809
#Date:                  2019-02-05
#FileName:             systeminfo.sh
#URL:                   http://www.magedu.com
#Description:          The test script
#Copyright (C):         2019 All rights reserved
#********************************************************************
COLOR="\e[1;31m"
COLOREND="\e[0m"                                                            
echo -e "my host name is $COLOR`hostname`$COLOREND"
echo -e "my Adress is $COLOR`ifconfig ens38|grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}'|head -n1`$COLOREND"
echo -e "OS version is $COLOR`cat /etc/centos-release`$COLOREND"
echo -e "Kernel version is $COLOR`uname -r`$COLOREND"
echo -e "CPU type is $COLOR`lscpu |grep "Model name" |tr -s " " |cut -d: -f2`$COLOREND"
echo -e "Mem total is $COLOR`head -n1 /proc/meminfo|grep -o "[0-9].*"`$COLOREND"
echo -e "Disk is $COLOR`lsblk|grep -Eo "[0-9]+G" |head -1`$COLOREND"
[root@centos7 script35]# bash systeminfo.sh 
my host name is centos7.localdomain
my Adress is 192.168.141.130
OS version is CentOS Linux release 7.6.1810 (Core) 
Kernel version is 3.10.0-957.el7.x86_64
CPU type is  Intel(R) Core(TM) i5-5200U CPU @ 2.20GHz
Mem total is 2379348 kB
Disk is 200G
[ $ver  -eq  5  ]  &&  echo  ver  is  5  ||  echo  ver  is  not  5
釋義:若  [ $ver  -eq  5   ]  爲真,就執行   echo  ver  is  5  
若  [ $ver  -eq  5   ]  爲假,就執行  echo  ver  is  not  5
cmd1  短路與&&  cmd2
若cmd1 真,執行cmd2  結果未知
若cmd1 假,不執行cmd2  結果爲假
cmd1 短路或|| cmd2
若cmd1 真,不執行cmd2  結果爲真
若cmd1 假,執行cmd2  結果未知

設置本地解析器/etc/hosts,在使用dns前檢查
添加本機地址爲172.18.119.74解析映射爲magedu.com,172.18.0.1映射爲server.com
[root@node1 ~]# vim /etc/hosts
添加內容:
172.18.119.74 magedu.com
172.18.0.1 server.com
進程管理部分:
buffer 緩衝區 屢次write,合併成一次write
cache 緩存 從高速設備代替慢速
「 lsof -i 」:查看某個端口是哪一個進程在使用, 「 iotop 」:查看是哪一個進程帶來了大量的磁盤I/O,(查看哪一個進程讓磁盤I/O)特別繁忙。「 pid 」:每一個進程系統都會分配一個數字。
網段數:2^(可變的網絡ID), 劃分子網數:2^(網ID借主ID), 主機數:2^主機ID位-2, 網絡ID:IP與子網掩碼,
一、tar的意思是Together ARchive(打包歸檔)。咱們能夠用來打包,也能夠用來解壓包,並且還支持打包後用各類格式壓縮(gz、bz二、xz等)。
單個參數意義:
f: 歸檔file
v: verbose(注:詳細),顯示壓縮過程的詳細信息
t: list,顯示歸檔的內容
x: extract,解壓
c: compress,壓縮
z: gzip格式壓縮,後綴爲.gz
j: bzip2格式壓縮,後綴爲.bz2
J: xz格式壓縮,後綴爲.xz
經常使用組合:
組合參數 意義 壓縮文件後綴
cvf 原始tar包,不壓縮 .tar
zcvf 先tar,後gzip壓縮 tar.gz 、tgz
jcvf 先tar,後bzip2壓縮 tar.bz2 、tbz2
Jcvf 先tar,後xz壓縮 tar.xz、txz
xvf 解壓全部格式,通用解壓命令 -
(1)、 簡述raid0、raid一、raid5三種工做模式的工做原理及特色
(2)描述linux系統下建立軟RAID5的命令和步驟
(1)、RAID0
面試題、例題、知識點 彙總
RAID 0亦稱爲帶區集。它將兩個以上的磁盤並聯起來,成爲一個大容量的磁盤。在存放數據時,分段後分散存儲在這些磁盤中,由於讀寫時均可以並行處理,因此在全部的級別中,RAID 0的速度是最快的。可是RAID 0既沒有冗餘功能,也不具有容錯能力,若是一個磁盤(物理)損壞,全部數據都會丟失。
RAID1
面試題、例題、知識點 彙總
兩組以上的N個磁盤相互做鏡像,在一些多線程操做系統中能有很好的讀取速度,理論上讀取速度等於硬盤數量的倍數,與RAID 0相同。另外寫入速度有微小的下降。只要一個磁盤正常便可維持運做,可靠性最高。其原理爲在主硬盤上存放數據的同時也在鏡像硬盤上寫同樣的數據。當主硬盤(物理)損壞時,鏡像硬盤則代替主硬盤的工做。由於有鏡像硬盤作數據備份,因此RAID 1的數據安全性在全部的RAID級別上來講是最好的。但不管用多少磁盤作RAID 1,僅算一個磁盤的容量,是全部RAID中磁盤利用率最低的一個級別。
若是用兩個不一樣大小的磁盤建RAID 1,可用空間爲較小的那個磁盤,較大的磁盤多出來的空間也能夠分區成一個區來使用,不會形成浪費。
RAID5
面試題、例題、知識點 彙總
RAID Level 5是一種儲存性能、數據安全和存儲成本兼顧的存儲解決方案。它使用的是Disk Striping(硬盤分區)技術。RAID 5至少須要三塊硬盤,RAID 5不是對存儲的數據進行備份,而是把數據和相對應的奇偶校驗信息存儲到組成RAID5的各個磁盤上,而且奇偶校驗信息和相對應的數據分別存儲於不一樣的磁盤上。當RAID5的一個磁盤數據發生損壞後,能夠利用剩下的數據和相應的奇偶校驗信息去恢復被損壞的數據。RAID 5能夠理解爲是RAID 0和RAID 1的折衷方案。RAID 5能夠爲系統提供數據安全保障,但保障程度要比鏡像低而磁盤空間利用率要比鏡像高。RAID 5具備和RAID 0相近似的數據讀取速度,只是由於多了一個奇偶校驗信息,寫入數據的速度相對單獨寫入一塊硬盤的速度略慢,若使用「回寫緩存」可讓性能改善很多。同時因爲多個數據對應一個奇偶校驗信息,RAID 5的磁盤空間利用率要比RAID 1高,便宜。

(2)、新增長一塊硬盤sdb,200G
劃分4個分區,分別爲20G
fdisk /dev/sdb,具體過程不貼了,最後的效果是這樣:
Device Boot Start End Blocks Id System
/dev/sdb1 2048 41945087 20971520 83 Linux
/dev/sdb2 41945088 83888127 20971520 83 Linux
/dev/sdb3 83888128 125831167 20971520 83 Linux
/dev/sdb4 125831168 419430399 146799616 5 Extended
/dev/sdb5 125833216 167776255 20971520 83 Linux

sdb1,sdb2,sdb3,sdb5各20G

#建立md0的軟raid5陣列
mdadm -C /dev/md0 -a yes -l 5 -n 3 -x 1 /dev/sdb1 /dev/sdb2 /dev/sdb3 /dev/sdb5
#格式化
mkfs.xfs /dev/md0
#掛載
mkdir /mnt/raid5
mount /dev/md0 /mnt/raid5
天天的2 點和12 點整,將/etc 備份至/testdir/backup目錄中,保存的文件名稱格式爲etcbak-yyyy-mm-dd-HH.tar.xz
crontab -e
0 2,12 * /usr/bin/tar -Jcvf etcbak-data +%F-%H.tar.xz /etc
列出三個私有地址網絡,用 CIDR 表示,並將 10.100.208.0/20 網絡劃分紅 8 個子網,寫出最大子網絡的 IP 範圍。
三個私有地址網絡:
10.0.0.0/8~10.255.255.255/8
11.172.16.0.0/16 ~ 172.31.255.255/16 16個地址用於內部
192.168.0.0/24 ~ 192.168.255.255/24 256個地址用於內部
劃分後的最大子網絡的IP範圍爲: 10.100.222.1-10.100.223.255
給CentOS6 eth0 網 卡 , 分 別 設 置 三 個 IP 地 址 :10.0.0.200/8,172.18.0.200/16,192.168.0.200/24,請寫出步驟
臨時配置:
ifconfig eth0:0 10.0.0.200 netmask 255.0.0.0 up
ifconfig eth0:1 172.18.0.200 netmask 255.255.255.0 up
ifconfig eth0:2 192.168.0.200 netmask 255.255.255.0 up
永久生效:
vim /etc/sysconfig/network-scripts/ifcfg-eth0:0
DEVICE=eth0:0
ONBOOT=yes
BOOTPROTO=static
IPADDR=10.0.0.200
PREFIX=8
vim /etc/sysconfig/network-scripts/ifcfg-eth0:1
DEVICE=eth0:1
ONBOOT=yes
BOOTPROTO=static
IPADDR=172.18.0.200
PREFIX=16
vim /etc/sysconfig/network-scripts/ifcfg-eth0:2
DEVICE=eth0:2
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.0.200
PREFIX=24

在 CentOS6 中,誤刪除/boot 下全部文件後沒法啓動,寫出恢復的詳細步驟。
救援模式進入系統
chroot /mnt/sysimage
mount /dev/sr0 /mnt
rpm -ivh /mnt/Packages/kernel-2.6.32-696.el6.x86_64.rpm --force
grub-install /dev/sda
手寫/boot/grub/grub.conf
default =0
timeout=5
root (hd0,0)
title CentOS 6.9
kernel /vmlinuz-2.6.32-696.el6.x86_64 root=/dev/sda2
init initramfs-2.6.32-696.el6.x86_64.img
退出重啓

快速查找/root目錄中大於2M的文本,並將文件中的magedu,換成www.magedu.com
find /root --size +2M -type f -exec sed -i 's/magedu/www.magedu.com/g' {} \;

若系統檢測到***用root用戶登陸了系統,如何將***所登陸的終端殺死,並當即對root用戶修改密碼。
root用戶執行who查看登陸的終端信息(TERMINAL)
ps -t |grep TERMINAL查看終端的進程號
kill -9 PID按終端的進程號號殺掉異常的終端進程
echo xxxx |passwd --stdin rootxxxx爲新的密碼

簡述CentOS6開機啓動流程
post–mbr grub 1stage–stage1.5–stage 2 /boot/grub—/boot/grub/grub.conf —kernel /vmlinuz.XXX root=— /boot/initramfs |/boot/initrd.XX.img —/sbin/init –/etc/inittab —/etc/rc.d/rc.sysinit(/etc/fstab) —/etc/rc5.d/K,S —/etc/rc.d/rc.local –login
POST加電自檢
引導加載器bootloader
bootloader的引導程序GRUB的一部分放在MBR中
引導加載器程序GRUB
grub 1.5階段和2階段
加載內核模塊
先加載vmliuz內核,而後加載initramfs文件initd.img(裏面都是預加載用到的的模塊)
運行init,掛載硬盤和啓動程序
運行init程序,init去讀inittab啓動模式,讀取/etc/rc.d/rc.sysinit(裏面有硬盤的掛載),找到相應模式對應的程序啓動腳本,好比在5模式,去/etc/rc5.d裏按順序啓動程序
sbin/init –/etc/inittab —/etc/rc.d/rc.sysinit(/etc/fstab) —/etc/rc5.d —/etc/rc.d/rc.local 
登陸

Linux現鏈接一個新的存儲(如/dev/sdb,容量爲10T)一人應用程序須要在/data目錄使用此存儲的100G的存儲空間,若作成LVM須要哪些步驟,請描述
#讓服務器識別硬盤
echo '- - -' /sys/class/scsi_host/host2/scan
#lsblk能夠看到硬盤
lsblk
lvm建立過程:
pvcreate /dev/sdb
vgcreate vg1 /dev/sdb
lvcreate -L 100G -n lv1 vg1
mkfs.ext4 /dev/vg1/lv1
mkdir /data
mount /dev/vg1/lv1 /data
若是要加到fstab裏設成開機啓動:
echo "/dev/vg1/lv1 /data ext4 defaults 0 0" >> /etc/fstab

修改上述網站的http 端口爲9527 ,併爲之增長SELinux 端口標籤。
sed -i.bak 's/Listen\ 80/Listen\ 9527/g' /etc/httpd/conf/httpd.conf  # 修改端口爲9527
semanage port -l| grep http_port_t  # SELinux策略裏沒有9527端口
semanage port -a -t http_port_t -p tcp 9527  # 添加9527端口
semanage port -l| grep http_port_t  # 再次查看有了
查看crond進程打開了哪些文件
lsof -c crond|grep REG|tr -s " " |cut -d" " -f9

請完成如下操做
1)查詢file.txt文件裏第一列數據數值之和(字段以&符號分隔)
2)查詢Hie.txt第7行以前添加一行,內容爲」#註釋」
3)打印出file.txt文件第6到第10行
awk -F'&' 'NR==1 {for (i=1;i<=NF;i++){sum+=$i};print sum}' file.txt
sed -i.bak '7i/#註釋' Hie.txt
awk 'NR >=6 && NR<=10' file.txt

編寫腳本,利用變量RANDOM生成10個隨機數字,輸出這10個數字,並顯示其中的最大值和最小值,用兩種方法實現
一、for i in seq 0 9;do
array[$i]=$RANDOM
echo ${array[$i]}
done
echo "the min number:"
echo ${array[]}|awk -v RS=' ' -v ORS="\n" '{print $0}'|sort -n|grep -v '^$'|head -1
echo "the max number:"
echo ${array[
]}|awk -v RS=' ' -v ORS="\n" '{print $0}'|sort -n|grep -v '^$'|tail -1
二、for i in seq 10;do
j=$RANDOM
echo $j
if [ $i -eq 1 ];then
max=$j
min=$j
else
if [ $j -ge $max ];then
max=$j
fi
if [ $j -le $min ];then
min=$j
fi
fi
done

echo max number is $max
echo min number is $min

vim
複製/etc/ssh/sshd_config 到/tmp/中並改名爲sshd_config.bak。將/tmp/sshd_config.bak文件中全部以非#號開頭與包含空白字符的行保存至/tmp/sshd_config中。
cp /etc/ssh/sshd_config /tmp/sshd_config.bak
cat /tmp/sshd_config.bak |grep "^[^#]"|grep "^[^[:space:]*$]"
導航命令:% 括號匹配    插入命令: i 在當前位置生前插入、I 在當前行首插入、a 在當前位置後插入、A 在當前行尾插入、o 在當前行以後插入一行、O 在當前行以前插入一行
查找命令:/text  查找text,按n健查找下一個,按N健查找前一個。  ?text  查找text,反向查找,按n健查找下一個,按N健查找前一個。
替換命令:ra 將當前字符替換爲a,當期字符即光標所在字符。
s/old/new/ 用old替換new,替換當前行的第一個匹配
%s/old/new/ 用old替換new,替換全部行的第一個匹配
移動命令:^ 移動到本行第一個非空白字符上。  0(數字0)移動到本行第一個字符上,   <HOME> 移動到本行第一個字符。同0鍵。  $ 移動到行尾    gg 移動到文件頭。 = [[        G(shift + g) 移動到文件尾。 = ]]
跳到指定行,冒號+行號,回車,好比跳到240行就是 :240回車。另外一個方法是行號+G,好比230G跳到230行。
Ctrl + e 向下滾動一行      Ctrl + y 向上滾動一行      Ctrl + d 向下滾動半屏    Ctrl + u 向上滾動半屏    Ctrl + f 向下滾動一屏      Ctrl + b 向上滾動一屏
x 刪除當前字符         3x 刪除當前光標開始向後三個字符
X 刪除當前字符的前一個字符。X=dh
dl 刪除當前字符, dl=x           dh 刪除前一個字符       dd 刪除當前行    dj 刪除上一行       dk 刪除下一行       10d 刪除當前行開始的10行。
D 刪除當前字符至行尾。D=d$      d$ 刪除當前字符以後的全部字符(本行)
1,10d 刪除1-10行      11,$d 刪除11行及之後全部的行
刪除全文:光標放置文首,:.,$d
拷貝粘貼:ddp交換當前行和其下一行        xp交換當前字符和其後一個字符

MYSQL部分

A.併發控制
1.共享鎖(shared lock,讀鎖):共享的,相互不阻塞的       2.排他鎖(exclusive lock,寫鎖):排他的,一個寫鎖會阻塞其餘的寫鎖和讀鎖
B.事務
1.事務ACID
* 原子性(atomicity)一個事務必須被視爲一個不可分割的最小工做單元,整個事務中全部操做要麼所有提交成功,要麼所有失敗回滾,對於一個事務來講,不可能只執行其中的一部分操做
* 一致性(consistency)數據庫老是從一個一致性的狀態轉換到另一個一致性的狀態
* 隔離性(isolation)一個事務所作的修改在最終提交之前,對其餘事務是不可見的
* 持久性(durability)一旦事務提交,則其所作的修改就會永久保存到數據庫中
2.四種隔離級別
* READ UNCOMMITTED(未提交讀),事務中的修改,即便沒有提交,對其餘事務也都是可見的,事務能夠讀取未提交的數據,也被稱爲髒讀(Dirty Read),這個級別會致使不少問題
* READ COMMITTED(提交讀),大多數數據庫系統的默認隔離級別,一個事務開始時,只能「看見」已經提交的事務所作的修改,一個事務從開始直到提交以前,所作的任何修改對其餘事務都是不可見的,也叫不可重複讀(nonrepeatable read),有可能出現幻讀(Phantom Read),指的是當某個事務在讀取某個範圍內的記錄時,另一個事務又在該範圍內插入了新的記錄,當以前的事務再次讀取該範圍的記錄時,會產生幻行(Phantom Row)
* REPEATABLE READ(可重複讀),經過InnoDB和XtraDB存儲引擎,是MySQL的默認事務隔離級別
* SERIALIZABLE(可串行化)最高級別,經過強制事務串行執行,避免了幻讀問題,會在讀取的每一行數據上都加鎖,可能致使大量的超時和鎖爭用的問題
3.死鎖:指兩個或多個事務在同一資源上相互佔用,並請求鎖定對方佔用的資源,從而致使惡性循環的現象
4.事務日誌:存儲引擎在修改表的數據時只須要修改其內存拷貝,再把該修改行爲記錄到持久在硬盤上的事務日誌中,而不用每次都將修改的數據自己持久到磁盤。事務日誌持久之後,內存中被修改的數據在後臺能夠慢慢地刷回到磁盤,稱爲預寫式日誌(Write-Ahead Logging)

A.索引基礎
1.索引能夠包含一個或多個列的值,若是索引包含多個列,那麼列的順序也十分重要,由於MySQL只能高效地使用索引的最左前綴列
2.ORM工具可以產生符合邏輯的、合法的查詢,除非只是生成很是基本的查詢,不然它很難生成適合索引的查詢
3.在MySQL中,索引是在存儲引擎層而不是服務器層實現的,因此,並無統一的索引標準:不一樣存儲引擎的索引的工做方式並不同,也不是全部的存儲引擎都支持全部類型的索引
4.B-Tree意味着全部的值都是按順序存儲的,而且每個葉子頁到根的距離相同,可以加快訪問數據的速度,從索引的根節點開始進行搜索,適用於全鍵值、鍵值範圍或鍵前綴查找
B.索引的優勢
1.三個優勢:    * 索引大大減小了服務器須要掃描的數據量     * 索引能夠幫助服務器避免排序和臨時表     * 索引能夠將隨機I/O變爲順序I/O

查詢執行路徑
* 客戶端發送一條查詢給服務器   * 服務器先檢查查詢緩存,若是命中則馬上返回,不然進入下一階段   * 服務器端進行SQL解析、預處理,再由優化器生成對應的執行計劃   * MySQL根據優化器生成的執行計劃,調用存儲引擎的API來執行查詢    * 將結果返回給客戶端

B.視圖
1.視圖自己是一個虛擬表,不存聽任何數據,返回的數據是MySQL從其餘表中生成的
2.MySQL使用兩種算法:合併算法(MERGE)和臨時表算法(TEMPTABLE),會盡量地使用合併算法
3.若是視圖中包含GROUP BY、DISTINCT、任何聚合函數、UNION、子查詢等,只要沒法在原表記錄和視圖記錄中創建一一映射的場景中,MySQL都將使用臨時表算法來實現視圖
4.可更新視圖(updatable view)是指能夠經過更新這個視圖來更新視圖涉及的相關表,CHECK OPTION表示任何經過視圖更新的行,都必須符合視圖自己的WHERE條件定義
5.在重構schema的時候可使用視圖,使得在修改視圖底層表結構的時候,應用代碼還可能繼續不報錯運行
6.MySQL中不支持物化視圖(指將視圖結果數據存放在一個能夠查看的表中,並按期從原始表中刷新數據到這個表中)
7.不會保存視圖定義的原始SQL語句
HTTP部分:
http協議經常使用的狀態碼
200: 成功,請求數據經過響應報文的entity-body部分發送;OK
301: 請求的URL指向的資源已經被刪除;但在響應報文中經過首部Location指明源如今所處的新位置;Moved Permanently
302: 響應報文Location指明資源臨時新位置 Moved Temporarily
304: 客戶端發出了條件式請求,但服務器上的資源不曾發生改變,則經過響應此狀態碼通知客戶端;Not Modified
401: 須要輸入帳號和密碼認證方能訪問資源;Unauthorized
403: 請求被禁止;Forbidden 404: 服務器沒法找到客戶端請求的資源;Not Found
500: 服務器內部錯誤;Internal Server Error
502: 代理服務器從後端服務器收到了一條僞響應,如沒法鏈接到網關;Bad Gate
503: 服務不可用,臨時服務器維護或過載,服務器沒法處理請求
504: 網關超時
相關文章
相關標籤/搜索