Linux核心面試彙總

csdn彙總

文件的操作命令(增刪改查)

  • touch 文件名稱: 文件的創建(增)

  • cat/more/less/tail 文件名稱 文件的查看(查)

  • cat: 查看顯示文件內容

  • more: 可以顯示百分比,回車可以向下一行, 空格可以向下一頁,q可以退出查看
  • less: 可以使用鍵盤上的PgUp和PgDn向上 和向下翻頁,q結束查看
  • tail-10 : 查看文件的後10行,Ctrl+C結束 ####注意:命令 tail -f 文件 可以對某個文件進行動態監控,例如tomcat的日誌文件, 會隨着程序的運行,日誌會變化,可以使用tail -f catalina-2016-11-11.log 監控 文 件的變化(這裏可以實現動態觀察日誌文件的作用)

  • vim 文件: 修改文件的內容(改)

vim編輯器是Linux中的強大組件,是vi編輯器的加強版,vim編輯器的命令和快捷方式有很多,但此處不一一闡述,大家也無需研究的很透徹,使用vim編輯修改文件的方式基本會使用就可以了。

在實際開發中,使用vim編輯器主要作用就是修改配置文件,下面是一般步驟:

vim 文件——>進入文件—–>命令模式——>按i進入編輯模式—–>編輯文件 ——->按Esc進入底行模式—–>輸入:wq/q! (輸入wq代表寫入內容並退出,即保存;輸入q!代表強制退出不保存。)

  • rm -rf 文件: 刪除文件(刪)

同目錄刪除:熟記 rm -rf 文件 即可

shell幾個特殊字符用來處理參數:

參數處理 說明
:——- ———————————:
$# 傳遞到腳本的參數個數
$* 以一個單字符串顯示所有向腳本傳遞的參數。
如”$*“用「”」括起來的情況、以”$1 $2 … $n”的形式輸出所有參數。  
$$ 腳本運行的當前進程ID號
$! 後臺運行的最後一個進程的ID號
$@ 與$*相同,但是使用時加引號,並在引號中返回每個參數。
如”$@”用「”」括起來的情況、以”$1” “$2” … “$n” 的形式輸出所有參數。  
$? 顯示最後命令的退出狀態。0表示沒有錯誤,其他任何值表明有錯誤。
$- 顯示Shell使用的當前選項,與set命令功能相同。

進程前後臺切換

