本文最后更新于 2025-02-26,学习久了要注意休息哟

第一章 工具介绍

1.1 虚拟机软件

1.1.1 获取软件

软件位置:\【Linux基础】_06_给学生的资料\00_软件&系统\01_VMware16.0.zip

软件位置:\【Linux基础】_06_给学生的资料\00_软件&系统01_VMware17.0.zip

安装那个都可以,但是如果是安装的16版本,出现了系统不兼容的问题,则可以卸载16安装17版本。

1.1.2 软件安装

资料位置:\【Linux基础】_06_给学生的资料\01_Linux资料\VMware16.0安装教程.pdf

资料位置:\【Linux基础】_06_给学生的资料\01_Linux资料\VMware17.0安装教程.pdf

可以根据我们资料中所提供的pdf文档,进行安装。

1.2 Linux操作系统 - Ubuntu

2.2.1 获取系统

软件位置:\【Linux基础】_06_给学生的资料\00_软件&系统\03_ubuntu1604x64.rar

软件位置:\【Linux基础】_06_给学生的资料\00_软件&系统\04_ubuntu-18.04.1-desktop-amd64.iso

两个都需要进行下载,第一个是我们已经配置好的Linux系统,可以直接使用的,第二个是未进行配置的系统

1.3 Xshell&Xftp

1.3.1 获取软件

软件位置:\【Linux基础】_06_给学生的资料\00_软件&系 统\05_Xshell7.zip

软件位置:\【Linux基础】_06_给学生的资料\00_软件&系统\06_Xftp7.zip

1.3.2 软件介绍 - Xshell

image-20231231105938740

Xshell是一款远程ssh登录Linux的软件,在日常的开发中,我们很多时候是服务器 + 本地主机的方式,也就是说,我们通过本地主机链接到远程服务器上进行开发,不会说直接在服务器机房进行开发,有的时候甚至服务器在北京,我们在长沙进行开发。

image-20231231105810520

我们的Xshell软件就可以实现远程登录的功能,效果如下,当我们配置完成后,就可以看到我们的xshell链接到了Linux系统

image-20231231113003484

1.3.3 软件介绍 - Xftp

image-20231231113135231

xftp是基于ftp协议的远程文件传输协议,当我们在需要进行服务器和本机文件交互的的时候,就可以使用xftp软件,进行远程的软件交互

链接后的效果如下,我们可以随意的进行Linux和windows的文件传输

image-20231231113249996

1.4 VsCode

image-20231231115346357

1.4.1 获取软件

软件位置:\【Linux基础】_06_给学生的资料\00_软件&系统\07_VSCodeUserSetup-x64-1.85.1.exe

软件位置:\【Linux基础】_06_给学生的资料\00_软件&系统\08_code_1.85.1-1702462158_amd64.deb

第一个是windows版本的,第二个是Linux版本的,我们可以只安装Windows版本的

1.4.2 软件介绍

VScode全称是Visual Studio Code,是微软推出的一个跨平台的编辑器,能够在windows、Linux、IOS等平台上运行,通过安装一些插件可以让这个编辑器变成一个编译器。 VSCode支持C++、Python、Java、C#、Go等多种语言,功能强大、插件丰富并且启动速度极快,值得每个开发人员尝试一把!

vscode是我们后续开发的主力ide工具之一,很多的内容都需要使用到vscode

image-20231231115507129

1.5 辅助工具

1.5.1 软件获取

软件位置:\【Linux基础】_06_给学生的资料\00_软件&系统\09_YoudaoDict_dict_web_product.exe

软件位置:\【Linux基础】_06_给学生的资料\00_软件&系统\10_有道云笔记-7.2.161.exe

第一个是翻译用的软件,我们在开发过程中很多使用会需要看英文文档,这个软件可以帮助我们进行截图翻译

第二个软件是笔记软件,我们每天的所学各位都需要进行记笔记,并提交到在线表格中去

第二章 系统配置

2.1 VmWare卸载与安装

2.1.1 软件的卸载

  1. 首先,搜索==控制面板== ,然后更换查看方式 (如果已经是类别,可以不换),点击程序下的卸载程序

image-20250226144110277

  1. 点击进去之后,我们就需要找到要卸载的软件

image-20250226144426120

  1. 点击下一步

image-20250226144626178

  1. 点击删除

image-20250226144917561

  1. 取消其他的项目

image-20250226144931159

  1. 点击删除

image-20250226144944293

2.1.2 软件的安装

  1. 解压软件, 使用16.0和17.0 都可以,新电脑建议使用 17.0

image-20240308092518925

  1. 双击打卡软件安装包

image-20240308092635334

  1. 点击下一步

image-20240308092710820

  1. 点击我接受,点击下一步

image-20240308092736880

  1. 更改安装位置

image-20240308092813955

  1. 取消选择

image-20240308092937540

  1. 点击下一步

image-20240308093001459

  1. 点击安装

image-20240308093025576

  1. 等待安装

image-20240308093111195

  1. 添加许可证(如果现在忘记添加了,也没关系 请看 第 15 步)

image-20240308093350681

  1. 打开许可证- MC60H-DWHD5-H80U9-6V85M-8280D

image-20240308093447756

  1. 输入许可证,点击输入

image-20240308093519587

  1. 点击完成

image-20240308093543717

  1. 少年你获得了力量

image-20240308093631848

  1. 填坑(前面没有注册) , 从菜单栏中的帮助(H)下 点击输入许可证

image-20240308094039817

2.2 系统安装和配置

2.2.1 懒人系统的安装

1 获取系统

资料位置:\【Linux基础】_06_给学生的资料\00_软件&系统\03_ubuntu1604x64.rar

解压密码: jlj

2 系统安装

  1. 打开软件 -> 忘记截图了双击打开就好
  2. 解压03号文件 -> jlj

image-20240308094442692

  1. 粘贴到你进行放置系统的地方 并记住在哪里 D:\IDE_App\Linux_OS

image-20240308094731952

  1. 点击打开虚拟机

