1. 程式人生 > >linux面試集

linux面試集

函數 onu 取出 整體 末尾 lsp 大寫 output 變量

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面試集