歡迎您光臨本站 註冊首頁

奉獻Red Hat Linux 033 實驗翻譯(KevinZ)

←手機掃碼閱讀     火星人 @ 2014-03-24 , reply:0

首先進去linux的rescue的模式!
然後使用如下的命令:
rpm -qf --root /mnt/sysimage /etc/inittab
查出該文件屬於哪個RPM包!
然後重新安裝這個rpm包!
rpm -ivh --force --root /mnt/sysimage /mnt/source/Redhat/RPMS/packagename
sync
sync
sync
exit

###請轉貼時保留以下內容######
Red Hat Linux Troubleshooting 系統啟動部分概要
請提出寶貴意見Mail:[email protected]
KevinZ(kissingwolf)
2004.4.15
#############################

#######################
# #
####################### #
# # #
# 當電源被按下 # #
# ##
#######################

當電源Power按下后,計算機開始自檢看什麼CPU、內存、顯卡的是否都安上了!如果這裡過不去就不用我說了吧!該換什麼就換什麼,插插拔拔的工作要仔細!現在的主板什麼排錯燈、語音提示的不一而足,想當年我們那望聞問切的功夫都不用了,很懷念那小喇叭的嘟嘟聲!


#######################
# #
####################### #
# # #
# 當開始BIOS自檢 # #
# ##
#######################

對我們系統管理員來說BIOS就作了兩件事,一是按照CMOS里的方案配置和驅動底層設備,二是把控制權交給驅動設備(軟碟機、硬碟、光碟機等)
這裡要注意的就是確認CMOS里的方案是否配置正確,驅動設備是否連接正常、是否是我們需要的啟動設備!

#######################
# #
####################### #
# # #
# 當從硬碟開始啟動 # #
# ##
#######################

分區是一門學問,分的不好會事倍工半,具體的我已經在前面的文中提到了,有興趣的可以參看《Linux的分區機構》 http://www.linuxsir.org/bbs/showthre...threadid=82245
MBR就是446個位元組的一段存儲空間,裡面存儲的是Bootloader,Linux的Bootloader常見的有LILO和Grub,兩者在MBR中存儲的內容是不同的!

LILO:引導程序和kernel和initrd文件的具體Block位置指針
Grub:引導程序、Grub Shell和grub.conf(menu.list)所在分區的設備名

這裡要注意的是如果分區表(DPT)損壞,除非你有分區表備份(當然我們是有的:-),否則第一次fdisk的時候記得把個分區的起始和結束位置記下來以備救命之用!如果是MBR損壞,最簡單的辦法是rescue 進入系統然後chroot 到硬碟/ 然後grub-install /dev/XXXY 。如果要刪除linux的MBR信息,用Windows 98的啟動盤進入DOS提示符,fdisk /mbr 把MBR換成Windows的就可以了!

#######################
# #
####################### #
# # #
# 當Bootloader裝入 # #
# ##
#######################

基本上「大壞羊」都已經提到了,這裡只作相應的補充。

首先,上面提到了LILO和Grub在裝入MBR的區別,因為裝入內容的不同所以出現問題的情況和性質就有所不同。
LILO:因為存放的是kernel文件的具體Block位置指針,所以vmlinuz-*和initrd-*文件是不可以mv來mv去的(當然除非可以保證Block位置不變的改名不在此範圍!)
Grub:和LILO不同他要的是文件內容,只要你不改變分區順序,並且保證grub.conf(menu.list)文件路徑正確就完全可以找到!只是要注意grub.conf(menu.list)的內容按實際情況編寫!

其次,「大壞羊」在「(三)綜述」中是有問題的!歸結如下:

1.LILO 的lilo.conf(默認在/etc目錄下,如果在其它位置需要lilo -f /dir/file 的方式指明)
image=/boot/vmlinuz-2.4.21-4.EL #kernel所在目錄樹位置
label=linux           #標籤,boot:時你要輸入的
root=/dev/sdc1  #根分區所在位置
initrd=/boot/initrd-2.4.21-4.EL.img #initrd所在目錄樹位置
他使用的是當前系統的目錄樹結構,也就是kernel和initrd的邏輯位置,當我們運行lilo -v的時候,LILO會根據lilo.conf文件的定義在MBR中記下kernel和initrd文件的具體Block位置指針,然後 lilo.conf文件就沒用了,刪除了也不要緊!當然MBR中還要有/分區的位置指針,解壓掛接initrd的ext2文件系統和讀取 /etc/inittab和/etc/rc.d/rc.sysinit 就靠它了!

2.Grub 的 grub.conf(默認也必須在/boot/grub目錄下,除非你自己該grub的源碼)
title linux #標籤
root (hd0,1) #/boot分區所在位置
kernel /vmlinuz-2.4.21-4.EL ro root=LABEL=/  #讀取kernel,掛接/分區
initrd /initrd-2.4.21-4.EL.img #讀取initrd,解壓掛接initrd的ext2文件系統
他使用的是自定義系統的目錄樹結構,換種寫法就更清楚了(可以引導的最少語句)

kernel (hd0,1)/vmlinuz-2.4.21-4.EL ro root=LABEL=/
initrd (hd0,1)/initrd-2.4.21-4.EL.img

可以看出kernel 和 initrd 可以不在同一分區上,vmlinuz-*文件和initrd-*文件的目錄位置是根據分區(hdX,Y)中的目錄位置而定的!如果/boot沒有單獨分區,在分區上看到的就是/boot/vmlinuz-* ,但如果/boot單獨分區,在分區上看到的就是/vmlinuz-*.
關於那句ro root=LABEL=/ ,用來解壓掛接initrd的ext2文件系統和讀取/etc/inittab和/etc/rc.d/rc.sysinit,可以使用卷標(LABEL)或是設備名。

3.Grub的grub.conf文件是必須要有的,否則啟動的時候看到的就是grub:的grub shell狀態。


#######################
# #
####################### #
# # #
# 當kernel被裝入 # #
# ##
#######################

當kernel被裝入的時候一般是沒有問題的,但如果你的grub.conf中使用了錯誤的kernel名或LILO中的kernel位置不對,或是分區掛接就有問題那麼kernel這裡就會有問題!當然也可能是你的kernel本身有問題例如忘記把ext2文件系統的module編譯入initrd中!

#######################
# #
####################### #
# # #
# 當讀取/etc/inittab # #
# 時 ##
#######################

/etc/inittab是linux系統啟動時讀到的第一個文件,負責確定啟動的level、執行啟動腳本rc.sysinit和運行進程之父init.
其中問題多多,具體的來聽我的課!;-)


###############################
# #
############################### #
# # #
# 當運行/etc/rc.d/rc.sysinit # #
# 時 ##
###############################

/etc/rc.d/rc.sysinit是linux系統啟動的時運行的第一個腳本,負責產生系統運行中需要的環境變數和文件系統。其中mount -a 就是掛接所有在/etc/fstab中表明的文件系統!


#######################
# #
####################### #
# # #
# 當讀取/etc/fstab # #
# 時 ##
#######################

/etc/fstab 由/etc/rc.d/rc.sysinit腳本中的mount -a調用,出錯的機率最大。


#######################
# #
####################### #
# # #
# 當運行/etc/rc.d/rc # #
# 時 ##
#######################

/etc/inittab 中只確定默認運行的level,去運行level中腳本的其實是/etc/rc.d/rc ,/etc/inittab中的level數字只是/etc/rc.d/rc的參數


########################
# #
######################## #
# # #
# 當運行/etc/init.d/* # #
# 時 ##
########################