image-20240308094830682

  1. 进入到文件夹内部,然后选择一个 .vmx 的文件

image-20240308094956654

  1. 现在已经有了一个系统了

image-20240308095044125

动画

2.2.2 Linux系统安装

系统版本为: ubuntu-16.04.7-desktop-amd64.iso

1、点击【创建新的虚拟机】,选择【典型】,点击【下一步】。

安装Linux01

2、选择【稍后安装操作系统】,点击下一步。

安装Linux02

3、操作系统选择【Linux】,版本选择【ubuntu 64位】,点击【下一步】。

安装Linux03

4、点击【浏览】可更改安装位置(建议不要安装在C盘,可以在D盘或其它磁盘下新建一个“ubuntu”文件夹),点击【下一步】。

安装Linux04

5、磁盘大小选择20G以上,点击【下一步】。

安装Linux05

6、点击【自定义硬件】,点击【内存】,设置为【2048MB】。

安装Linux06

7、选择【新CD/DVD(SATA)】,选择【使用ISO镜像文件】,点击【浏览】。

image-20240308111958555

8、选中【USB控制器】,点击【移除】,然后选中【打印机】,点击【移除】,点击【关闭】。

image-20230723211131111

9、选中【网络适配器】,点击【桥接模式】

安装Linux08

10、点击【完成】。

安装Linux09

11、点击【开启此虚拟机】。

安装Linux10

12、选择【中文(简体)】,点击【安装Ubuntu】。

安装Linux11

13、直接【继续】

安装Linux12

14、点击【现在安装】

安装Linux13

15、点击【继续】。

安装Linux14

16、点击【继续】。

安装Linux15

17、点击【继续】。

安装Linux16

18、输入【姓名、密码】,点击【继续】。

安装Linux17

19、点击【现在重启】。

安装Linux18

然后输入密码登录即可,到这里你的Linux系统安装完成

2.2.3 Linux系统配置

我们很多的设置都是在终端上进行的,所以我们首先需要掌握如何打开终端,通过键盘上的ctrl + Alt + t 就可以唤醒我们的终端界面了。

1 设置系统分辨率

当我们打开系统后,会发现我们的Linux系统显示并不完整,所以我们需要设置一下分别率

# 输入 xrandr查看设备的分辨率
$ xrandr
# 输入 xrandr -s [分辨率]
$ xrandr -s [分辨率]

image-20231231133028933

2 设置root密码

root是我们Linux的超级用户,相当于我们在使用Windows电脑的管理员权限,这个用户权限很大,各位在使用的过程中一定要注意。

# 进入终端,修改密码
$ sudo passwd
# 切换成root 用户
$ su - root
$ su
$ su linux    # 回到linux目录
$ exit        # 回到上一个用户 如果你现在已经是最开始的用户了,则退出终端

image-20231231133231880

3 更换 apt 软件源地址

https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/

Linux是可以通过命令行直接进行软件的下载与安装的,但是由于国内网络的问题,我们需要使用国内的一些镜像源才可以进行顺利的软件安装与下载。

在进行下面的操作之前,建议先把原有的软件源进行一下复制,防止后续操作中出现问题,使用下面这条命令

cp /etc/apt/sources.list /etc/apt/sources_copy.list

① 需要将/etc/apt/sources.list 文件打开并删除内部的内容

$ sudo vim /etc/apt/sources.list

image-20231231135723458

② 清除原有的源

输入 100dd 用于清除所有源

image-20231231140040568

③ 复制源到文件内部

# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
# deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
# deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
# deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
# deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse

点击键盘上的i进入到插入模式,然后拷贝到文件内部

image-20231231145415070

当然也可以使用下面的这个清华大学的源

清华大学源 : ubuntu | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

需要注意的是,在这个网站内选择源需要自己选择一下系统版本一定要对应才行

④ 更新镜像源

$ sudo  apt  update

更新中

image-20231231145702029

更新完成

image-20231231145717004

当然,我这个是更新了一次的,所以这个内容比较短。

2.3 Linux软件安装

更新完成软件源后,我们就可以开始进行软件的安装了,我们很多的软件进行安装都是在终端命令行下进行操作的。

==1 安装ssh服务器==

一般Ubuntu都会默认安装openssh-client,但是没有安装openssh-server。

$ sudo apt install openssh-server

一般来说,安装完成之后就已经启动了,我们可以通过下面的这条指令进行查看

& sudo systemctl status ssh

如何连接ssh服务器

在Windows中 使用 ssh username@ip的方式进行链接到我们的Linux服务器

==2 安装tftp服务器==

3 安装VIM编辑器

$ sudo apr install vim

4 安装sl

第三章 虚拟机的使用

3.1 开关机

开机操作 -> 使用启动客户机

关机操作 -> 使用关闭客户机

重启操作 -> 使用重启客户机

其他功能解释

==挂起客户机 : 当我们暂时不需要使用虚拟机的时候,但是由于每次开关机需要的时间都比较长或者我们不想中断此时的工作,我们就可以使用挂起客户机==

image-20240227143035956

3.2 显示设置

可以通过这些按键来控制我们虚拟系统的显示效果image-20240227143412205

image-20240227143357112

3.3 快照功能

快照功能

用于对系统进行备份,但是如果你的快照过多了对你的磁盘会有压力,这里只是告诉大家,有这么个功能。

image-20240227143533750

3.4 共享文件夹

共享文件夹,是虚拟机和Windows系统存储空间交叉的地方,网络主机不可用

==注意:如果你没有当前文件的权限,则不可创建共享文件==

image-20240308154231065

image-20240228095451585

选择路径

image-20240308154519828

进行选择启用此共享

image-20240308154546450

Linux进入到共享文件夹

$ cd /mnt/hgfs/共享文件夹/

第四章 Linux系统介绍

Linux版本

1.redhat -> redhead 企业版

​ -> Ubuntu 个人版

uname -a        查看内核版本
cat /etc/issue  查看系统版本

4.1 操作系统的基本概念

