兩年前我看這本書時,是一本812頁的厚書,現在我總結成了40句話,什麼時候成了1句話就好了。
Unix & Linux 大學教程 Harley Hahn
0,作業系統最重要功能
控制計算機并在計算機啟動或者重新啟動時初始化計算機
支援與計算機互動所使用的界面
為需要使用計算機資源(磁盤空間、檔案位置、處理時間、記憶體等)的程式提供接口
管理計算機的記憶體
維護并管理檔案系統
排程工作
提供賬戶和安全服務
1,核心提供服務:
記憶體管理(虛拟記憶體管理,包括分頁)
程序管理(程序建立、終止、排程)
程序間通信(本地,網絡)
輸入輸出
檔案管理
安全和通路控制
網絡通路(如TCP/IP)
2,Unix=核心+使用工具(包括shell和gui)
3, Linus Torvalds
4,計算機系統:
計算機=終端+主機
終端=輸入設施+輸出設施
5,抽象層次
應用程式/使用者
桌面環境
視窗管理器
X Window
核心中的裝置驅動程式
硬體
6,程序線程
在Unix系統中,每個對象或者用檔案表示,或者用程序表示。簡單地講,檔案存放資料或者允許通路資源,而程序是正在執行的程式。
程序可以分成更小的單元,稱為線程,線程是一組運作在程序環境中的指令。是以可以将程式的結構描述為,在一個程序之内,不止一個線程在同時進行。
7,運作級别
0 關機
1 單使用者
2 非标準化
3 多使用者:CLI
4 非标準化
5 多使用者:GUI
6 重新開機
8,快捷鍵
Ctrl + Alt + Left/Right 工作區的切換(基于gnome桌面)
9,終端
stty -a 擷取目前終端行設定
intr = ^C(停止正在運作程式); quit = ^\(停止程式并儲存core檔案); erase = ^?; kill = ^U(删除整行); eof = ^D(提示已經沒有資料); start = ^Q(開始螢幕顯示);erae = ^H(删除一個字元);stop = ^S(暫停螢幕顯示); susp = ^Z(暫停,fg恢複到前台); rprnt = ^R(搜尋history指令); werase = ^W(删除一個單詞); lnext = ^V; flush = ^O;
infocmp 列印終端資訊 infocmp vt100 | less (infocmp需要安裝ncurses)
echo $TERM 得到的預設終端是xterm
export IGNOREEOF=5 可以按^D提示logout或者exit退出
10,which type whereis
type 是 shell 内嵌,檢視内置指令,bash 69個
help列印一些内置指令清單
11,cal -j 5 2014
檢視2014年5月的每一天
12,uptime,uname
13,users,who,finger,w(誰正在做什麼)
14,bc -l (支援+,-,*,/,%,^,sqrt(x),s(x),c(x),a(x),ln(x),j(n,x))
15,RTFM(Read the fucking manual),xman
(1).指令 (2).系統調用 (3).函數庫 (4).特殊檔案 (5).檔案格式 (6).遊戲 (7).雜項資訊 (8).系統管理
man -f 快速查尋指令用法 whatis
man -k 關鍵字 apropos
man builtin man bash
16,環境變量
env
perintenv
set/unset(csh) set term=vt100
setenv/unsetenv(csh) setenv TEST hello
export(bash)
set -/+o 顯示shell選項控制(bash)
17,引用和轉義
使用反斜線引用單個字元(稱為轉義了這個字元)
使用單引号引用一串字元
使用雙引号引用一串字元,但是保留$,`,\的特殊意義
18,搜素路徑
export PATH="/...:/..."
set path=(/... /...)
PS1 shell 提示
export PS1="\u\w\@\$"
prompt(csh)
``指令替換
19,fc -l history
20,自動補全
檔案名補全
指令補全
變量補全
使用者辨別補全
主機名補全(bash)
21,别名
alias,umalias
alias 'a=alias'
22,初始化檔案
.profile檔案
.rc檔案
登陸shell(.bash_profile)
非登陸shell(.bashrc)
23,輸入輸出
<重定向标準輸入(同0<)
>重定向标準輸出(同1>)
>>追加标準輸出(同1>>)
2>重定向标準錯誤
2>>追加标準錯誤
2>&1将标準錯誤重定向到标準輸出
>&或者&>重定向标準輸出+标準錯誤(隻适用于Bash)
|管道
2>&1 |所有輸出到管道
set -o noclobber 可以禁用>,但是可以用>|(強制重寫)
24,編組和子shell
(cd directory; command)
25,管道線分流tee(從标準輸入讀取資料發送螢幕和檔案各一份)
cat 1 2 3 |tee 123|grep hh (tee可以輸出儲存不止一個副本)
26,條件執行
command1 && command2(指令1成功執行後執行指令2)
command1 || command2(指令1沒有成功後執行指令2)
27,過濾器
cat|grep|sort|less
(1)分析問題
(2)選擇工具
(3)與他人讨論
(4)選擇選項
28,檔案簡單操作
split 分割檔案
tac 反轉文本行順序
rev 反轉字元
colrm 删除指定的資料列,然後将剩餘的資料寫入标準輸出
29,比較和抽取
cmp 逐位元組地比較兩個檔案
comm 一行一行比較兩個有序文本
diff 比較無序文本檔案
cut -f 1,3-5 -d ':' /etc/passwd | sort (f列,d分隔符)
cut -c1-8(c按字元)
paste 可以将幾個檔案(其中每個檔案都包含一列資料)組成一個大表
paste 水準組合資料,cat垂直組合資料
30,統計和格式化
nl 建立行号
wc 統計行、單詞和字元
:set list 可視化制表符和空格
expand将制表符轉換成空格(unexpand)
fold分割行 fold -s -w 40 file (40個字元一行,單詞不分割)
31,選取、排列、組合及變換
grep (global re print)
ls -F /etc |grep -c "/" (c統計)
-in(忽略大小寫并按行号)
-l (列出檔案名)
-v(reverse,相反)
-x (占整行)
-r(recursive,遞歸)
-s(suppress,抑制)
-E(egrep)
look
sort -dfnu(sort -u = sort|uniq = cat|sort|uniq)
uniq -cdu(d隻看重複行,u隻看唯一行,c統計行數)
join 合并有序資料
strings在二進制中搜尋字元串 strings /usr/bin/sort
tr A-Z a-z < old > new大小寫轉換
[:upper:] [:lower:] [:digit:]
32,非互動式文本編輯sed
sed 's/h/H/g'ole >new (-i in-place可以改變原始檔案)
(1)從輸入流中讀取一行
(2)執行指定的指令,對該行進行必要的交換
(3)将該行寫入到輸出流中
number [,number] |/regex/ 對指定行進行操作或者包含特定字元串的行
5,10s(5到10行)
$s(最後一行)
/OK/(字元串OK所在行)
[0-9][0-9]包含兩個連續數字的行
-e 多條更改
-f 檔案
33,正規表達式
元字元
.
^
$
\< 比對單詞的開頭
\> 比對單詞的結尾
[abc] 比對abc中的任何字元
[^abc] 比對不在abc中的任何字元
() 組:視為一個單獨的單元
| 比對選擇之一
\ 引用:從字面上解釋元字元
運算符
* 0或多次
+ 1或多次
? 0或1次
{n} n次 (xyz){5}比對字元"xyz"5次
{n,} 最少n次
{,m} 最多m次
{n,m} n,m之間次 [0-9]{3,5}比對3到5個數字
類
[:lower:] a-z
[:upper:] A-Z
[:alpha:] A-Za-z
[:alnum:] A-Za-z0-9
[:digit:] 0-9
[:punct:] 标點符号
[:blank:] 空格或制表符
grep -w 'cat' data
grep '\<cat\>'data \<和\>是整個數字或者單詞,沒有就是對字元串
grep '\bcat\b'data
man ascii
locale -a
34,顯示檔案
hexdump hexdump -C /bin/grep |less 顯示二進制檔案 -C 檔案
od od -Ax -txlz /bin/grep |less
35,vim文本編輯器
指令模式
h
j
k
l
w
e
b
r
R
x
X
D
dd
u
U
yy
yw
y10w
y2)
y5}
10yy
p
P
xp 調換兩個字元
ddp 調換兩行
deep 調換2個單詞
輸入模式
i
a
o
I
A
O
搜尋模式
:/keywords
:set number
:set all
.vimrc
36,檔案系統
基于磁盤的檔案系統
ext3、ext4,FAT32,HFS+(層次式檔案系統),ISO 9660(CD-ROM),NTFS,UDF(可重寫CD和DVD),UFS2(BSD,Solaris)
網絡檔案系統
NFS,SMB
特殊檔案系統
devpts 僞終端的裝置界面(PTY)
procfs proc檔案系統
sysfs 系統資料檔案系統(裝置與驅動器)
tmpfs 臨時存儲檔案系統
37,目錄操作
..
~
pushd
popd
dirs
ls -CrR1F(C列,r字母表從大到小顯示,R全部子目錄,1檔案名占一行,F帶标志)
ls -lrtu顯示最近通路過得檔案
-普通
d目錄
l符号
b塊
c字元
p管道
dumpe2fs /dev/sda1 | grep "Block size"
tree 檔案樹
38,檔案操作
setuid
setgid
umask
shred -fvuz filename 清空檔案内容
stat file
ls -i
ln -s
whereis
locate
find
find path ... test ... action...
test如下:
-name
-iname
-type
-perm
-user
-group
-empty
-size
-atime
-ctime
-mtime
action如下:
-fprint file
-ls
-exec command{} \;執行指令,{}訓示比對的檔案名
-ok command{} \;同上,但是運作指令之前确認
-delete 删除檔案
-fls file
xargs處理查找到的檔案
find ~ -type f | xargs ls -s
(whoami;date) |xargs
39, 程序和作業控制
echo $$ 顯示目前shell的PID
echo $! 顯示上一條移至背景的指令的PID
sleeep (sleep 20;cat /etc/passwd) && vim /etc/termcap
jobs
ps
fg
bg
suspend 挂起目前shell
^Z
kill
top
prtstat
pstree
fuser
nice