/etc/rc.d/rcX.d 目錄下的都是連接,除了S99local,其他的都是/etc/init.d/*的軟連接(符號連接)。


#############################
# #
############################# #
# # #
# 當運行/etc/rc.d/rc.local # #
# 時 ##
#############################

/etc/rc.d/rc.local 是系統啟動時最後要運行的腳本,如果的了解Autoexec.bat在DOS中的作用那麼就不難理解它了。

#############################
# #
############################# #
# # #
# 啟動結束看到login:提示符 # #
# ##
#############################

今天就到這裡,有時間我會向後繼續寫到用戶登陸、系統調優、本地網路和服務排除!

感謝我的小胖妞Mandy,5月份我們會一到飛往烏魯木齊去領略那美麗的西部風光!


GRUB學習筆記
聲明:本筆記並非原創,只是我個人的學習筆記!
很多的內容來自www.linuxsir.com www.linuxfans.org www.linuxAID.com
非常感謝以上網站對我的學習提供的莫大的幫助,本著學習和分享的原則我貼出我的學習筆記,更希望兄弟們能給我指出其中錯誤的地方.謝謝!!!
學習這部分知識,首先要學到問題的思路,其次你還要記住一些東西,是死記硬背下來!你會發現這點東東的確是很有用的!
儘管如此,本文檔歸屬linuxsir-probing!轉載請註明出處!更不能被用到商業用途上!

1 首先要了解的幾個概念

1.1 啟動管理器
啟動管理器是存儲在磁碟開始扇區中的一段程序,例如,硬碟的MBR(Master Boot Record),在系統完成啟動測試后,如果系統是從MBR啟動,則BIOS(Basic Input/Output System)將控制傳送給MBR。然後存儲在MBR中的這段程序將運行。這段程序被稱為啟動管理器。它的任務就是將控制傳送給操作系統,完成啟動過程》有許多可用的啟動管理器,包括GNU GRUB (Grand Unified Boot Loader),Bootmanager, LILO (LInux LOader), NTLDR (boot loader for Windows NT systems),等等等.
1.2 什麼是GRUB?
grub 是一個多重啟動管理器。grub是GRand Unified Bootloader的縮寫,它可以在多個操作系統共存時選擇引導哪個系統。它可以引導的操作系統包括:
Linux,FreeBSD,Solaris,NetBSD,BeOSi,OS/2,Windows95/98,Windows NT,Windows2000,WinXP。它可以載入操作系統的內核和初始化操作系統(如Linux,FreeBSD),或者把引導權交給操作系統(如 Windows 98)來完成引導。
1.3 GRUB的特點
特別適用於linux與其它操作系統共存情況。
支持大硬碟現在大多數Linux發行版本的lilo都有同樣的一個問題:根分區(/boot分區)不能分在超過1024柱面的地方,一般是在8.4G左右的地方,否則lilo不能安裝,或者安裝后不能正確引導系統。而grub就不會出現這種情況,只要安裝時你的大硬碟是在LBA模式下,grub就可以引導根分區在 8G以外的操作系統。
支持開機畫面   grub支持在引導開機的同時顯示一個開機畫面。對於玩家來說,這樣可以製作自己的個性化開機畫面;對於PC廠商,這樣可以在開機時顯示電腦的一些信息和廠商的標誌等。grub支持640x480,800x600,1024x768各種模式的開機畫面,而且可以自動偵測選擇最佳模式,與Windows那 320x400的開機畫面不可同日而語。
兩種執行模式 grub不但可以通過配置文件進行例行的引導,還可以在選擇引導前動態改變引導時的參數,還可以動態載入各種設備。例如你在Linux下編譯了一個新的核心,但不能確定它能不能工作,你就可以在引導時動態改變grub的參數,嘗試裝載這個新的核心進行使用。Grub的命令行有非常強大的功能,而且支持如 bash或doskey一樣的歷史功能,你可以用上下鍵來尋找以前的命令。
菜單式選擇   grub使用一個菜單來選擇不同的系統進行引導。你還可以自己配置各種參數,如延遲時間,默認操作系統等。
分區大小改變后不必重新配置   grub是通過文件系統直接把核心讀取到內存,因此只要操作系統核心的路徑沒有改變,grub就可以引導系統。
除此之外,Grub還有許多非常強大的功能。例如支持多種外部設備,動態裝載操作系統內核,甚至可以通過網路裝載操作系統核心。Grub支持多種文件系統,支持多種可執行文件格式,支持自動解壓,可以引導不支持多重引導的操作系統,支持網路啟動等。
1.4 MBR和第一扇區
你可以簡單的理解為MBR是整個硬碟的物理第一位置,而第一扇區是硬碟的物理第二位置.
1.5 一個GRUB配置文件
基於本例的分區如下:
hda 15G
hda1 8G / RED HAT LINUX8.0
hda5 7G /home
hdc 20G
hdc1 6.4G WinXP
hdc5 6.4G
hdc6 6.4G
hdc7 6.4G
#fdisk -l
# Disk /dev/hdc: 255 heads, 63 sectors, 2434 cylinders
Units = cylinders of 16065 * 512 bytes

Device Boot Start End Blocks Id System
/dev/hdc1 * 1 894 7181023+ b Win95 FAT32
/dev/hdc2 895 2434 12370050 f Win95 Ext'd (LBA)
/dev/hdc5 895 1787 7172991 b Win95 FAT32
/dev/hdc6 1788 2434 5196996 b Win95 FAT32

Disk /dev/hda: 255 heads, 63 sectors, 1867 cylinders
Units = cylinders of 16065 * 512 bytes

Device Boot Start End Blocks Id System
/dev/hda1 * 1 1020 8193118+ 83 Linux
/dev/hda2 1021 1802 6281415 83 Linux
/dev/hda3 1803 1867 522112+ 82 Linux swap

grub.conf,這個文件位於;/boot/grub/grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You do not have a /boot partition. This means that
# all kernel and initrd paths are relative to /, eg.
# root (hd0,0)
# kernel /boot/vmlinuz-version ro root=/dev/hda1
# initrd /boot/initrd-version.img
#boot=/dev/hda
default=0
timeout=3
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
title Red Hat Linux (2.4.18-14)
root (hd0,0)
kernel /boot/vmlinuz-2.4.18-14 ro root=LABEL=/
initrd /boot/initrd-2.4.18-14.img
title Microsoft Windows XP
map (hd0) (hd1)
map (hd1) (hd0)
root (hd1,0)
chainloader (hd1,0)+1
makeactive
boot

2 解讀grub.conf文件

我們將來看看grub.conf文件內語句,(注:...)內的東西是我們的解讀內容.
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You do not have a /boot partition. This means that
# all kernel and initrd paths are relative to /, eg.
# root (hd0,0)
# kernel /boot/vmlinuz-version ro root=/dev/hda1
# initrd /boot/initrd-version.img
#boot=/dev/hda (注:以上以符號井"#"開頭的行表示被註釋掉,沒有任何意義)
default=0 (注:默認的操作系統就是由default控制的。default后加一個數字n,表明是第 n+1個。需要注意的是,GRUB中,計數是從0開始的,第一個硬碟是hd0,第一 個軟碟機是fd0,等等。所以,default 0 表示默認的操作系統在這兒是 Red Hat Linux (2.4.18-14)如果你修改成1就是WinXP了)
timeout=3 (注:timeout表示默認等待的時間,這兒是3秒鐘。超過3秒,用戶還沒有作出選 擇的話,系統將自動選擇默認的操作系統;當然你可以改成任何你樂意的時間)
splashimage=(hd0,0)/boot/grub/splash.xpm.gz (注:指定開機畫面文件splash.xpm.gz的位置)
title Red Hat Linux (2.4.18-14) (注:表示Red Hat Linux的菜單項)
root (hd0,0) (注:表示第一個硬碟第一個分區,這裡的root和系 統內的root不是一碼事!詳細如下說明)
kernel /boot/vmlinuz-2.4.18-14 ro root=LABEL=/ (注:指定內核的位置,詳細說明如下 文)
initrd /boot/initrd-2.4.18-14.img (注:初始化)
title Microsoft Windows XP (注:表示Microsoft Windows XP的菜單項)
map (hd0) (hd1) (注:map是命令,詳細如下)
map (hd1) (hd0)
root (hd1,0) (注:這是指第二個硬碟(從硬碟)上第一個分區)
chainloader (hd1,0)+1 (注:鏈式裝入器,裝入一個扇區的數據然後把引導 權交給它。詳細說明如下)
makeactive
boot

(注:在 Linux 中,當談到 "root" 文件系統時,通常是指主 Linux 分區。但是,GRUB 有它自己的 root 分區定義。GRUB 的 root 分區是保存 Linux 內核的分區。這可能是您的正式 root 文件系統,也可能不是。我們討論的是 GRUB,需要指定 GRUB 的 root 分區。進入 root 分區時,GRUB 將把這個分區安裝成只讀型,這樣就可以從該分區中裝入 Linux 內核。GRUB 的一個很「酷」的功能是它可以讀取本機的 FAT、FFS、minix、ext2 和 ReiserFS 分區.到目前為止,您可能會感到一點疑惑,因為 GRUB 所使用的硬碟/分區命名約定與 Linux 使用的命名約定不同。在Linux 中,第一個硬碟的第五個分區稱作 "hda5"。而 GRUB 把這個分區稱作 "(hd0,4)"。GRUB 對硬碟和分區的編號都是從 0 開始計算。另外,硬碟和分區都用逗號分隔,整個表達式用括弧括起。現在,可以發現如果要引導 Linux 硬碟 hda5,應輸入 "root (hd0,4)"。
知道了內核在哪兒,還要具體指出哪個文件是內核文件,這就是kernel的工作。
kernel /boot/vmlinuz-2.4.18-14 ro root=LABEL=/說明/boot/vmlinuz-2.4.18-14就是要載入的內核。後面的都是傳遞給內核的參數。root=LABEL=/ 就是linux的硬碟分區表示法,ro是readonly的意思。initrd用來初始的linux image,並設置相應的參數。
命令map:當你有兩塊硬碟,一個無法從第二塊硬碟啟動的操作系統,例如Windowsxp,就可以使用map命令.你能夠將hd0映射為hd1,將hd1映射為hd0。換句話說,你可以虛擬的交換兩個硬碟而啟動所需要的操作系統 。命令形式如下:
grub> map (hd0) (hd1)
grub> map (hd1) (hd0)
GRUB 使用了「鏈式裝入器」(chainloader)。鏈式裝入器從分區 (hd1,0) 的引導記錄中裝入winxp自己的引導裝入器,然後引導它。這就是這種技術叫做鏈式裝入的原因 -- 它創建了一個從引導裝入器到另一個的鏈。這種鏈式裝入技術可以用於引導任何版本的 DOS 或 Windows。
GRUB的配置文件要簡單就這麼簡單,如果你要更個性化一點,試一試把「color light-gray/blue 」加在default語句的下面,下一次啟動GRUB時,看看有什麼變化,再試一試「color light-blue/red",驚喜嗎? 有趣吧! )

3 如何使用grub?

3.1 安裝
你可以從ftp://alpha.gnu.org/pub/gnu/grub 下載GRUB的源代碼。
得到文件grub-0.5.96.1.tar.gz,所以這樣做:
# tar -xvzf grub-0.5.96.1.tar.gz
這個命令將解開的文件和目錄放在一個名為grub-0.5.96.1的目錄中。現在運行如
下命令:
#cd grub-0.5.96.1
# ./configure
如果你想定製GRUB,使之包含流行的文件系統和對網卡的支持,或者刪除你不需要的網卡,可以運行如下命令:
# ./configure --help
這個命令將輸出所有的命令選項。現在可以使用—enable和—disable選項增加或
刪除對特定網卡的支持。(注意:GRUB支持網路啟動)
為了開始編譯過程,鍵入如下命令:
# make
# make install
至此你已經為安裝GRUB真正做好了準備。
將GRUB的相關文件保存在諸如/boot/grub的目錄中是一個好主意。為此,按如下步驟:
1.默認狀態下,GRUB所有文件將安裝在/usr/share/grub/i386-pc(或者在
/usr/local/share/grub/i386-pc目錄下,這隻取決於你的shell變數的設置。)
2.建立一個叫做/boot/grub的目錄,然後拷貝下列文件到這個目錄:
stage1 stage2 * stage1 5
稍候將解釋這些文件。同時也要把GRUB(可能在/usr/sbin或者/usr/local/sbin
目錄下)拷貝到/boot/grub目錄下。
安裝GRUB可以分為三個單獨的步驟:
1.將「stage1」安裝到MBR中。
2.設置「stage2」的地址或者位置。
3.設置一個菜單或選項,用來決定啟動哪一個操作系統。
使用下面的命令開始安裝GRUB。
#cd /boot/grub
# ./grub
這個命令根據BIOS的設置檢測硬體設備,同時產生一些輸出信息。這會花較長的時間。
end_request: I/O error, dev 02:00 (floppy), sector 0
GRUB version 0.5.96.1 (640K lower / 3072K upper memory)
TAB鍵可列出可能的命令列表。其它情況下TAB會列出設備或文件名。類似下面的提示會出現:
grub>
現在,假設你將Linux安裝在了第一塊硬碟的第一個分區中或者/dev/hda1中。記住GRUB的命名規則,將上面的名字改為(hd0,0)。鍵入下面的命令:
grub> install (hd0,0)/boot/grub/stage1 (hd0) (hd0,0)/boot/grub/stage2
p (hd0,0)/boot/grub/menu.conf
現在分析一下這個命令的細節。
install
一個內置的命令,它告訴GRUB將(hd0,0)/boot/grub/stage1安裝到hd0的主引導紀錄中。
(hd0,0)/boot/grub/stage2
告訴GRUB stage2映象的位置。
p with the the following options: (hd0,0)/boot/grub/menu.conf
為菜單的顯示設置配置文件。
下面是對這個命令用法的總結:
1.install
2.ource_of_stage1
3.where_to_install
4.source_of_stage2
5.p source_of_configuration_file
現在,你完成了硬碟上的基本安裝工作。
在軟盤上的安裝:
為了在軟盤上安裝GRUB,你要會用「dd」命令,並且了解它是如何工作的。為了做一張GRUB啟動盤,你要將stage1和stage2文件放到軟盤的開始扇區中。
安裝stage1到軟盤上:
插入一張已格式化的軟盤,鍵入命令:
# dd if=stage1 of=/dev/fd0 bs=512 count=1
命令的詳細說明如下:
if=input file
i.e., stage1
of=output file
i.e., floppy drive (this may be different on your computer)
bs=bytes to read and write
Here it is 512 bytes.
count=how many times to perform this operation
每次拷貝「bs」數目的塊到目標地址。
安裝stage2到軟盤
# dd if=stage2 of=/dev/fd0 bs=512 seek=1
這裡的步驟同stage1的相同,除了一個seek選項外。Seek選項將調過一個「bs」。例如,在上面的命令中bs的值是512,這樣seek=1意味著將跳過軟盤上前512個位元組 ,從513位元組開始。這將使得第一步操作不會覆蓋stage1的前512位元組。
現在你完成了基本的軟盤驅動器安裝。

如果已經安裝了grub要把grub重新安裝到主引導扇區上,只需要簡單打入makebootable命令就可以了。

3.2 配置grub
grub啟動時會在/boot/grub/中尋找一個名字為menu.lst的配置文件,如果找不到此文件則不進入菜單模式而直接進入命令行模式。
現在,我們來看一下如何在啟動後進入各種操作系統,如何建立menu.conf文件。我們就從GRUB支持的啟動過程開始。可以有兩種方法來完成啟動過程:
·A.通過調用內核本地啟動
·B.連續啟動或者將控制轉給另一個引導器
A模式啟動過程
1.配置跟設備或者告訴GRUB你的根文件系統。
2.告訴GRUB你的內核影像的位置,然後將參數傳送給內核。
3.重新啟動,試一下。
為了啟動Linux,將內核以bzImage的文件名放在/boot/目錄中,跟文件系統是
/dev/hda1,或者GRUB中的(hd0,0)。啟動過程如下:
1.root (hd0,0) [This sets the root partition]
2.kernel /boot/bzImage root=/dev/hda1 [This sets the kernel]
B模式啟動過程(這種模式假設當前的分區中安裝了另一個啟動管理器,例如LILO
或者NTLDR):
1.設置根分區但不要安裝它
2.激活這個分區
3.配置需要啟動的分區的第一個扇區
4.重新啟動,看一下效果。
我們在試試啟動安裝在/dev/hdc1或者(hd1,0)的widows。啟動windows的過程如下:
1.rootnoverify (hd1,0)
2.makeactive
3.chainloader +1 [+1 sets the first sector of the current root
partition]
4.boot [transfers the control and quits GRUB]
menu.conf文件:它用於建立啟動多操作系統時的菜單。建立menu.conf並不難。它使用簡單的英語,就象你在這一節看到的那樣。
所有的菜單項目都以沒有逗號分隔的「title TITLENAME」開頭。你可以隨意設置
TITLENAME。
設置Linux啟動菜單步驟如下:
1.設置標題
2.設置根分區
3.設置內核的相應參數
4.啟動
一個菜單例子:
title Red Hat Linux (2.4.18-14)
root (hd0,0)
kernel /boot/vmlinuz-2.4.18-14 ro root=LABEL=/
initrd /boot/initrd-2.4.18-14.img
前面有#的行是一個註釋。
建立啟動Windows 或者 DOS的菜單:
title Windoze
rootnoverify (hd0,0)
makeactive
chainloader +1
boot
#----
又或者:
title Microsoft Windows XP
map (hd0) (hd1)
map (hd1) (hd0)
root (hd1,0)
chainloader (hd1,0)+1
makeactive
boot
----
注意:root和rootnoverify都是一樣的,把rootnoverify改成root也行。不過經過實踐來看。有時引導win時,系統安裝好后,是rootnoverify (hdX.Y)這樣形式的,這樣會出現windows起不來,出現什麼windows什麼文件損壞的情況。這時,我們就要把在grub中,引導 windows的那段中的rootnoverify改為root
root英文的意思就是根的意思,在這裡是讓linux知道自己所處的位置,也就是我們所安裝linux的/根分區所在的位置 。
----
如果你安裝了兩個版本的Windows—一個是你自己用的,另一個給你的家人用的—這樣第二個就無法安裝,因為有提示說Windows已經安裝了。
有一種簡單的方法可以安裝兩個版本的Windows,即在啟動時隱藏一個分區而使用另一個。你甚至可以為你的分區設置密碼保護,這樣可以避免別人錯誤的載入你的分區。下面介紹如何完成兩個Windows的安裝,hda1和hda2 或者 (hd0,0) 和(hd0,1),用到的命令有lock, password, hide 和 unhide。
建立windows 項目"My Entry":
title My Entry
lock
unhide (hd0,0)
hide (hd0,1)
rootnoverify (hd0,0)
makeactive
chainloader +1
boot
#----
為了更好的使用lock命令,你需要在配置文件開頭使用password命令。Password命令的語法如下:password secret(「secret」就是密碼)。任何時候你都可以通過按p鍵兒輸入密碼。
建立Windows 項目"Family Entry"
title Family Entry
unhide (hd0,1)
hide (hd0,0)
rootnoverify (hd0,1)
makeactive
chainloader +1
boot

任何人都可以啟動這個項目,而無須輸入密碼。
這有一個使用password命令的有趣的竅門。為了在預設菜單列表或配置文件中隱藏某些項目,你可以使用下面的命令載入一個定製的列表:
password secret
在這個命令中,「secret」是密碼,而/boot/grub/secret-list.conf是密碼文件。這樣做之前,你要先進入到根目錄或者給出全路徑名。例如:
password secret (hd0,4)/boot/grub/secret-list.conf
還有一個更重要的命令是「map」。當你有兩塊硬碟,一個無法從第二塊硬碟啟動的操作系統,例如Windows,就可以使用map命令。例如,你能夠將 hd0映射為hd1,將hd1映射為hd0。換句話說,你可以虛擬的交換兩個硬碟而啟動所需要的操作系統 。命令形式如下:
grub> map (hd0) (hd1)
grub> map (hd1) (hd0)
啟動FreeBSD:
title FreeBSD 4.0
root (hd0,4,a)
kernel /boot/loader
boot
#----
這裡我們調用了FreeBSD的啟動管理器。Root (hd0,4,a)由四個參數,是因為
FreeBSD對一個單獨分區進行了虛擬分割。我們稱根分區為「a」。如果FreeBSD占
據了整個第二塊硬碟,這裡就應該是root (hd0,a)。這樣,就不是調用內核而是調用FreeBSD的啟動管理器,它要比調用內核更易使用。
(注意:推薦在使用OpenBSD和GNU/Hurd之前,要先試一下鏈式載入。)
現在你已經完成了基本的GRUB編譯、安裝和配置。你對GRUB了解的越多,就越會發現GRUB是一種控制啟動的易用和高效的方法。
各種GRUB命令:
default xx
表明xx是預設的啟動項目
timeout yy
表明在yy秒后預設啟動項目將啟動
fallback zz
在第一個啟動項目失敗后,過了timeout時間后,就將啟動zz項目。
color
這個命令將生成彩色菜單。它的語法是:color normal current_selection。這兩個域都可以有兩個值,形如foreground/background。例如:
color green/black or light-gray/blue
你也可以使用相關的數字。
記住:所有的值都是從0開始,所以0是第一個

3.3 GRUB啟動盤
要製作引導盤,需執行一些簡單的步驟。首先,在新的軟盤上創建 ext2 文件系統。然後,將其安裝,並將一些 GRUB 文件複製到該文件系統,最後運行 "grub" 程序,它將負責設置軟盤的引導扇區。
將一張空盤插入 1.44MB 軟碟機,輸入:
# mke2fs /dev/fd0
創建了 ext2 文件系統后,需要安裝該文件系統:
# mount /dev/fd0 /mnt/floppy
現在,需要創建一些目錄,並將一些關鍵文件(原先安裝 GRUB 時已安裝了這些文件)複製到軟盤:
# mkdir /mnt/floppy/boot
# mkdir /mnt/floppy/boot/grub
# cp /boot/grub/stage1 /mnt/floppy/boot/grub
# cp /boot/grub/stage2 /mnt/floppy/boot/grub
再有一個步驟,就能得到可用的引導盤。
在linux bash中,從 root 用戶運行「grub」,該程序非常有趣並值得注意,因為它實際上是GRUB 引導裝入器的半功能性版本。儘管 Linux 已經啟動並正在運行,您仍可以運行 GRUB 並執行某些任務,而且其界面與使用 GRUB 引導盤或將 GRUB 安裝到硬碟 MBR 時看到的界面(即GRUB控制台)完全相同。
在 grub> 提示符處,輸入:
grub> root (fd0)
grub> setup (fd0)
grub> quit
現在,引導盤完成了。
如果要把GRUB裝到硬碟上,也很容易。這個過程幾乎與引導盤安裝過程一樣。首先,需要決定哪個硬碟分區將成為 root GRUB 分區。在這個分區上,創建 /boot/grub 目錄,並將 stage1 和 stage2 文件複製到該目錄中,可以通過重新引導系統並使用引導盤,或者使用駐留版本的 GRUB 來執行后一步操作。在這兩種情況下,啟動 GRUB,並用 root 命令指定 root 分區。例如,如果將 stage1 和 stage2 文件複製到 hda5 的 /boot/grub 目錄中,應輸入 "root (hd0,4)"。接著,決定在哪裡安裝 GRUB -- 在硬碟的 MBR,或者如果與 GRUB 一起使用另一個「主」引導裝入器,則安裝在特定分區的引導記錄中。如果安裝到 MBR,則可以指定整個磁碟而不必指定分區,如下(對於 hda):
grub> setup (hd0)
如果要將 GRUB 安裝到 /dev/hda5 的引導記錄中,應輸入:
grub> setup (hd0,4)
現在,已安裝 GRUB。引導系統時,應該立即以 GRUB 的控制台方式結束(如果安裝到 MBR)。現在,應創建引導菜單,這樣就不必在每次引導系統時都輸入那些命令。

從軟盤啟動grub
製作啟動盤后可以用軟盤啟動引導硬碟上的操作系統, 插入製作好的啟動軟盤,進入BIOS設定軟盤啟動。軟盤啟動成功后就會進入grub的命令行模式
grub>
要啟動一個操作系統,首先指定引導哪個分區上的系統,例如要引導指第一個硬碟上的第一個分區的操作系統,先鍵入
grub>root (hd0,0)
接著如果要啟動的是Windows系統,鍵入
grub>chainloader (hd0,0)+1
注意(hd0,0)要隨著硬碟和分區的不同而改變數字。
如果要引導Linux或其他系統,應鍵入
grub>kernel (hd0,0)/boot/vmlinuz root=/dev/hda1
注意hda1參數也要隨著硬碟和分區的不同而改變,如從第二個硬碟的第一個分區引導則用hdb1。
最後敲入boot就可以啟動系統了。
在任何時候不能確定命令或者命令的參數都可以按Tab獲得相關的幫助。用上下鍵可以獲得命令的歷史記錄。其實這些命令就是menu.lst的啟動描述,您也可以根據那些描述來自己鍵入啟動命令,最後敲入boot就可以引導系統了。

4 GRUB的交互性

GRUB 最好的優點之一就是其強健的設計 -- 在不斷使用它時請別忘了這點。如果更新內核或更改它在磁碟上的位置,不必重新安裝 GRUB。事實上,如有必要,只要更新 menu.lst 文件即可,一切將保持正常。
只有少數情況下,才需要將 GRUB 引導裝入器重新安裝到引導記錄。首先,如果更改 GRUB root 分區的分區類型(例如,從 ext2 改成 ReiserFS),則需要重新安裝。或者,如果更新 /boot/grub 中的 stage1 和 stage2 文件,由於它們來自更新版本的 GRUB,很有可能要重新安裝引導裝入器。其它情況下,可以不必理睬!
GRUB的最大的特點就是交互性特彆強。在開機時,按一下「c」,將進入GRUB 控制台。顯示如下:
GRUB version 0.5.96.1 (640K lower / 3072K upper memory)
[ Minimal BASH-like line editing is supported. For the first word, TAB
lists possible command completions. Anywhere else TAB lists the possible
completions of a device/filename. ]
grub>
歡迎使用 GRUB 控制台。現在,再研究命令:
將通過GRUB 控制台繞過lilo來啟動RedHat linux,
grub> root (h
現在,按一次 Tab 鍵。如果系統中有多個硬碟,GRUB 將顯示可能完成的列表,從 "hd0" 開始。如果只有一個硬碟,GRUB 將插入 "hd0,"。如果有多個硬碟,繼續進行,在 ("hd2") 中輸入名稱並在名稱后緊跟著輸入逗號,但不要按 Enter 鍵。部分完成的 root 命令看起來如下:
grub> root (hd0,
現在,繼續操作,再按一次 Tab 鍵。GRUB 將顯示特定硬碟上所有分區的列表,以及它們的文件系統類型。在我的系統中,按 Tab 鍵時得到以下列表:
grub> root (hd0, (tab,按tab一下鍵)
Possible partitions are:
Partition num: 0, Filesystem type is fat, partition type 0x6
Partition num: 2, Filesystem type is ext2fs, partition type 0x83
Partition num: 4, Filesystem type unknown, partition type 0x7
Partition num: 5, Filesystem type is ext2fs, partition type 0x83
Partition num: 6, Filesystem type is fat, partition type 0xb
Partition num: 7, Filesystem type is fat, partition type 0xb
Partition num: 8, Filesystem type is ext2fs, partition type 0x83
Partition num: 9, Filesystem type unknown, partition type 0x82
如您所見,GRUB 的互動式硬碟和分區名稱實現功能非常有條理。這些,只需要好好理解 GRUB 新奇的硬碟和分區命名語法,然後就可以繼續操作了
grub> root (hd0,8)
現在已安裝了 root 文件系統,到裝入內核的時候了
grub> kernel /boot/vmlinuz-2.4.2 root=/dev/hda5 ro
[Linux-bzImage, setup=0x1200, size=0xe1a30]
您已經安裝了 root 文件系統並裝入了內核。現在,可以引導了。只要輸入 "boot",Linux 引導過程就將開始。是不是很cool啊,GRUB的menu.lst更像一個linux下的腳本程序。

5 常見grub除錯方法的思路

首先進去Linux的rescue模式!
用軟盤或光碟啟動,然後在啟動的提示符輸入:linux rescue
按照提示進入一個Shell狀態,你可以到/mnt/下面看到一個sysimage這麼目錄,進去以後,就是你安裝linux的/分區.
使用命令將根分區變為當前目錄的根分區:chroot /mnt/sysimage
然後轉到/sbin/這個目錄中.
使用fdisk -l 顯示當前分區情況,然後使用#grub-install /dev/hdx(x為你使用的是那塊硬碟安裝的,一般情況下是hda)
使用exit推出chroot,再使用exit退出linux rescue模式,系統將重新啟動!取出光碟,應該可以看到grub安裝好了.
在具體的環境中,編輯/boot/grub/grub.conf文件和menu.lst文件.




###請轉貼時保留以下內容######
Red Hat Linux 033 實驗部分
應廣大RH愛好者的要求,奉獻Red Hat Linux 033 實驗翻譯
請提出寶貴意見Mail:[email protected]

KevinZ(kissingwolf)
2004.3.4
#############################
Red Hat Linux 033 實驗部分

試驗3 
文件和目錄操作
估計時間: 1小時30分鐘
目標:           熟悉函數、語法和一些基本的文件和目錄的控制操作。
              練習有效地組合這些命令完成一般的用戶任務
試驗的起點: 安裝了Red Hat Linux可運行系統 ,有一個無特權用戶student,密碼:student

第一步:目錄和文件組織
場景/情節
在您的home目錄下有一系列的文件,您決定到時間整理一下了.您計劃生成一些新的子目錄,然後根據您的計劃拷貝和移動這些文件到適當的目錄;另外,這些文件不是都有用的,有一些是要刪除掉的。

任務:
1. 以用戶名student密碼student在tty1上登陸。

2. 在您登陸系統以後,你將進入您的home目錄.你可以使用"列印工作目錄"檢查這一情況
$ pwd
/home/student

3.使用如下每條命令檢查您是否還有文件在您的home目錄下:
$ ls
$ ls -a
$ ls ?al
為什麼第一和第二條命令返回不同的文件數?
第三條命令返回的在您當前的home目錄下最大的文件是多少?
您的home目錄下有子目錄嗎?

4. 您現在使用touch為以後的步驟建立文件。這種擴展在接下來的命令中是如何工作
的在以後的章節中進行討論。現在,僅僅按照下面的行鍵入就行了(在集合與集合之間使用包括花括弧{}和下劃線的字元)
$ touch {report,memo,graph}_{sep,oct,nov,dec}_{a,b,c}{1,2,3}

5. 使用命令ls檢查最後一條命令的結果,你會發現它在您的home目錄下生成了108個
新的空文件(您不必數)。這些文件代表了您將使用的在這個步驟中的代表的數據文件。如果您看不到這些文件,向教師尋找幫助,沒有這些文件,該試驗後面的步驟就無法進行。

6. 為了組織您的文件,您必須先建立一些新目錄,使用mkdir在您的home目錄中直接
建立一些子目錄:
$ mkdir a_reports
$ mkdir september october november december
  再使用ls 檢查您的工作。

7. 使用如下命令在您的一個新的目錄中生成一些附加子目錄
$ cd a_reports
為了切換到目錄,接下來:
$ mkdir 1 2 3
使用ls檢查你的子目錄a_reports下的名為1,2,3的三個新的子目錄。

8. 首先把所有帶」b」的報告從home目錄中移出並且按月份分組,先驗證要使用的複雜的通配符模式,是個好方法。這樣做以確保它對於正確的文件進行操作。如果你打算使用這種通配符模式,您可以使用一個無害的命令來替換您的命令。
$ cd
$ ls -l *dec?b?
你將看到列出了9個」december」,」b」文件,把其中的一個移到december目錄中:
$ mv graph_dec_b1 december
用下面的語句移動其餘的:
$ mv *dec?b? december
列出december目錄的內容驗證移動操作是否成功:
$ ls -l december
total 0
-rw-rw-r-- 1 student student 0 Sep 18 17:45 graph_dec_b1
-rw-rw-r-- 1 student student 0 Sep 18 17:45 graph_dec_b2
-rw-rw-r-- 1 student student 0 Sep 18 17:45 graph_dec_b3
-rw-rw-r-- 1 student student 0 Sep 18 17:45 memo_dec_b1
-rw-rw-r-- 1 student student 0 Sep 18 17:45 memo_dec_b2
-rw-rw-r-- 1 student student 0 Sep 18 17:45 memo_dec_b3
-rw-rw-r-- 1 student student 0 Sep 18 17:45 report_dec_b1
-rw-rw-r-- 1 student student 0 Sep 18 17:45 report_dec_b2
-rw-rw-r-- 1 student student 0 Sep 18 17:45 report_dec_b3

9.把其餘所有帶」b」的報告分別移動到各自對應的目錄中:
$ mv *oct?b? october
$ mv *sep?b? september

10. 現在你將把」a」報告收集到它們各自對應的目錄中。注意使用~代替 「你的home
目錄」。通配符和模式的組合指定了您的home目錄下所有以_a1結尾的文件。
$ cd a_reports
$ mv ~/*_a1 1/
「september」」a1」文件陳舊並且不再需要,使用echo確定您已經建立了一個只匹配該類文件的模式,然後刪除它們,並且檢查剩下的」a1」文件是否正確移動:
$ cd 1
$ echo *sep*
$ rm *sep*
$ ls
graph_dec_a1 graph_oct_a1 memo_nov_a1 report_dec_a1 report_oct_a1 graph_nov_a1 memo_dec_a1 memo_oct_a1 report_nov_a1

11.最後移動」a2」和」a3」報告到各自對應的目錄中。為了使過程變得有趣,我們將把
它們移出當前目錄,使用相對和絕對的的路徑名。第一步,使用pwd確定當前目錄:

$ pwd
/home/student/a_reports/1

用echo檢查涉及到」a2」文件的模式,然後使用絕對路徑名:
$ echo /home/student/*a2*
$ mv /home/student/*a2* /home/student/a_reports/2
即使您當前在/home/student/a_reports/1目錄下,也能把文件從/home/student移動到/home/student/a_reports/2目錄中,因為您指定了文件的路徑名稱(在本例中為絕對路徑名稱)

現在使用相對路徑移動「a3」文件。再一次的,首先確信模式指定的是正確的文件名稱。

$ echo ../../*a3*
$ mv ../../*a3* ../3

12.返回您的home目錄,並且使用ls 來校驗僅存在該目錄中的文件都是「c」文件(例如:graph_dec_c1,graph_dec_c2,…)

13.「c1」和「c2」報告文件對於每個月來說都非常重要,並且您打算把它們備份到另外一個目錄:

$ mkdir /tmp/archive
$ cp report*[12] /tmp/archive/

另外的,所有的對於十二月份的報告文件應該備份到/tmp/archice目錄下面。注意,-i選項使得cp程序在覆蓋任何文件之前進行提示:

$ cp -i report_dec* /tmp/archive/
cp: overwrite `/tmp/archive/report_dec_c1'? n
cp: overwrite `/tmp/archive/report_dec_c2'? n

14.現在您備份了一些對您重要的「c」文件,您現在要刪除位於您的home目錄下面所有的文件。使用通配符「*c*」檢查剩下的含有c的文件。您為什麼不想執行命令rm *c* ?
(作為提示:嘗試:ls *c*)
15.刪除您的home目錄下的剩餘*c*文件。在發出一個破壞性的命令之前我們再次使用echo命令。
$ echo *c[1-3]
$ rm *c[1-3]
$ ls
a_reports   december november october september  

試驗的結果
一個組織良好的home目錄,文件放置在合理的位置,一些文件備份到了/tmp/archive目錄中

第二步:決定磁碟的使用率
場景/情節
您想記錄您的系統中的每一個文件系統總共有多少剩餘空間。
另外,您想有一個關於哪些目錄消耗了系統的多數的空間的列表。

任務
1. 使用df獲取文件系統總的剩餘空間,您的輸出應該是類似於下面的例子(儘管輸出
依賴於您的特定的安裝,輸出可能不同)
$ df
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/hdc2 14129568 1809728 11602096 14% /
/dev/hdc1 49743 8847 38328 19% /boot
none 63312 0 63312 0% /dev/shm
2.注意預設的命令df操作是以塊為單位報告信息,試用-h,-H選項,則是用 「用戶可讀的「形式報告
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/hdc2 13G 1.8G 11G 14% /
/dev/hdc1 49M 8.7M 37M 19% /boot
none 62M 0 61M 0% /dev/shm
$ df -H
Filesystem Size Used Avail Use% Mounted on
/dev/hdc2 14G 1.9G 11G 14% /
/dev/hdc1 51M 9.1M 39M 19% /boot
none 65M 0 64M 0% /dev/shm
這兩個開關有什麼不同(使用man df)?
2. 在您的home目錄使用du(磁碟使用率)命令來決定您所有的文件消耗的空間。確保嘗試-h選項獲得更可讀的輸出。


第三步:檢視文本文件
任務
1.我們需要一個可供我們工作的文本文件:
$ cd
$ cp /usr/share/dict/words
.
2.使用cat顯示文件:
$ cat words
Aarhus
Aaron
Ababa
…輸出省略….
Zulu
Zulus
Zurich

3.在這種情況下cat是一個壞的選擇,因為很多輸出快速的滾屏,試用less:
$ less words
Aarhus
Aaron
Ababa
…輸出省略…
abiding
Abidjan
Abigail
…輸出省略…
使用less的時候,您可以向前翻頁(使用b),向後翻頁(使用空格鍵)在整個輸出中,每次一屏.

4.如果你只需要快速的看看某個文件的最前幾行和最後幾行,你要使用head或者tail:
$ head words
Aarhus
Aaron
Ababa
aback
abaft
abandon
abandoned
abandoning
abandonment
abandons
$ tail words
zoologically
zoom
zooms
zoos
Zorn
Zoroaster
Zoroastrian
Zulu
Zulus
Zurich

您可以使用man幫助頁面發現能使用head和tail中的哪個開關修改行號或是顯示的行的相關的位置.
哪個命令你能使用顯示文本的前50行?



哪個命令您能使用顯示文件從第25,000行到結束的內容?


試驗4 
用戶信息
估計時間:  30分鐘
目標:            熟悉一些用戶標識和帳戶轉換基本的控制操作。
試驗的起點:   安裝了Red Hat Linux可運行系統,並且是成功完成試驗系統。有另外一個無特權用戶visitor,密碼:visitor帳戶的存在。請教師檢查您的系統中是否已經建立這個帳戶。如果這個visitor用戶帳戶沒有建立,按照以下步驟進行
1. 用root帳戶登陸虛擬控制台。
2. 在提示符下鍵入以下命令
    # useradd visitor
3. 現在鍵入
   # passwd visitor
Changing password for user visitor.
New password: {輸入visitor}
BAD PASSWORD: it is based on a dictionary word
Retype new password: {輸入visitor}
passwd: all authentication tokens updated successfully.
   

第一步:本地用戶登陸
任務:
1. 完全從工作站中退出。確定您已經推出所有虛擬終端和X Windows系統
2. 轉換到虛擬終端1(tty1)通過按:

3. 使用密碼redhat進入root帳號登陸您的工作站
4. 確定指定的登陸信息,使用下列命令:
# whoami
# groups
# id
 檢查這些命令的輸出。
5.獲取工作站當前所有登陸者信息,當前,應該只有一個用戶登陸系統,按如下順序鍵入的命令的輸出是很有趣的。
# users
# who
# w
檢查這些命令的輸出。
6. 轉換到虛擬終端2(tty2)通過按

7.以用戶student,密碼:student登陸你的工作站。
8.獲取指定登陸者的信息,運行下列命令:
$ whoami
$ groups
$ id
檢查這些命令的輸出。
9.獲取工作站上當前所有登陸者的信息:
$ users
$ who
$ w
檢查這些命令的輸出。
10. 轉換到虛擬終端3(tty3)通過按


11. 以用戶visitor,密碼:visitor登陸你的工作站

12. 獲取指定登陸者的信息,運行下列命令:
$ whoami
$ groups
$ id
檢查這些命令的輸出。
13. 獲取工作站上當前所有登陸者的信息:
$ users
$ who
$ w
檢查這些命令的輸出。


步驟2:切換帳戶

任務:

1. 按下如下的鍵切換到虛擬終端3(tty3)


2. 運行id命令來決定您的用戶信息,pwd來喜愛能使您目前的工作目錄
$ id
$ pwd

記錄結果:
id=__________________________________________

pwd=_________________________________________
3. 使用su ? 來切換到root用戶,運行id和pwd來獲取您的當前的目錄

$ su ?
# id
# pwd

記錄結果:
id=__________________________________________

pwd=_________________________________________


4. 從root帳戶退出,返回到visitor帳戶

# exit
5. 使用不含 - 的su切換到root用戶,運行pwd和id。
$ su
# id
# pwd

記錄結果:
id=__________________________________________

pwd=_________________________________________
為什麼和第3步驟的結果不同呢?
6.登出所有您在這個步驟中本地的和遠程的shell。


試驗6 
Linux文件系統的要點
估計時間:  90分鐘
目標:          深入了解linux文件系統知識,包括:創建和使用links,使用slocate和find,歸檔壓縮文件。
試驗的起點:   一個Red Hat Linux系統。

第一步:創建和使用links
任務:
1.在早些時候的試驗,你已經拷貝了一個文件/usr/share/dict/words到你使用的用戶student的主目錄 ~/words.在這個案例里,你不需要編輯文件-拷貝一個文件到你的主目錄就可以在試驗的期間使用了。

2.為了要避免原始文件和副本之間的混亂。在student』s主目錄中刪除words的副本
$ cd
$ rm words

3.雖然你可能沒有在那時了解它, 這個文件/usr/share/dict/words 的副本實際上是一個軟link。列出內容下面目錄 /usr/share/dict的內容查看link和它的參數。
$ ls ?l /usr/share/dict
total 404
-rw-r—r-- 1 root root 409305 Apr 3 10:29 linux.words
lrwxrwxrwx 1 root root 11 Apr 20 17:33 words ->linux.words
a.你能告訴我words是一個軟鏈接嗎?

b.為什麼words的文件大小是11?

c.words允許所有人訪問。這和linux.words文件用什麼衝突?除了root用戶,其他用戶能夠能在linux.words上面寫數據嗎?

4.再一次列出文件,這次顯示相應的indeds號。為什麼兩個文件會有相同或不同的inodes號?
$ ls ?I /usr/share/dict

5. 現在在你的主目錄中產生兩個的代號和硬鏈接到/usr/share/dict/linux.words:
$ ln ?s /usr/share/dict/linux.words soft
$ ln /usr/share/dict/linux.words hard

6. 測試一下,你新建的鏈接兩者都指到 linux.words 文件:
$ head hard soft
7. 檢查你所有文件的link , 然後在下面回答問題:
$ ls ?il hard soft
$ stat had soft
報告文件大小,hard_______和soft_______.
被佔用的真實的空間,hard_______和soft_______.
你怎樣解釋這兩個link佔用空間的差別。
列出鏈接的記數,hard_______和soft_______.
所有權,hard_______和soft_______.
文件硬鏈接的所有者和root用戶可以完全訪問,其他用戶是只讀許可權。學生將會可以刪除這個新的文件嗎?為什麼?


8. 更多的挑戰:如果時間許可,探究一下下面的問題:
a.你能創建一個目標文件並不存在的軟連接嗎?看看ls命令的輸出能否給你一些提示。
b.你能創建一個目標文件並不存在的軟連接嗎? 為什麼?
c.你能創建一個軟連接的硬連接嗎? 當你嘗試的時候有什麼問題嗎?
d.在創建了幾個硬連接后,你能說出哪個是更加真實的文件嗎?


步驟2:使用find命令

任務:

作為student登錄。設計完成find命令提出結果
查看你當前的umask。設計並且運行find命令在每下列各項被描述的結果指令里。然後寫下提供的空格里。
你可能需要在在find的man page里查許找。記得你能用/stringz man page里查找。
第一個答案已經為你列出。
1.在/var/lib目錄下查找所有文件其所有者是games用戶的文件
$ find /var/lib ?user games 2> /dev/null

2.在/var目錄下查找所有文件其所有者是root用戶的文件。_________________________________________________________

3.查找所有文件其所有者不是root,bin和student用戶並用長格式顯示(如ls ?l 的顯示結果)。
_________________________________________________________

4.查找/usr/bin目錄下所有大小超過一百萬byte的文件並用長格式顯示(如ls ?l 的顯示結果)。
_________________________________________________________

5.對/etc/mail目錄下的所有文件使用file命令.
_________________________________________________________
6.查找/tmp目錄下屬於student的所有普通文件,這些文件的修改時間為120分鐘以前,查詢結果用長格式顯示(如ls ?l 的顯示結果)。
_________________________________________________________

7. 對於查到的上述文件,用-ok選項刪除。
_________________________________________________________


步驟3:歸檔和壓縮

情景/故事:
你的系統上的主硬碟在你使用它的時候有可怕的噪音,但是它上面有有價值的數據。自從系統在兩年半以前備份過,你有決定手動備份少數幾個你最緊要的文件。那 / tmp 目錄里儲存在不同的硬碟的分區上快懷的分區,這樣你想臨時的把文件備份到那裡。

任務:
1. 在/home目錄里,用find命令定位文件所有者是student的文件。然後將其壓縮。
$ find /home ?user student ?exec tar rvf /tmp/backup.tar {} \;

2. 保存/etc目錄下的文件到/tmp目錄下:
$ tar cvf /tmp/confbackup.tar /etc

3. 列出兩個文件的大小
$ ls ?lh /tmp/*.tar
-rw-rw-r-- 1 student student 1.9M Oct 17 23:06 /tmp/backup.tar
-rw-rw-r-- 1 student student 5.4M Oct 18 00:27 /tmp/confbackup.tar
backup.tar文件的大小________
confbackup.tar文件的大小________

4. 使用gzip壓縮你的文檔。然後報告文件的大小:
$ cd /tmp
$ gzip ?v *.tar
$ ls ?lh *tar*
-rw-rw-r-- 1 student student 580K Oct 17 23:06 backup.tar.gz
-rw-rw-r-- 1 student student 913K Oct 18 0:27 confbackup.tar.gz
backup.tar.gz文件大小為____________
backup.tar.gz文件的壓縮百分比________
confbackup.tar.gz文件大小為____________
confbackup.tar.gz文件的壓縮百分比________

5. 先解壓縮bzip2文件然後在壓縮,然後比較新文件的大小:
$ gunzip *.gz
$ ls ?lh *tar
-rw-rw-r—1 1 student student 1.9M Oct 17 23:06 backup.tar
-rw-rw-r—1 1 student student 5.4M Oct 18 00:27 confbackup.tar

$ bzip2 ?v *tar
$ ls ?lh *tar
-rw-rw-r—1 1 student student 510K Oct 17 23:06 backup.tar.bz2
-rw-rw-r—1 1 student student 791K Oct 18 00:27 confbackup.tar.bz2

backup.tar.bz2文件大小為____________
backup.tar.bz2文件的壓縮百分比________
confbackup.tar.bz2文件大小為____________
confbackup.tar.bz2文件的壓縮百分比________

6. 在傳統UNIX系統,


$ rm confbackup.tar.bz2
$ tar czf test1.tgz /etc
$ tar cjf test2.tbz /etc

$ file test*
test1.tgz:gzip compressed data,deflated,last modified:Wed Oct 18 01:52:11 2000,os:Unix
test2.tbz:bzip2 compressed data,block size = 900K

結果:
你的「重要數據」被壓縮備份到/tmp目錄里了。

問題答案2

2. find /var ?user root ?group mail 2>/dev/mull
3. find / -not ?user root ?not ?user bin ?not ?user student ?ls 2> /dev/null
or
find / ! ?user root ! ?user bin ! ?user student ?exec ls ?ld {} \; 2> /dev/null

4. find /usr/bin ?size +1000000c ?ls 2> /dev/null
5. find /etc/maill ?exec file {} \; 2 > /dev/null
6. find /tmp ?user student ?and ?mmin +120 ?and ?type f ?ls 2> /dev/null
7. find /tmp ?user student ?and ?mmin +120 ?and ?type f ?ok rm {} \;

(end)
試驗7 
bash Shell
估計時間:  45分鐘
目標:          深入了解bash shell,包括創建定製。

試驗的起點:   一個Red Hat Linux系統。

第一步:使用Aliases
任務:
1.你決定創建一個alias,當你使用cls的時候,系統能夠運行clear命令清除你的屏幕。使用student身份在tty1登錄,然後輸入下列命令.
$ alias cls=『clear』
$ alias
$ cls

2.當你重新登錄的時候這個別名就丟失了。確信新的別名在用戶student每次登錄的時候都能夠使用,可以執行一下幾步。
$ cd
$ vi .bashrc

查找包含下列的文字:#User specific aliases and functions 添加到你的別名命令行:
alias cls=』clear』
保存並推出。

3.測試你的改變當你註銷的時候,重新登錄到tty1上的時候,試下面的命令:
$ alias
$ cls

4.現在使用ls 的man page 去創建一個叫lr的別名,利用ls的五個開關。測試並添加你的別名到.bashrc中.這個別名能夠:
a)用長格式顯示文件
b)顯示隱含文件
c)給文件分類
d)用相反的順序顯示文件
e)按文件修改時間顯示文件。


目標:
一條新的清屏命令和一條新的列文件命令。(都是別名)

步驟2:改變你的bash提示

情景/故事:
你決定定製你的bash提示以能夠顯示完全的路徑和命令的序列號。

任務:
5. 在終端窗口,顯示當前主要提示符的值。
$ echo $PS1

6. 改變你的提示符為一個字元串。
$ PS1=』Red Hat Linux ->』

7. 這個不常使用,因此恢復到有$提示符的情況下,同時加上主機名。
$ PS1=』\h $』

8. 在主機名和$符號之間插入bash表示歷史紀錄提示符的特殊字元 \!。

9. 查找bash 的man 手冊,把當前的工作目錄放入提示符中。

10. 你定製的提示符顯示實例,如不同請繼續修改。
station1:~ 21 $ cd /tmp
station1:/tmp 22 $

11. 編輯你重新定義的PS1 到你的.bashrc,然後打開新的終端窗口看看結果如何.


步驟3:配置shell選項

情景/故事:
使用set和shopt你定製幾個bash shell 。

任務:
12.以student身份登錄tty1界面上.查看許多普遍的配置shell選項:
$ set ?o
allexport off
braceexpand on
emacs on
errexit off
hashall on
… output truncated …

13.察看目前ignoreeof的屬性,用ctrl+d 鍵看是否能logout.


14.用student身份在tty1上登錄,執行下面的改變,然後測試ignoreeof選項:
$ set ?o ignoreeof
$
$ 用 「logout」 退出shell
$ set +o ignoreeof
$


15.當試圖執行命令的時候可以看到提示信息.使用type的命令:
$ type cat
cat is hashed (/bin/cat)
$ type cls
cls is aliased to 『clear』
$ type set
shopt is a shell builtin
$ type while
while is a shell keyword





結果:
現在你有一個更好的shell options.


問題答案4:命令替代

1. 確定完全路徑名

$ which metacity
$ which .-message
$ ^message^window-demo

2. 重複執行上一個包含字元串ig的命令:
$ ig

3. 當一個命令在另一個命令的後面用(『 『)起來的時候,bash會先執行後面的命令並把執行的結果作為第一個命令的輸入. 使用這個技術,看看下面命令的執行結果.
$ ls ?l 『which nautilus『


(end)
試驗8 
定製圖形化界面
估計時間:  15分鐘
目標:          探索Red hat liunx多種多樣的圖形化桌面環境..

試驗的起點:   一個Red Hat Linux系統。

第一步:定製窗口管理
任務:
1.在你的桌面的左邊點擊Red Hat圖標,選擇」屬性」然後點擊」控制中心」.Nautilus 將打開顯示的可以定製你的桌面環境的窗口.

2.雙擊」背景」圖標.點擊」選擇圖片」按鈕,可用的圖片在/usr/share/backgrounds 下,有一些圖片作為牆紙很漂亮;你可以在」圖片選項」中選擇居中拉伸.

選擇一個你喜歡的,或者選」沒有圖片」然後你可以使用」背景風格」顏色和屬性.當你完成的后,關閉」背景屬性」對話框.

3. 雙擊」滑鼠」的圖標, 這個參數面板你能夠調整雙擊的時間延遲,速度和靈敏度 .

假如你伸左撇子,你也可以在這裡選擇左收習慣

當完成後選擇關閉」滑鼠屬性」對話框.

4. 打開」桌面主題」面板.你可以選擇一個主題,默認的主題是」Bluecurve」.選一個你喜歡的,然後關閉這個面板.

5. 最後,打開」工具欄」,你能夠選擇你可以選擇下列特性中的一個:顯示工具條,或小的圖標.然後關閉面板.


目標:
Red Hat Linux的桌面環境已經按你的要求定製好了。






試驗9
標準輸入輸出和管道
估計時間: 30分鐘
目標: 熟悉Red Hat Linux中的標準輸入輸出和管道
試驗的起點: 標準的Red Hat Linux安裝


步驟1:標準輸入和輸出
任務:

1. 使用你熟悉的編輯器創建兩個文件:

packages1.txt 應該包含以下八行:

amanda
galleon
metacity
mozilla
postgresql
procinfo
rpmfind
squid

packages2.txt應該包含以下6行

anaconda
openssh
gnome-core
samba
sendmail
xscreensaver

2. cat工具是最簡單的linux過濾器,它會默認把跟在後面的參數當作文件名,並把這個文件作為輸入,如果沒有文件名則把標準的輸入作為自己的輸入,然後將它們發送到標準的輸出上去。現在我們來實驗一下:

$cat packages1.txt

3.如果cat后沒有參數,則它會等待標準的輸入,所以當你輸入cat命令后,再回車,然後什麼也沒有顯示。輸入cat后,cat命令會監視標準輸入,等待輸入的到達。如果這個時候輸入一些文本,再按回車,cat就會把輸入的內容當作自己的輸入,然後輸出到標準的輸出——顯示器上,結束cat的命令為按下 ctrl-d,這是結束輸入的標誌。
$ cat
輸入一些文字,然後按回車。
^d (就是按ctrl-d)

4. 大多數的文本處理命令是執行過濾操作,他們可以讀標準輸入,對輸入做一些動作,然後把結果發送到標準輸出去。這些命令就向cat一樣,只是對輸入的處理不太一樣。

tr命令,也是過濾器命令,如果給tr后加兩個字元串做為參數,它會讀取標準輸入,然後把輸入中包含著前一個字元串的字元變成第二個字元串,然後輸出到標準輸出去。

把剛才的命令換成tr,tr將把字元串中有的字元變成大寫的。

$ tr 'aeiou' 'AEIOU'
輸入一些文字,然後按回車。
^d

5. 定義shell不要把命令的輸出發到標準輸出上,而是重定向到一個文件中,我們使用 > 來重定向

重複cat的例子重定向標準的輸出到packages1.catfile,這樣把輸出到屏幕的東西輸出到了文件中,效果就和重新copy了一份文件是一樣的,cat這個輸出文件,然後用diff和ls確認原文件與package1.catfile內容一樣。

$ cat packages1.txt > packages1.catfile
$ cat packages1.catfile
$ diff packages1.txt packages1.catfile
$ ls ?l packages1*

6. 使用>>來重定向會把輸出附加到已存在的文件的末尾。

把packages2.txt文件中的內容附加到packages1.catfile之後,然後檢驗結果。

$ cat packages2.txt >> packages1.catfile
$ cat packages1.catfile

7. 如果輸出重定向時cat沒有直接跟文件名的參數,那麼cat就會等待標準的輸入,直到按下ctrl-d作為結束,然後把所有輸入的東西重定向到這個文件中去。這樣可以很容易的創建一個文本文件,

$ cat > typedin.txt
This time, when text is typed at the keyboard,
It is not echoed back to the screen.
Instead, it is redirected to the file typedin.txt.
^d

$ ls ?l typedin.txt
$ cat typedin.txt

8. 使用tr取代cat,重複剛才的命令

$ tr 'aeiou' 'AEIOU' > trfile.txt
This time, when text is typed at the keyboard,
It is not echoed back to the screen.
Instead, it is redirected to the file typedin.txt.
^d

$ ls ?l trfile.txt
$ cat trfile.txt

9. 使用set ?o命令,確認顯示出目前bash的noclobber選項是關閉狀態,確認當輸出重定時向你可以重寫文件

$ set ?o
$ ls ?l /tmp > trifle.txt
$ ls ?l trfile.txt
$ cat trifle.txt

10. 使用set命令更改noclobber選項,如下操作:

$ set ?o noclobber
$ echo 「new contents」 > trfile.txt
bash: trfile.txt:cannot overwrite existing file

11. cat可以接受一個文件名或者是一個輸入重定向的文件,測試以下兩個命令:

$ cat packages1.txt
$ cat < packages1.txt

12. 但是tr不能接受文件名作為參數,它只希望輸入是標準輸入。

$ tr 'aeiou' 'AEIOU' < packages1.txt

13. 下面的例子中標準輸入和輸出都被重定向,輸入還是packages1.txt文件,這回改為輸出到文件packages1.trfile.txt中去了。

$ tr 'aeiou' 'AEIOU' < packages1.txt >packages1.trfile.txt
$ ls ?l packages1.txt packages1.trfile.txt
$ cat packages1.trfile.txt
步驟2:管道

1. 把一個命令的標準輸出直接傳輸給另一個命令作為它的標準輸入,這樣特殊的機制叫做管道。

如果沒有管道,你要想列印你的目錄中文件的列表至少要兩步,還需要把沒用的文件刪除,(lpr命令可以把文件的內容發給默認的印表機,它的用法會在第12章講)(注意只有當你沒有印表機時可以使用以下的例子)

$ ls ?l > /tmp/ls.txt
$ lpr /tmp/ls.txt
$ rm /tmp/ls.txt

使用管道,這些命令可以僅僅用以下短短的一條命令,將ls ?l的輸出直接發送給lpr作為輸入,lpr也不需要別的參數。

$ ls ?l | lpr

2. 管道經常的用法是一個命令產生了很多頁的輸出,可以把這些輸出直接給less,管道左邊是你的命令,右邊是less,less不需要參數。(空格鍵是翻頁,q鍵是退出less)

$ ls ?l /usr/bin | less

步驟3:練習

答案在下面,可以使用man page來幫助你解決問題

1. 拷貝一份cal命令的man page,放在你的主目錄下,取名叫cal.man。

2. 只在一行上輸入什麼樣的命令,可以使你從鍵盤上輸入的文本輸出到印表機上

3. 怎樣把/usr/bin下以c或d開頭的文件列表發送到印表機上?

步驟3:練習-答案

1. man cal > cal.man
2. lpr
lpr列印出以後面的參數命名的文件中的內容,如果沒有參數,lpr就會從標準輸入中讀取,標準的輸入是鍵盤,直到你按下ctrl-d表示鍵盤輸入結束。
3.ls ?l /usr/bin/[cd]* | lpr



試驗10 
字元串處理
估計時間:  60分鐘
目標:          熟悉字元串處理

試驗的起點:   一個Red Hat Linux系統,把/etc/passwd拷貝到你的主目錄下。

第一步:字元串處理基本知識
任務:
1..拷貝/etc/passwd到你的主目錄下:
$ cd
$ cp /etc/passwd

2. 在/etc/passwd裡面有系統里的每一個帳戶.使用wc,在passwd文件里計算有多少行。
$ wc ?l passwd
在你的系統里有多少個帳戶____________

3. 找出本機中所有用戶使用的各種shell並把其放置在一個文件內:
$ cut ?d: -f7 passwd > shells

4. 使用cat命令查看你新的shells文件的內容,為了使輸出結果更為友好.用sort命令輸出這些數據在一個新的文件里:
$ sort shells > sorted.shells

5. 你的文件包含許多同樣的內容.使用uniq命令可以計算出有多少個相同的行:
$ uniq ?c sorted.shells > uniq.sorted.shells

為什麼在使用uniq之前要使用sort命令

6. 按照數字由大到小的順序列出在你的機器上使用的各種shell:
$ sort ?nr uniq.sorted.shells
i. /sbin/nologin
6 /bin/bash
1 /sbin/shutdown
1 /sbin/halt
1 /bin/sync
結果:
按照數字由大到小的順序列出你機器上所有用戶使用的各種shell:

步驟2:更多的練習

為每一個練習寫下解決辦法.記住,答案是一個你想出辦法的命令,不是輸出.答案在實驗的最後被列出來了,但是在對答案之前,你可以試著完成每個任務.每個答案將顯示單獨的一行.這個命令aspell沒有man page;你將怎樣獲得幫助呢?

7. 有多少文件在/usr/bin目錄下?輸出是一個單一的整數.提示:設計一個命令列出文件名到每一行,然後計算一共有多少行.

__________________________________________________________

8. 列出下列文件/usr/share/doc/nautilus-*/NEWS中拼錯的單詞.

