【Linux】Linux操作系統期末複習筆記

Linux操作系統基礎

Xu An   2018-7-4


第一講 Linux簡介

1、Linux是一個開源的操作系統,發佈於GPL協議,全稱爲GNU/Linux

2、Linux和Unix是相近的

3、FreeBSD是從BSD發展過來的,MacOS是基於FreeBSD開發的 類似還有OpenBSD


第二講 文件系統

1、Linux使用Ext3,Ext4(16.04默認使用)格式,會越使用效率越高

2、沒有盤符概念,使用整體目錄樹組織文件

3、使用/表示根目錄,也是整個目錄樹的頂層,其他目錄均位於/之下

Linux啓動時會把磁盤文件信息映射爲內存中的樹形結構,啓動時的目錄結構在內存中

4、所有的目錄至少包含兩個子目錄,.表示當前目錄,..表示上一層目錄

    /也有上層目錄(..),其上層目錄是自己

5、目錄的作用

    /     根目錄

    /usr  用戶的程序,配置信息    使用pwd查看用戶目錄

    /bin  存放最常用的命令目錄,最核心的命令(和sbin一起是最核心的命令)

    /sbin root用戶使用的命令所在的目錄

    /boot 系統啓動文件所在目錄,內核等

    /etc  配置文件等,包默認的安裝目錄

    /dev  外設設備映射此目錄下的文件(U盤映射、打印機映射)

    /media 把系統自動識別U盤,光盤掛載到此目錄下

    /proc 虛擬目錄,內存的映射,可以得到系統進程信息

    /sys  吧硬件設備映射成文件,通過文件控制硬件

    /var  存放變化增長的東西

    /usr/bin 用戶程序目錄

    /usr/sbin 超級用戶權限目錄

    /tmp 臨時文件目錄

6、創建文件夾——mkdir

    mkdir 文件夾名稱

    查參數 man 命令

7、顯示目錄內容——ls(list)

    ls -a 顯示所有文件(包括隱藏文件)

    ls -t 按修改時間順序排序,最新的排在最前面

    ls -R 顯示文件全部內容

    ls -S 文件大小順序排序

    ls -l 查看詳細信息

8、切換工作目錄(cd,change directory)

 cd.. 進入上一層目錄(在根目錄下cd..還是根目錄)

 cd~ 在任何目錄下進入用戶主目錄

 cd- 進入上一次使用目錄

9、設備文件和磁盤管理

    /dev是外接設備的映射文件,/dev/sd[a-z]表示硬盤設備(hd表示IDE

硬盤)

    在MBR中,一個硬盤最多4個主分區,需要更多分區則需要擴展分區(最多數量爲1)

    擴展分區可以有多個,sda5始終表示第一個邏輯分區

    /dev下的cdrom、dvd表示光盤等 

10、df(disk files) 查看磁盤佔用 

    df -h 易於讀取的形式查看系統佔用情況

11、fdisk 磁盤管理

    fdisk -l 列出指定磁盤的分區

12、mkfs (make filesystem)

    創建文件系統(格式化)

    sudo mkfs -f <文件系統類型> <設備分區>

    e.g. sudo mkfs -f ext4 /dev/sdb1

13、掛載 mount 卸載umount

    e.g.

    mount -r /dev/sdb2 /media/c 只讀模式掛載

    umount /media/c   卸載掛載點

    想要讀取U盤中的文件,必須進行掛載


第三講  終端

1、終端是一個設備,計算機最外圍的設備,主要功能是輸入和輸出

    早期終端是物理組件,不具備計算能力

    現在的終端,爲一個模擬器代替,是虛擬化的終端

    終端的切換:使用ctrl+option+fn鍵切換不同虛擬控制檯

    (virtual console),默認是f7

2、終端是一個設備   shell是一個程序

    shell的功能是獲取用戶輸入的命令運行,返回輸出,程序通過shell顯示在終端上

    shell有多種實現形式,默認爲bash,還有sh、zsh、fish等,均爲命令解釋程序

    virtual console與terminal完成相同的工作,都是虛擬終端

3、內部命令:屬於shell解釋器的一部分,是shell程序自帶的命令(在系統中找不到文件,可以直接執行)

   外部命令:安裝的命令,獨立於shell解釋器之外,需要安裝設定好的路徑查找,找到後纔可以執行

   

   使用type 命令查看命令類型  e.g. type for  (keywords)

   

   hash會緩存檢索過的命令,直接通過hash進行定位 剛開機時hash爲空,每次運行命令

   使用whereis查看命令的位置 查找 目錄+幫助文檔路徑(.gz結尾)

