Linux基础概念

Linux

Linux 和 UNIX 中的文件系统是一个以 / 为根的树状式文件结构,/ 是 Linux 和 UNIX 中的根目录,同样它也是文件系统的起点。所有的文件和目录都位于 / 路径下,包括经常听到的 /usr、/etc、/bin、/home 等。在早期的 UNIX 系统中,各个厂家都定义了自己文件系统的命名构成,比较混乱,而且难以区分。

为了避免在 Linux 系统上也出现这种命名混乱的问题,在 1994 年推出了 FSSTND(FileSystem Standard) 的 Linux 文件系统层次结构标准,后来 UNIX 团队把 FSSTND 发扬光大,成为了后来的 FHS(FileSystem Hierarchy Standard) 。

FHS 标准使得众多的 Linux distributions(Linux 发行版) 有了统一的文件系统命名标准,换一种说法:FHS 就是一种文件系统的命名标准。一般来说,Linux distributions 都需要遵循 FHS 规定的

  • 目录结构和目录内容
  • 文件类型的权限

但是,FHS 仅仅定义了两层规范,第一层是 / 下面的各个目录要放什么文件数据,比如 /etc 下面需要放设置文件,/bin/sbin 下面需要放可执行文件等;第二层是针对 /usr/var 这两个目录来定义的,比如 /usr/share 需要放共享数据,/var/log需要放系统登录文件等。

下面就来为看一下 Linux 在 / 下都有哪些定义和规范。

FHS 规范

下面介绍的这些规范,只是 FHS 文档指定的目录和文件的一部分,完整的标准可在 Filesystem Hierarchy Standard 在线获得。

首先先来介绍一下根目录的重要性和意义:

根目录是整个系统中最重要的一个目录,后续的目录都是以根目录为基础进行衍生,更重要的一点,根目录与开机、还原、系统修复有关,由于系统开机需要特定的环境,所以系统出现错误时,根目录也必须要包含有能够修复文件系统的程序才行。所以 FHS 规定不要将根目录的分区大小设置的过大,实际上是越小越好,以减少出错率。

FHS 同样规定了根目录下面应该要有这些目录的存在。

/home 目录

/home 目录是系统默认的使用者主文件夹(home directory)。

/boot 目录

/boot 目录包含启动操作系统所需的静态文件,比如 Linux 内核,这些文件对系统的启动至关重要。Linux Kernel 常用的文件名为 vmlinuz, 但是如果使用的是 grub2 这个开机程序,还会存在 /boot/grub2 这个目录。

boot 下面是这样的。

千万不要删除 /boot 目录,这样做可能会导致系统无法启动。

/dev 目录

/dev 目录都是一些设备节点,这些设备节点是 Linux 系统中的设备或者是内核提供的虚拟设备。这些设备节点同样也对系统正常运行至关重要。/dev 目录和子目录下的设备是字符设备和块设备。字符设备就是鼠标、键盘、调制解调器,块设备就是硬盘、软盘驱动器。存储 /dev 目录下的文件就相当于是存储某个设备。

比较重要的文件有

/dev/hda:主 IDE 通道上的主设备,当提到 IDE/ATA 硬盘时,主通道是第一和第二驱动器连接到主板或接口卡的通道。

/dev/hdb:主 IDE 通道上的从设备。

/dev/tty0:第一个虚拟控制台。虚拟控制台又被称为 VC,也称为虚拟终端 VT,是用于计算机用户界面的键盘和显示器的概念组合。

/dev/tty1:第二个虚拟控制台。

/dev/sda:主 SCSI 和 SATA 通道上的第一个设备。

/dev/lp0:第一个并行端口。

下面是 dev 下面的目录。

/etc 目录

/etc 目录是为计算机本地的配置文件保留的,系统主要的配置文件都放在这个目录下,比如账号密码,服务的启停,一般来说,这个目录下面一般用户只有读权限,只有 root 用户具有修改权限

/etc 下比较重要的几个文件有

/etc/modprobe.d 内核驱动模块

/etc/passwd 存储用户密码

/etc/fstab 存储挂载信息

/etc/issue 存储系统启动显示的内容

/etc 目录下不要存放二进制文件,二进制文件最好放在 /sbin/bin 中。

