【Linux驱动】Ubuntu基础 上篇

一,Ubuntu和Window的区别

Ubuntu和Window的最大区别:目录
注意:目录就是文件夹。
Windows 中每一个分区都对应一个盘符,盘符下可以存放目录与文件,如图所示:

Windows 下某个文件的绝对路径以盘符开始,比如:

C:\abc\def\hello.txt
这是在 C 盘的 abc 目录下,有 def 子目录;而 def 中有 hello.txt 文件。
Ubuntu 中,以树状结构表示文件夹与文件,没有盘符的概念。比如:

注意Windows下的是以\的,Ubuntu下的是以/的。
/abc/def/hello.txt
这表示在根目录下有 abc 子目录,而 abc 下又有 def 目录;def 中有 hello.txt 文件。从名
字"/abc/def/hello.txt"中你无法知道 hello.txt 文件位于磁盘哪一个分区。

Ubuntu 中的目录遵循 FHS 标准 (Filesystem Hierarchy Standard,文件系统层次标准)。它定义了文件系统中目录、文件分类存放的原则、定义了系统运行所需的最小文件、目录的集合,并列举了不遵循这些原则的例外情况及其原因。FHS 并不是一个强制的标准,但是大多的 Linux、Unix 发行版本遵循 FHS。

FHS标准图
这里对于常见的几个目录进行说明

  1. /根目录下的bin目录 表示的是APP目录,存放所有用户都能执行的、最基础的系统命令 ,这些命令是系统启动、修复及单用户模式下必需的核心指令,和系统开机流程强相关
    典型命令:比如 ls(查看目录)、cp(复制文件)、mv(移动 / 重命名)、cat(查看文件内容)等,是维持系统最基础操作的工具,即使系统仅挂载根分区时也能正常使用

  2. user下的bin目录 存放绝大部分普通用户日常使用的应用程序和命令,这些命令和系统开机启动无关,是系统正常运行后,供用户完成各类业务操作的工具

  3. 根目录lib系统核心库目录 ,存放系统启动、修复及 /bin 等核心命令运行时必需的共享库文件。

典型场景:比如 /bin/ls/bin/cp 等基础命令,依赖 /lib 里的 libc.so(C 标准库)、libm.s(数学库)等核心库,单用户模式下也必须能访问这些库来维持系统基础功能。

  1. user下的bin目录 存放的这是用户层应用的依赖库目录 ,存放 /usr/bin 等用户日常命令、第三方应用程序运行时需要的共享库和静态库。典型场景:比如文本编辑器 vim、Python 解释器等程序的依赖库,以及开发时需要链接的库文件,都在这里。

  2. sbin目录 核心定位 :存放系统启动、修复和运行必需的核心管理命令 ,是系统在单用户模式下也能访问的关键工具集。典型命令:fdisk(磁盘分区)、ifconfig(旧版网络配置)、init(系统初始化)、reboot(重启系统)等。

  3. boot目录 启动文件,定位为启动核心目录

对于proc和sys目录,则需要讲述另外一个知识点:分区

二,Linux的分区

现在Ubuntu中找到对应的磁盘分区




对于Device dev/sda1

这里的sd表示的是磁盘,a表示的是第一个磁盘,1表示的是第一个分区

这里还要引用一个挂载的概念,就类似于Windows中的磁盘分区一样

第一个图的有Ext4 (version 1.0) --- Mounted at Filesystem Root

这个表示的是挂载根目录下,如果以后要是在cmd里面输入了/这个,这个就会去第一个磁盘的第一个分区里面找,找这个文件是否在这里

第二图的有Ext4 (version 1.0) --- Mounted at /boot

这个表示挂载在/boot下面,也就是说以后要是出现/boot,不会去第一个磁盘的第一个分区去找了,而是到第一个磁盘的第二个分区去找

Swap 分区(交换分区) 是 Linux 系统里的一块专用磁盘空间,你可以把它理解为物理内存(RAM)的 "应急扩展区"。

