1.4.10. 基本的Unix命令

让我们来学习基本的Unix命令。在这里,我指的是一般意义上的“UNIX”。任何UNIX克隆系统通常都会提供等价的命令。Debian系统也不例外。如果有一些命令不像你想的那样起作用,请不要担心。如果shell中使用了别名,其对应的命令输出会不同。这些例子并不意味着要以这个顺序来执行。

尝试使用非特权用户账号来使用下列的命令。

表 1.16. 基本的Unix命令列表

命令说明
pwd显示当前/工作目录的名称
whoami显示当前的用户名
id显示当前用户的身份(名称、uid、gid和相关组)
file <foo>显示“<foo>”文件的文件类型
type -p <commandname>显示“<commandname>”命令的文件所处位置
which <commandname>同上
type <commandname>显示“<commandname>”命令的相关信息
apropos <key-word>查找与“<key-word>”有关的命令
man -k <key-word>同上
whatis <commandname>用一行解释 “<commandname>” 命令
man -a <commandname>显示“<commandname>”命令的解释(Unix风格)
info <commandname>显示“<commandname>”命令相当长的解释(GNU风格)
ls显示目录内容(不包含以 . 点号开头的文件和目录)
ls -a显示目录内容(包含所有文件和目录)
ls -A显示目录内容(包含几乎所有文件和目录,除了“..”和“.”)
ls -la显示所有的目录内容,并包含详细的信息
ls -lai显示所有的目录内容,并包含inode和详细的信息
ls -d显示当前目录下的所有目录
tree使用树状图显示目录内容
lsof <foo>列出处于打开状态的文件 “<foo>
lsof -p <pid>列出被某进程打开的文件: “<pid>
mkdir <foo>在当前目录中建立新目录“<foo>
rmdir <foo>删除当前目录中的“<foo>”目录
cd <foo>切换到当前目录下或变量“$CDPATH”中的“<foo>”目录
cd /切换到根目录
cd切换到当前用户的家目录
cd /<foo>切换到绝对路径为“/<foo>”的目录
cd ..切换到上一级目录
cd ~<foo>切换到用户“<foo>”的家目录
cd -切换到之前的目录
</etc/motd pager使用默认的分页程序来显示“/etc/motd”的内容
touch <junkfile>建立一个空文件“<junkfile>
cp <foo> <bar>将一个现有文件“<foo>”复制到一个新文件“<bar>
rm <junkfile>删除文件“<junkfile>
mv <foo> <bar>将一个现有文件“<foo>”重命名成“<bar>”(“<bar>”必须不存在)
mv <foo> <bar>将一个现有文件“<foo>”移动到新的位置“<bar>/<foo>”(必须存在“<bar>”目录)
mv <foo> <bar>/<baz>移动一个现有文件“<foo>”到新位置并重命名为“<bar>/<baz>”(必须存在“bar”目录,且不存在“bar>/<baz>文件”)
chmod 600 <foo>使其他人无法读写现有文件“<foo>”(并且所有人都无法执行该文件)
chmod 644 <foo>使其他人对现有文件“<foo>”可读但不可写(并且所有人都无法执行该文件)
chmod 755 <foo>使其他人对“<foo>”可读而不可写(并且所有人都能执行该文件)
find . -name <pattern>使用 shell “<pattern>” 查找匹配的文件名(速度较慢)
locate -d . <pattern>使用 shell “<pattern>” 查找匹配的文件名(速度较快,使用定期生成的数据库)
grep -e “<pattern>” .html在当前目录下以“.html”结尾的所有文件中,查找匹配“<pattern>”的文件并显示
top全屏显示进程信息,输入“q”退出
ps aux | pager显示所有正在运行的进程的信息(BSD风格)
ps -ef | pager显示所有正在运行的进程的信息(Unix system-V风格)
ps aux | grep -e “[e]xim4“显示所有正在运行“exim”和“exim4”的进程
ps axf | pager显示所有正在运行的进程的信息(ASCII风格)
kill <1234>杀死ID为“<1234>”的进程
gzip <foo>使用 Lempel-Ziv 编码(LZ77)将“<foo>”压缩为“<foo>.gz
gunzip <foo>.gz将“<foo>.gz”解压为“<foo>
bzip2 <foo>使用 Burrows-Wheeter 块排序压缩算法和 Huffman 编码将“<foo>”压缩为“<foo>.bz2”(压缩效果比gzip更好)
bunzip2 <foo>.bz2将“<foo>.bz2”解压为“<foo>
xz <foo>使用 Lempel-Ziv-Markov 链算法将“<foo>”压缩为“<foo>.xz”(压缩效果比bzip2更好)
unxz <foo>.xz将“<foo>.xz”解压为“<foo>
tar -xvf <foo>.tar从“<foo>.tar”档案中提取文件
tar -xvzf <foo>.tar.gz从被gzip压缩过的“<foo>.tar.gz”档案中提取文件
tar -xvjf <foo>.tar.bz2从“<foo>.tar.bz2”档案中提取文件
tar -xvJf <foo>.tar.xz从“<foo>.tar.xz”档案中提取文件
tar -cvf <foo>.tar <bar>/将目录“<bar>/”中的内容打包到“<foo>.tar”档案中
tar -cvzf <foo>.tar.gz <bar>/将目录 “<bar>/” 中的内容打包并压缩成 “<foo>.tar.gz” 文件
tar -cvjf <foo>.tar.bz2 <bar>/将目录“<bar>/”中的内容打包到“<foo>.tar.bz2”档案中
tar -cvJf <foo>.tar.xz <bar>/将目录”<bar>/“中的内容打包到”<foo>.tar.xz“档案中
zcat README.gz | pager使用默认的分页程序来显示 “README.gz” 压缩包中的内容
zcat README.gz > foo将“README.gz”解压后的内容输出到文件“foo”中
zcat README.gz >> foo将“README.gz”解压后的内容添加到文件“foo”的末尾(如果文件不存在,则会先建立该文件)
[注意]注意

Unix有一个惯例,以“.”开头的文件将被隐藏。它们一般为包含了配置信息和用户首选项的文件。

[注意]注意

对于cd命令,参见builtins(7)。

[注意]注意

基本的 Debian 系统的默认分页程序是 more(1),它无法往回滚动。通过命令 “apt-get install less“ 安装 less 软件包后,less(1) 会成为默认的分页程序,它可以通过方向键往回滚动。

[注意]注意

[“ 和”]“ 在正则表达式 “ps aux | grep -e “[e]xim4“ 命令中,可以避免grep在结果中排除它自己, 正则表达式中的 “4“ 意思是空或字符”4“ ,这样可以让 grep 既找到 “exim“ 也找到 “exim4“。 虽然 “*“ 可以用于命令名称匹配和正则表达式中,但是它们的含义是不一样的。欲详细了解正则表达式可以参考 grep(1)。

作为训练,请使用上述的命令来遍历目录并探究系统。如果你有任何有关控制台命令的问题,请务必阅读手册。

尝试下列例子

  1. $ man man
  2. $ man bash
  3. $ man builtins
  4. $ man grep
  5. $ man ls

手册的风格可能让人有点难以习惯,因为它们都相当简洁,尤其是比较老旧、非常传统的那些手册。但是,一旦你习惯了它,你来欣赏它们的简洁。

请注意,许多类Unix命令(包含来自 GNU 和 BSD 的)都可以显示简短的帮助信息,你可以使用下列的其中一种方式来查看它(有时不带任何参数也可以)。

  1. $ <commandname> --help
  2. $ <commandname> -h