一、linux概念讲解

linxu的英文缩写是linux is not unix
linux是一种自由和开放源代码的类unix的操作系统,该操作系统的内核由托瓦兹在1991年发布,之后再加上用户空间的应用程序之后就组成了linux操作系统,严格来讲linux只是操作系统内核本身,但通常采用linux内核来表达该意思,而linux通常指基于linux内核的完整操作系统

  1. linxu的特点:开源
  2. linxu的优点:稳定,安全,快速,免费
  3. linux的应用场景:互联网公司的服务器后端,手机的操作系统,嵌入式等

linux版本分为商业发行版和技术版本
商业化发行版本的底层就是linux内核,其在linux内核的基础上拓展的图形化界面,用户程序及相关工具等

  • 商业发行版本在这里插入图片描述
  • 技术版本在这里插入图片描述

二、操作系统(OS)

操作系统的英文是operating system,简称OS
操作系统是一款对软硬件进行管理的软件
操作系统的核心工作:通过对下管理好软硬件资源进而对上提供良好的(稳定,安全,快速)操作/使用环境

  1. 当你想使用鼠标的时候先插入usb线,插入后1-2秒才能进行使用,这是在进行设备驱动,所有的硬件都需要经过设备驱动才可以使用,没有设备驱动就无法使用硬件
  2. 而设备驱动又是添加在操作系统中的特殊程序,所以设备驱动和硬件在操作系统之下
  3. 应用软件建立在操作系统的环境之上,软件/计算机上的行为几乎都会转化为硬件操作,而这中间进行转化的桥梁就是操作系统,例如较为明显的在vs2022上敲下printf(“hello world\n”)对应电脑显示器上就会显示出hello world
  4. 几乎所有的软件的行为都要自上而下的贯穿计算机软硬件结构,那么就离不开操作系统的桥梁功能,即离不开操作系统在这里插入图片描述
    对我们来说,其实已经接触过操作系统了,例如电脑的windows就是一个操作系统,其windows是图形化界面(也可采用纯命令行)和我们要学习的linux是不一样的,linux是纯命令行(也可采用图形化界面)
    下面就由小编带领大家了解一些简单的linux指令
    注:仅介绍常用的指令

三、linux的基本指令

linux的指令就对应我们Windows上的单击和双击操作但是linux没有图形化界面所以就只能用指令操作了。

3.1、 ls指令

  1. ls 查看当前目录下的子目录和文件
  2. ls -l 查看当前当前目录先的子目录和文件的详细信息
  3. ll ls -l 等价于 ll,基于这个原则,其他与 -l 搭配的复合选项也可以被简写,如 ls -al 也可以写成 ll -a;
  4. ls -a 查看当前目录下的子目录和文件,还额外显示出隐藏文件,注意隐藏文件是以.点开头的,当前目录和上一级目录是隐藏文件
  5. ls -l -a查看当前目录下的查看当前目录下的子目录和文件和隐藏文件的详细信息
  6. ls -l -a 还可以这样写 ls -la 还可以这样写 ls -al 还可以这样写 ll -a
  7. ls -d 将当前目录像文件一样显示,当前目录使用.点来进行表示,上一级目录采用…两个点进行表示
  8. ls -d -l显示当前目录的详细信息在这里插入图片描述
    在这里插入图片描述

3.2、 pwd指令

  1. pwd 显示用户当前所在目录位置
    在这里插入图片描述

3.3、cd指令

  • 前置知识
  1. 相对路径:相对路径是一个文件或目录相对于我们当前目录的位置,一旦当前目录位置改变,使用刚刚的相对路径去找之前的文件或目录就大概率找不到,通常较短,在命令行输入中使用,比如我们现在在root目录下,bin目录相对路径为…/bin
  2. 绝对路径:绝对路径一般都是从根目录/开始的,绝对路径在目录树中无论哪一个位置我们都可以找得到,当前目录的位置即使改变我们也可以找到,所以一般绝对路径通常较长,在配置文件中使用,例如图中的linux目录的绝对路径是中/root/hello_linux/linux
    3.家目录是指我们最初登录的目录所处位置,比如使用root账户登录,那么家目录就为/root,使用普通账户ljm登录,那么家目录就为/home/ljm
  3. 在 Windows 中,我们使用 \ 作为路径分隔符,但是这个其实是不规范的,因为它会与转义字符\发生冲突;而在 Linux 中,我们使用的 / 作为路径分隔符,其更为规范与安全;
  1. cd 目录
  2. cd ~ 进入家目录
  3. cd - 返回上一次访问的目录

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.4、tree 指令

  • 前置条件