核心作用
1. 内存过载时的缓冲 当物理内存被占满时,系统会把暂时不活跃的内存数据 "挪" 到 Swap 分区里,释放出内存空间给更急需的程序,避免程序直接崩溃或系统宕机。
2. 支持系统休眠 如果你的 Linux 系统开启了休眠功能,休眠时会把当前内存里的所有数据完整写入 Swap 分区,下次开机时再从这里恢复到内存,实现断点续用。
3. 应急保障它是一种 "兜底机制",但因为 Swap 是磁盘存储,速度远慢于物理内存,所以频繁使用 Swap 会导致系统明显卡顿,这通常是内存不足的信号。

挂载会出现的问题

复制代码
/dev/sda1: /home/1.txt
/dev/sda4: /home

这个时候一旦下面的挂载成功,那么上面的就会直接不可见,每次访问/home的时候都是访问一个磁盘的第四个分区

三,shell命令解析和PATH环境变量

Shell 的意思是"外壳",在 Linux 中它是一个程序,比如/bin/sh、 /bin/bash 等。它负责接收用户的输入,根据用户的输入找到其他程序并运行。 比如我们输入"ls"并回车时,shell 程序找到"ls"程序并运行,把结果打印出来。
Shell 有很多种实现,我们常用 bash。

shell是什么

shell就是一个应用程序,我们可以通过键盘、串口给它发送命令,回车后它就会去执行这些命令。以"ls -l"命令为例:
接收键盘数据并回显,比如:我们使用键盘给shell程序发送字母l,它收到后会在屏幕上显示出来
解析输入的字符串,寻找程序,执行程序:当我们使用键盘给shell程序发送回车时,它就知道字符输入结束了
a. shell会解析字符串,这些字符串用空格分为好几部分,第1部分就是程序名、命令名,其他部分是参数。
b. shell会去寻找该程序,去哪里找?去PATH环境变量所指示的位置找。你当然也可以指定绝对、相对路径,shell就会直接去这些路径找到程序
c. 找到程序后,会启动该程序,并传入参数。

如果PATH路径中没有hello文件的路径,那么就会报错,如下

复制代码
book@100ask:~$ cd Desktop
book@100ask:~/Desktop$ hello

Command 'hello' not found, but can be installed with:

snap install hello              # version 2.10, or
apt  install hello            
apt  install hello-traditional

See 'snap info hello' for additional versions.
添加PATH的三种方式
  1. 使用绝对路径

    book@100ask:~/Desktop$ ./hello
    Hello, world!

2,在PATH环境变量里临时添加路径

a. 临时设置:只对当前cmd有效

复制代码
book@100ask:~$ export PATH=$PATH:/home/book/Desktop
book@100ask:~$ hello
Hello, world!

b. 永久设置:只对当前用户有效

复制代码
book@100ask:~$ gedit ~/.bashrc
book@100ask:~$ hello
Hello, world!

c. 永久设置:对所有的用户都有效

复制代码
book@100ask:~$ ^C
book@100ask:~$ sudo gedit /etc/enviroment
[sudo] password for book: 

这样就可以设置这个环境变量了

四,目录与文件的操作命令

指令的基本构造

在 Ubuntu 中打开终端后,即可看到类似下图的提示符:


Linux 命令一般由三部分组成:
command 命令;
options 选项;
parameter 参数;

两种路径,四种目录

1. 绝对路径
Linux 下的根目录为"/",从根目录下出发可以找到任意目录、任意文件。
从根目录开始表示目录或文件的方法称为"绝对路径"。比如:

复制代码
/home/book
/home/book/1.txt
/bin/pwd

2. 相对路径
有时候使用绝对路径太过麻烦,可以使用相对路径。假设当前正位于/home/book
目录下,那么:

复制代码
./1.txt 表示当前目录下的 1.txt,即 /home/book/1.txt;"."表示当前目录
../book/1.txt 表示当前目录的上一级目录里,book 子目录下的 1.txt
"/home/book/.."就是"/home"目录,".."表示上一级目录

使用 . 表示当前路径
使用 .. 表示上一级路径
使用 ../ ...表示上上级路径,以此类推

3. 当前目录

