linux面試集
shell:
1、$# 和 $*之類的特殊變量
特殊變量列表 |
|
變量 | 含義 |
$0 | 當前腳本的文件名 |
$n | 傳遞給腳本或函數的參數。n是一個數字,表示第幾個參數。例如,第一個參數就是$1 |
$# | 傳遞給腳本或函數的參數個數 |
$* | 傳遞給腳本或函數的所有參數 |
$@ | 傳遞給腳本或函數的所有參數。被雙引號(“”)包含時,與$*稍有不同 |
$? | 上一個命令的退出狀態,或函數的返回值 |
$$ | 當前shell進程id。對於shell腳本,就是這些腳本所在的進程id |
$*和$@的區別
不被雙引號“”包含時,都以“$1” "$2" ... "$n" 輸出所有參數
被雙引號“”包含時,“$*" 會將所有的參數作為一個整體,以“$1 $2 ... $n” 的形式輸出;“$@” 以“$1” "$2" ... "$n" 的形式輸出所有參數。
$?
退出狀態是一個數字,一般情況下,大部分命令執行成功返回0,失敗返回-1.
2、用命令查看文本的第十行
查看開頭n行:
head -n 10 filename #查看開頭10行
查看末尾n行:
tail -n 10 filename #查看末尾10行
查看文本文件行數:
wc -l filename #查看文件行數
查看特定(幾)行:
sed -n ‘45,50p‘ filename #顯示第45行到50行
查看特定幾列:
awk -F "[:]" ‘print{ $3}‘ filename #通過-F 指定分隔符
取出文本文件的第100行到200行:
sed -n ‘100,200p‘ inputfile
awk ‘NR>=100&&NR<=200{print}‘ inputfile
head -200 inputfile | tail -100
3、搜索定位文件
查找文本內容所在文件位置:
grep "*m*" ./m* | less #| less表示隨意閱讀
查找時不區分大小寫:
grep -i "字符串" 文件名
查找匹配的行數:
grep -c "字符串" 文件名
查找不匹配的行:
grep -v "字符串" 文件名
從根目錄開始查找所有擴展名為.log 的文本文件,並找出包含“ERROR” 的行:
find / -type f -name "*.log" | xargs grep "ERROR"
4、vi操作
vi命令模式:
光標定位:
0 行首
$ 行位
/字符串 查找字符串。n下一個,N上一個,查找樣式變為?字符串
撤銷和重復:
u 撤銷上一個動作
. 重復上一個動作 如刪除動作後,按. 重復刪除動作
復制粘貼刪除(命令模式不顯示):
nyy 復制光標所在的向下n行內容
p 光標所在位置粘貼復制的內容
ndd 刪除光標所在的向下n行
shift + g 到為本末尾
x 刪除光標後一個位置字符
dd 刪除光標所在整行
復制粘貼刪除(命令模式顯示):
:set number 顯示行號
:set nonu 取消顯示行號
:1,3y 復制第一行到第三行
:1,3d 刪除第一行到第三行
:1,3s/str/str_new/g 將第一行到第三行的str替換為str_new,如果一行有多個str,都替換
:s/str/str_new/g 將當前行所有的str替換為str_new
:1,3s/str/str_new/ 將第一行到第三行的str替換為str_new,如果一行有多個str,只替換第一個
:1,3g/str/d 刪除第一行到第三行包含str的行
5、命令執行腳本
./helloworld.sh #切換到shell腳本所在目錄執行腳本
/data/shell/hello.sh #以絕對路徑執行腳本
bash hello.sh 或 sh hello.sh #切換到shell腳本目錄,執行腳本【該方式,是bash調用sh腳本,故不用事先給予sh執行權限】
.hello.sh 或 source hello.sh #在當前shell環境中執行shell腳本【前三種執行shell是在當前shell[稱為父shell],開啟一個子shell環境,shell腳本執行完,子shell環境隨即關閉,回到父shell環境】這種執行,是在當前shell中執行。
補充
shell遠程執行:
ssh user@remoteNode "cd /home ; ls" #前提條件:配置ssh免密登錄,命令間用分號隔開
執行sql腳本:
shell腳本調用sql腳本
#!/bin/csh
source /opt/info
dbaccess bpedb /opt/info/del.sql
6、指令將 ? 轉為大寫
tr ‘a-z‘ ‘A-Z‘ <filename #將filename文件中所有的小寫字母轉換為大寫字母【tr 命令對標準輸入的字符進行替換,壓縮和刪除。如tr -d ‘0-9‘ 表示刪除數字】
6、將標準輸出和標準錯誤輸出定向到log.txt
2>&1 log.out 【標準輸入 standard input 0,正確輸出 standard output 1,錯誤輸出 error output 2】
find / home -name lost* >allresult 2>&1 #首先將標準錯誤輸出定向到標準輸出,再將標準輸出定向到allresult文件。
或 find /home -name lost* >& allresuilt
分析:find /home -name lost* > allresult 1>&2
find /home -name lost* 2> allresult 1>&2
find /home -name lost* 2>&1 > allresult
補充:
重定向操作符 -
(cd /source/directory && tar cf - .) | (cd /dest/directory && tar xvfp -) #把/source/directory目錄下所有文件通過壓縮解壓縮,移動到/dest/directory這個目錄下
n<&- 表示將n號輸入關閉
<&- 表示關閉標準輸入(鍵盤)
n>&- 表示將n號輸出關閉
>&- 表示將標準輸出關閉
linux面試集