C++常見面試問題彙總4——Linux

  • Linux常用的命令

常用命令:

  1. ls   顯示文件或目錄-l           列出文件詳細信息l(list)-a          列出當前目錄下所有文件及目錄,包括隱藏的a(all)
  2. mkdir 創建目錄 -p           創建目錄,若無父目錄,則創建p(parent)
  3. cd 切換目錄
  4. touch 創建空文件
  5. echo 創建帶有內容的文件。
  6. cat 查看文件內容
  7. cp 拷貝
  8. mv 移動或重命名
  9. rm 刪除文件-r            遞歸刪除,可刪除子目錄及文件-f            強制刪除
  10. find 在文件系統中搜索某文件
  11. wc 統計文本中行數、字數、字符數
  12. grep 在文本文件中查找某個字符串
  13. rmdir 刪除空目錄
  14. tree 樹形結構顯示目錄,需要安裝tree包
  15. pwd 顯示當前目錄
  16. ln 創建鏈接文件
  17. more、less 分頁顯示文本文件內容
  18. head、tail 顯示文件頭、尾內容
  19. ctrl+alt+F1 命令行全屏模式

vim使用:

vim三種模式:命令模式、插入模式、編輯模式。使用ESC或i或:來切換模式。

命令模式下:

:q 退出

:q! 強制退出

:wq 保存並退出

:set number 顯示行號

:set nonumber 隱藏行號

/apache 在文檔中查找apache 按n跳到下一個,shift+n上一個

yyp 複製光標所在行,並粘貼

h(左移一個字符←)、j(下一行↓)、k(上一行↑)、l(右移一個字符→)
 

linux下通過進程名查看其佔用端口:

  1. 先查看進程pid         ps -ef | grep 進程名
  2. 通過pid查看佔用端口        netstat -nap | grep 進程pidlinux

通過端口查看進程:

  1. netstat -nap | grep 端口號
  • Linux的I/O模型介紹以及同步異步阻塞非阻塞的區別(超級重要)

1) 阻塞 I/O(blocking I/O)  
2) 非阻塞 I/O (nonblocking I/O)
3)  I/O 複用 (select 和poll) (I/O multiplexing)
4) 信號驅動 I/O (signal driven I/O (SIGIO))
5) 異步 I/O (asynchronous I/O (the POSIX aio_functions))
前四種都是同步,只有最後一種纔是異步 IO。
同步 IO 和異步 IO 的區別就在於:數據拷貝的時候進程是否阻塞!
阻塞 IO 和非阻塞 IO 的區別就在於:應用程序的調用是否立即返回!

  • 文件系統的理解(EXT4,XFS,BTRFS)

  • 文件處理grep,awk,sed這三個命令必知必會

awk、grep、sed是linux操作文本的三大利器,合稱文本三劍客,也是必須掌握的linux命令之一。三者的功能都是處理文本,但側重點各不相同,其中屬awk功能最強大,但也最複雜。grep更適合單純的查找或匹配文本,sed更適合編輯匹配到的文本,awk更適合格式化文本,對文本進行較複雜格式處理。

grep(關鍵字: 截取) 文本蒐集工具, 結合正則表達式非常強大
主要參數 []
-c : 只輸出匹配的行
-I : 不區分大小寫
-h : 查詢多文件時不顯示文件名
-l : 查詢多文件時, 只輸出包含匹配字符的文件名
-n : 顯示匹配的行號及行
-v : 顯示不包含匹配文本的所有行(我經常用除去grep本身)
基本工作方式: grep 要匹配的內容 文件名, 例如:
       grep 'test' d* 顯示所有以d開頭的文件中包含test的行
       grep 'test' aa bb cc 顯示在 aa bb cc 文件中包含test的行
       grep '[a-z]\{5}\' aa 顯示所有包含字符串至少有5個連續小寫字母的串
 

sed(關鍵字: 編輯) 以行爲單位的文本編輯工具 sed可以直接修改檔案, 不過一般不推薦這麼做, 可以分析 standard input
基本工作方式: sed [-nef] '[動作]' [輸入文本]
          a\ : 在當前行後添加一行或多行。多行時除最後一行外,每行末尾需用“\”續行
      c\ :用此符號後的新文本替換當前行中的文本。多行時除最後一行外,每⾏末尾需用”\"續行
      i\ :在當前行之前插入文本。多行時除最後一行外,每行末尾需用”\"續行刪除行
      h : 把模式空間裏的內容複製到暫存緩衝區
      H : 把模式空間裏的內容追加到暫存緩衝區
     g : 把暫存緩衝區裏的內容複製到模式空間,覆蓋原有的內容
     G: 把暫存緩衝區的內容追加到模式空間⾥,追加在原有內容的後面
     l : 列出非打印字符
     p : 打印行
     q : 結束或退出sed
     r : 從文件中讀取輸入行
     ! : 對所選行以外的所有行應用命令
     s : 用一個字符串替換另一個
     g : 在行內進行全局替換
      w : 將所選的行寫入文件
     x : 交換暫存緩衝區與模式空間的內容
     y : 將字符替換爲另一字符(不能對正則表達式使用y命令)
選項
  -e : 進行多項編輯,即對輸入行應用多條sed命令時使用
  -n : 取消默認的輸出
  -f :指定sed腳本的文件名

sed以行爲單位處理文件,awk比sed強的地方在於不僅能以行爲單位還能以列爲單位處理文件。

awk缺省的行分隔符是換行,缺省的列分隔符是連續的空格和Tab,