pwd可以现实出当前的路径

复制代码
book@100ask:~$ pwd
/home/book

./ 也是表示当前的路径

4. 上级目录

方法有两种进入上级目录

复制代码
book@100ask:/home$ cd /home/
book@100ask:/home$ cd /home/book
book@100ask:~$ cd ..
book@100ask:/home$ cd/home/book
bash: cd/home/book: No such file or directory
book@100ask:/home$ cd /home/book
book@100ask:~$ 

5. 家目录

~ 这个就表示家目录

6. 上一个目录

复制代码
book@100ask:~$ cd -
/home/book

用cd - 表示的是回到上一个目录

文件的操作指令





ls -l 一般是用来现实具体的使用权限,所有者,所在组和这个文件的所建立的时间

ls -a 一般是用来现实里面的隐藏文件的,隐藏文件的前面一般都会一个小点.

复制代码
book@100ask:~$ ls -l
total 97156
drwxrwxr-x 11 book book     4096 Oct 20  2022 100ask_imx6ull-sdk
-rw-r--r--  1 book book       15 Apr 19  2024 1.txt
drwxrwxr-x  4 book book     4096 Oct 19  2022 clangd_13.0.0
-rwxrw-rw-  1 book book 64038029 Oct 19  2022 clangd-linux-13.0.0.zip
-rwxr-xr-x  1 book book    15844 Jul 30  2021 Configuring_ubuntu.sh
drwxr-xr-x 15 book book     4096 Jan 26 07:12 Desktop
drwxrwxr-x  5 book book     4096 Oct 19  2022 DevelopmentEnvConf
drwxr-xr-x  3 book book     4096 Mar 26  2019 Documents
drwxr-xr-x  2 book book     4096 Oct 19  2022 Downloads
-rw-r--r--  1 book book     8980 Mar 26  2019 examples.desktop
drwxrwxr-x  4 book book     4096 Jul 23  2024 LED_and_TempHumi
-rw-rw-r--  1 book book    26551 Jul 31  2024 LED_and_TempHumi.tar.bz2

book@100ask:~$ ls -a
.                         Pictures
..                        .pki
100ask_imx6ull-sdk        .presage
1.txt                     .profile
.android                  Public
.bash_history             Qt5.12.9
.bash_logout              repo
.bashrc                   .repo_.gitconfig.json
.cache                    snap
clangd_13.0.0             .sogouinput
clangd-linux-13.0.0.zip   .ssh
.config                   .subversion
Configuring_ubuntu.sh     Templates
.dbus                     test
Desktop                   test.c
DevelopmentEnvConf        tftpboot
Documents                 tmp
Downloads                 ubuntu-18.04_imx6ul_qemu_system
examples.desktop          Videos
.gitconfig                .vim
.gnupg                    .viminfo
.ICEauthority             .vscode
LED_and_TempHumi          .wget-hsts
LED_and_TempHumi.tar.bz2  .wind
.lesshst                  WindTerm_2.5.0
.local                    WindTerm_2.5.0_Linux_Portable_x86_64.tar.gz
.mozilla                  .Xauthority
Music                     .xinputrc
nfs_rootfs




五,文件的权限操作

复制代码
book@100ask:~$ ls -l
total 97156
drwxrwxr-x 11 book book     4096 Oct 20  2022 100ask_imx6ull-sdk
-rw-r--r--  1 book book       15 Apr 19  2024 1.txt
drwxrwxr-x  4 book book     4096 Oct 19  2022 clangd_13.0.0
-rwxrw-rw-  1 book book 64038029 Oct 19  2022 clangd-linux-13.0.0.zip
-rwxr-xr-x  1 book book    15844 Jul 30  2021 Configuring_ubuntu.sh
drwxr-xr-x 15 book book     4096 Jan 26 07:12 Desktop
drwxrwxr-x  5 book book     4096 Oct 19  2022 DevelopmentEnvConf
drwxr-xr-x  3 book book     4096 Mar 26  2019 Documents
drwxr-xr-x  2 book book     4096 Oct 19  2022 Downloads
-rw-r--r--  1 book book     8980 Mar 26  2019 examples.desktop
drwxrwxr-x  4 book book     4096 Jul 23  2024 LED_and_TempHumi
-rw-rw-r--  1 book book    26551 Jul 31  2024 LED_and_TempHumi.tar.bz2
文件权限的识别

