TLCL學習筆記2

第十一章 進程

Ps

報告當前進程快照

Top

顯示任務

Jobs

列出活躍的任務

Bg

把一個任務放到後臺執行

Fg

把一個任務放到前臺執行

Kill

給一個進程發送信號

Killall

殺死指定名字的進程

Shutdown

關機或重啓系統

 

當系統啓動的時候,內核先把一些它自己的活動初始化爲進程,然後運行一個叫做 init 的程序。

init 再依次運行一系列 叫做init 腳本的 shell 腳本(位於/etc),它們可以啓動所有的系統服務。

其中許多系統服務以守護(daemon)程序的形式實現,守護程序僅在後臺運行,沒有任何用戶界面。 這樣,即使我們沒有登錄系統,至少系統也在忙於執行一些例行事務。

init的PID總是1。剩下的進程升序排列。

 

PS

只使用ps命令本身的話只會返回和當前終端相關的進程。

TTY代表teletype,指進程的終端。

[me@linuxbox ~]$ ps
PID TTY           TIME CMD
5198 pts/1    00:00:00 bash
10129 pts/1   00:00:00 ps

 

在後面加上x可以返回更多的進程。會返回很多很多結果。

STAT代表進程的狀態。

狀態

含義

R

運行中。這意味着,進程正在運行或準備運行。

S

正在睡眠。進程沒有運行,而是,正在等待一個事件, 比如說,一個按鍵或者網絡分組。

D

不可中斷睡眠。進程正在等待 I/O,比方說,一個磁盤驅動器的 I/O。

T

已停止. 已經指示進程停止運行。稍後介紹更多。

Z

一個死進程或“殭屍”進程。這是一個已經終止的子進程,但是它的父進程還沒有清空它。 (父進程沒有把子進程從進程表中刪除)

<

一個高優先級進程。這可能會授予一個進程更多重要的資源,給它更多的 CPU 時間。 進程的這種屬性叫做 niceness。具有高優先級的進程據說是不好的(less nice), 因爲它佔用了比較多的 CPU 時間,這樣就給其它進程留下很少時間。

N

低優先級進程。 一個低優先級進程(一個“好”進程)只有當其它高優先級進程被服務了之後,纔會得到處理器時間。

大寫字母之後的其他字符代表各種外來進程的特性。

 

另外一個流行(真的很流行)的組合是aux。輸出BSD(Berkeley Software Distribution)風格的結果。

標題

含義

USER

用戶 ID. 進程的所有者。

%CPU

以百分比表示的 CPU 使用率

%MEM

以百分比表示的內存使用率

VSZ

虛擬內存大小

RSS

進程佔用的物理內存的大小,以千字節爲單位。

START

進程啓動的時間。若它的值超過24小時,則用天表示。

 

top

top命令類似windwos的“任務管理器”,輸出的結果三秒刷新一次。

輸出結果中上面是系統概要,下面是進程列表,以CPU佔用率排序。

 

~實例說明系統概要:

行號

字段

意義

1

top

程序名。

 

14:59:20

當前時間。

 

up 6:30

這是正常運行時間。它是計算機從上次啓動到現在所運行的時間。 在這個例子裏,系統已經運行了六個半小時。

 

2 users

有兩個用戶登錄系統。

 

load average:

加載平均值是指,等待運行的進程數目,也就是說,處於可以運行狀態並共享 CPU 的進程個數。 這裏展示了三個數值,每個數值對應不同的時間段。第一個是最後60秒的平均值, 下一個是前5分鐘的平均值,最後一個是前15分鐘的平均值。若平均值低於1.0,則指示計算機 工作不忙碌。

2

Tasks:

總結了進程數目和這些進程的各種狀態。

3

Cpu(s):

這一行描述了 CPU 正在進行的活動的特性。

 

0.7%us

0.7% 的 CPU 被用於用戶進程。這意味着進程在內核之外。

 

1.0%sy

1.0%的 CPU 時間被用於系統(內核)進程。

 

0.0%ni

0.0%的 CPU 時間被用於"nice"(低優先級)進程。

 

98.3%id

98.3%的 CPU 時間是空閒的。

 

0.0%wa

0.0%的 CPU 時間來等待 I/O。

4

Mem:

展示物理內存的使用情況。

5

Swap:

展示交換分區(虛擬內存)的使用情況。

 

Top接受鍵盤指令。直接按h顯示幫助,直接按q退出top。

 

控制進程

輸入xlogo,獲取一個示例程序。

 

中斷進程

首先xlogo一下,此時linux命令行沒有返回;按下Ctrl-c,中斷。

 

後臺執行

輸入xlogo &

會返回任務號和PID。並且可以輸入下一條指令了。

此時可以在ps裏看到xlogo。

 

通過命令jobs可以看到任務。

 

返回前臺

使用fg %【任務序號】

~

[me@linuxbox ~]$ fg %1
xlogo

 

停止(而非終止)一個進程

輸入xlogo,之後ctrl-z

之後你調整xlogo窗口的大小,會發現X不動了。

使用fg可以讓它復活

使用bg再次把它移到後臺

 

Signals

首先啓動xlogo &

此時打印出了PID和jobspec

使用kill 【PID】

或者

kill %【jobspec】終止。

 