/etc 目录下有两个重要的文件,/etc/x11 用于存放 X Window 系统配置文件,例如 xorg.conf,/etc/opt 这个主要存放第三方协力软件 /opt 的相关配置文件。

/lib 目录

系统的函数库有很多,而 /lib 目录就像一个仓库,它用于存放执行 /bin/sbin 中二进制文件所需要的库,这些共享库映像对于系统 boot 和执行根文件系统中的命令特别重要。

/media 目录

media 媒体的英文,也就是说 /media下可以存放用于可移动媒体(例如 USB、DVD、CD-ROM 和 Zip 磁盘)的安装点和子目录。

/mnt 目录

如果想要暂时挂载某些额外的设备,可以放在 /mnt 这个目录下,其实最早的时候,/mnt 用途和 /media 一样,只是后来有了 /media 之后,这个目录就被用来临时挂载了。

/opt 目录

/opt/ 目录为大多数应用程序软件包提供存储空间,将文件放置在 /opt/ 目录中的包会创建一个与包同名的目录。反过来,该目录保存了原本会分散在整个文件系统中的文件,从而为系统管理员提供了一种简单的方法来确定特定包中每个文件的角色。

例如,如果 sample 是位于 /opt/ 目录中的特定软件包的名称,那么所有文件都放置在 /opt/sample/ 目录中的目录中,例如 /opt/sample/bin/ 表示二进制文件 和 /opt/sample/man/ 用于手册页。

/proc 目录

/proc 目录本身是一个虚拟文件系统(virtual filesystem),他放置的数据是在内存中,比如系统核心信息,行程信息,周边设备网络状态等。因为这个目录下的数据都是在内存中的,所以本身不占用磁盘空间。

这个目录下比较重要的文件有 /proc/cpuinfo/proc/dma/proc/interrupts/proc/net/

/sbin 目录

/sbin 目录存储 root 用户使用的可执行文件。/sbin 中的可执行文件在启动时使用,用于系统管理和执行系统恢复操作。除了 /bin 中的二进制之外,/sbin 还包含启动、恢复和修复系统所需要的二进制文件。

/sbin 目录下包含 arp、clock、halt、init、grub、ifconfig、route、shutdown 等。

/tmp 目录

这个目录下面存放的都是一些临时文件,这些文件在系统重新启动时被清除。

/sys 目录

这个目录其实和 /proc 非常类似,也是一个虚拟文件系统,主要是记录核心与系统硬件相关信息。这个目录同样也不占用磁盘空间。

/usr 目录

/usr 目录是需要好好聊聊的一个目录了,很多读者都误以为 /usr 是 user 的缩写,其实 usr 是 Unix Software Resource 的缩写,FHS 建议软件开发者应该将数据合理的放置在这个目录的次目录下,不要自己创建软件独立的目录。

所有系统默认的软件都会放在 /usr 下面,因此这个目录有点类似 Windows 中的 C:\Windows\ + C:\Program files\ 这两个目录的综合,一般来说,系统刚安装完毕后,这个目录会占用较多的磁盘容量,/usr 的次目录建议有下面这些内容

