【Linux】常见的基本指令详解

一、什么是 Linux

对于不了解 Linux 的同学来说,可能根本不懂 Linux 是什么,接下来我会简单介绍一下 Linux。大家可能对操作系统不太了解,那么我们常用的电脑中的 windows 系统大家应该听过,windows 系统和 Linux 系统都是一款操作系统

Linux是一种自由和开放源代码的类UNIX操作系统,该操作系统的内核由林纳斯托瓦兹在1991年首次发布,之后,在加上用户空间的应用程序之后,就成为了 Linux 操作系统。严格来讲,Linux 只是操作系统内核本身,但通常采用Linux内核来表达该意思。

我们只需要知道,Linux 和 windows 一样是一款操作系统,它们都是进行软硬件资源管理的软件,更多的知识我们以后学习中不断挖掘。

二、Linux 中常见的指令

1. ls 指令

语法: ls [选项][目录或文件]
功能: 对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。

首先我们要知道,一个文件分为内容属性,对文件的操作,无非就分为对内容的操作和对属性的操作,而我们的 ls 指令就是对文件的配套属性进行查看的操作。

ls 指令常见的选项有以下:

  • -a:列出目录下的所有文件,包括以 . 开头的隐含文件;在 Linux 中,以 .开头的文件叫做隐藏文件。使用:ls -a.
  • -l: 列出文件的详细信息。其中 ls -l 可以简写为 ll. 其中选项可以组合使用,如 ls -al.
  • -i 输出文件的 i 节点的索引信息。如 ls –ai 指定文件。
  • -r 对目录反向排序。
  • -t 以时间排序。

下面演示两个常用的指令选项,假设我创建了一个 test 目录,三个文件,分别为:test.cpp,test.c,test.txt;使用 ls 指令:

在这里插入图片描述
使用 ls -l 指令,即 ll :

在这里插入图片描述
其中文件名或目录前面的全部都是对应的属性。

2. pwd 命令

语法: pwd
功能: 显示用户当前所在的目录

使用如下:

在这里插入图片描述

3. cd 指令

语法: cd 目录名
功能: 改变工作目录。将当前工作目录改变到指定的目录下。

(1) 当我们在执行 ls -la 的时候,可以看见有两个隐藏文件:

在这里插入图片描述
那么 ... 分别代表什么呢?

其实 . 是代表当前所在目录,.. 代表上级目录,所以 cd . 就可以理解为进入当前目录,即还是在当前目录;而 cd .. 就是回退到上级目录;而在这里,假设我们需要进入 test 目录,只需要cd test 即可。

(2) 我们在进行 pwd 时,观察到会有很多的 / 符号将不同的目录分割开来,如下图,我们将它称为路径分隔符

在这里插入图片描述

所以我们可以通过路径分隔符采用路径的方式找到一个文件,Linux系统中,磁盘上的文件和目录被组成一棵目录树,每个节点都是目录或文件。以我们上面的目录和文件为例,如下图:

在这里插入图片描述
其中,/ 是根目录。我们为什么要采用路径的方式找到文件呢?因为在根目录下,一定存在很多文件,而找文件,路径标识是唯一标识文件的方式。

Linux 下标识一个文件的路径方法:

  • 相对路径
  • 绝对路径

相对路径: 假设我们现在需要找到 test 目录,而我们当前在 code1 的目录下,相对于 code1 目录,我们需要标识 test 的路径为:../Blog/practice1/test ,即首先我们需要回退到 lmy 的目录下,然后进入 Blog 目录,再进入 practice1 目录,最后再 practice1 下标识 test。例如演示:

当前所在 code1 目录下:
在这里插入图片描述
我们在 cd 后跟上相对路径,即可进入 test 目录:
在这里插入图片描述

绝对路径: 假设我们一样需要标识 test 目录,绝对路径就是我们从根目录开始,路径为:/home/lmy/Blog/practice1/test

例如演示:

我当前在 / 根目录下:

在这里插入图片描述
cd 后跟上绝对路径,即可进入 test 目录:

在这里插入图片描述

(3) 我们在 Linux 中编写代码时,通常会生成一个可执行程序,可执行程序就是需要运行代码的程序,例如下图,a.out 就是一个可执行程序:

