日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
【Debian參考手冊】第?9?章?系統(tǒng)技巧

目錄

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. 日志后臺守護進程(daemon)
9.3.2. 日志分析
9.3.3. 定制文本數(shù)據(jù)的顯示
9.3.4. 定制時間和日期的顯示
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. 進程耗時
9.4.2. 調(diào)度優(yōu)先級
9.4.3. ps 命令
9.4.4. top 命令
9.4.5. 列出被一個進程打開的文件
9.4.6. 跟蹤程序活動
9.4.7. 識別使用文件和套接字的進程
9.4.8. 使用固定間隔重復(fù)一個命令
9.4.9. 使用文件循環(huán)來重復(fù)一個命令
9.4.10. 從 GUI 啟動一個程序
9.4.11. 自定義被啟動的程序
9.4.12. 殺死一個進程
9.4.13. 單次任務(wù)時間安排
9.4.14. 定時任務(wù)安排
9.4.15. Alt-SysRq 鍵
9.5. 系統(tǒng)維護技巧
9.5.1. 誰在系統(tǒng)里?
9.5.2. 警告所有人
9.5.3. 硬件識別
9.5.4. 硬件配置
9.5.5. 系統(tǒng)時間和硬件時間
9.5.6. 終端配置
9.5.7. 聲音基礎(chǔ)設(shè)施
9.5.8. 關(guān)閉屏幕保護
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. 通過掛載選項優(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 指定臨時存儲目錄
9.6.13. 通過 LVM 擴展可用存儲空間
9.6.14. 通過掛載另一個分區(qū)來擴展可用存儲空間
9.6.15. 通過 “mount --bind” 掛載另一個目錄來擴展可用存儲空間
9.6.16. 通過 overlay 掛載(overlay-mounting)另一個目錄來擴展可用存儲空間
9.6.17. 使用符號鏈接擴展可用存儲空間
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. 二進制數(shù)據(jù)
9.8.1. 查看和編輯二進制數(shù)據(jù)
9.8.2. 不掛載磁盤操作文件
9.8.3. 數(shù)據(jù)冗余
9.8.4. 數(shù)據(jù)文件恢復(fù)和診斷分析
9.8.5. 把大文件分成多個小文件
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)核團隊推薦
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)生一個有控制字符的文件。這些控制字符可以按下面的方式,使用 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 程序”)來進行控制臺記錄。

  • 使用 vim 輸入 ":terminal" 進入終端模式。使用 "Ctrl-W N" 從終端模式退出到普通模式。使用 ":w typescript" 將緩存寫到一個文件。

  • 使用 emacs 和 "M-x shell", "M-x eshell", 或 "M-x term" 來進入記錄控制臺。使用 "C-x C-w" 將緩存寫到文件。

9.1.2. screen 程序

screen(1) 不但允許一個終端窗口運行多個進程,還允許遠(yuǎn)程 shell 進程支持中斷的連接.這里是一個典型的 screen(1) 使用場景.

  1. 登錄到一個遠(yuǎn)程機器。

  2. 在單個控制臺上啟動 screen

  3. 使用 ^A c ("Control-A" 接著 "c")在 screen 中創(chuàng)建的窗口執(zhí)行多個程序.

  4. ^A n ("Control-A" 接著"n")來在多個 screen 窗口間轉(zhuǎn)換.

  5. 突然,你需要離開你的終端,但你不想丟掉正在做的工作,而這些工作需要連接來保持。

  6. 你可以通過任何方式分離 screen 會話。

    • 殘忍地拔掉你的網(wǎng)絡(luò)連接

    • 輸入 ^A d ("Control-A" 接著 "d") 并手工從遠(yuǎn)程連接退出登錄

    • 輸入 ^A DD ("Control-A" 接著 "DD") 分離 screen 并退出登錄

  7. 你重新登錄到同一個遠(yuǎn)處主機(即使從不同的終端)。

  8. 使用 "screen -r" 啟動 screen.

  9. screen 魔術(shù)般的重新附上先前所有的 screen 窗口和所有在活動運行的程序.

提示

對于撥號或者按包計費的網(wǎng)絡(luò)連接,你可以通過 screen 節(jié)省連接費用,應(yīng)為你可以在斷開連接時讓一個進程繼續(xù)運行,當(dāng)你稍后再次連接時重新附上它。

screen 會話里,除了命令按鍵外的所有鍵盤輸入都會被發(fā)送到當(dāng)前窗口。 screen 所有命令按鍵是通過 ^A ("Control-A") 加單個鍵[加任何參數(shù)] 來輸入.這里有一些重要的命令按鍵需要記住。

表 9.2. screen 鍵綁定列表

鍵綁定功能 說明
^A ? 顯示幫助屏幕(顯示鍵綁定)
^A c 創(chuàng)建一個新的窗口并切換到該窗口
^A n 到下一個窗口
^A p 到前一個窗口
^A 0 到 0 號窗口
^A 1 到 1 號窗口
^A w 顯示窗口列表
^A a 作為鍵盤輸入發(fā)送 Ctrl-A 到當(dāng)前窗口
^A h 把當(dāng)前窗口的硬拷貝寫到一個文件
^A H 開始/結(jié)束 當(dāng)前窗口到文件的記錄
^A ^X 鎖定終端(密碼保護)
^A d 從終端分離 screen 會話
^A DD 分離 screen 會話并退出登錄

細(xì)節(jié)參見 screen(1).

參見 tmux(1) ,了解替代命令的功能。

9.1.3. 在目錄間游走

在 第 1.4.2 節(jié) “定制 bash”, 2 個技巧允許快速在目錄間游走,在 $CDPATHmc 描述。