__________________________________________________________

12. 多少唯一的單詞從上述練習中輸出?
__________________________________________________________


步驟2答案:

1 ls ?1 /usr/bin | wc -l (注意ls 的參數是數字1)

2 aspell ?l < /usr/shar/doc/nautilus-*/NEWS

3 aspell ?l < /usr/share/doc/nautilus-*/NEWS | sort | uniq | wc -l





試驗11
使用正則表達式進行字元處理
估計時間: 60分鐘
目標: 熟悉Red Hat Linux中進行字元處理的幾個工具
試驗的起點: 安裝Red Hat Linux,並且能正常工作,拷貝 /etc/passwd到
你的主目錄中


步驟1:使用grep進行字元處理

任務:

1. 在copy到你主目錄中的/etc/passwd文件的副本中,使用grep顯示出所有以「g」開頭的帳戶:
2. 顯示出所有使用bash shell的帳戶:

$ grep 『bash$』 passwd

3. 顯示出沒有使用bash作為shell的帳戶:

$ grep ?v 『bash$』 passwd

4. 為了做一個使用diff的例子,我們要更改這個passwd文件的拷貝,先用grep把原文件中所有含有「N」和「P」的行刪除:

$ grep ?v 『[NP]』 passwd > modified.passwd

5. 最後再用tr將含有的所有大寫字母變成小寫:

$ tr 「A-Z」 「a-z」 < modified.passwd > modified2.passwd

6. 這時使用cat命令看原來的passwd文件和改過的modified2.passwd文件,不仔細看看不出其中的區別,這只是小文件,如果文件大一些,想象一下擁有幾千個用戶的文件。使用diff可以產生兩個文件中不同之處的列表。

$ diff modified2.passwd passwd
14a15,16
> ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
> nobody:x:99:99:Nobody:/:/sbin/nologin
… …

步驟2:正則表達式及字元處理
在任務下面的橫線上寫下你的解決方案,你要寫出你的命令而不是命令的輸出,答案在實驗最後,但是要先試著自己解決,可以使用man page來幫助你解決問題。

任務:
1. 使用grep顯示出/usr/share/dict/words文件中還有某參數的行,例如顯示出所有含有fish的行:

$ grep fish /usr/share/dict/words
blowfish
bluefish
codfish
… output truncated …
unselfish
unselfishly
unselfishness

2. 使用grep的man page作為幫助,輸出任何包含fish的所有行,還要輸出緊接著這行的上下各兩行的內容:

—————————————————————————————————————
3. 使用grep的man page作為幫助,找出相應的命令,來顯示出在words文件中有多少行含有fish。

—————————————————————————————————————
4. 使用grep的幫助文件,找出相應的命令,顯示出那些行含有fish,並將行號一塊輸出,看一看starfish在哪行?

