【Linux系统】—— 基本指令(一)

【Linux系统】------ 基本指令(一)

  • [1 「ls」指令](#1 「ls」指令)
    • [1.1 初识 「ls」 指令](#1.1 初识 「ls」 指令)
    • [1.2 「ls -l」](#1.2 「ls -l」)
    • [1.3 认识文件](#1.3 认识文件)
    • [1.4 「ls -l」显示的内容](#1.4 「ls -l」显示的内容)
    • [1.5 如何区分文件类型](#1.5 如何区分文件类型)
    • [1.6 「ls -a」](#1.6 「ls -a」)
    • [1.7 混合使用命令行选项](#1.7 混合使用命令行选项)
    • [1.8 「ls」查看指定目录下文件](#1.8 「ls」查看指定目录下文件)
    • [1.9 「ls」 指令常用命令行选项](#1.9 「ls」 指令常用命令行选项)
  • [2 「pwd」 指令](#2 「pwd」 指令)
    • [2.1 「whoami 」指令](#2.1 「whoami 」指令)
  • [3 「cd」 命令](#3 「cd」 命令)
    • [3.1 初识 「cd 」命令](#3.1 初识 「cd 」命令)
    • [3.2 再探 『 . 』 和 『 .. 』目录](#3.2 再探 『 . 』 和 『 .. 』目录)
    • [3.3 根目录](#3.3 根目录)
    • [3.4 绝对路径与相对路径](#3.4 绝对路径与相对路径)
    • [3.5 「cd ~」与「cd -」](#3.5 「cd ~」与「cd -」)
  • [4 「touch」 命令](#4 「touch」 命令)
    • [4.1 初识 「touch」 指令](#4.1 初识 「touch」 指令)
    • [4.2 文件的时间](#4.2 文件的时间)
      • [4.2.1「stat」 指令](#4.2.1「stat」 指令)
      • [4.2.2 文件的三个时间](#4.2.2 文件的三个时间)
    • [4.3 「touch」 指令命令行选项](#4.3 「touch」 指令命令行选项)
  • [5 「mkdir」 命令](#5 「mkdir」 命令)
    • [5.1 初识 「mkdir」](#5.1 初识 「mkdir」)
    • [5.2 「mkdir」 创建一串路径](#5.2 「mkdir」 创建一串路径)
    • [5.3 「tree」 命令](#5.3 「tree」 命令)
  • [6 指令的本质](#6 指令的本质)

1 「ls」指令

1.1 初识 「ls」 指令

  • 语法:「ls」 [选项] [目录或文件]
  • 功能:对于目录,该指令列出该目录下的所有子目录与文件 。对于文件,该指令列出该文件名及其相关信息

简单来说,「ls」 指令就是显示当前目录下的文件。

  • 那么目录是什么呢
    这里补充一个重要的知识点:
    在 Linux 中,目录相当于 windows 中的文件夹
    目录 == 文件夹
  • 当前目录:当前我这个用户所处的目录
    好比当前你问我在哪里,我回答我在我家里,我家在某市某区某单元。我们人类世界中,地址就是一个典型的目录,它是用来定位你当前在哪里。Linux 中的目录也是一样的

如果当前目录下没有任何文件或目录即一个空目录 (空文件夹),ls 是不会显示任何东西

1.2 「ls -l」

其实,在 「ls」 后面加上 「-l」 也可以显示当前目录下的文件或目录

我们发现,仅仅只有 「ls」 指令,只显示当前目录的文件名或目录名 ;而 「ls -l」 前面还显示出了一堆信息 ,虽然现在的我们也许还看出懂这些信息的含义。

我们先来介绍一些基本的概念:

我们在命令行中:输入的 「ls」 字符串,我们称之为命令;而后面的 「-l」 (「ls」和 「-l」中间有个空格不要忘记),这种以 「-」 开头的,我们将其称为命令行选项。命令行选项可以是0个或多个,多个命令行选项都是用空格隔开的。

「ls」默认只会显示文件名(目录名),而「ls -l」则显示文件名和更多的内容

1.3 认识文件

既然加上「-l」可以显示文件的更多内容,那么文件又有什么内容呢?

现在我问大家一个问题:windows 系统中,我们新建一个空文件,里面没有任何内容,这时它要不要在磁盘上占用空间呢?

答案是要占据磁盘空间

文件,除了我们经常关心的文件内容,文件还有文件名、日期,类型、大小等等其他很多东西

文件名,文件类型,修改时间 等等这些,我们称之为文件的属性。而文件的属性也是数据 ,这些数据也是要被存储下来的

什么是属性呢?就好比一个人的身高、体重、性别、籍贯等,这些就是一个人的属性,这些信息在你的学校中都会记录下来,你的学籍档案中都有。

所以不要认为一个文件,磁盘只存储文件中的内容,磁盘存储的是文件的属性加内容。

上述图片中大小显示的是 0 字节,这仅仅统计的是文件内容的大小,而文件的实际大小还要加上文件的属性

我们得出的结论是:文件 == 内容 + 属性。

既然 文件 == 内容 + 属性,未来我们学习文件的时候,要么是对文件的内容进行操作,要么是对文件的属性进行操作

1.4 「ls -l」显示的内容

对文件有了更进一步的了解后,我们来看看「ls -l」所显示的内容

「ls」只会显示文件(目录)的文件名,而「ls -l」还会进一步显示文件(目录)的属性

「ls」命令更准确来说是显示文件(目录)的属性只有「ls」,只显示文件名这一属性;加上「 -l」显示更多属性

1.5 如何区分文件类型

Linux 中是如何区分文件的类型呢?我怎么知道他是普通文件还是目录呢?

在 windows 系统中,我们可以直接看出来,因为 windows 系统中每一个文件都有它对应的后缀**(.zip、 .pdf、 .txt、.jpg)**

而 Linux 并不是通过后缀来区分,它一般通过「ls -l」指令显示出的信息中的 第一大列的第一个字符来区分。

如图:

如果第一个字符是 「d」,表示它是一个 目录;如果是 「-」 表示它是一个 普通文件。

这里,我们暂时只介绍这两种文件

我们也可以看到,Linux 默认将目录标记为蓝色;普通文件不做处理,依然是白

1.6 「ls -a」

这里我们再介绍一个选项:「-a」

我们先来看看输入 「ls -a」 命令会发生什么

我们发现又多了两个目录(他们是 d 开头):『 . 』 和 『 . .

现在我们进入空目录中(怎么进入等会介绍),我们知道对于空目录「ls」是不进行任何显示

现在我们加上命令行选项「-a」会发生什么呢

发现依然是多了两个目录:『 . 』 和 『 . .

为什么「ls」看不到,而「ls -a」可以看到 『 . 』 和 『 . . 』 呢?

我们先来介绍一下 隐藏文件(目录)

在 Linux 中,以 『 . 』开头的文件(目录)叫做 隐藏文件(目录)

所以「ls -a」就是显示包括隐藏文件(目录)在内的所有文件(目录)

而 『. 』和 『.. 』目录都是以 『.』 开头,是隐藏文件,「ls」与「ls -l」是不会查看隐藏文件(目录)的

至于『. 』 和 『.. 』目录是什么,我们后面再介绍

1.7 混合使用命令行选项

前面我们知道命令行选项可以是多个,那可不可以「-a」和「-l」同时使用呢?是可以的

那「-l」再「-a」呢?是可以的,而且效果一模一样

不仅如此,还可以省略写法:「ls -la」及 「ls -al」

Linux 的指令,绝大部分的指令所带的选项(命令行选项),是否分开写、是否连着写、是否按顺序写完全没有关系

1.8 「ls」查看指定目录下文件

「ls」默认查看的是当前目录下的文件

「ls」后面也可以指定目录,查看指定目录下的文件

1.9 「ls」 指令常用命令行选项

  • 「-a」:列出目录下的所有文件,包括以 . 开头的隐藏文件
  • 「-d」:将目录像文件一样显示,而不是显示其下的文件。如:「ls -d」 指定目录
  • 「-i」:输出文件的 i 节点的索引信息。如 「ls -ai」 指定文件
  • 「-k」:以 k 字节的形式表示文件的大小。「ls -alk」 指定文件
  • 「-l」:列出问价的详细信息
  • 「-n」:用数组的 UID,GID 代替名称。(介绍 UID,GID)
  • 「-F」:在每个文件名后附上一个字符以说明该文件的类型,"*" 表示可执行的普通文件;"/" 表示目录;"@" 表示符号链接; "|" 表示 FIFOs;"=" 表示套接字(sockets)。(目录类型识别)
  • 「-r」:对目录反向排序
  • 「-t」:以时间排序
  • 「-s」:在 I 文件名后输出该文件大小。(大小排序,如何找到目录下最大的文件)
  • 「-R」:列出所有子目录下的文件。(递归)
  • 「-1」: 一行值输出一个文件

2 「pwd」 指令

但 Linux 系统,我怎么才能知道自己当前所处的路径(所处的目录)是哪个呢

这时就可以用到 「pwd」 指令

  • 语法:「pwd」
  • 功能:显示用户当前所在的目录(所处路径)

当我们用超级用户(root)登录系统时,我们默认在 /root 目录下

当我们用普通用户登录系统时(假设是user1),默认是在 /home/user1 目录下

  • 我们知道,在 windows 中是用 「 \ 」 作为路径分割符
  • 而在 Linux 中,则用 「 / 」 作为路径分割符
  • 在两个「 \ 」(windows)或两个「 / 」(Linux) 之间的一定是一个文件夹(目录)
  • 所谓路径本质就是由 多个目录 构成的
  • 而路径的最末端(如上述 user1)有可能是目录,也有可能是普通文件

2.1 「whoami 」指令

这里我们补充一条指令

  • 语法:「whoami 」
  • 功能:显示当前用户名称

3 「cd」 命令

3.1 初识 「cd 」命令

  • 语法:「cd」 目录名
  • 功能:改变工作目录,将当前工作目录改到指定目录下

既然「cd」是改变目录,那肯定要知道变成什么样子,因此「cd」后面要加指定目录的目录名

如:我现在在 113目录 下,通过「cd」进入到 root目录 下

3.2 再探 『 . 』 和 『 ... 』目录

前面我们知道『 . 』 和 『 .. 』是隐藏目录 ,但是他们又是什么呢

现在我们来正式了解一下

  • 在 Linux 中,任何一个目录(包括空目录)系统都会默认自带两个目录:『 . 』 和 『 ..
  • . 』 和 『 .. 』是隐藏目录,他们是以『 . 』开头,正常来说看不到
  • . 』表示当前目录;『 .. 』表示上级目录

先来看『 . 』(当前目录)

可以看到,输入cd . 我们一直在当前路径下

我们再来看『 .. 』(上级目录)

可以看到输入cd ..,我们不断往上级目录退 。

相信『 . 』 和 『 .. 』很好理解,这里就不再过多赘述了

3.3 根目录

但是我们能一直回退吗?

我们发现,回退到一定程度时,就回退不了了,这时因为回退到了根目录

前面我们曾说 「 / 」 是路径分割符,但是有一个 「 / 」 非常特殊:整个路径中最开始的 「 / 」

Linux 中,我们将路径中 第一个「 / 」称为根目录 。

Linux的目录结构由「 / 」开始

而根目录本质也是一个文件夹,既然是文件夹,那它里面肯定也是可以放文件和文件夹的

我们可以通过 「ls」 看看根目录的文件

所以 Linux 的文件结构,是一棵从根目录「 / 」开始的多叉树

这棵树的 叶子结点 一定是普通文件或者是空目录;非叶子结点 一定是一个非空目录!

3.4 绝对路径与相对路径

上图中,我们想找到 test.c 文件怎么找呢。

是通过路径来找的:/home/bit/test.c

为什么能这样找呢?因为一个节点虽然能有多个孩子,但只能有一个父亲 ,所以从叶子结点逆向地向回找,该路径具有唯一性

我们把这种从根目录开始一直定位到目标文件的方式,我们称之为:绝对路径。

这里我们再来聊聊路径这一概念:linux 中我们要访问一个文件,前提是你先找到他,而找到一个文件我们必须要通过路径 来找到。这就是为什么 windows 和 linux 下都要谈路径。而绝对路径具有唯一性,所以我们通过绝对路径可以快速找到一个文件。

在 linux 中要找到一个文件,除了绝对路径还有一种方式:相对路径

相对路径:以当前目录 为参照位置,定位一个文件

比如 cd .. 就是以当前目录为参照点,返回当前目录的上级目录,这就是一个相对路径

注:使用相对路径可以 cd 「文件(目录)名」 或 cd 「./」+「文件(目录)名」 。如 cd ./113cd 113 都是可以的

绝对路径 一般在 linux 系统重配置文件来使用

相对路径 我们日常操作用的多,因为比较简单

3.5 「cd ~」与「cd -」

「cd」命令除了使用绝对和相对路径,还可以使用两个特殊符号:~-

  • 「cd ~」 :进入当前用户自己的家目录

这里先简单介绍一下家目录:任何一个 linux 用户,用特定的用户名登录系统时,默认在家目录下

超级用户 登录(root账号),默认在 /root 路径下

普通用户 登录,默认在 /home/用户名 路径下

  • 「cd -」:返回最近所处路径

4 「touch」 命令

4.1 初识 「touch」 指令

  • 语法:「touch」 [选项]... 文件...
  • 功能:「touch」命令可以更改文档或目录的日期时间,包括存取时间和修改时间;或者新建一个不存在的文件

「touch」是用来 创建普通文件 的:

例如:创建新文件 hello.txt

但是 「touch」命令不能创建文件夹

此外「touch」命令还可以更新一个文件所对应的时间

4.2 文件的时间

现在我们知道文件包括文件内容和文件属性,其中文件属性中有一种属性是非常重要的:文件时间

文件的时间如果乱了,那这个系统就乱了。任何一个文件新建的时候都要有自己时间的概念

一般文件的时间有三种,怎么查看呢?这里我们介绍一个新指令:「stat」

4.2.1「stat」 指令

「stat」 就是 state(状态)的意思:显示一个文件或目录的属性。

通过 「stat」 指令,我们就可以看到一个文件详细的属性介绍

4.2.2 文件的三个时间

虽然上面显示出的文件属性我们很多看不懂,但没关系,今天我们来看看文件的三个时间:

文件一般都有三种时间:Access时间Modify时间Change时间。为了方便记忆,这三个时间可以记为:ACM时间

在 Linux 系统中,文件的属性通常与文件的访问、修改以及状态改变相关联。具体来说,access、modify(有时也称为 change,但在此上下文中我们通常区分两者)、change(这里特指 inode change time)指的是文件的不同时间戳,它们各自代表了文件的不同方面的变化。

  • Access Time (atime):
    • 访问时间是指文件数据最后一次被读取(访问)的时间。这包括使用如 cat、more、less 等命令查看文件内容,或者使用 grep 等命令搜索文件内容时的最后一次操作时间。然而,值得注意的是,很多文件系统(特别是挂载时使用了 noatime 或 relatime 选项的文件系统)为了减少磁盘写入操作,可能会优化或忽略 atime 的更新。
  • Modify Time (mtime):
    • 修改时间是指文件内容最后一次被修改的时间。这包括了对文件内容的任何写入操作,如使用文本编辑器修改文件、向文件中追加数据等。mtime 是文件内容变化的直接反映。
  • Change Time (ctime):
    • 状态改变时间(或 inode change time)是指文件的状态( inode 信息)最后一次被改变的时间。这不仅仅包括文件内容的修改(这也会更新 mtime),还包括了文件权限、所有者、链接数(有多少文件名链接到 inode)等的改变。简而言之,任何导致文件 inode 信息发生变化的操作都会更新 ctime。因此,即使文件内容没有改变,但如果其权限或所有者等属性发生了变化,ctime 也会更新。

4.3 「touch」 指令命令行选项

  • 「-a」:或 --time = atime 或 --time=access 或 --time=use 只更改存取时间
  • 「-c」:或 -no-create 不建立任何文档
  • 「-d」:使用指定的日期时间,而非现在的时间
  • 「-f」:此参数将忽略不予处理,仅负责解决 BSD 版本 「touch」 指令的兼容性问题
  • 「-m」:或 --time=mtime 或 --time=modify 只更改变动时间
  • 「-r」: 把指定文档或目录的日期时间,统统设成和参考文档或目录的日期时间相同
  • 「-t」:使用指定的日期时间,而非现在时间

5 「mkdir」 命令

5.1 初识 「mkdir」

  • 语法:「mkdir」 [选项] dirname...
  • 功能:在当前目录下创建一个名为 "dirname" 的目录

「touch」 命令是创建一个普通文件,而「mkdir」则是创建一个目录

5.2 「mkdir」 创建一串路径

直接用「mkdir」创建一个目录很简单,这里就不再多说了。如果我想创建一串路径,比如:当前我在 newdir 目录下,我想在当前目录下创建 a/b/c 路径,「mkdir」可以做到吗。

我们试一试

可以看到,直接这样创建是不行的。「mkdir」无法一次性创建这样的路径,它无法创建目录的结构

如果要创建一串目录的结构,我们可以用到命令行选项:「-p」。「-p」可以一次性创建一串路径

  • 「-p」:-parents 可以是一个路径名称。此时若路径中某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不存在的目录,即一次可以建立多个目录

我们来试试

可以看到是成功创建了的,我们是可以进入到 a、b、c 目录下的

5.3 「tree」 命令

像上面我们分别进入到 a、b、c 目录下去查看目录太过繁琐,也不够直观。有没有什么方式可以只看看出当前目录的结构呢?这时我们就可以使用 「tree」命令

在 Linux 系统中,「tree」命令是一个非常有用的工具,用于以树状图的形式递归地列出目录的内容。这个命令可以非常直观地展示目录结构,包括子目录和文件,以及它们的层级关系。

如:

「tree」 命令默认显示当前目录下的结构,当然,后面可以加上路径,查看指定目录的目录结构

需要注意的是,在默认情况下,Linux 系统可能并不自带「tree」命令,但我们可以通过你的 Linux 发行版的包管理器来安装它。

centos 可以通过输入代码:yum install -y tree 来安装;ubuntu 可以通过输入代码:apt install -y tree 来安装

6 指令的本质

前面讲了这么多,相信大家对指令已经有了模糊的概念,但是指令的本质是什么呢

「which 」指令可以帮助我们了解指令的本质

Linux 中的 「which 」 指令是一个常用的命令,主要用于 查找并显示指定命令的绝对路径。

先讲结论:命令本质上就是我们系统中的文件! 而且是以 「- 」开头,我们称之为普通文件。也就是说当我们在系统中执行对应的命令时,实际上这一个个命令就是一个个文件罢了!

命令(指令)就是文件!

那这样的话,我们直接输入指定命令的路径,也可以实现相关功能咯?

确实如此

命令的本质 == 可执行文件 == 我们写的C/C++程序

命令本质上就是别人用 C/C++ 等语言写出来的可执行程序罢了

那是不是意味着我们自己写一个简单的C代码,生成一个可执行文件也可以跑起来呢?

我们试一下

可以看到,我们输入相关路径,确实执行了 C语言 代码

为什么要加 「./」 呢?因为要执行一个命令就要先找到这个命令,而我们自己写的 mycmd 命令就在当前目录下的 mycmd 文件

可是系统命令也是可执行程序,为什么可以不用带路径就可以直接执行呢?

我们将 mycmd 命令拷贝到 /usr/bin 目录下,发现它也可以不带路径,像命令一样运行

我们刚刚安装了 「tree」 命令,安装命令的本质就是将其从网络里下载下来,将其拷贝到指定的 /usr/bin 目录下,「tree」 命令就能直接跑了。

刚刚我们将 mycmd 拷贝到 /usr/bin 目录下,本质就是在做 linux 下的软件安装。其实 大部分的安装都只是拷贝罢了,将相应文件拷贝到指定目录下


好啦,本期关于基本指令的知识就介绍到这里啦,希望本期博客能对你有所帮助。同时,如果有错误的地方请多多指正,让我们在 Linux 的学习路上一起进步!

相关推荐
YRr YRr4 分钟前
解决Ubuntu 20.04上编译OpenCV 3.2时遇到的stdlib.h缺失错误
linux·opencv·ubuntu
认真学习的小雅兰.7 分钟前
如何在Ubuntu上利用Docker和Cpolar实现Excalidraw公网访问高效绘图——“cpolar内网穿透”
linux·ubuntu·docker
zhou周大哥22 分钟前
linux 安装 ffmpeg 视频转换
linux·运维·服务器
不想起昵称9291 小时前
Linux SHELL脚本中的变量与运算
linux
the丶only1 小时前
单点登录平台Casdoor搭建与使用,集成gitlab同步创建删除账号
linux·运维·服务器·docker·gitlab
枫叶红花2 小时前
【Linux系统编程】:信号(2)——信号的产生
linux·运维·服务器
_微风轻起2 小时前
linux下网络编程socket&select&epoll的底层实现原理
linux·网络
WANGWUSAN663 小时前
Python高频写法总结!
java·linux·开发语言·数据库·经验分享·python·编程
Stark、4 小时前
【Linux】文件IO--fcntl/lseek/阻塞与非阻塞/文件偏移
linux·运维·服务器·c语言·后端