Linux面試知識點總結

Linux面試知識點總結

1.Linux關機重啓命令:

    在linux命令中reboot從新啓動shutdown -r now是當即中止而後從新啓動,都說他們兩個是同樣的,實際上是有必定的區別的。
    shutdown命令能夠安全地關閉或重啓Linux系統,它在系統關閉以前給系統上的全部登陸用戶提示一條警告信息。該命令還容許用戶指定一個時間參數,能夠是一個精確的時間,也能夠是從如今開始的一個時間段。
    精確時間的格式是hh:mm,表示小時和分鐘,時間段由+ 和分鐘數表示。系統執行該命令後會自動進行數據同步的工做。
    該命令的通常格式: shutdown [選項] [時間] [警告信息]
    命令中各選項的含義爲:
       - k 並不真正關機而只是發出警告信息給全部用戶
       - r 關機後當即從新啓動
       - h 關機後不從新啓動
       - f 快速關機重啓動時跳過fsck
       - n 快速關機不通過init 程序
       - c 取消一個已經運行的shutdown
    須要特別說明的是該命令只能由超級用戶使用。
    例1,系統在十分鐘後關機而且立刻從新啓動: # shutdown –r +10
    例2,系統立刻關機而且不從新啓動:# shutdown –h now
  halt是最簡單的關機命令,其其實是調用shutdown -h命令。halt執行時,殺死應用進程,文件系統寫操做完成後就會中止內核。
    halt命令的部分參數以下:
     [-f] 沒有調用shutdown而強制關機或重啓
     [-i] 關機或從新啓動以前,關掉全部的網絡接口
     [-p] 關機時調用poweroff,此選項爲缺省選項html

    reboot的工做過程與halt相似,其做用是從新啓動,而halt是關機。其參數也與halt相似。reboot命令重啓動系統時是刪除全部的進程,而不是平穩地終止它們。所以,使用reboot命令能夠快速地關閉系統,但若是還有其它用戶在該系統上工做時,就會引發數據的丟失。因此使用reboot命令的場合主要是在單用戶模式。
    init是全部進程的祖先,其進程號始終爲1。init用於切換系統的運行級別,切換的工做是當即完成的。init 0命令用於當即將系統運行級別切換爲0,即關機;init 6命令用於將系統運行級別切換爲6,即從新啓動。linux

2.進程對應的內存空間中所包含的5種不一樣的數據區:

    代碼段:代碼段是用來存放可執行文件的操做指令,也就是說是它是可執行程序在內存中的鏡像。代碼段須要防止在運行時被非法修改,因此只准許讀取操做,而不容許寫入(修改)操做—它是不可寫的。
    數據段:數據段用來存放可執行文件中已初始化全局變量,換句話說就是存放程序靜態分配的變量和全局變量
    BSS段:BSS段包含了程序中未初始化的全局變量,在內存中bss段所有置零。
    堆(heap):堆是用於存放進程運行中被動態分配的內存段,它的大小並不固定,可動態擴張或縮減。當進程調用malloc等函數分配內存時,新分配的內存就被動態添加到堆上(堆被擴張);當利用free等函數釋放內存時,被釋放的內存從堆中被剔除(堆被縮減)。
    :棧是用戶存放程序臨時建立的局部變量,也就是說咱們函數括弧「{}」中定義的變量(但不包括static聲明的變量,static意味着在數據段中存放變量)。除此之外,在函數被調用時,其參數也會被壓入發起調用的進程棧中,而且待到調用結束後,函數的返回值也會被存放回棧中。因爲棧的先進後出特色,因此棧特別方便用來保存/恢復調用現場。從這個意義上講,咱們能夠把堆棧當作一個寄存、交換臨時數據的內存區。面試

3.Linux文件權限:

   爲了更加安全的存儲文件,Linux爲不一樣的文件賦予了不一樣的權限,每一個文件都擁有下面三種權限:
     ● 全部者權限:文件全部者可以進行的操做。
     ● 組權限:文件所屬用戶組可以進行的操做。
     ● 外部權限(其餘權限):其餘用戶能夠進行的操做。
    查看文件權限
    ls -l 命令能夠查看與文件權限相關的信息:算法

$ls -l /home/amrood
-rwxr-xr--  1 amrood   users 1024  Nov 2 00:10  myfile
drwxr-xr--- 1 amrood   users 1024  Nov 2 00:10  mydir

    第一列就包含了文件或目錄的權限。 安全

    第一列的字符能夠分爲三組,每一組有三個,每一個字符都表明不一樣的權限,分別爲讀取(r)、寫入(w)和執行(x):
      · 第一組字符(2-4)表示文件全部者的權限,-rwxr-xr-- 表示全部者擁有讀取(r)、寫入(w)和執行(x)的權限。
      · 第二組字符(5-7)表示文件所屬用戶組的權限,-rwxr-xr-- 表示該組擁有讀取(r)和執行(x)的權限,但沒有寫入權限。
      · 第三組字符(8-10)表示全部其餘用戶的權限,rwxr-xr-- 表示其餘用戶只能讀取(r)文件。
   文件訪問模式
      文件權限是Linux系統的第一道安全防線,基本的權限有讀取(r)、寫入(w)和執行(x):
       · 讀取:用戶可以讀取文件信息,查看文件內容。
       · 寫入:用戶能夠編輯文件,能夠向文件寫入內容,也能夠刪除文件內容。
       · 執行:用戶能夠將文件做爲程序來運行。
   目錄訪問模式
      目錄的訪問模式和文件相似,可是稍有不一樣:
      · 讀取:用戶能夠查看目錄中的文件
      · 寫入:用戶能夠在當前目錄中刪除文件或建立文件
      · 執行:執行權限賦予用戶遍歷目錄的權利,例如執行 cd 和 ls 命令。網絡

    改變權限:
     chmod (change mode) 命令來改變文件或目錄的訪問權限,權限可使用符號或數字來表示。
     使用符號表示權限:
     能夠增長(+)和刪除(-)權限,也能夠指定特定權限。
     符號說明:
        +   爲文件或目錄增長權限
        -   刪除文件或目錄的權限
        =  設置指定的權限
    下面的例子將會修改testfile文件的權限:函數