kill並不能是用來“殺死”程序,而是給它發送信號。例如ctrl-c其實是發送INT(中斷)的信號,ctrl-z其實是發送TSTP(終端停止)的信號。

 

KILL真正的語法形式:

kill [-signal] PID...

 

如果沒有填入可選項,那麼默認是TERM(終止)。

編號

名字

含義

1

HUP

掛起。這是美好往昔的殘留部分,那時候終端機通過電話線和調制解調器連接到 遠端的計算機。這個信號被用來告訴程序,控制的終端機已經“掛起”。 通過關閉一個終端會話,可以展示這個信號的作用。在當前終端運行的前臺程序將會收到這個信號並終止。

許多守護進程也使用這個信號,來重新初始化。這意味着,當一個守護進程收到這個信號後, 這個進程會重新啓動,並且重新讀取它的配置文件。Apache 網絡服務器守護進程就是一個例子。

2

INT

中斷。實現和 Ctrl-c 一樣的功能,由終端發送。通常,它會終止一個程序。

9

KILL

殺死。這個信號很特別。儘管程序可能會選擇不同的方式來處理髮送給它的 信號,其中也包含忽略信號,但是 KILL 信號從不被髮送到目標程序。而是內核立即終止 這個進程。當一個進程以這種方式終止的時候,它沒有機會去做些“清理”工作,或者是保存工作。 因爲這個原因,把 KILL 信號看作最後一招,當其它終止信號失敗後,再使用它。

15

TERM

終止。這是 kill 命令發送的默認信號。如果程序仍然“活着”,可以接受信號,那麼 這個它會終止。

18

CONT

繼續。在一個停止信號後,這個信號會恢復進程的運行。

19

STOP

停止。這個信號導致進程停止運行,而不是終止。像 KILL 信號,它不被 發送到目標進程,因此它不能被忽略。

其他常用信號

編號

名字

含義

3

QUIT

退出

11

SEGV

段錯誤。如果一個程序非法使用內存,就會發送這個信號。也就是說, 程序試圖寫入內存,而這個內存空間是不允許此程序寫入的。

20

TSTP

終端停止。當按下 Ctrl-z 組合鍵後,終端發送這個信號。不像 STOP 信號, TSTP 信號由目標進程接收,且可能被忽略。

28

WINCH

改變窗口大小。當改變窗口大小時,系統會發送這個信號。 一些程序,像 top 和 less 程序會響應這個信號,按照新窗口的尺寸,刷新顯示的內容。

 

KILALL

基本格式

killall [-u user] [-signal] name...

 

一看就懂的實例

[me@linuxbox ~]$ xlogo &
[1] 18801
[me@linuxbox ~]$ xlogo &
[2] 18802
[me@linuxbox ~]$ killall xlogo
[1]- Terminated                xlogo
[2]+ Terminated                xlogo

 

其他進程相關指令

命令名

命令描述

pstree

輸出一個樹型結構的進程列表,這個列表展示了進程間父/子關係。

vmstat

輸出一個系統資源使用快照,包括內存,交換分區和磁盤 I/O。 爲了看到連續的顯示結果,則在命令名後加上更新操作延時的時間(以秒爲單位)。例如,“vmstat 5”。 ,按下 Ctrl-c 組合鍵, 終止輸出。

xload

一個圖形界面程序,可以畫出系統負載隨時間變化的圖形。

tload

與 xload 程序相似,但是在終端中畫出圖形。使用 Ctrl-c,來終止輸出。

 

第十二章 shell環境

Printenv

打印部分或所有的環境變量

Set

設置 shell 選項

Export

導出環境變量,讓隨後執行的程序知道。

Alias

創建命令別名

 

shell 在環境中存儲了兩種基本類型的數據,環境變量和 shell 變量。

shell 變量是 bash 存放的少量數據,剩下的都是 環境變量。

除此之外,還存儲了一些shell函數。

 

printenv打印所有環境變量

會返回很長的結果。

 

[me@linuxbox ~]$ printenv USER
Me

 

使用alias來查看別名。

[me@linuxbox ~]$ alias
alias l.='ls -d .* --color=tty'
alias ll='ls -l --color=tty'
alias ls='ls --color=tty'
alias vi='vim'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

 

這是爲什麼ls會帶顏色。

 

環境變量列表

DISPLAY

如果你正在運行圖形界面環境,那麼這個變量就是你顯示器的名字。通常,它是 ":0", 意思是由 X 產生的第一個顯示器。

EDITOR

文本編輯器的名字。

SHELL

shell 程序的名字。

HOME

用戶家目錄。

LANG

定義了字符集以及語言編碼方式。

OLD_PWD

先前的工作目錄。

PAGER

頁輸出程序的名字。這經常設置爲/usr/bin/less。

PATH

由冒號分開的目錄列表,當你輸入可執行程序名後,會搜索這個目錄列表。

PS1

Prompt String 1. 這個定義了你的 shell 提示符的內容。隨後我們可以看到,這個變量 內容可以全面地定製。

PWD

當前工作目錄。

TERM

終端類型名。類 Unix 的系統支持許多終端協議;這個變量設置你的終端仿真器所用的協議。

TZ

指定你所在的時區。大多數類 Unix 的系統按照協調時間時 (UTC) 來維護計算機內部的時鐘 ,然後應用一個由這個變量指定的偏差來顯示本地時間。

USER

你的用戶名

 

如何建立shell環境

當我們登錄系統後, bash 程序啓動,並且會讀取一系列稱爲啓動文件的配置腳本, 這些文件定義了默認的可供所有用戶共享的 shell 環境。

然後是讀取更多位於我們自己家目錄中 的啓動文件,這些啓動文件定義了用戶個人的 shell 環境。

有兩種 shell 會話類型:一個是登錄 shell 會話,另一個是非登錄 shell 會話。

 

登錄shell會話會提示輸入用戶名和密碼,非shell會話通常是用GUI啓動。

 

登錄shell會話啓動的文件

/etc/profile

應用於所有用戶的全局配置腳本。

~/.bash_profile

用戶個人的啓動文件。可以用來擴展或重寫全局配置腳本中的設置。

~/.bash_login

如果文件 ~/.bash_profile 沒有找到,bash 會嘗試讀取這個腳本。

~/.profile

如果文件 ~/.bash_profile 或文件 ~/.bash_login 都沒有找到,bash 會試圖讀取這個文件。 這是基於 Debian 發行版的默認設置,比方說 Ubuntu。

 

非shell會話

/etc/bash.bashrc

應用於所有用戶的全局配置文件。

~/.bashrc

用戶個人的啓動文件。可以用來擴展或重寫全局配置腳本中的設置。

 

看一下.bash_profile文件的內容:

# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATH

#export PATH讓這個shell的子進程也可以使用PATH變量的內容

 

文本編輯器

 

Nano

保存:ctrl-o

例如我們可以修改.bashrc,在最後加上這麼幾行:

umask 0002
export HISTCONTROL=ignoredups
export HISTSIZE=1000
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'

 

它們的意思是:

文本行

含義

umask 0002

設置掩碼來解決共享目錄的問題。

export HISTCONTROL=ignoredups

使得 shell 的歷史記錄功能忽略一個命令,如果相同的命令已被記錄。

export HISTSIZE=1000

增加命令歷史的大小,從默認的 500 行擴大到 1000 行。

alias l.='ls -d .* --color=auto'

創建一個新命令,叫做'l.',這個命令會顯示所有以點開頭的目錄項。

alias ll='ls -l --color=auto'

創建一個叫做'll'的命令,這個命令會顯示長格式目錄列表。

 

.bashrc文件只會在剛啓動終端會話時讀取。爲了使我們剛纔的操作生效,需要使用source強迫bash重新讀取剛纔的文件

 

source .bashrc

 

 

第十三章  vi簡介

vi讀作vee-eye,來源於visual。

 

一般來說,vi就是vim。(improved),但是有時一些老系統會運行在vim的兼容模式下,就很煩。這時你需要

echo “set nocp” >> ~/.vimrc

 

創建新文件: 直接

[me@linuxbox ~]$ vi foo.txt

 

每行開頭的波浪線代表那一行沒有文本。

 

默認我們處於命令模式。按下i或者insert進入插入模式。

插入模式下可以使用:w或者:q來保存或退出。

 

又是令人噁心的大表了:

按鍵

移動光標

l or 右箭頭

向右移動一個字符

h or 左箭頭

向左移動一個字符

j or 下箭頭

向下移動一行

k or 上箭頭

向上移動一行

0 (零按鍵)

移動到當前行的行首。

^

移動到當前行的第一個非空字符。

$

移動到當前行的末尾。

w

移動到下一個單詞或標點符號的開頭。

W

移動到下一個單詞的開頭,忽略標點符號。

b

移動到上一個單詞或標點符號的開頭。

B

移動到上一個單詞的開頭,忽略標點符號。

Ctrl-f or Page Down

向下翻一頁

Ctrl-b or Page Up

向上翻一頁

numberG

移動到第 number 行。例如,1G 移動到文件的第一行。

G

移動到文件末尾。

 

類似G,很多命令都可以在前面加數字。例如5j表示向下移動5行。

在命令模式下,按下大寫A在行尾(本行)添加文本。(等於i+$)

 

撤銷:直接按u

大寫A:在當前行尾insert

 

刪除命令:

命令

刪除的文本

x

當前字符

3x

當前字符及其後的兩個字符。

dd

當前行。

5dd

當前行及隨後的四行文本。

 

複製:

命令

複製的內容

yy

當前行。

5yy

當前行及隨後的四行文本。

y$

從當前光標位置到當前行的末尾。

yG

從當前行到文件末尾。

 

$和G的使用,對刪除命令同樣有效。

粘貼時,p粘貼到下一行,大寫P粘貼到上一行。

 

由於vi不能直接刪除行尾的換行符來鏈接兩行,所以vi提供了大寫 J 來連接本行和下一行。

 

替換文本

:%s/Line/line/g

看起來很難,其實很簡單,實際上,只要知道%的意思是匹配全部文本,s是指定替換操作,g是指定每行的每個匹配項,就都知道了。

 

條目

含義

:

冒號字符運行一個 ex 命令。

%