如果你使用模糊文本過濾程序,你能夠不輸入精準(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,你選擇將要使用的路徑。

  • 你可以用最小化的操作,從命令歷史里面選擇一個命令。在命令行提示符下按 Ctrl-R 。然后你將被提示候選的命令。輸入部分命令字符串,比如 vim d,將會縮窄候選項。使用光標(biāo)和回車鍵選擇將要使用的命令。

9.1.4. Readline 封裝

一些命令,比如 /usr/bin/dash,它缺少命令行歷史編輯能力,但在 rlwrap 或它的等價物下運行就能夠透明的增加這樣的功能。

 $ rlwrap dash -i

這提供一個便利平臺來測試 dash 的細(xì)微之處,使用類似 bash 的友好環(huán)境。

9.1.5. 掃描源代碼樹

ripgrep 軟件包中的 rg(1) 命令,在掃描源代碼樹的典型場景中,提供了一個比 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 選項。

這些 Ex-模式 的命令,能夠在用戶的 vimrc 文件里面包括,傳統(tǒng)的 "~/.vimrc" 或 git 友好的 "~/.vim/vimrc"。這里有一個非常簡單的例。[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 with p
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

為了使上面的按鍵綁定正確地運行,終端程序需要配置:Backspace-鍵產(chǎn)生 "ASCII DEL"、Delete-鍵產(chǎn)生 "Escape sequence"。

新的原生 Vim 軟件包系統(tǒng)同 "git" 和 "git submodule" 順利的工作。一個這樣的配置例子能夠在 我的 git 倉庫: dot-vim 找到。本質(zhì)上是這樣做的:

  • 通過使用"git"和"git submodule",最新的擴展軟件包,比如說"name",會被放到 ~/.vim/pack/*/opt/name 和類似的地方。

  • 通過增加 :packadd! name 行到用戶的 vimrc 文件,這些軟件包被放到 runtimepath。

  • Vim 在它的初始化時加載這些軟件包到 runtimepath

  • 在它初始化的最后,安裝文檔的標(biāo)簽被更新,使用 "helptags ALL"。

更多信息,請使用 "vim --startuptime vimstart.log" 啟動 vim 來檢查實際的執(zhí)行順序和每一個步驟消耗的時間。

下面能夠發(fā)現(xiàn)有趣的外部插件軟件包:

  • Vim - 無所不在的文本編輯器 -- Vim 和 vim 腳本的官方上游站點

  • VimAwsome -- Vim 插件列表

  • vim-scripts -- Debian 軟件包:一個 vim 腳本的收集

是相當(dāng)迷惑的看到這么多的方式[3] 來管理和加載這些外部的軟件包到 vim。檢查原始的信息是最好的方法。

表 9.3. vim 的初始化信息

按鍵 信息
:help package 解釋 vim 軟件包機制
:help runtimepath 解釋 runtimepath 機制
:version 內(nèi)部狀態(tài),包括 vimrc 文件的候選
:echo $VIM 環(huán)境變量 "$VIM" 用來定位 vimrc 文件的路徑
:set runtimepath? 列出用來搜索所有運行時支持文件的目錄
:echo $VIMRUNTIME 環(huán)境變量 "$VIMRUNTIME" 用來定位大量系統(tǒng)提供的運行時支持文件

9.3. 數(shù)據(jù)記錄和展示

9.3.1. 日志后臺守護進程(daemon)

許多傳統(tǒng)的程序在"/var/log/" 目錄下用文本文件格式記錄它們的活動.

在一個產(chǎn)生很多日志文件的系統(tǒng)上,用 logrotate(8)來簡化日志文件的管理。

許多新的程序使用 systemd-journald(8) 日志服務(wù)的二進制文件格式來記錄它們的活動,在"/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 禁用造成多個認(rèn)證錯誤的 IP
analog V:3, I:103 3584 web 服務(wù)器日志分析
awstats V:8, I:13 6910 強大和特性全面的 web 服務(wù)器日志分析
sarg V:2, I:2 843 生成 squid 分析報告
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é) “文本編輯器”)是用途最廣的,且可定制性最高。

提示

對于 vim(1) 和它的分頁模式別名 view(1),“:set hls” 可以啟用高亮搜索。

9.3.4. 定制時間和日期的顯示

ls -l” 命令默認(rèn)的時間和日期顯示格式取決于語言環(huán)境(相關(guān)的值參見 第 1.2.6 節(jié) “時間戳”)。“$LANG” 變量將被首先考慮,但它會被導(dǎo)出的 “$LC_TIME” 或 "$LC_ALL"環(huán)境變量覆蓋。

每個語言環(huán)境實際的默認(rèn)顯示格式取決于所使用的 C 標(biāo)準(zhǔn)庫的版本(libc6 軟件包),也就是說,不同的 Debian 發(fā)行版有不同的默認(rèn)情況。對于 iso-formates,參見 ISO 8601。

如果你真的想自定義超出語言環(huán)境的時間和日期顯示格式,你應(yīng)該通過 “--time-style” 參數(shù)或 “$TIME_STYLE” 的值來設(shè)置時間樣式值(參見ls(1)、date(1)、“info coreutils 'ls invocation'”)。

表 9.5. 使用 時間樣式值 的"ls -l" 命令的時間和日期的顯示例子

時間樣式值 語言環(huán)境 時間和日期顯示
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 Cen_US.UTF-8 19.Jan.09 00:15
+%d.%b.%y %H:%M es_ES.UTF-8 19.ene.09 00:15

提示

你可以使用命令別名以避免在命令行中輸入長的選項,(參見 第 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)使用管道到其它命令時,你想去掉顏色,上面列子 "~/.bashrc" 中的內(nèi)容,可以使用 "--color=auto" 代替.

提示

在交互式的環(huán)境中,通過"TERM=dumb bash"調(diào)用 shell ,你能夠關(guān)閉這些顏色別名。

9.3.7. 記錄編輯器復(fù)雜的重復(fù)操作動作

你能夠記錄編輯器復(fù)雜的重復(fù)操作動作。

對于 Vim,請按下面操作。

  • "qa": 開始記錄輸入字符到有名字的寄存器 "a".

  • … 編輯器操作

  • "q": 結(jié)束記錄輸入的字符。

  • "@a":執(zhí)行寄存器 "a 的內(nèi)容".

對于 Emacs, 請按下面操作。

  • "C-x (": 開始定義一個鍵盤宏.

  • … 編輯器操作

  • "C-x )":結(jié)束定義一個鍵盤宏.

  • "C-x e": 執(zhí)行一個鍵盤宏.

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 強大的截屏程序
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é) “個人備份” 方案。

9.4. 監(jiān)控、控制和啟動程序活動

程序活動能夠使用特殊的工具監(jiān)控和控制。

表 9.8. 監(jiān)控和控制程序活動工具列表

軟件包 流行度 大小 說明
coreutils V:898, I:999 17372 nice(1): 用指定的調(diào)度優(yōu)先權(quán)運行一個程序
bsdutils V:646, I:999 419 renice(1): 調(diào)整一個目前在運行的進程的調(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):運行一個程序,并從時間消耗方面來報告系統(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" 選項列出被一個系統(tǒng)進程打開的文件
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) 后臺守護進程(daemon)的調(diào)度運行一個進程
anacron V:404, I:475 107 用于非整天 24 小時運行系統(tǒng)的命令計劃,類 cron
at V:136, I:240 169 at(1) 或 batch(1): 在一個特定的時間運行任務(wù)或在某一系統(tǒng)負(fù)載下運行

提示

procps 包提供了非常基礎(chǔ)的監(jiān)控、控制程序活動功能和啟動程序功能。你應(yīng)當(dāng)把他們?nèi)繉W(xué)會。

9.4.1. 進程耗時

顯示 命令調(diào)用進程的時間消耗。

# 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)先級

進程的調(diào)度優(yōu)先級是被一個進程優(yōu)先級值控制。

表 9.9. 調(diào)度優(yōu)先級值列表

進程優(yōu)先級值 調(diào)度優(yōu)先級
19 最低優(yōu)先級進程
0 非常高的普通用戶優(yōu)先級進程
-20 root 用戶非常高的優(yōu)先級進程

# nice  -19 top                                      # very nice
# nice --20 wodim -v -eject speed=2 dev=0,0 disk.img # very fast

在某些情況下,極端的進程優(yōu)先級值會對系統(tǒng)造成傷害。小心使用這個命令。

9.4.3. ps 命令

在 Debian 系統(tǒng)上的 ps(1) 命令同時支持 BSD 和 SystemV 特征,有助于識別靜態(tài)的進程活動。

表 9.10. ps 命令樣式列表

樣式 典型的命令 特征
BSD ps aux 顯示 %CPU %MEM
System V ps -efH 顯示 PPID

對于僵尸(死了的)子進程,你能夠通過 "PPID" 字段的父進程 ID 來殺死它們。

pstree(1) 命令顯示進程樹。

9.4.4. top 命令

Debian 系統(tǒng)上的 top(1) 擁有豐富的特征,有助于識別進程有趣的動態(tài)行為。

它是一個交互式的全屏程序。你可以通過按"h"鍵來得到它的使用幫助,按"q"鍵來終止該程序。

9.4.5. 列出被一個進程打開的文件

你能夠通過一個進程 ID(PID)來列出該進程所有打開的文件,例如,PID 為 1 的進程,使用下面的方式。

$ 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 腳本來生成一個好看的樹形視圖

9.4.7. 識別使用文件和套接字的進程

你可以通過 fuser(1) 來識別出使用文件的進程,例如,用下面的方式識別出 "/var/log/mail.log" 由哪個進程打開。

$ 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) 來識別出使用套接字的進程,例如,用下面的方式識別出 "smtp/tcp" 由哪個進程打開。

$ sudo fuser -v smtp/tcp
                     USER        PID ACCESS COMMAND
smtp/tcp:            Debian-exim   3379 F.... exim4

現(xiàn)在你知道你的系統(tǒng)運行 exim4(8) 來處理連接到 SMTP 端口 (25)的 TCP 連接.

9.4.8. 使用固定間隔重復(fù)一個命令

watch(1) 使用固定間隔重新執(zhí)行一個命令,并全屏顯示輸出。

$ watch w

顯示哪些人登錄到系統(tǒng),每 2 秒鐘更新一次。

9.4.9. 使用文件循環(huán)來重復(fù)一個命令

通過匹配某些條件的文件來循環(huán)重復(fù)一個命令,有幾種方法,例如,匹配全局模式"*.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" 選項并執(zhí)行命令:

find . -type f -maxdepth 1 -name '*.ext' -exec command '{}' \;
  • find(1) 使用 "-exec" 選項并執(zhí)行一個短的 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 啟動一個程序

對于 命令行界面(command-line interface,CLI),$PATH 環(huán)境變量所指定的目錄中第一個匹配相應(yīng)名稱的程序會被執(zhí)行。參見 第 1.5.3 節(jié) “"$PATH" 變量”。

對于遵從 freedesktop.org 標(biāo)準(zhǔn)的 圖形用戶界面(graphical user interface,GUI),/usr/share/applications/ 目錄中的 *.desktop 文件給每個程序的 GUI 菜單顯示提供了必要的屬性。遵從Freedesktop.org xdg 菜單系統(tǒng)的每一個軟件包,通過 "/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"。

舉個例子,chromium.desktop 文件中為 “Chromium 網(wǎng)絡(luò)瀏覽器” 定義了相關(guān)屬性,例如程序名 “Name”,程序執(zhí)行路徑和參數(shù) “Exec”,所使用的圖標(biāo) “Icon” 等等(參見 桌面配置項規(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

這是一個較為簡單的說明。*.desktop 文件像下面那樣被搜尋。

桌面環(huán)境設(shè)置 $XDG_DATA_HOME$XDG_DATA_DIR 環(huán)境變量。舉個例子,在 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 文件將按照這個順序在這些 applications 目錄中進行搜尋。

提示

要建立一個用戶自定義的 GUI 菜單項,需要在 $HOME/.local/share/applications/ 目錄中添加一個 *.desktop 文件。

提示

相似地,如果在這些基準(zhǔn)目錄下的 autostart 目錄中建立了一個 *.desktop 文件,則 *.desktop 文件中指定的程序會在桌面環(huán)境啟動時自動執(zhí)行。參見 Desktop Application Autostart Specification。

提示

相似地,如果在 $HOME/Desktop 目錄中建立了一個 *.desktop 文件并且桌面環(huán)境被配置為支持桌面圖標(biāo)啟動器功能,則點擊圖標(biāo)時指定的程序會被執(zhí)行。請注意,$HOME/Desktop 目錄的實際名稱與語言環(huán)境有關(guān)。參見 xdg-user-dirs-update(1)。

9.4.11. 自定義被啟動的程序

一些程序會被另一個程序自動啟動。下面是自定義該過程的方法。

  • 應(yīng)用程序配置菜單:

    • GNOME3 桌面:“設(shè)置” → “系統(tǒng)” → “詳細(xì)信息” → “默認(rèn)應(yīng)用程序”

    • KDE 桌面: "K" → "Control Center 控制中心" → "KDE Components 組件" → "Component Chooser 組件選擇器"

    • Iceweasel 瀏覽器:“編輯” → “首選項” → “應(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 類型的文件擴展名(參見 run-mailcap(1))

提示

update-mime(8) 會更新 "/etc/mailcap" 文件,期間會用到 "/etc/mailcap.order" 文件 (參見 mailcap.order(5)).

提示

debianutils 軟件包提供 sensible-browser(1)、sensible-editor(1) 和 sensible-pager(1),它們可以分別對要調(diào)用的編輯器、分頁程序和網(wǎng)絡(luò)瀏覽器作出明智的選擇。我建議你閱讀那些 shell 腳本。

提示

為了在 GUI(圖形用戶界面)下運行例如 mutt 這樣的控制臺應(yīng)用程序來作為你的首選應(yīng)用程序,你應(yīng)該像下面那樣建立一個 GUI(圖形用戶界面)應(yīng)用程序并設(shè)置 “/usr/local/bin/mutt-term” 為你想要啟動的首選應(yīng)用程序。

# cat /usr/local/bin/mutt-term <
提示

GUI(圖形用戶界面)應(yīng)用程序能夠很容易的放在特定環(huán)境變量下執(zhí)行,在它相應(yīng)的 *.desktop 文件里面用于"Exec"的程序不定義完整執(zhí)行路徑。你可以啟用非英文鍵盤輸入到 kitty:在安裝需要的輸入方式軟件包后,使用一個 ibusfcitx5 的輸入框架,并按如下方式創(chuàng)建一個 shell 腳本"/usr/local/bin/kitty"。

# cat /usr/local/bin/kitty <

這個 kitty 腳本可以選擇放在"~/bin/" 或 "~/.local/bin/"目錄,只要這些目錄在 "$PATH" 中,比 "/usr/bin/"目錄更早 定義。

9.4.12. 殺死一個進程

使用 kill(1) 通過進程 ID 來殺死(發(fā)送一個信號)一個進程。

使用 killall(1) 或 pkill(1) 通過進程命令的名字或其它屬性來做同樣的事情。

表 9.11. kill 命令常用信號列表

信號值 信號名 操作 注釋
0 --- 沒有信號發(fā)送(參見 kill(2)) 檢查進程是否運行
1 SIGHUP 終止進程 從終端斷開連接(信號 掛起)
2 SIGINT 終止進程 從鍵盤中斷 (CTRL-C)
3 SIGQUIT 終止進程并觸發(fā) dump core 從鍵盤退出 (CTRL-\)
9 SIGKILL 終止進程 不可阻塞的 kill 信號
15 SIGTERM 終止進程 可被阻塞的終止信號

9.4.13. 單次任務(wù)時間安排

運行 at(1) 命令來安排一次性的工作。

$ echo 'command -args'| at 3:40 monday

9.4.14. 定時任務(wù)安排

使用 cron(8) 來進行定時任務(wù)安排。參見 crontab(1) 和 crontab(5).

你能夠作為一個普通用戶定時運行一個進程,比如, foo 使用 "crontab -e" 命令創(chuàng)建一個 crontab(5) 的文件 "/var/spool/cron/crontabs/foo"。

這里是一個 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ù)運行的系統(tǒng),安裝 anacron 軟件包來定時執(zhí)行周期性的命令,命令在接近機器啟動的時間運行,并允許有特定的時間間隔。參見 anacron(8) 和 anacrontab(5).

提示

對于定時系統(tǒng)維護腳本,你能夠以root 賬戶定時運行,把這類腳本放入 "/etc/cron.hourly/", "/etc/cron.daily/", "/etc/cron.weekly/", 或 "/etc/cron.monthly/". 這些腳本的執(zhí)行時間,可以通過 "/etc/crontab" 和 "/etc/anacrontab" 來定制。

cron 后臺守護進程(daemon)不存在時,Systemd 也有按時間計劃運行程序的低級能力。例如, /lib/systemd/system/apt-daily.timer/lib/systemd/system/apt-daily.service 建立每天的 apt 下載行動。參見 systemd.timer(5) 。

9.4.15. Alt-SysRq 鍵

按 Alt-SysRq (PrtScr)組合鍵跟一個字母按鍵,進行不可思議的系統(tǒng)應(yīng)急控制。

表 9.12. 著名的 SAK 命令鍵列表

Alt-SysRq 之后的鍵 行為描述
k kill 殺死在當(dāng)前虛擬控制臺上的所有進程 (SAK)
s sync 同步刷新所有已經(jīng)掛載的文件系統(tǒng)來避免數(shù)據(jù)損壞
u 重新以只讀方式掛載所有已掛載的文件系統(tǒng) (umount)
網(wǎng)站標(biāo)題:【Debian參考手冊】第?9?章?系統(tǒng)技巧
分享網(wǎng)址:http://www.5511xx.com/article/cdcgheg.html