今天是辭職後的第一天,本來想寫寫工作總結,還有許多東西需要整理和學習。這是我繼畢業之後的第二次焦慮和迷茫。希望我能早點找到工作吧!
步入正題,其實,linux要學的東西非常多。不是我分個上、中、下三篇博文就能寫完的。不過,既然弄了個“上”出來,題目我就不改了。這篇就定為“中”吧!如果寫了“下”,還沒寫完,也許會弄個“下續” ,“下續二”出來。^_^ ,也許,寫了這個就沒下了,哈哈!畢竟只是部落格,又沒人約稿,所以,比較隨意。評論幫頂應該算我最大的動力吧!
別名的使用
在上一節中,在查看目前的目錄下的檔案時,我說到了一個 ll 命令,看一樓回複中說,他是
ls -l 命令的別名,不是所有的linux都有。 別名嘛,顧名思義,不同的兩個名字指的是一個人,不同的兩個命令具有相同的作用。現在,你一定很想知道自己的系統中都有哪些別名。[root@localhost ~]#
alias 查詢系統中的別名alias cp='cp -i'alias l.='ls -d .* --color=tty'alias ll='ls -l --color=tty'alias ls='ls --color=tty'alias mv='mv -i'alias rm='rm -i'alias vi='vim'alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde' 如何定義別名,假如我在dos下用習慣了copy 而不想用cp ,那麼就可以為cp 定義一個copy的別名。[root@localhost ~]# alias copy=cp 將cp命令功能賦於給copy[root@localhost ~]# alias drm="rm -rf" 將“ rm -rf ” 命令定義一個drm的別名。 [root@localhost ~]# unalias copy 取消別名
vim/vi編輯器
這一部分應該屬於重點了,關於vi 的東西很多,貌似出過幾本專門講vi的書。有牛人用這個編程式超快。對於我們大多人來說會使用就OK了 vim/vi是一個功能強大的螢幕文字編輯器,是linux、UNIX 上最常用的文字編輯器,他的作用是建立、編輯、顯示文字檔。
vim/vi 沒有菜單,只有命令。
為了便於操作,我們在copy一個有內容的檔案拿來操作。[root@localhost test]# cp /etc/services services.test 拷貝/etc/services檔案到目前的目錄下。 vim是vi 的加強版,當好多使用者還是習慣用vi 來編輯檔案[root@localhost test]# vim services.test 進入檔案
vi 的三種模式:
三種模式的轉換:
命令模式 下輸入 a、i、o進入
插入模式
插入模式 下按ESC進入
命令模式
命令模式 下輸入 : (冒號)進入
編輯模式
編輯模式 下指令錯誤則返回
命令模式
是不是覺得有點兒繞,其實,我們只要記著,vi 進入檔案後,按 i 鍵可以對檔案時行編輯了。編輯完成後,按Esc 鍵退出編輯模式。退出有三中必須要記。:q 是退出(檔案沒發生更改時):q! 不儲存退出(檔案發生改變時):wq 儲存並退出 vim/vi的具體操作
瞭解下面的一些命令,有助於我們快速的編輯和使用vi
命令模式: 命令模式主要使用方向鍵移動游標位置進行文字的編輯,下面列出了常用的操作命令及含義 上、下、左、右鍵盤和 h、j、k、l鍵分別都是移動游標方面的。$ ------------移至行尾0(零) -----移至行首H ----------移至螢幕上端M ----------移至螢幕中央L ----------移至螢幕下端gg ---------到檔案第一行G ----------到檔案末尾PageDn ----- 向下移動一頁PageUp ----- 向上移動一頁d+方向鍵 -----刪除文字dd -----刪除整行pp -----整行複製r -----修改游標所在的字元S -----刪除游標所在的列,並進入輸入模式
插入模式:
可以通過以下命令由“命令模式”進入“插入模式”a------------在當標後附加文本A------------在本行行末附加文本i-------------在游標前插入文本I-------------在本行開始插入文本o------------在游標下插入新行O-----------在游標上插入新行
ESC--------退出“插入模式”
編輯模式:
編輯模式主要進行一些文字編輯協助工具功能,比如字串搜尋、替代、儲存檔案等操作。
:q -----結束Vi程式,如果檔案有過修改,先儲存檔案
:q! -----強制退出Vi程式:wq -----儲存修改並退出程式
:set nu -----使文本每一行前出現行號
:set nonu ------取消每一行前的行號:n ------------到第n行
linux引導流程解析
這一部分屬於理論知識,感興趣的和我一起瞭解一下。 linux的引導流程,也就是linux的啟動過程,啟動順序是是怎樣的,linux為我們啟動了哪些服務。
系統引導流程:
- BIOS自檢
- 啟動GRUB/LILO
- 載入核心
- 執行init進程
- 通過/etc/inittab檔案進行初始化
BIOS自檢 電腦在接通電源之後首先由BIOS進行自檢,即進行所謂的POST(Power On SelfTest),然後依據BIOS內設定的引導順序從硬碟、磁碟片或CDROM中讀入“引導塊”。 在 PC 中,引導 Linux 是從 BIOS 中的地址 0xFFFF0 處開始的。BIOS 的第一個步驟是加電自檢(POST)。POST 的工作是對硬體進行檢測。BIOS 的第二個步驟是進行本地裝置的枚舉和初始化。給定 BIOS 功能的不同用法之後,BIOS 由兩部分組成:POST 代碼和運行時服務。當 POST 完成之後,它被從記憶體中清理了出來,但是 BIOS 運行時服務依然保留在記憶體中,目標作業系統可以使用這些服務。 要引導一個作業系統,BIOS 運行時會按照 CMOS 的設定定義的順序來搜尋處於活動狀態並且可以引導的裝置。引導裝置可以是磁碟片、CD-ROM、硬碟上的某個分區、網路上的某個裝置,甚至是 USB 快閃記憶體。通常,Linux 都是從硬碟上引導的,其中主引導記錄(MBR)中包含主引導載入程式。MBR 是一個 512 位元組大小的扇區,位於磁碟上的第一個扇區中(0 道 0 柱面 1 扇區)。當 MBR 被載入到 RAM 中之後,BIOS 就會將控制權交給 MBR。 提取 MBR 的資訊 要查看 MBR 的內容,請使用下面的命令: # dd if=/dev/hda of=mbr.bin bs=512 count=1 # od -xa mbr.bin 這個 dd 命令需要以 root 使用者的身份運行,它從 /dev/hda(第一個 IDE 盤) 上讀取前 512 個位元組的內容,並將其寫入 mbr.bin 檔案中。od 命令會以十六進位和 ASCII 碼格式列印這個二進位檔案的內容。
啟動GRUB/LILO GRUB和LILO都是引導載入程式。最簡單地講,引導載入程式(boot loader) 會引導作業系統。當機器引導它的作業系統時,BIOS 會讀取引導介質上最前面的 512 位元組(即人們所知的 主引導記錄(master boot record,MBR))。在單一的 MBR 中只能儲存一個作業系統的引導記錄,所以當需要多個作業系統時就會出現問題。所以需要更靈活的引導載入程式。 GRUB 與 LILO 的比較 如本文開始處所述,所有引導載入程式都以類似的方式工作,滿足共同的目的。不過,LILO 和 GRUB 之間有很多不同之處: * LILO 沒有互動式命令介面,而 GRUB 擁有。 * LILO 不支援網路引導,而 GRUB 支援。 * LILO 將關於可以引導的作業系統位置的資訊物理上儲存在 MBR 中。如果修改了 LILO 設定檔,必須將 LILO 第一階段引導載入程式重寫到 MBR。相對於 GRUB,這是一個更為危險的選擇,因為錯誤配置的 MBR 可能會讓系統無法引導。使用 GRUB,如果設定檔配置錯誤,則只是預設轉到 GRUB 命令列介面。 安全提示: 關於安全性,任何可以接觸到引導磁碟/CD 的人,只需要使用沒有設定安全性的 grub.conf 或 lilo.conf,就可以繞過本文中提及的所有安全措施。特別是使用 GRUB 時,因為能夠引導到單一使用者模式,所以是一個嚴重的安全性漏洞。解決此問題的一個簡單方法是在機器的 BIOS 中禁止通過 CD 和磁碟片進行引導,並確保為 BIOS 設定了一個口令,使得其他人不能修改這些設定。
載入核心 當核心映像被載入到記憶體之後,核心階段就開始了。核心映像並不是一個可執行檔核心,而是一個壓縮過的核心映像。通常它是一個 zImage(壓縮映像,小於 512KB)或一個 bzImage(較大的壓縮映像,大於 512KB),它是提前使用 zlib 進行壓縮過的。在這個核心映像前面是一個常式,它實現少量硬體設定,並對核心映像中包含的核心進行解壓,然後將其放入高端記憶體中,如果有初始 RAM 磁碟映像,就會將它移動到記憶體中,並標明以後使用。然後該常式會調用核心,並開始啟動核心引導的過程。 GRUB 中的手工引導 在 GRUB 命令列中,我們可以使用 initrd 映像引導一個特定的核心,方法如下:
[root@localhost hzh]# vi /etc/grub.conf 查看grub.conf的設定檔 grub> kernel /bzImage-2.6.14.2 [Linux-bzImage, setup=0x1400, size=0x29672e] grub> initrd /initrd-2.6.14.2.img [Linux-initrd @ 0x5f13000, 0xcc199 bytes] grub> boot Uncompressing Linux... Ok, booting the kernel.如果您不知道要引導的核心的名稱,只需使用斜線(/)然後按下 Tab 鍵即可。GRUB 會顯示核心和 initrd 映像列表。
執行init進程 init進程是系統所有進程的起點,核心在完成核內引導以後,即在本線程(進程)空間內載入init程式,它的進程號是1。init進程是所有進程的發起者和控制者。因為在任何基於Unix的系統(比如Linux)中,它都是第一個啟動並執行進程,所以init進程的編號(Process ID,PID)永遠是1。如果init出現了問題,系統的其餘部分也就隨之而垮掉了。 init進程有兩個作用。第一個作用是扮演終結父進程的角色。因為init進程永遠不會被終止,所以系統總是可以確信它的存在,並在必要的時候以它為參照。如果某個進程在它衍生出來的全部子進程結束之前被終止,就會出現必須以init為參照的情況。此時那些失去了父進程的子進程就都會以init作為它們的父進程。快速執行一下ps -af 命令,可以列出許多父進程ID(Parent Process ID,PPID)為1的進程來。 init的第二個角色是在進入某個特定的運行層級(Runlevel)時運行相應的程式,以此對各種運行層級進行管理。它的這個作用是由/etc/inittab檔案定義的。
通過/etc/inittab檔案進行初始化 init的工作是根據/etc/inittab來執行相應的指令碼進行系統初始化,如設定鍵盤、字型, 裝載模組,設定網路,等等。 對於RedhatLinux來說,執行的順序為:
/etc/rc.d/rc.sysinit # 由init執行的第一個指令碼
/etc/rc.d/rc.sysinit主要做在各個運行模式中相同的初始化工作,包括:
設定初始的$PATH變數。
配置網路。
為虛擬記憶體啟動交換。
設定系統的主機名稱。
檢查root檔案系統,以進行必要的修複。
檢查root檔案系統的配額。
為root檔案系統開啟使用者和組的配額。
以讀/寫的方式重新裝載root檔案系統。
清除被裝載的檔案系統表/etc/mtab。
把root檔案系統輸入到mtab。
使系統為裝入模組做準備。
尋找模組的相關檔案。
檢查檔案系統,以進行必要的修複。
載入所有其他檔案系統。
清除幾個/etc檔案:/etc/mtab、/etc/fastboot和/etc/nologin。
刪除UUCP的lock檔案。
刪除過時的子系統檔案。
刪除過時的pid檔案。
設定系統時鐘。
開啟交換。
初始化序列埠。
裝入模組。
/etc/rc.d/rcX.d/[KS]
首先終止“K”開頭的服務,然後啟動“S”開頭的服務。 對每一個運行層級來說,在/etc/rc.d子目錄中都有一個對應的下級目錄。這些運行層級的下級子目錄的命名方法是rcX.d,其中的X就是代表運行層級的數字。比如說,運行層級3的全部命令指令碼程式都儲存在/etc/rc.d/rc3.d子目錄中。在各個運行層級的子目錄中,都建立有到/etc/rc.d/init.d子目錄中命令指令碼程式的符號連結,但是,這些符號連結並不使用命令指令碼程式在 /etc/rc.d/init.d子目錄中原來的名字。如果命令指令碼程式是用來啟動一個服務的,其符號連結的名字就以字母S打頭;如果命令指令碼程式是用來關閉一個服務的,其符號連結的名字就以字母K打頭。許多情況下,這些命令指令碼程式的執行順序都很重要。如果沒有先配置網路介面,就沒有辦法使用DNS服務解析主機名稱!為了安排它們的執行順序,在字母S或者 K的後面緊跟著一個兩位元字,數值小的在數值大的前面執行。比如:/etc/rc.d/rc3.d/S50inet就會在 /etc/rc.d/rc3.d/S55named之前執行。存放在/etc/rc.d/init.d子目錄中的、被符號連結上的命令指令碼程式是真正的實幹家,是它們完成了啟動或者停止各種服務的操作過程。當 /etc/rc.d/rc運行通過每個特定的運行層級子目錄的時候,它會根據數位順序依次調用各個命令指令碼程式執行。它先運行以字母K打頭的命令指令碼程式,然後再運行以字母S打頭的命令指令碼程式。對以字母K打頭的命令指令碼程式來說,會傳遞Stop參數;類似地對以字母S打頭的命令指令碼程式來說,會傳遞 Start參數。 執行/etc/ec.d/rc.localRedhat Linux中的運行模式2、3、5都把/etc/rc.d/rc.local做為初始化指令碼中的最後一個,所以使用者可以自己在這個檔案中添加一些需要在其他初始化工作之後,登入之前執行的命令。在維護Linux系統運轉的日子裡,肯定會遇到需要系統管理員對開機或者關機命令指令碼進行修改的情況。如果所做的修改只在引導開機的時候起作用,並且改動不大的話,可以考慮簡單地編輯一下/etc/rc.d/rc.local指令碼。這個命令指令碼程式是在引導過程的最後一步被執行的。 執行 /bin/login 程式 login 程式會提示使用者需輸入帳號及密碼, 接著編碼並確認密碼的正確性, 若二者相合, 則為使用者進行初始化環境, 並將控制權交給 shell,即等待使用者登入。多次為止Linux啟動過程全部結束。
修改原生軟硬體時間 關於,修改系統的軟硬體時間,對新手來說不是特別重要,軟體(指的系統時間)時間很好修改,硬體(指CMOS時間)時間就不知道怎麼修改了。不感興趣的可以無視。
[root@localhost hzh]# date 查看原生軟體時鐘[root@localhost hzh]# hwclock 查看原生硬體時鐘[root@localhost hzh]# hwclock --help--set set the rtc to the time given with --date--hctosys set the system time from the hardware clock --systohc set the hardware clock to the current system time
假如有一個時間是錯的,我們可以通過上面的命令進行修改。[root@localhost hzh]# hwclock --hctosys 設定系統時間與硬體時間對應。[root@localhost hzh]# hwclock --systohc 設定硬體時間與系統時間對應。
假如兩個時間都是錯誤的,我們可以自己設定時間[root@localhost hzh]# hwclock --set --data="月/日/年 時:分:秒"