指定要操作的行數。% 是一個快捷方式,表示從第一行到最後一行。另外,操作範圍也 可以用 1,5 來代替(因爲我們的文件只有5行文本),或者用 1,$ 來代替,意思是 “ 從第一行到文件的最後一行。” 如果省略了文本行的範圍,那麼操作只對當前行生效。

s

指定操作。在這種情況下是,替換(查找與替代)。

/Line/line

查找類型與替代文本。

g

這是“全局”的意思,意味着對文本行中所有匹配的字符串執行查找和替換操作。如果省略 g,則 只替換每個文本行中第一個匹配的字符串。

 

在g後加c,將在每次替換是詢問是否真的要替換。

 

在文件之間切換:

:n

下一個文件

:N

上一個文件

 

或者,使用:buffers 展示所有文件

找到對應文件的編號。使用:buffers 3 跳到第三號文件。

我們知道可以用e來附加打開文件。此時無法使用:n來切換,只能使用buffers。

 

將整個文件插入(拷貝)到另一個文件中:

打開一個文件,輸入:r +文件名。

 

第十四章 自定製 shell 提示符

 

[me@linuxbox ~]$

這個東西就是shell提示符。它是由環境變量$PS1決定的。(是“prompt string one” 的簡寫)

echo可以看到其內容:

[me@linuxbox ~]$ echo $PS1
[\u@\h \W]\$

 

序列

顯示值

\a

以 ASCII 格式編碼的鈴聲 . 當遇到這個轉義序列時,計算機會發出嗡嗡的響聲。

\d

以日,月,天格式來表示當前日期。例如,“Mon May 26.”

\h

本地機的主機名,但不帶末尾的域名。

\H

完整的主機名。

\j

運行在當前 shell 會話中的工作數。

\l

當前終端設備名。

\n

一個換行符。

\r

一個回車符。

\s

shell 程序名。

\t

以24小時制,hours:minutes:seconds 的格式表示當前時間.

\T

以12小時製表示當前時間。

\@

以12小時制,AM/PM 格式來表示當前時間。

\A

以24小時制,hours:minutes 格式表示當前時間。

\u

當前用戶名。

\v

shell 程序的版本號。

\V

Version and release numbers of the shell.

\w

當前工作目錄名。

\W

當前工作目錄名的最後部分。

\!

當前命令的歷史號。

\#

當前 shell 會話中的命令數。

\$

這會顯示一個"$"字符,除非你擁有超級用戶權限。在那種情況下, 它會顯示一個"#"字符。

\[

標誌着一系列一個或多個非打印字符的開始。這被用來嵌入非打印 的控制字符,這些字符以某種方式來操作終端仿真器,比方說移動光標或者是更改文本顏色。

\]

標誌着非打印字符序列結束。

 

 

知道了這個表,就可以隨便幹你想幹的事情了:

~

$ PS1="\A \h \$ "
17:33 linuxbox $

 

也可以改變其顏色:

Sequence

Text Color

Sequence

Text Color