—————————————————————————————————————
5. 想列出/usr/share/dict/words中包含先有字母t然後有一個母音字母,之後是sh的單詞,命令為:

—————————————————————————————————————
6. 在/usr/share/dict/words文件中,創建可以符合abominable,abominate,anomie和atomize的正則表達式,但是不要選到別的單詞。

—————————————————————————————————————
7. 在/usr/share/dict/words文件中包含多少先有字母t然後有一個母音字母,之後是sh的單詞,只輸出數量。

—————————————————————————————————————
8. 列出/usr/share/dict/words中剛好包含16個字母的單詞:

—————————————————————————————————————
9. 我們將要使用/usr/share/doc文件夾來完成我們的下幾個任務。
列出/usr/share/doc/bash-2.05b文件夾中,所有包含單詞expansion的文件,

—————————————————————————————————————
10. 顯示出「Linux」在/usr/share/doc/bash-2.05b文件夾的文件中出現的次數,但是不要顯示沒有這個單詞的文件。提示:先列出所有的文件,然後想如何使輸出符合要求:

—————————————————————————————————————
11. 列出所有包含Havoc的文件名:

—————————————————————————————————————

步驟3:使用正則表達進行文本流編輯
任務:

想象你創建一個了名叫「cats」的文件包含以下單詞:

cat
catalog
concatenate
polecat
Cat

猜想執行以下每個sed命令之後,把cats文件的每一行的執行后的結果寫在後面:

1. sed 's/cat/dog/' cats
cat __________
catalog __________
concatenate __________
polecat __________
Cat __________

2. sed 's/[Cc]at/dog/' cats
cat __________
catalog __________
concatenate __________
polecat __________
Cat __________

3. sed 's/\<[Cc]cat/dog/' cats
cat __________
catalog __________
concatenate __________
polecat __________
Cat __________
4. sed 's/[Cc]at\>/dog/' cats
cat __________
catalog __________
concatenate __________
polecat __________
Cat __________

5. sed 's/\<[Cc]at\>/dog/' cats
cat __________
catalog __________
concatenate __________
polecat __________
Cat __________

6. sed 's/\<[Cc]at\>/& and dog/' cats
cat __________
catalog __________
concatenate __________
polecat __________
Cat __________

7. 創建一個'cats'文件,運行sed命令,測試你的答案。

步驟2的答案:
2.grep ?B2 ?A2 "fish" /usr/share/dict/words
3.grep ?c "fish" /usr/share/dict/words
4.grep ?n "fish" /usr/share/dict/words
5.grep "t[aeiou]sh" /usr/share/dict/words
6. "^a.omi.*e$"

