av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

【Debian參考手冊(cè)】第?9?章?系統(tǒng)技巧

目錄

9.1. 控制臺(tái)技巧
9.1.1. 清晰的記錄 shell 活動(dòng)
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. 日志后臺(tái)守護(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ù)操作動(dòng)作
9.3.8. 記錄 X 應(yīng)用程序的圖像
9.3.9. 記錄配置文件的變更
9.4. 監(jiān)控、控制和啟動(dòng)程序活動(dòng)
9.4.1. 進(jìn)程耗時(shí)
9.4.2. 調(diào)度優(yōu)先級(jí)
9.4.3. ps 命令
9.4.4. top 命令
9.4.5. 列出被一個(gè)進(jìn)程打開的文件
9.4.6. 跟蹤程序活動(dòng)
9.4.7. 識(shí)別使用文件和套接字的進(jìn)程
9.4.8. 使用固定間隔重復(fù)一個(gè)命令
9.4.9. 使用文件循環(huán)來重復(fù)一個(gè)命令
9.4.10. 從 GUI 啟動(dòng)一個(gè)程序
9.4.11. 自定義被啟動(dòng)的程序
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. 硬件識(shí)別
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ù)存儲(chǔ)技巧
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. 通過超級(jí)塊(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í)存儲(chǔ)目錄
9.6.13. 通過 LVM 擴(kuò)展可用存儲(chǔ)空間
9.6.14. 通過掛載另一個(gè)分區(qū)來擴(kuò)展可用存儲(chǔ)空間
9.6.15. 通過 “mount --bind” 掛載另一個(gè)目錄來擴(kuò)展可用存儲(chǔ)空間
9.6.16. 通過 overlay 掛載(overlay-mounting)另一個(gè)目錄來擴(kuò)展可用存儲(chǔ)空間
9.6.17. 使用符號(hào)鏈接擴(kuò)展可用存儲(chǔ)空間
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 加密移動(dòng)磁盤
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ū)動(dòng)和固件
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)的基本技巧,大部分在控制臺(tái)操作。

9.1. 控制臺(tái)技巧

有一些工具程序來幫助你的控制臺(tái)活動(dòng)。

表 9.1. 支持控制臺(tái)活動(dòng)的程序列表

軟件包 流行度 大小 說明
mc V:57, I:230 1508 參見 第 1.3 節(jié) “Midnight Commander (MC)”
bsdutils V:646, I:999 419 script 命令來記錄終端會(huì)話的原始輸入輸出
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 在源代碼樹中快速遞歸搜索字符串,并自動(dòng)過濾

9.1.1. 清晰的記錄 shell 活動(dòng)

簡單地使用 script(1) (參見 第 1.4.9 節(jié) “記錄 shell 活動(dòng)”)記錄 shell 活動(dòng)會(huì)產(chǎn)生一個(gè)有控制字符的文件。這些控制字符可以按下面的方式,使用 col(1) 去掉。

$ script
Script started, file is typescript

做些操作……按 Ctrl-D 退出 script.

$ col -bx < typescript > cleanedfile
$ vim cleanedfile

有替代的方式來記錄 shell 活動(dòng):

  • 使用 tee (在 initramfs 的啟動(dòng)過程中可用):

    $ sh -i 2>&1 | tee typescript
  • 使用 gnome-terminal 增加行緩沖,用滾動(dòng)條查看。

  • 使用 screen 和 "^A H" (參見 第 9.1.2 節(jié) “screen 程序”)來進(jìn)行控制臺(tái)記錄。

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

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

9.1.2. screen 程序

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

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

  2. 在單個(gè)控制臺(tái)上啟動(dòng) screen

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

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

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

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

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

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

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

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

  8. 使用 "screen -r" 啟動(dòng) screen.

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

提示

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

screen 會(huì)話里,除了命令按鍵外的所有鍵盤輸入都會(huì)被發(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 號(hào)窗口
^A 1 到 1 號(hào)窗口
^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 會(huì)話
^A DD 分離 screen 會(huì)話并退出登錄

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

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

9.1.3. 在目錄間游走

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

如果你使用模糊文本過濾程序,你能夠不輸入精準(zhǔn)路徑。對(duì)于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,將會(huì)縮窄候選路徑。通過有光標(biāo)和回車鍵的 cd,你選擇將要使用的路徑。

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

9.1.4. Readline 封裝

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

 $ rlwrap dash -i

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

9.1.5. 掃描源代碼樹

ripgrep 軟件包中的 rg(1) 命令,在掃描源代碼樹的典型場景中,提供了一個(gè)比 grep(1) 命令更快速的替代。它充分利用了現(xiàn)代多核 CPU,并自動(dòng)使用適當(dāng)?shù)倪^濾器來忽略一些文件。

9.2. 定制 vim

在你通過 第 1.4.8 節(jié) “使用 vim” 學(xué)習(xí)基本的vim(1) 后,請(qǐng)閱讀 Bram Moolenaar 的"Seven habits of effective text editing (2000)" 來理解 vim 應(yīng)當(dāng)怎樣被使用。

小心