4、命令格式

    命令 選項 參數 (多數情況下參數和命令沒有順序要求,個別會有)

    選項的含義:

        -引導 單字符(可以疊加)e.g. ls -a

        --引導多字符    ls --color (誤)

    多個字符可以疊加在一起如 -al ,前提是程序支持

5、獲得命令的幫助

    內部命令 help + 命令名稱

    外部命令 man + 命令名稱

    --help 

6、命令搜索路徑(環境變量)

    bash中的命令在 ~/.profile中

    其默認的搜索路徑:

    ~/bin   ~/.local/bin  

    /usr/local/sbin; /usr/local/bin; /usr/bin

    /sbin; /bin; /usr/games; /usr/local/games

7、添加環境變量

    在path後面添加:/home/username/文件名

8、shell配置

    tab  補全

    history 查看所有緩存在.bash_history 中的命令

    history -c 清空歷史記錄

    ctrl+a 跳轉首行

    ctrl+e 跳轉行尾

    ctrl+c 終止程序

    ctrl+w 按單詞刪除,空格隔開爲一個獨立的詞

9、終端常用命令

    ls 列出文件目錄信息

        ls /usr      顯示/usr的目錄內容

        ls -R /usr   遞歸顯示/usr目錄內容

    cd 切換工作目錄

    mkdir 創建目錄


    rm 刪除給定的文件或目錄,如果目錄不爲空,需要使用rm -rf

    cp 拷貝

        cp tmp/a.sh  sh/     --複製a.sh到本目錄下的sh/ 中

        cp tmp/a.sh  /tmp    --複製a.sh 到絕對路徑 /tmp下

        cp tmp/a.sh  sh/b.sh --複製a.sh到sh/ 並重命名爲b.sh

    mv 移動

        mv tmp/a.sh sh/  --移動文件

        mv tmp/a.sh sh/b.sh --移動文件且重命名

        mv tmp/a.sh tmp/c.sh --重命名文件

    cat 顯示文件內容

        cat /etc/passwd

    less 以全屏幕方式顯示文件內容

    find 在指定目錄下查找文件

        find /usr/ -iname gcc*  --在/usr中尋找以gcc開頭的文件,大小寫不敏感

        find /usr -name gcc  --在/usr中查找 gcc的文件,大小寫敏感

    touch 創建空文件

        touch tmp/test.sh 在tmp下創建test.sh的空文件

    env 顯示環境變量


第四講  IO重定向和管道

一、標準輸入輸出

    (1)每個進程至少有3個信道:

        標準輸入-stdin  文件描述符0,默認指向終端(鍵盤)

        標準輸出-stdout 文件描述符1,默認指向終端(屏幕)

        標準錯誤-stuerr 文件描述符2,默認指向終端(屏幕)

    (2)在linux中一切皆文件,一個進程從文件描述符爲0的文件讀取輸入信息,將結果輸出到文件描述符爲1 的文件中,並把出錯信息輸出到文件描述符爲2的文件中

    (3)文件描述符:一個進程有一個結構保存一組打開的文件,每個打開的文件用一個數字標識,這個數字就是文件描述符


    e.g. 

        echo abc   --在屏幕上顯示abc

        echo abc >~/tmp.txt  --將abc不但輸出在屏幕上,還在/home/xuan/tmp.txt中保存輸出信息

        echo bcd >>~/tmp.txt --將bcd追加在abc後面而改變原來的

二、控制重定向

    shell中使用> < >>等符號進行重定向shell而不是程序

    shell把重定向符號解釋成指令,將標準輸入、輸出等

三、重定向符號

    <   重定向標準輸入(將輸入從鍵盤改爲指定某文件)

    >   重定向標準輸出 (輸出到指定文件,不輸入到屏幕上)

    >>  重定向標準輸出 (追加內容到指定文件)

    2>  重定向錯誤輸出(將錯誤信息內容到指定文件)

    2>> 重定向錯誤輸出 (將錯誤信息追加到指定的文件)

    &>(>&) 將錯誤、標準輸出到指定文件

