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有一个惯例,以“ |
注意 | |
---|---|
对于 |
注意 | |
---|---|
基本的 Debian 系统的默认分页程序是 more(1),它无法往回滚动。通过命令 “ |
注意 | |
---|---|
“ |
作为训练,请使用上述的命令来遍历目录并探究系统。如果你有任何有关控制台命令的问题,请务必阅读手册。
尝试下列例子
$ man man
$ man bash
$ man builtins
$ man grep
$ man ls
手册的风格可能让人有点难以习惯,因为它们都相当简洁,尤其是比较老旧、非常传统的那些手册。但是,一旦你习惯了它,你来欣赏它们的简洁。
请注意,许多类Unix命令(包含来自 GNU 和 BSD 的)都可以显示简短的帮助信息,你可以使用下列的其中一种方式来查看它(有时不带任何参数也可以)。
$ <commandname> --help
$ <commandname> -h