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
genisisttyv0Jun3 15:45
genisisttyv1Jun3 15:46
genisisttyv2Jun3 21:09
genisisttyv3Jun3 21:10
genisisttyv4Jun3 21:27
genisisttyv5Jun4 09:40
genisisttyv6Jun4 09:43
genisisttyv7Jun4 10:46
注意who和whoami之间的区别。在ttyv4,我本来是以genisis身份登录的,然后再成为超级用户。who命令告诉你谁拥有登录命令解释器而不返回非登录解释器的信息。也就是说,因为我的X Window会话不是一个登录解释器,ttyv8就不会显示在输出信息中。

如果我忘了自己在哪个目录中,可以用pwd:

pwd
它会显示我当前所在的工作目录:

/usr/home/genisis
好的经验是:不要在还没有用pwd查看一下你实际所处的位置之前就创建或删除文件。

现在,如果我忘了时间信息:

date
Sun Jun4 11:15:46 EDT 2000
或者更糟的话,忘了今天的日期:

cal
June 2000
Su Mo Tu We Th Fr Sa
123
456789 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
12345
6789 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
123456
789 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
12 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
空缺的日期是由于恺撒历到阳历的切换。还有:

ncal -e
April 23 2000
这会显示耶稣降临日;用-o就可以知道东正教日历。

到此,你可能会想我一定是个非常出色的打字员。让我们看一下命令历史列表:

h
110 date > /usr/home/genisis/cal
111cal > /usr/home/genisis/cal
112 cal 12 2020 > /usr/home/genisis/cal
113 cal 07 1776 > /usr/home/genisis/cal
117 cal 9 1752 > /usr/home/genisis/cal
122 ncal -e > /usr/home/genisis/cal
134 h > /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-device bpf #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-device bpf #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
如果你有兴趣学习其它基本命令,这里有一份非常好的在线初学者教程,Introduction to Unix。

你可能感兴趣的:(应用服务器,工作,虚拟机,unix,FreeBSD)