電腦實用Linux系列教程
本系列教程將完整的講解整個Linu__相關的知識,這是樓主學完兄弟連的Linu__教程之后重新對Linu__知識體系的整理。下面就讓小編帶你去看看電腦實用Linu__系列教程,希望能幫助到大家!
整理了Linu__全套自學教程!
為什么要用Linu__?
Linu__極其強大,可以讓聰明人干任何他們想干的事情。
Linu__ 從誕生之日起,它的工作方式就比 Windows 的先進。
Linu__ 屬于能勇敢面對符號的人。只有符號才能完全操縱計算機。
歐美發(fā)達國家的傳統(tǒng)科研單位、黑客們從幾十年前就從事這些行當了,使用Linu__/Uni__的習慣延續(xù)至今。
鼠標雖然是很好的工具,但是它的表達能力是有限的。
你不可能光用鼠標就讓電腦完全明白你的意思,它畢竟只有3個按鈕。所以我們雖然很喜歡鼠標,但是卻不能完全依賴它。
熟練的Linu__黑客可以很快敲出一行命令,組合系統(tǒng)里面的各種工具來完成一個任務。很多工具本身就是一個黑客工具,壓根就沒考慮windows用戶們,在圖形界面下用起來反而非常麻煩。圖形界面的優(yōu)勢是數(shù)據(jù)展示方式多樣,劣勢是從使用者的角度看,它混淆了數(shù)據(jù)展示和數(shù)據(jù)本身。
在Linu__大量工作抽象地看是這樣的:
把一堆數(shù)據(jù)扔進一個程序,得到另一堆數(shù)據(jù),再扔進另一個程序……
不用關心數(shù)據(jù)展示,它要的是數(shù)據(jù)本身。
什么是 Windows 能干而 Linu__ 干不了的事情?
“Windows 能干而 Linu__ 干不了的事情,那就是不需要干的事情。”
幾乎所有科學計算程序,EDA 程序,高性能圖像處理程序都不是基于 Windows 的。
消除學計算機很難的幻覺,勇敢的拿起像 bash, FVWM, Te__, VIM, Emacs, Mutt ……這樣強大的程序,勇敢的面對符號。不要再埋怨“Linu__ 為什么不能像 Windows 那樣”,不要再浪費時間試用這樣那樣的程序,不要再忙著升級。你需要理解 UNI__ 的工作方式,因為那是大多數(shù)科學家的工作方式。
Linu__入門教程:Linu__開機啟動過程淺析
asic Input/Output System),完成一些系統(tǒng)的完整性檢查、搜索、
加載并且執(zhí)行引導程序(boot loader), 它在軟盤,CD-ROM或者硬盤上尋找引導程序。你可以在
系統(tǒng)啟動時按下鍵盤(通常是F12或者F2,但是因系統(tǒng)而異)來修改啟動順序
一旦引導程序被檢測到并且加載到內(nèi)存,BIOS會將控制權移交給它
MBR
MBR表示主引導記錄(Master Boot Record)
用于加載并執(zhí)行GRUB
GRUB
GRUB是多重引導管理器(GRand Unified Bootloader)
執(zhí)行 /etc/grub.conf, 加載內(nèi)核鏡像
vim /etc/grub.conf
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.__pm.gz
hiddenmenu
title CentOS 6 (2.6.32-504.el6.__86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-504.el6.__86_64 ro root=/dev/mapper/vg_ddz-lv_root rd_NO_LUKS rd_NO_MD rd_LVM_LV=vg_ddz/lv_root crashkernel=128M.UTF-8 rd_LVM_LV=vg_ddz/lv_swap KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
initrd /initramfs-2.6.32-504.el6.__86_64.img
Kernel
執(zhí)行內(nèi)核首個進程 /sbin/init, 進程號為1, 是接下來所有其它進程的父進程
initrd表示Initial RAM Disk
initrd被內(nèi)核用作臨時的根目錄,直到內(nèi)核啟動完成并且真正的根目錄掛載成功。
它也包括一些編譯好的必要的驅(qū)動程序,這些程序有助于它訪問硬盤和其他硬件
Init
執(zhí)行 /etc/inittab, 來確定啟動級別
vim /etc/intttab
# Default runlevel. The runlevels used are:
# 0 - halt (Do NOT set initdefault to this)
# 1 - Single user mode
# 2 - Multiuser, without NFS (The same as 3, if you do not have networking)
# 3 - Full multiuser mode (終端模式)
# 4 - unused
# 5 - __11(圖形用戶界面)
# 6 - reboot (Do NOT set initdefault to this)
#
id:5:initdefault:執(zhí)行 /etc/rc.d/rc.sysinit, 來啟動系統(tǒng)進程,比如說NetWork
RunLevel
執(zhí)行啟動級別相對應的一系列系統(tǒng)服務
對應啟動級別的目錄如下
ll /etc/rc.d/
drw__r-__r-__. 2 root root 4096 11月 29 09:49 rc0.d
drw__r-__r-__. 2 root root 4096 11月 29 09:49 rc1.d
drw__r-__r-__. 2 root root 4096 3月 10 17:18 rc2.d
drw__r-__r-__. 2 root root 4096 3月 10 17:18 rc3.d
drw__r-__r-__. 2 root root 4096 3月 10 17:18 rc4.d
drw__r-__r-__. 2 root root 4096 3月 10 17:18 rc5.d
drw__r-__r-__. 2 root root 4096 11月 29 09:49 rc6.d
RunDefinition
最后執(zhí)行 /etc/rc.d/rc.local, 來運行自定義的服務
vim /etc/rc.d/rc.local
1 #!/bin/sh
2 #
3 # This script will be e__ecuted __after__ all the other init scripts.
4 # You can put your own initialization stuff in here if you don't
5 # want to do the full Sys V style init stuff.
6
7 touch /var/lock/subsys/local
8 if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
9 echo never > /sys/kernel/mm/transparent_hugepage/enabled
10 fi
11 if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
12 echo never > /sys/kernel/mm/transparent_hugepage/defrag
13 fi
14
15 /bin/bash /usr/local/apps/kylin/bin/kylin.sh start
其中第15行為自定義啟動腳本
Final
Linu__終端神器tmu__使用教程
一、Tmu__ 是什么?
1.1 會話與進程
命令行的典型使用方式是,打開一個終端窗口(terminal window,以下簡稱"窗口"),在里面輸入命令。用戶與計算機的這種臨時的交互,稱為一次"會話"(session) 。
會話的一個重要特點是,窗口與其中啟動的進程是連在一起的。打開窗口,會話開始;關閉窗口,會話結束,會話內(nèi)部的進程也會隨之終止,不管有沒有運行完。
一個典型的例子就是,SSH 登錄遠程計算機,打開一個遠程窗口執(zhí)行命令。這時,網(wǎng)絡突然斷線,再次登錄的時候,是找不回上一次執(zhí)行的命令的。因為上一次 SSH 會話已經(jīng)終止了,里面的進程也隨之消失了。
為了解決這個問題,會話與窗口可以"解綁":窗口關閉時,會話并不終止,而是繼續(xù)運行,等到以后需要的時候,再讓會話"綁定"其他窗口。
1.2 Tmu__ 的作用
Tmu__ 就是會話與窗口的"解綁"工具,將它們徹底分離。
(1)它允許在單個窗口中,同時訪問多個會話。這對于同時運行多個命令行程序很有用。
(2) 它可以讓新窗口"接入"已經(jīng)存在的會話。
(3)它允許每個會話有多個連接窗口,因此可以多人實時共享會話。
(4)它還支持窗口任意的垂直和水平拆分。
類似的終端復用器還有 GNU Screen。Tmu__ 與它功能相似,但是更易用,也更強大。
二、基本用法
2.1 安裝
Tmu__ 一般需要自己安裝。
# Ubuntu 或 Debian$ sudo apt-get install tmu__# CentOS 或 Fedora$ sudo yum install tmu__# Mac$ brew install tmu__
2.2 啟動與退出
安裝完成后,鍵入tmu__命令,就進入了 Tmu__ 窗口。
$ tmu__
上面命令會啟動 Tmu__ 窗口,底部有一個狀態(tài)欄。狀態(tài)欄的左側是窗口信息(編號和名稱),右側是系統(tǒng)信息。
按下Ctrl+d或者顯式輸入e__it命令,就可以退出 Tmu__ 窗口。
$ e__it
2.3 前綴鍵
Tmu__ 窗口有大量的快捷鍵。所有快捷鍵都要通過前綴鍵喚起。默認的前綴鍵是Ctrl+b,即先按下Ctrl+b,快捷鍵才會生效。
舉例來說,幫助命令的快捷鍵是Ctrl+b ?。它的用法是,在 Tmu__ 窗口中,先按下Ctrl+b,再按下?,就會顯示幫助信息。
然后,按下 ESC 鍵或q鍵,就可以退出幫助。
三、會話管理
3.1 新建會話
第一個啟動的 Tmu__ 窗口,編號是0,第二個窗口的編號是1,以此類推。這些窗口對應的會話,就是 0 號會話、1 號會話。
使用編號區(qū)分會話,不太直觀,更好的方法是為會話起名。
$ tmu__ new -s
上面命令新建一個指定名稱的會話。
3.2 分離會話
在 Tmu__ 窗口中,按下Ctrl+b d或者輸入tmu__ detach命令,就會將當前會話與窗口分離。
$ tmu__ detach
上面命令執(zhí)行后,就會退出當前 Tmu__ 窗口,但是會話和里面的進程仍然在后臺運行。
tmu__ ls命令可以查看當前所有的 Tmu__ 會話。
$ tmu__ ls# or$ tmu__ list-session
3.3 接入會話
tmu__ attach命令用于重新接入某個已存在的會話。
# 使用會話編號$ tmu__ attach -t 0# 使用會話名稱$ tmu__ attach -t
3.4 殺死會話
tmu__ kill-session命令用于殺死某個會話。
# 使用會話編號$ tmu__ kill-session -t 0# 使用會話名稱$ tmu__ kill-session -t
3.5 切換會話
tmu__ switch命令用于切換會話。
# 使用會話編號$ tmu__ switch -t 0# 使用會話名稱$ tmu__ switch -t
3.6 重命名會話
tmu__ rename-session命令用于重命名會話。
$ tmu__ rename-session -t 0
上面命令將0號會話重命名。
3.7 會話快捷鍵
下面是一些會話相關的快捷鍵。
Ctrl+b d:分離當前會話。
Ctrl+b s:列出所有會話。
Ctrl+b $:重命名當前會話。
四、最簡操作流程
綜上所述,以下是 Tmu__ 的最簡操作流程。
新建會話tmu__ new -s my_session。
在 Tmu__ 窗口運行所需的程序。
按下快捷鍵Ctrl+b d將會話分離。
下次使用時,重新連接到會話tmu__ attach-session -t my_session。
五、窗格操作
Tmu__ 可以將窗口分成多個窗格(pane),每個窗格運行不同的命令。以下命令都是在 Tmu__ 窗口中執(zhí)行。
5.1 劃分窗格
tmu__ split-window命令用來劃分窗格。
# 劃分上下兩個窗格$ tmu__ split-window# 劃分左右兩個窗格$ tmu__ split-window -h
5.2 移動光標
tmu__ select-pane命令用來移動光標位置。
# 光標切換到上方窗格$ tmu__ select-pane -U# 光標切換到下方窗格$ tmu__ select-pane -D# 光標切換到左邊窗格$ tmu__ select-pane -L# 光標切換到右邊窗格$ tmu__ select-pane -R
5.3 交換窗格位置
tmu__ swap-pane命令用來交換窗格位置。
# 當前窗格上移$ tmu__ swap-pane -U# 當前窗格下移$ tmu__ swap-pane -D
5.4 窗格快捷鍵
下面是一些窗格操作的快捷鍵。
Ctrl+b %:劃分左右兩個窗格。
Ctrl+b ":劃分上下兩個窗格。
Ctrl+b :光標切換到其他窗格。是指向要切換到的窗格的方向鍵,比如切換到下方窗格,就按方向鍵↓。
Ctrl+b ;:光標切換到上一個窗格。
Ctrl+b o:光標切換到下一個窗格。
Ctrl+b {:當前窗格左移。
Ctrl+b }:當前窗格右移。
Ctrl+b Ctrl+o:當前窗格上移。
Ctrl+b Alt+o:當前窗格下移。
Ctrl+b __:關閉當前窗格。
Ctrl+b !:將當前窗格拆分為一個獨立窗口。
Ctrl+b z:當前窗格全屏顯示,再使用一次會變回原來大小。
Ctrl+b Ctrl+:按箭頭方向調(diào)整窗格大小。
Ctrl+b q:顯示窗格編號。
六、窗口管理
除了將一個窗口劃分成多個窗格,Tmu__ 也允許新建多個窗口。
6.1 新建窗口
tmu__ new-window命令用來創(chuàng)建新窗口。
$ tmu__ new-window# 新建一個指定名稱的窗口$ tmu__ new-window -n
6.2 切換窗口
tmu__ select-window命令用來切換窗口。
# 切換到指定編號的窗口$ tmu__ select-window -t # 切換到指定名稱的窗口$ tmu__ select-window -t
6.3 重命名窗口
tmu__ rename-window命令用于為當前窗口起名(或重命名)。
$ tmu__ rename-window
6.4 窗口快捷鍵
下面是一些窗口操作的快捷鍵。
Ctrl+b c:創(chuàng)建一個新窗口,狀態(tài)欄會顯示多個窗口的信息。
Ctrl+b p:切換到上一個窗口(按照狀態(tài)欄上的順序)。
Ctrl+b n:切換到下一個窗口。
Ctrl+b :切換到指定編號的窗口,其中的是狀態(tài)欄上的窗口編號。
Ctrl+b w:從列表中選擇窗口。
Ctrl+b ,:窗口重命名。
Linu__ 日志終極指南
Linu__ 日志分析
雖然提取的時候,不總是和你想的一樣簡單,但是日志中有大量信息在等著你。在這部分,我們會講一些基本分析示例,你可以馬上拿來處理你的日志(只是搜索里面有什么)。我們還會講一些高級分析方法,開始的時候可能要花時間來做配置,但會為以后省很多時間。你可以把高級分析的示例用在待解析的數(shù)據(jù)上,比如生成摘要計數(shù),過濾字段值等。
首先我們會演示,你應該如何使用不同的工具在命令行進行日志分析;然后,演示一個日志管理工具,它能夠讓大多數(shù)乏味的工作變得自動化和高效。
使用 Grep 搜索
搜索文本是找到你想要的信息的最基本方法。搜索文本最常用的工具是 grep 。這個命令行工具,大多數(shù) Linu__ 發(fā)行版上都有,它支持你用正則表達式來搜索日志。正則表達式是一種用專門語言寫成的語句,可用來識別匹配文本。最簡單的正則表達式是把你搜索的字符串加上引號。
正則表達式
這里有個例子,它在 Ubuntu 的認證日志里搜索 “user hoover”:
$ GREP "USER HOOVER" /VAR/LOG/AUTH.LOG
ACCEPTED PASSWORD FOR HOOVER FROM 10.0.2.2 PORT 4792 SSH2
PAM_UNI__(SSHD:SESSION): SESSION OPENED FOR USER HOOVER BY (UID=0)
PAM_UNI__(SSHD:SESSION): SESSION CLOSED FOR USER HOOVER
構造精確的正則表達式很難。例如,假設我們搜索一個數(shù)字,比如端口號“4792” ,它也可以匹配時間戳,URLs和其他不需要的數(shù)據(jù)。在下面針對 Ubuntu 的例子里,它匹配了 Apache 日志,但這并不是我們想要的。
$ grep "4792" /var/log/auth.log
Accepted password for hoover from 10.0.2.2 port 4792 ssh2
74.91.21.46 - - [31/Mar/2015:19:44:32 +0000] "GET /scripts/samples/search?q=4972HTTP/1.0" 404 545 "-" "-”
延伸搜索
另一個有用的技巧是你可以用grep 做延伸搜索。它會輸出匹配項的前幾行和后幾行內(nèi)容。它可以幫你調(diào)試是什么導致了錯誤或問題。B 選項指定顯示匹配項前面的行數(shù),A 選項指定顯示匹配項后面的行數(shù)。如下所示,我們看到,當有人以 admin 身份登陸失敗后, 反向映射也會失敗,這說明他們可能沒有有效的域名。這很可疑!
$ grep -B 3 -A 2 'Invalid user' /var/log/auth.log
Apr 28 17:06:20 ip-172-31-11-241 sshd[12545]: reverse mapping checking getaddrinfo for 216-19-2-8.commspeed.net[216.19.2.8] failed - POSSIBLE BREAK-IN ATTEMPT!
Apr 28 17:06:20 ip-172-31-11-241 sshd[12545]: Received disconnect from 216.19.2.8: 11: Bye Bye [preauth]
Apr 28 17:06:20 ip-172-31-11-241 sshd[12547]: Invalid user; admin from 216.19.2.8
Apr 28 17:06:20 ip-172-31-11-241 sshd[12547]: input_userauth_request: invalid user admin [preauth]
Apr 28 17:06:20 ip-172-31-11-241 sshd[12547]: Received disconnect from 216.19.2.8: 11: Bye Bye [preauth]
Tail命令
你也可以將 tail 和 grep 搭配起來使用,以獲取文件最后幾行,或者跟蹤日志并實時打印。當你在進行交互式更改比如架設服務器或測試代碼更改的時候,非常有用。
$ tail -f /var/log/auth.log | grep 'Invalid user'
Apr 30 19:49:48 ip-172-31-11-241 sshd[6512]: Invalid user ubnt from 219.140.64.136
Apr 30 19:49:49 ip-172-31-11-241 sshd[6514]: Invalid user; admin from 219.140.64.136
全面介紹 grep 和正則表達式超出了本文的范圍,Ryan 的教程里有更深入的介紹。
日志管理系統(tǒng)中有更高效更強大的搜索工具。它們通常對數(shù)據(jù)建立索引和并行查詢,因此你可以在數(shù)秒之內(nèi)快速查詢高達 G 字節(jié)或 T 字節(jié)的日志。相比之下,用 grep ,可能要花幾分鐘,極端情況下會花費數(shù)小時。日志管理系統(tǒng)也像 Lucene (譯注:一個開源的全文檢索引擎工具包)一樣使用查詢語言 ,它為數(shù)字,字段等的搜索提供了簡單的語法。
用Cut,AWK 和 Grok 解析日志
命令行工具
Linu__ 提供了幾種文本解析和分析的命令行工具。如果你想快速解析少量的數(shù)據(jù),它們很強大,但是處理大量數(shù)據(jù)要花很長時間。
Cut 命令
cut 命令可以從帶分隔符的日志中解析字段。分隔符是類似等號或逗號的字符,用來劃分字段或鍵值對。
比如說,我們想從這個日志中提取用戶名:
pam_uni__(su:auth): authentication failure; logname=hoover uid=1000 euid=0 tty=/dev/pts/0 ruser=hoover rhost= user=root
我們可以和下面一樣使用 cut 命令,獲取第八個等號后邊的文本。這是 Ubuntu 上的例子:
$ grep "authentication failure" /var/log/auth.log | cut -d '=' -f 8
root
hoover
root
nagios
nagios
AWK 命令
此外,你還可以用 awk,它擁有更強的解析字段的功能。它提供了一個腳本語言,讓你幾乎可以過濾出任何毫不相關的信息。
舉個例子,假設我們在 Ubuntu 上有如下的日志,我們想提取登陸失敗的用戶名:
Mar 24 08:28:18 ip-172-31-11-241 sshd[32701]: input_userauth_request: invalid user guest [preauth]
下面是使用 awk 的例子。首先,用一個正則表達式 /sshd.__invalid user/ 匹配 sshd 無效用戶的那一行。然后使用 { print } 打印第九個字段(默認的分隔符是空格)。這樣就輸出了用戶名。
$ awk '/sshd.__invalid user/ { print }' /var/log/auth.log
guest
admin
info
test
ubnt
你可以從 Awk 用戶指南中獲取更多關于如何使用正則表達式和打印字段的信息。
日志管理系統(tǒng)
日志管理系統(tǒng)讓解析更容易并且讓用戶可以快速分析大量日志文件。它們可以自動解析標準日志格式,比如公共 Linu__ 日志或 web 服務日志。這會節(jié)省很多時間,因為你在定位系統(tǒng)問題的時候不用去想如何寫你的解析邏輯。
這里你可以看一個來自 sshd 的日志信息,解析出了遠程主機和用戶字段。這個截圖來自 Loggly,一個基于云計算的日志管理服務。
對非標準格式的日志,你也可以自定義解析規(guī)則。最常用的工具是 Grok,它用通用正則表達式庫把純文本解析成 JSON 格式。這是 Grok 的配置示例,用來解析 Logstash 的內(nèi)核日志 :
filter{
grok {
match => {"message" => "%{CISCOTIMESTAMP:timestamp} %{HOST:host} %{WORD:program}%{NOTSPACE} %{NOTSPACE}%{NUMBER:duration}%{NOTSPACE} %{GREEDYDATA:kernel_logs}"
}
}
這是用 Grok 解析后輸出的結果:
使用 Rsyslog 和 AWK 過濾
過濾是搜索特定的字段,而不是全部文本。這讓你的日志分析更精確,因為它會忽略其他不需要的日志信息。為了搜索一個字段值,你需要先解析你的日志或者至少有一種基于事件結構的搜索方法。
如何篩選出同一個應用的日志
通常,你只想看來自同一個應用的日志。如果你的應用總是把日志記錄在單個文件中,這樣很容易分析。如果你要從聚合或集中起來的日志里篩選出和某個程序相關的日志,會很復雜。這里有幾種解決的辦法。
用 Rsyslog 服務解析和過濾日志。這個例子是將 sshd 應用程序的日志寫入名為 sshd-messages 的文件中,然后丟棄事件,所以它不會在其他日志里重復出現(xiàn)。你可以把它加到你的 Rsyslog.conf 文件里試一下。
:programname, isequal, “sshd” /var/log/sshd-messages
&~
使用命令行工具比如 awk ,提取特定字段的值,比如取 sshd 用戶名。這是 Ubuntu 上的例子。
$ awk '/sshd.__invalid user/ { print }' /var/log/auth.log
guestadmin
info
test
ubnt
使用日志管理系統(tǒng)自動解析你的日志,然后點擊目標應用的名字進行過濾。這個截圖顯示了 syslog 的各個字段,在一個叫做 Loggly 的日志管理服務中。如圖中文氏圖所示,當前正在過濾 sshd 這個應用。
如何篩選出錯誤信息
最常見的事情是,人們想看到日志中的錯誤。不巧的是,默認的 syslog 配置不會直接輸出錯誤的級別,這使得錯誤信息很難被篩選。
這里有兩種方案來解決這個問題。首先,你可以修改 rsyslog 配置,讓它輸出級別到日志文件中,使得錯誤信息容易被讀取和搜索。在你的 Rsyslog 配置中你可以加一個pri-te__t 模版,如下所示:
" : %timegenerated%,%HOSTNAME%,%syslogtag%,%msg%n"
這個例子的輸出如下,可以看到級別是 err。
: Mar 11 18:18:00,hoover-VirtualBo__,su[5026]:, pam_authenticate: Authentication failure
你可以用 awk 或grep 篩選出錯誤信息。這是 Ubuntu 下的例子,我們加了開始結束標志 . 和 > ,這樣它就只匹配這個字段。
$ grep '.err>' /var/log/auth.log
: Mar 11 18:18:00,hoover-VirtualBo__,su[5026]:, pam_authenticate: Authentication failure
第二種選擇是使用日志管理系統(tǒng)。好的日志管理系統(tǒng)會自動解析 syslog 消息并提取出級別字段。只需點一下,就會按指定的級別篩選日志。
這是 Loggly 的截圖。顯示了 syslog 各個字段, Error 級別高亮顯示了,說明正在按級別 Error 過濾
電腦實用Linu__系列教程相關文章: