• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • RHCE課堂實驗筆記

    發表于:2007-07-04來源:作者:點擊數: 標簽:
    文件和目錄操作 估計用時:1小時30分 目標:熟悉文件、目錄操作命令的數、語法和幾個文件的使用。實驗將這些命令組合成一個一般的用戶任務。 實驗前準備:準備一個安裝好的Red Hat Linux 系統,并準備一個叫student 的非特權帳號,其密碼為student。檢查一下
    文件和目錄操作
      估計用時:1小時30分
      目標:熟悉文件、目錄操作命令的數、語法和幾個文件的使用。實驗將這些命令組合成一個一般的用戶任務。
      實驗前準備:準備一個安裝好的Red Hat Linux 系統,并準備一個叫student 的非特權帳號,其密碼為student。檢查一下指南以確認這個帳號是否已經存在在系統中。如果你的student 帳號還未建立,則按如下次序操作:

    單元三實驗
      文件和目錄操作
      估計用時:1小時30分
      目標:熟悉文件、目錄操作命令的數、語法和幾個文件的使用。實驗將這些命令組合成一個一般的用戶任務。
      實驗前準備:準備一個安裝好的Red Hat Linux 系統,并準備一個叫student 的非特權帳號,其密碼為student。檢查一下指南以確認這個帳號是否已經存在在系統中。如果你的student 帳號還未建立,則按如下次序操作:
      1、以root 用戶登錄
      2、輸入 # useradd student
      3、輸入 # passwd student
      Changing password for user student
      New UNIX password:
      BAD PASSWORD: it is based on a dictionary word
      Retype new UNIX password
      passwd: all authentication tokens updated suclearcase/" target="_blank" >ccessfully
      實驗1:目錄和文件管理
      假設:
      你在你的home 目錄中收集了一大堆文件,而你覺得現在該是將他們整理一下的時候了。你打算建立幾個新的子目錄,并將拷貝或者移動它們以適合你的安排。除此之外,還有一些文件你根本用不著,你想刪除它們。
      任務:
      1、在tty1 上以student登錄。密碼為student。
      2、剛剛登錄后你應該在你的home 目錄中。用"print working directory"命令校驗一下。
      $ 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/
      或者
      $ cd "A Reports"/
      改變了當前目錄。然后:
      $ mkdir 1 2 3
      使用ls 命令校驗你已經在"A Reports"目錄中有了3個子目錄,分別叫做1, 2, 3。
      8、將所有含"B"的文件移出你的home 目錄并以月份分組。做類似這種復雜的通配字符的操作時,通常先將其“預覽”一遍會是個不錯的主意,它可以讓你確認是在正確的文件上進行了操作。其中一種方法是將你的命令替換成一種“無害”的命令。
      $ cd
      $ ls -l *dec?b?
      你應該看到有9個"december", "b"文件被列出?,F在移動它們:
      $ mv *dec?b? december/
      列出december 子目錄以確認移動操作順利完成了。
      $ ls -l december/
      total 0
      -rw-rw-r-- 1 student student 0 Oct 16 22:16 graph_dec_b1
      -rw-rw-r-- 1 student student 0 Oct 16 22:16 graph_dec_b2
      -rw-rw-r-- 1 student student 0 Oct 16 22:16 graph_dec_b3
      -rw-rw-r-- 1 student student 0 Oct 16 22:16 memo_dec_b1
      -rw-rw-r-- 1 student student 0 Oct 16 22:16 memo_dec_b2
      -rw-rw-r-- 1 student student 0 Oct 16 22:16 memo_dec_b3
      -rw-rw-r-- 1 student student 0 Oct 16 22:16 report_dec_b1
      -rw-rw-r-- 1 student student 0 Oct 16 22:16 report_dec_b2
      -rw-rw-r-- 1 student student 0 Oct 16 22:16 report_dec_b3
      9、將所有剩下的"B"文件分別移入相應的目錄:
      $ mv *nov?b? november
      $ mv *oct?b? october
      $ mv *sep?b? september
      10、現在你將"A"文件移動到它們相應對數字的目錄中去:
      $ cd "A Reports"/
      $ mv ~/*_a1 1/
      "a1","september"文件不需要了。刪除它們并確認剩下的文件已正確的移動了。
      $ cd 1
      $ 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
      /home/student/A Reports/1
      使用相對路徑移動"a2"文件:
      $ mv ../../*a2* ../2/
      使用絕對路徑移動"a3"文件
      $ mv /home/student/*a3* /home/student/A\ Reports/3/
      12、回到你的home目錄下,并用ls 確認在該目錄下只剩下"c"文件。
      13、每個月的"c1"和"c2"文件很重要,你想將它們備份到另外一個目錄中去:
      $ mkdir /tmp/archive
      $ cp report*[1-2] /tmp/archive/
      除此之外所有December月份的文件應備份到/tmp/archive 目錄中。注意使用 -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*檢驗所剩余的文件。為什么你不能用rm *c*刪除?
      (提示:試試ls *c* 看看)
      15、刪除所剩余的"c"文件:
      $ rm *c[1-3]
      $ ls
      A Reports december november october september
      完成:
      一個良好組織的home 目錄,文件都放在合適的子目錄中。一些文件備份在/tmp/archive 目錄中。
      實驗2:檢測磁盤使用程度
      假設:
      你想檢測系統上每個文件系統所剩余的空間。除此之外,你需要有個包含最占磁盤空間的目錄的列表。
      任務:
      1、使用df 檢測文件系統上剩余的空間。輸出將類似于如下所示(這當然取決于你的機器安裝和配置)。
      $ df
      Filesystem 1k-blocks Used Available User% Mounted on
      /dev/hda5 12880648 1634344 10591988 14% /
      /dev/hda1 36566 2476 32202 8% /boot
      2、注意缺省的df 命令是以塊(block)為單位輸出的。試著使用-h 和-H 選項產生更人性化的輸出:
      $ df -h
      Filesystem 1k-blocks Used Available User% Mounted on
      /dev/hda5 12G 1.6G 10G 14% /
      /dev/hda1 36M 2.5M 31M 8% /boot
      $ df -H
      Filesystem 1k-blocks Used Available User% Mounted on
      /dev/hda5 13G 1.7G 10G 14% /
      /dev/hda1 37M 2.6M 32M 8% /boot
      兩種選項有何區別?(用man df 查找答案)
      3、在home 目錄下使用du (disk usage)命令檢測你的home 目錄使用了多少空間。務必使用-h 選項產生人性化輸出。
      實驗3:檢測文本文件
      任務:
      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
      ......輸出省略......
      abducts
      Abe
      abed
      ......輸出省略......
      用less 你可以往回翻(用b)和往前翻(用空格鍵),一次一個屏幕。
      4、若你只需要快速瀏覽一下一個文件的頭部或者尾部,你可以使用head 或者tail:
      $ head words
      Aarhus
      Aaron
      Ababa
      aback
      abaft
      abandon
      abandoned
      abndoning
      abandonment
      abandons
      $ tail words
      zoologically
      zoom
      zooms
      zoos
      Zorn
      Zoroaster
      Zoroasterian
      Zulu
      Zulus
      Zurich
      使用man 搜索head 和tail,找到可以修改顯示行數、和顯示的相對位置的選項。
      哪個命令可以顯示某文件的前50行?
      哪個命令可以顯示某個文件從25000行開始,到其結束?
      單元四實驗:用戶信息和man
      估計用時:30分鐘
      目標:熟悉幾個用戶識別和帳戶切換命令的使用。
      實驗前準備:準備一個安裝好,完成過單元三實驗的Red Hat Linux 系統,除此之外一個叫visitor 的非特權帳號,其密碼為visitor。檢查一下指南以確認這個帳號是否已經存在在系統中。如果你的visitor 帳號還未建立,則按如下次序操作:
      1、以root 用戶登錄
      2、輸入 # useradd visitor
      3、輸入 # passwd visitor
      Changing password for user visitor
      New UNIX password:
      BAD PASSWORD: it is based on a dictionary word
      Retype new UNIX password
      passwd: all authentication tokens updated successfully
      實驗1:本地用戶登錄
      任務:
      1、完全注銷你的登陸。務必確認你也退出了所有的虛擬終端和X Window 系統。
      2、按切換到虛擬終端1(tty1)。
      3、以root身份登錄。
      4、檢測該登錄。運行下列命令:
      # whoami
      # groups
      # id
      檢測這些命令的輸出。
      5、檢測當前工作站所有的登錄。這時應該只有一個用戶在該系統上登錄。以下命令的輸出將隨著實驗的進行變得越來越有趣。
      # users
      # who
      # w
      檢測這些命令的輸出。
      6、按切換到虛擬終端2(tty2)。
      7、使用student身份登錄。
      8、檢測該登錄的。運行下列命令:
      $ whoami
      $ groups
      $ id
      檢測這些命令的輸出。
      9、檢測當前工作站的所有登錄:
      $ users
      $ who
      $ w
      檢測這些命令的輸出。
      10、按切換到虛擬終端3(tty3)。
      11、以visitor身份登錄
      12、檢測該登錄。運行下列命令:
      $ whoami
      $ groups
      $ id
      檢測這些命令的輸出
      13、檢測當前工作站所有的登錄:
      $ users
      $ who
      $ w
      檢測這些命令的輸出。
      實驗2:切換用戶帳號
      任務:
      1、按切換到虛擬終端3(tty3)。
      2、運行pwd 命令確定你當前的目錄。檢測你當前的可執行文件搜索路徑。檢測你的用戶信息。
      $ id
      $ pwd
      $ echo $PATH
      在此記錄結果:
      id = ______________________
      pwd = _____________________
      $PATH = ---------------------
      3、使用su 命令并不帶 "-" 選項切換到root 用戶。運行pwd 命令確認你的當前目錄。檢測你當前的可執行文件搜索路徑。
      $ su
      # id
      # pwd
      # echo $PATH
      在此記錄結果:
      id = ______________________
      pwd = _____________________
      $PATH = ___________________________________________________________________
      4、退出root 帳號,回到student 帳號。
      # exit
      5、使用su - 切換到root 帳號。運行pwd 命令確認你的當前目錄。檢測你當前的可執行文件搜索路徑。
      $ su -
      # id
      # pwd
      # echo $PATH
      在此記錄結果:
      id = ______________________
      pwd = _____________________
      $PATH = ---------------------
      6、注銷本次實驗所有的登錄,包括本地的和遠程的。
      實驗3:使用man
      任務:
      1、查詢lpr的手冊(manual page)
      $ man lpr
      2、lpr 的-m 選項有什么用處?(提示:使用"/"鍵開始一次查找,輸入-m,然后按回車)
      3、在lpr 中如何改變打印紙張的寬度?
      4、lpr 有沒有用到的 FILES?(如果有,無需列出)
      5、在屏幕上顯示manual pages中的命令名,該命令的描述(description)中提到"postscript"。
      6、在上面的結果中查找可以將Postscript或者PDF轉換成ASCII的命令。

    單元五實驗
      文件訪問權限
      估計用時:30分鐘
      目標:熟悉多個修改文件權限命令的語法和應用,并可組合命令以完成一般的任務。
      實驗前準備:一臺安裝好的系統,其上有student 帳號。
      實驗1:定義文件的訪問權限的實踐
      任務:
      1、寫下文件權限的字串(類似rwxr-xr-x):
      664:_______________________
      755:_______________________
      000:_______________________
      711:_______________________
      700:_______________________
      777:_______________________
      555:_______________________
      705:_______________________
      111:_______________________
      600:_______________________
      731:_______________________
      2、一個文件權限為755,哪條命令可以將其權限改為r-xr--r--?
      3、你剛從Internet上下載了一個值得信任的執行文件。在你運行它之前你必須做什么?寫下兩種不同的途徑。
      4、你在之后的單元中將會學到進程(系統中運行的程序)是被用戶和用戶組所擁有的,就像文件和目錄一樣。一個進程只有當它的擁有者和擁有者組擁有相應的權限時,它才可以讀、寫并執行一個文件或目錄。
      Red Hat Linux 系統通常配置成由用戶apache 和組apache 運行apache Web服務器進程。
      在系統安裝的時候該用戶和組已經作為apache 的一部分已經建立。
      假設你有一個目錄結構 /home/student/archive 里面有許多的文件和目錄,都被設置為權
      限700。你想將archive 目錄在Internet 上設置為可訪問的,但是當前的許可并不允許web服
      務器(以用戶apache 運行)訪問文件。使用chmod 命令,你如何用一條命令改變文件的訪問權限?
      實驗2:使用umask 設置新建文件的默認訪問權限。
      任務:
      1、登錄
      2、查看當前的umask
      $ umask
      3、創建幾個文件和目錄,看看它們的訪問權限
      $ touch umtest1
      $ touch umtest2
      $ mkdir umtestdir1
      $ ls -ld um*
      4、改變你的umask 為一個更安全的設置,然后新建文件與目錄,再比較一下訪問權限
      $ umask 066
      $ touch umtest3
      $ touch umtest4
      $ mkdir umtestdir2
      在查看訪問權限之前,你覺得它們的權限會是多少?
      $ ls -ld um*
      單元六實驗
      Linux 文件系統基礎
      估計用時:1小時30分鐘
      目標:形成對Linux 文件系統的更充分的理解,包括:建立和使用link,使用mtools 包以處理DOS 文件系統,使用slocate 和find,并將文檔打包和壓縮。
      實驗前準備:一臺裝有Red Hat Linux 系統的機器,你在實驗2中需要一張空白軟盤。
      實驗1:建立并使用link
      任務:
      1、在早先的實驗中,你應該拷貝了/usr/share/dict/words 到你的帳號——student 的home目錄中,并命名為words。當時,這樣做的原因是為了使你訪問這個文件更簡單?,F在,我們使用link 來達到同樣的效果。
      2、為了避免原來的文件和拷貝文件的混淆,我們刪除words 文件的拷貝。
      $ cd
      $ rm words
      3、如果這時候你還沒有意識到的話,你早些使用的/usr/share/dict/words 實際上是一個soft 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、你如何知道它是一個soft link?
      b、為什么文件的大小是11字節?
      c、words對所有用戶開放所有的訪問權限。這會對linux.words 產生什么樣的影響?除了root用戶能通過這個link 向linux.words 寫數據嗎?
      4、再次列出文件,這次顯示它們所對應的inode。它們是否擁有相同的inode?
      $ ls -i /usr/share/dict
      5、現在在你的home 目錄中建立一個symbolic link 和一個hard link,指向
      /usr/share/dict/linux.words:
      $ ln -s /usr/share/dict/linux.words soft
      $ ln /usr/share/dict/linux.words hard
      6、測試你的新link 指向的數據:
      $ head hard soft
      7、用下面的命令測試你建立的link,并回答下列問題:
      $ ls -il hard soft
      $ stat hard soft
      寫出文件hard 的大小________,和soft 的大小_________。
      hard 確實使用的數據塊________,soft確實使用的數據塊__________。
      你如何解釋這兩個文件在數據塊數上的不同?
      hard 的link 數________,soft 的link 數__________。
      hard 的 UID和GID__________,soft的_____________。
      文件hard 由root 所擁有,并對其他用戶只開放讀權限。student 用戶是否可以刪除這個新建的文件?為什么?
      8、挑戰:
      a、你能建立一個symbolic link 指向一個不存在的文件嗎?在這種情況下ls 命令是否給出任何提示?
      b、你能建立一個hard link 指向一個不存在的文件嗎?為什么?
      c、你能建立一個hard link 指向一個soft link 嗎?如果你這樣做的話會出現什么情況?
      d、在建立了幾個hard link 之后,你如何找出“真正”的文件?這個問題有意義嗎?(換句話說,有沒有比你建立hard link 更“真實”的文件?)
      實驗2:使用mtools 包(省略)
      實驗3:使用find
      任務:
      設計并執行滿足下面條件的find 命令。當你執行時遞歸搜索到一些你沒有讀權限的子目錄時
      你可能會遇到一些"Permission denied"消息,別去管它。你也可以在末尾加上2> /dev/null來消除這些錯誤消息的影響。
      第一個問題的答案已經給出,執行它,并把其他的完成。你可能需要翻看man page,并記住使用/string 來搜索你需要的字串。如果你哪里卡住了,你可以翻看在實驗4后列出的答案。
      1、列出在/var/lib下games 用戶擁有的所有文件
      $ find /var/lib -user games 2> /dev/null
      2、列出在/var 下root 用戶和mail 組所擁有的所有文件
      3、以"ls -l"風格列出在系統上所有不被root 或者bin 或者student 用戶所擁有的文件
      4、以"ls -l"風格列出/usr/bin 下所有大于一百萬個字符的文件
      5、對/etc/mail 下所有的文件執行file 命令
      6、以"ls -l"風格列出/tmp 下為student 用戶所擁有的“普通”文件(regular files)
      7、添加上面的命令使得以"ls -l"風格列出/tmp 下為student 用戶所擁有的“普通”文件
      (regular files),并且它們的修改時間在一天之前
      8、改變上面的命令使得刪除在/tmp 下為stduent 用戶所擁有的“普通”文件(regular files),并且它們的修改時間在一天之前。并且在每個文件刪除之前都提示是否刪除。
      實驗4:歸檔和壓縮
      假設:
      你的主硬盤在你每次使用它的時候發出可怕的聲音,你估計它快完蛋了并且會將你珍貴的資料一起帶入墳墓??紤]到上次的系統備份是2年半之前,你決定備份一些對于你來說至關重要的文件。/tmp 目錄是位于另外一個物理硬盤上的分區,所以你會暫時將你的文件備份到那里。
     ?。ㄈ欢?,tmpwatch 進程會將/tmp 目錄中10天沒有訪問過的文件刪除,你最好不要在那里把你的重要文件存放過長時間。)
      任務:
      1、使用find 查找/home 下所有被student 所擁有的文件,然后將這些文件名傳給tar 并把它們存儲在/tmp 中。
      $ find /home -user student -exec tar rvf /tmp/backup.tar {} \;
      2、將/etc 內的內容存儲在/tmp 中的另外一個tar 文件中:
      $ tar cvf /tmp/confbackup.tar /etc
      3、列出兩個新文件并記錄它們的大?。?br />  $ ls -lh /tmp/*.tar
      backup.tar 文件的大小_________。
      confbackup.tar 文件的大小_________________。
      4、使用gzip 來壓縮你的歸檔文件。然后記錄新的文件大?。?br />  $ cd /tmp
      $ gzip *.tar
      $ ls -lh *tar*
      backup.tar.gz 文件的大小______________。
      confbackup.tar.gz 文件的大小__________________。
      5、解壓這些文件,并重新將它們用bzip2壓縮,并記錄新的文件大?。?br />  $ gunzip *.gz
      $ ls -lh *tar
      $ bzip2 *tar
      $ls -lh *tar*
      backup.tar.bz2 文件大小________________。
      confbackup.tar.bz2 文件大小_________________。
      6、在一個傳統UNIX系統上,歸檔文件并壓縮歸檔的步驟是分開的,就像你前面所做的那樣。
      在一個Linux 系統上,使用GNU tar 命令,tar 文件可以在建立文件的同時自動地進行一系列不同的壓縮。試試下面的步驟。tar 命令會輸出一些錯誤信息,因為非特權用戶在/etc 目錄下對一些文件沒有讀權限。在本實驗中,可以忽略。
      $ rm confbackup.tar.bz2
      $ tar cfz test1.tgz /etc
      $ tar cfj test2.tbz /etc
      $ file test*
      完成:你導入的文件已經在/tmp 目錄下安全地歸檔、壓縮并備份了。
      實驗3答案:
      2、find /var -user root -and -group mail 2>/dev/null
      3、find / -not -user root -and -not -user bin -and -not -user student -ls
      2>/dev/null
      4、find /usr/bin -size +1000000c -ls
      5、find /etc/mail -exec file {} \;
      6、find /tmp -user student -ls 2>/dev/null
      7、find /tmp -user student -and -mtime +1 -and -type f -ls 2>/dev/null
      8、find /tmp -user student -and -mtime +1 -and -type f -ok rm {} \;
      單元七實驗
      bash shell
      估計用時:45分鐘
      目標:掌握定制bash shell的技術,包括創建定制的aliase。
      實驗前準備:一臺裝有Red Hat Linux 的機器
      實驗1:使用aliase
      任務:
      1、你決定創建一個aliase,使得當你鍵入cls時,系統會運行clear 命令清除屏幕。由tty1 登錄student 開始,然后輸入并測試你得aliase。
      $ alias cls='clear'
      $ alias
      $ cls
      2、該aliase當你注銷后再行登錄時變得無效。為了保證每次student 登錄時都可用,執行以
      下步驟:
      $ cd
      $ pico .bashrc
      找到包含#User specific aliases and functions 這一行,在這行下加上你的aliase:
      alias cls='clear'
      保存文件后退出。
      3、注銷后測試你的改動,重新在tty1 登錄,并鍵入:
      $ alias
      $ cls
      4、現在參考ls 的man page,建立一個叫lr 的aliase,調用ls 的5個開關。測試并加入aliase 進你的.bashrc 文件。該aliase 應具備:
      a、長格式列出
      b、列出以'.'開頭的文件
      c、"classify" files by appending each entry
      d、隱藏文件名內的控制字符
      e、按修改時間排序
      結果:
      得到一個含有新aliase 用于清屏,和一個以時間排序ls的aliase。
      實驗2:改變bash 提示符
      假設:
      你決定定制你的bash 提示符以顯示當前目錄的完整路徑和shell的歷史數目,并作點相應的美化。
      任務:
      1、在一個終端窗口,顯示當前提示符字串的值。注意提示符內的靜態ASCII 字符和反斜杠(忽略符)。
      $ echo $PS1
      2、改變你的提示符為只顯示一串靜態的字串:
      $ PS1='Red Hat Linux -> '
      3、那不是很有用,所以恢復成原來傳統的提示符-美元符,接著主機名:
      $ PS1='\h $'
      4、在主機名和$之間插入bash 歷史提示符\!。確認在每個中間都有一個空格。
      5、現在參考bash 的man page,查詢代表當前目錄的特殊字符。(查找PROMPTING,并注意:
      你要找的是表示完整路徑的特殊字符,而非像默認提示符那樣的最后一個目錄名)將該特殊字
      符插入你的PS1 提示符字串,并前綴一個冒號。
      6、你定制的提示符應該像下面這個例子一樣。如果不是,繼續做。
      station1:/home/student 21 $
      7、在你的.bashrc 中編輯你的PS1 定義,然后打開一個新的終端窗口以確認你的新提示符正常工作。
      實驗3:配置shell 選項
      假設:
      你將使用set 和shopt 來定制你的bash shell 環境。
      任務:
      1、在tty1 以student 登錄。查看當前配置過的shell 選項:
      $ set -o
      2、注意當前的ignoreeof 選項為關(off)。按 來確認這個操作,看你是否注銷了。
      3、以student 重登錄到tty1 并執行下面的語句,然后測試 ignoreeof 選項:
      $ set -o ignoreeof
      $
      $ Use "logout" to leave the shell
      $ set +o ignoreeof
      $ se
      4、現在使用shopt 命令查看其他的shell 選項:
      $ shopt
      5、設置并測試 cdspell 選項(注意,看清楚以下命令中故意的拼寫錯誤):
      $ cd
      $ mkdir test_directory
      $ cd test_driectoy
      bash: cd: test_driectoy: No such file or directory
      $ shopt -s cdspell
      $ cd test_driectoy
      test_directory
      $ pwd
      /home/student/test_directory
      $ cd ..
      $ shopt -u cdspell
      $ cd test_driectoy
      bash: cd: test_driectoy: No such file or directory
      6、你現在看到當你試著從一個shell 提示符執行命令,你可能是在運行:一個外部可執行文件、一個內建的shell 命令、一個aliase或者一個shell 函數等等。有時候檢查你輸入的命令
      究竟是執行了什么是很重要的。使用內建的type 命令詢問shell 究竟是執行了什么類型的命令:
      $ type cat
      cat is hashed (/bin/cat)
      $ type cls
      cls is aliased to 'clear'
      $ type shopt
      shopt is a shell builtin
      $ type while
      while is a shell keyword
      結果:
      對一些shell 選項有了進一步的了解。
      實驗4:命令替換
      1、檢測當在shell 提示符下鍵入sawfish 的命令的全路徑。使用shell 的快捷方式重新執行那條命令,加上-ui 使得運行sawfish-ui,然后使用另一種快捷方式使運行sawfish-themer。
      $ which sawfish
      $ which .-ui
      $ ^ui^themer
      2、以sho 為開頭,重復最后一個命令。
      $ sho
      3、當一個命令包括了另一條以backquote(``)包圍起來的命令,bash 先執行包圍起來的命令,然后在整個命令執行之前將結果替換在``里面。
      使用這種技術執行ls -l 列出一個特定目錄,該目錄是當nautilus 在shell 提示符下輸入時程序所在的路徑。記住which nautilus 是先被執行的,然后它的結果替換在命令行上,然后
      ls -l 在結果上執行。
      $ ls -l `which nautilus`
      挑戰實驗:使用shell 函數
      任務:
      1、在bash shell 提示符下,打入下列行以建立一個簡單的shell 函數:
      $ lsbytesum()
      >{
      > TotalByes=0;
      > for Bytes in $(ls -l | grep "^-" | cut -c34-42);
      > do
      > let TotalBytes=$TotalBytes+$Bytes;
      > done;
      > TotalMeg=$(echo -e "scale=3 \n$TotalBytes/1048576 \nquit" | bc);
      > echo -n "$TotalMeg"
      >}
      2、檢驗你新建的函數是否有效:
      $ set
      ...output omitted -- your new function near the bottom...
      $ lsbytesum()
      {
      TotalByes=0;
      for Bytes in $(ls -l | grep "^-" | cut -c34-42);
      do
      let TotalBytes=$TotalBytes+$Bytes;
      done;
      TotalMeg=$(echo -e "scale=3 \n$TotalBytes/1048576 \nquit" | bc);
      echo -n "$TotalMeg"
      }
      ... complete prompt shown to demonstrate change to prompt ...
      [student@station1 student]$ PS1="[\u@\h:\w ($(lsbytesum) MB)]$ "
      [student@station1:~ (11.971 MB)]$ cd /bin
      [student@station1:~ (.476 MB)]$ cd /sbin
      [student@station1:~ (.587 MB)]$ cd /etc
      [student@station1:~ (.124 MB)]$
      3、挑戰性問題:
      1、要將該函數在每次登錄時載入,你需要哪些步驟?
      2、要將該函數轉換為一個簡單的shell script,需要哪些步驟?
      結果:
      得到一個新的顯示當前目錄中所有文件總數的shell 提示符。
      單元八實驗
      標準輸入輸出和管道
      估計用時:30分鐘
      目標:熟悉Red Hat Linux 系統上的標準輸入輸出和管道實現。
      實驗前準備:一臺裝有Red Hat Linux 系統的機器。
      實驗1:標準輸入和輸出
      任務:
      1、打開你平常使用的文本編輯器并建立兩個文件:
      packages1.txt 應該含有下列8行:
      apache
      galeon
      mozilla
      postgresql
      procinfo
      rpmfind
      sawfish
      squid
      packages2.txt 應該含有下列6行:
      anaconda
      openssh
      gnome-core
      samba
      sendmail
      xscreensaver
      2、cat 是Linux 最簡單的文本過濾器(filter)。它的工作就是將它的輸入——作為它的一個參數的文件名,或者是從標準輸入中輸入,并且輸出不變地輸出它到標準輸出。
      用packages1.txt 來測試cat:
      $ cat packages1.txt
      3、如果cat 后沒有跟參數,它就期待從標準輸入的輸入。這意味著如果你鍵入cat 后按回車,似乎什么事也沒發生。實際上,cat 在耐心的觀察標準輸入,等待輸入的到達。如果你打入一些字符并按回車鍵,cat 將你輸入的送到標準輸出——即原封不動的將你的輸入送出。結束
      cat 命令,按。這是通用的輸入結束信號。
      $ cat
      Type some sample text, then press return.
      
      4、多數Linux 文本進程命令都以過濾器實現(filter),這意味著它可以從標準輸入讀出,然后對它做一些事,然后送到標準輸出。這些命令和cat 很像,但是它們的輸出和輸入不同。
      本單元介紹過的tr,就是這樣一個filter。如果你給tr 兩個字串作為參數,那么它從標準輸入中讀出,然后從第一個字串的字母到第二個字串中的字符進行翻譯,然后將翻譯后的字串寫到標準輸出中。
      重復前一個例子,改用tr。給出的參數將元音字母從小寫改為大寫。
      $ tr 'aeiou' 'AEIOU'
      Type some sample text, then press return.
      
      5、要告訴shell 程序的輸出不要送到標準輸出,而是要重定向到一個文件,那么使用重定向符 >
      重復第一個cat 的例子,重定向標準輸出到packages1.catfile。這將創建一個packages1.txt的拷貝。cat 這個輸出文件,并且用diff 和ls 檢驗它是否和原先的文件擁有相同的內容。
      $ cat packages1.txt > packages1.catfile
      $ cat packages1.catfile
      $ diff packages1.txt packages1.catfile
      $ ls -l packages1*
      6、在一個已存在的文件中追加內容,使用>> 操作符。
      在packages1.catfile 后追加packages2.txt 的內容,并且檢驗結果
      $ cat packages2.txt >> packages1.catfile
      $ cat packages1.catfile
      7、如果沒有文件名作為參數給cat,并且標準輸出(原書寫standard input,我覺得錯了)定向為一個文件,那么屏幕上打的任何字符直到按下,將會被重定向到那個文件。這種方法可以很容易建立一個新文件。
      $ cat > typedin.txt
      This time , when text is typed at the keyboard,
      It is not echoed back to the screen,
      It is instead redirected to the file typedin.txt
      
      $ ls -l typedin.txt
      $ cat typedin.txt
      8、重復前面的步驟,替換cat 為tr 命令。
      $ tr 'aeiou' 'AEIOU' > trfile.txt
      This time , when text is typed at the keyboard,
      It is not echoed back to the screen with the translation made,
      It is instead redirected to the file trfile.txt
      
      $ ls -l trfile.txt
      $ cat trfile.txt
      9、使用set -o 顯示當前bash 的noclobber 選項。檢驗當重定向輸出到一個文件時你的確可以“修補(clobber)”該文件。
      $ set -o
      $ ls -l /tmp > trfile.txt
      $ ls -l trfile.txt
      $ cat trfile.txt
      10、使用set 修改noclobber 選項,然后檢驗操作:
      $ set -o noclobber
      $ echo "new contents" > trfile.txt
      bash: foo: cannot overwrite existing file
      11、cat 可以接受一個文件名,或者一個重定向的文件作為標準輸入。測試下面兩個命令:
      $ cat packages1.txt
      $ cat < packages1.txt
      12、然而,tr 不允許文件名作為參數,它需要從標準輸入的輸入。
      $ tr 'aeiou' 'AEIOU' < packages1.txt
      13、標準輸出和輸入可以同時被重定向,就像下面這個例子。和上面一樣,從packages1.txt
      定向輸入到tr,但是這次需要重定向輸出。屏幕上沒有輸出——它輸出到了文件
      packages1.trfile.txt。
      $ tr 'aeiou' 'AEIOU' < packages1.txt >pacakges1.trfile.txt
      $ ls -l packages1.txt packges1.trfile.txt
      $ cat packages1.trfile.txt
      實驗2:管道
      1、為了將標準輸出從一個命令定向到另外一個命令作為標準輸入,引入了一種叫做管道的特殊的重定向機制。
      若沒有管道,打印一個目錄列表,至少需要兩步——而且還有一個文件作為打印后沒用的副產品。需要第三步來刪除它。(注意,這些步驟當你沒有打印機時僅作演示使用)
      $ ls -l > /tmp/ls.txt
      $ lpr /tmp/ls.txt
      $ rm /tmp/ls.txt
      如果使用管道,這三步可以在一個短命令中完成——并且不需要建立臨時文件、再刪除。注意lpr 從標準輸入中得到輸入,所以沒有必要加任何參數。
      $ ls -l | lpr
      2、管道經常用于一個可能生成多行的命令,輸出到less。命令執行的順序是從左開始。當輸出生成后,通過管道傳到在右邊等待的命令。less 從一個管道中等待輸入,所以不需要加任何參數。(用空格鍵翻頁,然后按q退出)
      $ ls -l /usr/bin | less
      實驗3:練習
      如果你需要答案,答案在后面列出。但請用本單元提供的信息和man page努力完成這些練習。
      1、為命令cal 在你的home 目錄下建立一個格式化的man page 拷貝,文件名為cal.man
      2、用哪個單條命令可以配置你的輸入是鍵盤輸入、輸出是打印機輸出?
      3、你如何將/usr/bin 下的名字以'c'或者'd'開頭的文件長列表輸出到打印機?
      實驗3答案
      2、lpr
      lpr 若給出文件名作為參數,則它打印文件內容。如果沒有文件名給出,則它從標準輸入讀入數據。當你按后你從鍵盤輸入的數據將被打印出來。
      3、ls -l /usr/bin/[cd]* | lpr
      單元九實驗
      字符處理
      估計用時:60分鐘
      目標:熟悉幾種Red Hat Linux 上的字符處理程序。
      實驗前準備:一臺裝有Red Hat Linux 的機器,并在你的home 目錄中有/etc/passwd 的拷貝。
      實驗1a:基本字符處理
      任務:
      1、拷貝/etc/passwd 到你的home 目錄
      $ cd
      $ cp /etc/passwd .
      2、每個帳號都會在/etc/passwd 中占有一行。使用wc 統計passwd 文件的行數。
      $ wc -l passwd
      你系統上的帳號數有_______個。
      3、生成一個用戶shell 列表并將它存在另一個文件中:
      $ cut -d: -f7 passwd > shells
      4、使用cat 查看你的shells 文件。你將感到雖然文件存儲了信息但是組織得不理想。將這些行排序并輸出到一個新文件:
      $ sort shells > sorted.shells
      5、你的文件包含了多個重復的值。使用uniq 來統計每個值出現多少次:
      $ uniq -c sorted.shells > uniq.sorted.shells
      為什么在傳給uniq 之前必須先要將輸出排序?
     ?。ㄌ崾荆涸囋噓niq -c shells 和 man uniq)
      6、要生成一個數字逆序排列的,你機器上使用的shell(當然你機器上使用的shell 數可能和這里列出的不同):
      $ sort -nr uniq.sorted.shells
      18 /sbin/nologin
      5 /bin/false
      4 /bin/bash
      2 /dev/null
      1 /sbin/shutdown
      1 /sbin/halt
      1 /bin/sync
      1
      結果:
      得到一個數字逆序排列的、和系統中帳號相關的shell 列表。
      實驗1b:練習
      設計,然后寫下每個練習的解。記住,答案是你執行的命令,而不是輸出。每個解應該只有一句命令,并且至少由一個管道實現。你可能需要翻閱man page。答案在實驗最后給出。
      1、/usr/bin 目錄下有多少文件?輸出應該是單個的整數。提示:設計一個命令可以每行列出一個文件,然后想想如何統計這些行數。
      2、對/usr/share/doc/nautilus-1.06/NEWS 作一次拼寫檢查。
      3、練習2 得到多少不重復的(unique)的單詞?
      4、練習2 中,輸出重復出現超過一次的單詞列表。
      實驗2:用grep 作字符處理
      任務:
      1、使用grep 顯示你home 目錄下的passwd 文件(/etc/passwd的拷貝)中,以'g'開頭的帳戶:
      $ grep ^g passwd
      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 -U 0 modified2.passwd passwd
      實驗3:正則表達式和字符操作
      設計,然后寫下每個練習的解。記住,答案是你執行的命令,而不是輸出。你可能需要翻閱
      man page。答案在實驗最后給出。
      任務:
      1、試著用grep 將/usr/share/dict/words 中和查找項相符的項輸出。例如,顯示所有包含
      fish 的項:
      $ grep fish /usr/share/dict/words
      仔細比較上面和下面的輸出,并找出grep 的-i 開關的用處:
      $ grep -i fish /usr/share/dict/words
      2、使用grep 的man page,構造一個命令可以每行含有在words 文件中找到的fish 項的輸出,且每行前后都空兩行(提供其他的內容),然后執行它。
      3、使用grep 的man page,構造一個命令可以輸出fish 項在words 文件中找到的個數,然后執行它。
      4、使用grep 的man page,構造一個命令可以將fish 項在words 中匹配的行,包括它的行號
      。在哪行找到了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 是個有用的信息源。我們在后面幾個任務中將使用這個目錄中的文件。
      列出含有詞'expansion'的普通文件的文件名
      10、顯示'Linux'這個詞在/usr/share/doc/bash-2.05a目錄下的文件中的出現頻率。但是不要
      輸出含0次的文件。提示:先統計所有文件的個數,然后考慮你如何禁止與某一項相匹配的行的輸出。
      11、列出在/usr/share/doc 下所有含有'Havoc' 的文件的文件名
      12、你可以使grep 遞歸查找目錄下的文件:
      grep -R --include=
      使用這種技術,將/usr/share/doc 下所有含有'ethernet' 的文件列出。
      13、只顯示那些文件的文件名
      14、特殊的挑戰性任務:
      設計一個命令,可以顯示在練習13顯示的文件中含有'authentication'的文件。記住
      backquotes(``)可以先計算內表達式,然后將其替換命令行中的相應內容。
      
      15、使用類似的技術查找/usr/share/doc 下含有'regular expression',但不含'perl'的文件(均為大小寫敏感)
      16、列出/usr/share/doc 下所有含有美國州名和9位郵政編碼的(格式:XX NNNNN-NNNN)、
      且文件名以".txt"結尾的文件。
      實驗4:探索管道的應用
      任務:
      1、在實驗1a中,你使用了多種字符處理程序,在4步驟內建立了排序的shell 列表。在本實驗中你將完成同樣的任務,但是只用一步。
      為了建立排序的shell 列表,組合實驗1a中步驟3到6的命令。和上次實驗不同,這次不需要任何臨時文件。因為整個操作多次將輸出管道定向到另一個命令中。
      $ cut -d: -f7 passwd | sort | uniq -c | sort -nr
      18 /sbin/nologin
      5 /bin/false
      4 /bin/bash
      2 /dev/null
      1 /sbin/shutdown
      1 /sbin/halt
      1 /bin/sync
      1
      2、要查看所有以root 運行,按字母表排序的進程列表,使用ps 輸出帶用戶名的進程列表,然后管道定向到grep 以產生只有root 所擁有的進程列表。^告訴grep 只在每行的行首查找root 字串
      $ ps auxw | grep ^root
      3、假設你需要將這些數據傳給一個只需要進程名的script。為了產生該列表,使用tr 和cut的組合。首先,用tr 將空格壓縮成cut 能理解的分界符(這里是a%)。然后,使用cut 只顯示進程名(tr 輸出的第11列)
      $ ps auxw | grep ^root | tr -s [:blank:] [a%] | cut -d% -f11
      4、現在我們有了屬于root 進程的列表。但是我們讓cut 只顯示第11列,這樣我們失去了該進程的命令行參數。在第二步中,我們知道最后一個進程syslogd帶有參數-m 0,但是在第三步
      我們只看到syslogd。將-f11 改為-f11-,使得cut 將11列到最后的列全部裁減輸出。
      $ ps auxw | grep ^root | tr -s [:blank:] [a%] | cut -d% -f11-
      5、我們幾乎已經達到了需要的輸出。記住我們使用了tr 轉換空格為分界符a%,以使cut 可用?,F在我們需要再次用tr 將%back 轉換成空格。
      $ ps auxw | grep ^root | tr -s [:blank:] [a%] | cut -d% -f11- | tr [%back] "[]"
      6、就像你前面看到的,在使用命令行工具時,管道是一種非常有用的工具。前面這些步驟完成了我們的工作,但是在花費很多時間折騰輸出前,請務必確認該程序是否有可能格式化成你所需要的格式。ps,特別地,能輸出幾乎你能想象的格式。請注意看下面命令的開關是如何完成我們需要的輸出的:(哎?。?br />  $ ps -u root -o args
      結果:
      使用管道的命令的組合,輸出root 擁有的系統進程列表。
      實驗3答案:
      1、grep -B2 -A2 "fish" /usr/share/dict/words
      4、grep -c "fish" /usr/share/dict/words
      5、 grep "t[aeiou]sh" /usr/share/dict/words
      6、 "^a.om.*e$"
      7、 grep -c "t[aeiou]sh$" /usr/share/dict/words
      8、 grep -c "................" /usr/share/dict/words
     ?。槭裁床皇?grep -c ".\" /usr/share/dict/words ?)
      9、 grep -l expansion /usr/share/doc/bash-2.05a/*
      10、 grep -c "Linux" /usr/share/doc/bash-2.05a/* | grep -v ":0"
      11、grep -R "Havoc" /usr/share/doc
      12、 grep -R --include="*txt" ethernet /usr/share/doc
      13、 grep -lR --include="*txt" ethernet /usr/share/doc
      14、 grep -i autentication `grep -lR --include="*txt" ethernet /usr/share/doc`
      15、 grep -ivl perl `grep -Rli --include="*txt" "regular expression"
      /usr/share/doc`
      16、 grep -R --include="*.txt" " *[A-Z][A-Z] *[0-9][0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]"

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>