linux 学习笔记整理

前言

本文章是为了记录小白学习linux的笔记收获,接下来的21天将展示这段时间学习linux基础的笔记。


文章目录



第一章 linux常用命令

Linux/unix操作系统简介

Minix(mini-UNIX)最初是由Andrew Tanenbaum教授,仿照4.3BSD的源代码,白手起家完成了12000行C语言的编写工作这个系统只是一个教学工具,没有什么实际应用价值。
1990年,Linus Torvalds决定编写一个自己的Minix内核,初名为Linus’ Minix,意为Linus的Minix内核,后来改名为Linux,此内核于1991年正式发布,并逐渐引起人们的注意。
Linux操作系统的诞生、发展、和成长过程依赖于五个重要支柱:unix操作系统、minix操作系统、GNU计划、POSIX标准和互联网。
GNU计划:GNU是“GNU is Not Unix”的递归缩写,由Richard M.Stallman于1984年创办,旨在开发一个免费、类unix的操作系统-GNU系统及其开发工具;Emacs编辑系统、BASH shell程序、GCC、GDB等开发工具都是GNU组织的产品。
1992年Linux与其他GNU软件结合,完全自由的操作系统正式诞生。该操作系统往往被称为“GNU/Linux”或简称Linux。
POSIX标准:POSIX标准定义了操作系统应该为应用程序提供的接口标准,POSIX标准用来统一Unix、Linux各分支编程接口,以提高其通用性和可移植性。
linux创始人
linux系统的作用
操作系统在计算机系统中起着呈上启下作用:向下封装硬件,向上提供操作接口。
在这里插入图片描述

Linux和linux的联系

• UNIX系统是工作站上最常用的操作系统,它是一个多用户、多任务的实时操作系统,允许多人同时访问计算机, 并同时运行多个任务。UNIX系统具有稳定、高效、安全、方便、功能强大等诸多优点,自20世纪70年代开始便运行在许多大型和小型计算机上。
• UNIX虽然是一个安全、稳定且功能强大的操作系统,但它也一直是一种大型的而且对运行平台要求很高的操作系统,只能在工作站或小型机上才能发挥全部功能,并且价格昂贵,对普通用户来说是可望而不可及的,这为后来Linux的崛起提供了机会,Linux是一个类UNIX操作系统。
• Linux是免费的、不受版权制约、与UNIX兼容的操作系统。
• Linux在x86架构上实现了UNIX系统的全部特性,具有多用户多任务的能力,同时保持了高效性和稳定性。
• Linux具有如下的优秀的特点:

  1. 开放性;
  2. 完全免费;
  3. 多用户;
  4. 多任务;
  5. 良好的用户界面;
  6. 设备独立性;
  7. 提供了丰富的网络功能;
  8. 可靠的系统安全性;
  9. 良好的可移植性。

内核介绍

内核(kernel)是系统的心脏,是运行程序和管理像磁盘和打印机等硬件设备的核心程序,它提供了一个在裸设备与应用程序间的抽象层。
Linux内核版本又分为稳定版和开发版,两种版本是相互关联,相互循环:
• 稳定版:具有工业级强度,可以广泛地应用和部署。新的稳定版相对于较旧的只是修正一些bug或加入一些新的驱动程序。
• 开发版:由于要试验各种解决方案,所以变化很快。
内核源码网址:http://www.kernel.org,所有来自全世界的对Linux源码的修改最终都会汇总到这个网站,由Linus领导的开源社区对其进行甄别和修改最终决定是否进入到Linux主线内核源码中。
OpenWRT(Linux内核 + 文件系统)

Linux发行版本

Linux发行版 (也被叫做 GNU/Linux 发行版) 通常包含了包括桌面环境、办公套件、媒体播放器、数据库等应用软件。
这些操作系统通常由Linux内核、以及来自GNU计划的大量的函式库,和基于X Window的图形界面,在X Window中用户同样可以通过使用鼠标对窗口、菜单等进行操作来完成相应的工作。
X Window系统是一个非常出色的图形窗口系统,是类UNIX系统的图形用户界面的工业标准。X Window系统最重要的特征之一就是它的结构与设备无关。
X Window系统的主要特点有如下几点:
• X Window系统是客户机/服务器结构的。X Window的实现是与操作系统内核分开的,其主要由X Server和X Client两部分组成。
• X Window系统不是Unix/Linux操作系统的必须的构成部分,而只是一个可选的应用程序组件。

