爆笑教程  《看表情包学Linux》 猛戳订阅  

  写在前面

本篇将继续讲解 Linux 基本命令行操作,对 Linux 手册、复制文件或目录、移动文件与重命名操作和查看目标文件内容进行讲解。我会手把手去演示操作每一个指令的用法以及常用选项,这些命令不需要可以的去记它,记不得就去翻一翻,用多了自然就会记住滴。


Ⅰ. man 手册

0x00 引入:Linux 里也能查文档?

 在写 C/C++ 的时候记不得某个函数,我们可以去查手册。

Linux 的命令有很多参数,我们不可能全记住,但是我们可以通过查看联机手册获取帮助。

举个简单的例子,我们想搜一下 printf ,但是又不想脱离 Linux 去搜,

这时我们可以去问系统的那个男人 —— man

$ man printf

 我们发现,printf 在这里竟然是一个命令?!是的,你没有看错。(其实也是个命令,后期讲)

man 不仅可以用来查命令,还可以用来查C语言函数。

因为 Linux 这款操作系统本身是由C语言写的,所以它的 man 手册默认是带C语言的标准手册的。

所以如果想查C语言的直接 man 就可以了,想查其他语言你也可以选择安装对应的语言手册。

但是我们一般不用在上面安装,直接百度搜对应语言的在线手册看会更好,看的也舒服。

实际上,man 手册更多的是用来查指令和系统调用接口的。

所以,如果我们想查某个不懂的命令我们只需要 man 一下,问问那个男人就可以了。

0x01 查看有哪些手册

 我们现在再给大家看几个查询的案例:

$ man 3 printf$ man 2 fork$ man 1 printf

思考:man 后面带这些数字干什么?如果我不知道 man 有那些手册可以查看呢?

我们可以问男人的男人 —— man man,查看一下标准手册给我们提供的手册:

$ man man

 而这些数字我们也可以从中看到它们对应的意思:

 是查命令, 是系统调用, 是C语言相关的接口。我们最常用的就是这三本手册。

所以我们给 man 标上不同的数字,以用来查不同的手册。

0x02 手册的安装

 此外,在座的各位如果是云服务器,云服务器是一个线上的环境。

 即使是没有 man 手册,这也很正常。就比如说现在似乎只有C语言的手册,其他好像不支持。

你可以试试看能不能查到 fork 指令的用法:

$ man 2 fork

如果查不到,我们就需要安装一下 man (需切换至 root 用户)

# yum install -y man-pages

 装完之后,再查询 fork 就可以查到了: 

 诶,怎么都是英文啊?Linux 手册可以汉化吗?

当然可以,有时间可以自己去试一试,懒的话直接看其实也没关系,也是一个锻炼。

(man 手册我们会经常用,不用担心,下面我再正式介绍一下 man 指令的用法和常用选项)

0x03 man 指令

man [选项] 命令

常用选项:

  • -k 根据关键字搜索联机帮助
  • num 只在第 num 章节找
  • -a 将所有章节的都显示出来,比如 man printf 它缺省从第一章开始搜索,知道就停止,用a选项,当按 下q退出,他会继续往后面搜索,直到所有章节都搜索完毕。
  • man 手册分为8章 
    • 1 是普通的命令
    • 2 是系统调用,如open,write之类的(通过这个,至少可以很方便的查到调用这个函数,需要加什么头文 件)
    • 3 是库函数,如printf,fread
    • 4 是特殊文件,也就是 /dev 下的各种设备文件
    • 5 是指文件的格式,比如passwd, 就会说明这个文件中各个字段的含义
    • 6 是给游戏留的,由各个游戏自己定义
    • 7 是附件还有一些变量,比如向environ这种全局变量在这里就有说明
    • 8 是系统管理用的命令,这些命令只能由root使用,如ifconfig。

总结:

① 对于没有 man 手册的问题:root 下输入 yum install -y man-pages

man 手册可以查看不同的手册,手册编号 ,默认是 

③ 如果你不知道有啥手册可以查,输入 man man 查看。

Ⅱ. 复制文件或目录

0x00 引入:如何拷贝一个文件?

这里我将深入浅出的去讲,为了方便讲解,我们先做出如下操作:

 nano 是 Linux 的文本编辑器,而 cat 就是把文本的内容显示出来。

我们现在试着用 cp 指令拷贝一份 file-bak.txt 出来:

$ cp file.txt file-bak.txt

这就是 cp 指令的拷贝功能,我们下面就赶快来介绍一下这个命令。

0x01 cp 指令