作为新手小白,通常在在linux系统中默认tree都是没有安装的,那么应该如何安装呢?
其实很简单,只需要在命令行中输入 yum install -y tree 之后linux系统会自动为你安装

在这里插入图片描述
tree 将当前目录下的子目录以及文件使用树状结构显示出来在这里插入图片描述

3.5、touch 指令

touch命令参数可更改文档或目录的日期时间,包括存取时间和更改时间,或者新建一个不存在的文件;
拓展知识

  1. stat 指令可以显示文件或文件系统的状态;
  2. 文件的时间有三种:
  • 最近访问时间(Access):cat、less等查看文件后,该时间改变;
  • 最近更改时间(Modify):使用 nano/vim 等编辑器修改文件内容后,三个时间都改变;
  • 最近改动时间(Change):chmod 修改文件权限或属性后,该时间改变;

在这里插入图片描述

3.6、mkdir 指令

  1. mkdir 在当前目录下创建一个子目录
  2. mkdir -p day1/cpp/test.cpp 在当前目录下递归建立多个目录,建立的是一个路径这一个路径上有多个目录在这里插入图片描述

3.7、rmdir 指令

  1. rmdir 删除当前目录下的指定的子目录,注意这个子目录必须是空子目录
  2. rmdir指令不能删除当前目录的含有子目录的子目录
  3. rmdir指令不能删除非目录文件在这里插入图片描述

3.8、 rm指令

先说结论,rm能删除所有类型的目录和文件

  1. rm 文件名 删除非目录文件,这种方式删除要被询问,麻烦
  2. rm -f 文件名 直接删除文件,不许询问
  3. rm -r 目录 删除当前目录含有子目录的子目录,递归删除,每次删除递归进入节点都要被询问,特别麻烦
  4. rm -rf 目录 直接递归删除目录,不许询问在这里插入图片描述

3.9、echo指令

  1. echo 显示一行文字到显示器上
  2. 这一行文字不同于我们c语言中的字符串,可以不带双引号"“,也可以带双引号”",也可以带单引号也可以是汉字数字特殊符号等在这里插入图片描述

3.10、输出重定向>,追加重定向>>

  • 前置知识

1.linux下一切皆文件
2. alias可以对文字进行重命名,举例,实际的linux指令中并没有ll这个指令,由于ll被经常使用,那么为了便捷性考虑,就将使用alias指令将ls -l的重命名为ll,还有使用alias将rm重命名为mv做一个简单的垃圾回收箱等
3. 指令没有多么神秘,其本质就是可执行文件,指令都为可执行文件(Windows下的exe文件)

  1. echo hello ljm>test.txt 例如我们的echo本来是将一行文字显示到显示器(文件)上,但是我们可以在这行文字后面加入>输出重定向到文件中,如果文件不存在,自动创建一个文件。
  2. 如果文件存在,那么先清空文件,再对文件进行写入文字有没有写入我们就先用后面一个cat查看一下

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

3.10、cat 指令

将整个文件的内容从上到下显示到终端上

  1. -n 对输出的所有行编号;
  2. -b 对非空输出行编号;
  3. -s 不输出多行空行;
  4. cat 可以从键盘(也是文件)上进行读入数据显示到屏幕上在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
注:与 cat 指令对应的还有一个指令 – tac,tac 会将文件内容从下到上显示到终端,但是 tac 不能显示行号;

3.11、man指令

  1. linxu的命令有很多,通常来讲,仅仅靠人的记忆不能够将全部的命令都记住,或多或少会遗忘,那么我们可以查看联机手册,即使用man指令访问linux手册来进行查询
  2. man [num] 指令 查询指令是什么意思
  3. man指令查找使用上箭头和下箭头按行查阅,pg up和pg dn按页查阅,当查阅完成后,按下q即可退出linux手册
  4. linux手册包括9章
  5. man 指令需要安装后才能使用,安装命令是 “yum install -y man-pages”,且此命名只能由 root 用户来安装或者使用 sudo;
  6. man 如果不指定具体章节就会默认从一号手册开始找,直到找到才停下;如果指定了章节,就只会在该章节里面去找;
数字 意义
1 普通命令
2 系统调用
3 C语言库函数
4 设备或特殊文件
5 文件格式和规则
6 游戏及其他
7 宏、包及其他杂项
8 系统管理员相关的命令

在这里插入图片描述

3.12cp指令

cp 是 copy 的缩写,其功能是复制文件或目录,相当于 Windows 下的复制粘贴;

  1. -f 或 --force 强行复制文件或目录, 不论目的文件或目录是否已经存在;

  2. -i 或 --interactive 覆盖文件之前先询问用户;

  3. -r递归处理,将指定目录下的文件与子目录一并处理;若源文件或目录的形态,不属于目录或符号链接,则一律视为普通文件处理;

  4. -R 或 --recursive递归处理,将指定目录下的文件及子目录一并处理;在这里插入图片描述
    在这里插入图片描述