Linux常见的目录介绍

 /:根目录,所有的文件都从这里开始
 /bin:/usr/bin:可执行二进制文件
 /boot:linux系统启动时用到的文件
 /dev: linux系统下的设备文件
 /etc: 系统配置文件存放的目录,常见的配置文件有:/etc/inittab、/etc/fstab、/etc/init.d、/etc/X11、/etc/sysconfig、/etc/xinetd.d(后面会介绍具体用法)
 /home: 系统默认的用户加目录,新增用户账号时都得放在该目录下。~代表当前的目录
 /lib: /usr/lib: /usr/local/lib :系统使用的函数库的目录
 /lost+fount: 系统异常产生错误时,会将一些遗失的片段房子啊次目录下
 /mnt: /media: 光盘默认挂彩点
 /opt: 给主机额外安装软件摆放的目录
 /proc: 此目录在内存中,如内存核心,外部设备,网络状态
 /root:系统管理员root的家目录。
 /sbin:/usr/sbin:/usr/local/sbin:放置系统管理员使用的可执行命令,如fdisk、shutdown、mount 等。与 /bin 不同的是,这几个目录是给系统管理员 root使用的命令,一般用户只能"查看"而不能设置和使用。
 /tmp**:**一般用户或正在执行的程序临时存放文件的目录,任何人都可以访问,重要数据不可放置在此目录下。
 /srv:服务启动之后需要访问的数据目录,如 www 服务需要访问的网页数据存放在 /srv/www 内。
 /usr:应用程序存放目录,/usr/bin 存放应用程序,/usr/share 存放共享数据,/usr/lib 存放不能直接运行的,却是许多程序运行所必需的一些函数库文件。/usr/local: 存放软件升级包。/usr/share/doc: 系统说明文件存放目录。/usr/share/man: 程序说明文件存放目录。
 /var:放置系统执行过程中经常变化的文件,如随时更改的日志文件 /var/log,/var/log/message:所有的登录文件存放目录,/var/spool/mail:邮件存放的目录,/var/run:程序或服务启动后,其PID存放在该目录下。

Linux命令解析器

Shell命令解析器\ Bash解析器:交互式的解析、执行用户输入的命令,翻译用户的操作。
Bash常用快捷操作:
 tab补齐命令、路径、显示当前目录下的所有目录
 clear清屏
 sleep + 毫秒 中断
 红色框为光标操作,黑色框为遍历历史输入

终端相关操作

Ctrl + Shift + N 新建一个终端 Ctrl + Shift + T 在终端里新建一个标签 Ctrl + Shift + W 关闭标签页 Ctrl + Shift + Q 关闭窗口
Ctrl + Shift + C 复制 Ctrl + Shift + V 粘贴
Alt + [1 - 9] 标签之间切换 Ctrl + Shift + = 放大终端字体 Ctrl + - 缩小终端字体 Ctrl + 0 普通大小 F11 全屏 再次按F11退出全屏 Ctrl + D 关闭当前一个终端 Alt + F4 关闭整个终端 Ctrl + Shift + F 查找
终端字体推荐使用:DejaVu Sans Mono Book
编辑–> 配置文件首选项–> 常规

Alt + Tab 应用程序间切换 Ctrl + Alt + Backspace 注销 Ctrl + Alt + F7 回到图形界面
在这里插入图片描述

Ctrl + Alt + F1到 Ctrl + Alt + F6 可以访问6个虚拟控制台

内建命令和外建命令

内建命令就是系统自带的,外部命令就是外部软件安装自带的。内建命令要比系统论命令有比较高的执行效率。
在这里插入图片描述

命令行的一般格式

• command:命令名,相应功能的英文单词或单词的缩写
• [-options]:选项,可用来对命令进行控制,也可以省略,[]代表可选
• parameter1 …:传给命令的参数,可以是零个一个或多个
在这里插入图片描述

目录相关命令

打印当前目录在这里插入图片描述

切换目录

在这里插入图片描述

创建目录