沒有非常好的理由,請(qǐ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 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

為了使上面的按鍵綁定正確地運(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",會(huì)被放到 ~/.vim/pack/*/opt/name 和類似的地方。

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

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

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

更多信息,請(qǐng)使用 "vim --startuptime vimstart.log" 啟動(dòng) 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. 日志后臺(tái)守護(hù)進(jìn)程(daemon)

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

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

許多新的程序使用 systemd-journald(8) 日志服務(wù)的二進(jìn)制文件格式來記錄它們的活動(dòng),在"/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é) “文本編輯器”)是用途最廣的,且可定制性最高。

提示

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

9.3.4. 定制時(shí)間和日期的顯示

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

每個(gè)語言環(huán)境實(shí)際的默認(rèn)顯示格式取決于所使用的 C 標(biāo)準(zhǔn)庫的版本(libc6 軟件包),也就是說,不同的 Debian 發(fā)行版有不同的默認(rèn)情況。對(duì)于 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 Cen_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)境中,通過"TERM=dumb bash"調(diào)用 shell ,你能夠關(guān)閉這些顏色別名。

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

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

對(duì)于 Vim,請(qǐng)按下面操作。

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

  • … 編輯器操作

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

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

對(duì)于 Emacs, 請(qǐng)按下面操作。

  • "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)控、控制和啟動(dòng)程序活動(dòng)

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

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

軟件包 流行度 大小 說明
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)活動(dò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)用和信號(hà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) 后臺(tái)守護(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)行

提示

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

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í)

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

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

進(jìn)程優(yōu)先級(jí)值 調(diào)度優(yōu)先級(jí)
19 最低優(yōu)先級(jí)進(jìn)程
0 非常高的普通用戶優(yōu)先級(jí)進(jìn)程
-20 root 用戶非常高的優(yōu)先級(jí)進(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)先級(jí)值會(huì)對(duì)系統(tǒng)造成傷害。小心使用這個(gè)命令。

9.4.3. ps 命令

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

表 9.10. ps 命令樣式列表

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

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

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

9.4.4. top 命令

Debian 系統(tǒng)上的 top(1) 擁有豐富的特征,有助于識(shí)別進(jìn)程有趣的動(dòng)態(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. 跟蹤程序活動(dòng)

你能夠跟蹤程序活動(dòng),使用strace(1), ltrace(1), xtrace(1) 來跟蹤系統(tǒng)調(diào)用和信號(hà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. 識(shí)別使用文件和套接字的進(jìn)程

你可以通過 fuser(1) 來識(shí)別出使用文件的進(jìn)程,例如,用下面的方式識(shí)別出 "/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) 來識(shí)別出使用套接字的進(jìn)程,例如,用下面的方式識(shí)別出 "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) 更多高級(jí)的用法,參見 第 10.1.5 節(jié) “查找文件的語法”.

9.4.10. 從 GUI 啟動(dòng)一個(gè)程序

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

對(duì)于遵從 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),需要在 $HOME/.local/share/applications/ 目錄中添加一個(gè) *.desktop 文件。

提示

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

提示

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

9.4.11. 自定義被啟動(dòng)的程序

一些程序會(huì)被另一個(gè)程序自動(dòng)啟動(dòng)。下面是自定義該過程的方法。

  • 應(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))

提示

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

提示

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

提示

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

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

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

# cat /usr/local/bin/kitty <

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

9.4.12. 殺死一個(gè)進(jìn)程

使用 kill(1) 通過進(jìn)程 ID 來殺死(發(fā)送一個(gè)信號(hào))一個(gè)進(jìn)程。

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

表 9.11. kill 命令常用信號(hào)列表

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

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
提示

對(duì)那些非連續(xù)運(yùn)行的系統(tǒng),安裝 anacron 軟件包來定時(shí)執(zhí)行周期性的命令,命令在接近機(jī)器啟動(dòng)的時(shí)間運(yùn)行,并允許有特定的時(shí)間間隔。參見 anacron(8) 和 anacrontab(5).

提示

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

cron 后臺(tái)守護(hù)進(jìn)程(daemon)不存在時(shí),Systemd 也有按時(shí)間計(jì)劃運(yùn)行程序的低級(jí)能力。例如, /lib/systemd/system/apt-daily.timer/lib/systemd/system/apt-daily.service 建立每天的 apt 下載行動(dòng)。參見 systemd.timer(5) 。

9.4.15. Alt-SysRq 鍵

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

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

<tt id="io73r"><abbr id="io73r"></abbr></tt>

    Alt-SysRq 之后的鍵 行為描述
    k kill 殺死在當(dāng)前虛擬控制臺(tái)上的所有進(jìn)程 (SAK)
    s sync 同步刷新所有已經(jīng)掛載的文件系統(tǒng)來避免數(shù)據(jù)損壞
    u 重新以只讀方式掛載所有已掛載的文件系統(tǒng) (umount)
    標(biāo)題名稱:【Debian參考手冊(cè)】第?9?章?系統(tǒng)技巧
    文章來源:http://uogjgqi.cn/article/cdcgheg.html
    掃二維碼與項(xiàng)目經(jīng)理溝通

    我們?cè)谖⑿派?4小時(shí)期待你的聲音

    解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流

  • <sup id="io73r"><rp id="io73r"></rp></sup>