面試常用的shell命令彙總

大資料技術前線發表於2023-12-06

來源:大資料球球





命令列操作

1、輸出第十行文字的內容

sed -n '10p' jmeter.log

2、查詢電話號碼

(xxx) xxx-xxxx 或 xxx-xxx-xxxx。(x 表示一個數字)

grep -E "^\([0-9]{3}) [0-9]{3}-[0-9]{4}$|^[0-9]{3}-[0-9]{3}-[0-9]{4}$" file.txt

3、統計文字字元數量

方法一

grep -E "\b[[:alpha:]]+\b" a.txt -o | sort -r | uniq -c| sort -rn

方法二

cat words.txt | tr -s ' ' '\n'|sort|uniq -c |sort -r|awk '{print $2" "$1}'
cat words.txt | xargs -n1 | sort | uniq -c
cat ——瀏覽檔案
tr -s ——替換字串(空格換為換行)保證了一行一個單詞
sort ——預設ASCII值排序,排序號後還會有重複
uniq —— 去重,-c再輸出重複次數。結果就是 ”4 abc“ abc出現了4次
sort 
-r —— 反向排序,也就是從大到小。得到按頻率高低的結果;
-n 按照數值比較排序

awk ——格式化輸出,規定輸出是先字串再重複次數,所以先$2$1,中間空格分隔

4、檔案列轉為行

1.獲取列數

col=$(wc file.txt | awk '{print $2 / $1}')

2. 按列列印

for i in `seq 1 $col`
do
    awk -v col="$i" '{print $col}' file.txt |xargs
done

操作檔案

sed 命令

Linux sed 命令是利用指令碼來處理文字檔案。

sed 可依照指令碼的指令來處理、編輯文字檔案。

Sed 主要用來自動編輯一個或多個檔案、簡化對檔案的反覆操作、編寫轉換程式等。語法

sed [-hnV][-e<script>][-f<script檔案>][文字檔案]

引數說明:

-e<script>或--expression=<script> 以選項中指定的script來處理輸入的文字檔案。
-f<script檔案>或--file=<script檔案> 以選項中指定的script檔案來處理輸入的文字檔案。
-h或--help 顯示幫助。
-n或--quiet或--silent 僅顯示script處理後的結果。
-V或--version 顯示版本資訊。

動作說明:

a :新增, a 的後面可以接字串,而這些字串會在新的一行出現(目前的下一行)~
c :取代, c 的後面可以接字串,這些字串可以取代 n1,n2 之間的行!
d :刪除,因為是刪除啊,所以 d 後面通常不接任何東東;
i :插入, i 的後面可以接字串,而這些字串會在新的一行出現(目前的上一行);
p :列印,亦即將某個選擇的資料印出。通常 p 會與引數 sed -n 一起執行~
s :取代,可以直接進行取代的工作哩!通常這個 s 的動作可以搭配正規表示式!例如 1,20s/old/new/g 就是啦!

如何使用Linux命令來移除檔案頭?

解答:當我們需要刪除檔案中的指定行時,‘sed’命令可以用來解決該問題。

這個是用來刪除檔案頭(檔案的首行)的正確命令。

 sed '1 d' file.txt

上面命令的問題是,它會在標準輸出裝置上輸出不帶首行的檔案內容。為了儲存輸出到檔案,我們需要使用重定向運算子,它將幫助你將輸出重定向到檔案。

# sed '1 d' file.txt > new_file.txt

好吧,其實sed命令內建的‘-i’開關就可以幹這活,就不需要重定向符了吧。

# sed -i '1 d' file.txt

你怎麼檢查一個文字檔案中某一行的長度?

解答:‘sed’命令也可以用來查詢文字檔案中的某一行或者檢查其長度。

sed -n 'n p' file.txt可以解決,這裡n表示行號,‘p’列印出匹配內容(到標準輸出),該命令通常與-n命令列選項連用。那麼,怎樣來獲取長度計數呢?很明顯,我們需要透過管道輸出給‘wc’命令來計算。

# sed –n 'n p' file.txt | wc –c

要得到文字檔案‘linuxmi.txt’的第五行的長度,執行如下命令:

# sed -n '5 p' linuxmi.txt | wc -c

可以在Linux系統上檢視到所有非列印字元嗎?你是怎麼做到的?

解答:可以。可以在Linux中檢視所有的非列印字元。要實現上面所講的方案,我們需要‘vi’編輯器的幫助。怎樣在‘vi’編輯器中顯示非列印字元?

開啟vi編輯器。

先按[esc]鍵,然後按‘:’進入到vi編輯器的命令模式。

最後,從‘vi’編輯器的命令介面輸入set list命令並執行。

注: 這種方式可以檢視文字檔案中的所有非列印字元,包括ctrl+m(^M)。

假如你是一個員工組的團隊領導,為xyz公司工作。公司要求你建立一個‘dir_xyz’目錄,讓該組成員都能在該目錄下建立或訪問檔案,但是除了檔案建立者之外的其他人不能刪除檔案,你會怎麼做?

解答:這真是個有趣的工作方案。好吧,上面所講的方案,我們需要透過下面的步驟來實施,這簡直就是小菜一碟。

# mkdir dir_xyz
# chmod g+wx dir_xyz
# chmod +t dir_xyz

第一行命令建立了一個目錄(dir_xyz),上面的第二行命令讓組(g)具有‘寫’和‘執行’的許可權,而上面的最後一行命令——許可權位最後的‘+t’是‘粘滯位’,它用來替換‘x’,表明在這個目錄中,檔案只能被它們的擁有者、目錄的擁有者或者是超級使用者root刪除。

你能告訴我一個Linux程式經歷的各個階段嗎?