Mkdir [ 选项 ] 目录
mkdir test 在当前目录下创建test目录
mkdir /tmp/test 在根目录下tmp目录里创建test目录
mkdir file{1…100} 在当前目录下创建file1到file100的目录,这里会创建100个目录 mkdir “file{1…100}”
在当前目录下创建file{1…100}目录,这里只创建一个目录
mkdir -p a/b/c 在当前目录下创建a/b/c目录树
mkdir “a b” 创建以"a b"命名的一个目录
mkdir a\ b 创建以"a b"命名的一个目录
mkdir a b 创建目录a和目录b
rmdir删除指定的空目录

文件相关命令

ls列出目录内容

ls -a 显示指定目录下所有子目录和文件
ls -l 以列表方式显示文件的详细信息
ls -h 配合 -l 以人性化的方式显示文件大小
在这里插入图片描述

其他常见操作

在这里插入图片描述

touch [选项]… 文件… 创建文件

如果文件存在,则更新时间;否则,创建新的文件(文件不是文件夹)
touch file{1,2,3} 创建多个file文件
touch {a,c,b}.txt 创建多个.txt后缀的文件
在这里插入图片描述

cp将给出的文件或者目录复制到另外一个文件或者目录下

常见选项

在这里插入图片描述

rm删除文件或者文件夹

在这里插入图片描述### mv移动文件或者目录
在这里插入图片描述

文件相关内容查看

cat 将文件内容一次性输出到终端
more将文件内容分页显示到终端
less将文件内容分页显示到终端
head –n[行数] 文件名 ead命令从文件头部开始查看前 n 行的内容。
tail从文件尾部向上查看最后 n 行的内容,用法和head相同

du和df命令

du命令用于查看某个目录大小。
在这里插入图片描述
df命令用于检测文件系统的磁盘空间占用和空余情况,可以显示所有文件系统对节点和磁盘块的使用情况
在这里插入图片描述

查找相关命令(重点)

脚本文件查找

which
该命令根据path这个环境变量所规范的路径去查询执行文件的文件名,重点是找出执行文件,满后面接的是完整的文件名。
whereis找系统中默些特定目录下面的文件,locate是利用数据库来查找文件名,速度快于find(find是查找整个磁盘);
whereis -l可以用来查看特定目录包含哪些。locate使用简单,后面只需要输入部分名称即可。在完整的文件名中,只要包含部分名称的都会被显示出来。但是,locate是寻找已建立的数据库,而不是从硬盘中读取数据。

find按照条件查找文件

find + 路径 + -name +“文件名”
find + 路径 + -size + 范围
find + 路径 + -type + 类型

find /etc -name grub.conf 查找/etc目录下的grub.conf文件
find / -name “*.conf” 查找/下所有.conf文件
find / -iname grub.conf 查找/目录下的grub.conf文件,忽略大小写
find / -maxdepth 2 -name grub.conf 可以使用-maxdepath参数来控制查找的层次,就是说只查当前目录和子目录,最多查2级目录
find / -mindepth 2 -name grub.conf 最少查二级目录
find /etc -type d 查找/etc/下所有的目录
find /etc -type f 查找/etc/下的所有普通文件
find /etc -type l -name *.conf 查找/etc/下软链接文件是.conf结尾的文件
find /etc -type s 查找/etc/下所有socket文件
find /etc -type c 查找/etc/下的所有字符设备文件
find /etc -type p 查找/etc/下所有管道文件
find /etc -user root 查找/etc/所属用户是root的文件
find /etc -group root 查找/etc/所属用户组是root的文件
find /etc -uid 500 查找/etc/下uid是500的文件,和-user类似
find /etc -gid 500 查找/etc/下gid是500的文件,和-group类似
find /etc -nouser 查找没有所属用户的文件
find /etc -nogroup 查找没有所属用户组的文件
find /etc -perm 777 -type d 查找/etc/下权限为777的目录
find . -perm 111 查找权限是111的文件
find . -size +10M 查找当前目录下大于10M的文件,单位可以有K,M,G,b等
find / -size -2M 查找根目录下少于2M的文件
find / -mtime 1 查找根目录下1天以前修改的所有文件
find / -mtime +2 查找根目录下2天以前修改的所有文件
find / -mtime -3 查找根目录下最近3天内修改的所有文件
find / -atime 1 查找根目录下1天以前访问或读过的所有文件
find / -atime -1 查找根目录下最近1天内读过或访问的文件
find / -ctime -3 查找根目录下最近3天内状态发生改变的文件
find / -cmin -3 查找根目录下最近3分钟内状态发生改变的文件
find / -empty 查找根目录下所有空白文件或者空目录
find / -false 查找根目录下总是错误的文件