cp [选项] 源文件或目录 目标文件或目录

 功能:复制文件或目录(类似于Windows中的复制粘贴功能)

  说明:cp 指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录, 则它会把前面指定的所有文件或目录复制到此目录中。若同时指定多个文件或目录,而最后的目的地并非一个已存在的目录,则会出现错误信息。

  常用选项:

  • -f –force 强行复制文件或目录, 不论目的文件或目录是否已经存在。
  • -i –interactive 覆盖文件之前先询问用户。
  • -r 递归处理,将指定目录下的文件与子目录一并处理。若源文件或目录的形态,不属于目录符号链接,则一律视为普通文件处理。
  • -R–recursive 递归处理,将指定目录下的文件及子目录一并处理。

 我们不仅能拷贝,还可以指定路径去拷贝。

拷贝一份 file.txtdir 目录下:

$ cp file.txt ../foxny/dir/file.txt-1

 

注意事项:如果在拷贝的时候,要拷贝的文件是拷贝在当前路径下,两个文件的名称不能一样。如果拷贝到不同路径下,可以一样。

0x02 cp -r 选项

 默认情况下 cp 是不允许拷贝目录的,如果需要我们应该要携带 -r 选项。

$ cp-r [源目录] [目标目录]# 拷贝目录

 此外,加上 -f 可以强制拷贝,不询问你是否要拷贝。

$ cp -rf [源目录] [目标目录]# 强制拷贝目录

(如果有些文件不是你的,它会有询问,这个我们后期讲权限的时候再说)

Ⅲ. 移动文件与重命名操作

0x00 引入:剪贴功能

 如果我们想把一个文件移动的到指定的目录下,在 Windows 里我们都是直接拖动的。

还可以右键文件,使用 “剪贴” 功能然后粘贴到你想要放置它的目录下,

点击粘贴后,原来的位置就没有了,文件就移动过去了。

刚才我们说了复制,除了复制外,当然还有剪贴功能。

同样的,在 Linux 下我们用 mv 指令去移动我们的文件:

  下面我们来正式介绍一下。

0x01 mv 命令

mv [选项] 源文件或目录 目标文件或目录

 功能:① 剪贴文件或目录(可以剪贴普通文件,也可以整体剪贴目录)

                  重命名(类似于Windows中的重命名)

  说明:

  • mv 命令中第二个参数类型的不同(是目标文件还是目标目录)mv 命令将文件重命名或将其移至一个新的 目录中。
  • 当第二个参数类型是文件时,mv 命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。
  • 当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,mv 命令将各参数指定的源文件均移至 目标目录中。

  常用选项:

  • -f  force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖。
  • -i  若目标文件 (destination) 已经存在时,就会询问是否覆盖。

0x02 重命名目录文件

mv 命令除了剪贴功能,还有一个重命名的功能。

$ mv [文件] [新名字] # 重命名

0x03 对于删除文件的补充

  Linux 中,一定要注意不要轻易地删除文件,除非你特别的确认。

因为 Linux 没有真正的回收站,不像 Windows 你删了可以去回收站找。

Linux 中你删了就真的删了,但是如果你想 Linux 里也有像 Windows 那样的回收站,

我们通过 shell 脚本把 rm 改造成 mv,这个需要用 vim 去改。

感兴趣可以试试:(将 rm 改造成 mv)

vim ~/.bashrc #修改这个文件mkdir -p ~/.trashalias rm=trashalias ur=undelfileundelfile() {mv -i ~/.trash/\$@ ./}trash() {mv $@ ~/.trash/}

 定义两个 Linux 命令,把 rm 命令用 mv 命令重改,做一个回收站。

Ⅳ. 查看目标文件内容

0x00 cat 指令

  我们前面已经用过这个命令了,现在我们来正式讲解一下这个命令。 

cat [选项][文件]

 功能:打印文件内容(查看目标文件的内容)

  常用选项:

  • -b 对非空输出行编号
  • -n 对输出的所有行编号
  • -s 不输出多行空行

cat -n 选项:打印的内容带上行号

$ cat -n # 打印,但是带行号

思考:cat 把文件内容打印出来,有什么用?

cat 有点像C语言中把文件内容全部读出来然后打印到屏幕上,

它比较适合用来查看短的文本或者代码,如果我们只是单纯的想把文件打开看看,

我们就可以 cat 一下这个文件,这就像 Winodws 里双击打开记事本一样。

0x01 tac 指令

 这是一个比较有意思的指令!

cat 倒过来就是 tac,它的功能自然不言而喻,倒着打印文件内容:

$ tac [文件]

注意事项:tac 不能像 cat 一样 cat -n 带行号打印!