複製代碼

$ls -l testfile
-rwxrwxr--  1 amrood   users 1024  Nov 2 00:10  testfile
$chmod o+wx testfile
$ls -l testfile
-rwxrwxrwx  1 amrood   users 1024  Nov 2 00:10  testfile
$chmod u-x testfile
$ls -l testfile
-rw-rwxrwx  1 amrood   users 1024  Nov 2 00:10  testfile
$chmod g=rx testfile
$ls -l testfile
-rw-r-xrwx  1 amrood   users 1024  Nov 2 00:10  testfile

複製代碼

    也能夠同時使用多個符號:spa

$chmod o+wx,u-x,g=rx testfile
$ls -l testfile
-rw-r-xrwx  1 amrood   users 1024  Nov 2 00:10  testfile

     使用數字表示權限:
     除了符號,也可使用八進制數字來指定具體權限,以下表所示:
     數字權限說明:
      0               沒有任何權限                                                         ---
      1               執行權限                                                               --x
      2               寫入權限                                                               -w-
      3    執行權限和寫入權限:1 (執行) + 2 (寫入) = 3                  -wx
      4               讀取權限                                                               r--
      5    讀取和執行權限:4 (讀取) + 1 (執行) = 5                         r-x
      6    讀取和寫入權限:4 (讀取) + 2 (寫入) = 6                         rw-
      7    全部權限: 4 (讀取) + 2 (寫入) + 1 (執行) = 7                    rwx設計

    下面的例子,首先使用  ls -1  命令查看testfile文件的權限,而後使用chmod命令更改權限:htm

複製代碼

$ls -l testfile
-rwxrwxr--  1 amrood   users 1024  Nov 2 00:10  testfile
$ chmod 755 testfile
$ls -l testfile
-rwxr-xr-x  1 amrood   users 1024  Nov 2 00:10  testfile
$chmod 743 testfile
$ls -l testfile
-rwxr---wx  1 amrood   users 1024  Nov 2 00:10  testfile
$chmod 043 testfile
$ls -l testfile
----r---wx  1 amrood   users 1024  Nov 2 00:10  testfile  

複製代碼

    更改全部者和用戶組
    在Linux中,每添加一個新用戶,就會爲它分配一個用戶ID和羣組ID,上面提到的文件權限也是基於用戶和羣組來分配的。

    有兩個命令能夠改變文件的全部者或羣組:
     · chown :chown 命令是"change owner"的縮寫,用來改變文件的全部者。
     · chgrp :chgrp 命令是"change group"的縮寫,用來改變文件所在的羣組。

    chown 命令用來更改文件全部者,其語法以下:
        $ chown user filelist
        user 能夠是用戶名或用戶ID,例如
        $ chown amrood testfile
        $ 將testfile文件的全部者改成amrood。

    注意:超級用戶 root 能夠不受限制的更改文件的全部者和用戶組,可是普通用戶只能更改全部者是本身的文件或目錄。

    chgrp 命令用來改變文件所屬羣組,其語法爲:
        $ chgrp group filelist
        group 能夠是羣組名或羣組ID,例如
        $ chgrp special testfile
        $ 將文件 testfile 的羣組改成 special。

4.死鎖:

   產生死鎖的緣由主要是:
   (1) 由於系統資源不足
   (2) 進程運行推動的順序不合適
   (3) 資源分配不當等。
   若是系統資源充足,進程的資源請求都可以獲得知足,死鎖出現的可能性就很低,不然就會因爭奪有限的資源而陷入死鎖。其次,進程運行推動順序與速度不一樣,也可能產生死鎖。 
   產生死鎖的四個必要條件:
   (1) 互斥條件:一個資源每次只能被一個進程使用。
   (2) 請求與保持條件:一個進程因請求資源而阻塞時,對已得到的資源保持不放。
   (3) 不剝奪條件:進程已得到的資源,在未使用完以前,不能強行剝奪。
   (4) 循環等待條件:若干進程之間造成一種頭尾相接的循環等待資源關係。
   這四個條件是死鎖的必要條件 ,只要系統發生死鎖,這些條件必然成立,而只要上述條件之一不知足,就不會發生死鎖。 
   死鎖的解除與預防:
   理解了死鎖的緣由,尤爲是產生死鎖的四個必要條件,就能夠最大可能地避免、預防和解除死鎖。因此,在系統設計、進程調度等方面注意如何不讓這四個必要條件成立,如何肯定資源的合理分配算法,避免進程永久佔據系統資源。此外,也要防止進程在處於等待狀態的狀況下佔用資源。所以,對資源的分配要給予合理的規劃。

5.fork()函數:

   不算main這個進程自身,到底建立了多少個進程啊?

int main(int argc, char* argv[])
{
   fork();
   fork() && fork() || fork();
   fork();
}

     (1) A&&B||C

      A爲假,跳過B,判斷C;

      A爲真,判斷B,若B爲真,跳過C;

                           若B爲假,判斷C.

     (2) fork()函數父進程返回子進程ID;子進程返回0

     第一條語句新增1個;

     第二條語句新增4*2個;

    第三條語句,此時已有進程1+1+4*2個,因此新增10個.

    總數爲2*(2+1+2)*2=20;減去本身就是19.

相關文章
相關標籤/搜索