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,此選項為缺省選項

    reboot的工作過程與halt類似,其作用是重新啟動,而halt是關機。其參數也與halt類似。reboot命令重啟動系統時是刪除所有的進程,而不是平穩地終止它們。因此,使用reboot命令可以快速地關閉系統,但如果還有其它用戶在該系統上工作時,就會引起數據的丟失。所以使用reboot命令的場合主要是在單用戶模式。
    init是所有進程的祖先,其進程號始終為1。init用於切換系統的運行級別,切換的工作是立即完成的。init 0命令用於立即將系統運行級別切換為0,即關機;init 6命令用於將系統運行級別切換為6,即重新啟動。

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

    也可以同時使用多個符號:

$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命令更改權限:

$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.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM