Linux 命令帮助和快捷使用

1 命令格式和选项

1.1 命令格式

1
user@linux: ~$ ...
  • user 表示当前用户
  • linux 表示主机名
  • 表示当前目录,~ 表示用户 home 目录
  • $ 表示用户类型,$ 表示普通用户,# 表示 root 用户

命令:一般一行一个命令,也允许多行,使用 \ 表示这一行命令没有结束,多行的命令以 > 起始。

命令格式:一般命令包括了三个部分

1
command [options] arguments
  • command 代表命令,可以是别名、shell 内置命令、外部命令、shell 函数等
  • options 代表选项,命令执行时要使用的可选的属性或者功能
  • arguments 代表参数,是命令作用的对象,0 个或者多个
1
2
3
4
5
6
# 例如
rm -r ~/documents/doc

# rm 是命令
# -r 是选项
# ~/documents/doc 是参数,即被执行的对象

1.2 命令格式:选项 [options]

选项根据连字符 - 个数分为短选项长选项

  • 短选项:以 - 开始,紧跟单个字符。当选项无须参数时,可以合并单字符。
  • 长选项:以 -- 开始,紧跟单词。后跟参数采用 --option=value 等号前后都不能有空格。

几乎所有命令都有 --help--version 选项。

2 联机手册 man 命令

对于外部命令,我们需要查看帮助文档。

  • 软件文档:一般存放在 /usr/share/doc 中,可通过 lesszless (查看压缩过的文本文件)和 web 浏览器(查看html文件)查看。
  • man 命令查看联机手册,采用 less 分页查看。

联机手册可以理解为一些命令的帮助文档,一般包含了:

  • man cmd :查看名字为 cmd 的联机手册
  • whatis cmd :在索引库中查找命令名与 cmd 匹配的条目,并且仅仅显示这些条目的一句话的 NAME 信息
  • apropos cmd :在索引库中,基于命令名以及 NAME 部分的内容,查找与 cmd 匹配的条目,仅仅显示 NAME 信息

2.1 已知命令使用 man 查看帮助

1
man cmd 		 # 查看 cmd 命令的联机手册 
  • -f 查看名字匹配的命令的 NAME 部分的内容(whatis 提供类似更全面的功能)
1
2
3
man -f ls
# 等价于
whatis ls
1
ls (1)               - list directory contents
  • -k 搜索 NAME 部分,列出匹配的命令(apropos 提供类似更全面的功能)
1
2
3
man -k 'list directory contents'
# 等价于
apropos –r 'list directory contents'

2.2 whatis 通过匹配查找命令

  • whatis 命令
1
2
3
4
5
whatis [options] name

-e, --exact : 采用精确匹配,默认
-r, --regex : 正则表达式匹配,命令名部分匹配
-w, --wildcard : 通配符匹配
1
2
3
4
5
whatis -e ls     	# 精确匹配 ls 与 man -f ls 等价

whatis -r mkdi # 部分匹配,包含 mkdi 即可,会查找出 mkdir

whatis -w 'm*dir' # 匹配 m 开始,dir 结束的命令

2.3 apropos 通过 NAME 匹配命令

  • apropos 命令
1
2
3
4
5
6
apropos [OPTION] keywords

-r, --regex : 默认,采用正则表达式,模糊匹配
-e, --exact : 采用精确匹配
-w, --wildcard : 采用通配符匹配
-a, --and : 匹配所有的关键字,缺省匹配任意一个
1
2
3
apropos -r 'list directory contents'

apropos -e 'list directory contents on'

3 内置命令帮助

3.1 help 查看内置命令帮助

外部命令:可独立运行的可执行程序

  • 例如 ls 可执行程序位于 /usr/bin/ls

内置命令:当前正在执行的终端 shell 所提供的命令

  • help 内置命令可查看 shell 内置命令相应的帮助信息
1
2
3
4
5
6
help [options] [arguments]

-s : 仅查看语法
-m : 以联机手册形式查看,即采用 less 分页方式查看帮助文档

[arguments] 可以指定特定的命令

例如:

1
2
3
4
help -s cd

# 输出
cd: cd [-L|[-P [-e]] [-@]] [dir]
1
2
3
4
5
6
7
8
9
10
11
12
13
help for

# 输出
for: for NAME [in WORDS ... ] ; do COMMANDS; done
Execute commands for each member in a list.

The `for' loop executes a sequence of commands for each member in a
list of items. If `in WORDS ...;' is not present, then `in "$@"' is
assumed. For each element in WORDS, NAME is set to that element, and
the COMMANDS are executed.

Exit Status:
Returns the status of the last command executed.

3.2 info 查看任意命令

针对不同的命令,查看帮助文档却要用不同的指令,这显然是很繁琐的。所以,info 提供了简单的查找方式。直接通过 info cmd 即可查看 cmd 的联机手册。