0x02 cat 不适合打印长文本

 cat 命令适合短文本的打印,那长文本我们可以用什么打印呢?

为了有实际场景方便讲解,我们先伪造出一个十万行的文本:

 (建议直接复制粘贴到XShell里)

cnt=1; while [ $cnt -le 100000 ]; do echo "Hello! $cnt"; let cnt++; done

打印了十万行 Hello,如果我们想把它存起来,我们可以在末尾加一个 > [文件名] 

(直接把下面的命令复制粘贴 shift+insert 进去就行,至于这里的 > 我们下一篇会详细讲解)

$ cnt=1; while [ $cnt -le 100000 ]; do echo "Hello! $cnt"; let cnt++; done > large.txt

 (我们用 vim 打开看看)

 搞定,现在我们就形成了一个十万行的文本了。

像这种大的文件,我们用 cat 显示看看:

结论:cat 不适合查看大文本,因为它会刷屏,最后让我们查到的永远都是最后几段。

 我们刚才创建的 latge.txt 足足有十万行,把 cat 都吓傻了。

对于这种长文本,我们如果想查看可以使用 more 指令:

$ more large.txt

占满一个屏幕后就不往下显示了,如果想继续往下显示,按回车:

当然,more 还有许多选项,我们下面来正式介绍一下。

0x03 more 指令

more [选项][文件]

 功能:类似于cat,但是更适合查看长文本

  常用选项:

  • -n 对输出的所有行编号
  • 按 Q 退出查看

 more -n :比如我们想直接查看第 10000 行的内容

$ more 10000 large.txt # 查看第10000行

0x04 less 指令

 less 更是重量级!

more 仅能向前移动,却不能向后移动,但 less 支持前后翻,我们更推荐使用 less

 less [参数] 文件

 功能:less 与 more 类似,但 使用 less 可以随意浏览文件。

  说明:

  • less 工具也是对文件或其它输出进行分页显示的工具,应该说是 linux 正统查看文件内容的工具,功能极 其强大。
  • less 的用法比起 more 更加的有弹性。在 more 的时候,我们并没有办法向前面翻, 只能往后面看
  • 但若使用了 less 时,就可以使用 [pageup][pagedown] 等按键的功能来往前往后翻看文件,更容易用 来查看一个文件的内容!
  • 除此之外,在 less 里头可以拥有更多的搜索功能,不止可以向下搜,也可以向上搜。

  常用选项:

  • -i    忽略搜索时的大小写
  • -N  显示每行的行号 /字符串:向下搜索“字符串”的功能 ” />(与 / 或 ? 有关)
  • N   反向重复前一个搜索(与 / 或 ? 有关)
  • 按 Q 推出查看

less 可以帮助我们进行查看文本,可以用它来进行日志查看! 

0x05 head & tail 指令

head [参数]... [文件]...tail [参数]... [文件]...

指令说明:

  • head 默认打印前10行内容,tail 默认打印后10行内容。如果想指定行数可以加 -n 选项。
  • head 与 tail 就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块。
  • head 用来显示档案的开头至标准输出中,而 tail 自然就是看档案的结尾。

  常用选项:

  • -n 显示的行数

用法演示:我们拿之前创建的有十万行的 large.txt 去测试效果:

0x06 管道 | 

 ❓ 思考:如果我想查看 large.txt 文本的  行的内容呢?

 ① 方法1:临时文件法

② 方法2:走管道

$ head -30020 large.txt | tail -20

是不是非常的爽?我们下面就来说说这个 “管道 | ” 究竟是什么。

现实生活中的管道,运输石油、天然气的管道,是运送资源的枢纽。

 (高中地理:管道运输是五大运输方式之一)

而在计算机世界中,资源是 “数据”,可以理解为是计算机互联网世界的石油。

而这个符号 ”  |  ”  就像是一个管道一样,所以我们称之为管道,我们来看看它的作用:

管道的作用:级联多个命令,来完成流水线式的数据处理工作。

用法演示:我们提取一些 large.txt 文件中的数据

 [ 笔者 ]   王亦优 [ 更新 ]   2022.7.8❌ [ 勘误 ]   /* 暂无 */ [ 声明 ]   由于作者水平有限,本文有错误和不准确之处在所难免,本人也很想知道这些错误,恳望读者批评指正!

参考资料 

C++reference[EB/OL]. []. http://www.cplusplus.com/reference/.

Microsoft. MSDN(Microsoft Developer Network)[EB/OL]. []. .

百度百科[EB/OL]. []. https://baike.baidu.com/.

比特科技. Linux[EB/OL]. 2021[2021.8.31 xi