在这里插入图片描述

当我们需要运行这个可执行程序时,运行的指令是:./a.out,例如下图:

在这里插入图片描述
一个可执行程序要进行,他需要加载到内存中,而在这之前,我们需要先找到它,而 ./a.out 中,/ 是Linux 中的路径分隔符,我们知道,. 是当前目录的意思,而 ./ 的含义就是在当前目录下找到可执行的程序。

cd 的其他命令:

  • cd ~ :进入用户家目录
  • cd - : 返回最近访问目录

4. touch 指令

语法: touch [选项]… 文件…
功能: touch 命令参数可更改文档或目录的日期时间,包括存取时间和更改时间,或者新建一个不存在的文件

我们常用的 touch 命令就是创建一个文件,例如,我们要创建一个 mytest.c 文件:

在这里插入图片描述

5. mkdir 指令

语法: mkdir [选项] dirname…
功能: 在当前目录下创建一个名为 “dirname” 的目录

mkdir 指令就是创建目录的一个指令,例如我要创建一个 mytest 目录:

在这里插入图片描述
如上图,目录就创建好了。

假设我们需要递归创建多个目录,即创建一个 dir1 目录,dir1 里面又创建 dir2 目录,dir2 里面又创建 dir3 目录,这里需要加 -p 选项,加上创建目录的路径;这里需要我们引出一个指令 tree ,它是以树形结构显示指定的目录,例如:

创建递归目录:

在这里插入图片描述
显示递归目录:

在这里插入图片描述
如图,递归多个目录就创建好了。

6. rmdir 指令 && rm 指令

rmdirmkdir 相反,rmdir 是删除一个空目录的指令。

但是我们日常中使用 rm 指令用作删除比较多,rm 指令可以同时删除文件目录

当我们需要使用 rm 指令删除一个目录时,需要带 -r 选项,常用的选项如下:

  • -f 即使文件属性为只读(即写保护),亦直接删除;即强制删除,删除前不会逐一询问确认
  • -i 删除前逐一询问确认
  • -r 删除目录及其下所有文件;有递归删除的意思

例如我们上面创建的递归多个目录 dir1 ,我们需要删除 dir1,如下:

在这里插入图片描述

如图,dir1 就被删除了,注意,选项可以放在最后或者放在 rm 后面都可以。

如果我们需要删除一个文件 test.cpp,就直接使用 rm test.cpp 指令就可以了。

另外,如果我们想删除当前目录下的所有文件和目录,执行的命令是 rm * -rf ,* 的含义是所有,-rf 是递归和强制。

7. man 指令

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

语法: man [选项] 命令

我们使用的时候在 man 后面跟上需要查找的命令即可。

8. cp 指令

语法: cp [选项] 源文件或目录 目标文件或目录
功能: 复制文件或目录

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

常用选项:

  • -f 或 --force 强行复制文件或目录, 不论目的文件或目录是否已经存在。
  • -r 递归处理,将指定目录下的文件与子目录一并处理。若源文件或目录的形态,不属于目录或符号链 接,则一律视为普通文件处理。

例如我们当前的路径下,有两个目录,一个文件:

在这里插入图片描述

mytesttest 下分别有三个文件,其树形结构如下:

在这里插入图片描述

在这里插入图片描述

我们先将 mytest.c 文件复制到 mytest 目录下,使用 cp mytest.c mytest 指令:

在这里插入图片描述

可以看到已经复制成功,然后我们将 test 目录以及它目录下的所有文件复制到 mytest 目录下,使用 cp -rf test mytest 指令:

在这里插入图片描述
如上图的树形结构,也将目录 test 复制到了 mytest 目录中。

9. mv 指令

mv 命令是 move 的缩写,可以用来移动文件或者将文件改名,是Linux系统下常用的命令,经常用来备份文件或者目录。

语法: mv [选项] 源文件或目录 目标文件或目录
功能:

  1. mv 命令中第二个参数类型是文件还是目录,mv 命令会将文件重命名(文件)或将其移至一个新的目录(目录)中。
  2. 当第二个参数类型是文件时,mv 命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。

例如我当前路径下有两个目录一个文件:

在这里插入图片描述

