1. 程式人生 > >小知識點 大總結(常用,必會)

小知識點 大總結(常用,必會)

x86 嵌套 參數 access 常用 標準輸出 mct 一個 bre

1、進入救援模式的幾種方法
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”  也能進入救援模式

2、shell腳本常見面試題

1 Shell腳本是什麽、它是必需的嗎?
答:一個Shell腳本是一個文本文件,包含一個或多個命令。作為系統管理員,我們經常需要使用多個命令來完成一項任務,我們可以添加這些所有命令在一個文本文件(Shell腳本)來完成這些日常工作任務。

2、什麽是默認登錄shell,如何改變指定用戶的登錄shell
答:在Linux操作系統,“/bin/bash”是默認登錄shell,是在創建用戶時分配的。使用chsh命令可以改變默認的shell。示例如下所示:
# chsh  <用戶名>  -s  <新shell>
# chsh  linuxtechi  -s  /bin/sh

3、可以在shell腳本中使用哪些類型的變量?
答:在shell腳本,我們可以使用兩種類型的變量:
   系統定義變量
     用戶定義變量
系統變量是由系統系統自己創建的。這些變量通常由大寫字母組成,可以通過“set”命令查看。

用戶變量由系統用戶來生成和定義,變量的值可以通過命令“echo $<變量名>”查看。  

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

5、 shell腳本中“if”語法如何嵌套?
答:基礎語法:
if [ 條件 ]
then
命令1
命令2
…..
else
if [ 條件 ]
then
命令1
命令2
….
else
命令1
命令2
…..
fi
fi

6、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,說明命令執行失敗。

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

#!/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


8、shell腳本中break命令的作用 ?
答:break命令一個簡單的用途是退出執行中的循環。我們可以在while和until循環中使用break命令跳出循環。
9、 shell腳本中continue命令的作用 ?
答:continue命令不同於break命令,它只跳出當前循環的叠代,而不是整個循環。continue命令很多時候是很有用的,例如錯誤發生,但我們依然希望繼續執行大循環的時候。

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

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

12、 如何使腳本可執行 ?
答:使用chmod命令來使腳本可執行。例子如下:
##### # chmod a+x myscript.sh

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

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

15、 如何調試shell腳本 ?
答:使用‘-x‘參數(sh -x myscript.sh)可以調試shell腳本。另一個種方法是使用‘-nv’參數( sh -nv myscript.sh)。

16、shell腳本如何比較字符串?
答:test命令可以用來比較字符串。測試命令會通過比較字符串中的每一個字符來比較。

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

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

19、在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

21、如何取消變量或取消變量賦值 ?
答:“unset”命令用於取消變量或取消變量賦值。語法如下所示:
# unset <變量名>

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

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

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

3、centos6、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    這次運行時關閉,下次開機時也不要啟動

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

取值部分:grep、sed、awk
取ipv4地址:ifconfig ens33 |grep -Eo "([0-9]{1,3}.){3}[0-9]{1,3}" |head -1
ifconfig ens33 |sed -n ‘2p‘ |sed -e ‘s/^.inet/ /‘ -e ‘s/./ /‘
ifconfig ens33 |sed -r ‘s/inet/ /‘ |sed -r ‘s/netmask ./ /‘ |tr -d " "
ifconfig ens33 |sed -nr ‘2s/[0-9]+([0-9.]+).
/\1/p‘
查看版本型號:cut -d -f1 /etc/redhat-release | egrep -o "[0-9]+"
sed -r ‘s/.([0-9]+)../\1/p‘ /etc/redhat-release
eg: echo "/etc/rc.d/init.d"
取基名:|sed -r ‘s@(./)([^/]+)/?@\2@’
取目錄名:|sed -r ‘s@(.
/)([^/]+)/?@\1@‘

小知識點 大總結(常用,必會)