"\"
訣竅是判斷哪些字母是變化的哪些是不變的,注意想代替任意個任意字元要使用 「.*」。
7.grep ?c "t[aeiou]sh$" /usr/share/dict/words
8.grep "^…………….$" /usr/share/dict/words
或者:
grep ?c "^.\{16\}$" /usr/share/dict/words
9.grep ?l expansion /usr/share/doc/bash-2.05b/*
10.grep ?c "Linux" /usr/share/doc/bash-2.05b/* |grep ?v ":0"
11.grep ?R ?l "Havoc" /usr/share/doc




試驗12
進程式控制制
估計時間: 30分鐘
目標: 練習與進程式控制制有關的不同命令
試驗的起點: 安裝Red Hat Linux,並且能正常工作,有一個用戶名和密
碼都為student的用戶


步驟1:進程式控制制

場景描述:
在這個任務中,大家會啟用幾個進程,然後使用bash的進程式控制制方法來控制它們。你將會在幾個控制台間切換,注意你在哪個控制台上運行命令。

任務:

1. 開始使用student用戶在第一、二個控制台(tty1、tty2)上登陸

2. 到tty1上,然後運行以下命令:

$ (while true; do echo ?n A >> log; sleep 1;done)

3. 注意這個控制台現在因為在運行你的進程,所以處於忙的狀態(進程在前台運行),這個進程不斷把字母「A」添加進~/log文件中去,到tty2上運行以下命令:

$ tail ?f log

你會看到「A」不斷增長

4. 切換回控制台tty1,按下,shell會告訴你進程停止了,告訴你job號碼為1,切換回控制台2,你會看到文件不變了。

5. 回到tty1,再次啟動進程,運行jobs會顯示job[1]在運行了,到tty2上看到文件繼續增長了:

$ bg
$ jobs

6. 到tty1上,按向上的箭頭,重新找回第二步時的命令,把A換成B,在最後加上&,然後在把B換成C:

$ (while true; do echo ?n B >> log; sleep 1;done)
$ ^B^C

7. 輸入jobs確認三個進程都在運行,到tty2上看到每秒鐘會有三個字母增長。

8. 在第4步你按ctrl-z時,實際上是給進程發一個信號,使用kill命令也可以給它們發信號,使用kill來顯示信號列表和標號,然後發一個SIGSTOP(19)的信號給job[1],到tty1上執行:

$ kill ?l
$ kill -19 %1

9. 輸入jobs,確認job[1]停止,到tty2上看結果是否停止。

10. 用kill重新啟動進程,使用SIGCONT(18)信號,你會看到進程又重新啟動了。(參考第8步的實現方法)

11. 使用kill命令的SIGTERM(15)信號,也是kill的默認信號,來結束三個進程,先結束job[2]和job[3]時,用jobs來看一下它們的狀態是不是terminated的:

$ kill %2 %3
$ jobs

12. 結束最後的進程:

$ fg
$

13. 在tty1上使用jobs命令來看一下,然後在tty2上看是否進程真的結束了,然後按結束tail進程,註銷。

14. 在tty1上刪除 ~/log文件













試驗13 
用戶信息
估計時間:  1小時
目標:            熟練掌握vi的控制操作。
試驗的起點:   安裝了Red Hat Linux可運行系統,安裝vim-common、
vim-minimal、vim-enhanced 的rpm 包

在提示符下鍵入: vimtutor
你會看到英文的試驗教程
第一講第一節∶移動游標


※※ 要移動游標,請依照說明分別按下 h、j、k、l 鍵。 ※※

^
k 提示∶ h 的鍵位於左邊,每次按下就會向左移動。
< h l > l 的鍵位於右邊,每次按下就會向右移動。
j j 鍵看起來很象一支尖端方向朝下的箭頭。
v

1. 請隨意在屏幕內移動游標,直至您覺得舒服為止。

2. 按下下行鍵(j),直到出現游標重複下行。

---> 現在您應該已經學會如何移動到下一講吧。

3. 現在請使用下行鍵,將游標移動到第二講。

提示∶如果您不敢確定您所按下的字母,請按下鍵回到正常(Normal)模式。
然後再次從鍵盤輸入您想要的命令。

提示∶游標鍵應當也能正常工作的。但是使用hjkl鍵,在習慣之後您就能夠快速
地在屏幕內四處移動游標了。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第一講第二節∶VIM的進入和退出


!! 特別提示∶敬請閱讀完整本一節的內容,然後才能執行以下所講解的命令。

1. 請按鍵(這是為了確保您處在正常模式)。

2. 然後輸入∶ :q! <回車>

---> 這種方式的退出編輯器絕不會保存您進入編輯器以來所做的改動。
如果您想保存更改再退出,請輸入∶
:wq <回車>

3. 如果您看到了命令行提示符,請輸入能夠帶您回到本教程的命令,那就是∶

vimtutor <回車>

通常情況下您也可以用這種方式∶

vim tutor <回車>

---> 這裡的 'vim' 表示進入vim編輯器,而 'tutor'則是您準備要編輯的文件。

4. 如果您自信已經牢牢記住了這些步驟的話,請從步驟1執行到步驟3退出,然
后再次進入編輯器。接著將游標移動到第一講第三節來繼續我們的教程講解。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第一講第三節∶文本編輯之刪除


** 在正常(Normal)模式下,可以按下 x 鍵來刪除游標所在位置的字元。**

1. 請將游標移動到本節中下面標記有 ---> 的那一行。

2. 為了修正輸入錯誤,請將游標移至準備刪除的字元的位置處。

3. 然後按下 x 鍵將錯誤字元刪除掉。

4. 重複步驟2到步驟4,直到句子修正為止。

---> The ccow jumpedd ovverr thhe mooon.

5. 好了,該行已經修正了,下一節內容是第一講第四節。

特別提示∶在您瀏覽本教程時,不要強行記憶。記住一點∶在使用中學習。



~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第一講第四節∶文本編輯之插入


** 在正常模式下,可以按下 i 鍵來插入文本。**

1. 請將游標移動到本節中下面標記有 ---> 的第一行。

2. 為了使得第一行內容雷同於第二行,請將游標移至文本第一個字元準備插入
的位置。

3. 然後按下 i 鍵,接著輸入必要的文本字元。

4. 所有文本都修正完畢,請按下 鍵返回正常模式。
重複步驟2至步驟4以便修正句子。

---> There is text misng this .
---> There is some text missing from this line.

5. 如果您對文本插入操作已經很滿意,請接著閱讀下面的小結。



~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第一講小結


1. 游標在屏幕文本中的移動既可以用箭頭鍵,也可以使用 hjkl 字母鍵。
h (左移) j (下行) k (上行) l (右移)

2. 欲進入vim編輯器(從命令行提示符),請輸入∶vim 文件名 <回車>

3. 欲退出vim編輯器,請輸入以下命令放棄所有修改∶

:q! <回車>

或者輸入以下命令保存所有修改∶

:wq <回車>

4. 在正常模式下刪除游標所在位置的字元,請按∶ x

5. 在正常模式下要在游標所在位置開始插入文本,請按∶

i 輸入必要文本

特別提示∶按下 鍵會帶您回到正常模式或者取消一個不期望或者部分完成
的命令。

好了,第一講到此結束。下面接下來繼續第二講的內容。


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第二講第一節∶刪除類命令


** 輸入 dw 可以從游標處刪除至一個單字/單詞的末尾。**

1. 請按下 鍵確保您處於正常模式。

2. 請將游標移動到本節中下面標記有 ---> 的那一行。

3. 請將游標移至準備要刪除的單詞的開始。

4. 接著輸入 dw 刪除掉該單詞。

特別提示∶您所輸入的 dw 會在您輸入的同時出現在屏幕的最後一行。如果您輸
入有誤,請按下 鍵取消,然後重新再來。

---> There are a some words fun that don't belong paper in this sentence.

5. 重複步驟3至步驟4,直至句子修正完畢。接著繼續第二講第二節內容。



~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第二講第二節∶其他刪除類命令


** 輸入 d$ 從當前游標刪除到行末。**

1. 請按下 鍵確保您處於正常模式。

2. 請將游標移動到本節中下面標記有 ---> 的那一行。

3. 請將游標移動到該行的尾部(也就是在第一個點號『.』後面)。

4. 然後輸入 d$ 從游標處刪至當前行尾部。

---> Somebody typed the end of this line twice. end of this line twice.


5. 請繼續學習第二講第三節就知道是怎麼回事了。





~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第二講第三節∶關於命令和對象


刪除命令 d 的格式如下∶

[number] d object 或者 d [number] object

其意如下∶
number - 代表執行命令的次數(可選項,預設設置為 1 )。
d - 代表刪除。
object - 代表命令所要操作的對象(下面有相關介紹)。

一個簡短的對象列表∶
w - 從當前游標當前位置直到單字/單詞末尾,包括空格。
e - 從當前游標當前位置直到單字/單詞末尾,但是 *不* 包括空格。
$ - 從當前游標當前位置直到當前行末。

特別提示∶
對於勇於探索者,請在正常模式下面僅按代表相應對象的鍵而不使用命令,則
將看到游標的移動正如上面的對象列表所代表的一樣。




~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第二講第四節∶對象命令的特殊情況


** 輸入 dd 可以刪除整一個當前行。 **

鑒於整行刪除的高頻度,VIM 的設計者決定要簡化整行刪除,僅需要在同一行上
擊打兩次 d 就可以刪除掉游標所在的整行了。

1. 請將游標移動到本節中下面的短句段落中的第二行。
2. 輸入 dd 刪除該行。
3. 然後移動到第四行。
4. 接著輸入 2dd (還記得前面講過的 number-command-object 嗎?) 刪除兩行。

1) Roses are red,
2) Mud is fun,
3) Violets are blue,
4) I have a car,
5) Clocks tell time,
6) Sugar is sweet
7) And so are you.


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第二講第五節∶撤消類命令


** 輸入 u 來撤消最後執行的命令,輸入 U 來修正整行。**

1. 請將游標移動到本節中下面標記有 ---> 的那一行,並將其置於第一個錯誤
處。
2. 輸入 x 刪除第一個不想保留的字母。
3. 然後輸入 u 撤消最後執行的(一次)命令。
4. 這次要使用 x 修正本行的所有錯誤。
5. 現在輸入一個大寫的 U ,恢復到該行的原始狀態。
6. 接著多次輸入 u 以撤消 U 以及更前的命令。
7. 然後多次輸入 CTRL-R (先按下 CTRL 鍵不放開,接著輸入 R 鍵) ,這樣就
可以執行恢復命令,也就是撤消掉撤消命令。

---> Fiix the errors oon thhis line and reeplace them witth undo.

8. 這些都是非常有用的命令。下面是第二講的小結了。




~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第二講小結


1. 欲從當前游標刪除至單字/單詞末尾,請輸入∶dw

2. 欲從當前游標刪除至當前行末尾,請輸入∶d$

3. 欲刪除整行,請輸入∶dd

4. 在正常模式下一個命令的格式是∶

[number] command object 或者 command [number] object
其意是∶
number - 代表的是命令執行的次數
command - 代表要做的事情,比如 d 代表刪除
object - 代表要操作的對象,比如 w 代表單字/單詞,$ 代表到行末等等。
$ (to the end of line), etc.

5. 欲撤消以前的操作,請輸入∶u (小寫的u)
欲撤消在一行中所做的改動,請輸入∶U (大寫的U)
欲撤消以前的撤消命令,恢復以前的操作結果,請輸入∶CTRL-R

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第三講第一節∶置入類命令


** 輸入 p 將最後一次刪除的內容置入游標之後 **

1. 請將游標移動到本節中下面示範段落的首行。

2. 輸入 dd 將該行刪除,這樣會將該行保存到vim的緩衝區中。

3. 接著將游標移動到準備置入的位置的上方。記住∶是上方哦。

4. 然後在正常模式下(鍵進入),輸入 p 將該行粘貼置入。

5. 重複步驟2至步驟4,將所有的行依序放置到正確的位置上。

d) Can you learn too?
b) Violets are blue,
c) Intelligence is learned,
a) Roses are red,



~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第三講第二節∶替換類命令


** 輸入 r 和一個字元替換游標所在位置的字元。**

1. 請將游標移動到本節中下面標記有 ---> 的第一行。

2. 請移動游標到第一個錯誤的適當位置。

3. 接著輸入 r ,這樣就能將錯誤替換掉了。

4. 重複步驟2和步驟3,知道第一行是已經修改完畢。

---> Whan this lime was tuoed in, someone presswd some wrojg keys!
---> When this line was typed in, someone pressed some wrong keys!

5. 然後我們繼續學校第三講第三節。

特別提示∶切記您要在使用中學習,而不是在記憶中學習。



~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第三講第三節∶更改類命令


** 要改變一個單字/單詞的部分或者全部,請輸入 cw **

1. 請將游標移動到本節中下面標記有 ---> 的第一行。

2. 接著把游標放在單詞 lubw 的字母 u 的位置那裡。

3. 然後輸入 cw 就可以修正該單詞了(在本例這裡是輸入 ine 。)

4. 最後按 鍵,然後游標定位到下一個錯誤第一個準備更改的字母處。

5. 重複步驟3和步驟4,知道第一個句子完全雷同第二個句子。

---> This lubw has a few wptfd that mrrf changing usf the change command.
---> This line has a few words that need changing using the change command.

提示∶請注意 cw 命令不僅僅是替換了一個單詞,也讓您進入文本插入狀態了。



~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第三講第四節∶使用c指令的其他更改類命令


** 更改類指令可以使用同刪除類命令所使用的對象參數。**

1. 更改類指令的工作方式跟刪除類命令是一致的。操作格式是∶

[number] c object 或者 c [number] object

2. 對象參數也是一樣的,比如 w 代表單字/單詞,$代錶行末等等。

3. 請將游標移動到本節中下面標記有 ---> 的第一行。

4. 接著將游標移動到第一個錯誤處。

5. 然後輸入 c$ 使得該行剩下的部分更正得同第二行一樣。最後按 鍵。

---> The end of this line needs some help to make it like the second.
---> The end of this line needs to be corrected using the c$ command.



~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第三講小結


1. 要重新置入已經刪除的文本內容,請輸入小寫字母 p。該操作可以將已刪除
的文本內容置於游標之後。如果最後一次刪除的是一個整行,那麼該行將置
於當前游標所在行的下一行。

2. 要替換游標所在位置的字元,請輸入小寫的 r 和要替換掉原位置字元的新字
符即可。

3. 更改類命令允許您改變指定的對象,從當前游標所在位置直到對象的末尾。
比如輸入 cw 可以替換當前游標到單詞的末尾的內容;輸入 c$ 可以替換當
前游標到行末的內容。

4. 更改類命令的格式是∶

[number] c object 或者 c [number] object

下面我們繼續學習下一講。



~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第四講第一節∶定位及文件狀態


** 輸入 CTRL-g 顯示當前編輯文件中當前游標所在行位置以及文件狀態信息。
輸入 SHIFT-G 則直接跳轉到文件中的某一指定行。**

提示∶切記要先通讀本節內容,之後才可以執行以下步驟!!!

1. 按下 CTRL 鍵不放開然後按 g 鍵。然後就會看到頁面最底部出現一個狀態信
息行,顯示的內容是當前編輯的文件名和文件的總行數。請記住步驟3的行號。

2. 按下 SHIFT-G 鍵可以使得當前游標直接跳轉到文件最後一行。

3. 輸入您曾停留的行號,然後按下 SHIFT-G。這樣就可以返回到您第一次按下
CTRL-g 時所在的行好了。注意∶輸入行號時,行號是不會在屏幕上顯示出來
的。

4. 如果願意,您可以繼續執行步驟1至步驟三。



~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第四講第二節∶搜索類命令


** 輸入 / 以及尾隨的字元串可以用以在當前文件中查找該字元串。**

1. 在正常模式下輸入 / 字元。您此時會注意到該字元和游標都會出現在屏幕底
部,這跟 : 命令是一樣的。

2. 接著輸入 errroor <回車>。那個errroor就是您要查找的字元串。

3. 要查找同上一次的字元串,只需要按 n 鍵。要向相反方向查找同上一次的字
符串,請輸入 Shift-N 即可。

4. 如果您想逆向查找字元串,請使用 ? 代替 / 進行。

---> When the search reaches the end of the file it will continue at the start.

"errroor" is not the way to spell error; errroor is an error.

提示∶如果查找已經到達文件末尾,查找會自動從文件頭部繼續查找。



~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第四講第三節∶配對括弧的查找
** 按 % 可以查找配對的括弧 )、]、}。**

1. 把游標放在本節下面標記有 --> 那一行中的任何一個 (、[ 或 { 處。

2. 接著按 % 字元。

3. 此時游標的位置應當是在配對的括弧處。

4. 再次按 % 就可以跳回配對的第一個括弧處。

---> This ( is a test line with ('s, ['s ] and {'s } in it. ))

提示∶在程序調試時,這個功能用來查找不配對的括弧是很有用的。






~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第四講第四節∶修正錯誤的方法之一


** 輸入 :s/old/new/g 可以替換 old 為 new。**

1. 請將游標移動到本節中下面標記有 ---> 的那一行。

2. 輸入 :s/thee/the <回車> 。請注意該命令只改變游標所在行的第一個匹配
串。

3. 輸入 :s/thee/the/g 則是替換全行的匹配串。

---> the best time to see thee flowers is in thee spring.

4. 要替換兩行之間出現的每個匹配串,請輸入 :#,#s/old/new/g (#,#代表的是
兩行的行號)。輸入 :%s/old/new/g 則是替換整個文件中的每個匹配串。




~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第四講小結


1. Ctrl-g 用於顯示當前游標所在位置和文件狀態信息。Shift-G 用於將游標跳
轉至文件最後一行。先敲入一個行號然後按 Shift-G 則是將游標移動至該行
號代表的行。

2. 輸入 / 然後緊隨一個字元串是則是在當前所編輯的文檔中向後查找該字元串。
輸入問號 ? 然後緊隨一個字元串是則是在當前所編輯的文檔中向前查找該字
符串。完成一次查找之後按 n 鍵則是重複上一次的命令,可在同一方向上查
找下一個字元串所在;或者按 Shift-N 向相反方向查找下該字元串所在。

3. 如果游標當前位置是括弧(、)、[、]、{、},按 % 可以將游標移動到配對的
括弧上。

4. 在一行內替換頭一個字元串 old 為新的字元串 new,請輸入 :s/old/new
在一行內替換所有的字元串 old 為新的字元串 new,請輸入 :s/old/new/g
在兩行內替換所有的字元串 old 為新的字元串 new,請輸入 :#,#s/old/new/g
在文件內替換所有的字元串 old 為新的字元串 new,請輸入 :%s/old/new/g
進行全文替換時詢問用戶確認每個替換需添加 c 選項,請輸入 :%s/old/new/gc


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第五講第一節∶在 VIM 內執行外部命令的方法


** 輸入 :! 然後緊隨著輸入一個外部命令可以執行該外部命令。**

1. 按下我們所熟悉的 : 命令設置游標到屏幕底部。這樣就可以讓您輸入命令了。

2. 接著輸入感嘆號 ! 這個字元,這樣就允許您執行外部的 shell 命令了。

3. 我們以 ls 命令為例。輸入 !ls <回車> 。該命令就會列舉出您當前目錄的
內容,就如同您在命令行提示符下輸入 ls 命令的結果一樣。如果 !ls 沒起
作用,您可以試試 :!dir 看看。

---> 提示∶ 所有的外部命令都可以以這種方式執行。

---> 提示∶ 所有的 : 命令都必須以 <回車> 告終。




~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第五講第二節∶關於保存文件的更多信息


** 要將對文件的改動保存到文件中,請輸入 :w FILENAME 。**

1. 輸入 :!dir 或者 :!ls 獲知當前目錄的內容。您應當已知道最後還得敲
<回車> 吧。

2. 選擇一個尚未存在文件名,比如 TEST 。

3. 接著輸入 :w TEST (此處 TEST 是您所選擇的文件名。)

4. 該命令會以 TEST 為文件名保存整個文件 (VIM 教程)。為了確保正確保存,
請再次輸入 :!dir 查看您的目錄列表內容。

---> 請注意∶如果您退出 VIM 然後在以文件名 TEST 為參數進入,那麼該文件內
容應該同您保存時的文件內容是完全一樣的。

5. 現在您可以通過輸入 :!rm TEST 來刪除 TEST 文件了。



~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第五講第三節∶一個具有選擇性的保存命令


** 要保存文件的部分內容,請輸入 :#,# w FILENAME **

1. 再來執行一次 :!dir 或者 :!ls 獲知當前目錄的內容,然後選擇一個合適的
不重名的文件名,比如 TEST 。

2. 接著將游標移動至本頁的最頂端,然後按 CTRL-g 找到該行的行號。別忘了
行號哦。

3. 接著把游標移動至本頁的最底端,再按一次 CTRL-g 。也別忘了這個行好哦。

4. 為了只保存文章的某個部分,請輸入 :#,# w TEST 。這裡的 #,# 就是上面
要求您記住的行號(頂端行號,底端行號),而 TEST 就是選定的文件名。

5. 最後,用 :!dir 確認文件是否正確保存。但是這次先別刪除掉。




~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第五講第四節∶提取和合併文件


** 要向當前文件中插入另外的文件的內容,請輸入 :r FILENAME **

1. 請鍵入 :!dir 確認您前面創建的 TEST 文件還在。

2. 然後將游標移動至當前頁面的頂端。

特別提示∶ 執行步驟3之後您將看到第五講第三節,請屆時再往下移動回到這裡來。

3. 接著通過 :r TEST 將前面創建的名為 TEST 的文件提取進來。

特別提示∶您所提取進來的文件將從游標所在位置處開始置入。

4. 為了確認文件已經提取成功,移動游標回到原來的位置就可以注意有兩份第
五講第三節,一份是原本,另外一份是來自文件的副本。



~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第五講小結


1. :!command 用於執行一個外部命令 command。

請看一些實際例子∶
:!dir - 用於顯示當前目錄的內容。
:!rm FILENAME - 用於刪除名為 FILENAME 的文件。

2. :w FILENAME 可將當前 VIM 中正在編輯的文件保存到名為 FILENAME 的文
件中。

3. :#,#w FILENAME 可將當前編輯文件第 # 行至第 # 行的內容保存到文件
FILENAME 中。

4. :r FILENAME 可提取磁碟文件 FILENAME 並將其插入到當前文件的游標位置
後面。








~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第六講第一節∶打開類命令


** 輸入 o 將在游標的下方打開新的一行並進入插入模式。**

1. 請將游標移動到本節中下面標記有 ---> 的那一行。

2. 接著輸入小寫的 o 在游標 *下方* 打開新的一行並進入插入模式。

3. 然後複製標記有 ---> 的行並按 鍵退出插入模式而進入正常模式。

---> After typing o the cursor is placed on the open line in Insert mode.

4. 為了在游標 *上方* 打開新的一行,只需要輸入大寫的 O 而不是小寫的 o
就可以了。請在下行測試一下吧。當游標處在在該行上時,按 Shift-O可以
在該行上方新開一行。

Open up a line above this by typing Shift-O while the cursor is on this line.





~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第六講第二節∶游標后插入類命令


** 輸入 a 將可在游標之後插入文本。 **

1. 請在正常模式下通過輸入 $ 將游標移動到本節中下面標記有 ---> 的第一行
的末尾。

2. 接著輸入小寫的 a 則可在游標之後插入文本了。大寫的 A 則可以直接在行
末插入文本。

提示∶輸入大寫 A 的操作方法可以在行末插入文本,避免了輸入 i,游標定位到
最後一個字元,輸入的文本, 回復正常模式,箭頭右鍵移動游標以及
x 刪除當前游標所在位置字元等等諸多繁雜的操作。

3. 操作之後第一行就可以補充完整了。請注意游標后插入文本與插入模式是基
本完全一致的,只是文本插入的位置定位稍有不同罷了。

---> This line will allow you to practice
---> This line will allow you to practice appending text to the end of a line.



~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第六講第三節∶另外一個置換類命令的版本


** 輸入大寫的 R 可連續替換多個字元。**

1. 請將游標移動到本節中下面標記有 ---> 的第一行。

2. 移動游標到第一行中不同於標有 ---> 的第二行的第一個單詞的開始,即單
詞 last 處。

3. 然後輸入大寫的 R 開始把第一行中的不同於第二行的剩餘字元逐一輸入,就
可以全部替換掉原有的字元而使得第一行完全雷同第二行了。

---> To make the first line the same as the last on this page use the keys.
---> To make the first line the same as the second, type R and the new text.

4. 請注意∶如果您按 退出置換模式回復正常模式,尚未替換的文本將仍
然保持原狀。





~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第六講第四節∶設置類命令的選項


** 設置可使查找或者替換可忽略大小寫的選項 **


1. 要查找單詞 ignore 可在正常模式下輸入 /ignore 。要重複查找該詞,可以
重複按 n 鍵。

2. 然後設置 ic 選項(ic就是英文忽略大小寫Ignore Case的首字母縮寫詞),即
輸入∶
:set ic

3. 現在可以通過鍵入 n 鍵再次查找單詞 ignore。重複查找可以重複鍵入 n 鍵。

4. 然後設置 hlsearch 和 incsearch 這兩個選項,輸入以下內容∶
:set hls is

5. 現在可以再次輸入查找命令,看看會有什麼效果∶
/ignore

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第六講小結


1. 輸入小寫的 o 可以在游標下方打開新的一行並將游標置於新開的行首,進入
插入模式。
輸入大寫的 O 可以在游標上方打開新的一行並將游標置於新開的行首,進入
插入模式。

2. 輸入小寫的 a 可以在游標所在位置之後插入文本。
輸入大寫的 A 可以在游標所在行的行末之後插入文本。

3. 輸入大寫的 R 將進入替換模式,直至按 鍵退出替換模式而進入正常
模式。

4. 輸入 :set xxx 可以設置 xxx 選項。









~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第七講∶在線幫助命令

** 使用在線幫助系統 **

Vim 擁有一個細緻全面的在線幫助系統。要啟動該幫助系統,請選擇如下三種方
法之一∶
- 按下 鍵 (如果鍵盤上有的話)
- 按下 鍵 (如果鍵盤上有的話)
- 輸入 :help <回車>

輸入 :q <回車> 可以關閉幫助窗口。

提供一個正確的參數給":help"命令,您可以找到關於該主題的幫助。請試驗以
下參數(可別忘了按回車鍵哦。:)∶

:help w <回車>
:help c_
:help insert-index <回車>
:help user-manual <回車>




~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第八講∶創建一個啟動腳本

** 啟用vim的功能 **

Vim的功能特性要比vi多得多,但大部分功能都沒有預設激活。為了啟動更多的
功能,您得創建一個vimrc文件。

1. 開始編輯vimrc文件,這取決於您所使用的操作系統∶

:edit ~/.vimrc 這是Unix系統所使用的命令
:edit $VIM/_vimrc 這是Windows系統所使用的命令

2. 接著導入vimrc範例文件∶

:read $VIMRUNTIME/vimrc_example.vim

3. 保存文件,命令為∶

:write

在下次您啟動vim的時候,編輯器就會有了語法高亮的功能。











UNIT 16 Lab
基本網路客戶

目標:使用工具在本地和遠程計算機傳輸文件。
實驗1 使用lftp
1. 使用ping測試連通性: ping ?c 3 stationxx
2. 使用lftp連接到遠程計算機
cd
lftp stationxx

cd pub
ls

get getme

exit

3. 檢查並修改得到的軟體
cat getme

pico getme 存為 getme.xy

cat getme.xy
4. 使用lftp把文件傳到用戶目錄
lftp ?u student stationxx
put getme.xy
exit

實驗2: 加密通訊 ssh套件
1. 複製getme.xy。
cd
cp getme.bd getme.bd.secure
2. scp getme.bd.secure [email protected]
3. ssh [email protected]

實驗3: 和遠程計算機同步文件
1. cd
rsync ? ? rsh=ssh [email protected]:get* .
ls getme*



UNIT 17 Lab
系統工具

實驗1:at
1. 使用以下命令在5分鐘后執行任務
at now + 5 min
2. 輸入以下命令
echo 「 This message was automtically sent via the at facility.」
3. 使用ctrl-d 結束命令輸入。at將顯示任務執行的時間
4. 確認任務已經排序
5. 檢查郵件。確認工作完成了

實驗2 使用rpm檢查包和文件的情況
1. 使用rpm列出安裝的包
rpm ?qa | less

2. 檢查安裝了多少個包
rpm ?qa | wc ?l

3. 檢查哪個包提供了vimtutor文件
rpm ?qf `which vimtutor`
4. 列出coreutils 提供的文件和相關信息
rpm ?qil coreutils

最後,感謝Iknownothing和Sherrie! 還有我的Mandy!













































奉獻Red Hat Linux 133 實驗翻譯(KevinZ)









###請轉貼時保留以下內容######
Red Hat Linux 133 實驗部分
應廣大RH愛好者的要求,奉獻Red Hat Linux 133 實驗翻譯
請提出寶貴意見Mail:[email protected]

KevinZ(kissingwolf)
2004.1.4
#############################

Lab1 硬體和安裝

步驟一:準備計算機
任務: 使用Red Hat Linux光碟啟動系統
在啟動時進入BIOS界面
設置系統啟動順序為A,CDROM,C
修改其他任何推薦的設置
保存並退出BIOS設置
步驟二:使用Anaconda(圖形模式)安裝Red Hat Linux
任務: 按照以下要求從光碟安裝Red Hat Linux。注意,要初始化圖形安裝界面可能需要等待一兩分鐘。
l 使用檢測到的滑鼠配置(除非老師另有指定)
l 選擇全新安裝
l 使用定製安裝選項
l 選擇使用Disk Druid手動分區,刪除所有原有的分區
l 使用以下分區方案:
n /boot 100M
n / 256M
n /usr 1000M
n swap 512M
n /var 400M
l 格式化所有分區,但是不選擇檢查壞塊
l 使用默認的啟動載入器設置(除非老師另有指定),不創建啟動載入器密碼
l 為網路設置選擇DHCP,選擇啟動時激活
l 使用默認防火牆配置
l 選擇適當的語言支持
l 設置對應的時區,根據老師的指示設置UTC
l 設置根密碼為redhat
l 啟用MD5和shaow密碼模式(默認驗證設置)
l 選擇安裝X window,不選任何其他組件
l 切換到tty5查看文件系統格式化的過程(使用Ctrl-Alt-5,用Alt-7切換回安裝嚮導)
l 創建啟動軟盤可選
l 使用檢測到的顯示器和圖形卡設置(除非老師另有指定)
l 配置使用圖形界面登錄
l 在安裝結束后重啟,完成初始化設置,不註冊Red Hat Network

安裝結束后啟動系統,以root帳號登錄,並檢查以下文件:
l /var/log/messages
l /var/log/dmesg

以上安裝的系統使用twm視窗管理器。通過後續的實驗,我們將安裝更多的軟體包,實現功能的擴展和界面的美觀

步驟三:使用NFS,FTP或HTTP安裝Red Hat Linux
任務: 破壞現有的系統,重新安裝Red Hat Linux。事先準備安裝光碟1或從老師那裡得到啟動的介質。

破壞現有系統:
cat /var/log/messages > /dev/hda; reboot
cat /var/log/messages > /dev/sda; reboot

重啟后使用啟動介質啟動,按照以下要求安裝(由於已經覆蓋了分區表,系統將警告沒有找到分區表,必須重新初始化)

1. 使用CD啟動
2. 在boot提示下回車
3. 選擇對應的語言(English)
4. 在OK提示下回車
5. 選擇對應的鍵盤(US)
6. 在OK提示下回車
7. 選擇對應的安裝方式(NFS鏡像,FTP,HTTP)
8. 配置TCP/IP,選擇「使用動態IP配置(BOOTP/DHCP)」
9. 在OK提示下回車
10. 根據選擇的安裝方式輸入對應的信息:

FTP方式
FTP站點名稱:192.168.0.254
Red Hat目錄:pub/

HTTP方式
Web站點名稱:192.168.0.254
Red Hat目錄:pub/

NFS方式
NFS伺服器名:192.168.0.254
NFS載入點:/var/ftp/pub

11. 這時Anaconda會讀取安裝鏡像並檢測顯示器和滑鼠的類型,顯示歡迎界面
12. 選擇定製安裝
13. 使用diskdruid分區。使用以下分區方案:
/boot 100M
/ 2000M
swap 512M
/home 3 × 256M RAID0

14. 啟動載入器,時區,圖形,防火牆和驗證方式都是用默認設置,除非教師指定
15. 設置適當的語言
16. 設置root密碼為redhat
17. 安裝默認的軟體包

*指南中的分區方案非常重要,否則可能出現意料外的結果。


Lab2 Linux文件系統
目標:熟悉文件系統相關知識和技能

步驟一:創建和載入文件系統
任務:
1. 使用fdisk ?l 得到ev/hda的分區尺寸信息。計算硬碟上沒有分區的空間尺寸
2. 使用fdisk新增一個512M的邏輯分區(使用w命令將改動寫入磁碟)。這個新分區的設備名是/dev/had_ ?為什麼?
3. 重啟以確定改動后的分區表被讀入
4. 使用mke2fs,在新建的分區上創建一個新的ext2文件系統。創建時使用2k的塊,每4k一個inode的設置。可能需要查看mke2fs的man page
5. 創建目錄/data,作為該文件系統的載入點
6. 使用mount命令把新文件系統載入到/data。把/etc/passwd複製到/data,檢查確認複製成功
7. Umount /data
8. 使用e2label為新分區指定卷標:
e2label /dev/hdax /data x是新創建分區的序號
9. 在/etc/fstab文件中為載入/data加入以下行:
LABEL=/data /data ext2 defaults 1 2
或者
/dev/hdax /data ext2 defaults 1 2
以上兩行的實際效果相同。但是,如果更換了硬碟的匯流排或者是更改了主從的順序,在fstab中使用卷標仍然可以定位這個設備
10. 載入新的分區
mount /data
11. 複製文件或使用touch 創建文件

步驟二:把ext2轉換為ext3
1. 鍵入sync。這個命令把磁碟緩存信息寫入磁碟。通常這個命令是定期執行的,但是以下步驟可能會先佔自動同步。
2. 使用reset鍵重啟動,或者使用電源開關關閉再打開(正常情況下不要這樣)
3. 如果出現「Repair filesystem」的提示,嘗試使用e2fsck /dev/hdx 修復文件系統
4. 成功啟動后,通過創建journaling inode日誌把ext2文件系統轉換為ext3。因為ext3 的數據完整性和文件系統完整性大大增強了,所以可以 把自動預載入(pre-mount)基於時間的定期文件系統檢查。
Tune2fs ?j ?c 0 ?i 0 /dev/
5. 檢查文件系統的characteristics
tune2fs ?l /dev/
6. 編輯/etc/fstab /data的相關行,把文件系統由etx2更改為ext3
7. 卸載並用ext3重新載入文件系統,確認使用了ext3:
umount /data ; mount /data
df ?T /data
8.確認/boot下初始的虛擬盤鏡像中包含了必要的ext3模塊和jbd日誌模塊。如果/data是你的機器上的第一個ext3文件系統,很可能 initrd中並不包含這些模塊。這種情況只當我們需要ext3的支持而在initrd中又不包括相關的模塊時非常重要。假設出現了這種情況,我們可以製作一個/boot/initrd-.img文件:
mkinitrd ?f ?v /boot/initrd-$(uname ?r).img $(uname ?r)
9. 鍵入sync,然後手動重啟動系統。
10. 觀察啟動過程。系統檢查了哪個文件系統?在/data文件系統,是否看到了「recovering journal」提示信息?當不正常重啟時,使用ext3的日誌恢復是否比ext2的fsck快了?

步驟三:使用autofs自動載入系統
1. 確認iptables已經關閉
2. 編輯/etc/auto.master文件,去掉對/misc一行的註釋
3. 在/etc/auto.misc文件中增加一行,用於載入server1.example.com的/var/ftp/pub目錄到本機的目的/server1. 可以參考ftp.example.com行的示例.
4. 重啟autofs服務 service autofs restart
5. 測試/misc/server1目錄


Lab 3 管理啟動
目標: 定製系統服務的技巧

步驟一: 使用chkconfig禁用服務
1. 使用chkconfig檢查系統服務的狀態: chkconfig --list
2. 使用以下示例將isdn在所有runlevel關閉
chkconfig --del
3. 使用--help 查看chkconfig語法信息 chkconfig --help. 關閉runlevel3和runlevel5的kudzu服務
4. 觀察 on 和 --add 的差異, off 和 --de 的差異
chkconfig isdn --list
chkconfig isdn on
chkconfig isdn --list
chkconfig isdn off
chkconfig isdn --list
chkconfig isdn --del
chkconfig isdn --list
chkconfig isdn --add
chkconfig isdn --list
5. 使用chkconfig查看系統服務的狀態和改變狀態

步驟二: 更改系統登錄標題
1. 我們將設置rc.local腳本用於每次重啟時出現登錄標題. 打開/etc/rc.local文件找到以下行:
touch /var/lock/subsys/local
2. 在後面插入以下行:
echo 「 Welcome to \n」 > /etc/issue
echo 「All access to this computer is monitored」 >> /etc/issue
echo 「Unauthorized access is prohibited」 >> /etc/issue
echo >> /etc/issue
echo 「Last reboot complete at $(/bin/date)」 >> /etc/issue
3. 保存文件,把/etc/issue複製為/etc/issue.orig
4. 重啟動系統
5. 當系統啟動后,切換到虛擬控制台確認登錄標題出現了. 打開/etc/issue, 注意mingetty把\n擴展為你的主機名

步驟三: 更改默認runlevel
1. 編輯/etc/inittab文件,將默認runlevel從5改為3,如下:
id:3:initdefault:
2. 重啟動系統.發生了什麼?
3. 把默認runlevel改為5,重啟動系統

步驟四: 增加當天的消息
1. 編輯/etc/motd文件,默認應為空. 增加以下行:
##################################
# Welcome to station xx #
##################################
The sysadmin is playing today.
Expect frequent system downtime.
2. 切換到虛擬控制台登錄.


Lab 4 用戶和組管理
目標: 用戶和組管理的技巧

步驟一: 創建用戶和組
1. 使用useradd命令,為以下用戶創建帳號:Joshua, alex, dax, bryan, zak, ed, manager. 為每個用戶設置一個密碼.
2. 使用groupadd命令,增加以下組: 並使用 ?g 選項設定對應的GID
group gid
sales 10000
hr 10001
web 10002
為什麼不用系統默認的gid?
3. 使用usermod命令把joshua和alex增加到sales組, dax和bryan到hr組, zak和ed到web組. 把manager加入所有組. 使用 ?G選項.
4. 用各帳戶登錄,使用id命令確認組成員身份. 還有什麼方法可以確認?

步驟二: 設置共享文件夾
1. 創建/depts目錄,在目錄下創建sales, hr, web文件夾
mkdir ?p /depts./{sales,hr,web}
2. 使用chgrp命令設置對應組擁有對應文件夾
chgrp sales /depts/sales
3. 設置/depts目錄的許可權為755, 子文件夾的許可權為770
4. 設置各部門的子文件夾的sgid, 使得創建的文件所有權為對應的組
shmod g+s /depts/sales
5. 使用各個帳號登錄,並在對應位置創建文件,檢查效果.只有manager可以進入所有的目錄.也可以使用su -命令,但是要加上-,並且su下一個帳戶之前要退出前一個帳戶.

步驟三: 設置磁碟配額
1. 創建名為filehog的帳戶,並設置用戶在/home目錄有60個inode的軟限制和100個inode的硬限制. 使用以下命令測試, 要使用su - 命令,否則會失敗.
su ? filehog
quota
for I in $(seq 1 100); do echo ?n 「file$(i)」; touch file$(i) 2 >&1; done | less
quota

quota命令會報告當前的限制和已經使用的inode. 使用循環的目的是創建100個文件. 因為當創建用戶filehog的時候需要從/etc/skel複製一些文件,所以創建100個文件的命令將不會成功.
如果quota設置成功,你會看到一系列反饋的數字直到達到軟限制的數目. 超過限制后,會看到一個警告,但是命令仍然能夠執行.達到硬限制后,將得到出錯信息,而且不能再創建任何文件. 可以用回滾檢查輸出,並且用ls命令查看filehog的主目錄.
2. 創建一個名為diskhog的用戶, 設置用戶在/home目錄的軟限制為4MB, 硬限制為5MB,使用以下命令測試
su ? diskhog
quota
dd if=/dev/zero of=bigfile count=3 #將成功
dd if=/dev/zero of=bigfile count=4 #將成功
dd if=/dev/zero of=bigfile count=5 #將失敗
觀察quota命令的輸出. 注意當超出inode軟限制和block軟限制的輸出差別.達到inode軟限制時用戶得到警告,而達到block軟限制時是不同的.

步驟四: 客戶端NIS
1. 使用authconfig配置系統為NIS客戶. 設置notexample為NIS域名, 伺服器為192.168.0.254
2. 試用guest200x為帳號從虛擬控制台登錄, x為座位編號.發生了什麼? 如果登錄失敗,檢查設置.如果還有問題,確認教師機的設置正確.當驗證成功后,你將看到shell的目錄為/. 因為沒有在本地創建帳號,所以沒有主目錄. 當用戶帳戶使用目錄服務的時候會出現這種情況,無論是NIS,LDAP還是SMB
3. 使用autofs解決主目錄問題.用戶主目錄位於server1.example.com,我們可以載入基於NFS的共享來提供用戶環境.首先編輯/etc/auto.master,增加以下行
/home/guests /etc/auto.guests --timeout=60
這條記錄告訴自動載入器(內核模塊之一)/home/guests由它控制.所有相關的載入設置保存在/etc/auto.guests文件中,而且如果60秒內沒有活動就自動卸載.
4. 創建並編輯/etc/auto.guests文件.增加以下行:
* -rw, soft, intr 192.168.0.254:/home/guests/&
這條記錄指明在目錄下的所有子目錄都配置為從192.168.0.254:/home/guests下的相應目錄載入,並且設為:讀寫,如果載入不成功就返回超時,並且在載入不可用時仍允許進程訪問文件.
5. 配置autofs在runlevel3,4,5時運行,並手動啟動:
chkconfig autofs on
service autofs start
6. 登錄並查看是否主目錄自動載入.可以試驗登錄到附近的其他機器.你將可以在notexample域內的任何一台機器上獲得自己的用戶環境.
7. 在自己的機器上以root登錄,,使用su ?guest200x.是否提示輸入密碼? 這意味著本地root帳號和NIS域之間是什麼關係?

配額方案:
1. 編輯/etc/fstab, 用usrquota代替defaults, 然後執行 mount ?o remount /home
2. 創建一個用於保存用戶配額的資料庫(-c 可以在第一次運行quotacheck時隱藏警告)
touch /home/aquots.user
quotacheck ?c /home
3. 打開內核強制配額
quotaon /home
4. 設置EDITOR變數為你希望的文本編輯器
5. edquota filehog 設置硬節點限制為100,軟節點限制為60
6. edquota diskhog 設置軟塊限制為4096,硬塊限制為5120

Lab 5 靜態網路設置
目標: 手動配置網路設置的技巧
步驟一: 設置IP地址
1. 使用ifdown命令關閉網卡
ifdown eth0

2. 用文本編輯器打開/etc/sysconfig/network-scripts/ifcfg-eth0, 按以下內容更改(x為你的座位號)
DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
IPADDR=192.168.0.x
NETMASK=255.255.255.0
GATEWAY=192.168.0.254
3. 查看/etc/resolv.conf的內容.裡面應該包含從DHCP伺服器得到的設置.如果沒有.改為以下設置:
search example.com
nameserver 192.168.0.254
4. 使用ifup啟動配置好的網卡
ifup eth0
5. 使用ping server1 確認網路配置
6. 重啟動系統,使用ping server1 確認網路配置

Lab 6 系統管理工具
目標: 掌握系統管理工具的使用以及對CUPS的管理

步驟一: 使用at和cron
1. 設置一個提示,提醒今天中午12:00去吃午餐. 在root提示符下.使用以下命令:
at noon; (回車)
echo 「Time for lunch with Joe.」 (回車)
2. 使用atq命令檢查任務隊列,確認
3. 使用at命令在5分鐘后運行 df ?k命令
4. 設置今天每10分鐘檢查一次系統狀態用於檢查性能問題.你懷疑時內存或者IO問題,所以要進行相關的監控. 使用root帳戶,並使用crontab ?e 命令編輯cron文件
5. 在文件種加入以下行:
*/10 8-17 * * * /usr/bin/free; /usr/bin/iostat
6. 如何把來自cron的輸出到一個郵件地址?
7. 以root身份使用pine,mail或mutt檢查使用受到了來自at和cron任務的郵件
8. 成功后刪除cron任務