单片机  - >   核心  1 核  

    只能执行单任务
        例如 你是一个研发人员   ->  你的主管会给你分配好 一周到两周的时间内 需要做什么

i7 12700H   ->   20 核心    
    可以同时处理多个任务
        例如 你是一个老板     管着 30个员工
            当任务量 过大时  老板就招聘一个 管家 或者 秘书 
            管家 或者 秘书   ->  操作系统
            30个员工       ->  硬件

节约时间 合理的利用 计算机强大的硬件资源 
    分配时间片
    分配内存
    分配硬盘
    网络管理
    。。。。

操作系统是 计算机硬件 计算机软件  的计算机程序,它是直接运行在“裸机”上的操作系统,任何其他软件都必须在操作系统的支持下才能运行,换句话说,操作系统是用户和计算机的接口,同是也是计算机硬件和其他软件的接口。操作系统的功能包括管理计算机系统的硬件、软件及数据资源,控制程序运行,改善人机界面,为其他应用提供支持等,使计算机系统所有的资源最大限度的发挥作用。现代操作系统系统了各种形式的用户界面,使得用户可以拥有一个好的工作环境,并且为其他软件的开发提供必要的服务和相应的接口。

操作系统(Operating System, OS)是计算机系统中最基本、最重要的系统软件,它负责管理和控制计算机硬件与软件资源,合理地组织调度计算机的工作和资源的分配,以提供用户nnb和其他软方便、有效的接口和环境。它位于用户与计算机硬件之间,是用户与计算机硬件之间的桥梁。

操作系统

操作系统的基本概念主要包括以下几个方面:

  1. 资源管理:操作系统负责管理计算机的各种资源,如CPU、内存、硬盘、外设等。它对这些资源进行分配和调度,以提高资源的利用率和系统的运行效率。

  2. 任务调度:操作系统负责管理和调度多个任务(程序),确保每个任务都有机会占用CPU和其他资源。它还负责处理任务的并发和同步,确保系统稳定运行。

  3. 提供用户接口:操作系统为用户提供接口,使用户能够方便地访问和使用计算机系统。这些接口可以是命令行接口(CLI)或图形用户界面(GUI)。

  4. 文件管理:操作系统提供文件管理功能,包括文件的创建、删除、读写、保护等。它通过文件系统组织和管理存储在硬盘上的数据。

  5. 设备管理:操作系统负责管理计算机的所有硬件设备。它通过设备驱动程序与硬件设备交互,控制设备的运行,并提供设备的抽象表示。

  6. 安全与保护:操作系统确保计算机系统的安全,保护系统免受未授权访问和破坏。它还负责各种资源的访问控制,防止资源的滥用。

操作系统是计算机系统中最为核心的部分,它通过有效地管理计算机的资源、提供丰富的功能和友好的用户界面,使得用户能够更加高效地利用计算机。

4.2 嵌入式操作系统

  • 特点:专为嵌入式系统设计,通常资源占用小,高效稳定 , 低功耗。
  • 应用场景:用于嵌入式设备,如智能家居、汽车电子、手持设备。
  • 例子:linux, FreeRTOS。

什么是嵌入式工程师 - > 嵌入式为软硬件可裁剪工程

​ 嵌入式软件工程师 -> 设备的驱动程序

​ 定制设备 -> 定制驱动程序

​ 不同的设备 -> 通讯协议不同 去适配不同的设备

​ 嵌入式硬件工程师 -> 根据需求去围绕芯片选择不同的 设备

​ 芯片 和 传感器 的选型

​ pcb设计 通讯 。。。。。。

CUP -> 根据功能 去选择合适的CPU

硬件裁剪 -> 更具特定的任务,去设计不同的PCB电路

软件裁剪 -> 更具特定的任务,去安装或设计不同的驱动

最终目的,做出产品 将硬件设计完善 , 将软件 “移植” 到硬件中去

4.3 嵌入式操作系统的结构


———————————————- 嵌入式操作系统 用户空间 ——————————————–

用户空间: 应用层 开发

​ 命令 脚本(命令的集合) app

———————————————-系统调用 内核空间 ——————————————–

内核空间: 底层 开发

​ 内核也是一个程序,只不过在计算机启动时就运行的程序。

​ Linux内核5大功能

​ 1.进程管理:– 时间片轮转 上下文切换 分式多任务

​ 2.内存管理:– 空间的分配和回收

​ 3.文件管理:– 将磁盘中存储的 0 1 数据进行转换

​ 4.网络管理:– 网络协议栈 TCP UDP HTTP TFTP

​ 5.设备管理:– 通过设备驱动去操作硬件 ==Linux 中一切皆文件==

———————————————- 硬件控制 ———————————————-

硬件空间 硬件工程师

​ led 摄像头 键盘 显示器 硬盘 内存条

———————————————- end ———————————————-


用户空间想操作硬件,需要先进入到内核空间,进入内核空间的方式是通过系统调用

(系统调用就是内核给用户提供访问内核的接口函数)然后通过内核控制硬件

这个机制是为了我们系统的安全性,

第五章 Linux操作系统基本操作

5.1 Linux基本操作

我们在使用Ubuntu系统的时候,不会去使用图形化界面,而是直接使用终端进行命令操作,这个是因为我们的UI是需要系统资源的,很多嵌入式设备的内部资源不多,所以很多时候不会给我们部署UI界面。

5.2.1 打开终端的方式

我们敲命令的地方 -> 终端

image-20240110095811008

方法一:点击左侧任务栏中的终端

方法二:使用快捷键进行打开

ctrl + alt + t 打开一个新终端 固定从家目录打开

ctrl + shift + n 打开一个同路径的终端

ctrl + shift + t 打开一个同路径的终端,并且会有一个到导航栏

5.2.2 终端的操作

字体大小控制

通过 配置文件首选项

image-20240308165530724

配置文件大小以及终端初始大小

image-20240308165639436

ctrl shift ‘+’ 进行放大终端

ctrl ‘-’ 进行缩小终端

复制粘贴操作 从Linux复制到Windows 中