grep允许对文本文件进行模式查找在这里插入图片描述

用法: grep -r + “查找的关键词” + 路径

查找 /home/itcast 下包含“hello,world“字符串的文件
grep -r “hello,world” /home/itcast

管道

一个命令的输出可以通过管道作为另一个命令的输入

压缩包管理

tar 用于将要压缩的多个文件打包

tar [ ] 打包文件名 文件
在这里插入图片描述

gzip 用于压缩文件

gzip/gunzip用于压缩文件,获取.gz的压缩包,压缩之后不保留源文件。若同时列出多个文件,则会被单独压缩。使用gzip -d file.gz 可以解压。gz文件的压缩包。
zip命令也可以用来压缩文件和目录,获取.zip文件的压缩包,压缩时会保留源文件。
在这里插入图片描述
bzip用于创建和管理.bz2格式的压缩包,bzip2命令对应的解压命令为bunzip2.
tar用于打包多个目录和文件

文件权限

文件权限就是文件的访问控制权限

访问权限说明

r、w、x对应读、写、可执行权限。

chmod修改文件权限

格式:字母法:chmod u/g/o/a +/-/= rwx 文件
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
案例
格式2:“rwx” 这些权限也可以用数字来代替
在这里插入图片描述

chown 修改文件的所有者

使用方法:chown 用户名 文件或目录名

chgrp 用于修改文件的所有组

使用方法:chgrp 用户组名 文件或目录名

注: ll 文件名用于查看文件的所有
在这里插入图片描述

文件默认权限

umask是指定目前用户在创建文件或者目录时候的权限限定值。 查看的方式有下面两种:umask的数字是默认值需要减掉的权限,为什么会有四组数据?第一组是特殊权限的作用,暂时不用理会。
在这里插入图片描述
可以根据umask 数字来确定需要拿掉的权限。
在这里插入图片描述

文件隐藏属性

chattr用于配置文件隐藏属性,补货该命令只能在ext2、ext3、ext4的传统linux文件系统上面生效,其他的不支持。

NAME(名称)
chattr - 修改文件在Linux第二扩展文件系统(E2fs)上的特有属性

SYNOPSIS(总览)
chattr [ -RV ] [ -v version ] [ mode ] files…