前面的d代表这是一个文件夹,-代表这是一个文件
第一组表示"文件所有者的权限";
第二组表示"用户组的权限";
第三组表示"其他非本用户组的权限"。
每组都是 rwx 的组合,其中 r 代表可读,w 代表可写,x 代表可执行;

文件权限的修改

三个改文件权限的操作
chgrp:改变文件所属用户组
chown:改变文件所有者
chmod:改变文件的权限
1.chgrp改变文件所属用户组

-R:进行递归的持续更改,也连同子目录下的所有文件、目录都更新成为这个
用户组之意。常常用在更改某一目录内所有文件的情况。
范例:

将 install.log 文件的用户组改为 hy 用户组。注意 hy 用户组必须要在34/ 566
/etc/group 文件内存在才可以。
2.chowm改变文件的所有者
chown [-R]账号名 文件或目录
**chown [-R]账号名:组名 文件或目录
-R:也是递归子目录。
范例:

改变文件所有者和用户组的这两个命令的应用场景:复制文件,由于复制行为会
复制执行者的属性和权限,因此复制后需要改变文件所属用户、用户组等。
3.chmod改变文件的权限
文件权限有两种设置方法:数字类型改变权限和符号改变权限。
首先说明各个权限对应的数字:
r: 4 或 0
w: 2 或 0
x: 1 或 0
这 3 种权限的取值相加后,就是权限的数字表示。例如:文件 a 的权限为"-
rwxrwx---",它的数值表示为:
⚫ owner = rwx = 4+2+1 = 7
⚫ group = rwx = 4+2+1 = 7
⚫ others = --- = 0+0 +0 = 0
所以在设置权限时,该文件的权限数字就是 770。
数字类型改变权限
使用数值改变文件权限的命令如下:
**chmod [-R] xyz
文件或目录

⚫ xyz:代表权限的数值,如 770。
⚫ -R:以递归方式进行修改,比如修改某个目录下所有文件的属性。
范例:
将文件.bashrc 这个文件的所有权限设置都启用。
符号类型改变文件权限方式
使用 u、g、o 三个字母代表 user、group、others 3 中身份。此外 a 代表
all,即所有身份。
范例:
也可以增加或去除某种权限,"+"表示添加权限,"-"表示去除权限:


chmod a+w .bashrc
chmod a-x .bashrc

相关推荐
LUCIFER4 小时前
[驱动进阶——MIPI摄像头驱动(五)]rk3588+OV13855摄像头驱动加载过程详细解析第四部分——ISP驱动
linux·驱动开发
暮云星影5 小时前
四、linux系统 应用开发:UI开发环境配置概述 (一)
linux·ui·arm
a程序小傲6 小时前
得物Java面试被问:RocketMQ的消息轨迹追踪实现
java·linux·spring·面试·职场和发展·rocketmq·java-rocketmq
Ghost Face...6 小时前
i386 CPU页式存储管理深度解析
java·linux·服务器
LEEE@FPGA6 小时前
zynq 是不是有了设备树,再linux中不需要编写驱动也能控制
linux·运维·单片机
RisunJan6 小时前
Linux命令-less(分页查看器)
linux·运维
梁正雄6 小时前
linux服务-MariaDB 10.6 Galera Cluster+garbd
linux·运维·mariadb
Coder个人博客7 小时前
Linux6.19-ARM64 mm mem_encrypt子模块深入分析
linux·安全·车载系统·系统架构·系统安全·鸿蒙系统·安全架构
hweiyu007 小时前
Linux 命令:fold
linux·运维
搬砖者(视觉算法工程师)7 小时前
Ubuntu 24.04 LTS 系统上树莓派摄像头模块 v2.1(IMX219)的安装配置与故障排查
linux·数据库·ubuntu