-
查看目录内容
ls
-
切换目录
cd
-
创建和删除操作
touch
rm
mkdir
-
拷贝和移动文件
cp
mv
-
查看文件内容
cat
more /less
grep
head/tail
-
确定文件的类型
- file
-
其他
echo
- 重定向
>
和>>
- 管道
|
- 软链接和硬链接
01. 查看目录内容
1.1 ls
命令说明
ls
是英文单词 list 的简写,其功能为列出目录的内容,是用户最常用的命令之一,类似于 DOS 下的dir
命令。
Linux 下文件和目录的特点
- Linux 文件 或者 目录 名称最长可以有
256
个字符。 - 以
.
开头的文件为隐藏文件,需要用 -a 参数才能显示。 - . 代表当前目录。
- .. 代表上一级目录。
1.2 ls 常用选项
参数 | 含义 |
---|---|
-a | 显示指定目录下所有子目录与文件,包括隐藏文件 |
-l | 以列表方式显示文件的详细信息 |
-h | 配合 -l 以人性化的方式显示文件大小 |
计算机中文件大小的表示方式(科普)
单位 | 英文 | 含义 |
---|---|---|
字节 | B(Byte) | 在计算机中作为一个数字单元,一般为 8 位二进制数 |
千 | K(Kibibyte) | 1 KB = 1024 B,千字节 (1024 = 2 ** 10) |
兆 | M(Mebibyte) | 1 MB = 1024 KB,百万字节 |
千兆 | G(Gigabyte) | 1 GB = 1024 MB,十亿字节,千兆字节 |
太 | T(Terabyte) | 1 TB = 1024 GB,万亿字节,太字节 |
拍 | P(Petabyte) | 1 PB = 1024 TB,千万亿字节,拍字节 |
艾 | E(Exabyte) | 1 EB = 1024 PB,百亿亿字节,艾字节 |
泽 | Z(Zettabyte) | 1 ZB = 1024 EB,十万亿亿字节,泽字节 |
尧 | Y(Yottabyte) | 1 YB = 1024 ZB,一亿亿亿字节,尧字节 |
1.3 ls中通配符的使用
因为 shell 频繁地使用文件名,shell 提供了特殊字符来帮助你快速指定一组文件名。这些特殊字符叫做通配符。 使用通配符允许你依据字符类型来选择文件名。下表列出这些通配符以及它们所选择的对象:
通配符 | 含义 |
---|---|
* | 代表任意个数个字符 |
? | 代表任意一个字符,至少 1 个 |
[] | 表示可以匹配字符组中的任何一个 |
[abc] | 匹配 a、b、c 中的任意一个 |
[a-f] | 匹配从 a 到 f 范围内的的任意一个字符 |
[!abc] | 匹配任意一个不是字符集中的字符 |
[[:class:]] | 匹配任意一个属于指定字符类中的字符 |
经常使用的字符类如下表:
字符类 | 意义 |
---|---|
[:alnum:] | 匹配任意一个字母或数字 |
[:alpha:] | 匹配任意一个字母 |
[:digit:] | 匹配任意一个数字 |
[:lower:] | 匹配任意一个小写字母 |
[:upper:] | 匹配任意一个大写字母 |
借助通配符,为文件名构建非常复杂的选择标准成为可能。下面是一些类型匹配的范例:
模式 | 匹配对象 |
---|---|
* | 所有文件 |
g* | 文件名以“g”开头的文件 |
b*.txt | 以"b"开头,中间有零个或任意多个字符,并以".txt"结尾的文件 |
Data??? | 以“Data”开头,其后紧接着3个字符的文件 |
[abc]* | 文件名以"a","b",或"c"开头的文件 |
[[:upper:]]* | 以大写字母开头的文件 |
[![:digit:]]* | 不以数字开头的文件 |
*[[:lower:]123] | 文件名以小写字母结尾,或以 “1”,“2”,或 “3” 结尾的文件 |
课堂练习:
(base) root@w:/home/w# ls 公共的 视频 文档 音乐 anzhuangbao PycharmProjects watchlist 模板 图片 下载 桌面 prac_code snap wendu (base) root@w:/home/w# ls 公共的 视频 文档 音乐 anzhuangbao PycharmProjects watchlist 模板 图片 下载 桌面 prac_code snap wendu base) root@w:/bin# ls aa* aa-enabled aa-exec (base) root@w:/bin# ls zip???? zipgrep zipinfo zipnote (base) root@w:/bin# ls [[:upper:]]* GET HEAD POST X Xephyr Xorg Xwayland X11: '[' mmove 2to3-2.7 mokutil
通配符里更多的高级知识我们在后面高级课程里的正则表达式里面来讲。
02. 切换目录
2.1 cd
cd
是英文单词 change directory 的简写,其功能为更改当前的工作目录,也是用户最常用的命令之一。
注意:Linux 所有的 目录 和 文件名 都是大小写敏感的。
命令 | 含义 |
---|---|
cd | 切换到当前用户的主目录(/home/用户目录) |
cd ~ | 切换到当前用户的主目录(/home/用户目录) |
cd . | 保持在当前目录不变 |
cd .. | 切换到上级目录 |
cd - | 可以在最近两次工作目录之间来回切换 |
2.2 相对路径和绝对路径
- 相对路径 在输入路径时,最前面不是 / 或者 ~,表示相对 当前目录 所在的目录位置。
- 绝对路径 在输入路径时,最前面是 / 或者 ~,表示从 根目录/家目录 开始的具体目录位置。
课堂练习:练习上面的cd的快捷方式,熟记;
03. 创建和删除操作
3.1 touch
- 创建文件或修改文件时间。
- 如果文件 不存在,可以创建一个空白文件。
- 如果文件 已经存在,可以修改文件的末次修改日期。
3.2 mkdir
- 创建一个新的目录
选项 | 含义 |
---|---|
-p | 可以递归创建目录 |
新建目录的名称 不能与当前目录中 已有的目录或文件 同名。
mkdir -p parent/son
。
3.3 rm
- 删除文件或目录。
选项 | 含义 |
---|---|
-f | 强制删除,忽略不存在的文件,无需提示 |
-r | 递归地删除目录下的内容,删除文件夹 时必须加此参数 |
小心 rm!(你一定要知道的)
类 Unix 的操作系统,比如说 Linux,没有复原命令。一旦你用 rm 删除了一些东西, 它就消失了。Linux 假定你很聪明,你知道你在做什么。
尤其要小心通配符。思考一下这个经典的例子。假如说,你只想删除一个目录中的 HTML 文件。输入:
rm *.html
这是正确的,如果你不小心在 * 和 “.html” 之间多输入了一个空格,就像这样:rm * .html
这个 rm 命令会删除目录中的所有文件,还会抱怨没有文件叫做 “.html”。
小贴士。 无论什么时候,rm 命令用到通配符(除了仔细检查输入的内容外!), 用 ls 命令来测试通配符。这会让你看到要删除的文件列表。然后按下上箭头按键,重新调用 刚刚执行的命令,用 rm 替换 ls。
04. 拷贝和移动文件
序号 | 命令 | 对应英文 | 作用 |
---|---|---|---|
01 | tree [目录名] | tree | 以树状图列出文件目录结构 |
02 | cp 源文件 目标文件 | copy | 复制文件或者目录 |
03 | mv 源文件 目标文件 | move | 移动文件或者目录/文件或者目录重命名 |
4.1 tree
tree
命令可以树状图列出文件目录结构。
选项 | 含义 |
---|---|
-d | 只显示目录 |
(base) root@w:/home/w/anzhuangbao# tree
.
├── dd_for_ubuntu.zip
├── libpango-1.0-0_1.40.14-1ubuntu0.1_amd64.deb
├── libpangocairo-1.0-0_1.40.14-1ubuntu0.1_amd64.deb
└── libpangoft2-1.0-0_1.40.14-1ubuntu0.1_amd64.deb
0 directories, 4 files
4.2 cp
cp
命令的功能是将给出的 文件 或 目录 复制到另一个 文件 或 目录 中,相当于 DOS 下的copy
命令。
这里列举了 cp 命令一些有用的选项(短选项和等效的长选项)
选项 | 意义 |
---|---|
-a, --archive | 复制文件和目录,以及它们的属性,包括所有权和权限。 通常,复本具有用户所操作文件的默认属性。 |
-i, --interactive | 在重写已存在文件之前,提示用户确认。如果这个选项不指定, cp 命令会默认重写文件。 |
-r, --recursive | 递归地复制目录及目录中的内容。当复制目录时, 需要这个选项(或者-a 选项)。 |
-u, --update | 当把文件从一个目录复制到另一个目录时,仅复制 目标目录中不存在的文件,或者是文件内容新于目标目录中已经存在的文件。 |
-v, --verbose | 显示翔实的命令操作信息 |
课堂练习以下实例。
命令 | 运行结果 |
---|---|
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 中。 |
4.3 mv
mv
命令可以用来 移动 文件 或 目录,也可以给 文件或目录重命名。
选项 | 含义 |
---|---|
-i | 覆盖文件前提示 |
-u | 当把文件从一个目录移动另一个目录时,只是移动不存在的文件, 或者文件内容新于目标目录相对应文件的内容 |
-v | 当操作 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。 |
05. 查看文件内容
序号 | 命令 | 对应英文 | 作用 |
---|---|---|---|
01 | cat 文件名 | concatenate | 查看文件内容、创建文件、文件合并、追加文件内容等功能 |
02 | more 文件名 | more | 分屏显示文件内容 |
03 | grep 搜索文本 文件名 | grep | 搜索文本文件内容 |
5.1 cat
cat
命令可以用来 查看文件内容、创建文件、文件合并、追加文件内容 等功能。cat
会一次显示所有的内容,适合 查看内容较少 的文本文件。
选项 | 含义 |
---|---|
-b | 对非空输出行编号 |
-n | 对输出的所有行编号 |
Linux 中还有一个
nl
的命令和cat -b
的效果等价。
5.2 more
和less
more
命令可以用于分屏显示文件内容,每次只显示一页内容。- 适合于 查看内容较多的文本文件。
使用 more
的操作键:
操作键 | 功能 |
---|---|
空格键 | 显示手册页的下一屏 |
Enter 键 | 一次滚动手册页的一行 |
b | 回滚一屏 |
f | 前滚一屏 |
q | 退出 |
/word | 搜索 word 字符串 |
5.3 grep - 打印匹配行
grep 是个很强大的程序,用来找到文件中的匹配文本。这样使用 grep 命令:
grep pattern [file...]
当 grep 遇到一个文件中的匹配”模式”,它会打印出包含这个类型的行。grep 能够匹配的模式可以 很复杂,但是现在我们把注意力集中在简单文本匹配上面。在后面的高级课程中,我们将会研究高级模式,叫做正则表达式。
比如说,我们想在我们的程序列表中,找到文件名中包含单词”zip”的所有文件。这样一个搜索, 可能让我们了解系统中的一些程序与文件压缩有关系。这样做:
[me@linuxbox ~]$ ls /bin /usr/bin | sort | uniq | grep zip
bunzip2
bzip2
gunzip
...
grep 有-对方便的选项:”-i”导致 grep 忽略大小写当执行搜索时(通常,搜索是大小写敏感的),”-v”选项会告诉 grep 只打印不匹配的行。
5.4 head / tail - 打印文件开头部分/结尾部分
有时候你不需要一个命令的所有输出。可能你只想要前几行或者后几行的输出内容。 head 命令打印文件的前十行,而 tail 命令打印文件的后十行。默认情况下,两个命令 都打印十行文本,但是可以通过”-n”选项来调整命令打印的行数。
[me@linuxbox ~]$ head -n 5 ls-output.txt
total 343496
...
[me@linuxbox ~]$ tail -n 5 ls-output.txt
...
它们也能用在管道线中:
[me@linuxbox ~]$ ls /usr/bin | tail -n 5
znew
...
6.确定文件的类型
随着探究操作系统的进行,知道文件包含的内容是很有用的。我们将用 file 命令来确定文件的类型。我们之前讨论过,在 Linux 系统中,并不要求文件名来反映文件的内容。然而,一个类似 “picture.jpg” 的文件名,我们会期望它包含 JPEG 压缩图像,但 Linux 却不这样要求它。可以这样调用 file 命令:
file filename
当调用 file 命令后,file 命令会打印出文件内容的简单描述。例如:
[me@linuxbox ~]$ file picture.jpg
picture.jpg: JPEG image data, JFIF standard 1.01
有许多种类型的文件。事实上,在类 Unix 操作系统中比如说 Linux 中,有个普遍的观念就是“一切皆文件”。
07. 其他
7.1 echo 文字内容
echo
会在终端中显示参数指定的文字,通常会和 重定向 联合使用。
7.2 重定向 >
和 >>
- Linux 允许将命令执行结果 重定向到一个 文件。
- 将本应显示在终端上的内容 输出/追加 到指定文件中。
其中
>
表示输出,会覆盖文件原有的内容。>>
表示追加,会将内容追加到已有文件的末尾。
7.3 管道 |
- Linux 允许将 一个命令的输出 可以通过管道 做为 另一个命令的输入。
- 可以理解现实生活中的管子,管子的一头塞东西进去,另一头取出来,这里
|
的左右分为两端,左端塞东西(写),右端取东西(读)。
常用的管道命令有:
more
:分屏显示内容。grep
:在命令执行结果的基础上查询指定的文本。
ll /usr/bin |less
ls /bin /usr/bin | sort | less
:因为我们指定了两个目录(/bin 和/usr/bin),ls 命令的输出结果由两个有序列表组成, 各自针对一个目录。通过在管道线中包含 sort,我们改变输出数据,从而产生一个 有序列表。
ls /bin /usr/bin | sort | uniq | wc -l
ls /bin /usr/bin | sort | uniq | grep zip
7.4 硬链接和软链接
- 硬链接
硬链接是最初 Unix 创建链接的方式,而软链接接更加现代。 在默认情况下,每个文件有一个硬链接,这个硬链接给文件起名字。当我们创建一个硬链接以后,就为文件创建了一个额外的目录条目。但硬链接有两个重要局限性:
- 一个硬链接不能关联它所在文件系统之外的文件。这是说一个链接不能关联 与链接本身不在同一个磁盘分区上的文件。
- 一个硬链接不能关联一个目录。
一个硬链接和文件本身没有什么区别,不像软链接,当你列出一个包含硬链接的目录内容时,你会看到没有特殊的链接指示说明。当一个硬链接被删除时,这个链接被删除,但是文件本身的内容仍然存在(这是说,它所占的磁盘空间不会被重新分配),直到所有关联这个文件的链接都删除掉。知道硬链接很重要,因为你可能有时会遇到它们,但现在实际中更喜欢使用符号链接。
创建硬链接:
ln file link
- 软链接
软链接,又称为符号链接,像这样的一条信息:
lrwxrwxrwx 1 root root 11 2007-08-11 07:34 libc.so.6 -> libc-2.6.so
注意看,为何这条信息第一个字符是“l”,硬链接文件没有,并且有两个文件名呢? 这是一个特殊文件,叫做符号链接(也称为软链接或者 symlink )。 在大多数“类 Unix” 系统中, 有可能一个文件被多个文件名所指向。虽然这种特性的意义并不明显,但它真地很有用。创建符号链接是为了克服硬链接的局限性。软链接和 Windows 的快捷方式差不多,当然,符号链接早于 Windows 的快捷方式 很多年。
一个符号链接指向一个文件,而且这个符号链接本身与其它的符号链接几乎没有区别。 例如,如果你往一个符号链接里面写入东西,那么相关联的文件也被写入。然而, 当你删除一个符号链接时,只有这个链接被删除,而不是文件自身。如果先于符号链接删除文件,这个链接仍然存在,但是不指向任何东西。在这种情况下,这个链接被称为 坏链接。在许多实现中,ls 命令会以不同的颜色展示坏链接,比如说红色,来显示它们的存在。
创建软链接:
ln -s item link
,”item” 可以是一个文件或是一个目录。
序号 | 命令 | 作用 |
---|---|---|
01 | ln -s 被链接的源文件 链接文件 | 建立文件的软链接,用通俗的方式讲类似于 Windows 下的快捷方式 |
-
注意:
-
\1. 没有
-s
选项建立的是一个 硬链接文件- 两个文件占用相同大小的硬盘空间,工作中几乎不会建立文件的硬链接
-
\2. 源文件要使用绝对路径,不能使用相对路径,这样可以方便移动链接文件后,仍然能够正常使用
软链接演练:
- 新建
01.py
。 - 将当前目录下的
01.py
移动到 当前目录下demo/b/c
目录下。- 使用 相对路径 和 绝对路径 分别建立
01.py
的软链接firstpython和firstpython1。
- 使用 相对路径 和 绝对路径 分别建立
- 将
firstpython
和firstpython1 移动到demo
目录下,对比使用 相对路径 和 绝对路径 的区别。
硬链接演练:
- 建立01.py的硬链接 01_hard,02_hard。
- 使用
ls -l
查看文件的硬链接数。 - 删除 01.py,并且使用 tree来确认 demo目录下的三个链接文件。