我们使用命令 mv mytest.c mytest.txt 观察会发生什么变化:

在这里插入图片描述
我们可以观察到,mytest.c 重命名为了 mytest.txt;

注意,我们使用 mv 命令时,mv src dst 假设 src 是源文件/目录,dst 是目标文件/目录,src 无论什么情况一定要存在;当 dst 是文件时,dst 一定要不存在,如果存在,src 会覆盖 dst,导致 dst 丢失。

  1. 当第二个参数类型是目录时,源文件或目录参数可以有多个,mv 命令将各参数指定的源文件均移至目标目录中,这里的功能即是剪切

例如我当前路径下有两个目录,一个文件:

在这里插入图片描述

我们使用命令 mv test Test 观察会发生什么,注意 Test 是一个不存在的目录:

在这里插入图片描述

注意,这里并不是重命名的功能,而是将 test 目录剪切到 Test 目录下,因为 Test 目录不存在,所以系统会自己创建一个,并将 test 下的所有目录或文件全部剪切到 Test 中。

我们执行 mv Test mytest 命令,将 Test 剪切到 mytest 中:

在这里插入图片描述
我们通过 mytest 的树形结构可以看到,Test 已经被剪切到 mytest 中。

10. cat 指令

语法: cat [选项][文件]
功能: 查看目标文件的内容

常用选项:

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

在这里,我们引入几个指令 echo>>><

其中,echo 是向显示器中写入字符串,例如:

在这里插入图片描述

>>> 分别是输出重定向追加重定向

>:输出重定向,本来应该写入到显示器文件中的内容,改写到指定文件中;例如我们将一段字符串写入一个文件中:

在这里插入图片描述
在这里我们就可以使用上面学的指令 catcat 就是查看目标文件的内容,使用如上;

注意如果使用输入重定向,假设写入到一个不存在的文件,系统会自动创建指定文件;而且输入重定向在每次写入到文件之前,要先清空原始文件中的内容,因为它默认以只写的方式打开文件的。

>>:追加重定向,和输出重定向的区别就是,追加重定向每次写入文件之前不会清空原始文件的内容,因为它是以追加的方式写入的,使用如下:

在这里插入图片描述

<:输入重定向,本来应该从键盘文件中读入数据,变成从指定文件中读取对应的数据,如下:

在这里插入图片描述
关于输入重定向,输出重定向和追加重定向,我们在这里只是初步认识,更多的学习我们在后面介绍。

11. more 指令

功能类似 cat,但是当我们的文件内容很多时,它每次只显示满一页的内容,按回车可以接着一行一行显示剩下没显示完的内容,按 q 退出。

由于我们接下来的一个指令功能也与它类似,但比它好用,也比它更常用,所以 more 指令不做详细介绍,我们详细介绍下一个指令。

12. less 指令

语法: less [参数] 文件
功能: less 与 more 类似,但使用 less 可以随意浏览文件,而 more 仅能向下移动,却不能向上移动,而且 less 在查看的时候可以上下移动。

选项:

  • -i 忽略搜索时的大小写
  • -N 显示每行的行号
  • /字符串:向下搜索“字符串”的功能
  • q:quit
  1. less 工具也是对文件或其它输出进行分页显示的工具,应该说是 linux 正统查看文件内容的工具,功能极其强大。
  2. less 的用法比起 more 更加的有弹性。在 more 的时候,我们并没有办法向前面翻, 只能往后面看。
  3. 但若使用了 less 时,就可以使用上下按键的功能来往前往后翻看文件,更容易用来查看一个文件的内容。
  4. 除此之外,在 less 里头可以拥有更多的搜索功能,不止可以向下搜,也可以向上搜。

例如我们使用一个方法直接写入 1000 个"hello world" 到一个 test.txt 的文件,这个方法是在命令行直接输入cnt=0; while [ $cnt -le 1000 ]; do echo "hello world, hello $cnt"; let cnt++; done > test.txt,例如下图:

在这里插入图片描述

我们只需要执行 cat 指令就能查看1000 个"hello world",而我们执行命令less -N test.txt

在这里插入图片描述

当前一个屏幕只能显示 25 个数据,我们此时按上下键是可以上下自由翻看的,按 q 就是退出查看。