四、重定向實例

    e.g. 1

    wc -l file   --wc -l爲統計行數,本條爲將文件名作爲輸入

    wc -l <file  --本行爲將文件內容輸入 >

    e.g. 2

    find / -iname gcc* >find_tmp   --將輸出寫入到文件find_tmp,但錯誤信息會顯示

    find / -iname gcc* &>find_tmp  --將錯誤和輸出到指定文件

五、管道

    shell在解釋命令時會創建管道,並創建兩個進程,把標準輸入輸出重定向到管道,前一個進程向管道寫入數據,後一個進程從管道中讀取數據

    標準錯誤輸入不會寫入管道,直接輸出到終端

六、管道和重定向實例

    e.g. 

    find /iname *gcc* 2>/dev/null |wc -l 將含有*gcc*的錯誤信息輸出到(/dev/null/實質爲丟棄),並統計行數 

    ps -ef |grep ssh --查找含有ssh的進程

    ls | sort -r   --查看當前目錄並排序

    help test | less  --分頁查看文件


第五講  用戶和組管理

一、linux用戶分類

    超級用戶:root用戶

    普通用戶:系統安裝時創建的用戶及後期使用中由用戶創建的用戶

    系統用戶:系統及服務運行必須存在的用戶,默認情況下不能登錄系統

二、用戶相關文件

    1、用戶信息文件 passwd

    用戶信息保存在/etc/passwd中,每一行對應一個賬號記錄

    格式爲:

        登錄名:口令(已加密,x代替):用戶標識號:組標識號:註釋性描述:主目錄:登錄後的shell

    需要root權限

    e.g.

    xuan:x:1000:1000:Xu An,,,:/home/xuan:/bin/bash

    2、用戶密碼信息文件shadow

    /etc/shadow保存用戶加密後的密碼,只有root權限可以讀取

    文件不要手動修改,要讓程序修改

    格式爲:

        登錄名:加密的密碼(sha256加密,!表示沒有密碼,*是系統賬號,不能登錄):最近一次修改密碼的時間(距離1970-1-1的天數):密碼最短有效天數(默認爲0,表示無限制):密碼最長有效天數:提前多少天告知用戶口令將過期

    e.g. 

    xuan:$1$.AlctH6N$xLP5KavvA/.yQPn44nVAK0:17661:0:99999:7:::

三、用戶組分類

    1、超級用戶組(root)、系統組(system group)、用戶組(user group)

    2、基本組:用戶所屬於的第一個用戶組,/etc/passwd中指定

             其他組爲附加組, /etc/group中指定

             一個用戶可以屬於多個附加組,但只能屬於一個基本組

    3、私有組:建立賬戶時,若沒有指定賬戶所述的組,則系統建立一個和用戶名相同的組,該組只容納一戶

       公有組:容納了多個用戶的組,屬於多個組的用戶所擁有的權限是所在組的權限之和

四、組信息文件 group

    /etc/group中保存了系統中所有的組信息

    格式爲:

        組名:組密碼(已加密,用x代替,真正的密碼在/etc/gshadow中):組標識號:以本組爲附加組的用戶列表

    e.g.

        xuan:x:1000:  --私有組

        adm:x:4:syslog,xuan  --共有組,syslog、xuan以其爲附加組

    查看組的常用命令:

    1、groups  查看用戶所屬的組

    2、groups user 查看user用戶所在的組

    3、id user  同時查看用戶信息和組信息

五、root用戶

    root用戶具有最高的權限,其UID爲0,在bash上提示符爲#,普通用戶爲$

    使自己用戶具有root權限:在/etc/passwd中將自己的uid改爲0

六、su(switch user)命令

    可以讓普通用戶切換爲root或其他用戶,當前工作目錄不變

    用法:

        su 選項 用戶名    (若不加用戶名,默認切換到root)

七、sudo命令

    允許程序以臨時root身份運行,其是受限的su,授權用戶可以有5分鐘的root權限(root用戶不需要sudo)

    /etc/sudoers 記錄了那些用戶具有sudo權限

八、設置密碼

    命令:  sudo passwd username

    Ubuntu中root密碼在每次登陸時自動更新,如果需要進入root模式,設置如下:

    1、使用 sudo passwd root命令對root用戶密碼重新設置

    2、su root命令進入root用戶

    3、如需退出使用exit命令

