Linux基本总结
文章目錄
- 一、系統(tǒng)狀態(tài)查看工具
- 1、使用 Linux
- 超級(jí)用戶
- 使用 Linux
- 2、幾個(gè)基本的Linux命令
- man
- date
- cal
- bc
- passwd
- 3、了解系統(tǒng)狀態(tài)
- who
- uptime
- top
- ps
- free
- vmstat
- 二、文本文件處理
- 1、讀取文件內(nèi)容
- more / less
- cat 與 od
- head 與 tail
- tee
- wc
- sort
- tr
- uniq
- 2、正則表達(dá)式
- 功能
- 單字符正則表達(dá)式
- 轉(zhuǎn)義字符(\\)
- 圓點(diǎn)(·)
- 星號(hào)(\*)
- 錨點(diǎn)(\^與\$)
- 集合(\[與\])
- 基本用法
- 用減號(hào) \- 定義一個(gè)區(qū)間
- 用 \^ 表示補(bǔ)集
- 舉例
- 正則表達(dá)式擴(kuò)展
- 文本行篩選 grep
- 流編輯 sed
- 復(fù)雜篩選及加工 awk
- 3、文件比對(duì)
- 文件內(nèi)容比對(duì)
- cmp
- md5sum / sha1sum
- 求文本文件版本間差異
- diff
- 4、vi 編輯器
- 編輯狀態(tài)和光標(biāo)移動(dòng)
- 用戶的偏好設(shè)置
- vi 的兩種工作狀態(tài)
- 光標(biāo)移動(dòng)
- 單字符移動(dòng)
- 翻頁
- 光標(biāo)行內(nèi)快速移動(dòng)
- 光標(biāo)移動(dòng)到指定行
- 查找、編輯及存盤
- 刪除和替換
- 取消和重復(fù)
- 文件操作命令
- 剪貼板
- 塊操作:復(fù)制與刪除
- 行合并、刷屏和狀態(tài)顯示
- 模式查找與替換
- 三、文件系統(tǒng)管理
- 1、文件通配符
- 文件通配符規(guī)則
- 星號(hào) \*
- 問號(hào) ?
- 方括號(hào) \[ \]
- 波浪線 \~
- 注意
- 處理過程
- shell 和 kernel
- shell文件名通配符處理
- 舉例
- 2、文件和目錄的管理
- 列出文件目錄
- ls
- 文件的復(fù)制與刪除
- cp
- mv
- rm
- 目錄管理
- pwd
- cd
- mkdir
- rmdir
- 目錄遍歷
- find
- 舉例
- 批量處理文件
- xargs
- 構(gòu)造參數(shù)列表并運(yùn)行命令
- 打包與壓縮
- tar
- 舉例
- 3、命令獲取信息
- 配置文件
- 環(huán)境變量
- 4、文件系統(tǒng)
- 創(chuàng)建與安裝
- mkfs
- mount
- umount
- 存儲(chǔ)結(jié)構(gòu)
- stat
- 5、文件和目錄的權(quán)限
- 相關(guān)命令
- chmod
- umask
- 四、bash及腳本程序設(shè)計(jì)
- 1、shell的基本機(jī)制
- 歷史與別名
- history
- 歷史替換
- alias
- TAB鍵補(bǔ)全
- 輸入重定向
一、系統(tǒng)狀態(tài)查看工具
1、使用 Linux
超級(jí)用戶
root 用戶(超級(jí)用戶)
- root 不受權(quán)限的制約,可隨意修改和刪除文件
- root 用戶誤刪重要文件可能帶來嚴(yán)重后果
創(chuàng)建新用戶
由 root 用戶創(chuàng)建(useradd 命令),用戶信息存放 /etc/passwd 文件中,包括用戶名和用戶 ID,以及 Home 目錄, 登錄 shell
登錄 shell:一般為 bash,也可以選其他 shell,其他系統(tǒng)程序,甚至自設(shè)計(jì)的程序。
- 用戶可以從普通終端或者網(wǎng)絡(luò)虛擬終端登錄進(jìn)入系統(tǒng)
使用 Linux
Shell 的提示符
登錄成功后出現(xiàn)shell提示符
-
$ Bourne Shell 系列 (sh, ksh, bash)
-
# 當(dāng)前用戶為超級(jí)用戶 root(操作時(shí)要小心)
系統(tǒng)的使用
- 出現(xiàn)shell提示符以后就可輸入系統(tǒng)命令
- 與Windows不同的是組成命令的英文字母大小寫敏感
2、幾個(gè)基本的Linux命令
man
作用:查閱手冊(cè)
使用方法:
- man name
- man section name,章節(jié)編號(hào):1 命令,2 系統(tǒng)調(diào)用,3 庫函數(shù),5 配置文件
- man -k regexp,列出關(guān)鍵字(keyword)與正則表達(dá)式 regexp 匹配的手冊(cè)項(xiàng)目錄
手冊(cè)內(nèi)容:
- 列出基本功能和語法
- 對(duì)于 C 語言的函數(shù)調(diào)用,列出頭文件和鏈接函數(shù)庫
- 功能說明
- SEE ALSO:有關(guān)的其它項(xiàng)目的名字和章節(jié)號(hào)
date
作用:讀取系統(tǒng)日期和時(shí)間
使用方法:
-
date,讀取系統(tǒng)日期和時(shí)間,Wed Nov 7 21:09:16 CST 2018
-
可以根據(jù)需要定制使出格式
-
date "+%Y-%m-%d %H:%M:%S Day %j",2018-11-07 21:09:54 Day 311
-
date "+%s",1541596457
-
311指的是今天是今年的第311天
格式控制字符串:第一個(gè)字符必須為 + 號(hào),%Y 代表年號(hào), %m 代表月份,%M 代表分鐘。
%s 秒坐標(biāo)(從 UTC1970 開始),常用于計(jì)算時(shí)間間隔
-
-
通過 NTP 協(xié)議校對(duì)系統(tǒng)事件,ntpdate
- ntpdate 0.pool.ntp.org,設(shè)置時(shí)間,必須 root 用戶
- ntpdate -q 0.pool.ntp.org,查詢時(shí)間,普通用戶也可以
cal
作用:打印日歷
使用方法:
- cal,打印當(dāng)前月份的日歷
- cal year,打印某年的日歷
- cal month year,打印某年某月的日歷
bc
作用:計(jì)算器
- 基本計(jì)算器功能
- 支持變量、函數(shù),條件和循環(huán)等編程功能(類似 C 語言的小編程語言)
- 可以進(jìn)行任意精度的計(jì)算
精度:
- 缺省精度
- bc,缺省精度為小數(shù)點(diǎn)后0位
- bc -l,缺省精度為小數(shù)點(diǎn)后20位
- 可以通過設(shè)置 scale 自行決定精度(小數(shù)點(diǎn)位數(shù))
- scale=10000
- s(1.0)
passwd
作用:更換口令
-
普通用戶
- 使用 passwd 命令更改自己的口令,更改前系統(tǒng)先驗(yàn)證原來的口令
-
超級(jí)用戶 root
-
修改口令之前不驗(yàn)證舊的口令
-
可修改自己的口令,還可強(qiáng)迫設(shè)置其它用戶口令
-
命令 passwd liu
將用戶 liu 的口令強(qiáng)迫設(shè)置為某一已知口令
超級(jí)用戶無法讀取其它用戶的口令
當(dāng)普通用戶忘記口令時(shí),可請(qǐng)求超級(jí)用戶強(qiáng)設(shè)口令
-
修改超級(jí)用戶 root 的口令時(shí)要特別注意
-
3、了解系統(tǒng)狀態(tài)
who
作用:確定有誰再系統(tǒng)中
使用方法:
-
who,列出當(dāng)前已登錄入系統(tǒng)的用戶信息
- 第一列:用戶名;第二列:終端設(shè)備的設(shè)備文件名
- 設(shè)備在文件系統(tǒng)中有一個(gè)文件名(同普通磁盤文件不同的是文件類型屬于特殊文件),設(shè)備文件一般放于目錄 /dev 下
-
tty,打印出當(dāng)前終端的設(shè)備文件名
-
who am i,列出當(dāng)前終端上的登錄用戶信息
-
whoami,僅列出當(dāng)前終端上的登錄用戶名
uptime
作用:已開機(jī)時(shí)間(年齡)
使用方法:
- uptime
- 系統(tǒng)自啟動(dòng)后到現(xiàn)在的運(yùn)行時(shí)間
- 當(dāng)前登錄入系統(tǒng)的用戶數(shù)
- 近期1分鐘,5分鐘,15分鐘內(nèi)系統(tǒng)CPU的負(fù)載
- 平均調(diào)度隊(duì)列長度
top
作用:列出資源占用排名靠前的進(jìn)程
- VIRT 進(jìn)程邏輯地址空間大小(virtual)
- RES 駐留內(nèi)存數(shù)(Resident),也就是占用物理內(nèi)存數(shù)
- SHR 與其他進(jìn)程共享的內(nèi)存數(shù)(share)
- %CPU 占用CPU百分比,%MEM 占用內(nèi)存百分比
- TIME+ 占用的CPU時(shí)間
ps
作用:查閱進(jìn)程狀態(tài)(process status),實(shí)際上就是將內(nèi)核中進(jìn)程狀態(tài)信息有選擇地打印出來
選項(xiàng):
- 用于控制列表的行數(shù)(進(jìn)程范圍)和列數(shù)(每進(jìn)程列出的屬性內(nèi)容)
- 無選項(xiàng):只列出在當(dāng)前終端上啟動(dòng)的進(jìn)程,列出的項(xiàng)目有:PID,TTY,TIME,COMMAND
- -e 選項(xiàng):列出系統(tǒng)中所有的進(jìn)程(進(jìn)程范圍)
- -f 選項(xiàng):以 full 格式列出每一個(gè)進(jìn)程(控制列的數(shù)目)
- -l 選項(xiàng):以 long 格式列出每一個(gè)進(jìn)程(控制列的數(shù)目)
free
作用:了解內(nèi)存使用情況
- 內(nèi)存總量 4GB, 空閑 309MB。Linux 為提高效率,利用程序暫時(shí)不用的內(nèi)存,緩沖讀寫過的磁盤信息。當(dāng)前有 717MB 的 buffer / cache。
- 不計(jì) buffers / cache,系統(tǒng)有實(shí)際可利用資源 734MB
- 打印了磁盤 Swap 區(qū)的使用情況
vmstat
作用:了解系統(tǒng)負(fù)載
二、文本文件處理
1、讀取文件內(nèi)容
more / less
作用:逐屏顯示文件
使用方法:
- more shudu.c 指定一個(gè)文件
- more *.[ch] 指定多個(gè)文件
- ls -l | more 指定0個(gè)文件
- less shudu.c
more
滿屏后,顯示–more–或--more–(15%),可以使用 more 命令:
less
less is more
- 回退瀏覽的功能更強(qiáng)
- 可直接使鍵盤的上下箭頭鍵,或者 j, k,類似 vi 的光標(biāo)定位鍵,以及 PgUp, PgDn, Home, End鍵
- 有的 Unix 系統(tǒng)不提供 less 命令,但是可利用 more 命令的增強(qiáng)功能
cat 與 od
作用:列出文件內(nèi)容
cat concatenate:串結(jié),文本格式打印 (選項(xiàng)- n:行號(hào))
od octal dump:逐字節(jié)打印(-c, -t c, -t x1, -t d1, -t u1 選項(xiàng))
舉例
- cat tryl.c 命令行參數(shù) 1 個(gè)
- cat –n shudu.c 顯示行號(hào)
- cat tryl.c tryx.c try.h 命令行參數(shù) 3 個(gè)
- cat >try 命令行參數(shù) =0 個(gè),從 stdin 獲取數(shù)據(jù),直到 ctrl-d
- cat tryl.c try2.c try.h > trysrc
- cat makefile *.[ch] > src
- od –t x1 x.dat 以十六進(jìn)制打印文件 x.dat 各字節(jié)
- od –t x1 x.dat | more 以十六進(jìn)制打印文件 x.dat 各字節(jié)
- od –c /bin/bash 逐字符方式打印文件,遇到不可打印字符打印編碼
- echo abcdABCD | od –t x1 十六進(jìn)制顯示字符的 ASCII 碼
head 與 tail
作用:顯示文件的頭部或者尾部
默認(rèn)只選擇 10 行, -n 選項(xiàng)可以選擇行數(shù)
舉例
- head –n 15 ab.c 顯示文件 ab.c 中前15行
- head –n 23 a.c b.c c.c | more 顯示三個(gè)文件各自的前23行共顯示69行
- tail –n 40 liu.mail
- head –n -20 msg.c 除去文件尾部20行其余均算“頭”
- tail –n +20 msg.c 除去文件頭部20行其余均算作“尾”
- tail -f debug.txt 實(shí)時(shí)打印文件尾部被追加的內(nèi)容(選項(xiàng) -f : forever)
netstat -s -p tcp | head
ls -s | sort | head –n 20
tee
作用:三通。將從標(biāo)準(zhǔn)輸入 stdin 得到的數(shù)據(jù)抄送到標(biāo)準(zhǔn)輸出 stdout 顯示,同時(shí)存入磁盤文件中。
舉例
- ./myap | tee myap.log
wc
作用:字計(jì)數(shù)(word count)
- 列出文件中一共有多少行,有多少個(gè)單詞,多少字符
- 當(dāng)指定的文件數(shù)大于1時(shí),最后還列出一個(gè)合計(jì)
- 常用選項(xiàng) -l:只列出行計(jì)數(shù)
舉例
- wc sum.c (1個(gè)文件)
- wc x.c makefile stat.sh (多個(gè)文件)
- wc -l *.c makefile start.sh (只列出文件分別有多少行)
- ps -ef | wc -l (0個(gè))
- ps -ef | grep liang | wc -l (0個(gè))
- who | wc -l (0個(gè))
sort
作用:對(duì)文件內(nèi)容排序
- -n 選項(xiàng)(Numberic):對(duì)于數(shù)字按照算術(shù)值大小排序,而不是按照字符串比較規(guī)則,例如123與67
- 可以選擇行中某一部分作為排序關(guān)鍵字
- 選擇升序或降序
- 字符串比較時(shí)對(duì)字母是否區(qū)分大小寫
- 內(nèi)排序外排序等算法參數(shù)選擇(當(dāng)數(shù)據(jù)量較大時(shí),性能調(diào)優(yōu))
舉例
- sort telno > telno1
- ls -s | sort | tail –10
- ls -s | sort -n | tail –10
tr
作用:翻譯字符
tr string1 string2:把標(biāo)準(zhǔn)輸入拷貝到標(biāo)準(zhǔn)輸出,string1 中出現(xiàn)的字符替換為 string2 中的對(duì)應(yīng)字符
舉例
- cat telnos | tr UVX uvx
- 例:用 [] 指定一個(gè)集合
cat report | tr '[a-z]' '[A-Z]' 將小寫字母改為大寫字母 - 例:用 \ 加三個(gè)八進(jìn)制數(shù)字(類似 C 語言)表示一字符
cat file1 | tr % '\012' 將%改為換行符,注意不要漏掉必需的單引號(hào)
uniq
作用:篩選文件中的重復(fù)行(重復(fù)的行:緊鄰的兩行內(nèi)容相同)
用法:
- uniq options
- uniq options input-file
- uniq options input-file output-file
選項(xiàng):
-
-u(uniqe)只保留沒有重復(fù)的行
-
-d (duplicated)只保留有重復(fù)的行(但只打印一次)
沒有以上兩個(gè)選項(xiàng),則打印沒有重復(fù)的行和有重復(fù)的行(但只打印一次)
-
-c (count)計(jì)數(shù)同樣的行出現(xiàn)幾次
2、正則表達(dá)式
功能
描述一個(gè)字符串模式
作用范圍:
- 字符串匹配操作和替換操作
- 舉例:Linux 中的 vi more grep yacc lex awk sed
- 其他:Visual Studio,Word 等文本編輯器
注意:
正則表達(dá)式規(guī)則與文件名通配符規(guī)則不同
- 正則表達(dá)式規(guī)則用于文本處理的場(chǎng)合
- 文件名匹配規(guī)則用于文件處理的場(chǎng)合
單字符正則表達(dá)式
-
長的正則表達(dá)式由單字符正則表達(dá)式構(gòu)成的
-
非特殊字符與其自身匹配
如:正則表達(dá)式 a 與字符串 a 匹配,b 與 b,/ 與 /
轉(zhuǎn)義字符(\)
\. \* \$ \^ \[ \\
正則表達(dá)式 \* 與字符串 * 匹配,與字符串 \* 不匹配
轉(zhuǎn)義字符后除以上六種之外的不該出現(xiàn)其他字符,例如:不該出現(xiàn) \u,這樣的組合被視為undefined(未定義的),后出的軟件有可能會(huì)有特殊的解釋
圓點(diǎn)(·)
匹配任意單字符
星號(hào)(*)
單字符正則表達(dá)式后跟 *,匹配此單字符正則表達(dá)式的 0 次或任意多次出現(xiàn)
錨點(diǎn)(^與$)
- $ 在尾部時(shí)有特殊意義,否則與其自身匹配
- 例:123$ 匹配文件中行尾的123,不在行尾的123字符不匹配
- 例:?$123 與字符串 $123 匹配
- 例:.$ 匹配行尾的任意字符
- ^ 在首部時(shí)有特殊意義,否則與其自身匹配
- 例:^printf 匹配行首的 printf 字符串,不在行首的 printf 串不匹配
- 例:Hel^lo 與字符串 Hel^lo 匹配
- 例:在 vi 中使用:10,50s/^ //g,刪除10-50行的每行行首的4個(gè)空格
集合([與])
基本用法
- 在一對(duì)方括號(hào)之間的字符為集合的內(nèi)容,如:單字符正則表達(dá)式 [abcd] 與 a 或 b, c, d 匹配
- 圓點(diǎn)、星號(hào)、反斜線在方括號(hào)內(nèi)時(shí),代表它們自己,如:[\*.] 可匹配 3 個(gè)單字符
用減號(hào) - 定義一個(gè)區(qū)間
- 如 [a-d] [A-Z] [a-zA-Z0-9]
- [][]集合含左右中括號(hào)兩個(gè)字符
- 減號(hào)在最后,則失去表示區(qū)間的意義
- [ad-] 只與3個(gè)字符匹配
用 ^ 表示補(bǔ)集
- ^ 在開頭,則表示與集合內(nèi)字符之外的任意字符匹配
- [^a-z] 匹配任一非小寫字母
- [^][] 匹配任一非中括號(hào)字符
- ^ 不在開頭,則失去其表示補(bǔ)集的意義
- [a-z^] 能匹配 27 個(gè)單字符
舉例
正則表達(dá)式擴(kuò)展
-
表示分組:圓括號(hào) ()
-
表示邏輯運(yùn)算:表示邏輯 “或” 的符號(hào) |
(xy)* 可匹配空字符串, xy, xyxy, xyxyxy
(pink|green) 與 pink 或 green 匹配 -
重復(fù)次數(shù)定義:與星號(hào)地位類似的 + 和 ?,限定重復(fù)次數(shù) \{m,n\}
- * 號(hào)表示它左邊的單字符正則表達(dá)式的0次或多次重復(fù)
- + 號(hào)表示1次或多次: [0-9]+ 匹配長度至少為1數(shù)字串
- ? 表示0次或一次: a? 匹配零個(gè)或一個(gè)a
- 限定重復(fù)次數(shù) \{m,n\},例如: [1-9][0-9]\{6,8\} 匹配7-9位數(shù)字,首位非0
-
命名的預(yù)定義集合
[[:xdigit:]] 表示十六進(jìn)制數(shù)字,\d 數(shù)字,\D 非數(shù)字
-
比 ^ 和 $ 更靈活的錨點(diǎn)定義
例如:尋找一個(gè)數(shù)字串,但是要求這個(gè)數(shù)字串不許出現(xiàn)在“合計(jì)”兩個(gè)字之后(“合計(jì)”可作為錨點(diǎn))。
文本行篩選 grep
Global regular expression print
作用:在文件中查找字符串
語法:grep 模式 文件名列表,注意,文件名列表中只包含一個(gè)文件時(shí),結(jié)果不會(huì)顯示文件名,只有包含多個(gè)文件才顯示每個(gè)文件名
舉例
- grep O_RDWR *.h
- ps -ef | grep liang
- ls -l / | grep '^d' | wc –l
- grep '[0-9]*' shudu.c
- grep '[0-9][0-9]*' shudu.c
grep選項(xiàng)
- -n 顯示時(shí)每行前面顯示行號(hào)
- -v 顯示所有不包含模式的行
- -i 字母比較時(shí)忽略字母的大小寫
- -E 使用擴(kuò)展的正則表達(dá)式
舉例
- grep -n main *.c
查找含有正則表達(dá)式 main 的行,并打印行號(hào)
當(dāng)文件數(shù)超過一個(gè)時(shí),除了輸出行號(hào),還輸出文件名 - grep -v '[Dd]isable' dev.stat>dev.active
取消文件中所有含有指定模式的行,生成新文件 - grep -i richard telnos
在文件中檢索字符串 richard,不顧字母的大小寫
流編輯 sed
用法
- sed '命令' 文件名列表
- sed -e '命令1' -e '命令2' -e '命令3' 文件名列表
- sed -f 命令文件 文件名列表
舉例
-
tail -f pppd.log | sed 's/145\.37\.23\.26/橋西/g',把 IP 地址 145.37.23.26 替換為 “橋西”,注意不要忘記轉(zhuǎn)義符號(hào) \
-
tail -f pppd.log | sed -f sed.cmd
其中 sed.cmd 文件內(nèi)容為
s/145\.37\.23\.26/橋西/g s/102\.157\.23\.109/柳蔭街/g s/145\.37\.123\.57/大山子/g -
cat pm25.txt | sed 's/\[[^][]*]//g',刪除所有被中括號(hào)包圍的字段
正則表達(dá)式替換
復(fù)雜篩選及加工 awk
作用:逐行掃描進(jìn)行文本處理
用法
- awk '程序' 文件名列表
- awk -f 程序文件名 文件名列表
程序 條件 { 動(dòng)作 }
一段程序:awk 自動(dòng)對(duì)每行文本執(zhí)行條件判斷,滿足條件執(zhí)行動(dòng)作(內(nèi)置循環(huán))
多段程序:允許多段程序,程序間用空格或分號(hào)隔開
處理方式
-
**(行)**輸入文件的每行作為一個(gè) “記錄” ,變量 NR 就是行號(hào)
-
**(列)**每行用空格分隔開的部分,叫做記錄的 “域”
內(nèi)置變量 $1 是第1域內(nèi)容,依次,?$2 是第2域內(nèi)容,…… 特別的,?$0 指的是整個(gè)這一行的內(nèi)容
-
awk 的處理為:符合條件的行,執(zhí)行相應(yīng)的動(dòng)作
awk描述的條件
awk描述的動(dòng)作
舉例
3、文件比對(duì)
文件內(nèi)容比對(duì)
cmp
作用:兩文件逐字節(jié)比較
用法:cmp file1 file2
功能
- 逐字節(jié)比較兩個(gè)文件是否完全相同
- 兩個(gè)文件完全相同時(shí),不給出任何提示
- 兩個(gè)文件不同時(shí),打印出第一個(gè)不同之處
- 在 Windows 中有類似的命令 COMP
md5sum / sha1sum
- 使用 MD5 算法(散列函數(shù))根據(jù)文件內(nèi)容生成16字節(jié) hash 值,比較 hash 值是否相同,就可斷定兩文件內(nèi)容是否完全相同
- 使用 SHA-1 算法的命令名為 sha1sum(20字節(jié) hash 值)
- 常用于數(shù)據(jù)完整性(Data Integrity)驗(yàn)證和判斷位于網(wǎng)絡(luò)不同機(jī)器上的兩個(gè)文件內(nèi)容是否相同
- 其他散列函數(shù)也可以用來完成這一任務(wù):sha512sum
求文本文件版本間差異
diff
作用:求出兩個(gè)文件的差別
用法
- diff file1 file2
- diff -u file1 file2
功能
- 比較兩個(gè)版本的文本文件,以尋找兩者間差別
- 輸出格式 normal, unified (-u)
- normal 格式:列出一個(gè)如何將 file1 轉(zhuǎn)化為 file2 的指令
- 這些指令有 a (Add), c (Change) 和 d (Delete)
- 指令字母左邊的行號(hào)是 file1 的行號(hào),右面是 file2 的行號(hào)
- 列出內(nèi)容時(shí),大于號(hào)后邊的內(nèi)容是需要在 file1 文件中增加的內(nèi)容;小于號(hào)后邊的內(nèi)容是需從 file1 中刪除的內(nèi)容
- normal 格式文件轉(zhuǎn)化指令如下表
diff -u舉例
4、vi 編輯器
編輯狀態(tài)和光標(biāo)移動(dòng)
用戶的偏好設(shè)置
-
用戶 HOME 目錄下的文件 .exrc,記作 $HOME/.exrc(每用戶一份,用戶獨(dú)立設(shè)置)
set number # 每行左邊顯示行號(hào) set tabstop=4 # 制表符位置為4格對(duì)齊 -
用運(yùn)行時(shí)檢查偏好設(shè)置
:set
vi 的兩種工作狀態(tài)
- 命令狀態(tài):鍵盤輸入解釋為命令
- vi 一啟動(dòng)就進(jìn)入命令方式,鍵盤輸入解釋為命令
- 一般按鍵無回顯
- 以冒號(hào)可以引入行編輯的命令和查找命令
- 編輯命令 i a 等,可以從命令狀態(tài)轉(zhuǎn)到文本狀態(tài)
- 文本狀態(tài)
- 鍵盤輸入解釋為輸入的文本
- 可以輸入多行,每輸入完一行后按回車轉(zhuǎn)入下一行
- 正文輸入時(shí)有回顯
- 輸入完畢按鍵盤左上角的 Esc 鍵,返回到命令狀態(tài)
- 正文插入
- 命令 i 在當(dāng)前字符前插入正文段,直至按 Esc 鍵 (insert)
- 命令 a 在當(dāng)前字符后插入正文段,直至按 Esc 鍵 (append)
光標(biāo)移動(dòng)
單字符移動(dòng)
- 單字符移動(dòng)(四個(gè)字母鍵盤上相鄰的按鍵)
- h 光標(biāo)左移一列
- j 光標(biāo)下移一行
- k 光標(biāo)上移一行
- L 光標(biāo)右移一列
- 一般可以直接使用鍵盤上的方向鍵代替這四個(gè)字母
- 命令前加一整數(shù),表示這個(gè)命令連續(xù)執(zhí)行多少遍
- 5h 光標(biāo)左移5列
- 6j 光標(biāo)下移6行
- 23k 光標(biāo)上移23行
- 10L 光標(biāo)右移10列
注意:在 vi 命令狀態(tài)下的按鍵命令沒有回顯
翻頁
- Ctrl-b 向后翻頁(Backward)
- Ctrl-f 向前翻頁(Forward)
- 一般可以用 PgDn 鍵代替 Ctrl-f,用 PgUp 鍵代替 Ctrl-b
- 也可以使用下面的命令
- 6Ctrl-f 向前翻6頁
- 15Ctrl-b 向后翻15頁
光標(biāo)行內(nèi)快速移動(dòng)
- 行尾行首
- 將光標(biāo)移至當(dāng)前行首 ^
- 將光標(biāo)移至當(dāng)前行尾 $
- 移動(dòng)一個(gè)單詞
- 移到右一個(gè)單詞 w
- 移到左一個(gè)單詞 b
- 也可以使用 6w 5b 命令
光標(biāo)移動(dòng)到指定行
- 移到指定的行
- :476 將光標(biāo)定位于第476行
- :1 將光標(biāo)定位于第1行(文件首)
- :$ 將光標(biāo)定位于文件尾
- 在描述行號(hào)時(shí)可以使用
- 圓點(diǎn) . 代表當(dāng)前行號(hào)
- $ 代表最后一行的行號(hào)
- 括號(hào)配對(duì) %
- 把光標(biāo)移到一個(gè)花括號(hào)(或圓括號(hào),或方括號(hào))上,按 % 鍵,則光標(biāo)自動(dòng)定位到與它配對(duì)的那一個(gè)括號(hào)
查找、編輯及存盤
刪除和替換
- 刪除字符
- 刪除當(dāng)前字符的命令 x
- 命令 5x 刪除從當(dāng)前光標(biāo)開始的5個(gè)字符
- 刪除行
- 刪除當(dāng)前行的命令 dd
- 命令 3dd 刪除從當(dāng)前行開始的3行
- 替換光標(biāo)處字符 r
- ra 命令將當(dāng)前光標(biāo)處字符替換為 a
- 將當(dāng)前光標(biāo)處開始的三個(gè)字符依次替換為 abc,則需要按命令 rarbrc
取消和重復(fù)
- 取消上一次的編輯操作(undo) u
- 如:誤刪了一段正文,用 u 命令可撤銷刪除
- 如:把文件中的所有abc字符串替換成xyz字符串, 用 u 命令可撤銷替換
- 重復(fù)上一次的編輯操作 .
- 按圓點(diǎn)鍵,可以重復(fù)上一次的編輯操作
- 例如:按 3dd 命令刪除了三行,然后按圓點(diǎn)鍵就再刪除三行,接著連續(xù)按圓點(diǎn)鍵,每按一次刪三行
文件操作命令
存盤退出:
- ZZ
- :wq<CR>
存盤不退出::w<CR>
不存盤退出::q!<CR>
讀入文件 xyz.c 插入到當(dāng)前行之下::r xyz.c<CR>
寫文件,把第50行至文件尾的內(nèi)容寫到文件 file1 中:
- :50,$w file1<CR>
- :50,$w! file1<CR>,強(qiáng)制覆蓋
剪貼板
刪除,并拷貝到剪貼板:
- :10,50d<CR>,刪除第10-50行
- :1,.d<CR>,刪除文件首至當(dāng)前行的部分
- :.,$d<CR>,刪除當(dāng)前行到文件尾
不刪除,拷貝到剪貼板(yank)::10,50y<CR>
粘貼剪貼板信息(paste):p
塊操作:復(fù)制與刪除
復(fù)制::5,10co56<CR>,復(fù)制第5-10行到第56行之下
移動(dòng)::8,34m78<CR>,移動(dòng)第8-34行到第78行之下
行合并、刷屏和狀態(tài)顯示
兩行合并(Join) J,當(dāng)前行下面的行合并到當(dāng)前行
刷新屏幕顯示(load) Ctrl-l
狀態(tài)顯示 Ctrl-g,在屏幕最下面一行列出正在編輯的文件的名字,總行數(shù),當(dāng)前行號(hào),文件是否被修改過等信息
模式查找與替換
用正則表達(dá)式來描述一個(gè)字符串模式
查找命令
- 格式為 /pattern
- 例如:/[0-9][0-9*]
繼續(xù)查找命令
- n 向下查找下一個(gè)next
- N 向上查找下一個(gè)
- 循環(huán)式搜索(向下搜索時(shí)遇到文件尾則回到文件頭繼續(xù)搜索)
替換命令(substitution)
- 格式 :n1,n2s/pattern/string/g
- 例如
- :1,50s/abc/xyz/,不帶 g 則每一行只替換第一個(gè)符合模式的
- :1,50s/abc/xyz/g,帶 g 會(huì)替換一行中所有符合模式的
- :50,75s/^/ /,第50-75行右移4列
- :50,75s/^ //,第50-75行左移4列
- :1,$s/ *$//,消除尾部多余的空格
- :1,$s/a[i]/b[j]/g,小心陷阱:不能把 a[i] 替換為 b[j],要帶轉(zhuǎn)義符 \
- :1,$/a*b/x+y/g,小心陷阱:不能把 a*b 替換為 x+y
轉(zhuǎn)義符
-
將 a[i]*b[j] 替換為 x[k]*y[n] 的命令::1,$s/a\[i]\*b\[j]/x[k]*y[n]/g
-
將 buf.len/1000 替為 buffer.size/1024 的命令::1,$s/buf\.len\/1000/buffer.size\/1024/g,模式串和替換字符串中的斜線前加轉(zhuǎn)義符\ 以區(qū)別于替換命令格式中所必須的斜線
:1,$s:buf\.len/1000:buffer.size/1024:g,s后面以冒號(hào)取代斜線,分界符就換為冒號(hào),避免對(duì)斜線的轉(zhuǎn)義,其他分隔符(如 ^)同理,:1,$s^http://www\.myvdo\.com/a/b/c/index\.html^https://www.xyvdo.com/index.html^g
假“死機(jī)”問題
-
現(xiàn)象
vi 編輯結(jié)束后執(zhí)行存盤操作,結(jié)果導(dǎo)致屏幕卡死,輸入任何信息都不再有顯示(死機(jī),終端死機(jī))
-
原因
vi 編輯結(jié)束后按下 Ctrl-S,因?yàn)?Windows 編輯器一般設(shè)置 Ctrl-S 熱鍵的動(dòng)作為 Save,但 Linux 卻進(jìn)入流量控制狀態(tài)
-
解決方法
按下 Ctrl-Q 鍵后流量控制解除
意外中止問題
-
現(xiàn)象
vi 編輯結(jié)束后存盤,程序意外中止,編輯成果丟失,文件內(nèi)容未發(fā)生變化
-
原因
vi 存盤命令 Shift-ZZ,誤操作為 Ctrl-ZZ,而 Ctrl-Z 按鍵導(dǎo)致當(dāng)前運(yùn)行進(jìn)程被掛起(suspend),暫停運(yùn)行(但進(jìn)程尚在,處于 Stopped 狀態(tài))
-
解決方法
調(diào)用 bash 的作業(yè)管理機(jī)制,恢復(fù)運(yùn)行被 Stopped 的進(jìn)程
- jobs,列表當(dāng)前被 Stopped 的進(jìn)程有哪些
- fg %1,或 %1,將1號(hào)作業(yè)恢復(fù)到前臺(tái)(foreground)運(yùn)行
三、文件系統(tǒng)管理
1、文件通配符
文件通配符規(guī)則
星號(hào) *
- 匹配任意長度的文件名字符串(包括空字符串)
- 點(diǎn)字符 (.) 作為文件名或路徑名分量的第一個(gè)字符時(shí),必須顯式匹配
- 斜線 (/) 也必須顯式匹配
- 例:*file 匹配 file, makefile,不匹配 .profile 文件,try*c 匹配 try1.c, try.c, try.basic
問號(hào) ?
- 匹配任一單字符
方括號(hào) [ ]
- 匹配括號(hào)內(nèi)任一字符,也可以用減號(hào)指定一個(gè)范圍
- 例:[A-Z]*, *.[ch], [Mm]akefile
波浪線 ~
(Bash特有的)
- ~,當(dāng)前用戶的主目錄(home)
- ~kuan,用戶kuan的主目錄(home)
注意
處理過程
shell 和 kernel
- shell
- shell 是一個(gè)用戶態(tài)進(jìn)程,如 /bin/bash
- 對(duì)用戶提供命令行界面
- 啟動(dòng)其他應(yīng)用程序(ap)使用操作系統(tǒng)核心提供的功能:包括系統(tǒng)命令和用戶編寫的程序
- kernel:操作系統(tǒng)核心
- 管理系統(tǒng)資源(包括內(nèi)存,磁盤等)運(yùn)行在核心態(tài)
- 通過軟中斷方式對(duì)用戶態(tài)進(jìn)程提供系統(tǒng)調(diào)用接口
shell文件名通配符處理
文件名通配符的處理由 shell 完成,分以下三步:
- 在 shell 提示符下,從鍵盤輸入命令,被 shell 接受
- shell 對(duì)所鍵入內(nèi)容作若干加工處理,其中含有對(duì)文件通配符的展開工作(文件名生成),生成結(jié)果命令
- 執(zhí)行前面生成的結(jié)果命令
舉例
設(shè)當(dāng)前目錄下只有 try.c, zap.c, arc.c 三文件
- 鍵入內(nèi)容 cat *.c
- 實(shí)際執(zhí)行 cat arc.c try.c zap.c(按字典序)
- 對(duì)命令 cat 來說,指定了3個(gè)文件
grep a*.c try.c 與 grep 'a*.c' try.c 的區(qū)別
- 設(shè)當(dāng)前目錄下有 a1.c 和 a2.c
- 前者實(shí)際執(zhí)行 grep a1.c a2.c try.c,在 a2.c 和 try.c 中查找正則表達(dá)式 a1.c
- 后者在 try.c 文件中查找正則表達(dá)式 a*.c
鍵入命令時(shí)的簡化輸入
- 手工鍵入 vi m*e,實(shí)際執(zhí)行 vi makefile
- 手工鍵入 cd *sna*,實(shí)際執(zhí)行 cd configure-IBM-sna-network.d
2、文件和目錄的管理
列出文件目錄
ls
作用:文件名列表
選項(xiàng):
-
-F,Flag
- 若列出的是目錄,就在名字后面綴以斜線 /
- 若列出的是可執(zhí)行文件,就在名字后面綴以星號(hào) *
- 若列出的是符號(hào)連接文件,就在名字后面綴以符號(hào) @
- 若列出的是普通文件,則名字面后無任何標(biāo)記
-
-l,長格式列表
-
-rwxr-x--x 1 liang stud 519 Jul 5 15:02 arg
-
第1列第1字符為文件屬性
- 普通文件,d 目錄文件(Dir),l 符號(hào)連接文件(Link),b 塊設(shè)備文件(Block),c 字符設(shè)備文件(Char),p 命名管道文件(Pipe)
-
第1列2-10字符為文件訪問權(quán)限(rwx,讀、寫、可執(zhí)行),分別為文件所有者、同組用戶、其他用戶的權(quán)限
-
第2列是文件 link 數(shù),涉及到此文件的目錄項(xiàng)數(shù)
-
-
-h,human-readable,以便于人閱讀的方式打印數(shù)值(例如:1K 234M 2G)
-
-d,directory,當(dāng) ls 的參數(shù)是目錄時(shí),不像默認(rèn)的情況那樣列出目錄下的文件,而是列出目錄自身的信息
-
-a,all,列出文件名首字符為圓點(diǎn)的文件(默認(rèn)情況下這些文件不列出,經(jīng)常會(huì)用來保存用戶的偏好設(shè)置信息或保存某些軟件的狀態(tài)信息)。
-
-A,功能與 -a 相同,除了不列出 . 和 ..
-
-s,size,列出文件占用的磁盤空間
-
-i,inode,列出文件的 i 結(jié)點(diǎn)號(hào)
文件的復(fù)制與刪除
cp
作用:拷貝文件
使用方法:
- cp file1 file2
- cp file1 file2 … filen dir,其中 file1, file2, …, filen 為文件名,dir 為已有目錄名。
- 第二種格式中:dir 必須已經(jīng)存在并且是一個(gè)目錄
第一種格式中:file2 不存在,則創(chuàng)建;file2 存在且是文件,則覆蓋;file2 存在且是目錄,則按格式二處理
選項(xiàng):
- -u,update,增量拷貝,便于備份目錄
- 根據(jù)文件的時(shí)戳,不拷貝相同的或者過時(shí)的版本的文件,以提高速度
- 若 dir1 和 dir2 不慎顛倒位置,不會(huì)出現(xiàn)災(zāi)難性后果
- -r,若給出的源文件是一目錄文件,此時(shí) cp 將遞歸復(fù)制該目錄下所有的子目錄和文件。此時(shí)目標(biāo)文件必須為一個(gè)目錄名。
- -v,verbose,cp 命令將告訴用戶正在做什么。很多 Linux 命令都帶有具有相同意義的 -v 選項(xiàng)。
舉例:
mv
作用:移動(dòng)文件
使用方法:
- mv file1 file2
- mv file1 file2 … filen dir
- mv dir1 dir2
功能:
- 使用 mv 命令可以將文件和目錄改名
- 可以將文件和子目錄從一個(gè)目錄移動(dòng)到另一個(gè)目錄
- mv dir1 dir2 兩種執(zhí)行情況(同文件系統(tǒng),不同文件系統(tǒng))
rm
作用:刪除文件
使用方法:
- rm file1 file2 … filen
選項(xiàng):
- -r,遞歸地(Recursive)刪除實(shí)參表中的目錄,也就是刪除一整棵目錄樹。
- -i,每刪除一個(gè)文件前需要操作員確認(rèn)(Inform)
- -f,強(qiáng)迫刪除(Force)。只讀文件也被刪除并且無提示,無操作權(quán)限的文件強(qiáng)制刪除也不能刪掉。
- 注意:正在運(yùn)行的可執(zhí)行程序文件不能被刪除
顯式區(qū)分命令選項(xiàng)和處理對(duì)象
目錄管理
pwd
作用:打印當(dāng)前工作目錄,print working directory
cd
作用:改變當(dāng)前工作目錄,Change Directory
mkdir
作用:創(chuàng)建目錄
例如:mkdir sun/work.d
mkdir 除創(chuàng)建目錄外,系統(tǒng)自動(dòng)建立文件 . 與 ..
選項(xiàng):
- -p,自動(dòng)創(chuàng)建路徑中不存在的目錄。例如:mkdir -p database/2019/09/04/log
rmdir
作用:刪除目錄
例如:rmdir sun/work.d
要求被刪除的目錄除 . 與 .. 外無其他文件或目錄,否則應(yīng)該使用命令 rm -r sun/work.d 來刪除
目錄遍歷
find
作用:遍歷目錄樹。find 命令從指定的查找范圍開始,遞歸地查找子目錄,凡滿足條件的文件或目錄,執(zhí)行規(guī)定的動(dòng)作。
舉例:
- find verl.d ver2.d -name '*.c' -print
范圍:當(dāng)前目錄的子目錄 ver1.d 和 ver2.d
條件:與名字 *.c 匹配。注:*.c 應(yīng)當(dāng)用引號(hào)括起
動(dòng)作:把查找到的文件的路徑名打印出來
特點(diǎn):
- 遞歸式查找,提供了一種遍歷目錄樹的手段
- find 命令提供的靈活性:在“動(dòng)作”中可以指定任何命令(也包括用戶自己編寫的處理程序),使得 find 成為一個(gè)任意處理命令可以借用來進(jìn)行目錄遍歷的殼(類似 awk 對(duì)文本的逐行掃描, find 對(duì)目錄森林中的文件和目錄逐個(gè)掃描)
條件選項(xiàng):
- -name wildcard,文件名與 wildcard 匹配。注意:
- 使用正則表達(dá)式時(shí)必需的引號(hào)
- 這里的 “文件名” 僅指路徑名的最后一部分
- 對(duì)通配符的解釋由 find 完成
- -regex pattern,整個(gè)路徑名與正則表達(dá)式 pattern 匹配
- -type,f 普通文件,d 目錄,l 符號(hào)鏈接文件,c 字符設(shè)備文件,b 塊設(shè)備文件,p 管道文件
- -maxdepth number,指定搜索深度為 number
- -size ±n單位,指定文件大小(大于+,等于,小于-),單位有 c(字符),b (塊, 512 字節(jié)),k(1024),M,G,默認(rèn)為 b
- -mtime ±ndays,文件最近修改時(shí)間
- -newer file,文件最近修改時(shí)間比 file 的還晚
- 可以用() –o !等表示多條件的 “與”,“或”,“非”
動(dòng)作選項(xiàng):
- -print,打印查找的文件的路徑名
- -exec
- 對(duì)查找到的目標(biāo)執(zhí)行某一命令
- 在 -exec 及隨后的分號(hào)之間的內(nèi)容作為一條命令
- 在這命令的命令參數(shù)中,{} 代表遍歷到的目標(biāo)文件的路徑名
- -ok,與 -exec 類似,只是對(duì)符合條件的目標(biāo)執(zhí)行命令前需要經(jīng)過操作員確認(rèn)
舉例
-
find . -type d -print,從當(dāng)前目錄開始查找,尋找所有目錄,打印路徑名。結(jié)果:按層次列出當(dāng)前的目錄結(jié)構(gòu)。
-
find / -name 'stud*' -type d -print,指定了兩個(gè)條件:名字與 stud* 匹配,類型為目錄。兩個(gè)條件邏輯 “與”,必須同時(shí)符合這兩個(gè)條件。
-
find / -type f -mtime -10 -print,從根目錄開始檢索最近10天之內(nèi)曾經(jīng)修改過的普通磁盤文件(目錄不算)
-
find . ! -type d -links +2 -print,從當(dāng)前目錄開始檢索 link 數(shù)大于2的非目錄文件條件 “非” 用 !。注意:! 與 -type 之間必須保留一空格。
-
find ~ -size +100k \( -name core -o -name '*.tmp' \) -print,從主目錄開始尋找大于 100KB 的名叫 core 或有 .tmp 后綴的文件
-
使用了兩條件 “或” -o及組合 () (圓括號(hào))
-
不要遺漏了所必需的引號(hào),反斜線和空格,尤其是圓括號(hào)前和圓括號(hào)后。圓括號(hào)是 shell 的特殊字符
-
其他寫法
find / -size +100k '(' -name core -o -name \*.tmp ')' -print
find / -size +100k \( -name core –o -name \*.tmp ')' -print
-
-
find /lib /usr -name 'libc*.so' -exec ls -lh {} \;
- -exec 及隨后的分號(hào)之間的內(nèi)容作為一條命令執(zhí)行
- shell 中分號(hào)有特殊含義,前面加反斜線 \
- {} 代表遍歷時(shí)所查到的符合條件的路徑名。注意,兩花括號(hào)間無空格,之后的空格不可省略
-
利用 find 的遞歸式遍歷目錄的功能在文件中搜尋字符串,find src -name \*.c -exec grep -n -- --help {} /dev/null \;,在目錄 src 中所有 .c 文件中查找 --help 字符串
批量處理文件
xargs
find src -name \*.c -exec grep -n -- --help {} /dev/null \;,如果能把 find src -name \*.c –print 生成的文件名列表追加在 grep -n -- --help filelist 命令的后面就可以了。
命令 xargs 可以用來完成這個(gè)工作:find src -name \*.c –print | xargs grep -n -- --help
xargs 命令把標(biāo)準(zhǔn)輸入追加到參數(shù)表后面,也就是上述 grep… 的后面,再作為一個(gè)命令來執(zhí)行。這樣利用 find 精確篩選,利用 grep 批量處理文件,提高效率。
構(gòu)造參數(shù)列表并運(yùn)行命令
-
解決 shell 文件名生成時(shí),因?yàn)槲募?#xff0c;緩沖區(qū)空間受限而文件名展開失敗的問題
rm -f *.dat,文件名 *.dat 展開失敗,可以使用下面的命令 ls | grep ".dat$" | xargs rm -f
-
find 命中目錄名因刪除目錄導(dǎo)致目錄遍歷過程遇到麻煩
find . -name CVS –exec rm –rf {} \; 改為:find . -name CVS -print | xargs rm -rf
打包與壓縮
tar
作用:文件歸檔。tar命令最早為順序訪問的磁帶機(jī)設(shè)備而設(shè)計(jì)的(Tape ARchive,磁帶歸檔),用于保留和恢復(fù)磁帶上的文件。
語法:tar ctxv[f device] [options] file-list
選項(xiàng):
- 選項(xiàng)第一字母指定要執(zhí)行的操作,是必需的
- c,create,創(chuàng)建新磁帶。從頭開始寫,以前存于磁帶上的數(shù)據(jù)會(huì)被覆蓋掉
- t,table,列表。磁帶上的文件名列表,當(dāng)不指定文件名時(shí),將列出所有的文件。
- x,eXtract,抽取。從磁帶中抽取指定的文件,不指定文件名則抽取所有文件。
- 除功能字母外的其他選項(xiàng):
- v,verbose,冗長。每處理一個(gè)文件,就打印出文件的文件名,并在該名前冠以功能字母。
- f,file,指定設(shè)備文件名。
- z,采用壓縮格式(gzip 算法)
- j,采用壓縮格式(bzip2 算法)
- options 選項(xiàng):
- -C,大寫,解壓到指定目錄下,前提是目錄必須存在
舉例
-
tar cvf /dev/rtc0 .,將當(dāng)前目錄樹備份到設(shè) /dev/rct0 中,圓點(diǎn)目錄是當(dāng)前目錄
-
tar tvf /dev/rct0,查看磁帶設(shè)備 /dev/rct0 上的文件目錄
-
tar xvf /dev/rct0,查看磁帶設(shè)備 /dev/rct0 上的文件目錄
-
tar cvf my.tar *.[ch] makefile,指定普通文件代替設(shè)備文件,將多個(gè)文件或目錄樹存儲(chǔ)成一個(gè)文件。
- 這一命令的危險(xiǎn)誤操作:tar cvf *.[ch] makefile,漏掉了功能字母 f 必需的 “設(shè)備文件名” ,按照 shell 對(duì)文件名的展開規(guī)則,會(huì)覆蓋掉現(xiàn)存的排位第一的文件,tar cvf a1.c a2.c ab.h makefile
-
目錄打包,設(shè) work 是一個(gè)有多個(gè)層次的子目錄
- tar cvf work.tar work
- tar cvzf work.tar.gz work,gzip 壓縮算法,對(duì) C 源程序體積為原來的 20%
- tar cvjf work.tar.bz2 work,bzip2 壓縮算法,對(duì) C 源程序 17%,執(zhí)行時(shí)間三倍
查看歸檔文件中的文件目錄:tar tvf work.tar.gz
從歸檔文件中恢復(fù)目錄樹:tar xvf work.tar.gz [-C mydir]
注意:文件名后綴 .tar, .tar.gz, .tar.bz2 僅僅是慣例,不是系統(tǒng)級(jí)強(qiáng)制要求
3、命令獲取信息
配置文件
- 存儲(chǔ)配置信息或者偏好配置信息
- 分為系統(tǒng)級(jí)偏好設(shè)置和用戶級(jí)偏好設(shè)置, 例如 bash 的 /etc/profile 和 ~/.bash_profile
- 提供了靈活性(同一個(gè)程序文件因用戶不同讀取的配置文件不同而表現(xiàn)不同),變更這些信息不很方便, 一般不需要變化的配置信息或選項(xiàng)信息存入配置文件,持久化存儲(chǔ)
環(huán)境變量
- 命令 env 可以打印當(dāng)前的環(huán)境變量。例如:LANG(語言), HOME(主目錄), PATH(可執(zhí)行文件的查找路徑), CLASSPATH(類庫), CVSROOT
- 環(huán)境變量值的獲取與設(shè)置:C 語言有庫函數(shù) getenv()
4、文件系統(tǒng)
創(chuàng)建與安裝
mkfs
作用:創(chuàng)建文件系統(tǒng)(磁盤格式化)
mkfs /dev/sdb,在塊設(shè)備文件 /dev/sdb 上創(chuàng)建文件系統(tǒng)(make filesystem)
mount
作用:安裝子文件系統(tǒng)
mount /dev/sdb /mnt,/mnt 可以是任一個(gè)事先建好的空目錄名。此后,操作子目錄 /mnt 就是對(duì)子文件系統(tǒng)的訪問,從文件或目錄名看不出和其它根文件系統(tǒng)的對(duì)象有什么區(qū)別
mount,不帶參數(shù),列出當(dāng)前已安裝的所有子文件系統(tǒng)
umount
作用:卸載已安裝的子文件系統(tǒng)
umount /dev/sdb
存儲(chǔ)結(jié)構(gòu)
這部分建議去學(xué)習(xí)操作系統(tǒng),這里不展開
stat
作用:讀取 i 節(jié)點(diǎn)信息
stat test.c
5、文件和目錄的權(quán)限
相關(guān)命令
chmod
作用:修改權(quán)限
-
字母形式
- chmod [ugoa] [+-=] [rwxst] 文件名表
- u – user,文件主的權(quán)限;g – group,同組用戶;o – other,其他用戶;a – all,上述所有;t – sticky;s – SUID
- 例子:chmod u+rw *,chmod go-rwx *.[ch],chmod a+x batch,chmod u=rx try2
-
數(shù)字形式(八進(jìn)制)
- 例:chmod 644 xyz1 xyz2
注意:只允許文件主和超級(jí)用戶修改文件權(quán)限
umask
作用:決定文件/目錄的初始權(quán)限
- 用 vi 新建文件
- 用輸出重定向創(chuàng)建文件
- 創(chuàng)建新目錄
使用方法:
- umask,打印當(dāng)前的 umask 值
- umask 022,將 umask 值設(shè)置為八進(jìn)制的022
四、bash及腳本程序設(shè)計(jì)
1、shell的基本機(jī)制
歷史與別名
history
內(nèi)部命令 history,查看歷史表(文件 $HOME/.bash_history)
查看先前鍵入的命令
歷史替換
人機(jī)交互時(shí)直接使用上下箭頭鍵
!!,引用上一命令
! str,以 str 開頭的最近使用過的命令,如:!v,!m,!.
alias
TAB鍵補(bǔ)全
- 每行的首個(gè)單詞:TAB鍵補(bǔ)全搜索 $PATH 下的命令
- 行中的其它單詞:TAB鍵補(bǔ)全當(dāng)前目錄下的文件名
輸入重定向
<filename
<<word
<<<word
輸出重定向與管道
stdout輸出重定向
stderr輸出重定向
舉例
管道
2、變量
賦值與引用
3、替換
Shell 的替換工作:先替換命令行再執(zhí)行命令
文件名生成
命令替換
反撇號(hào) `
$()格式
位置參數(shù)
4、元字符和轉(zhuǎn)義
5、條件
條件判斷的依據(jù):判定一條命令是否執(zhí)行成功。方法:命令執(zhí)行的返回碼,0表示成功,非0表示失敗。可以把命令執(zhí)行結(jié)束后的“返回碼”理解為“出錯(cuò)代碼”。
邏輯判斷
內(nèi)部命令 $?
復(fù)合邏輯
test 和 方括號(hào)命令 [
- 命令 /usr/bin/[,要求其最后一個(gè)命令行參數(shù)必須為 ]
- 除此之外 /usr/bin/[ 與 /usr/bin/test 功能相同
- 注意:不要將方括號(hào)理解成一個(gè)詞法符號(hào),而是一個(gè)名字為 [ 的命令
- 舉例
test -r /etc/motd
[ -r /etc/motd ]
文件特性檢測(cè)
比較
復(fù)合條件
命令組合 {} 與 ()
條件分支
if
舉例
case
6、循環(huán)
expr
作用:算術(shù)運(yùn)算、關(guān)系運(yùn)算、邏輯運(yùn)算、正則表達(dá)式運(yùn)算
正則表達(dá)式運(yùn)算
內(nèi)部命令 eval
while 循環(huán)
多個(gè)命令放到一行時(shí),要用分號(hào)隔開
for 循環(huán)
7、函數(shù)
五、重定向與管道
1、重定向
2、管道
創(chuàng)建
寫
讀
關(guān)閉
舉例
3、一些命令
kill
作用:用于向進(jìn)程發(fā)送一個(gè)信號(hào)
使用方法:kill –signal PID-list
舉例:
4、一些系統(tǒng)調(diào)用
signal
作用:進(jìn)程對(duì)信號(hào)的處理
進(jìn)程對(duì)到達(dá)的信號(hào)可以在下列處理中選取一種
-
設(shè)置為缺省處理方式(大部分處理是程序中止,有的會(huì)產(chǎn)生core文件)。
signal(SIGINT, SIG_DFL),參數(shù)1為信號(hào)宏,參數(shù)2為 SIG_DFL
-
信號(hào)被忽略:signal(SIGINT,SIG_IGN),在執(zhí)行了這個(gè)調(diào)用后,進(jìn)程就不再收到 SIGINT 信號(hào)(該屬性會(huì)被子進(jìn)程繼承)
-
信號(hào)被捕捉:signal(SIGINT,user_func),用戶事先注冊(cè)好一個(gè)函數(shù),當(dāng)信號(hào)發(fā)生后就去執(zhí)行這一函數(shù)。
kill
作用:發(fā)送信號(hào)
使用方法:int kill(int pid, int sig),返回值:0 成功,-1 失敗
六、進(jìn)程控制
1、一些系統(tǒng)調(diào)用
fork
作用:創(chuàng)建新進(jìn)程
使用方法:int fork(),對(duì)父進(jìn)程返回子進(jìn)程的 PID (>0),對(duì)子進(jìn)程返回值為 0,失敗時(shí)返回 -1
exec
wait
system
總結(jié)
- 上一篇: 手心输入法有手写键盘吗(qq五笔输入法官
- 下一篇: windows主机怎么远程登录