Linux基础命令(二):文件目录操作及命令使用——cp,mv,mkdir,rm,ln,通配符,命令类型,type,which,help,man,apropos,whatis,info,alias

操作文件和目录

cp — 复制文件和目录

mv — 移动/重命名文件和目录

mkdir — 创建目录

rm — 删除文件和目录

ln — 创建硬链接和符号链接

如果是简单的文件和目录操作任务,使用图形化界面的文件管理器会更容易些,但是对于复杂的文件操作任务,则使用命令行更方便,因为有通配符的存在。(eg:如何拷贝一个目录下的所有HTML文件)

通配符

 因为 shell 频繁地使用文件名,shell 提供了特殊字符来帮助你快速指定一组文件名。这些特殊字符叫做通配符。使用通配符(文件名代换)允许你依据字符的组合模式来选择文件名。

接受文件名作为参数的任何命令,都可以使用通配符。

通配符
通配符 意义
* 匹配任意多个字符(包括零个或一个)
? 匹配任意一个字符(不包括零个)
[characters] 匹配任意一个属于字符集中的字符
[!characters] 匹配任意一个不是字符集中的字符
[[:class:]] 匹配任意一个属于指定字符类中的字符
普遍使用的字符类
字符类 意义
[:alnum:] 匹配任意一个字母或数字
[:alpha:] 匹配任意一个字母
[:digit:] 匹配任意一个数字
[:lower:] 匹配任意一个小写字母
[:upper:] 匹配任意一个大写字母
通配符范例
模式 匹配对象
* 所有文件
g* 文件名以“g”开头的文件
b*.txt 以"b"开头,中间有零个或任意多个字符,并以".txt"结尾的文件
Data??? 以“Data”开头,其后紧接着3个字符的文件
[abc]* 文件名以"a","b",或"c"开头的文件
BACKUP.[0-9][0-9][0-9] 以"BACKUP."开头,并紧接着3个数字的文件
[[:upper:]]* 以大写字母开头的文件
[![:digit:]]* 不以数字开头的文件
*[[:lower:]123] 文件名以小写字母结尾,或以 “1”,“2”,或 “3” 结尾的文件

字符范围

使用字符集的时候可以利用中划线表示字符范围,比如[a-e]、[1-6]。

通配符在 GUI 中也有效

  • 在 Nautilus (GNOME 文件管理器)中,可以通过 Edit/Select 模式菜单项来选择文件。 输入一个用通配符表示的文件选择模式后,那么当前所浏览的目录中,所匹配的文件名就会高亮显示。
  • 在 Dolphin 和 Konqueror(KDE 文件管理器)中,可以在地址栏中直接输入通配符。例如, 如果你想查看目录 /usr/bin 中,所有以小写字母 ‘u’ 开头的文件, 在地址栏中敲入 ‘/usr/bin/u*‘,则 文件管理器会显示匹配的结果。

创建目录

mkdir directory...

注意表示法:在描述一个命令时,当有三个圆点跟在一个命令的参数后面, 这意味着那个参数可以有多个。(eg:mkdir dir1 dir2 dir3)

复制文件和目录

可以将一个文件中的内容复制到另一个文件中。

cp item1 item2

可以复制单个或多个项目(文件和目录)到一个目录下。

