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為以后的步驟建立文件。這種擴展在接下來的命令中是如何工作
的在以后的章節中進行討論?,F在,僅僅按照下面的行鍵入就行了(在集合與集合之間使用包括花括號{}和下劃線的字符)
$ touch __
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 *c1-3
$ rm *c1-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 suclearcase/" target="_blank" >ccessfully.
第一步:本地用戶登陸
任務:
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壓縮你的文檔。然后報告文件的大?。?br \="" />$ 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文件然后在壓縮,然后比較新文件的大?。?br \="" />$ 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^window-demo
2. 重復執行上一個包含字符串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的桌面環境已經按你的要求定制好了。
(end)
試驗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過濾器,它會默認把跟在后面的參數當作文件名,并把這個文件作為輸入,如果沒有文件名則把標準的輸入作為自己的輸入,然后將它們發送到標準的輸出上去?,F在我們來實驗一下:
$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