九、修改用戶名和密碼

    1、修改用戶名

        sudo vim /etc/passwd 把原來的改成新的

        sudo vim /etc/shadow 把原來的改成新的

        reboot  重啓

        mv 用戶目錄 自己用戶目錄 移動用戶文件夾

    2、修改密碼

        sudo passwd username

十、adduser 添加用戶

    此命令默認創建帶主目錄的普通用戶,也可以創建系統用戶

    e.g.

        sudo adduser --shell /bin/bash user1  //創建user1,使用shell爲bash

        sudo adduser --shell /bin/bash user2 --gid 1001  //創建user2,使用bash,並添加到附加組1001

        sudo adduser --shell /usr/sbin/nologin  --no-create-home --system --disbled-password --disabled-login mysql //創建系統用戶mysql

十一、deluser 刪除用戶

    sudo deluser username //只刪除用戶名,其他信息均保留

    sudo deluser --remove-home username //刪除用戶並刪除主目錄

    sudo deluser --remove-all-files username //刪除用戶以及一切數據本用戶的文件

十二、創建刪除組

    sudo addgroup --gid ID group1  //創建group1的組並手動指定組ID

    sudo adduser --group --gid ID group //另一種創建組的方法

    sudo delgroup group1  //刪除組

十三、添加組  

    sudo usermod -G group1 -a user1  //將user1加入group1中

    sudo gpasswd -d user1 group1   //將user1從group1中移除


第六講 文件編輯

一、nano

    1、文件創建 nano 文件名  如果有則打開,沒有則新建

    2、基本操作:ctrl+O寫入,ctrl+X退出

    3、配置文件:/etc/nanorc

二、vim與vi

    vim是vi的增強版,支持配色主題

    1、三種模式

        命令模式:輸入命令對文檔操作

        輸入模式:編輯文本,顯示--insert--

        底行模式:輸入:輸入命令,完成後返回命令模式

    2、vim啓動 

        默認啓動爲命令模式,輸入i,a,o可以切換到插入模式,按esc返回到命令模式

    3、vim基本操作

        (1)光標操作

            h 光標左移

            j 下一行

            k 上一行

            l 光標右移

        (2)刪除、插入

            x 刪除後面的字符

            X 刪除前面的字符

            i 當前位置插入  (a,i, o均進入插入模式)

            a 後一個位置插入

            o 下一行插入

        (3)按esc返回指令模式,輸入

            w 寫入文件

            q 退出文件

            wq 寫入並退出

            q!不保存退出

        (4)指令模式操作

            d 刪除、剪切

            dd 刪除整行

            d$ 刪除到 

            dd 刪除當前行  數字+dd 刪除以下幾行

            u  撤銷

            control+r 恢復

            p 複製


第七講  文件管理

一、Linux文件系統概述

    Linux中,一切皆文件 外設也會被映射成文件 在/dev目錄下

    大小寫敏感  

    文件目錄也是文件,記錄了其他的文件信息

二、Linux文件系統

    Linux文件扇區一般512bit

    扇區分爲以下幾個區域:

    boot block:用於啓動分區,如系統安裝在本分區,則存儲啓動信息

    super block:存儲文件系統類型、i-node table文件大小信息

    i-node:文件在DateBlock中的存儲位置(實際通過本區域找到文件並對文件操作)

    Data block:實際存儲數據

    目錄文件名:記錄其他文件名與i-node

二、常用命令

    ls 列出文件

    stat a 查看a的文件信息

    rmdir 刪除空目錄

    cp tmp/a tmp/b 複製tmp/a文件到tmp目錄,命名爲b

    mv tmp/a tmp/b 將tmp/a重命名爲tmp/b

    rm -rf 強制刪除目錄

    ln 創建硬鏈接或符號鏈接

    chmod 更改文件權限和所有者

    chown 更改文件所有者

三、文件權限和標誌位

列出文件權限信息:ls -l

670453 drwxrwxr-x 2 xuan xuan   4096 May 20 20:05 bin

權限信息依次爲:

    1、文件對應iNode號  

    2、文件類型:d(dictionary)目錄,l(link)鏈接文件,- 普通文件

    3、文件權限:r(readable)可讀取

            w(writable)可寫入

            x(executive)可執行

            連續的三組分別爲用戶權限、用戶組權限、其他用戶權限

    4、文件硬鏈接數

    5、文件所屬的用戶

    6、文件所屬的組

    7、文件大小(字節爲單位)

    8、文件創建時間

    9、文件名稱


r:可讀

w:可寫