cp item... directory
cp 选项
选项 意义
-a, --archive 复制文件和目录,以及它们的属性,包括所有权和权限。 通常,复本具有用户所操作文件的默认属性。
-i, --interactive 在重写已存在文件之前,提示用户确认。如果这个选项不指定, cp 命令会默认重写文件。
-r, --recursive 递归地复制目录及目录中的内容。当复制目录时, 需要这个选项(或者-a 选项)。
-u, --update 当把文件从一个目录复制到另一个目录时,仅复制 目标目录中不存在的文件,或者是文件内容新于目标目录中已经存在的文件。
-v, --verbose 显示翔实的命令操作信息
cp 实例
命令 运行结果
cp file1 file2 复制文件 file1 内容到文件 file2。如果 file2 已经存在, file2 的内容会被 file1 的内容重写。如果 file2 不存在,则会创建 file2。
cp -i file1 file2 这条命令和上面的命令一样,除了如果文件 file2 存在的话,在文件 file2 被重写之前, 会提示用户确认信息。
cp file1 file2 dir1 复制文件 file1 和文件 file2 到目录 dir1。目录 dir1 必须存在。
cp dir1/* dir2 使用一个通配符,在目录 dir1 中的所有文件都被复制到目录 dir2 中。 dir2 必须已经存在。
cp -r dir1 dir2 复制目录 dir1 中的内容到目录 dir2。如果目录 dir2 不存在, 创建目录 dir2,操作完成后,目录 dir2 中的内容和 dir1 中的一样。 如果目录 dir2 存在,则目录 dir1 (和目录中的内容)将会被复制到 dir2 中。

移动和重命名文件

mv 命令可以执行文件移动和文件命名任务,这依赖于你怎样使用它。任何一种 情况下,完成操作之后,原来的文件名不再存在。

把文件或目录 “item1” 重命名为 “item2”。

mv item1 item2

把一个或多个条目从一个目录移动到另一个目录中。

mv item... directory
mv 选项
选项 意义
-i --interactive 在重写一个已经存在的文件之前,提示用户确认信息。 如果不指定这个选项,mv 命令会默认重写文件内容。
-u --update 当把文件从一个目录移动另一个目录时,只是移动不存在的文件, 或者文件内容新于目标目录相对应文件的内容。
-v --verbose 当操作 mv 命令时,显示翔实的操作信息。
mv 实例
mv file1 file2

移动 file1 到 file2。如果 file2 存在,它的内容会被 file1 的内容重写。 如果 file2 不存在,则创建 file2。 这两种情况下,file1 都不再存在。

mv -i file1 file2 除了如果 file2 存在的话,在 file2 被重写之前,用户会得到提示信息外,这个和上面的选项一样。
mv file1 file2 dir1 移动 file1 和 file2 到目录 dir1 中。dir1 必须已经存在。
mv dir1 dir2 如果目录 dir2 不存在,创建目录 dir2,并且移动目录 dir1 的内容到目录 dir2 中,同时删除目录 dir1。如果目录 dir2 存在,移动目录 dir1(及它的内容)到目录 dir2。

删除文件和目录

rm item...
rm 选项
选项 意义
-i, --interactive 在删除已存在的文件前,提示用户确认信息。 如果不指定这个选项,rm 会默默地删除文件
-r, --recursive 递归地删除文件,这意味着,如果要删除一个目录,而此目录 又包含子目录,那么子目录也会被删除。要删除一个目录,必须指定这个选项。
-f, --force 忽视不存在的文件,不显示提示信息。这选项覆盖了“--interactive”选项。
-v, --verbose 在执行 rm 命令时,显示翔实的操作信息。
rm 实例
命令 运行结果
rm file1 默默地删除文件
rm -i file1 除了在删除文件之前,提示用户确认信息之外,和上面的命令作用一样。
rm -r file1 dir1 删除文件 file1, 目录 dir1,及 dir1 中的内容。
rm -rf file1 dir1 同上,除了如果文件 file1,或目录 dir1 不存在的话,rm 仍会继续执行。

小贴士: 当你使用带有通配符的rm命令时(除了仔细检查输入的内容外), 先用 ls 命令来测试通配符。这会让你看到将要被删除的文件是什么。然后按下上箭头按键,重新调用刚刚执行的命令,用 rm 替换 ls。

命令的使用

type – 说明怎样解释一个命令名

which – 显示会执行哪个可执行程序

man – 显示命令手册页

apropos – 显示一系列适合的命令

info – 显示命令 info

whatis – 显示一个命令的简洁描述

alias – 创建命令别名

什么是命令

命令可以是下面四种类型之一:

  1. 是一个可执行程序,就像我们所看到的位于目录/usr/bin 中的文件一样。 这一类程序可以是用诸如 C 和 C++语言写成的程序编译的二进制文件, 也可以是由诸如shell,perl,python,ruby等等脚本语言写成的程序 。

  2. 是一个内建于 shell 自身的命令。bash 支持若干命令,内部叫做 shell 内部命令 (builtins)。例如,cd 命令,就是一个 shell 内部命令。

  3. 是一个 shell 函数。这些是小规模的 shell 脚本,它们混合到环境变量中。 在后续的内容里,我们将讨论配置环境变量以及书写 shell 函数。但是现在, 仅仅意识到它们的存在就可以了。

  4. 是一个命令别名。我们可以定义自己的命令,建立在其它命令之上。

显示命令的类型

type 命令是 shell 内部命令,它会显示命令的类别。

type command

显示一个可执行程序的位置

which command

这个命令只对可执行程序有效,不包括内建命令和命令别名,别名是真正的可执行程序的替代物。 当我们试着使用 shell 内建命令时,例如,cd 命令,我们或者得不到回应,或者是个错误信息。

在zsh中,显示命令位置的关键字是where。

得到 shell 内建命令的帮助文档

help command

注意表示法:出现在命令语法说明中的方括号,表示可选的项目。一个竖杠字符表示互斥选项。(eg:cd [-L|-P] [dir])

显示用法信息

许多可执行程序支持一个 --help 选项,这个选项是显示命令所支持的语法和选项说明。

command --help

显示程序手册页

许多希望被命令行使用的可执行程序,提供了一个正式的文档,叫做手册或手册页(man page)。

man command

在大多数 Linux 系统中,man 使用 less 工具来显示参考手册,所以当浏览文档时, less 命令都能有效。

man 所显示的参考手册,被分成几个章节,它们不仅仅包括用户命令,也包括系统管理员命令、程序接口、文件格式等等。

手册页的组织形式
章节 内容
1 用户命令
2 程序接口内核系统调用
3 C 库函数程序接口
4 特殊文件,比如说设备结点和驱动程序
5 文件格式
6 游戏娱乐,如屏幕保护程序
7 其他方面
8 系统管理员命令

我们可以指定章节号来查看需要的信息。尤其是如果我们要查找一种文件格式,而同时它也是一个命令名时,不指定章节号将总是得到第一个匹配项。

man chapternumber command

显示适当的命令

apropos keyword

基于关键词,搜索参考手册列表中可能的匹配项。

输出结果每行的第一个字段是手册页的名字,第二个字段展示章节。注意,man 命令加上”-k”选项, 和 apropos 完成一样的功能。

显示非常简洁的命令说明

whatis 程序显示匹配特定关键字的手册页的名字和一行命令说明。

whatis command

显示程序 Info 条目

GNU 项目提供了一个命令程序手册页的替代物,称为”info”。info 内容可通过 info 阅读器 程序读取。info 页是超级链接形式的,和网页很相似。

info command

info 程序读取 info 文件,info 文件是树型结构,分化为各个结点,每一个结点包含一个题目。 info 文件包含超级链接,可以让你从一个结点跳到另一个结点。超级链接可通过它开头的星号来辨别出来,把光标放在它上面并按下 enter 键,就可以激活它。

info 命令
命令 行为
? 显示命令帮助
PgUp or Backspace 显示上一页
PgDn or Space 显示下一页
n 下一个 - 显示下一个结点
p 上一个 - 显示上一个结点
u Up - 显示当前所显示结点的父结点,通常是个菜单
Enter 激活光标位置下的超级链接
q 退出

我们所讨论的大多数命令行程序,属于 GNU 项目”coreutils”包,所以输入:info coreutils 将会显示一个包含超级链接的手册页,这些超级链接指向包含在 coreutils 包中的各个程序。

README 和其它程序文档

许多安装在系统中的软件,都有自己的文档文件,这些文件位于/usr/share/doc 目录下。 这些文件大多数是以文本文件的形式存储的,可用 less 阅读器来浏览。一些文件是 HTML 格式, 可用网页浏览器来阅读。我们可能遇到许多以”.gz”结尾的文件。这表示 gzip 压缩程序 已经压缩了这些文件。gzip 软件包包括一个特殊的 less 版本,叫做 zless,zless 可以显示由 gzip 压缩的文本文件的内容。

用别名(alias)创建自己的命令

命令行小技巧,我们可以把多个命令放在同一行,命令之间用";"分开即可。

command1; command2; command3...

通过 alias 命令可以把这一串命令转变为一个命令。

alias new_command='command1; command2; command3...'

删除别名,使用 unalias 命令。

unalias new_command

虽然要尽量避免使用已经存在的命令名来命名别名,但是通常我们会把一个普遍用到的参数选项加到常用的命令后面。(例如 ls 命令,其实是 ls --color=tty 的别名,加入了色彩支持)

注意:在命令行中定义的别名,是有生命周期的。当你的 shell 会话结束时,它们会消失。如果希望别名一直存在,需要为其配置系统环境。

猜你喜欢

转载自blog.csdn.net/li528405176/article/details/82344174