步驟二: 日誌記錄到一個集中的位置
這個實驗需要和相鄰計算機的配合.
1. 首先設置syslogd接受遠程消息. 編輯/etc/sysconfig/syslog文件:
SYSLOGD_OPTIONS=」-R ?M 0」
2. 重啟動syslogd:
service syslog restart
3. 設置syslogd把消息發向遠程機器: 在/etc/syslog.conf文件種增加以下行:
user.* @stationx
4. 重啟動syslogd:
service syslog restart
5. 使用logger命令生成syslog消息,測試設置:
logger ?i ?t yourname 「this is a test」
這條消息是否出現在相鄰機器的/var/log/messages文件中?

步驟三: 使用dump/restore恢復單個文件
1. 準備用dump備份/boot目錄下的文件. 使用df /boot查看/boot所在的設備(以下假設為/dev/hda1)
2. 首先確認備份需要的空間. 查看一個0級備份需要的位元組數,使用 -S
# dump -oS /dev/hda1
3. 備份到文件而非磁帶. 確認在/var/tmp目錄是否有足夠的空間,執行
# dump -0u ?f /var/tmp/dumpfile /dev/hda1
4. 檢查/etc/dumpdates,查看完全備份的時間戳.
5. 使用restore檢查備份文件的內容
# restore ?tf /var/tmp/dumpfile
6. 我們可以使用restore的互動模式恢復特定文件到一個臨時目錄.
# mkdir /tmp/restored; cd /tmp/restored
# restore ?if /var/tmp/dumpfile
7. 這時會看到一個restore > 提示符. 鍵入help查看可用命令的列表. 使用ls和cd命令查看備份文件的列表.
8. 使用add,選中/grub.menu.1st和/grub/grub.conf文件.列出所在目錄,恢復的文件應該帶有星號.
9. 鍵入extract命令恢複選中的文件.設置下個卷名為1, 不為解壓目錄設置所有者模式. quit退出restore模式.
10. 在restore運行的目錄中應該有一個grub目錄,包含恢復的grub.conf和menu.1st文件.

步驟四: 設置印表機,使用CUPS管理印表機.
1. 使用root帳戶運行redhat-config-printer
2. 選擇新建,回車
3. 在隊列名稱位置輸入lp0
4. 選擇隊列類型為本地列印設備
5. 選擇下一步,回車
6. 選擇/dev/lp0,選擇下一步
7. 選擇postscript printer, 選擇下一步
8. 當出現創建新隊列:名稱和類型畫面時,選擇結束,回車
9. 選擇退出,回車.將詢問是否保存.選擇是.
10. 鍵入命令: cd 並鍵入 lpr < install.log
11. 鍵入命令: lpq (將會看到一個由root激活的列印任務,任務號為1)
12. 鍵入命令: lprm 1 刪除任務
13. 鍵入命令: lpq (將會看到任務已經刪除)

[火星人 ] 奉獻Red Hat Linux 033 實驗翻譯(KevinZ)已經有802次圍觀

http://coctec.com/docs/linux/show-post-134071.html