x:可執行

用戶 用戶組 其他用戶

rwx  rwx  rwx  (八進制表示)

111  111  111

查看在建立文件時預設的權限掩碼:umask 現有權限減掉權限掩碼後,可以得到建立文件時預設的權限

目錄一定有可執行權限 否則cd命令不能切換

文件默認權限:

    系統不允許在創建一個文件時就賦予其執行權限,必須用chmod命令增加權限,但目錄允許設置其權限

    默認權限計算:用777按位減去掩碼中的相應位置,並且文件要減去可執行位置

四、更改文件權限

    使用chmod命令

    chmod 數字權限 文件路徑  e.g chmod 755 bin/pse

    或者

    chmod u=rwx,g=rx,o=r

五、更改文件所屬的用戶組、用戶

    chown 用戶名:用戶組 hd1  更改hd1文件爲所屬的用戶、用戶組

    chown :用戶組 hd1 更改文件所屬的用戶組

    chown  用戶名: hd1 更改hd1所屬的用戶

六、硬鏈接(hard link)

    ln target link-name  如:ln a b 會在當前目錄下創建文件的硬鏈接b

    在執行連接之前,存放連接的目錄不能有與連接名同名的文件,如果創建硬鏈接,則target文件必須存在,且不能是目錄

    硬鏈接沒存建立新文件,相當於文件有一個別名(多個文件名使用一個inode,硬連接數+1)

    rm會使得硬鏈接數-1,硬鏈接數爲0則會從文件系統中刪除

    inode號爲系統唯一,linux掛載多個文件系統,創建硬鏈接不能跨文件系統也不能跨分區

七、軟鏈接(符號鏈接,類似於Windows上的快捷方式)

    1、ln -s 目標目錄(用絕對路徑如$HOME/xuan/tmp) 新建目錄(如temp)

    2、創建符號鏈接會創建一個文件,記錄了另一個文件的路徑

       如果刪除源文件或目錄,則只刪除數據,不刪除軟連接,一旦以同樣的文件名創建了源文件,鏈接將繼續指向該文件

    3、符號鏈接的大小是指向文件名稱的字節數

        可以跨分區跨文件系統


第九講  進程管理

一、基本概念

進程:運行中的程序,系統會給每一個進程分配一個數字標記,爲進程ID(PID)

父進程:進程B由進程A創建,則進程A就是進程B的父進程,進程B就是進程A的子進程

(在shell中輸入命令,則shell就是父進程,運行的程序就是shell的子進程,守護進程除外,守護進程的父進程是init,pid=1)

PPID:父進程的ID

UID(user id):每個進程都有所屬的一個用戶ID,運行程序的用戶ID,每個進程都有一個父進程,其UID繼承自父進程

EUID(effitive user id)有效ID,表示進程對於文件和資源的訪問權限,大多數時候EUID=UID,但是對於設置了相關標誌位的程序,運行時會改變EUID。代理運行的用戶權限

GID(groud id):進程組的ID

EGID(effective group id):有效組ID

二、常見相關命令

    ps 查看進程信息(前臺正在運行的程序)

    ps -e 查看所有進程的信息

    ps -aux 查看詳細信息

    ps -ejH 顯示進程樹

    kill 向進程發信號,終止進程

    pgrep 搜索進程

    top/htop 動態監控進程情況,系統資源使用情況

    nice/renice 調整進程優先級

shell內建命令:

    bg 後臺任務繼續執行

    fg 後臺任務轉換到前臺運行

    jobs 顯示後臺運行的任務

 三、進程搜索

    pgrep -a sh 搜索含有sh的進程並列出詳細信息

    或者

    ps -e | grep 進程名

四、kill進程

    kill -l 查看命令詳情

    kill +pid kill指定pid的進程

    kill -9 +pid 強制kill進程

五、後臺任務

    一個任務運行時間太長,或者需要長期運行,如果想獲得終端控制權,可以直接將其轉入後臺

    後臺暫停:

    control+z 轉入後臺

    jobs 查看後臺任務

    fg 編號 把後臺任務轉入前臺執行

    後臺運行:

    在命令後面加&可以使任務直接後臺運行

    find / -iname *curl* 2>/dev/null >tmp/findtmp


    bg 進程號 轉入後臺運行


    如果在bash裏顯示,需要重定向來取消顯示