13. wc 指令和 uniq 指令

在这里我们引入两个指令 wcuniq,其中 wc 它可以查看一个文件一共有多少行,有多大,使用如下:

在这里插入图片描述

其中,带 -l 选项就是查看行数。

uniq 就是对文件中重复的内容进行去重操作,例如现在有一个 test.c 文件,里面的内容如下:

在这里插入图片描述

我们对它进行去重并加上选项 -c 显示行号:

在这里插入图片描述

14. head 指令

语法: head [参数]… [文件]…
功能: head 用来显示档案的开头至标准输出中,默认head命令打印其相应文件的开头10行。

选项:

  • -行数 显示的行数

例如在上面写入的1000 个 “hello world” 中,我们执行 head -20 test.txt 指令,显示从头开始的 20 行:

在这里插入图片描述

15. tail 指令

语法: tail [必要参数][选择参数][文件]
功能: 用于显示指定文件末尾内容,不指定行数默认显示后 10行;不指定文件时,作为输入信息进行处理。常用查看日志文件。

选项:

  • -f 循环读取
  • -行数 显示行数

例如继续以上面的文件为例,查看后 20 行:

在这里插入图片描述

现在我们可以查看头和尾了,但是如果我们要查看中间部分呢?

这里我们再引入一个知识点:管道,管道的符号是 |

例如我们需要查看 600~609 行,我们的思路首先需要用 head 查看到 609 行,然后我们利用前面 head 的输出作为管道的输入,然后再输出 609 行的后 10 行即可,例如以下指令:

在这里插入图片描述

我们在这再学一个指令 tac,tac 就是与 cat 相反,tac 是倒着查看指定文件的内容,我们使用前面所学的指令完成一个指令如下:

在这里插入图片描述

我们利用管道完成了一个 “流水线” ,以上的指令就是在查看的 test.txt 文件中,取出前 610 行的数据,然后再取出后 10 行的数据,最后进行倒着打印。

16. 时间相关的指令

直接使用 date 就可以查看时间,如:

在这里插入图片描述
我们使用指令 date +%s 可以查看时间戳,如:

在这里插入图片描述

Unix时间戳(英文为Unix epoch, Unix time, POSIX time 或 Unix timestamp)是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。

17. cal 指令

cal命令可以用来显示公历(阳历)日历。公历是现在国际通用的历法,又称格列历,通称阳历。

语法: cal [参数][月份][年份]
功能: 用于查看日历等时间信息,如只有一个参数,则表示年份(1-9999),如有两个参数,则表示月份和年份。

例如直接使用命令 cal :

在这里插入图片描述
使用命令查看 2023 年的日历:

在这里插入图片描述

18. find 指令

语法: find -options pathname
功能: 用于在文件树种查找文件,并作出相应的处理(可能访问磁盘)

常用选项:

  • -name 按照文件名查找文件

例如我当前路径下的 mytest 里面有一个目录 TestTest 目录里面有一个 file6 文件,如下图:

在这里插入图片描述

假设我需要找到它,却不知道它在哪里,我们可以使用指令 find -name file6,例如:

在这里插入图片描述
这样我们就可以找到它的位置在哪里了。

19. grep 指令

语法: grep -选项 ‘搜寻字符串’ 文件
功能: 在文件中搜索字符串,将找到的行打印出来

常用选项:

  • -i: 忽略大小写的不同,所有大小写视为相同
  • -n:输出行号
  • -v :反向选择,亦即显示出没有 ‘搜寻字符串’ 内容的那一行

假设我们在上面打印了 1000 个 " hello world " 的文件中查找编号有 88 的行,并显示出行号,我们可以执行 grep -n "88" test.txt 命令,例如:

在这里插入图片描述

如上图,前面绿色的数字就是行号,后面红色的数字就是我们需要找的字符串。

20. zip/unzip 指令

语法: zip 压缩文件.zip 目录或文件
功能: 将目录或文件压缩成 zip 格式

常用选项:

  • -r 递归处理,将指定目录下的所有文件和子目录一并处理

(1)例如我当前路径下有两个目录,一个是空目录,另一个有目录也有文件,它们的树形结构图如下:

在这里插入图片描述

在这里插入图片描述