3.13、mv 指令

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

  1. -f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;

  2. -i :若目标文件 (destination) 已经存在时,就会询问是否覆盖;在这里插入图片描述

  • 拓展知识

mv test_3_30 test(你想要命名的名字) 可以对目录进行重命名,文件亦如此

3.14、more 指令

为了方便后面指令的演示,这里我们使用 shell 脚本生成一段简单的具有 1W 行内容的文本,脚本指令如下:

cnt=0; while [ $cnt -le 10000 ] ; do echo "hello linux [$cnt]"; let cnt++; done > test.txt

在这里插入图片描述

然后我们用 vim 在test.txt 中添加几行内容(后面讲先不管)在这里插入图片描述

more [选项] [文件]

more 命令功能类似 cat,都是将文本中的内容显示到终端上,但是与 cat 不同的是,more 会以全屏幕的方式按页显示文本文件的内容,当我们按空白键(space)时就往下一页显示,按 b 键时就会往回(back)一页显示,而且 more 还有搜寻字串的功能;回车下一个。同时,由于 more 命令从前向后读取文件,因此在启动时就加载整个文件;

  1. +n 从笫n行开始显示;
  2. -n 定义屏幕大小为n行;
  3. /字符串:向下搜索“字符串”的功能;
    在这里插入图片描述在这里插入图片描述

在这里插入图片描述

3.15、less指令

less 与 more 类似,但使用 less 可以随意浏览文件,而more仅能向前移动,却不能向后移动,而且 less 在查看之前不会加载整个文件,对于显示大型文件具有较高的效率。

  1. -i 忽略搜索时的大小写;
  2. -N 显示每行的行号;
  3. /字符串:向下搜索“字符串”的功能;
  4. ?字符串:向上搜索“字符串”的功能;在这里插入图片描述
    拓展知识

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

3.16、head指令

在这里插入图片描述

3.17、tail指令

tail -n test.txt 用于显示文件的后n行,默认tail显示文件的后10行在这里插入图片描述

3.18、管道的简单使用

test.txt一共有10000行,那么如何取出取出第8000到8020这些数据?

在我们日常生活中存在许多管道,比如天然气管道、煤气管道、石油管道,它们都有一个共同的作用 – 运输资源;而对于计算机来说,数据就是资源,所以Linux中的管道就是用于传输数据的一种手段,它分为入口和出口。

我们知道,head 和 tail 都是从文件中读取数据,然后输出到终端;在下面的程序中,head 和 tail 被管道连接,所以 head 从文件中读取的数据会直接流入管道中,然后 tail 从管道中读取数据,然后输出到终端上

  1. 通常使用管道 | 进行求解,在这里我们简单的将管道理解为一块内存,这块内存和磁盘无关
  2. 写在 | 管道前面的指令执行完之后的数据暂时存放在 | 管道中,写在 | 管道后面的指令可以直接使用管道中的数据,并且不需要指定路径,只需要写在 | 管道后面即可
  3. 那么我们就可以先使用head先取出前8020行的数据暂时放到管道中,然后再使用tail取出管道数据的最后21个数据即可显示出8000到8020这些数据

在这里插入图片描述

3.19、date 指令

程序运行到每一个关键时刻,都需要自己打印日志并保存到日志文件中,日志包括时间(以时间戳的形式保存),日志等级,日志具体信息,其它信息等,日志是以行的形式进行保存

date 可以直接显示日期时间,但是格式不太符合我们的阅读习惯
date +%Y-%m-%d 更改日期显示默认格式,显示年月日,其中的分隔符我们自由定义,这里我采用-
date +%Y-%m-%d_%H:%M:%S 更改日期显示默认格式,显示年月日和具体时间,其中的分隔符我们自由定义,这里我采用-分隔日期和:分隔时间在这里插入图片描述

3.20、时间戳指令

时间戳的是从1970年1月1日开始所经过的秒数
互联网的范围是全世界,全世界由于时差地方时的不同,如果进行传输则会出现时间不同步的情况,为了保证时间都有一个统一的界定,故而有了时间戳,有了时间戳可以使用指令的选项进行换算为日期

  1. date +%s 获取时间戳
  2. date -d@输入刚刚获取的时间戳,转化为日期
  3. date -d@1743862156 +%Y-%m-%d_%H:%M:%S 将时间戳转换为日期并且按照我们想要显示的格式进行显示在这里插入图片描述