六、優先級

    nice 返回當前進程的優先級,一般情況下子進程會繼承父進程的優先級,系統內核在運行進程時會動態調整

    nice ps會在當前優先級上加上一個數值(默認爲10)運行ps,nice調整的範圍是-20~19,數字越小優先級越高


    renice 增加或減少的優先級 PID        調整優先級 

    增加或減少的優先級是一個整數,如果是負數,則只有root權限纔可以執行

七、動態監控進程

    使用top命令動態查看進程(Linux內建)

    saidar 動態監控資源佔用,但不顯示進程信息

    pstree 樹形結構顯示進程信息


第十講  網絡管理

ip 顯示ip地址

ss 顯示套接字信息,可以替代netstat

nethogs 網絡監控工具

爲eth0網卡分配ip地址 

ip address add 192.168.180.102/24 dev eth0

iftop


第十一章  shell腳本基礎——變量

shell是用戶和系統交互的橋樑

shell是linux的一個程序,實現版本有很多,shell的主要工作是運行命令

sh是shell的縮寫,實現方式有sh、bash等

多數Linux的默認shell是bash,登錄以後,會運行一個shell等待用戶輸入命令

一、shell環境變量

環境變量是一個名稱和值對應的列表。

一種shell是啓動時自動解析的命令

取得環境變量的值:echo $環境變量(如:echo $PWD)


真正執行命令的是系統內核而不是shell

二、shell腳本

shell可以從一個文件中讀取命令並逐條執行,文件稱爲腳本

大多數linux發行版的默認shell爲bash

反引號``取得命令變量的值

分號設置兩個變量


輸入文件名直接執行 rm 當前文件 /bin


第十二章  程序結構

一、test

 是shell內建的命令,可以處理腳本內的各類工作,產生的不是一般形式的輸出,而是可用的退出狀態

 test返回true或false 但是true是0,false是1(和其他相反)

 test命令有其他形式,[]在&& ||使用會出錯,需要用[[]]

二、if語句

    if [ command ] ;then

        command

    elif [ command ] ;then

        command 

    else

        command

    fi

    注意:if [ command ] ;then command ;fi 寫在一起時要加分號

三、case

    case $1 in

    "hello")

        echo "hey!"

        ;;

    "time")

        date

        ;;

    *)       --默認選項

        echo "nothing to do"

    esac

四、for

    for i in a b c

    do

        echo $i

    done

第十三章  vim和C語言編程

一、vim配置文件

    在/etc/vim/vimrc 中,但是用戶主目錄下的.vimrc會覆蓋當前的配置

    使用"標記註釋


第十四章  Linux系統編程基礎

一、簡介

    系統編程是調用系統的API完成的任務

    man2 查看系統接口文檔

    man3 是程序庫函數文檔

    man syscalls 查看所有的系統調用

二、調用實例

    1、獲取自己的pid :getpid()

    2、用fork創建子進程:fork() 新創建的進程會和父進程一樣繼續執行(出錯返回-1.正常返回0)

    3、等待子進程退出:wait(int *status)(相當於waitpid(-1,&status,0))

        等待子進程退出,並把子進程退出狀態設置到status狀態,返回退出進程的PID

        在調用wait()時父進程掛起,直到子進程退出

    3、父進程先於子進程退出,子進程被init接管(pid=1)

        服務器版的守護進程 init爲1

        桌面版的守護進程爲 初始終端的進程(pid不能確定)

    4、open函數(用於打開文件操作)

        int open(const char *pathname,int flags(標誌位),mode_t mode(打開模式))

        flag(標誌位)選項:

            O_CREAT 沒有則創建文件

            O_WRONLY 寫模式打開

            O_RDONLY 讀模式打開

            O_RDWR 讀寫方式打開

        mode選項:

            S_IRWXU 可讀可寫可執行

            S_IRUSR 可讀權限

            S_IWUSR 可寫權限

    5、write函數(用於寫入數據)

        ssize_write(int fd,const void *buf,int count)

        參數爲:打開文件的描述符,指向數據的指針,要寫入的字節數

        返回值:成果寫入的字節數,錯誤則返回-1

        文件操作後要使用close關閉打開的文件:int close(int fd),成果返回0,錯誤返回-1