==ctrl shift c 进行复制==

==ctrl shift v 进行粘贴==

5.2 shell命令

C语言 <==> printf

shell <==> ls

5.2.1 认识shell

==linux 下的命令==

随着各种Linux系统的图形化程度不断提高,用户在桌面环境下,通过点击、拖拽等操作可以完成大部分的操作。然而,许多的Ubuntu Linux功能使用shell命令来实现,通常比使用图形化交互完成得更快、更直接。下面,我们来详细介绍一下shell。

Shell,直译为“贝壳”,在操作系统中,它起着==内核==的外层保护工具的角色,==并负责完成用户与内核之间的交互==。

在理解shell之前,我们需要先明确以下三个核心概念:

  1. 命令:命令是用户向系统内核发送控制请求的文本流。也就是说,当你在命令行中键入一行文字并按下回车键时,你实际上是在给系统发送一个命令,告诉它你希望它执行什么操作。

  2. Shell:Shell是一个命令行解释器,将用户的命令解析为操作系统所能理解的指令。也就是说,当你键入一个命令时,Shell会接收这个命令,解析它,然后将其转化为内核可以理解的指令。

  3. Shell脚本:命令的集合 。

    ==命令-> ls 命令在Linux中是称之为shell,由多个shell命令组成,我们称之为shell脚本==

以下是用户、Shell和内核之间交互的简化视图:

  1. 用户在命令行提示符下键入命令文本,开始与Shell进行交互。
  2. dShell将用户的命令或按键转化成内核所能理解的指令。
  3. 操作系统接收到这些指令后,进行相应的处理,如控制相关硬件设备等。
  4. 最后,Shell将操作的结果返回给用户,用户通过Shell看到命令的执行结果。

总的来说,Shell在操作系统中起着非常重要的作用,它既是==用户与内核交互的桥梁==,也是一种强大的==编程工具==。

image-20240308171722448

5.2.2 shell命令提示符

(1) Shell命令提示符标识了命令行的开始。用户在提示符后面输入一条命令,然后按【回车】,完成向系统提交指令。Shell提示符的一般格式如下:

// 命令提示符
student @   student-machine :   ~               $
root    @   student-machine :   /home/student   # 
用户名       用户组   主机名       当前路径          身份
111111111

用户名
用户组
主机名

当前路径 
    ~                   家目录
    /home/student       

超级用户    root
安卓就是基于 -> Linux开发
普通用户    student


路径
E:\【04工作文件】华清远见\【第1阶段】_01_Linux基础\【Linux基础】_01_备课教案
/home/student

/   跟目录

// 绝对路径 和 相对路径
绝对路径
    从跟目录开始 我们称为绝对路径
相对路径
    从当前目录开始 
