歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Unix知識 >> Unix教程 >> FreeBSD帶有許多簡單而功能強大的命令

FreeBSD帶有許多簡單而功能強大的命令

日期:2017/2/27 17:44:03   编辑:Unix教程
FreeBSD
  FreeBSD帶有許多簡單而功能強大的命令以使你的計算機工作更容易。不管你對任何Unix系統有多少經驗,都會發現有效完成工作的新捷徑和新方法。
  在這篇文章中,我們將討論命令以幫你記住你是誰,你在哪兒,如何找東西以及如何像Unix鬼精靈一樣地思考問題和完成任務!
  我喜歡虛擬終端的概念,而且通常我都運行所有8個終端以及XWindows會話。通常,我會運行一個PPP會話、一個打開郵件客戶端的終端、幾個不同的打開手冊頁所占的終端、以root身份運行命令的終端以及以普通用戶身份運行命令的終端。當然功能越強帶來的混亂越多。我會用一些命令來幫我解決混亂。
  如果我忘了把手冊頁開在哪個終端上的話,PrintScrn鍵會以升序依次滾動列出所有虛擬終端。如果沒有運行X Window會話,可以永遠繼續重復1到8號終端。否則,它會在9號終端上停下來,也就是X服務器。
  如果我進入了一個終端並希望知道這是哪個終端的話,可以用tty命令:
  tty
  /dev/ttyv4
  注意,這實際上是5號虛擬終端,因為這些終端是從0開始排列的。如果離開了該終端,就可以用Alt-F5返回。
  如果我想知道在該終端上的是哪個用戶,可以用whoami:
  whoami
  root
  如果我想知道有誰登錄進了終端,可以用who:
  who
  genisis ttyv0 Jun 3 15:45
  genisis ttyv1 Jun 3 15:46
  genisis ttyv2 Jun 3 21:09
  genisis ttyv3 Jun 3 21:10
  genisis ttyv4 Jun 3 21:27
  genisis ttyv5 Jun 4 09:40
  genisis ttyv6 Jun 4 09:43
  genisis ttyv7 Jun 4 10:46
  注意who和whoami之間的區別。在ttyv4,我本來是以genisis身份登錄的,然後再成為超級用戶。who命令告訴你誰擁有登錄命令解釋器而不返回非登錄解釋器的信息。也就是說,因為我的X Window會話不是一個登錄解釋器,ttyv8就不會顯示在輸出信息中。
  如果我忘了自己在哪個目錄中,可以用pwd:
  pwd
  它會顯示我當前所在的工作目錄:
  /usr/home/genisis
  好的經驗是:不要在還沒有用pwd查看一下你實際所處的位置之前就創建或刪除文件。
  現在,如果我忘了時間信息:
  date
  Sun Jun 4 11:15:46 EDT 2000
  或者更糟的話,忘了今天的日期:
  cal
  June 2000
  Su Mo Tu We Th Fr Sa
  1 2 3
  4 5 6 7 8 9 10
  11 12 13 14 15 16 17
  18 19 20 21 22 23 24
  25 26 27 28 29 30
  或者需要知道2020年的聖誕節時哪一天:
  cal 12 2020
  December 2020
  Su Mo Tu We Th Fr Sa
  1 2 3 4 5
  6 7 8 9 10 11 12
  13 14 15 16 17 18 19
  20 21 22 23 24 25 26
  27 28 29 30 31
  或者簽署獨立宣言那一周的日程:
  cal 07 1776
  July 1776
  Su Mo Tu We Th Fr Sa
  1 2 3 4 5 6
  7 8 9 10 11 12 13
  14 15 16 17 18 19 20
  21 22 23 24 25 26 27
  28 29 30 31
  最後兩個關於cal的小技巧同樣可以使你的朋友很吃驚;試一下這個:
  cal 9 1752
  September 1752
  Su Mo Tu We Th Fr Sa
  1 2 14 15 16
  17 18 19 20 21 22 23
  24 25 26 27 28 29 30
  空缺的日期是由於恺撒歷到陽歷的切換。還有:
  ncal -e
  April 23 2000
  這會顯示耶稣降臨日;用-o就可以知道東正教日歷。
  到此,你可能會想我一定是個非常出色的打字員。讓我們看一下命令歷史列表:
  h
  
  110date > /usr/home/genisis/cal
  111 cal > /usr/home/genisis/cal
  112cal 12 2020 > /usr/home/genisis/cal
  113cal 07 1776 > /usr/home/genisis/cal
  117cal 9 1752 > /usr/home/genisis/cal
  122ncal -e > /usr/home/genisis/cal
  134h > /usr/home/genisis/cal
  我很討厭打字,而且還用了這麼多重定向符>。如果你要保存命令行上的結果到一個文件中就要用這個重定向符;它的語法總是一樣的:
  command > filename
  因為我要你看到以上歷史列表中每個命令的輸出,所以把它們重定向到了一個文件中。然後再貼到我的文檔裡來。注意我覆蓋了七次同樣的文件;因為我只用了一個重定向符。
  讓我們假定你已經向FreeBSD問答列表中發出一個問題,這時就會有人要你提供uname -a,dmesg和fstab的輸出內容。你就可以用>創建三個文件然後把它們貼到你的電子郵件文檔中。但是你也可以把所有三個輸出重定向到一個文件,只要用>>這個重定向符替換即可:
  uname -a > /usr/home/genisis/help
  dmesg >> /usr/home/genisis/help
  more /etc/fstab >> /usr/home/genisis/help
  如果我現在輸入:
  more /usr/home/genisis/help,
  就會看到以上三個文件的輸出了。
  讓我們更仔細地看一下這些命令:
  在uname -a命令中我只用了一個>,因為我正在創建一個新文件,不會覆蓋它本身的內容。
  因為我在dmesg命令中用了>>,就不會覆蓋那個文件中uname -a的那部分了。
  注意,我需要為/etc/fstab使用更多的命令。如果我用:
  fstab >> /usr/home/genisis/help,
  fstab: Command not found:
  將會出現錯誤信息。你不能重定向文件;你只能對命令輸出進行重定向。在這種情況下,讀/etc/fstab的命令就是more了;讀取的結果就會被重定向到/usr/home/genisis/help。
  這樣你已經成功地發送了三個命令到一個文件中,而不會覆蓋每個命令的輸出。但為什麼要打上三個命令呢?完全可以有一種方法用一個命令就完成這些工作。如果我打:
  uname -a dmesg more /etc/fstab >> /usr/home/genisis/help2,
  usage: uname [-amnrsv]
  我就會收到這樣的信息。再看一下這個命令;它的確有你要做的每件事兒,但你能說出倒底哪個是命令,哪個是開關,哪個是文件呢?如果你對此感到因惑的話,想象一下你的命令解釋器在試圖解釋你的意圖時會感覺怎樣。所以我們需要一些分隔命令的方法;試一下這個:
  uname -a; dmesg; more /etc/fstab >> /usr/home/genisis/help3
  這會使uname -a和dmesg的輸出送到終端上;如果你用這個命令:
  more /usr/home/genisis/help3
  你只會看到more /etc/fstab命令的輸出。
  所以,我們已經有點接近了。我們已經分隔了這些命令,現在要讓命令解釋器知道我們想要的是三個輸出都送到那個文件中,而不是最後那個命令的輸出。最後再試一下這個:
  (uname -a; dmesg; more /etc/fstab) >> /usr/home/genisis/help4
  more /usr/home/genisis/help4
  你就會得到想要的結果了。上面的圓括號告訴命令解釋器,你想先運行括號裡的命令,然後再把它們所有的輸出重定向到那個文件中。
  FreeBSD還有幾個好用的工具用於查找信息。使用哪個工具就取決於你要找什麼。如果你要找應用程序的話,可以用whereis:
  whereis ls
  ls: /bin/ls
  如果你要找一個文件的話,可以用locate:
  locate fstab
  /etc/fstab
  如果你要找些東西但不知道它是什麼的話,可以用whatis:
  whatis ls
  ls(1) - list directory contents
  whatis fstab
  fstab(5) - static information about the filesystems
  注意whatis這個命令會在括號中包含手冊頁的號碼。如果你要上面兩樣東西的附加信息的話,可以用:
  man 1 ls
  man 5 fstab
  但你是否需要找一段指定的文本呢?就需要用grep工具了,它有一套很簡單的語法:
  grep whatyou'relookingfor filename
  讓我們假設我記不清在FreeBSD 4.0的缺省內核裡是否允許了bpf這個設備。雖然我可以打開這個文件開始閱讀,但更快的辦法是:
  grep bpf /usr/src/sys/i386/conf/GENERIC
  # The `bpf' pseudo-device enables the Berkeley Packet Filter.
  pseudo-devicebpf#Berkeley packet filter
  如果你記不清bpf選項所在的行號是多少,可以向grep裡加一個開關:
  grep -n bpf /usr/src/sys/i386/conf/GENERIC
  212:# The `bpf' pseudo-device enables the Berkeley Packet Filter.
  214:pseudo-devicebpf#Berkeley packet filter
  這樣就可以列出相應的行號了。
  當然,我也可以把這些輸出重定向到一個文件裡,把它寄給向我要的人。
  grep -n bpf /usr/src/sys/i386/conf/GENERIC > /usr/home/genisis/reply
  看另一個例子,如果你想取得計算機的CPU信息,可以運行dmesg,打開你的scroll lock按鈕,往上翻屏,查找描述CPU的那些行。或者你可以用:
  dmesg | grep CPU
  CPU: AMD-K6tm w/ multimedia extensions
  (199.96-MHz 586-class CPU)
  這樣會更快地取得同樣的信息。注意,如果你這樣用那個命令:
  grep CPU dmesg
  grep: dmesg: No such file or directory)
  就會得到錯誤信息了。dmesg是一個命令,而你只能對文件進行grep。但是你可以用管道把輸出信息送到grep,這樣你就可以打到特定的信息了。
  現在總結一下:當你使用grep時,問一下自己要找的東西是在文件裡還是命令結果。如果在文件裡,用:
  grep text filename
  如果是命令結果,用:
  command | grep text
  
  
  
Copyright © Linux教程網 All Rights Reserved