\033[0;30m

Black

\033[1;30m

Dark Gray

\033[0;31m

Red

\033[1;31m

Light Red

\033[0;32m

Green

\033[1;32m

Light Green

\033[0;33m

Brown

\033[1;33m

Yellow

\033[0;34m

Blue

\033[1;34m

Light Blue

\033[0;35m

Purple

\033[1;35m

Light Purple

\033[0;36m

Cyan

\033[1;36m

Light Cyan

\033[0;37m

Light Gray

\033[1;37m

White

 

怎麼使用這些鬼畫符呢?只需要將它們用 [] 標記出來就好了。注意方括號要加轉義,最後結果是包含2個左方括號和一個右方括號。

<me@linuxbox ~>$ PS1='\[\033[0;31m\]<\u@\h \W>\$'
<me@linuxbox ~>$

 

這樣,命令也會是紅色的。使用以下命令將我們輸入的命令改回黑色:

<me@linuxbox ~>$ PS1='\[\033[0;31m\]<\u@\h \W>\$\[\033[0m\]'

 

設置背景顏色:

\033[0;40m

藍色

\033[1;44m

黑色

\033[0;41m

紅色

\033[1;45m

紫色

\033[0;42m

綠色

\033[1;46m

青色

\033[0;43m

棕色

\033[1;47m

淺灰色

 

剩下的移動光標實在是沒用。不看了。

 

第十五章 軟件包管理

主要的包管理系統家族

包管理系統

發行版 (部分列表)

Debian Style (.deb)

Debian, Ubuntu, Xandros, Linspire

Red Hat Style (.rpm)

Fedora, CentOS, Red Hat Enterprise Linux, OpenSUSE, Mandriva, PCLinuxOS

 

linux的大多數軟件由發行商以包文件的形式提供,剩下的則以源碼形式存在,可以手動安裝。

在包管理系統中軟件的基本單元是包文件。

包文件是一個構成軟件包的文件壓縮集合。

一個軟件包可能由大量程序以及支持這些程序的數據文件組成。

 

依賴:

程序很少獨立工作;他們需要依靠其他程序的組件來完成他們的工作。程序所共有的活動,如輸入/輸出, 就是由一個被多個程序調用的子例程處理的。

這些子例程存儲在動態鏈接庫中。動態鏈接庫爲多個程 序提供基本服務。

如果一個軟件包需要一些共享的資源,如一個動態鏈接庫,它就被稱作有一個依賴

現代的軟件包管理系統都提供了一些依賴項解析方法,以確保安裝軟件包時,其所有的依賴也被安裝。

 

#【動態鏈接】提供了一種方法,使進程可以調用不屬於其可執行代碼的函數。

windows下是.dll文件,linux下是.so文件。

 

分爲底層和上層工具:我理解就是底層用來執行下載的包,上層就是直接安裝。

發行版

底層工具

上層工具

Debian-Style

dpkg

apt-get, aptitude

Fedora, Red Hat Enterprise Linux, CentOS

rpm

yum

 

查找:

風格

命令

Debian

apt-get update; apt-cache search search_string

Red Hat

yum search search_string

 

安裝:

風格

命令

Debian

apt-get update; apt-get install package_name

Red Hat

yum install package_name

 

直接通過底層工具安裝的話,就是沒有通過依賴解析直接安裝。

Style

Command(s)

Debian

dpkg --install package_file

Red Hat

rpm -i package_file

若發現依賴不存在,會報錯退出。

 

刪除

風格

命令

Debian

apt-get remove package_name

Red Hat

yum erase package_name

 

更新:

風格

命令

Debian

apt-get update; apt-get upgrade

Red Hat

yum update

 

底層軟件包升級

風格

命令

Debian

dpkg --install package_file

Red Hat

rpm -U package_file

 

列出所有軟件包

風格

命令

Debian

dpkg --list

Red Hat

rpm -qa

 

查看是否已經安裝了:

風格

命令

Debian

dpkg --status package_name

Red Hat

rpm -q package_name

 

查看哪個軟件包應該爲某個文件負責:

風格

命令

Debian

dpkg --search file_name

Red Hat

rpm -qf file_name

 

第十六章 存儲媒介

使用vim /etc/fstab 就可以看到啓動時會掛在的設備(硬盤分區)。

其內容類似:

LABEL=/12               /               ext3        defaults        1   1
LABEL=/home             /home           ext3        defaults        1   2
LABEL=/boot             /boot           ext3        defaults        1   2

 

字段

內容

說明

1

設備名

傳統上,這個字段包含與物理設備相關聯的設備文件的實際名字,比如說/dev/hda1(第一個 IDE 通道上第一個主設備分區)。然而今天的計算機,有很多熱插拔設備(像 USB 驅動設備),許多 現代的 Linux 發行版用一個文本標籤和設備相關聯。當這個設備連接到系統中時, 這個標籤(當儲存媒介格式化時,這個標籤會被添加到存儲媒介中)會被操作系統讀取。 那樣的話,不管賦給實際物理設備哪個設備文件,這個設備仍然能被系統正確地識別。

2

掛載點

設備所連接到的文件系統樹的目錄。

3

文件系統類型

Linux 允許掛載許多文件系統類型。大多數本地的 Linux 文件系統是 ext3, 但是也支持很多其它的,比方說 FAT16 (msdos), FAT32 (vfat),NTFS (ntfs),CD-ROM (iso9660),等等。

4

選項

文件系統可以通過各種各樣的選項來掛載。有可能,例如,掛載只讀的文件系統, 或者掛載阻止執行任何程序的文件系統(一個有用的安全特性,避免刪除媒介。)

5

頻率

一位數字,指定是否和在什麼時間用 dump 命令來備份一個文件系統。

6

次序

一位數字,指定 fsck 命令按照什麼次序來檢查文件系統。

 

Mount

mount命令被用來掛載文件系統。執行這個不帶參數的命令,將會顯示 一系列當前掛載的文件系統

[me@linuxbox ~]$ mount
/dev/sda2 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/sda5 on /home type ext3 (rw)
/dev/sda1 on /boot type ext3 (rw)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
fusectl on /sys/fs/fuse/connections type fusectl (rw)
/dev/sdd1 on /media/disk type vfat (rw,nosuid,nodev,noatime,
uhelper=hal,uid=500,utf8,shortname=lower)
twin4:/musicbox on /misc/musicbox type nfs4 (rw,addr=192.168.1.4)

 

使用umount來卸載設備。

卸載一個設備需要把所有剩餘的數據寫入這個設備,所以設備可以被安全地移除。

如沒有卸載設備,就移除了它,就有可能沒有把註定要發送到設備中的數據輸送完畢。

在某些情況下, 這些數據可能包含重要的目錄更新信息,這將導致文件系統損壞,這是發生在計算機中的最壞的事情之一。

 

使用

ls /dev

命令,來查看本機上的設備。Dev for devices.

 

[me@linuxbox ~]$ sudo tail -f /var/log/messages

查看系統日誌。tail將文件輸出到標準輸出。-f可以循環讀取(實時查看變化)。

 

Fdisk

fdisk用來操作分區。

[me@linuxbox ~]$ sudo umount /dev/sdb1
[me@linuxbox ~]$ sudo fdisk /dev/sdb

首先卸載一個設備,並調用fdisk程序。

 

程序啓動後會出現提示。

每個字母代表了不同的操作。

P

打印分區表

l

查看可用的分區類型列表

t

更改一個分區的id號碼

w

將此前修改應用。

 

/dev/sdb 指整個設備,/dev/sdb1指這個設備的第一分區

 

mkfs

創建新的文件系統。

sudo mkfs -t ext3 /dev/sdb1

這表示在設備/dev/sdb1中,創建一個新的文件系統。系統類型由參數-t ext3指定。

 

 fsck

檢查磁盤。使用這個命令通常意味着磁盤壞了(物理意義上)。

 

CD-ROM部分略。用到再看。

 

使用md5sum可以計算hash。

 

第十七章 網絡系統

Ping

不說了

 

Traceroute

1 ipcop.localdomain (192.168.1.1) 1.066 ms 1.366 ms 1.720 ms

輸出的每一行會如上所示。包含跳數,主機名,IP地址,和性能。

被隱藏起來的路由去信息會用星號*顯示。

 

Netstat

很重要,用來查看網絡設置。

使用-ie選項:

[me@linuxbox ~]$ netstat -ie
eth0    Link encap:Ethernet HWaddr 00:1d:09:9b:99:67
        inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0
        inet6 addr: fe80::21d:9ff:fe9b:9967/64 Scope:Link
        UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
        RX packets:238488 errors:0 dropped:0 overruns:0 frame:0
        TX packets:403217 errors:0 dropped:0 overruns:0 carrier:0
        collisions:0 txqueuelen:100 RX bytes:153098921 (146.0 MB) TX
        bytes:261035246 (248.9 MB) Memory:fdfc0000-fdfe0000

lo      Link encap:Local Loopback
        inet addr:127.0.0.1 Mask:255.0.0.0
...

 

至少有兩個網絡接口:eth0和lo,分別代表以太網接口和local。

首先查看第四行顯示的UP,證明有在正常工作。

以及第二行的IP地址,證明DHCP正常工作。

 

使用-r選項查看路由表

[me@linuxbox ~]$ netstat -r
Kernel IP routing table
Destination     Gateway     Genmask         Flags    MSS  Window  irtt Iface

192.168.1.0     *           255.255.255.0   U        0    0          0 eth0
default         192.168.1.1 0.0.0.0         UG       0    0          0 eth0

第一行顯示了目的地 192.168.1.0。IP 地址以零結尾是指網絡,而不是獨立主機, 所以這個目的地意味着局域網中的任何一臺主機。

下一個字段,Gateway, 是網關(路由器)的名字或 IP 地址,用它來連接當前的主機和目的地的網絡。 若這個字段顯示一個星號,則表明不需要網關。

 

Wget

不僅實現了ftp的基本功能,還能下載網頁,下載多個文件。

 

Ssh

SSH 由兩部分組成。SSH 服務端運行在遠端主機上,在端口 22 上監聽收到的外部連接,而 SSH 客戶端用在本地系統中,用來和遠端服務器通信。

如果當前客戶端的用戶名和遠端服務器的用戶名不同,可以使用以下形式指定用戶:

ssh bob@remote-sys

 

Scp

從服務器上拷貝一個交document.txt的文件到我家

scp remote-sys:document.txt .

 

第十八章 查找文件

Locate

locate實屬簡單。

[me@linuxbox ~]$ locate zip | grep bin

 

find

而 find 程序能基於各種各樣的屬性 搜索一個給定目錄。

例如find ~會列出~下的所有文件。

Find -type b

可以只列出指定類型的文件。參數表如下。

文件類型

描述

b

塊特殊設備文件

c

字符特殊設備文件

d

目錄

f

普通文件

l

符號鏈接

 

find ~ -type f -name "*.JPG" -size +1M | wc -l

還可使用-name和-size來指定名字和大小。

+1M表示大於1M,-1M表示小於,沒有符號表示正好。

-size參數列表

字符

單位

b

512 個字節塊。如果沒有指定單位,則這是默認值。

c

字節

w

兩個字節的字

k

千字節(1024個字節單位)

M

兆字節(1048576個字節單位)

G

千兆字節(1073741824個字節單位)

 

find的其它參數

測試條件

描述

-cmin n

匹配內容或屬性最後修改時間正好在 n 分鐘之前的文件或目錄。 指定少於 n 分鐘之前,使用 -n,指定多於 n 分鐘之前,使用 +n。

-cnewer file

匹配內容或屬性最後修改時間晚於 file 的文件或目錄。

-ctime n

匹配內容和屬性最後修改時間在 n*24小時之前的文件和目錄。

-empty

匹配空文件和目錄。

-group name

匹配屬於一個組的文件或目錄。組可以用組名或組 ID 來表示。

-iname pattern

就像-name 測試條件,但是不區分大小寫。

-inum n

匹配 inode 號是 n的文件。這對於找到某個特殊 inode 的所有硬鏈接很有幫助。

-mmin n

匹配內容被修改於 n 分鐘之前的文件或目錄。

-mtime n

匹配的文件或目錄的內容被修改於 n*24小時之前。

-name pattern

用指定的通配符模式匹配的文件和目錄。

-newer file

匹配內容晚於指定的文件的文件和目錄。這在編寫執行備份的 shell 腳本的時候很有幫。 每次你製作一個備份,更新文件(比如說日誌),然後使用 find 命令來判斷哪些文件自從上一次更新之後被更改了。

-nouser

匹配不屬於一個有效用戶的文件和目錄。這可以用來查找 屬於被刪除的帳戶的文件或監測攻擊行爲。

-nogroup

匹配不屬於一個有效的組的文件和目錄。

-perm mode

匹配權限已經設置爲指定的 mode的文件或目錄。mode 可以用 八進制或符號表示法。

-samefile name

類似於-inum 測試條件。匹配和文件 name 享有同樣 inode 號的文件。

-size n

匹配大小爲 n 的文件

-type c

匹配文件類型是 c 的文件。

-user name

匹配屬於某個用戶的文件或目錄。這個用戶可以通過用戶名或用戶 ID 來表示。

 

~可以使用括號(要加上轉義符),-not -or來控制邏輯。邏輯存在短路。

[me@linuxbox ~]$ find ~ \( -type f -not -perm 0600 \) -or \( -type d -not -perm 0700 \)

 

使用以下參數來對find到的文件進行操作。

操作

描述

-delete

刪除當前匹配的文件。

-ls

對匹配的文件執行等同的 ls -dils 命令。並將結果發送到標準輸出。

-print

把匹配文件的全路徑名輸送到標準輸出。如果沒有指定其它操作,這是 默認操作。

-quit

一旦找到一個匹配,退出。

除了表中的行爲,也可以使用下列命令自定義行爲:

-exec rm '{}' ';'

注意要使用單引號轉義。

 

find的結果是無序的,取決於實際存儲。

 

提高find的效率:

低效率:

ls -l file1
ls -l file2

高效率:

ls -l file1 file2

 

xargs

find ~ -type f -name 'foo*' -print | xargs ls -l

xargs 會爲 ls 命令構建 參數列表,然後執行 ls 命令。

 

批量創建文件/文件夾:

[me@linuxbox ~]$ mkdir -p playground/dir-{00{1..9},0{10..99},100}
[me@linuxbox ~]$ touch playground/dir-{00{1..9},0{10..99},100}/file-{A..Z}

 touch 命令通常被用來設置或更新文件的訪問,更改,和修改時間。

如果一個文件名參數是一個 不存在的文件,則會創建一個空文件。

 

Stat

超級加強版的ls。

 

第十九章 歸檔和備份

Gzip

使用gzip來壓縮文件,之後會用壓縮後的文件取代之前的文件。

使用gunzip來解壓。壓縮後會加上.gz的後綴。

 

[me@linuxbox ~]$ ls -l foo.*
-rw-r--r-- 1 me     me 15738 2008-10-14 07:15 foo.txt
[me@linuxbox ~]$ gzip foo.txt
[me@linuxbox ~]$ ls -l foo.*
-rw-r--r-- 1 me     me 3230 2008-10-14 07:15 foo.txt.gz

 

Bizip2

捨棄壓縮速度,獲得更好的壓縮率。使用方法和gzip一樣

 

Tar

Tar c/x/r/t +z/v/f

模式

說明

c

爲文件和/或目錄列表創建歸檔文件。

x

抽取歸檔文件。

r

追加具體的路徑到歸檔文件的末尾。

t

列出歸檔文件的內容。

 

注意不能使用絕對路徑,只能使用相對路徑。

 

Zip

windows上的那個zip,不多說

 

rsync

對應rsync協議,在本機和服務器上同步數據,會自動傳輸最小量的數據。

可以在本機到服務器,也可以服務器到本機,可以本機到本機,但總之不能服務器到服務器。

 

例如:

Rsync -av foo1 foo2

會將foo1拷貝到同目錄下,命名爲foo2。 -a代表遞歸和保護文件,-v代表輸出提示語句。

 

增加--delete,來允許其刪除在源目錄中不存在的文件。適合備份。

 

第二十章 正則表達式

Grep

查找文本中的行。

選項

描述

-i

忽略大小寫。不會區分大小寫字符。也可用--ignore-case 來指定。

-v

不匹配。通常,grep 程序會打印包含匹配項的文本行。這個選項導致 grep 程序只會打印不包含匹配項的文本行。也可用--invert-match 來指定。

-c

打印匹配的數量(或者是不匹配的數目,若指定了-v 選項),而不是文本行本身。 也可用--count 選項來指定。

-l

打印包含匹配項的文件名,而不是文本行本身,也可用--files-with-matches 選項來指定。

-L

相似於-l 選項,但是隻是打印不包含匹配項的文件名。也可用--files-without-match 來指定。

-n

在每個匹配行之前打印出其位於文件中的相應行號。也可用--line-number 選項來指定。

-h

應用於多文件搜索,不輸出文件名。也可用--no-filename 選項來指定。

 

簡單的查找:

[me@linuxbox ~]$ grep bzip dirlist*.txt
dirlist-bin.txt:bzip2
dirlist-bin.txt:bzip2recover

 

同時,使用-l輸出查找到的文件,而非行:
 

[me@linuxbox ~]$ grep -l bzip dirlist*.txt
dirlist-bin.txt

 

原意字符

以bzip爲例,這代表文中確實出現了這四個字符,並且是連續的。

除了以下的元字符,都是原意字符:

^ $ . [ ] { } - ? * + ( ) | \

 

.

一個圓點被用來匹配有且僅有的一個字符。

 

^和$

^zip表示zip在行首,可以理解爲每行都是^abc$表示的,這樣就可以將這兩個錨定字符理解爲原意字符。

 

[]

方括號中的字符串中的任意一個會被匹配。也就是說從方括號中選一個。

grep -h '[bg]zip' dirlist*.txt

bzip2
bzip2recover
gzip

 

方括號中的元字符除了^和-,都會被解釋爲原意。

 

^作爲否定

[me@linuxbox ~]$ grep -h '[^bg]zip' dirlist*.txt
bunzip2
gunzip
funzip
gpg-zip

這裏在方括號中的第一處填入^,使得匹配了除了b和g之外的字符。

如果不是第一處就是^,那麼會被當作原意字符處理。

 

-

連字符用來方便地在方括號中節約時間。

[me@linuxbox ~]$ grep -h '^[A-Za-z0-9]' dirlist*.txt

這表示所有數字或者字母開頭的文件名。

方括號中是完備的,^和-如果位置正確,不會查不到。如果我們想把-作爲原意使用,將其放在第一個就好了。

[me@linuxbox ~]$ grep -h '[-AZ]' dirlist*.txt

 

posix字符集

有時使用A-Z不能得到預期的結果,因爲並不全是按照ASCII碼編寫的。

按照以下的字符集可以得到預期的結果,但是這不是正則表達式,而是shell展開。

字符集

說明

[:alnum:]

字母數字字符。在 ASCII 中,等價於:[A-Za-z0-9]

[:word:]

與[:alnum:]相同, 但增加了下劃線字符。

[:alpha:]

字母字符。在 ASCII 中,等價於:[A-Za-z]

[:blank:]

包含空格和 tab 字符。

[:cntrl:]

ASCII 的控制碼。包含了0到31,和127的 ASCII 字符。

[:digit:]

數字0到9

[:graph:]

可視字符。在 ASCII 中,它包含33到126的字符。

[:lower:]

小寫字母。

[:punct:]

標點符號字符。在 ASCII 中,等價於:[-!"#$%&'()*+,./:;<=>?@[\\\]_`{|}~]

[:print:]

可打印的字符。在[:graph:]中的所有字符,再加上空格字符。

[:space:]

空白字符,包括空格、tab、回車、換行、vertical tab 和 form feed.在 ASCII 中, 等價於:[ \t\r\n\v\f]

[:upper:]

大寫字母。

[:xdigit:]

用來表示十六進制數字的字符。在 ASCII 中,等價於:[0-9A-Fa-f]

 

bre和ere

BRE是基本的正則表達式,ERE是擴展的。

之前提到的

^ $ . [ ] *

屬於基本正則表達式元字符,而這些是擴展的:

( ) { } ? + |

一個更怪的地方就是,

大小括號,在ERE中,只有被\轉義之後纔是元字符。

真是不能更怪了。

 

使用ere時,需要給grep加上-E,或者直接使用egrep。

 

|

使用 | 來表示或。邏輯不清時,使用小括號分隔。

grep -Eh '^(bz|gz|zip)' dirlist*.txt

 

問號? 使前面的元素可有可無。

[me@linuxbox ~]$ echo "(555) 123-4567" | grep -E '^\(?[0-9][0-9][0-9]\)? [0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]$'
(555) 123-4567

 

*

和.的使用方法類似,但是要寬鬆的多:不必匹配恰好一個,0個或者多個也可以。

 

+

用來限定,前面的匹配項必須出現。

[me@linuxbox ~]$ echo "This that" | grep -E '^([[:alpha:]]+ ?)+$'
This that
[me@linuxbox ~]$ echo "a b c" | grep -E '^([[:alpha:]]+ ?)+$'
a b c
[me@linuxbox ~]$ echo "a b 9" | grep -E '^([[:alpha:]]+ ?)+$'
[me@linuxbox ~]$ echo "abc  d" | grep -E '^([[:alpha:]]+ ?)+$'

 

 

{}

限定前面的匹配項匹配到的字符個數

[me@linuxbox ~]$ echo "(555) 123-4567" | grep -E '^\(?[0-9]{3}\)? [0-9]{3}-[0-9]{4}$'
(555) 123-4567

 

{n}

匹配前面的元素,如果它確切地出現了 n 次。

{n,m}

匹配前面的元素,如果它至少出現了 n 次,但是不多於 m 次。

{n,}

匹配前面的元素,如果它出現了 n 次或多於 n 次。

{,m}

匹配前面的元素,如果它出現的次數不多於 m 次。

 

應用

查找不正確的電話號碼:

[me@linuxbox ~]$ cat phonelist.txt
(232) 298-2265
(624) 381-1078
(540) 126-1980
(874) 163-2885
(286) 254-2860
(292) 108-518
(129) 44-1379
(458) 273-1642
(686) 299-8268
(198) 307-2440

 

[me@linuxbox ~]$ grep -Ev '^\([0-9]{3}\) [0-9]{3}-[0-9]{4}$'    phonelist.txt
(292) 108-518
(129) 44-1379

-v用來取反,[0-9]表示數字,{3}表示匹配出三個字符。最好正則都用單引號括起來。

 

在vim中使用/+正則可以起到同樣的效果。

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