和前端有交互的不能放後臺,否則就暫停不能執行。

  • ⑴把進程放後臺的方法
  • 命令 &
  • 按下ctrl+z快捷鍵,放在後臺暫停
  • ⑵jobs-l 查看後臺工作
  • ⑶fg %工作號 將後臺暫停的工作恢復到前臺執行
  • ⑷bg %工作號 將後臺暫停的工作恢復到後臺執行
  • ⑸後臺命令脫離終端的方法
  • 加入到/etc/rc.local文件
  • 使用nohup

    解壓縮

    .tar.gz結尾的 壓縮 tar -zcvf 打包文件名(可以加絕對路徑) 被打包的文件 解壓縮 tar -zxvf tar -zxvf 解壓縮文件 -C 目標位置 .tar.bz2結尾的 壓縮 tar -jcvf 打包文件名(可以加絕對路徑) 被打包的文件 解壓縮 tar -jxvf tar -jxvf 解壓縮文件 -C 目標位置

    Linux 系統中查看 inode 號可使用命令 stat 或 ls -i

    |stat /home/harris/source/glibc-2.16.0.tar.xz File: `/home/harris/source/glibc-2.16.0.tar.xz’ Size: 9990512 Blocks: 19520 IO Block: 4096 regular file Device: 807h/2055d Inode: 2485677 Links: 1 Access: (0600/-rw——-) Uid: ( 1000/ harris) Gid: ( 1000/ harris) … … |# mv /home/harris/source/glibc-2.16.0.tar.xz /home/harris/Desktop/glibc.tar.xz |# ls -i -F /home/harris/Desktop/glibc.tar.xz 2485677 /home/harris/Desktop/glibc.tar.xz

    硬鏈接和軟鏈接

    若一個 inode 號對應多個文件名,則稱這些文件爲硬鏈接。換言之,硬鏈接就是同一個文件使用了多個別名

    link oldfile newfile ln oldfile newfile

由於硬鏈接是有着相同 inode 號僅文件名不同的文件,因此硬鏈接存在以下幾點特性:

  • 文件有相同的 inode 及 data block;
  • 只能對已存在的文件進行創建;
  • 不能交叉文件系統進行硬鏈接的創建(因爲不同文件系統可能含有相同 inode號的不同文件);
  • 不能對目錄進行創建,只可對文件創建;
  • 刪除一個硬鏈接文件並不影響其他有相同 inode 號的文件。

硬鏈接不能對目錄創建是受限於文件系統的設計(見 清單 4.對目錄創建硬 鏈接將失敗)。現 Linux 文件系統中的目錄均隱藏了兩個個特殊的目錄: 當前目錄(.)與父目錄(..)。查看這兩個特殊目錄的 inode 號可知其實 這兩目錄就是兩個硬鏈接(注意目錄 /mnt/lost+found/ 的 inode 號)。若系統允許對目錄創建硬鏈接,則會產生目錄環。

軟鏈接與硬鏈接不同,若文件用戶數據塊中存放的內容是另一文件的路徑名的指向,則該文件就是軟連接。軟鏈接就是一個普通文件,只是數據塊內容有點特殊。軟鏈接有着自己的 inode 號以及用戶數據塊(見 圖 2.)。因此軟鏈接的創建與使用沒有類似硬鏈接的諸多限制:

  • 軟鏈接有自己的文件屬性及權限等;
  • 可對不存在的文件或目錄創建軟鏈接;
  • 軟鏈接可交叉文件系統;
  • 軟鏈接可對文件或目錄創建;
  • 創建軟鏈接時,鏈接計數 i_nlink 不會增加;
  • 刪除軟鏈接並不影響被指向的文件,但若被指向的原文件被刪除,則相關軟連接被稱爲死鏈接(即 dangling link,若被指向路徑文件被重新創建,死鏈接可恢復爲正常的軟鏈接)。

使用命令 find 查找軟鏈接與硬鏈接

	// 查找在路徑 /home 下的文件 data.txt 的軟鏈接
# find /home -lname data.txt 
/home/harris/debug/test2/a 
 
// 查看路徑 /home 有相同 inode 的所有硬鏈接
# find /home -samefile /home/harris/debug/test3/old.file 
/home/harris/debug/test3/hard.link 
/home/harris/debug/test3/old.file 
 
# find /home -inum 660650 
/home/harris/debug/test3/hard.link 
/home/harris/debug/test3/old.file 
 
// 列出路徑 /home/harris/debug/ 下的所有軟鏈接文件
# find /home/harris/debug/ -type l -ls 
656662 0 lrwxrwxrwx 1 harris harris 1 Sep 1 14:37 /home/harris/debug/test2/b -> a
656627 0 lrwxrwxrwx 1 harris harris 8 Sep 1 14:37 /home/harris/debug/test2/a -> 
data.txt
789467 0 lrwxrwxrwx 1 root root 8 Sep 1 18:00 /home/harris/debug/test/soft.link -> 
old.file 
789496    0 lrwxrwxrwx   1 root     root            7 Sep  1 18:01 
/home/harris/debug/test/soft.link.dir -> old.dir

Linux查看日誌命令

  • 第一種:查看實時變化的日誌(比較吃內存)

最常用的:

tail -f filename (默認最後10行,相當於增加參數 -n 10)
Ctrl+c 是退出tail命令
其他情況:
tail -n 20 filename (顯示filename最後20行)
tail -n +5 filename (從第5行開始顯示文件)
  • 第二種:搜索關鍵字附近的日誌

最常用的:

cat -n filename |grep "關鍵字"
其他情況:
cat filename | grep -C 5 '關鍵字' (顯示日誌裏匹配字串那行以及前後5行)
cat filename | grep -B 5 '關鍵字' (顯示匹配字串及前5行)
cat filename | grep -A 5 '關鍵字' (顯示匹配字串及後5行)
  • 第三種:進入編輯查找:vi(vim) 

  • 1、進入vim編輯模式:vim filename
  • 2、輸入“/關鍵字”,按enter鍵查找
  • 3、查找下一個,按“n”即可

退出:按ESC鍵後,接着再輸入:號時,vi會在屏幕的最下方等待我們輸入命令
wq! 保存退出;
q! 不保存退出;
其他情況:
/關鍵字   注:正向查找,按n鍵把光標移動到下一個符合條件的地方
?關鍵字   注:反向查找,按shift+n 鍵,把光標移動到下一個符合條件的

vim相關

:set nu 設置行號
:set nonu 取消行號
😒/a/b/g 替換當前行所有 a 爲 b
dd 刪除所在行
/string 搜索指定字符串(不需要獨立成一個完整單詞),忽略大小寫 :set ic 找下一個出現位置 n
:w 保存修改
:wq 保存退出
q!不保存退出
:wq!保存修改退出(文件所有者和root用戶)

在VIM中進行文本替換:

1.  替換當前行中的內容:    :s/from/to/    (s即substitude)
    :s/from/to/     :  將當前行中的第一個from,替換成to。如果當前行含有多個
                        from,則只會替換其中的第一個。
    :s/from/to/g    :  將當前行中的所有from都替換成to。
    :s/from/to/gc   :  將當前行中的所有from都替換成to,但是每一次替換之前都
                        會詢問請求用戶確認此操作。

    注意:這裏的from和to都可以是任何字符串,其中from還可以是正則表達式。

2.  替換某一行的內容:      :33s/from/to/g
    :.s/from/to/g   :  在當前行進行替換操作。
    :33s/from/to/g  :  在第33行進行替換操作。
    :$s/from/to/g   :  在最後一行進行替換操作。

3.  替換某些行的內容:      :10,20s/from/to/g
    :10,20s/from/to/g   :  對第10行到第20行的內容進行替換。
    :1,$s/from/to/g     :  對第一行到最後一行的內容進行替換(即全部文本)。
    :1,.s/from/to/g     :  對第一行到當前行的內容進行替換。
    :.,$s/from/to/g     :  對當前行到最後一行的內容進行替換。
    :'a,'bs/from/to/g   :  對標記a和b之間的行(含a和b所在的行)進行替換。
                            其中a和b是之前用m命令所做的標記。

4.  替換所有行的內容:      :%s/from/to/g
    :%s/from/to/g   :  對所有行的內容進行替換。

5.  替換命令的完整形式:    :[range]s/from/to/[flags]
    5.1 s/from/to/
        把from指定的字符串替換成to指定的字符串,from可以是正則表達式。  

tail顯示後幾行

  • -f 循環讀取
  • -n 顯示行數 不加-n默認是顯示後10行 行數>
       tail -n 1000:顯示最後1000行  
       tail -n +1000:從1000行開始顯示,顯示1000行以後的  
    

kill 殺死進程

  • kill -1 進程號 重啓進程
  • kill -9 進程號 強制殺死進程
  • kill -15 進程號 默認的,正常結束進程,如果發生問題,就會嘗試kill -9

grep

把匹 配的行打印出來

  • -i 不區分大小寫

      mobvoi@mobvoi-Battle-Axe-C-B150M-HD:~$ grep -i 'line2' grep.txt
      grep line2
      grep LINE2
    
  • -c統計匹配到的次數

      mobvoi@mobvoi-Battle-Axe-C-B150M-HD:~$ grep -c 'line1' grep.txt
    
  • -n顯示行號

      mobvoi@mobvoi-Battle-Axe-C-B150M-HD:~$ grep -n 'line1' grep.txt
      1:grep line1
      6:grep line1
    
  • -v查找不包含指定內容的行

      mobvoi@mobvoi-Battle-Axe-C-B150M-HD:~$ grep -v   'line1' grep.txt
    
  • -r逐層遍歷目錄查找

      grep -r 字符串 文件名
      -A -B -C 後多少行,前多少行,前後多少行  
      mobvoi@mobvoi-Battle-Axe-C-B150M-HD:~/grep$ grep -A1 'line2' grep.txt  
      mobvoi@mobvoi-Battle-Axe-C-B150M-HD:~/grep$ grep -B1 'line2' grep.txt  
      mobvoi@mobvoi-Battle-Axe-C-B150M-HD:~/grep$ grep -C1 'line2' grep.txt  
    
  • -w 精確匹配單詞

      mobvoi@mobvoi-Battle-Axe-C-B150M-HD:~/grep$ grep -w 'line1' grep.txt
      grep line1
      grep line1
      mobvoi@mobvoi-Battle-Axe-C-B150M-HD:~/grep$ grep 'line1' grep.txt
      grep line1
      grep line1
      grep line1line
    
  • -e 與/或

      mobvoi@mobvoi-Battle-Axe-C-B150M-HD:~/grep$ cat grep.txt
      grep line1
      grep LINE2
      grep line1line
      // 與
      mobvoi@mobvoi-Battle-Axe-C-B150M-HD:~/grep$ grep -e 'line1\+line' grep.txt
      grep line1line
      // 或
      mobvoi@mobvoi-Battle-Axe-C-B150M-HD:~/grep$ grep -e 'line1\|line2' grep.txt
      grep line1
      grep line1line
    
  • 找到以grep開頭的行

      grep$ grep '^grep' grep.txt
    
  • 找到以line1結尾的行

      grep 'line1$' grep.txt
    
  • 找到空行

      grep '^$' grep.txt
    
  • 將grep的輸出到指定文件

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