3.21、cal指令

  1. cal 显示当月日历
  2. cal -3 显示3个月的日历,即当月,前一月,下一月的日历
  3. cal -y 2026 指定显示2026年的12个月份的日历
  4. cal -j 从1月1日开始进行计算,算出当前天在当年中处于第几天在这里插入图片描述
    在这里插入图片描述

3.22、查找指令(find which whereis)

  • find 指令
    用于在文件树种查找文件,并作出相应的处理(可能访问磁盘);
    由于find的功能十分强大,所以其对应的选项也非常多,但作为初学者我们可以先掌握它最常用的选项,其余选项在后续学习中慢慢掌握;
  1. -name 按照文件名查找文件;

在这里插入图片描述
拓展知识

1、Linux下find命令在目录结构中搜索文件,并执行指定的操作;
2、Linux下find命令提供了相当多的查找条件,功能很强大;但由于find具有强大的功能,所以它的选项也很多,其中大部分选项都值得我们花时间去了解;
3、即使系统中含有网络文件系统( NFS),find命令在该文件系统中同样有效,但是需要具有相应的权限;
4、在运行一个非常消耗资源的find命令时,很多人都倾向于把它放在后台执行,因为遍历一个大的文件系统可能会访问磁盘,从而花费很长的时间 (这里是指30G字节以上的文件系统)。

  • which – 专门用于搜索命令:在这里插入图片描述

  • alias – 对指令进行重命名 (起别名):在这里插入图片描述
    注意:我们这里使用alias为其他指令创建的别名是一种临时效果,即当系统重启后该别名会失效

  • whereis – 在特定的路径下,查找与指定文件名近似匹配的指令或文档:
    在这里插入图片描述

3.23、grep指令

在文件中搜索字符串,将找到的行打印出来;
和find指令一样,grep也是Linux中一条非常强大且被频繁使用的指令,同样,其选项也非常多,这里我们还是只列举其中最基础、最常用的几个

  1. -i:忽略大小写的不同,即将大小写视为相同;
  2. -n:顺便输出行号;
  3. -v :反向选择,即显示出没有 ‘搜寻字符串’ 内容的那一行;
    拓展知识

为了方便下面的演示,除了之前我们使用 “cnt=0; while [ c n t − l e 10000 ] ; d o e c h o " h e l l o w o r l d [ cnt -le 10000 ] ; do echo “hello world [cnt−le10000];doecho"helloworld[cnt]”; let cnt++; done > test .txt” 生成的test.txt文件之外,我们需要再新建一个 file.txt 以及 num.txt 文件:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • grep 相关指令

  • wc – 统计行数:
    grep + wc + 管道 -> 统计符合筛选条件的行数:
    在这里插入图片描述

  • sort – 对文本内容进行排序:在这里插入图片描述

  • uniq – 去除文本中相邻的重复内容:
    在这里插入图片描述
    注:grep、sort、uniq 类似指令是将文本中的内容按照一定的条件进行筛选后显示到终端,并不会改变文本中的内容。

3.24、zip 指令

1、我们为什么要对文件进行打包与压缩?

在我们平时使用Windows的过程中,可能也会遇到需要将文件进行打包的情况;比如我们的综测,我们需要将综测表、各种综测证明材料都放到一起然后压缩提交;

上述例子中,我们将各种分散的文件集中到一个文件夹下的操作叫打包,而将该文件夹压缩的操作叫压缩;打包和压缩是两个不同的概念,但是目前我们不对其做详细区分;

结合上面的两个例子,我们为什么要对文件进行打包与压缩呢?原因有两个:

1、便于传输:互联网中有许多大大小小的文件,将所有文件打包压缩到一个文件中进行传输可以有效避免小文件丢失,从而实现高效传输;
2、便于保存:将所有文件集中到一起便于我们对其进行管理与保存。

将目录或文件压缩成zip格式;

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

注意事项

zip 默认对一个目录进行打包压缩的时候,只会对目录文件进行打包压缩,而不会对目录中的子文件进行打包压缩;所以我们使用 zip 打包压缩目录时需要使用 -r 选项。

在这里插入图片描述

3.25、unzip 指令

zip 将文件进行打包并压缩,unzip 对文件进行解包并解压;
unzip 默认将文件解压到当前路径,如果想要解压到指定路径需要加 -d 选项。

  1. -d:将文件解压到指定目录下;在这里插入图片描述

3.26、tar 指令