```shell
bin    dev   initrd.img      lib64       mnt   root  snap  tmp  vmlinuz
boot   etc   initrd.img.old  lost+found  opt   run   srv   usr  vmlinuz.old
cdrom  home  lib             media       proc  sbin  sys   var


bin  命令
lib  程序库
mnt  外部挂载   
home 普通用户文件存放
dev  设备
root 超级用户
sbin 超级用户命令
lost+found  回收站

例如:

student@student-machine:~$

其中,

  • student : 用户名,显示当前登录用户的账户名。
  • student-machine : 主机名。例如远程登录后,则显示登录的主机名。
  • ~$ : 目录名,显示当前路径。在根目录下的时候显示为”/“,当在用户主目录下的时候显示为“~”。

(2) ~$不仅仅是目录名,还代表了提示符的结尾和用户类型。$表示你是普通用户,而#表示你是超级用户(root用户)。例如,如果你以root用户身份登录,你可能会看到类似以下的提示符:

root@hostname:~#

这意味着你现在是root用户,有权限执行可能会影响系统的命令。

(3) 关于目录的部分,~的确代表用户的主目录,也就是/home/。这是Linux中的一种简化表达方式,方便用户快速访问自己的主目录。例如,你可以使用cd ~命令快速返回到你的主目录,无论你当前在文件系统的哪个位置。

(4) 你在命令行中看到的路径通常是相对于你当前目录的路径。如果路径以/开头,那就是绝对路径,表示从根目录开始的完整路径。如果没有以/开头,那就是相对路径,表示从当前目录开始的路径。

5.2.3 命令格式

Linux shell命令一般由三部分组成:命令名称、选项和参数,其中只有命名名称是必须的,选项和参数是可选的。命令的格式一般如下:

student@student-machine:~$  ls -a ../123/
命令标识符                   选项(扩展选项)    参数(操作对象)
ls          -a              ../123/

命令提示符
student@student-machine:    ~       $ 
用户名 @   用户组       :  当前路径   用户身份

~ :  当前用户家目录
$ : 普通用户
# :  root 超用户

命令
ls          -a              ../123/
命令          选项          参数
命令是一定要写的   选项 和 参数是不一定要写的
选项  : 是命令的扩展操作
参数  :  是命令的操作对象

文件名前面 加 .  则为 隐藏文件  例如  .add

让我们来详细解析这个格式:

  1. $:这是 Shell 的提示符,如果当前用户是超级用户(root),提示符会变为 #,否则一般为 $
  2. 命令名称:这是要执行的命令或程序名称。在 Linux 系统中,命令名称是区分大小写的。
  3. -选项:选项可以修改命令的行为。一条命令可以带有多个选项,每个选项通常由一个短横线 - 引导。有些选项还可以接受一个参数。
  4. 参数:参数是命令要操作的对象。有些命令可以接受多个参数,参数之间用空格隔开。

例如,ls -l /桌面 这条命令,ls 是命令名称,表示列出目录内容,-l 是选项,表示以长格式列出文件信息,/桌面 是参数,表示要列出的目录。

注意:

  • 命令的各部分之间用空格隔开。
  • 如果要在一行中写多条命令,可以用分号 ; 隔开。
  • 如果一条命令太长,不能在一行中写完,可以在行尾使用反斜杠 \,表示命令将在下一行继续。

一般来说,正确使用选项和参数可以大大提高命令的灵活性和效率。

student @   student-machine :   ~       $ 
用户名        用户组  主机名      当前路径   身份识别
~ ->   代表家目录
$ ->   普通用户

root@student-machine:/home/student#
/home   /student 当前路径
# ->    超级用户

第六章 Linux基础命令

6.1 目录的相关操作

6.1.1 帮助文档 man

命令格式 man [参数]

参数为命令名称

man 1 命令

man 2 系统调用

man 3 库函数

退出使用 q

6.1.2 ls:列出文件

  • (1)作用:列出当前目录内有那些文件
  • (2)格式:ls [选项] [参数]

其中选项包括多种,可用于改变命令的行为或提供额外的信息。文件为要列出的文件或目录,可指定一个或多个。

  • (3)使用示例
student@student-machine:~$ ls /home/student
Desktop Documents Downloads Music Pictures Public Templates Videos
  • (4)常用选项

​ -a 列出目录中所有文件,包括隐藏文件(以.开头的文件)

​ -l 使用长列表格式显示文件,包括文件类型、权限、链接数、所有者、群组、大小、最近修改时间

​ -h 与 -l 选项一起使用时,以易读的方式显示文件大小

​ -r 反向排序

​ -t 按修改时间排序

​ -R 递归列出子目录中的文件

练习

​ 使用ls 来查看根目录的文件 以及隐藏文件

​ 是用ls 来查看根目录的详细信息 以及隐藏文件

​ 使用ls 来递归显示你家目录的所用文件 以及隐藏文件

6.1.3 cd :切换目录

  • 作用cd 命令用于改变当前工作目录。
  • 格式cd [参数]

参数 参数为目标工作目录,可以是绝对路径或相对路径。

当你使用 cd 不带参数的时候,跳转到家目录

绝对路径:从 根目录 开始 /

相对路径:从 当前文件路径 开始

student@student-machine:~/linux$ cd 
student@student-machine:~$ cd /home/student/linux/
student@student-machine:~/linux$ 
cd              回到家目录
cd ~            回到家目录
~ == home/student
cd ./           本目录
cd ../          上一级目录
cd ../123/      上一级目录下的 123 文件夹


关于命令的补全  tab
    写前面的一部分  然后 按下 tab 键 就可以补去命令

# 回到家目录
cd

# 进入到家目录中的图片
cd 图片/
cd ~/图片/

# 在图片 去 文档
cd ../文档/

# 去根目录下的lib
方式一
student@student-machine:~/文档$ cd ../../../lib
方式二
student@student-machine:~/文档$ cd /lib
  • 使用示例
$ cd /home/student
$ pwd
/home/student

cd 命令会根据指定的路径切换工作目录。如果没有指定路径,则默认回到当前用户的主目录(即家目录,例如 /home/student)。

要切换到指定目录,用户必须对目标目录有执行(x)和读(r)权限,否则 cd 命令会返回错误信息。

cd 命令可以接受绝对路径和相对路径作为参数。绝对路径从根目录 (/) 开始,而相对路径则是相对于当前工作目录。

如果路径名中含有空格,可以将整个路径名用双引号或单引号括起来,或使用反斜线 (\) 来转义空格。例如:cd "My Documents"cd My\ Documents

6.1.4 pwd、whoami

  • 作用pwd 命令用于打印当前工作目录的完整路径。 whoami打印当前用户
  • 格式pwdwhoami
  • 使用示例
student@student-machine:~/01_hqyj$ pwd
/home/student

此示例中,pwd 命令显示当前工作目录为 /home/student

student@student-machine:~/01_hqyj$ whoami 
student

此示例中,whoami 命令显示当前工作用户为 student

  • 使用说明

pwd 命令会显示出当前工作目录的完整路径。由于在 Linux 中,我们可以通过相对路径和绝对路径来操作文件,所以 pwd 命令对于了解当前所在位置以及操作文件是非常有用的。

6.1.5 mkdir: 创建目录

  • 作用mkdir 命令用于创建新的目录。
  • 格式mkdir [选项] 参数

directory 参数指定要创建的新目录的名称。

常用的 option 包括:

- `-p`:创建目录的同时,如果必要,也会创建父目录。

mkdir HQYJ                      创建一个文件夹
mkdir -p HQYJ/day01/001/001     创建多个 如果父目录不存在则创建

使用示例

$ mkdir my_directory
  • 使用说明

mkdir 命令允许用户创建新的目录。用户必须对新目录的父目录有写权限,否则 mkdir 命令会返回错误信息。

如果指定的目录已存在,mkdir 命令默认不会进行任何操作。如果你希望在这种情况下也创建新目录,可以使用 -p 选项。

6.1.6 rmdir: 删除空目录

  • 作用rmdir 命令用于删除空的目录。
  • 格式rmdir [option] directory

directory 参数指定要删除的目录。

  • 使用示例
$ rmdir HQYJ
# 只能删除空文件夹

此示例中,我们删除了名为 my_directory 的目录。

  • 使用说明

rmdir 命令用于删除目录,但要注意,只有当目录为空时,才能成功删除。如果目录中包含任何文件或子目录,rmdir 命令会返回错误信息。

为了使用 rmdir 命令删除目录,用户必须对目标目录的父目录有写权限。

3.2 文件的相关操作

6.2.1 cp 复制文件或目录

  • (1)作用:复制文件或目录
  • (2)格式:cp [选项] 源文件 目标路径
  • (3)常用选项:
    • -i:覆盖前先询问用户
    • -r-R:复制目录及目录内的所有项目
    • -v:显示操作的过程
  • (4)使用示例:
student@student-machine:~$ cp file1 file2

这个命令将会把file1复制为file2。如果file2已经存在,这个命令将会覆盖file2

复制目录:

student@student-machine:~$ cp -r dir1 dir2

这个命令将会把dir1以及dir1中的所有内容复制到dir2中。如果dir2不存在,这个命令将会创建dir2,然后复制dir1中的所有内容到dir2中。

  • (5)使用说明:
    • cp 命令可以用来复制文件或目录。你需要提供源文件(或目录)和目标文件(或目录)。
    • 使用 -i 选项可以在覆盖文件之前询问用户,使用 -r-R 选项可以复制目录及目录内的所有项目,使用 -v 选项可以显示操作的过程。
    • 如果目标文件已经存在,cp 命令将会覆盖它。如果你不想覆盖已经存在的文件,你可以使用 -n 选项。这个选项将会防止 cp 命令覆盖已经存在的文件。如果源文件和目标文件是同一个文件,cp 命令将会返回一个错误信息,但不会修改这个文件。
写命令的快捷操作
tab     补全   既可以补全命令 也可以补全 文件名
↑键      上一条 命令
↓键      下一条 命令

# 回到主目录
cd
# 查看文件
ls
ls -l
ls -lh
ls -a
ls -lha
# 查看当前路径和用户名
pwd
whoami

# 创建文件夹
mkdir HQYJ
mkdir HQYJ/DAY01
mkdir -p HQYJ/DAY02/001

# 删除空文件夹
rmdir HQYJ/DAY02/001
rmdir HQYJ/DAY02
rmdir HQYJ/DAY01
rmdir HQYJ

# 复制文件
    # 创建空文件
touch main.c
mkdir linux_01
cp main.c linux_01/

mkdir HQYJ
cp -r linux_01/ HQYJ

cp -r #用于复制目录
cp -v #用于显示操作过程
cp -i #交互  是否覆盖

6.2.2 mv 移动 \ 重命名文件或目录

  • (1)作用:移动文件或目录,或者重命名文件或目录

  • (2)格式:mv [选项] 源文件 目标目录

    • 源文件 : 需要移动的对象
    • 目标目录 : 需要移动的路径
  • (3)常用选项:

    • -f : 强制移动(删除),忽略不存在的文件,并且不会提示确认
    • -i : 进行交互式删除,系统会在删除每一个文件之前都要求用户确认
  • (4)使用示例:

移动文件:

student@student-machine:~$ mv file1 dir1

这个命令将会把file1移动到dir1目录下。如果dir1目录下已经存在名为file1的文件,这个命令将会覆盖那个文件。

重命名文件:

student@student-machine:~$ mv file1 file2

这个命令将会删除dir1目录及其内部的所有文件和子目录。

  • (5)使用说明:
    • rm 命令可以用来删除文件或目录。你需要提供要删除的文件或目录的名称。
    • 使用 -i 选项可以在删除文件或目录之前询问用户,使用 -r-R 选项可以递归删除目录及其内容,使用 -v 选项可以显示操作的过程。
    • 注意,删除文件或目录是不可逆的。一旦你删除了一个文件或目录,你将无法恢复它。所以,你应该在删除文件或目录之前确保你不再需要它们。
    • 如果你试图删除一个目录,但没有使用 -r-R 选项,rm 命令将会返回一个错误信息,并且不会删除这个目录。
student@student-machine:~$ mkdir HQYJ
student@student-machine:~$ mkdir linux
student@student-machine:~$ mv HQYJ aaaa
student@student-machine:~$ mv aaaa/ linux/
student@student-machine:~$ cd linux/
student@student-machine:~$ rmdir aaaa

6.2.3 rm:删除文件和目录

  • 作用:删除文件或目录
  • 格式:rm [选项] 文件名
  • 常用选项:
    • -i:交互模式,在删除前询问用户是否操作
    • -f:强制删除,忽略不存在的文件,无需提示
    • -r-R:递归删除,用于删除目录及其内容
  • 使用示例:
# 删除文件     rm  文件名
student@student-machine:~$ rm file.txt

student@student-machine:~$ rm -i 001.txt 
rm:是否删除普通空文件 '001.txt'? y

# 删除文件夹     rm -r
student@student-machine:~$ rm file.txt
student@student-machine:~$ rm -rf linux_教案/


两个通配符
    *  匹配任意字符 任意数量
    ? 匹配任意字符 一个字符

使用说明:

  • rm 命令会直接删除文件或目录,不会将其移动到回收站。因此,你需要小心使用这个命令,避免删除重要的文件或目录。
  • rm -r 命令可以删除目录及其内容。如果你试图使用 rm 命令删除一个目录,会收到一个错误,提示你无法删除目录。
  • rm -f 命令会忽略不存在的文件,并且不会提示。
  • rm -i 命令在删除每个文件前都会询问你,这可以防止你误删文件。

[!WARNING]

注意:严谨使用 sudo rm -rf /* ==删库跑路==

6.2.4 ln 创建链接

  • 作用:创建文件或目录的链接
  • 格式:ln[选项] 源文件名或目录名 链接名
  • 常用选项:
    • -s:创建软连接(符号连接)
    • -f:强制执行,如果链接文件存在,则删除也存在的文件,然后再创建
    • -v :显示指令的详细执行过程
  • 使用实例
student@student-machine:~$ ln -s file1.txt link1

在这个示例中,创建一个名为link1的软链接,该链接指向file1.txt

student@student-machine:~$ ln -sf file2.txt link1

在这个示例中,创建一个名为link1的软链接,该链接指向file2.txt。由于使用了-f选项,所以如果link1已经存在,则会被删除,然后再创建新的链接。

  • (5)使用说明

ln命令用于创建文件或目录的链接。默认情况下,ln命令创建的是硬链接。如果要创建软链接(也叫符号链接),必须指定-s选项。

==硬链接== 是源文件的一个别名,它和源文件指向同一个文件系统中的数据。硬链接不能跨文件系统,也==不能链接到目录==。

==软链接== 是一个特殊的文件,它包含了源文件或目录的路径。软链接可以跨文件系统,也可以==链接到目录==。

如果路径名中含有空格,你需要将整个路径名用引号括起来,或者使用反斜杠\来转义空格。例如:ln -s "My Documents" link1ln -s My\ Documents link1.

链接
    链接文件 当源文件改变时 链接文件 
硬链接  -> 将硬盘中原本的存储空间 另外起了一个名字 删除源文件,对硬链接没啥影响    
软链接  -> 存储了 源文件的路径
# 硬链接文件 
student@student-machine:~$ touch 001.txt
student@student-machine:~$ cat > 001.txt
通过键盘写入  一定要最少一个回车  使用ctrl + c退出
student@student-machine:~$ ln 001.txt 002.txt
    # 硬链接的操作
student@student-machine:~$ cat 002.txt
student@student-machine:~$ cat > 002.txt
# 软连接的操作
student@student-machine:~$ ln -s 001.txt 003.txt
student@student-machine:~$ cat 002.txt
student@student-machine:~$ cat > 002.txt

6.3 文件查看相关命令

6.3.1 cat:查看文件内容

  • 作用:连接文件并打印到标准输出设备上,常用来查看文件内容
  • 格式:cat [选项] 文件名
  • 常用选项:
    • -n:显示行号
  • 使用示例:
$ cat file.txt  # 查看 file.txt 文件内容
$ cat > file.txt
$ cat -n file.txt  # 查看 file.txt 文件内容并显示行号
$ cat -b file.txt  # 查看 file.txt 文件内容并对非空输出行编号
$ cat file1 > file2     #清空写
$ cat file3 >> file2    #追加写

覆盖重定向 cat file1 > file2 将file2中的内容,全部替换为file1

追加重定向 cat file1 » file2 在file2的后面添加上file1 的内容

# 清空写   
    # 从键盘写入
student@student-machine:~$ cat > 001.c

# 追加写
    # 从键盘写入
student@student-machine:~$ cat >> 002.c

# 查看文件
student@student-machine:~$ cat 002.c
student@student-machine:~$ cat -n 002.c
student@student-machine:~$ cat -b 002.c

# 从文件写入
# 清空写   
student@student-machine:~$ cat 002.c > 001.c

# 追加写
student@student-machine:~$ cat 001.c >> 002.c

使用说明:

  • cat 命令用于查看短小的文本文件,如果文件内容很多,内容会快速滚动,这时可以考虑使用 moreless 命令进行分页查看。
  • cat -n 命令可以在每行前面显示行号,有利于分析文件内容。
  • cat -b 命令也可以在每行前面显示行号,但是它会忽略空白行。

6.3.2 touch :创建空文件

  • 作用:用于创建文件夹,当该文件已有的时候,则更新其时间戳
  • 格式touch 文件名
  • 常用选项
  • 使用示例
$ touch 文件名

6.3.3 head:查看文件开始部分

  • 作用head 命令用于输出文件的开头部分内容,默认显示前10行。
  • 格式head [选项] [文件名]
  • 常用选项
    • -n:显示文件的前 n 行。
  • 使用示例
$ head file.txt  # 显示 file.txt 文件的前10行
$ head -n 20 file.txt  # 显示 file.txt 文件的前20行

使用说明

  • head 命令主要用于查看文件的前 n 行内容,它和 tail 命令相对应,tail 命令用于查看文件的末尾内容。
  • 如果需要查看文件的整体内容,可以考虑使用 catmoreless 命令。

6.3.4 tail:查看尾部

  • 作用tail 查看文件尾部,默认显示前10行。
  • 格式tail[选项] [文件名]
  • 常用选项
    • -n:显示文件的前 n 行。
  • 使用示例
$ tail file.txt  # 显示 file.txt 文件的前10行
$ tail -n 20 file.txt  # 显示 file.txt 文件的前20行

6.3.5 more:分页查看文件内容

不常用

  • 作用more 命令用于分页显示文件的内容,适合查看较大的文件。
  • 格式more [选项] [文件名]
  • 常用选项
    • -n:定义屏幕大小为 n 行。
  • 使用示例
$ more file.txt  # 使用分页方式查看 file.txt 文件内容
$ more -20 file.txt  # 设置屏幕大小为20行,然后查看 file.txt 文件内容

使用说明

  • more 命令主要用于分页查看大文件内容,按 Space 键可以翻页,按 Enter 键可以向下翻一行,按 b 键可以回到上一页。
  • more 命令只能向下翻页,不能向上翻页。如果需要向上翻页,可以考虑使用 less 命令。
  • more 命令在查看内容时,可以使用 /字符串 的方式进行搜索。

6.3.6 file:确定文件类型

  • 作用file 命令用于判断给定的文件的类型。

  • 格式file [选项] 文件名

  • 常用选项

    • -b:仅输出文件详细信息,不显示文件名。
    • -i:输出MIME类型。
  • 使用示例

    $ file test.txt  # 检查文件 test.txt 的类型
    $ file -b test.txt  # 仅输出文件详细信息,不显示文件名
    $ file -i test.txt  # 输出文件的MIME类型
    
  • 使用说明

    • file 命令对文件进行各种测试,例如检查文件的文本编码,检查文件是否是空文件,检查文件是否是二进制文件,等等。
    • file 命令对于确定文件的类型是非常有用的,特别是在处理大量未知文件的时候。
    • 使用 -b 选项,可以让 file 命令只输出文件信息,不输出文件名。这在编写脚本时可能会很有用。
    • 使用 -i 选项,可以让 file 命令输出文件的MIME类型。MIME类型是一种文件类型标识,常用于网页和电子邮件中。

6.3.7 grep:搜索文本 查找

  • 作用:搜索文件中包含指定字符串的文本行
  • 格式:grep [选项] 搜索字符串 文件名
  • 常用选项:
    • -i:忽略大小写
    • -v:显示不包含搜索字符串的所有行(相当于取反)
    • -r-R:递归搜索子目录下所有文件
    • -l:只列出包含搜索字符串的文件名,不显示匹配的文本行
    • -n:显示匹配行及行号
    • -c:只输出匹配行的计数
  • 使用示例:
$ grep "hello" file.txt  # 在 file.txt 文件中搜索 "hello"
$ grep -i "hello" file.txt  # 在 file.txt 文件中搜索 "hello",忽略大小写
$ grep -v "hello" file.txt  # 在 file.txt 文件中搜索不包含 "hello" 的所有行
$ grep -r "hello" /home/user  # 在 /home/user 目录及其子目录中递归搜索 "hello"
$ grep -l "hello" file1.txt file2.txt  # 在多个文件中搜索 "hello",只列出包含 "hello" 的文件名
$ grep -n "hello" file.txt  # 在 file.txt 文件中搜索 "hello",显示匹配行及行号
$ grep -c "hello" file.txt  # 在 file.txt 文件中搜索 "hello",只输出匹配行的计数
```sh
grep "hello" file.txt

