新聞中心
目錄

- 9.1. 控制臺技巧
-
- 9.1.1. 清晰的記錄 shell 活動
- 9.1.2. screen 程序
- 9.1.3. 在目錄間游走
- 9.1.4. Readline 封裝
- 9.1.5. 掃描源代碼樹
- 9.2. 定制 vim
-
- 9.2.1. 用內(nèi)部特性定制 vim
- 9.2.2. 用外部軟件包定制 vim
- 9.3. 數(shù)據(jù)記錄和展示
-
- 9.3.1. 日志后臺守護(hù)進(jìn)程(daemon)
- 9.3.2. 日志分析
- 9.3.3. 定制文本數(shù)據(jù)的顯示
- 9.3.4. 定制時(shí)間和日期的顯示
- 9.3.5. shell 中 echo 的顏色
- 9.3.6. 有顏色輸出的命令
- 9.3.7. 記錄編輯器復(fù)雜的重復(fù)操作動作
- 9.3.8. 記錄 X 應(yīng)用程序的圖像
- 9.3.9. 記錄配置文件的變更
- 9.4. 監(jiān)控、控制和啟動程序活動
-
- 9.4.1. 進(jìn)程耗時(shí)
- 9.4.2. 調(diào)度優(yōu)先級
- 9.4.3. ps 命令
- 9.4.4. top 命令
- 9.4.5. 列出被一個(gè)進(jìn)程打開的文件
- 9.4.6. 跟蹤程序活動
- 9.4.7. 識別使用文件和套接字的進(jìn)程
- 9.4.8. 使用固定間隔重復(fù)一個(gè)命令
- 9.4.9. 使用文件循環(huán)來重復(fù)一個(gè)命令
- 9.4.10. 從 GUI 啟動一個(gè)程序
- 9.4.11. 自定義被啟動的程序
- 9.4.12. 殺死一個(gè)進(jìn)程
- 9.4.13. 單次任務(wù)時(shí)間安排
- 9.4.14. 定時(shí)任務(wù)安排
- 9.4.15. Alt-SysRq 鍵
- 9.5. 系統(tǒng)維護(hù)技巧
-
- 9.5.1. 誰在系統(tǒng)里?
- 9.5.2. 警告所有人
- 9.5.3. 硬件識別
- 9.5.4. 硬件配置
- 9.5.5. 系統(tǒng)時(shí)間和硬件時(shí)間
- 9.5.6. 終端配置
- 9.5.7. 聲音基礎(chǔ)設(shè)施
- 9.5.8. 關(guān)閉屏幕保護(hù)
- 9.5.9. 關(guān)閉蜂鳴聲
- 9.5.10. 內(nèi)存使用
- 9.5.11. 系統(tǒng)安全性和完整性檢查
- 9.6. 數(shù)據(jù)存儲技巧
-
- 9.6.1. 硬盤空間使用情況
- 9.6.2. 硬盤分區(qū)配置
- 9.6.3. 使用 UUID 訪問分區(qū)
- 9.6.4. LVM2
- 9.6.5. 文件系統(tǒng)配置
- 9.6.6. 文件系統(tǒng)創(chuàng)建和完整性檢查
- 9.6.7. 通過掛載選項(xiàng)優(yōu)化文件系統(tǒng)
- 9.6.8. 通過超級塊(superblock)優(yōu)化文件系統(tǒng)
- 9.6.9. 硬盤優(yōu)化
- 9.6.10. 固態(tài)硬盤優(yōu)化
- 9.6.11. 使用 SMART 預(yù)測硬盤故障
- 9.6.12. 通過 $TMPDIR 指定臨時(shí)存儲目錄
- 9.6.13. 通過 LVM 擴(kuò)展可用存儲空間
- 9.6.14. 通過掛載另一個(gè)分區(qū)來擴(kuò)展可用存儲空間
- 9.6.15. 通過 “mount --bind” 掛載另一個(gè)目錄來擴(kuò)展可用存儲空間
- 9.6.16. 通過 overlay 掛載(overlay-mounting)另一個(gè)目錄來擴(kuò)展可用存儲空間
- 9.6.17. 使用符號鏈接擴(kuò)展可用存儲空間
- 9.7. 磁盤映像
-
- 9.7.1. 制作磁盤映像文件
- 9.7.2. 直接寫入硬盤
- 9.7.3. 掛載磁盤映像文件
- 9.7.4. 清理磁盤映像文件
- 9.7.5. 制作空的磁盤映像文件
- 9.7.6. 制作 ISO9660 鏡像文件
- 9.7.7. 直接寫入文件到 CD/DVD-R/RW
- 9.7.8. 掛載 ISO9660 鏡像文件
- 9.8. 二進(jìn)制數(shù)據(jù)
-
- 9.8.1. 查看和編輯二進(jìn)制數(shù)據(jù)
- 9.8.2. 不掛載磁盤操作文件
- 9.8.3. 數(shù)據(jù)冗余
- 9.8.4. 數(shù)據(jù)文件恢復(fù)和診斷分析
- 9.8.5. 把大文件分成多個(gè)小文件
- 9.8.6. 清空文件內(nèi)容
- 9.8.7. 樣子文件
- 9.8.8. 擦除整塊硬盤
- 9.8.9. 擦除硬盤上的未使用的區(qū)域
- 9.8.10. 恢復(fù)已經(jīng)刪除但仍然被打開的文件
- 9.8.11. 查找所有硬鏈接
- 9.8.12. 不可見磁盤空間消耗
- 9.9. 數(shù)據(jù)加密提示
-
- 9.9.1. 使用 dm-crypt/LUKS 加密移動磁盤
- 9.9.2. 使用dm-crypt/LUKS掛載加密的磁盤
- 9.10. 內(nèi)核
-
- 9.10.1. 內(nèi)核參數(shù)
- 9.10.2. 內(nèi)核頭文件
- 9.10.3. 編譯內(nèi)核和相關(guān)模塊
- 9.10.4. 編譯內(nèi)核源代碼:Debian 內(nèi)核團(tuán)隊(duì)推薦
- 9.10.5. 硬件驅(qū)動和固件
- 9.11. 虛擬化系統(tǒng)
-
- 9.11.1. 虛擬化和模擬器工具
- 9.11.2. 虛擬化工作流
- 9.11.3. 掛載虛擬磁盤映像文件
- 9.11.4. Chroot 系統(tǒng)
- 9.11.5. 多桌面系統(tǒng)
這里,描述配置和管理系統(tǒng)的基本技巧,大部分在控制臺操作。
9.1. 控制臺技巧
有一些工具程序來幫助你的控制臺活動。
表 9.1. 支持控制臺活動的程序列表
| 軟件包 | 流行度 | 大小 | 說明 |
|---|---|---|---|
mc |
V:57, I:230 | 1508 | 參見 第 1.3 節(jié) “Midnight Commander (MC)” |
bsdutils |
V:646, I:999 | 419 | script 命令來記錄終端會話的原始輸入輸出 |
screen |
V:102, I:268 | 1019 | VT100/ANSI 終端模擬器混合復(fù)用的終端 |
tmux |
V:38, I:141 | 1045 | 終端復(fù)用的備選方案(使用 “Control-B”代替) |
fzf |
V:3, I:9 | 2442 | 模糊的文本查找器 |
fzy |
V:0, I:0 | 54 | 模糊的文本查找器 |
rlwrap |
V:1, I:19 | 297 | 具備 readline 特征的命令行封裝 |
ledit |
V:0, I:14 | 315 | 具備 readline 特征的命令行封裝 |
rlfe |
V:0, I:0 | 49 | 具備 readline 特征的命令行封裝 |
ripgrep |
V:3, I:12 | 4298 | 在源代碼樹中快速遞歸搜索字符串,并自動過濾 |
9.1.1. 清晰的記錄 shell 活動
簡單地使用 script(1) (參見 第 1.4.9 節(jié) “記錄 shell 活動”)記錄 shell 活動會產(chǎn)生一個(gè)有控制字符的文件。這些控制字符可以按下面的方式,使用 col(1) 去掉。
$ script Script started, file is typescript
做些操作……按 Ctrl-D 退出 script.
$ col -bx < typescript > cleanedfile $ vim cleanedfile
有替代的方式來記錄 shell 活動:
-
使用
tee(在 initramfs 的啟動過程中可用):$ sh -i 2>&1 | tee typescript
-
使用
gnome-terminal增加行緩沖,用滾動條查看。 -
使用
screen和 "^A H" (參見 第 9.1.2 節(jié) “screen 程序”)來進(jìn)行控制臺記錄。 -
使用
vim輸入 ":terminal" 進(jìn)入終端模式。使用 "Ctrl-W N" 從終端模式退出到普通模式。使用 ":w typescript" 將緩存寫到一個(gè)文件。 -
使用
emacs和 "M-x shell", "M-x eshell", 或 "M-x term" 來進(jìn)入記錄控制臺。使用 "C-x C-w" 將緩存寫到文件。
9.1.2. screen 程序
screen(1) 不但允許一個(gè)終端窗口運(yùn)行多個(gè)進(jìn)程,還允許遠(yuǎn)程 shell 進(jìn)程支持中斷的連接.這里是一個(gè)典型的 screen(1) 使用場景.
-
登錄到一個(gè)遠(yuǎn)程機(jī)器。
-
在單個(gè)控制臺上啟動
screen。 -
使用
^A c("Control-A" 接著 "c")在screen中創(chuàng)建的窗口執(zhí)行多個(gè)程序. -
按
^A n("Control-A" 接著"n")來在多個(gè)screen窗口間轉(zhuǎn)換. -
突然,你需要離開你的終端,但你不想丟掉正在做的工作,而這些工作需要連接來保持。
-
你可以通過任何方式分離
screen會話。-
殘忍地拔掉你的網(wǎng)絡(luò)連接
-
輸入
^A d("Control-A" 接著 "d") 并手工從遠(yuǎn)程連接退出登錄 -
輸入
^A DD("Control-A" 接著 "DD") 分離screen并退出登錄
-
-
你重新登錄到同一個(gè)遠(yuǎn)處主機(jī)(即使從不同的終端)。
-
使用 "
screen -r" 啟動screen. -
screen魔術(shù)般的重新附上先前所有的screen窗口和所有在活動運(yùn)行的程序.
| 提示 | |
|---|---|
|
對于撥號或者按包計(jì)費(fèi)的網(wǎng)絡(luò)連接,你可以通過 |
在 screen 會話里,除了命令按鍵外的所有鍵盤輸入都會被發(fā)送到當(dāng)前窗口。 screen 所有命令按鍵是通過 ^A ("Control-A") 加單個(gè)鍵[加任何參數(shù)] 來輸入.這里有一些重要的命令按鍵需要記住。
表 9.2. screen 鍵綁定列表
| 鍵綁定功能 | 說明 |
|---|---|
^A ? |
顯示幫助屏幕(顯示鍵綁定) |
^A c |
創(chuàng)建一個(gè)新的窗口并切換到該窗口 |
^A n |
到下一個(gè)窗口 |
^A p |
到前一個(gè)窗口 |
^A 0 |
到 0 號窗口 |
^A 1 |
到 1 號窗口 |
^A w |
顯示窗口列表 |
^A a |
作為鍵盤輸入發(fā)送 Ctrl-A 到當(dāng)前窗口 |
^A h |
把當(dāng)前窗口的硬拷貝寫到一個(gè)文件 |
^A H |
開始/結(jié)束 當(dāng)前窗口到文件的記錄 |
^A ^X |
鎖定終端(密碼保護(hù)) |
^A d |
從終端分離 screen 會話 |
^A DD |
分離 screen 會話并退出登錄 |
細(xì)節(jié)參見 screen(1).
參見 tmux(1) ,了解替代命令的功能。
9.1.3. 在目錄間游走
在 第 1.4.2 節(jié) “定制 bash”, 2 個(gè)技巧允許快速在目錄間游走,在 $CDPATH 和 mc 描述。
如果你使用模糊文本過濾程序,你能夠不輸入精準(zhǔn)路徑。對于fzf 軟件包,在 ~/.bashrc 里面包括下列內(nèi)容。
FZF_KEYBINDINGS_PATH=/usr/share/doc/fzf/examples/key-bindings.bash if [ -f $FZF_KEYBINDINGS_PATH ]; then . $FZF_KEYBINDINGS_PATH fi FZF_COMPLETION_PATH=/usr/share/doc/fzf/examples/completion.bash if [ -f $FZF_COMPLETION_PATH ]; then . $FZF_COMPLETION_PATH fi
例如:
-
你能夠最小化的操作跳入非常深的子目錄。你首先輸入 "
cd **" 后按Tab。然后你將被提示候選路徑。輸入部分路徑字符串,比如s/d/b foo,將會縮窄候選路徑。通過有光標(biāo)和回車鍵的cd,你選擇將要使用的路徑。 -
你可以用最小化的操作,從命令歷史里面選擇一個(gè)命令。在命令行提示符下按
Ctrl-R。然后你將被提示候選的命令。輸入部分命令字符串,比如vim d,將會縮窄候選項(xiàng)。使用光標(biāo)和回車鍵選擇將要使用的命令。
9.1.4. Readline 封裝
一些命令,比如 /usr/bin/dash,它缺少命令行歷史編輯能力,但在 rlwrap 或它的等價(jià)物下運(yùn)行就能夠透明的增加這樣的功能。
$ rlwrap dash -i
這提供一個(gè)便利平臺來測試 dash 的細(xì)微之處,使用類似 bash 的友好環(huán)境。
9.1.5. 掃描源代碼樹
在 ripgrep 軟件包中的 rg(1) 命令,在掃描源代碼樹的典型場景中,提供了一個(gè)比 grep(1) 命令更快速的替代。它充分利用了現(xiàn)代多核 CPU,并自動使用適當(dāng)?shù)倪^濾器來忽略一些文件。
9.2. 定制 vim
在你通過 第 1.4.8 節(jié) “使用 vim” 學(xué)習(xí)基本的vim(1) 后,請閱讀 Bram Moolenaar 的"Seven habits of effective text editing (2000)" 來理解 vim 應(yīng)當(dāng)怎樣被使用。
| 小心 | |
|---|---|
|
沒有非常好的理由,請不要嘗試改變默認(rèn)的鍵綁定。 |
9.2.1. 用內(nèi)部特性定制 vim
vim 的行為能夠被顯著的改變,通過 Ex-模式 的命令,啟用它的內(nèi)部特性,比如 "set ..." 來設(shè)置 vim 選項(xiàng)。
這些 Ex-模式 的命令,能夠在用戶的 vimrc 文件里面包括,傳統(tǒng)的 "~/.vimrc" 或 git 友好的 "~/.vim/vimrc"。這里有一個(gè)非常簡單的例。[2]:
colorscheme murphy " from /usr/share/vim/vim??/colors/*.vim
filetype plugin indent on " filetype aware behavior
syntax enable " Syntax highlight
"set spelllang=en_us " Spell check language as en_us
"set spell " Enable spell check
set autoindent " Copy indent from current line
set smartindent " More than autoindent (Drop/Pop after {/})
set nosmarttab " -key always inserts blanks
set backspace=indent,eol,start " Back space through everything
set laststatus=2 " Always show status line
set statusline=%<%f%m%r%h%w%=%y[U+%04B]%2l/%2L=%P,%2c%V
9.2.2. 用外部軟件包定制 vim
通過簡單定制,即安裝 vim-scripts 軟件包,并附加下面的內(nèi)容到用戶的 vimrc 文件,能夠啟用 secure-modelines 和傳統(tǒng)的 IDE。
packadd! secure-modelines packadd! winmanager let mapleader = ' ' " Toggle paste mode withp set pastetoggle= p " IDE-like UI for files and buffers with w nnoremap w :WMToggle " Use safer keys for moving to another window nnoremap h nnoremap j nnoremap k nnoremap l
為了使上面的按鍵綁定正確地運(yùn)行,終端程序需要配置:Backspace-鍵產(chǎn)生 "ASCII DEL"、Delete-鍵產(chǎn)生 "Escape sequence"。
新的原生 Vim 軟件包系統(tǒng)同 "git" 和 "git submodule" 順利的工作。一個(gè)這樣的配置例子能夠在 我的 git 倉庫: dot-vim 找到。本質(zhì)上是這樣做的:
-
通過使用"
git"和"git submodule",最新的擴(kuò)展軟件包,比如說"name",會被放到~/.vim/pack/*/opt/name和類似的地方。 -
通過增加
:packadd! name行到用戶的 vimrc 文件,這些軟件包被放到runtimepath。 -
Vim 在它的初始化時(shí)加載這些軟件包到
runtimepath。 -
在它初始化的最后,安裝文檔的標(biāo)簽被更新,使用 "
helptags ALL"。
更多信息,請使用 "vim --startuptime vimstart.log" 啟動 vim 來檢查實(shí)際的執(zhí)行順序和每一個(gè)步驟消耗的時(shí)間。
下面能夠發(fā)現(xiàn)有趣的外部插件軟件包:
-
Vim - 無所不在的文本編輯器 -- Vim 和 vim 腳本的官方上游站點(diǎn)
-
VimAwsome -- Vim 插件列表
-
vim-scripts -- Debian 軟件包:一個(gè) vim 腳本的收集
是相當(dāng)迷惑的看到這么多的方式[3] 來管理和加載這些外部的軟件包到 vim。檢查原始的信息是最好的方法。
表 9.3. vim 的初始化信息
| 按鍵 | 信息 |
|---|---|
:help package |
解釋 vim 軟件包機(jī)制 |
:help runtimepath |
解釋 runtimepath 機(jī)制 |
:version |
內(nèi)部狀態(tài),包括 vimrc 文件的候選 |
:echo $VIM |
環(huán)境變量 "$VIM" 用來定位 vimrc 文件的路徑 |
:set runtimepath? |
列出用來搜索所有運(yùn)行時(shí)支持文件的目錄 |
:echo $VIMRUNTIME |
環(huán)境變量 "$VIMRUNTIME" 用來定位大量系統(tǒng)提供的運(yùn)行時(shí)支持文件 |
9.3. 數(shù)據(jù)記錄和展示
9.3.1. 日志后臺守護(hù)進(jìn)程(daemon)
許多傳統(tǒng)的程序在"/var/log/" 目錄下用文本文件格式記錄它們的活動.
在一個(gè)產(chǎn)生很多日志文件的系統(tǒng)上,用 logrotate(8)來簡化日志文件的管理。
許多新的程序使用 systemd-journald(8) 日志服務(wù)的二進(jìn)制文件格式來記錄它們的活動,在"/var/log/journal" 目錄下。
你能夠從 shell 腳本記錄數(shù)據(jù)到 systemd-journald(8) 日志,使用 systemd-cat(1) 命令。
參見 第 3.4 節(jié) “系統(tǒng)消息” 和 第 3.3 節(jié) “內(nèi)核消息”.
9.3.2. 日志分析
這里是主要的日志分析軟件 ("~Gsecurity::log-analyzer" 在 aptitude(8) 中).
表 9.4. 系統(tǒng)日志分析軟件列表
| 軟件包 | 流行度 | 大小 | 說明 |
|---|---|---|---|
logwatch |
V:14, I:17 | 2276 | 用 Perl 寫的日志分析軟件,有好的輸出 |
fail2ban |
V:109, I:122 | 2091 | 禁用造成多個(gè)認(rèn)證錯(cuò)誤的 IP |
analog |
V:3, I:103 | 3584 | web 服務(wù)器日志分析 |
awstats |
V:8, I:13 | 6910 | 強(qiáng)大和特性全面的 web 服務(wù)器日志分析 |
sarg |
V:2, I:2 | 843 | 生成 squid 分析報(bào)告 |
pflogsumm |
V:2, I:4 | 111 | Postfix 日志條目概要 |
syslog-summary |
V:0, I:1 | 30 | 總結(jié) syslog 日志文件內(nèi)容 |
fwlogwatch |
V:0, I:0 | 478 | 防火墻日志分析軟件 |
squidview |
V:0, I:1 | 189 | 監(jiān)控和分析 squid access.log 文件 |
swatch |
V:0, I:0 | 101 | 有正則表達(dá)式、高亮和曲線的日志文件查看器 |
crm114 |
V:0, I:0 | 1119 | Controllable Regex Mutilator 和垃圾郵件過濾 (CRM114) |
icmpinfo |
V:0, I:0 | 44 | 解釋 ICMP 信息 |
| 注意 | |
|---|---|
|
CRM114 提供語言架構(gòu)來寫模糊 過濾器,使用了 TRE 正則表達(dá)式庫 。它主要在垃圾郵件過濾器中使用,但也能夠用于日志分析。 |
9.3.3. 定制文本數(shù)據(jù)的顯示
盡管例如 more(1) 和 less(1) 這樣的分頁程序(參見 第 1.4.5 節(jié) “分頁程序”)和用于高亮和格式的自定義工具(參見 第 11.1.8 節(jié) “高亮并格式化純文本數(shù)據(jù)”)可以漂亮地顯示文本數(shù)據(jù),但通用的編輯器 (參見 第 1.4.6 節(jié) “文本編輯器”)是用途最廣的,且可定制性最高。
| 提示 | |
|---|---|
|
對于 |
9.3.4. 定制時(shí)間和日期的顯示
“ls -l” 命令默認(rèn)的時(shí)間和日期顯示格式取決于語言環(huán)境(相關(guān)的值參見 第 1.2.6 節(jié) “時(shí)間戳”)。“$LANG” 變量將被首先考慮,但它會被導(dǎo)出的 “$LC_TIME” 或 "$LC_ALL"環(huán)境變量覆蓋。
每個(gè)語言環(huán)境實(shí)際的默認(rèn)顯示格式取決于所使用的 C 標(biāo)準(zhǔn)庫的版本(libc6 軟件包),也就是說,不同的 Debian 發(fā)行版有不同的默認(rèn)情況。對于 iso-formates,參見 ISO 8601。
如果你真的想自定義超出語言環(huán)境的時(shí)間和日期顯示格式,你應(yīng)該通過 “--time-style” 參數(shù)或 “$TIME_STYLE” 的值來設(shè)置時(shí)間樣式值(參見ls(1)、date(1)、“info coreutils 'ls invocation'”)。
表 9.5. 使用 時(shí)間樣式值 的"ls -l" 命令的時(shí)間和日期的顯示例子
| 時(shí)間樣式值 | 語言環(huán)境 | 時(shí)間和日期顯示 |
|---|---|---|
iso |
任何值 | 01-19 00:15 |
long-iso |
任何值 | 2009-01-19 00:15 |
full-iso |
任何值 | 2009-01-19 00:15:16.000000000 +0900 |
語言環(huán)境 |
C |
Jan 19 00:15 |
語言環(huán)境 |
en_US.UTF-8 |
Jan 19 00:15 |
語言環(huán)境 |
es_ES.UTF-8 |
ene 19 00:15 |
+%d.%m.%y %H:%M |
任何值 | 19.01.09 00:15 |
+%d.%b.%y %H:%M |
C 或 en_US.UTF-8 |
19.Jan.09 00:15 |
+%d.%b.%y %H:%M |
es_ES.UTF-8 |
19.ene.09 00:15 |
| 提示 | |
|---|---|
|
你可以使用命令別名以避免在命令行中輸入長的選項(xiàng),(參見 第 1.5.9 節(jié) “命令別名”): alias ls='ls --time-style=+%d.%m.%y %H:%M' |
9.3.5. shell 中 echo 的顏色
大部分現(xiàn)代終端的 shell 中 echo 能夠使用 ANSI 轉(zhuǎn)義字符來顯示顏色(參見 “/usr/share/doc/xterm/ctlseqs.txt.gz”)。
嘗試下列例子
$ RED=$(printf "\x1b[31m")
$ NORMAL=$(printf "\x1b[0m")
$ REVERSE=$(printf "\x1b[7m")
$ echo "${RED}RED-TEXT${NORMAL} ${REVERSE}REVERSE-TEXT${NORMAL}"
9.3.6. 有顏色輸出的命令
在交互式的環(huán)境下,命令的輸出帶顏色,能夠給檢查命令的輸出帶來便利。 我在我的"~/.bashrc"里加入了下面內(nèi)容.
if [ "$TERM" != "dumb" ]; then
eval "`dircolors -b`"
alias ls='ls --color=always'
alias ll='ls --color=always -l'
alias la='ls --color=always -A'
alias less='less -R'
alias ls='ls --color=always'
alias grep='grep --color=always'
alias egrep='egrep --color=always'
alias fgrep='fgrep --color=always'
alias zgrep='zgrep --color=always'
else
alias ll='ls -l'
alias la='ls -A'
fi
在交互式命令中,使用別名來限制顏色的影響范圍。導(dǎo)出環(huán)境變量 "export GREP_OPTIONS='--color=auto'" 也有好處,這樣能夠讓 less(1) 之類的頁面程序看到顏色。當(dāng)使用管道到其它命令時(shí),你想去掉顏色,上面列子 "~/.bashrc" 中的內(nèi)容,可以使用 "--color=auto" 代替.
| 提示 | |
|---|---|
|
在交互式的環(huán)境中,通過" |
9.3.7. 記錄編輯器復(fù)雜的重復(fù)操作動作
你能夠記錄編輯器復(fù)雜的重復(fù)操作動作。
對于 Vim,請按下面操作。
-
"
qa": 開始記錄輸入字符到有名字的寄存器 "a". -
… 編輯器操作
-
"
q": 結(jié)束記錄輸入的字符。 -
"
@a":執(zhí)行寄存器 "a的內(nèi)容".
對于 Emacs, 請按下面操作。
-
"
C-x (": 開始定義一個(gè)鍵盤宏. -
… 編輯器操作
-
"
C-x )":結(jié)束定義一個(gè)鍵盤宏. -
"
C-x e": 執(zhí)行一個(gè)鍵盤宏.
9.3.8. 記錄 X 應(yīng)用程序的圖像
有少量方法可以記錄 X 應(yīng)用程序的圖像,包括 xterm 顯示。
表 9.6. 圖形圖像處理工具列表
| 軟件包 | 流行度 | 大小 | 屏幕 | 命令 |
|---|---|---|---|---|
gnome-screenshot |
V:29, I:281 | 1134 | Wayland | GNOME 下的截屏程序 |
flameshot |
V:7, I:13 | 2590 | Wayland | 強(qiáng)大的截屏程序 |
gimp |
V:61, I:300 | 19827 | Wayland + X | GUI 菜單中的截屏 |
x11-apps |
V:29, I:461 | 2437 | X | xwd(1) |
imagemagick |
I:353 | 221 | X | import(1) |
scrot |
V:7, I:74 | 126 | X | scrot(1) |
9.3.9. 記錄配置文件的變更
有特定的工具可以通過 DVCS 的幫助來記錄配置文件的變更和在 Btrfs 上制作系統(tǒng)快照。
表 9.7. 記錄配置歷史的軟件包列表
| 軟件包 | 流行度 | 大小 | 說明 |
|---|---|---|---|
etckeeper |
V:27, I:31 | 176 | 使用 Git(默認(rèn))、Mercurial 或 Bazaar(新)來保存配置文件和它們的元數(shù)據(jù) |
timeshift |
V:3, I:5 | 3142 | 使用 rsync 或 BTRFS 快照的系統(tǒng)恢復(fù)工具 |
snapper |
V:2, I:3 | 2170 | Linux 文件系統(tǒng)快照管理工具 |
你也可以考慮本地腳本 第 10.2.3 節(jié) “個(gè)人備份” 方案。
9.4. 監(jiān)控、控制和啟動程序活動
程序活動能夠使用特殊的工具監(jiān)控和控制。
表 9.8. 監(jiān)控和控制程序活動工具列表
| 軟件包 | 流行度 | 大小 | 說明 |
|---|---|---|---|
coreutils |
V:898, I:999 | 17372 | nice(1): 用指定的調(diào)度優(yōu)先權(quán)運(yùn)行一個(gè)程序 |
bsdutils |
V:646, I:999 | 419 | renice(1): 調(diào)整一個(gè)目前在運(yùn)行的進(jìn)程的調(diào)度優(yōu)先權(quán)值 |
procps |
V:743, I:999 | 1656 | "/proc" 文件系統(tǒng)工具: ps(1), top(1), kill(1), watch(1), … |
psmisc |
V:412, I:821 | 793 | "/proc" 文件系統(tǒng)工具: killall(1), fuser(1), peekfd(1), pstree(1) |
time |
V:12, I:214 | 129 | time(1):運(yùn)行一個(gè)程序,并從時(shí)間消耗方面來報(bào)告系統(tǒng)資源的使用 |
sysstat |
V:160, I:182 | 1923 | sar(1), iostat(1), mpstat(1), …: linux 系統(tǒng)性能工具 |
isag |
V:0, I:4 | 117 | sysstat 的交互式的系統(tǒng)活動圖 |
lsof |
V:388, I:944 | 451 | lsof(8): 使用 "-p" 選項(xiàng)列出被一個(gè)系統(tǒng)進(jìn)程打開的文件 |
strace |
V:15, I:141 | 2367 | strace(1):跟蹤系統(tǒng)調(diào)用和信號 |
ltrace |
V:1, I:19 | 363 | ltrace(1): 跟蹤庫調(diào)用 |
xtrace |
V:0, I:0 | 353 | xtrace(1):跟蹤 X11 客戶端和服務(wù)器端之間的通信 |
powertop |
V:11, I:210 | 672 | powertop(1):系統(tǒng)能耗使用信息 |
cron |
V:814, I:996 | 263 | 根據(jù) cron(8) 后臺守護(hù)進(jìn)程(daemon)的調(diào)度運(yùn)行一個(gè)進(jìn)程 |
anacron |
V:404, I:475 | 107 | 用于非整天 24 小時(shí)運(yùn)行系統(tǒng)的命令計(jì)劃,類 cron |
at |
V:136, I:240 | 169 | at(1) 或 batch(1): 在一個(gè)特定的時(shí)間運(yùn)行任務(wù)或在某一系統(tǒng)負(fù)載下運(yùn)行 |
| 提示 | |
|---|---|
|
|
9.4.1. 進(jìn)程耗時(shí)
顯示 命令調(diào)用進(jìn)程的時(shí)間消耗。
# time some_command >/dev/null real 0m0.035s # time on wall clock (elapsed real time) user 0m0.000s # time in user mode sys 0m0.020s # time in kernel mode
9.4.2. 調(diào)度優(yōu)先級
進(jìn)程的調(diào)度優(yōu)先級是被一個(gè)進(jìn)程優(yōu)先級值控制。
表 9.9. 調(diào)度優(yōu)先級值列表
| 進(jìn)程優(yōu)先級值 | 調(diào)度優(yōu)先級 |
|---|---|
| 19 | 最低優(yōu)先級進(jìn)程 |
| 0 | 非常高的普通用戶優(yōu)先級進(jìn)程 |
| -20 | root 用戶非常高的優(yōu)先級進(jìn)程 |
# nice -19 top # very nice # nice --20 wodim -v -eject speed=2 dev=0,0 disk.img # very fast
在某些情況下,極端的進(jìn)程優(yōu)先級值會對系統(tǒng)造成傷害。小心使用這個(gè)命令。
9.4.3. ps 命令
在 Debian 系統(tǒng)上的 ps(1) 命令同時(shí)支持 BSD 和 SystemV 特征,有助于識別靜態(tài)的進(jìn)程活動。
表 9.10. ps 命令樣式列表
| 樣式 | 典型的命令 | 特征 |
|---|---|---|
| BSD | ps aux |
顯示 %CPU %MEM |
| System V | ps -efH |
顯示 PPID |
對于僵尸(死了的)子進(jìn)程,你能夠通過 "PPID" 字段的父進(jìn)程 ID 來殺死它們。
pstree(1) 命令顯示進(jìn)程樹。
9.4.4. top 命令
Debian 系統(tǒng)上的 top(1) 擁有豐富的特征,有助于識別進(jìn)程有趣的動態(tài)行為。
它是一個(gè)交互式的全屏程序。你可以通過按"h"鍵來得到它的使用幫助,按"q"鍵來終止該程序。
9.4.5. 列出被一個(gè)進(jìn)程打開的文件
你能夠通過一個(gè)進(jìn)程 ID(PID)來列出該進(jìn)程所有打開的文件,例如,PID 為 1 的進(jìn)程,使用下面的方式。
$ sudo lsof -p 1
PID=1 通常用于 init 程序.
9.4.6. 跟蹤程序活動
你能夠跟蹤程序活動,使用strace(1), ltrace(1), xtrace(1) 來跟蹤系統(tǒng)調(diào)用和信號、庫調(diào)用、X11 客戶端和服務(wù)器端之間的通信。
跟蹤 ls 命令的系統(tǒng)調(diào)用。
$ sudo strace ls
| 提示 | |
|---|---|
|
使用在 /usr/share/doc/strace/examples/ 中發(fā)現(xiàn)的 strace-graph 腳本來生成一個(gè)好看的樹形視圖 |
9.4.7. 識別使用文件和套接字的進(jìn)程
你可以通過 fuser(1) 來識別出使用文件的進(jìn)程,例如,用下面的方式識別出 "/var/log/mail.log" 由哪個(gè)進(jìn)程打開。
$ sudo fuser -v /var/log/mail.log
USER PID ACCESS COMMAND
/var/log/mail.log: root 2946 F.... rsyslogd
你可以看到 "/var/log/mail.log" 是由 rsyslogd(8) 命令打開并寫入。
你可以通過 fuser(1) 來識別出使用套接字的進(jìn)程,例如,用下面的方式識別出 "smtp/tcp" 由哪個(gè)進(jìn)程打開。
$ sudo fuser -v smtp/tcp
USER PID ACCESS COMMAND
smtp/tcp: Debian-exim 3379 F.... exim4
現(xiàn)在你知道你的系統(tǒng)運(yùn)行 exim4(8) 來處理連接到 SMTP 端口 (25)的 TCP 連接.
9.4.8. 使用固定間隔重復(fù)一個(gè)命令
watch(1) 使用固定間隔重新執(zhí)行一個(gè)命令,并全屏顯示輸出。
$ watch w
顯示哪些人登錄到系統(tǒng),每 2 秒鐘更新一次。
9.4.9. 使用文件循環(huán)來重復(fù)一個(gè)命令
通過匹配某些條件的文件來循環(huán)重復(fù)一個(gè)命令,有幾種方法,例如,匹配全局模式"*.ext".
-
Shell 循環(huán)方式(參見 第 12.1.4 節(jié) “shell 循環(huán)”):
for x in *.ext; do if [ -f "$x"]; then command "$x" ; fi; done
-
find(1) 和xargs(1) 聯(lián)合:
find . -type f -maxdepth 1 -name '*.ext' -print0 | xargs -0 -n 1 command
-
find(1) 使用 "-exec" 選項(xiàng)并執(zhí)行命令:
find . -type f -maxdepth 1 -name '*.ext' -exec command '{}' \;
-
find(1) 使用 "-exec" 選項(xiàng)并執(zhí)行一個(gè)短的 shell 腳本:
find . -type f -maxdepth 1 -name '*.ext' -exec sh -c "command '{}' && echo 'successful'" \;
上面的列子確保適當(dāng)處理怪異的文件名(如包含空格)。 find(1) 更多高級的用法,參見 第 10.1.5 節(jié) “查找文件的語法”.
9.4.10. 從 GUI 啟動一個(gè)程序
對于 命令行界面(command-line interface,CLI),$PATH 環(huán)境變量所指定的目錄中第一個(gè)匹配相應(yīng)名稱的程序會被執(zhí)行。參見 第 1.5.3 節(jié) “"$PATH" 變量”。
對于遵從 freedesktop.org 標(biāo)準(zhǔn)的 圖形用戶界面(graphical user interface,GUI),/usr/share/applications/ 目錄中的 *.desktop 文件給每個(gè)程序的 GUI 菜單顯示提供了必要的屬性。遵從Freedesktop.org xdg 菜單系統(tǒng)的每一個(gè)軟件包,通過 "/usr/share/applications/"下 "*.desktop"提供的數(shù)據(jù)來安裝它的菜單。 遵從 Freedesktop.org 標(biāo)準(zhǔn)的現(xiàn)代桌面環(huán)境,用 xdg-utils 軟件包利用這些數(shù)據(jù)生成它們的菜單。參見"/usr/share/doc/xdg-utils/README"。
舉個(gè)例子,chromium.desktop 文件中為 “Chromium 網(wǎng)絡(luò)瀏覽器” 定義了相關(guān)屬性,例如程序名 “Name”,程序執(zhí)行路徑和參數(shù) “Exec”,所使用的圖標(biāo) “Icon” 等等(參見 桌面配置項(xiàng)規(guī)范)。文件內(nèi)容如下:
[Desktop Entry] Version=1.0 Name=Chromium Web Browser GenericName=Web Browser Comment=Access the Internet Comment[fr]=Explorer le Web Exec=/usr/bin/chromium %U Terminal=false X-MultipleArgs=false Type=Application Icon=chromium Categories=Network;WebBrowser; MimeType=text/html;text/xml;application/xhtml_xml;x-scheme-handler/http;x-scheme-handler/https; StartupWMClass=Chromium StartupNotify=true
這是一個(gè)較為簡單的說明。*.desktop 文件像下面那樣被搜尋。
桌面環(huán)境設(shè)置 $XDG_DATA_HOME 和 $XDG_DATA_DIR 環(huán)境變量。舉個(gè)例子,在 GNOME 3 中:
-
未設(shè)置
$XDG_DATA_HOME。(將使用默認(rèn)值$HOME/.local/share。) -
$XDG_DATA_DIRS被設(shè)置為/usr/share/gnome:/usr/local/share/:/usr/share/。
基準(zhǔn)目錄(參見 XDG Base Directory Specification)和應(yīng)用程序目錄如下所示。
-
$HOME/.local/share/→$HOME/.local/share/applications/ -
/usr/share/gnome/→/usr/share/gnome/applications/ -
/usr/local/share/→/usr/local/share/applications/ -
/usr/share/→/usr/share/applications/
*.desktop 文件將按照這個(gè)順序在這些 applications 目錄中進(jìn)行搜尋。
| 提示 | |
|---|---|
|
要建立一個(gè)用戶自定義的 GUI 菜單項(xiàng),需要在 |
| 提示 | |
|---|---|
|
相似地,如果在這些基準(zhǔn)目錄下的 |
| 提示 | |
|---|---|
|
相似地,如果在 |
9.4.11. 自定義被啟動的程序
一些程序會被另一個(gè)程序自動啟動。下面是自定義該過程的方法。
-
應(yīng)用程序配置菜單:
-
GNOME3 桌面:“設(shè)置” → “系統(tǒng)” → “詳細(xì)信息” → “默認(rèn)應(yīng)用程序”
-
KDE 桌面: "K" → "Control Center 控制中心" → "KDE Components 組件" → "Component Chooser 組件選擇器"
-
Iceweasel 瀏覽器:“編輯” → “首選項(xiàng)” → “應(yīng)用程序”
-
mc(1):“/etc/mc/mc.ext”
-
-
例如 “
$BROWSER”、“$EDITOR”、“$VISUAL” 和 “$PAGER” 這樣的環(huán)境變量(參見environ(7)) -
用于例如 “
editor”、“view”、“x-www-browser”、“gnome-www-browser” 和 “www-browser” 這樣的程序的update-alternatives(1) 系統(tǒng)(參見 第 1.4.7 節(jié) “設(shè)置默認(rèn)文本編輯器”) -
“
~/.mailcap” 和 “/etc/mailcap” 文件的內(nèi)容關(guān)聯(lián)了程序的 MIME 類型(參見mailcap(5)) -
“
~/.mime.types” 和 “/etc/mime.types” 文件的內(nèi)容關(guān)聯(lián)了 MIME 類型的文件擴(kuò)展名(參見run-mailcap(1))
| 提示 | |
|---|---|
|
|
| 提示 | |
|---|---|
|
|
| 提示 | |
|---|---|
|
為了在 GUI(圖形用戶界面)下運(yùn)行例如 # cat /usr/local/bin/mutt-term < |
| 提示 | |
|---|---|
|
GUI(圖形用戶界面)應(yīng)用程序能夠很容易的放在特定環(huán)境變量下執(zhí)行,在它相應(yīng)的 # cat /usr/local/bin/kitty < |
9.4.12. 殺死一個(gè)進(jìn)程
使用 kill(1) 通過進(jìn)程 ID 來殺死(發(fā)送一個(gè)信號)一個(gè)進(jìn)程。
使用 killall(1) 或 pkill(1) 通過進(jìn)程命令的名字或其它屬性來做同樣的事情。
表 9.11. kill 命令常用信號列表
| 信號值 | 信號名 | 操作 | 注釋 |
|---|---|---|---|
| 0 | --- | 沒有信號發(fā)送(參見 kill(2)) |
檢查進(jìn)程是否運(yùn)行 |
| 1 | SIGHUP | 終止進(jìn)程 | 從終端斷開連接(信號 掛起) |
| 2 | SIGINT | 終止進(jìn)程 | 從鍵盤中斷 (CTRL-C) |
| 3 | SIGQUIT | 終止進(jìn)程并觸發(fā) dump core | 從鍵盤退出 (CTRL-\) |
| 9 | SIGKILL | 終止進(jìn)程 | 不可阻塞的 kill 信號 |
| 15 | SIGTERM | 終止進(jìn)程 | 可被阻塞的終止信號 |
9.4.13. 單次任務(wù)時(shí)間安排
運(yùn)行 at(1) 命令來安排一次性的工作。
$ echo 'command -args'| at 3:40 monday
9.4.14. 定時(shí)任務(wù)安排
使用 cron(8) 來進(jìn)行定時(shí)任務(wù)安排。參見 crontab(1) 和 crontab(5).
你能夠作為一個(gè)普通用戶定時(shí)運(yùn)行一個(gè)進(jìn)程,比如, foo 使用 "crontab -e" 命令創(chuàng)建一個(gè) crontab(5) 的文件 "/var/spool/cron/crontabs/foo"。
這里是一個(gè) crontab(5) 文件的列子。
# use /bin/sh to run commands, no matter what /etc/passwd says SHELL=/bin/sh # mail any output to paul, no matter whose crontab this is MAILTO=paul # Min Hour DayOfMonth Month DayOfWeek command (Day... are OR'ed) # run at 00:05, every day 5 0 * * * $HOME/bin/daily.job >> $HOME/tmp/out 2>&1 # run at 14:15 on the first of every month -- output mailed to paul 15 14 1 * * $HOME/bin/monthly # run at 22:00 on weekdays(1-5), annoy Joe. % for newline, last % for cc: 0 22 * * 1-5 mail -s "It's 10pm" joe%Joe,%%Where are your kids?%.%% 23 */2 1 2 * echo "run 23 minutes after 0am, 2am, 4am ..., on Feb 1" 5 4 * * sun echo "run at 04:05 every Sunday" # run at 03:40 on the first Monday of each month 40 3 1-7 * * [ "$(date +%a)" == "Mon" ] && command -args
| 提示 | |
|---|---|
|
對那些非連續(xù)運(yùn)行的系統(tǒng),安裝 |
| 提示 | |
|---|---|
|
對于定時(shí)系統(tǒng)維護(hù)腳本,你能夠以root 賬戶定時(shí)運(yùn)行,把這類腳本放入 " |
cron 后臺守護(hù)進(jìn)程(daemon)不存在時(shí),Systemd 也有按時(shí)間計(jì)劃運(yùn)行程序的低級能力。例如, /lib/systemd/system/apt-daily.timer 和 /lib/systemd/system/apt-daily.service 建立每天的 apt 下載行動。參見 systemd.timer(5) 。
9.4.15. Alt-SysRq 鍵
按 Alt-SysRq (PrtScr)組合鍵跟一個(gè)字母按鍵,進(jìn)行不可思議的系統(tǒng)應(yīng)急控制。
表 9.12. 著名的 SAK 命令鍵列表


咨詢
建站咨詢