将目录或文件压缩成tgz格式;

  1. -c :建立一个压缩文件的参数指令(create 的意思);

  2. -x :解开一个压缩文件的参数指令;

  3. -t :查看 tarfile 里面的文件;

  4. -z :是否同时具有 gzip 的属性?即是否需要用 gzip 压缩?

  5. -j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩?

  6. -v :压缩的过程中显示文件,这个常用,但不建议用在背景执行过程;

  7. -f :使用档名,需要在 f 之后要立即接档名,不要再加参数;

  8. -C : 解压到指定目录;
    拓展知识

1、在使用 tar 时,-f 选项需要放在最后,其余选项,比如 -c -v -z -x 可以随意调换位置;
2、tar 默认也是解压到当前路径,如需要指定到其他路径需要使用 -C 选项;
3、tar 格式的压缩文件支持不解压查看文件,使用 -t 选项即可;

在这里插入图片描述

3.27、bc 指令

bc 命令是任意精度计算器语言,通常在linux下当计算器用;它类似基本的计算器, 使用这个计算器可以做基本的数学运算;输入 quit即可退出 bc:
在这里插入图片描述

3.28、uname 指令

uname用来获取电脑和操作系统的相关信息;同时,uname可显示linux主机所用的操作系统的版本、硬件的名称等基本信息;在这里插入图片描述

3.29、其他的一些指令

  • lscpu – 查看CPU信息:在这里插入图片描述

  • lsmem – 查看内存信息:在这里插入图片描述

  • df -h – 查看磁盘情况:
    在这里插入图片描述

  • who – 查看Linux当前在线用户:在这里插入图片描述

3.30、重要的几个热键

1、[Tab] 按键 – 具有『命令补全』和『档案补齐』的功能:即当我们输入一个命令的一部分,然后按一次 [Tab] (有的电脑需要按两次),Linux就会自动将该命令补全;在这里插入图片描述

2、[Ctrl]-c 按键 – 此热键一般用于两个方面 ,一是终止异常程序,比如死循环程序:在这里插入图片描述

3、[Ctrl]-d 按键 – 退出当前用户 (退出一层),可以用来取代 exit:在这里插入图片描述

4、[Ctrl]-r 按键 – 搜索历史命令,我们输入 Ctrl+r,然后输入关键字系统就会弹出对应的历史指令,我们按 <- -> 即可选中:在这里插入图片描述

3.31、关机

shutdown [选项];

  1. -h:将系统的服务停掉后,立即关机;

  2. -r:在将系统的服务停掉之后就重新启动;

  3. -t second:-t 后面加秒数,即『过几秒后关机』的意思;

4、指令运行的原理

Linux严格意义上来说是一个操作系统,我们称之为 “核心 (kernel)”,即Linux内核;但是由于我们一般人并不善于与 kernel 打交道,所以我们不直接使用 kernel,而是通过 kernel 的 “外壳” 程序,也就是所谓的 shell 来与 kernel 进行沟通;

从技术角度来说,shell 最简单的定义为 “命令行解释器 (command Interpreter)”,其功能主要包括两方面:

  1. 将使用者的命令翻译传递给 kernel 处理;
  2. 将 kernel 的处理结果翻译返回给使用者;

以我们熟悉的 Windows 来说,我们操作 Windows 并不是直接操作 Windows 内核,而是操作 Windows GUI (图形化界面) 提供的接口,比如我们双击运行一个 .exe 程序或者最大化/最小化一个窗口,Windows GUI 会将我们进行的这些操作翻译为 Windows 内核所能理解的指令,然后传递给 Windows 内核进行处理;当 Windows kernel 处理完毕后,GUI 又会将处理结果翻译为我们用户能够看懂的操作,这样我们与 Windows kernel 的交互成本就会被大大降低。

shell 对于 Linux 有同样的作用,主要是对我们的指令进行解析并传递给 Linux kernel,然后再将处理结果解析给用户;

同时,shell 还在变相的保护操作系统 – shell 会对用户传递的指令进行解析,如果它解析到非法指令,那么它就会直接抛出错误,并不会将错误指令传递给 kernel,这样使得 kernel 只用处理合法的指令,一定程度上保护了操作系统。

另外,为了防止用户的非法指令导致 shell 自身崩溃,shell 本身一般都不会去执行对应的指令,而是会派生子进程来执行用户得到指令,关于多进程的知识我们后面再仔细学习;

所以,shell 和 GUI 一样,本质上都是 kernel 外面的一层软件层 (外壳程序),用于连接用户与 kernel。
shell 是 “外壳程序” 的统称,不同 Linux 版本对应的 shell 程序可能不同,其中 bash 是标准的 GNU shell,所以它成为了所有 Linux 发行版上的标准 shell。 现在大多数现代 Linux 发行版都默认提供 Bash shell 。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