使用说明:

  • grep 命令是一个强大的文本搜索工具,它可以使用正则表达式进行搜索。
  • grep -i 命令可以忽略大小写进行搜索,这在处理大小写不一致的文本文件时非常有用。
  • grep -v 命令可以取反搜索,即搜索不包含指定字符串的所有行。
  • grep -r 命令可以递归搜索目录及其子目录中的所有文件。
  • grep -l 命令可以只列出包含搜索字符串的文件名,而不显示匹配的文本行,这在处理大量文件时可以减少输出的数量。
  • grep -n 命令可以显示匹配行及行号,有利于分析文件内容。
  • grep -c 命令可以只输出匹配行的计数,这在统计匹配行的数量时非常有用。

6.3.8 find:搜索文件

  • 作用:在目录树中搜索文件
  • 格式:find [搜索路径] [选项] [表达式]
  • 常用选项:
    • -name:按照文件名搜索
    • -iname:按照文件名搜索,忽略大小写
    • -type:按照类型搜索(例如 f 代表普通文件,d 代表目录)
    • -size:按照大小搜索 需要增加上单位
    • -mtime:按照修改时间搜索
    • -user:按照文件的属主搜索
  • 使用示例:
$ find . -name "*.txt"  # 在当前目录及其子目录中搜索所有 .txt 文件
$ find . -size +1M  # 在当前目录及其子目录中搜索所有大小大于 1M 的文件
                +1000  大于1000 字节 的文件
                -1000  小于1000 字节 的文件
                1000    等于1000 字节 的文件