*/usr/bin/*一般用户能够使用的指令都放在这个目录下,CentOS 7 开始,/usr/bin 下指令和 /bin 目录下指令一毛一样。

*/usr/lib/*基本上,与 /lib 功能相同,所以 /lib 就是链接到这个目录中的。

/usr/local 系统管理员在在本机下载的软件都建议安装到这个目录下,便于管理。

/usr/sbin 非系统正常运行所需要的系统指令,最常见的就是某些网络服务器软件的服务指令,不过基本功能与 /sbin 差不多,因此目前 /sbin 就是链接到此目录中的。

/usr/share 共享文件放置区,这个目录下还有这些次目录 /usr/share/man ,/usr/share/doc,/usr/share/zoneinfo

/usr/games 与游戏相关的数据放置处

/usr/include C/C++ 等程序语言的 header 和 include 放置处,也是直接链接的。

/usr/src 一般源码建议放在这,src 是 source 的意思,至于核心源码则建议放在 /usr/src/linux 目录下。

/run 目录

早期的 FHS 规定系统开机后所产生的各项信息应该要放置到 /var/run 目录下,新版的 FHS 则规范到 /run 下面。

/var 目录

如果说 /usr 是安装时会占用较大磁盘容量的目录,那么 /var就是在系统运行后才会渐渐占用磁盘容量的目录。/var 主要包括高速缓存、登录文件以及某些软件运行所产生的的目录,包括程序文件,例如 MySQL 数据库文件等,常见的目录有

/var/cache 应用程序缓存目录

/var/crash 系统错误信息

/var/log 日志记录

/var/run 进程的标识数据

/var/tmp 临时文件目录

/var/lock 文件锁定记录

/srv 目录

srv 可以看做 service 的缩写,是一些网络服务启动之后,这些服务所需要取用的数据目录,常见的服务例如 WWW, FTP 。

CentOS 7 在目录的编排上与过去的版本不同,上面已经大致描述过了,这里做个汇总,比较大的差异就是将许多原本应该在根目录里面的目录,将全部数据挪到了 /usr 里面去,然后进行链接设置,这些内容包括

  • /bin -> /usr/bin
  • /sbin -> /usr/sbin
  • /lib -> /usr/lib
  • /lib64 -> /usr/lib64
  • /var/lock -> /run/lock
  • /var/run -> /run

为了方便大家直观的看到这些目录都是做什么的,手绘了一个图,图中的这些目录之间的关系很像一棵树,所以这个目录又叫做目录树。

这个目录树已经很清晰了。

绝对路径和相对路径

和其他系统一样,Linux 中的路径也分为绝对路径(absolute)和相对路径(relative),这两种的写法依据如下:

  • 由根目录开始的路径都是绝对路径,比如上图目录树中的 /boot、/usr/local 等
  • 相对于当前文件路径的写法是相对路径,比如 ../var/log 目录

这里需要注意一点,相对路径是以当前所在路径的相对位置来移动的,比如当前在 /boot 这个目录下,想要移动到 /usr/src 这个目录

绝对路径表示法:/usr/src

相对路径表示法:../usr/src

这里还需要注意两个特殊的目录:

  • . :代表当前目录,也可以使用 ./ 来表示
  • .. :代表上一层目录,也可以用 ../ 来表示

关于绝对路径和相对路径的取舍问题:当文件路径很长时,推荐使用相对路径,因为不用向绝对路径一样,把所有的路径都写一遍,而直接使用 ../ 即可;

但是从文件路径的正确性来说,绝对路径要比相对路径要好。

如果是在写程序来管理系统,务必使用绝对路径,因为绝对路径不管文件路径在哪,都会找到指定的文件;而相对路径如果文件移动后,就可能会存在找不到文件的情况。

与目录有关的指令

下面就来看看和目录相关的几条指令

cd

cd 就是 change directory 的缩写,这条指令能够切换当前工作目录,有下面四种切换方式

cd /路径名 # 表示切换到指定的工作目录
cd ./   # 表示切换到当前工作目录(无任何切换)
cd ..   # 表示切换到当前工作目录的上一层目录
cd ~    # 表示返回到当前用户目录

下面来演示一下这四个 cd 切换方式的操作

可以看到,分别使用 cd /usr/local 切换到了指令目录下;使用 cd ./ 没有切换任何目录;使用 cd .. 切换到了当前工作目录的上一级;使用 cd ~ 切换到了当前登录用户的默认工作目录。

这里需要注意的就是 cd ~ ,如果直接使用 cd ,切换效果和 cd ~ 一样,也就是说 "cd ~ == cd "。

pwd

上面还有一条指令是 pwd ,这个指令是最常用的指令,它的使用频率几乎和 cd 一样。

pwd 是 Print Working Directory 的缩写,它是打印出当前所在目录的指令。

但是 pwd 不一定只用于显示当前工作路径,它还可以用来显示指定工作目录下的文件路径

mkdir

mkdir 用于创建新目录,它是 make directory 的缩写,一般来说,它后面会跟着两个参数。

  • -m :设置文件的权限,直接设置,不用考虑默认文件的创建权限
  • -p :递归创建目录

在 /tmp 文件目录下创建了一个叫做 test1 的空目录,并打印出了当前的工作目录。

如果想要创建不想让其他用户访问的目录,可以使用下面的命令

mkdir -m 711 test2

ls -ld 列出文件目录的详细信息,可以看到,详细信息最前面的是文件的权限。

一个一个创建目录太麻烦了,现在想要快速创建这些目录,比如想要创建 /test1/test2/test3/test4 这种目录格式,使用了下面代码

mkdir test1/test2/test3/test4

Linux 会提出不能使用这种创建方式。

此时就需要 -p 这个参数的出现了,这个参数能够允许递归创建目录,如下所示

只不过使用 -p 这种方式并不推荐使用,因为很容易打错字。

rmdir

rmdir 用于删除空目录,它的使用和 mkdir 非常类似,mkdir -p 用于递归创建目录,同样的,rmdir -p 也能够递归删除目录。

这里需要注意,rmdir 只是删除空目录,这也意味着目录里面有内容的话是无法删除的,那该如何删除呢?可以直接使用 rm -r 来进行删除。

mv

使用 mv 能够修改目录的名称,比如创建了一个叫做 test 的目录,后来觉得这个目录无法体现出来它的所有者,想要改一下它的名字,这时候就可以使用 mv 指令就可以修改。

在了解完基本的目录操作之后,下面来想一个问题,为什么能够在各种目录下执行 ls 指令都能够显示内容?按理说 ls 不应该只是在其存放路径下才能够使用吗?

首先大家需要先了解一个 PATH 的概念,PATH 是环境变量,当在执行一条指令的时候,首先系统会按照 PATH 的设置去每个 PATH 下搜寻文件名为 ls 的可执行文件,如果有多个可执行文件,那么优先搜索到的先被执行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/788600.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文阅读RangeDet: In Defense of Range View for LiDAR-based 3D Object Detection

文章目录 RangeDet: In Defense of Range View for LiDAR-based 3D Object Detection问题笛卡尔坐标结构图Meta-Kernel Convolution RangeDet: In Defense of Range View for LiDAR-based 3D Object Detection 论文:https://arxiv.org/pdf/2103.10039.pdf 代码&…

数据结构初阶:顺序表和链表

线性表 线性表 ( linear list ) 是 n 个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使 用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串 ... 线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的, 线性…

Python读取Excel根据每行信息生成一个PDF——并自定义添加文本,可用于制作准考证

文章目录 有点小bug的:最终代码(无换行):有换行最终代码无bug根据Excel自动生成PDF,目录结构如上 有点小bug的: # coding=utf-8 import pandas as pd from reportlab.pdfgen import canvas from reportlab.lib.pagesizes import letter from reportlab.pdfbase import pdf…

linux通过进程pid查询容器docker

我遇到的问题是在docker中启动了进行,占用显卡,如下nvidis-smi查看: 现在要查询pid16325属于哪个容器ID,指令: ps -e -o pid,cmd,comm,cgroup | grep 16325查到如下结果,其中12:cpuset:/docker/ 后面的 8…

js实现websocket断线重连功能

在项目开发中我们可能经常要使用websocket技术,当连接发生断线后,如果不进行页面刷新将不能正常接收来自服务端的推送消息。为了有效避免这种问题,我们需要在客户端做断线重连处理。当网络或服务出现问题后,客户端会不断检测网络状…

玩转ChatGPT:Kimi测评(科研写作)

一、写在前面 ChatGPT作为一款领先的语言模型,其强大的语言理解和生成能力,让无数用户惊叹不已。然而,使用的高门槛往往让国内普通用户望而却步。 最近,一款由月之暗面科技有限公司开发的智能助手——Kimi,很火爆哦。…

Linux基础篇:VMware centos7虚拟机网络配置——桥接模式

VMware centos7虚拟机网络配置——桥接模式 1 搞清楚什么是桥接模式 桥接模式允许虚拟机直接连接到物理网络,就像它是物理网络中的一个独立设备一样。在这种模式下,虚拟机将具有与宿主机相同网络中的其他设备相同的网络访问权限。虚拟机将获得一个独立…

Navicat for MySQL 15免费注册方法

一、效果图如下: 注:此方法仅用于非商业用途,请勿传播,否则后果自负。 二、下载安装 下载安装包,分为32位和6位,下载文件名:Navicat for MySQL 15.zip(https://download.csdn.net/…

Flutter 开发学习笔记(4):widget布局容器学习

文章目录 前言相关链接Widget 有状态和无状态Flutter 代码风格去掉烦人的括号后缀提示代码缩进 Flutter 布局最简单的布局widgets和Material widgets Dark语法习惯Flutter 布局默认布局Center居中Padding 填充Align对齐默认居中顶部底部右上角 通用 WidgetContainer处于性能原因…

K8S Pod 的生命周期

本文会介绍 1个 POD 从启动到被关闭删除, 有什么事情发生, 和有什么组件被参与进来 容器环境初始化阶段 apiserver 接受到创建容器的指令时, 在构建容器之前会有一些环境的设置阶段, 例如node 选择, image 镜像下载等…

路由和远程访问是什么?

路由和远程访问在现代互联网时代中,扮演着至关重要的角色。它们为我们提供了便捷的信息传递途径,让不同地区的电脑、设备以及人们之间能够轻松进行通信和交流。 对于路由来说,它是连接互联网上的各个网络的核心设备。一台路由器可以将来自不同…

【Qt】使用Qt实现Web服务器(九):EventSource+JSON实现工业界面数据刷新

1、效果 效果如下,实时刷新温度、湿度 2、源码 2.1 index.html <html><body> <!-- 页面布局,本人对HTML标签不熟悉,凑合看吧 --> <div><label for

前后端开发之——文章分类管理

原文地址&#xff1a;前后端开发之——文章分类管理 - Pleasure的博客 下面是正文内容&#xff1a; 前言 上回书说到 文章管理系统之添加文章分类。就是通过点击“新建文章分类”按钮从而在服务端数据库中增加一个文章分类。 对于文章分类这个对象&#xff0c;增删改查属于配…

PyQt ui2py 使用PowerShell将ui文件转为py文件并且将导入模块PyQt或PySide转换为qtpy模块开箱即用

前言 由于需要使用不同的qt环境&#xff08;PySide&#xff0c;PyQt&#xff09;所以写了这个脚本&#xff0c;使用找到的随便一个uic命令去转换ui文件&#xff0c;然后将导入模块换成qtpy这个通用库(支持pyside2-6&#xff0c;pyqt5-6)&#xff0c;老版本的是Qt.py(支持pysid…

Appium无线自动化实用教程

文章目录 简介核心特点工作原理使用Appium进行自动化测试的一般步骤 环境设置安装和启动Appium Server使用Node.js和npm安装Appium Server&#xff1a;启动Appium Server:命令行启动使用Appium Desktop安装和启动Appium Server&#xff1a;使用代码启动appium server 编写测试代…

Linux|centos7|postgresql数据库主从复制之异步还是同步的问题

前言&#xff1a; postgresql数据库是一个比较先进的中型关系型数据库&#xff0c;原本以为repmgr和基于repmgr的主从复制是挺简单的一个事情&#xff0c;但现实很快就给我教育了&#xff0c;原来postgresql和MySQL一样的&#xff0c;也是有异步或者同步的复制区别的 Postgre…

vivado 面向 7 系列器件的 AES 密钥编程

要将 AES 密钥编程到 BBR 中 &#xff0c; 请在“硬件 (Hardware) ”窗口中右键单击 FPGA 器件并选中“ Program BBR Key ”。 在“ BBR 密钥编程 (Program BBR Key) ”对话框中 &#xff0c; 输入文件名或者浏览至目标文件以指定 AES 密钥文件 ( .nky ) 。指 定有效的 .n…

4.2学习总结

解题思路 遍历初始整数的全排列,然后计算每一个排列与原排列的的步数找到花费的最小值就行了 代码 #include <iostream> #include <cstdio> #include <fstream> #include <algorithm> #include <cmath> #include <deque> #include <…

Qt 使用QPropertyAnimation动画效果的图片浏览器

文章目录 效果图功能点代码解析图片切换显示与动画效果图片缩放 总结 效果图 功能点 加载指定路径下的所有图片并显示滑动滑动条查看指定图片&#xff0c;也滚轮切换图片滑动条缩略图加入动画效果图片可以进行缩放移动查看 代码解析 整体来说相对&#xff0c;显示图片的是一…

Apache Paimon实时数据糊介绍

Apache Paimon 是一种湖格式,可以使用 Flink 和 Spark 构建实时 数据糊 架构,用于流式和批处理操作。Paimon 创新地将湖格式和 LSM(日志结构合并树)结构相结合,将实时流式更新引入湖架构中。 Paimon 提供以下核心功能: 实时更新: 主键表支持大规模更新的写入,具有非常…