【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
【Linux】Linux操作系統期末復習筆記