find ./ -size +100 and -1000
  • 使用说明:

    • 1find 命令可以在目录树中搜索文件,它可以按照各种条件进行搜索,如文件名、文件类型、文件大小、修改时间、文件的属主等。
  • find 命令的搜索路径可以是任何目录,. 代表当前目录,/ 代表根目录。

    • find 命令的搜索结果会包括搜索路径下的所有子目录中的文件。
  • find 命令可以使用 -exec 选项将搜索结果传递给其他命令进行处理,这在处理大量文件时非常有用。

6.3.8 tree :树形结构显示文件和目录

  1. 命令名称和作用

    • 命令名称: tree
    • 作用: 以树形结构显示文件和目录的层次关系。
  2. 格式

    • 格式: tree [选项] [目录]
  3. 常用选项

    • -a:列出所有文件和目录,包括隐藏文件。
    • -L <level>:指定显示的最大深度。
    • -d:只显示目录,而不显示文件。
    • -f:在输出中显示完整路径。
    • -i:不显示树枝图形符号。
    • -o <file>:将输出重定向到指定文件。
  4. 使用示例

    $ tree  # 显示当前目录下的文件和子目录
    $ tree -L 2 -a /path/to/directory  # 显示指定目录下的文件和子目录,最多显示两层的深度,并包括隐藏文件
    
  5. 使用说明

    • tree命令对文件和目录进行递归显示,以树形结构展示其层次关系。
    • 通过选项控制显示的深度和内容,适用于查看目录结构、确认文件和目录的存在等操作。