但是行分隔符和列分隔符都可以自定義,比如/etc/passwd文件的每一行有幹個字段,字段之間以:分隔,就可以重新定義awk的列分隔符爲:並以列爲單位處理這個文件。

awk實際上是一門很複雜的腳本語言,還有像C語言一樣的分支和循環結構,但是基本語法和sed類似,awk命令行的基本形式爲:

  awk option 'script' file1 file2 ...


  awk option -f scriptfile file1 file2 ...
  和sed一樣,awk處理的文件既可以由標準輸入重定向得到,也可以當命令行參數傳入,編輯命令可以直接當命令行參數傳入,也可以用-f參數指定一個腳本文件,

編輯命令的格式爲:

  /pattern/{actions}

  和sed類似,pattern是正則表達式,actions是一系列操作。 awk程序一行一行讀出待處理文件,如果某一行與pattern匹配,或者滿足condition條件,

則執行相應的actions,如果一條awk命令只有actions部分,則actions作用於待處理文件的每一行。
 

  • IO複用的三種方法(select,poll,epoll)深入理解,包括三者區別,內部原理實現?

select, poll, epoll 都是I/O多路複用的具體的實現,

I/O多路複用這個概念被提出來以後, select是第一個實現 (1983 左右在BSD裏面實現的)。

select 被實現以後,很快就暴露出了很多問題。

  • select 會修改傳入的參數數組,這個對於一個需要調用很多次的函數,是非常不友好的。
  • select 如果任何一個sock(I/O stream)出現了數據,select 僅僅會返回,但是並不會告訴你是那個sock上有數據,於是你只能自己一個一個的找,10幾個sock可能還好,要是幾萬的sock每次都找一遍,這個無謂的開銷就頗有海天盛筵的豪氣了。
  • select 只能監視1024個鏈接, 這個跟草榴沒啥關係哦,linux 定義在頭文件中的,參見FD_SETSIZE。
  • select 不是線程安全的,如果你把一個sock加入到select, 然後突然另外一個線程發現,尼瑪,這個sock不用,要收回。對不起,這個select 不支持的,如果你喪心病狂的竟然關掉這個sock, select的標準行爲是。。呃。。不可預測的, 這個可是寫在文檔中的哦.

poll 去掉了1024個鏈接的限制不再修改傳入數組

epoll 現在是線程安全的。

epoll 現在不僅告訴你sock組裏面數據,還會告訴你具體哪個sock有數據,你不用自己去找了。

可是epoll 有個致命的缺點。。只有linux支持。比如BSD上面對應的實現是kqueue。

  • Epoll的ET模式和LT模式(ET的非阻塞)

  • 查詢進程佔用CPU的命令(注意要瞭解到used,buf,cache代表意義)

used:已經使用物理內存的大小
total:總的物理內存
free:空閒的物理內存
buffers:用於內核緩存的內存大小
cache:緩衝的交換空間的大小 

buffers於cached區別:buffers指的是塊設備的讀寫緩衝區,cached指的是文件系統本身的頁面緩存。他們都是Linux系統底層的機制,爲了加速對磁盤的訪問。
 

  • linux的其他常見命令(kill,find,cp等等)

kill命令用來刪除執行中的程序或工作。kill可將指定的信息送至程序

kill 3268
find命令用來在指定目錄下查找文件。任何位於參數之前的字符串都將被視爲欲查找的目錄名。如果使用該命令時,不設置任何參數,則find命令將在當前目錄下查找子目錄與文件。並且將查找到的子目錄和文件全部進行顯示。

find /home -name "*.txt"
cp命令用來將一個或多個源文件或者目錄複製到指定的目的文件或目錄。它可以將單個源文件複製成一個指定文件名的具體的文件或一個已經存在的目錄下。cp命令還支持同時複製多個文件,當一次複製多個文件時,目標文件參數必須是一個已經存在的目錄,否則將出現錯誤。

cp file /usr/men/tmp/file1
 

  • shell腳本用法

  • 硬連接和軟連接的區別

  • 文件權限怎麼看(rwx)

三種基本權限 R 讀 數值表示爲4,W 寫 數值表示爲2,X 可執行 數值表示爲1

如jdk-7u21-linux-i586.tar.gz文件的權限爲-rw-rw-r–

-rw-rw-r–一共十個字符,分成四段。

第一個字符“-”表示普通文件;這個位置還可能會出現“l”鏈接;“d”表示目錄

第二三四個字符“rw-”表示當前所屬用戶的權限。 所以用數值表示爲4+2=6

第五六七個字符“rw-”表示當前所屬組的權限。 所以用數值表示爲4+2=6

第八九十個字符“r–”表示其他用戶權限。 所以用數值表示爲2

所以操作此文件的權限用數值表示爲662

  • 文件的三種時間(mtime, atime,ctime),分別在什麼時候會改變

訪問時間(Access time),狀態時間(Modify time),修改時間(Change time),linux下我們通常通過stat 這條命令來查看這三個時間

  1. ctime(修改時間):文件的內容被最後一次修改的時間,我們經常用的ls -l命令顯示出來的文件時間就是這個時間,當用vim對文件進行編輯之後保存,它的mtime就會相應的改變;
  2. atime(訪問時間):對文件進行一次讀操作,它的訪問時間就會改變。例如像:cat、more等操作,但是像之前的stat還有ls命令對atime是不會有影響的;
  3. mtime(狀態時間):當文件的狀態被改變的時候,狀態時間就會隨之改變,例如當使用chmod、chown等改變文件屬性的操作是會改變文件的ctime的。
  • Linux監控網絡帶寬的命令,查看特定進程的佔用網絡資源情況命令

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章