1. 程式人生 > >【Linux】Linux操作系統期末復習筆記

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

tor 16px 引導 基本操作 sta keywords game 區域 bash

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






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