解答:一個Linux程式在它的一生中,通常經歷了四個主要階段。

  • 這裡是Linux程式要經歷的四個階段。

  • 等待:Linux程式等待資源。

  • 執行:Linux程式當前正在執行中。

  • 停止:Linux程式在成功執行後或收到殺死程式訊號後停止。

  • 殭屍:如果該程式已經結束,但仍然留在程式表中,被稱為‘殭屍’。

Linux中cut命令怎麼用?

解答:‘cut’是一個很有用的Linux命令,當我們要擷取檔案的指定部分並列印到標準輸出,當文字區域以及檔案本身很大時,這個命令很有用。

例如,擷取txt_linuxmi檔案的前10列。

# cut -c1-10 txt_linuxmi

要擷取該檔案中的第二,第五和第七列。

# cut -d;-f2 -f5 -f7 txt_linuxmi

‘cmp’和‘diff’命令的區別是什麼?

解答:‘cmp’和‘diff’命令用來獲取相同的東西,但各有側重。

‘diff’命令輸出為了使兩個檔案一樣而應該做的修改。而‘cmp’命令則將兩個檔案逐位元組對比,並報告第一個不匹配的項。

可以用‘echo’命令來替換‘ls’命令嗎?

解答:可以的。‘ls’命令可以用‘echo’命令來替代。‘ls’命令列出目錄內容,從替換上述命令的角度講,我們可以使用‘echo *’,兩個命令的輸出完全一樣。

你可能聽過inode吧。你能簡要描述一下inode嗎?

解答:‘inode’是一個‘資料結構’,在Linux上用於檔案標識。每個檔案在Unix系統上有一個獨立的‘inode’和一個‘唯一的’inode號。

find 命令使用

按名稱或正規表示式查詢檔案

讓我們從最簡單的用法開始。要按特定名稱搜尋檔案,命令如下:

find.-nametest.txt

如何查詢所有格式為 pdf 的書籍?使用正規表示式:

find./yang/books-name"*.pdf"

預設情況下,find 命令會搜尋常規檔案,但最好進行指定(-type f)以使所有內容更清晰:

find./yang/books-typef-name"*.pdf"

查詢不同型別的檔案

除了搜尋常規檔案外,我們還可以透過指定-type選項來搜尋其他型別的檔案。

例如目錄:

find.-typed-name"yang*"

或者符號連結:

find.-typel-name"yang*"

按指定的時間戳查詢檔案

要按指定的時間戳搜尋檔案,我們需要知道 Linux 系統中的 3 個不同的時間戳:

訪問時間戳(atime):最後一次讀取檔案的時間。**修改時間戳 (mtime)**:檔案內容最後一次被修改的時間。**更改時間戳 (ctime)**:上次更改檔案後設資料的時間(如,所有權、位置、檔案型別和許可權設定) 所以,正如開頭提到的面試題,要搜尋atime超過一年的檔案,我們可以編寫如下命令:

find.-typef-atime+365

如果我們需要查詢mtime正好是 5 天前的檔案,請不要包含+,因為它的意思是“大於”。

find.-typef-mtime5

顯然,+表示“大於”,-表示“小於”。所以我們可以搜尋ctime在 5~10 天前的檔案:

find.-typef-ctime+5-ctime-10

按大小查詢檔案

-size選項使我們能夠按指定大小查詢檔案。我們可以將其計量單位指定為以下約定:

b:512 位元組塊(預設)
c:位元組
w:雙位元組字
k:KB
M:MB
G:GB
類似於按時間戳查詢檔案,+表示“大於”,-表示“小於”。例如,要查詢大小為 10 MB ~ 1 GB 的檔案:

find.-typef-size+10M-size-1G

按許可權查詢檔案

合理控制檔案的許可權是 Linux 管理員的一項重要任務。find命令的-perm選項可以幫助我們按指定許可權查詢檔案:

find.-typef-perm777

例如,上面的命令會搜尋所有具有 777 許可權的檔案,這意味著一個檔案對其持有者、組和所有使用者具有所有的讀、寫和可執行許可權。

按所有權查詢檔案

這個任務很簡單。我們可以使用-user選項指定使用者名稱。例如,以下命令將查詢所有屬於yang的檔案:

find-typef-useryang

在找到檔案後執行命令

在大多數情況下,我們希望在找到我們需要的檔案後進行後續操作。例如將其刪除,或檢查它們的詳細資訊等等。-exec命令使這些所有事情變得更加容易。

現在,要了解如何使用它,讓我們回到之前提到的面試問題:

find.-typef-atime+365-execrm-rf{}\;

上述命令在-exec選項後是rm -rf,其用於刪除檔案。{}是用於查詢結果的佔位符。

注意:佔位符{}非常重要,尤其是在您想刪除檔案時。因為,如果您不使用它,該命令將對所有檔案執行(而不是您剛剛透過 find 命令找到的檔案)。

做一個嘗試,請在終端上執行以下兩個命令,並檢查它們的結果有何不同:

一個使用佔位符:

find.-typef-atime+5-execls{}\;

另一個不使用:

find.-typef-atime+5-execls\;

-exec 選項後面的命令必須以分號(;)結束。眾所周知,跳脫字元用於去除單個字元的特殊含義。在 Linux 中,反斜槓\用作跳脫字元。所以我們將它用於分號字元。

總 結

看完find命令的 7 種用法後,開始提到的面試題現在好像很容易解決了。你現在可以直接寫下它的答案並將其解釋清楚嗎?

find.-typef-atime+365-execrm-rf{}\;


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70027827/viewspace-2998904/,如需轉載,請註明出處,否則將追究法律責任。