1
2
3
4
root@iZuf695p5vw7py8urm4h4fZ:~# help ls
-bash: help: no help topics match `ls'. Try `help help' or `man -k ls' or `info ls'.
root@iZuf695p5vw7py8urm4h4fZ:~# info ls
...

help 查看不了 ls 这个外部命令,但是 info ls 却可以直接跳转进 ls 的联机手册。

  • <Space> 查看下一页
  • <Delete> 查看上一页
  • q 退出 info 界面
  • H 查看 info 所有命令
  • h 进入 info 教程

4 命令历史

用户输入的命令会被保存到历史列表,文件存放于 ~/.bash_history ,下次打开终端 shell 时也会去 ~/.bash_history 加载。

  • 如果当前命令与上一个命令完全一致,不会加入
  • 以空白字符开始的命令,不会加入(所以,可以通过先键入空格,而后输入命令的方式,使得命令不被记录)

4.1 history 命令

1
history [n]

history 命令查看命令历史列表,n 指定最近 n 条记录。

1
2
3
history -c 				# 清楚历史记录
history -r # 从 history 文件加载历史记录
history -w (history -a) # 将历史记录写入/附加到历史记录文件

4.2 历史记录扩展

调用历史记录的命令 作用
!num 执行编号 num 的历史命令
!! 执行最近一次历史命令,等价于 !-1
!str 执行最近一次以 str 开始的命令
!?str 执行最近一次包含 str 的命令
!$ 上一条命令的最后一个单词
!* 上一个命令的所有参数

例如:

1
2
!l
# 如果最近有 ls 命令,则会执行 ls
1
2
!?dir
# 如果最近有 mkdir 名,则会执行 mkdir
1
2
!$
# 如果有命令 ls ./ 则会返回 ./
1
2
!*
# 如果有命令 ls -a 则会返回 -a

注意 ! 后均无空格

5 自动完成

输入命令的一部分,按 <Tab> 键或 <Ctrl> + I 触发自动完成功能。如果有多个可选项或者没有可选项时会发出提示声表示有歧义。

例如:下例按下 Tab 键后,会发出提示音,再按一下,则会返回所有可能结果(文件)

1
2
3
4
ls .bash<Tab>

# 输出
.bash_history .bashrc

例如:按下 Tab 键后,会发出提示音,再按一下,则会返回所有可能结果(命令)

1
2
3
4
ls<Tab>

# 输出
ls lsb_release lscpu lsinitramfs lslocks lsmem lsns lspci lsusb lsattr lsblk lshw lsipc lslogins lsmod lsof lspgpot

6 命令别名

6.1 alias 查看命令别名

有时设置一些命令的别名能方便命令的输入。可以使用 alias 查看别名:

1
2
3
4
5
6
7
8
9
10
alias

# 输出
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'

这说明了输入 l 相当于输入 ls -CF ;输入 la 相当于输入 ls -A

6.2 自定义别名

  • 可以进入 ~/.bashrc 中修改(永久修改)【推荐单独创建文件 .bash_aliases
./bashrc 文件内容

在用户目录下创建文件 .bash_aliases 写入例如:

1
2
3
4
5
6
7
# .bash_aliases

# cd alias
alias ..='cd ..'

# history alias
alias h='history 20'

然后 source .bashrc 之后,便可永久保存别名。

  • 也可以直接命令输入(不会保存)
1
alias <别名>='<完整命令>'  # = 无空格

例如:

1
2
alias h='history 20'
alias ..='cd ..'

设置 h 扩展为 history 20.. 扩展为 cd ..

1
2
3
alias h
# 输出
alias h='history 20'
1
2
3
4
alias ..

# 输出
alias ..='cd ..'

6.3 取消别名与不进行别名扩展

  • 取消别名
1
unalias <别名>

unalias -a 取消所有别名

  • \ 表示不适用别名扩展
1
\ls

7 终端组合键

7.1 终端 shell 组合键

组合键 含义
Ctrl + D EOF 输入结束
Ctrl + C 中断进程
Ctrl + \ 退出进程,对应的内存状态保存到 core 文件
Ctrl + Z 发送终端停止信号,前台作业暂停并放入后台
Ctrl + H<Delete> 删除光标前的最后一个字符
Ctrl + W 删除光标前的最后一个单词,以空格为分割
Ctrl + U 删除这一行

fg 命令:将后台作业切换到前台执行;bg 命令:将暂停的作业切换到后台执行

使用命令,可以查看这些组合键

1
2
3
4
5
6
7
stty -a

# 输出
speed 9600 baud; rows 35; columns 130; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S;
susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; discard = ^O; min = 1; time = 0;
...

输入 Ctrl + V 再按 Ctrl + 得到字符 ^

7.2 bash 组合键

bash 使用 readline 库新增其他组合键。

快捷键 含义
Ctrl + A 光标移动到行首
Ctrl + E 光标移动到行尾
Ctrl + L 清屏并移动光标到左上角,等价于 clear 命令
Ctrl + _ 撤回之前的操作
Ctrl + K 剪切光标处到结尾的字符
Ctrl + Y 在光标处粘贴

配置文件位于 /etc/inputrc ,建议在 ~/.inputrc 中配置。