现在我需要将 mytest 目录中的所有文件和目录打包压缩到 temp 中,首先我们在 mytest 目录下进行打包压缩:

在这里插入图片描述
如上图,形成了一个 test.zip 文件,然后我们将这个文件移动到外面的 temp 目录下进行解压:

在这里插入图片描述
然后我们观察当前目录下的树形结构:

在这里插入图片描述
我们可以观察到,Test 原本是一个目录,它目录下的文件并没有打包压缩过来,所以是我们在打包压缩的时候出问题了。

我们在打包压缩的时候执行的命令是 zip test.zip ./* 其含义是,将当前目录下的所有文件和目录打包压缩成一个 test.zip 文件,但是并没有将 Test 目录下的文件打包压缩,所以,我们在进行打包压缩时,要加上 -r 选项,其含义是递归处理,将指定目录下的所有文件和子目录一并处理,所以正确的命令应该是 zip -r test.zip ./* ,例如下图:

打包并压缩完成:

在这里插入图片描述

移动 .zip 文件并解压:

在这里插入图片描述

最后观察是否全部已经打包过来:

在这里插入图片描述
我们可以看到,Test 中的文件也被打包过来了,所以这样的打包压缩才是正确的。

(2)在上面的打包压缩的时候,我们完成打包压缩后,还要将 .zip 文件先移动到指定目录再进行解压,那我们可以直接将 .zip 文件直接解压到指定目录下吗?答案是可以的,例如我们继续按照上面的例子,当前已经打包压缩好一个 .zip 文件,如图:

在这里插入图片描述

我们将 test.zip 文件直接解压到上级目录的 temp 目录下,执行命令 unzip test.zip -d ../temp 即可,其中,-d 是指定路径,如下图:

在这里插入图片描述
然后我们回到 temp 目录下观察:

在这里插入图片描述

我们可以看到,这样指定解压路径也是没问题的。

21. tar 指令

tar指令:打包/解包,不打开它,直接看内容

语法: tar [-cxtzjvf] 文件与目录 …

选项:

  • -c :建立一个压缩文件的参数指令(create 的意思)
  • -z :是否同时具有 gzip 的属性,即是否要压缩
  • -f :使用档名,注意,在 f 之后要立即接档名!不要再加选项!
  • -x :解开一个压缩文件的参数指令
  • -C : 解压到指定目录
  • -v :压缩的过程中显示文件!这个常用,但不建议用在背景执行过程

例如我们继续以上面的文件和目录为例子,我们将 mytest 目录下的所以文件和目录进行打包压缩,命令是 tar -czf test.tgz ./* ,其中 czf 的含义是以上选项的含义,形成的文件名以 .tgz 为后缀,./* 是当前路径下的所有文件和目录;

例如演示:

在这里插入图片描述

然后我们将它解压到上级目录下的 temp 目录,如果我们不指定目录,它默认会解压到当前目录下,例如演示:

在这里插入图片描述

如上图,我们用 tar 指令也完成了打包压缩和解压解包的过程。

最后,简单介绍一下 zip/unzip 和 tar 的区别,它们的区别在于压缩的算法不一样,在不同的场景使用不同的压缩算法,但是对于我们来说,使用哪一个都可以。

22. bc 指令

bc 指令其实就是 Linux 上的一个计算器,用法一般结合 echo 和管道使用,使用如下:

在这里插入图片描述

23. uname –r 指令

语法: uname [选项]
功能: uname用来获取电脑和操作系统的相关信息。

补充说明: uname可显示 linux 主机所用的操作系统的版本、硬件的名称等基本信息。

24. 几个重要的热键

  • [Tab]按键—具有『命令补全』和『档案补齐』的功能
  • [Ctrl]+c按键—让当前的程序『停掉』
  • [Ctrl]+d按键—通常代表着:『键盘输入结束』的意思;另外,他也可以用来取代 exit。一般退出登录可以使用 [Ctrl]+d.

学到这里,我们的基本指令就学得差不多啦,已经够大家入门练习啦,往后更多的指令我们在后面的学习中也会介绍~ 感觉有帮助的小伙伴点个赞吧~

猜你喜欢

转载自blog.csdn.net/YoungMLet/article/details/131886563