三、IO重定向

    最低可用文件描述符原則(Lowest Available fd):

    1、文件描述符是一個數組索引號,每一個進程都有一組打開的文件,打開的文件保存在一個數組中,文件描述符就是數組的索引號

    2、打開文件時,分配的描述符總是數組中最低可用的索引位置(索引數字最小的位置)

    3、Linux中使用標準輸入(0),標準輸出(1),標準錯誤輸出(2)作爲文件描述符,如果關閉描述符1,打開其他文件,這個文件就被分配了文件描述符1,標準輸出就會寫入到新打開的文件中

    4、編程實現:

        (1)close-open-close方式:先close(1),再open(filename,O_RDWR,S_IWUSR),close關閉打開的文件

        (2)open-close-dup-close:open打開文件,返回的文件描述符不是1,然後 close(1),現在最低可用描述符是1,dup(fd)會把新打開的描述符複製到1,然後 close(fd)關閉新打開的文件

        (3)open-dup2-close方式:dup2(oldfd, newfd),關閉newfd,把oldfd複製到 newfd,close關閉新打開的描述符


第十六章 系統服務

顯示系統服務和運行狀態  service --stauts-all

查看開機啓動的程序 l /etc/init.d/ |less

查看啓動級別  runlevel

0 關機

1 安全模式

2,3,4 多用戶模式

5 圖形化環境

6 重啓


安裝桌面環境 sudo apt install gnome

           sudo apt install gnome-core gnome-common gnome-desktop3-data

Linux桌面與終端相互獨立,互不影響



期末複習

一、uname -a 查看系統信息

    Linux全稱 GNU/Linux  使用GPL開源協議

二、目錄的組織結構

    /bin  /sbin 系統命令存放  有些軟件放在/usr/中的bin、sbin中

    echo $PATH 查看環境變量

    /home/xuan/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

    找不到環境變量解決方法:/usr/bin/vim .profile



    查看用戶主目錄:echo $HOME  或者 echo ~

    查看當前工作目錄 $PWD  或 pwd

三、重要命令

    ls -l 顯示詳細信息

    ls -a顯示所有文件(包括隱藏文件(.開頭的文件))

    ls /usr -R 顯示該路徑下所有目錄(包括內容)

    mkdir 創建文件夾

    cp a xy -R 將a複製到文件夾xy中

    rmdir 刪除空目錄 

    rm -rf 強制刪除

    touch 新建文件

    chmod 改變權限  權限掩碼 -rxwrxwrxw

    chown 改變所有者  改用戶 sudo chown user: file

                    改用戶組 sudo chown :group file

                    支持遞歸操作

    find / -iname *gcc* 查找所有 含有gcc的文件

    標準錯誤輸出不會重定向

    不顯示錯誤信息: find /-iname *gcc* 2> dev/null | wc -l 

四、

    用戶信息 /etc/passwd

    find 

五、進程管理

    ps -e 顯示所有進程

    查找特定進程 ps -e | grep 關鍵詞

    kill PID 有些命令不能中斷

    sudo kill -9 PID 強制中斷進程

六、文件管理

    unmask 設置、顯示權限掩碼,規則:用0777按位減去umask,如果是文件還要去掉可執行權限(默認不具有可執行權限)

    --0表示八進制數字 

    ln -s ~tmp/tmp/b.sh bin/tmpb  (ln -s 目標文件(最好是絕對路徑) 鏈接路徑位置)

    ln b.sh hb.sh (創建硬鏈接,ln b.sh hb.sh)沒有建立新文件(只是多了一條記錄,實際是文件的硬鏈接數加1),相當於起了別名

七、shell編程基礎

    1、變量使用_或字母開頭,等號左右兩側不能有空格

    2、獲取變量需要加$,如 echo $a

    3、

        if[ $a=$b ];then   注意:中括號前後加空格,判等用一個等號

            echo

        fi

------------------------

        if test -d "if.sh" ;then   注意:test不一定必須

            echo 'is not a dir'

        elif [ -f "if.sh" ];then

            cat if.sh

        fi

-------------------------

        if [ $# -gt 0 ];then

            $comm | grep "$1" | grep -v "$0" |grep -v "grep"

        else

            $comm | grep -v "$0"

        fi

-------------------------

        while 

            sleep -1

    4、getpid() 

        fork() 有幾個fork就是幾個的2次方 

    5、創建規定個數子進程

        close(1);   //最低可用文件描述符

        dup2(fd,1);


        fork 和 wait 組合邏輯

        父進程先於子進程退出,子進程被init接管(pid=1)

    6、open read






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