DESCRIPTION(描述)
chattr 修改文件在Linux第二扩展文件系统(E2fs)上的特有属性

   符号模式有+-=[ASacdisu]几种格式.

   操作符`+'用来在文件已有属性的基础上增加选定的属性;
   `-'用来去掉文件上的选定的属性;而`='用来指定该文件的唯一属性.

   字符`ASacdisu'用作文件新属性的选项:
   不更新atime(A),同步更新(S),只能添加(a),
   压缩(c),不可变(i),不可转移(d),删除保护(s)以及不可删除(u).

OPTIONS(选项)
-R 递归地修改目录以及其下内容的属性.
如果在递归目录时遇到了符号链接,遍历将跳过.

安装文件

软件安装

sudo dpkg -i xxx.deb

软件卸载

sudo dpkg -r 软件名

其他命令

tree 以树状形式查看指定目录内容,使用该命令需要安装软件 tree

ln 用于创建链接文件,Linux链接文件类似于Windows下的快捷方式。

链接文件分为软链接和硬链接:
软链接:软链接不占用磁盘空间,源文件删除则软链接失效。
硬链接:硬链接只能链接普通文件,不能链接目录。
使用格式:

ln 源文件 链接文件

ln -s 源文件 链接文件

如果没有-s选项代表建立一个硬链接文件,两个文件占用相同大小的硬盘空间,即使删除了源文件,链接文件还是存在,所以-s选项是更常见的形式。

注意:如果软链接文件和源文件不在同一个目录,源文件最好要使用绝对路径,不要使用相对路径。

readlink命令读取符号链接文件的内容(存储目标文件的路径)




—2022.03.23—

第二章 vim编译器的使用

编辑器 gedit的使用

gedit是一个文本编译器,也可以用来当做集成开发环境。

gedit + 文件路径名
gedit ./test/1.txt //在test路径下创建1.txt并且打开

在这里插入图片描述

vi、vim编辑器

vi是linux中文本编译器。vim是vi的升级版本,兼容vim的所有指令。

使用方法

打开或者新建文件。没选路径即默认保存在当前路径

vim  [路径] filename

vim工作模式

vim有三种工作模式:命令模式、文本输入模式、末行模式
在这里插入图片描述

命令模式

在shell环境下默认进入命令模式,其次是任何模式下按ESC就能进入命令模式。

编辑模式

在命令模式下输入以下命令即可进入编辑模式,完成对应的编辑操作。
切换到编辑模式
命令模式下完成复制操作: 【n】yy 复制当前开始的第n行; p粘贴
[n]x 删除光标后面的N个字符;
[n]dd 删除光标开始的n行;
ctrl + f 向前滚动屏幕
ctrl + b向后滚动一个屏幕
.(撤销)执行上一个操作
u撤销前一个操作
ctrl + r 反撤销
ZZ 保存退出
/字符串 从当前光标位置向下查找
?字符串 向上查找
r 替换当前字符

末行模式

命令模式下输入:进入末行模式,对应输入以下命令完成对应操作。
在这里插入图片描述
拓展用法:
在这里插入图片描述

gcc编译器

命令格式:

gcc [选择]file
//预处理
gcc -E hello.c -o hello.i;
//生成汇编文件
gcc -S hello.i  -o hello.s
//生成代码文件
gcc -c hello.s -o hello.o
//生成可执行文件
gcc hello.o -o hello

实际开发中通常一步生成可执行文件

gcc hello.c -o hello

hello.c是我们的编译文件,-o 选择生成目标文件;可执行文件都没有后缀。如果不指定可执行文件,那么默认的可执行为a.out

常用选项

在这里插入图片描述

静态连接和动态连接

静态连接:由链接器在链接时库的内容加入到可执行程序中。所占用的资源较大,当库函数有更新时必须要重新编译。
动态连接:连接器在链接时仅仅建立与所需库函数的之间的链接关系,在程序运行时才将所需资源调入可执行程序。内存占用空间大大减少,但是需要依赖于动态库。
我们编写的应用程序大量用到了标准库函数,系统默认采用动态链接的方式进行编译程序,若想采用静态编译,加入-static参数。
测试对比:

#include <stdio.h>int main(void)
{
    printf("hello world\n");return 0;
}

静态库和动态库

库就是包含了数据和执行码的文件,使程序模块化。

静态库

静态库可以认为是一些目标代码的集合,是在可执行程序运行前就已经加入到执行码中,成为执行程序的一部分。
按照习惯,一般以“.a”做为文件后缀名。静态库的命名一般分为三个部分:
前缀:lib
库名称:自己定义即可
后缀:.a
所以最终的静态库的名字应该为:libxxx.a
静态库制作
步骤:
.o文件生成

ar打包工具生成文件为libtest.a文件。
成功生成

动态库

按照习惯,一般以“.so”做为文件后缀名。共享库的命名一般分为三个部分:
前缀:lib
库名称:自己定义即可
后缀:.so
所以最终的动态库的名字应该为:libxxx.so。
动态库只在内存当中拷贝一份,避免内存浪费。

步骤:
步骤一:生成目标文件,此时要加编译选项:

gcc -fPIC -c *.c //生成目标文件 -fPIC(fpic)创建与地址无关的编译程序,目的是可以让多个程序之间可以共享
gcc -shared *.o -o libtest.so //生成共享库,此时要加链接器选项: -shared(指定生成动态链接库)
nm libtest.so  //查看共享库

GDB调试器




— 2022.03.27

第三章 makefile

简介

makefile可以理解为一种项目管理工具,用一系列规则来指定程序的编译顺序、编译操作;面对多条程序时,可实现自动化编译。减少重复编译时间。

安装方法:

sudo apt install make

语法规则

如何创建makefile文件

vim Makefile

文件内容

目标:依赖文件列表
 <tab>命令列表

将文件夹内的程序编写执行生成test
vim Makefile
test:*.c
	gcc *.c -o test

系统调用

操作系统提供给用户程序调用的一组“特殊”接口,属于操作系统内核的一部分的,必须以某种方式提供给进程让它们去调用。CPU 可以在不同的特权级别下运行,而相应的操作系统也有不同的运行级别,用户态和内核态。运行在内核态的进程可以毫无限制的访问各种资源,而在用户态下的用户进程的各种操作都有着限制,比如不能随意的访问内存、不能开闭中断以及切换运行的特权级别。显然,属于内核的系统调用一定是运行在内核态下,操作系统一般是通过软件中断从用户态切换到内核态。

errno

c错误处理函数errno 是记录系统的最后一次错误代码。代码是一个int型的值,不同的值表示不同的错误信息,在errno.h中定义。查看错误代码errno是调试程序的一个重要方法。

#include <stdio.h>  //fopen
#include <errno.h>  //errno
#include <string.h> //strerror(errno)int main()
{
    FILE *fp = fopen("xxxx", "r");
    if (NULL == fp)
    {
        printf("%d\n", errno); 			 //打印错误码
        printf("%s\n", strerror(errno)); //把errno的数字转换成相应的文字 
    }return 0;
}

strerror:The strerror() function returns a pointer to a string that describes
the error code passed in the argument errnum, possibly using the
LC_MESSAGES part of the current locale to select the appropriate lan‐
guage.
执行结果

虚拟内存空间

在这里插入图片描述

文件描述符

定义:用于标识文件的状态,每当打开一个新的文件则占用一个最小的文件描述符(1–1023)。所以文件不再使用时,应该及时close.

#define STDIN_FILENO  0 //标准输入的文件描述符
#define STDOUT_FILENO 1 //标准输出的文件描述符
#define STDERR_FILENO 2 //标准错误的文件描述符

常见的I/O函数

open

在这里插入图片描述

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
功能:
    打开文件,如果文件不存在则可以选择创建。
参数:
    pathname:文件的路径及文件名
    flags:打开文件的行为标志,必选项 O_RDONLY, O_WRONLY, O_RDWR
    mode:这个参数,只有在文件不存在时有效,指新建文件时指定文件的权限
返回值:
    成功:成功返回打开的文件描述符
    失败:-1

flags
在这里插入图片描述

close

#include <unistd.h>int close(int fd);
功能:
    关闭已打开的文件
参数:
    fd : 文件描述符,open()的返回值
返回值:
    成功:0
    失败: -1, 并设置errno

write


#include <unistd.h>
ssize_t write(int fd, const void *buf, size_t count);
功能:
    把指定数目的数据写到文件(fd)
参数:
    fd :  文件描述符
    buf : 数据首地址
    count : 写入数据的长度(字节)
返回值:
    成功:实际写入数据的字节个数
    失败: - 1

read

在这里插入代码片#include <unistd.h>
​
ssize_t read(int fd, void *buf, size_t count);
功能:
    把指定数目的数据读到内存(缓冲区)
参数:
    fd : 文件描述符
    buf : 内存首地址
    count : 读取的字节个数
返回值:
    成功:实际读取到的字节个数
    失败: - 1



— 2022.03.28

第四章 磁盘、文件和目标操作函数

磁盘类型

磁盘组成
主引导记录MBR:整个磁盘的0号磁柱的0号磁面的第一个扇区。只有64B
全局唯一标识分区表GPT:
分区:每一个磁盘可以建立若干分区,每条分区信息占据16B空间。
主分区:储存在主引导记录去的称为主分区,只能分四个分区。
拓展分区:弥补主分区的数量不足,但是一个磁盘只能有一块拓展分区。
逻辑分区:储存在逻辑分区中的分区称为逻辑分区,不同的拓展分区可以建立的逻辑分区数量不同。

管理分区

管理MER分区(主引导记录)

逻辑分区:
主分区:
拓展分区:之能建立一块

fdsik 创建分区

fdisk  /dev/sdb

删除分区

分区生效i:分区创建如果不能及时生效,需要重新启动系统,也可以使用一下命令完成

partx -a /dev/sdb

管理GPT分区

工具:gdisk

查看

gdisk -l /dev/sdb

选择项

文件系统的挂载

linux系统中,所有文件都只有一个根目录。在使用某个磁盘空间或者文件时,就必须要挂载到系统根目录下的某一个文件下。挂载文件时,必须要以设备文件来指定要挂在的文件系统,以及一个称为挂载点的目录。
文件系统的挂载命令

mount -t 文件系统类型 -o [可选参数]文件系统 挂载点
mount -t /dev/sdb2 /mnt/floppy //将盘sdb2挂载在mnt的目录下,floppy原先不存在。
umount 【】 设备名称/挂载点 //卸载文件系统

因为关机时会自动卸载所有已经挂载的文件系统,所以设置永久挂载避免第二次挂载。

文件系统名称 挂载点路径 文件系统的类型 【options】 fs-_dump fs_pass //

options: 大多时候defauls 即可满足需求
fs-_dump;当使用dump文件时,是否要备份这个文件系统,以及备份的频率。fs-_dump == 1 备份 等于0 不备份。
fs_pass:执行时是否检查这个文件系统,0不检查 否则检查。

逻辑卷管理LVM

零停机的前提下,对文件系统的大小进行调整,方便实现文件系统跨越不同的磁盘和分区。LVM是磁盘分区的一种机制,建立在硬盘和分区之间的一个逻辑层。

基本术语

PV(Physical Volume) 物理卷。可以是单独磁盘,也可以是硬盘分区

VG(Volume Group) 卷组。是PV的组合,可以看成单独的逻辑磁盘

LV(Logical Volume) 逻辑分区。相当于物理分区的/dev/hdaX

PE(Physical Extent) 物理范围。VG单元,类似于RAID的条带大小。

当多个PV组成一个VG时,LVM会在所有PV上做类似格式化的动作,

将每个PV切成一块块的空间,这一块块的空间就称为PE, 通常是4MB。

LE(Logical Extent) 逻辑范围。LV的组成单位。大小为PE的倍数(通常为1:1)

具体操作

创建分区 、-t命令把系统标识改为8e这个分区就可以当做lvm的物理卷

创建分区,把系统标识改为8e这个分区就可以当做lvm的物理卷

创建物理卷

pvcreate +上述物理卷路径
pvcreate /dev/std5  //即可成功创建

创建卷组

有了物理卷以后就可以创建卷组,lvm的每一个卷组就是多个物理卷组成。

vgcreate name 组成卷组的物理卷名称
vgcreate -s 8M vg0 /dev/sdb6	//-s是可以设置pe的大小,默认是4M

创建逻辑卷

产生卷组以后,就可以从里面划分一块出来作为逻辑卷。

lvcreate [-L size ] -n lvname vgname //lvname 是逻辑卷标识名称 vgname是卷组的标识名称

lvcreate -L 200M -n lv0 vg0 //如果以-lz作为参数,那么设置的逻辑卷是以pe的块数作为单位的

卸载

卸载卷

pvremove pvdevice   //卸载物理卷
vgremove vgname    //卸载卷组
lvremove lvdevicel //卸载逻辑卷

查看卷信息

pvdisply prdecicei //查看物理卷
vgdisplay vgname  //查看卷组
lvdisplay lvdevice //查看逻辑卷

调整卷组

lvm最大的好处就是可以弹性的调整卷组空间。但是调整的是卷组和逻辑卷的大小,而不是物理卷。

调整卷组

放大卷组时,需要额外准备物理卷,在调用vdextend把要增加的物理卷加入到卷组当中。
vgextend vgname pvdevice……
缩小卷时,使用vgreclude把卷组中的物理卷卸载。
vgrecluce vgname pvdevice……

调整逻辑卷

放大:先方法lv,再放大文件系统;
lvextend -L size lv_device
缩小:先缩小文件系统,再缩小lv.
lvreduce -L size lv_device

其中size代表新的大小,再调整时要注意备份文件。由于resize2fs仅支持离线系统,所以在压缩ext4文件系统时,要先卸载ext4文件系统,保证文件系统的使用量,必须小于缩小后的才行。

文件相关函数

stat

获取文件状态信息 Display file or file system status.
具体用法可以参考:添加链接描述


#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>int stat(const char *path, struct stat *buf);
int lstat(const char *pathname, struct stat *buf);
功能:
    获取文件状态信息
    stat和lstat的区别:
        当文件是一个符号链接时,lstat返回的是该符号链接本身的信息;
        而stat返回的是该链接指向的文件的信息。
参数:
    path:文件名
    buf:保存文件信息的结构体
返回值:
    成功: 0
    失败: -1

access

#include <unistd.h>int access(const char *pathname, int mode);
功能:测试指定文件是否具有某种属性
参数:
    pathname:文件名
    mode:文件权限,4种权限
        R_OK:   是否有读权限
        W_OK:   是否有写权限
        X_OK:   是否有执行权限
        F_OK:   测试文件是否存在
返回值:
    0:  有某种权限,或者文件存在
    -1:没有,或文件不存在
    access("txt", F_OK);



___2022.03.29

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Warm wolf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值