6.3.9 cmp 文件比较命令

作用:

cmp 命令用于比较两个文件的内容,查找它们之间的差异。

==如果没有差异,则不会输出==

格式:

cmp [选项] 文件1 文件2

常用选项:

  • -b:显示不同之处的字节偏移。
  • -l:显示所有不同之处的字节偏移及其十六进制值。
  • -s:安静模式,不产生任何输出。

使用示例:

$ cmp file1.txt file2.txt  # 比较文件 file1.txt 和 file2.txt 的内容
$ cmp -b file1.txt file2.txt  # 显示不同之处的字节偏移
$ cmp -l file1.txt file2.txt  # 显示所有不同之处的字节偏移及其十六进制值
$ cmp -s file1.txt file2.txt  # 安静模式,不产生任何输出

使用说明:

  • cmp 命令比较两个文件的内容。如果文件相同,则不输出任何内容;如果文件不同,则输出第一个不同之处的字节偏移和十六进制值。
  • 使用 -b 选项可以显示不同之处的字节偏移,方便用户定位差异。
  • 使用 -l 选项可以显示所有不同之处的字节偏移及其十六进制值,更详细地展示文件之间的差异。
  • 使用 -s 选项可以安静模式运行,不产生任何输出,适用于在脚本中进行文件比较并根据结果执行不同的操作。

cmp 命令对于确定两个文件是否完全相同以及定位它们之间的差异非常有用。它在文件内容比较和校验的场景中被广泛使用。

命令练习 :

  1. 创建文件夹 创建多层 linux/hqyj/day01 和 linux/hqyj/day02
  2. 创建文件 通过touch 创建文件
  3. 创建文件 将一个打印hello 的 C语言程序 使用gcc 编译
  4. 移动文件 将写好和创建好的文件,移动到 共享文件夹内
  5. 复制文件 复制文件到共享文件夹 并进行交互
  6. 链接文件 对你生成的 a.out 文件进链接 -> test 软链接硬链接都需要
  7. 查找文件 通过 查找字符 main
  8. 查找文件 通过 文件名称查找 需要查找到 cd命令所在地
  9. 命令操作 操作 cat touch pwd whoami more head
  10. 删除文件 一个命令直接删除上面操作的所有文件, 记得删除前要先备份到共享文件夹内