在Linux系统中,文件系统的层次结构严格遵循Filesystem Hierarchy Standard(FHS)规范,根目录 / 作为整个文件系统的"基石",承载着系统运行、软件部署和数据存储的核心功能。每个子目录都有明确的职责划分,理解其背后的设计逻辑和实际用途,是运维工程师高效管理系统、开发者顺利部署项目的必备技能。本文将从功能原理、实战场景和最佳实践三个维度,全面拆解根目录下核心文件夹的奥秘。
一、基础命令与系统管理:/bin 与 /sbin
核心功能
- /bin:全称binary,存放所有用户(包括普通用户和管理员)都能执行的基础命令,这些命令是系统启动和单用户模式下必需的核心工具,确保系统最基本的操作能力。常见命令如目录查看
ls、文件复制cp、移动mv、删除rm、shell解释器bash等,均位于此目录。 - /sbin:全称system binary,存储仅管理员(root用户)可执行的系统管理命令,主要用于系统配置、硬件管理和服务控制。例如磁盘分区工具
fdisk、系统服务管理systemctl、防火墙配置iptables、网络配置ifconfig等关键命令。
设计逻辑
这两个目录的分离体现了Linux的权限分级思想:基础操作命令对所有用户开放,确保普通用户能完成日常工作;而系统级管理命令则限制管理员使用,避免误操作导致系统故障。此外,它们在系统启动过程中会被优先加载,即使在没有挂载其他分区的单用户模式下,也能提供核心操作能力。
实战场景与最佳实践
- 脚本开发规范:在编写Shell脚本时,建议使用绝对路径调用命令(如
/bin/bash而非bash、/usr/bin/python3而非python3),避免因环境变量配置错误导致脚本执行失败。例如:
#!/bin/bash
# 推荐使用绝对路径调用命令
/bin/echo "开始执行部署脚本"
/usr/bin/git pull
- 权限控制技巧:通过
chmod命令严格控制/sbin下工具的执行权限,确保普通用户无法修改系统关键配置。例如禁止普通用户执行iptables:
chmod 700 /sbin/iptables
- 命令缺失排查:若系统提示"command not found",可通过
whereis或which命令查找命令路径,确认是否位于/bin或/sbin目录,若缺失可通过系统包管理器(如apt、yum)重新安装对应软件包。
二、系统配置中心:/etc
核心功能
/etc 目录是Linux系统的配置中枢,存放所有全局配置文件和服务配置文件,涵盖网络配置、用户认证、服务参数、软件配置等方方面面。无论是系统级别的基础配置,还是第三方软件的个性化设置,几乎都能在此找到对应的配置文件。
关键配置文件与目录
- 系统基础配置:
/etc/profile(全局环境变量)、/etc/passwd(用户账户信息)、/etc/group(用户组信息)、/etc/fstab(分区挂载配置)、/etc/hosts(本地DNS映射)。 - 网络配置:
/etc/network/interfaces(网络接口配置,Debian系)、/etc/sysconfig/network-scripts/(网络接口配置,RHEL系)、/etc/resolv.conf(DNS服务器配置)。 - 服务配置:
/etc/nginx/(Nginx服务配置)、/etc/mysql/(MySQL数据库配置)、/etc/systemd/(systemd服务配置)、/etc/httpd/(Apache服务配置)。
实战场景与最佳实践
-
Nginx高级配置:
- 主配置文件
/etc/nginx/nginx.conf用于定义全局参数(如工作进程数、连接数限制、日志格式)。 - 虚拟主机配置建议放在
/etc/nginx/conf.d/目录下,每个站点单独创建.conf文件(如blog.conf、api.conf),Nginx会自动加载该目录下的所有配置文件,便于管理和维护。 - 配置示例:
# /etc/nginx/conf.d/blog.conf server { listen 80; server_name blog.example.com; root /var/www/blog; access_log /var/log/nginx/blog_access.log; error_log /var/log/nginx/blog_error.log; } - 主配置文件
-
MySQL安全加固:
- 编辑主配置文件
/etc/mysql/my.cnf(或/etc/my.cnf),配置安全参数:- 设置字符集:
character-set-server = utf8mb4 - 限制连接数:
max_connections = 1000 - 启用慢查询日志:
slow_query_log = 1、slow_query_log_file = /var/log/mysql/slow.log、long_query_time = 2(查询超过2秒记录)
- 设置字符集:
- 配置完成后,通过
systemctl restart mysql重启服务生效,定期查看慢查询日志优化SQL语句。
- 编辑主配置文件
-
全局环境变量配置:
- 在
/etc/profile中添加全局环境变量(对所有用户生效),例如设置Java环境变量:
export JAVA_HOME=/opt/java/jdk1.8.0_301 export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar- 执行
source /etc/profile使配置立即生效,若需针对单个用户配置,可在用户家目录的.bashrc或.bash_profile中添加。
- 在
三、用户数据存储区:/home
核心功能
/home 目录是Linux系统为每个普通用户分配的独立存储空间,每个用户都有一个与用户名同名的子目录(如 /home/zhangsan、/home/dev),用于存储个人文件、个性化配置、工作项目等数据。用户对自己家目录下的文件拥有完全控制权,其他用户若无授权则无法访问,实现了用户数据的隔离与安全。
关键文件与目录
- 个性化配置文件:每个用户家目录下会默认生成一系列隐藏配置文件(以
.开头),如.bashrc(bash终端配置)、.bash_profile(用户登录配置)、.vimrc(vim编辑器配置)、.ssh(SSH密钥配置)等。 - 应用数据目录:许多应用会在用户家目录下创建专属数据目录,如
.m2(Maven配置与仓库)、.npm(npm包缓存)、.gitconfig(Git全局配置)等。
实战场景与最佳实践
-
代码管理与开发环境:
- 开发者可在自己的家目录下克隆Git仓库、创建项目目录,避免权限问题影响开发。例如:
# 克隆项目仓库 git clone https://github.com/example/project.git /home/dev/project # 创建虚拟环境(Python) python3 -m venv /home/dev/venv/project-venv # 激活虚拟环境 source /home/dev/venv/project-venv/bin/activate- 配置Git全局信息,仅对当前用户生效:
git config --global user.name "Your Name" git config --global user.email "your.email@example.com"配置文件会保存在
/home/dev/.gitconfig中。 -
Maven私有仓库配置:
- 编辑用户家目录下的
/home/dev/.m2/settings.xml文件,配置私有仓库地址、认证信息等,避免修改全局配置影响其他用户:
- 编辑用户家目录下的
<settings>
<mirrors>
<mirror>
<id>private-repo</id>
<name>Private Maven Repository</name>
<url>https://repo.example.com/maven2</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
<servers>
<server>
<id>private-repo</id>
<username>dev</username>
<password>password123</password>
</server>
</servers>
</settings>
-
用户数据备份:
- 定期备份用户家目录下的关键数据(如项目代码、配置文件),可使用
tar命令打包:
# 备份用户dev的家目录数据 tar -zcvf /backup/home_dev_$(date +%Y%m%d).tar.gz /home/dev --exclude=/home/dev/.cache --exclude=/home/dev/tmp- 避免在
/home目录下存储过大文件(如数据库备份、日志文件),建议存放在/var或专门的存储分区。
- 定期备份用户家目录下的关键数据(如项目代码、配置文件),可使用
四、动态数据存储区:/var
核心功能
/var 目录专门用于存储系统运行过程中会动态变化的数据,即"variable"(可变)数据,包括日志文件、数据库数据、缓存文件、服务套接字、邮件队列等。与 /home 不同,/var 存储的是系统级或服务级的动态数据,而非用户个人数据。
关键子目录详解
- /var/log:系统和应用日志的集中存储目录,几乎所有服务的日志都会写入此处,是问题排查的核心位置。常见日志文件:
syslog/messages:系统全局日志,记录内核、服务启动/停止等关键事件。nginx/access.log/nginx/error.log:Nginx访问日志和错误日志。mysql/error.log/mysql/slow.log:MySQL错误日志和慢查询日志。secure:用户认证日志,记录登录、sudo操作等安全相关事件。
- /var/lib:应用程序的数据存储目录,许多服务会将核心数据存放在此处。例如:
mysql/:MySQL数据库的数据文件目录。redis/:Redis数据库的持久化文件目录。dpkg/(Debian系)/rpm/(RHEL系):系统包管理器的数据库目录。
- /var/cache:应用程序的缓存目录,用于存储频繁访问的数据以提高性能。例如:
apt/(Debian系)/yum/(RHEL系):包管理器的缓存目录。nginx/:Nginx的缓存文件目录。
- /var/run:存储服务运行时的PID文件(进程ID)、套接字文件等临时运行数据,系统重启后会重新创建。例如
nginx.pid、mysql.sock等。 - /var/spool:队列数据目录,如邮件队列(
mail/)、打印队列(cups/)、定时任务队列(cron/)等。
实战场景与最佳实践
-
日志分析与管理:
- 实时查看Nginx访问日志,分析用户访问行为:
tail -f /var/log/nginx/access.log # 统计Top 10访问IP awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10- 配置日志轮转:通过
/etc/logrotate.conf或/etc/logrotate.d/目录下的配置文件,设置日志轮转策略(如按大小、按时间轮转),避免日志文件过大占用磁盘空间。例如Nginx日志轮转配置:
/var/log/nginx/*.log { daily rotate 7 missingok compress delaycompress notifempty create 0640 www-data www-data sharedscripts postrotate systemctl reload nginx > /dev/null endscript } -
数据库备份与迁移:
- MySQL数据库的数据文件默认存储在
/var/lib/mysql,定期备份该目录确保数据安全:
# 停止MySQL服务 systemctl stop mysql # 备份数据文件 tar -zcvf /backup/mysql_data_$(date +%Y%m%d).tar.gz /var/lib/mysql # 启动MySQL服务 systemctl start mysql- 迁移MySQL数据时,可直接复制备份的目录到新服务器,修改权限后启动服务即可:
tar -zxvf mysql_data_20240520.tar.gz -C / chown -R mysql:mysql /var/lib/mysql systemctl start mysql - MySQL数据库的数据文件默认存储在
-
缓存清理:
- 当磁盘空间不足时,可清理
/var/cache下的缓存文件释放空间:
# 清理apt缓存(Debian系) apt clean # 清理yum缓存(RHEL系) yum clean all # 清理Nginx缓存 rm -rf /var/cache/nginx/* - 当磁盘空间不足时,可清理
五、第三方软件安装目录:/opt
核心功能
/opt 全称optional(可选),专门用于安装第三方软件、商业软件或大型闭源工具(如Docker、JDK、Redis、Tomcat等)。该目录的设计初衷是将第三方软件与系统默认安装的软件分离,避免因版本冲突、配置覆盖等问题影响系统稳定性,同时便于软件的独立管理和卸载。
设计优势
- 独立性:每个软件可在
/opt下创建独立的子目录(如/opt/redis、/opt/jdk),包含软件的所有文件(二进制文件、配置文件、数据文件),实现"一站式"管理。 - 可迁移性:由于软件所有依赖都在独立目录下,如需迁移到其他服务器,只需复制整个目录并配置环境变量即可。
- 多版本共存:可在
/opt下安装同一软件的多个版本(如/opt/jdk1.8、/opt/jdk17),通过符号链接切换默认版本,满足不同项目的需求。
实战场景与最佳实践
-
中间件部署(以Redis为例):
- 下载Redis安装包并解压到
/opt目录:
wget https://download.redis.io/releases/redis-7.2.4.tar.gz tar -zxvf redis-7.2.4.tar.gz -C /opt mv /opt/redis-7.2.4 /opt/redis- 编译安装:
cd /opt/redis make make install PREFIX=/opt/redis- 配置Redis:创建
/opt/redis/conf目录存放配置文件,修改端口、密码、持久化方式等参数:
cp /opt/redis/redis.conf /opt/redis/conf/ vi /opt/redis/conf/redis.conf # 修改关键配置 bind 0.0.0.0 port 6379 requirepass yourpassword daemonize yes dir /opt/redis/data logfile /opt/redis/logs/redis.log- 创建数据和日志目录并启动Redis:
mkdir -p /opt/redis/data /opt/redis/logs /opt/redis/bin/redis-server /opt/redis/conf/redis.conf - 下载Redis安装包并解压到
-
多JDK版本管理:
- 在
/opt/java目录下安装多个JDK版本:
# 安装JDK8 tar -zxvf jdk-8u301-linux-x64.tar.gz -C /opt/java mv /opt/java/jdk1.8.0_301 /opt/java/jdk8 # 安装JDK17 tar -zxvf jdk-17_linux-x64_bin.tar.gz -C /opt/java mv /opt/java/jdk-17 /opt/java/jdk17- 创建符号链接指定默认JDK版本:
ln -s /opt/java/jdk8 /opt/java/default- 配置环境变量(在
/etc/profile或用户.bashrc中):
export JAVA_HOME=/opt/java/default export PATH=$JAVA_HOME/bin:$PATH- 切换JDK版本时,只需修改符号链接:
rm -rf /opt/java/default ln -s /opt/java/jdk17 /opt/java/default- 验证版本:
java -version - 在
-
软件卸载:
- 由于第三方软件的所有文件都集中在
/opt对应的目录下,卸载时只需删除该目录即可,不会残留垃圾文件:
# 卸载Redis rm -rf /opt/redis # 卸载JDK8 rm -rf /opt/java/jdk8 - 由于第三方软件的所有文件都集中在
六、临时文件存储:/tmp 与 /var/tmp
核心功能
Linux系统提供了两个临时文件存储目录,用于存放程序运行过程中产生的临时数据、缓存文件、编译中间文件等,避免占用持久化存储资源。
| 目录 | 核心特点 | 生命周期 | 适用场景 |
|---|---|---|---|
/tmp |
系统级临时目录,所有用户可读写 | 系统重启后自动清理 | 短期临时文件(如用户上传的临时文件、程序运行时的缓存) |
/var/tmp |
跨重启的临时目录 | 系统重启后保留,默认按策略清理(如超过30天) | 长期临时文件(如编译中间文件、大型文件处理的临时数据) |
设计逻辑
/tmp目录通常挂载在内存中(部分系统默认配置),读写速度快,但存储空间有限,适合存储小体积、短期使用的临时文件。/var/tmp目录存储在磁盘上,存储空间更大,适合存储体积较大、需要跨重启保留的临时数据,但读写速度相对较慢。
实战场景与最佳实践
-
Web应用文件上传:
- Web应用接收用户上传的图片、文档等文件时,可先暂存到
/tmp目录,完成格式验证、压缩处理等操作后,再移动到/var/www等持久化目录,避免因用户中断上传导致文件残留:
# Python Flask示例 import os from flask import Flask, request, redirect, url_for from werkzeug.utils import secure_filename app = Flask(__name__) UPLOAD_TMP_DIR = '/tmp/uploads' UPLOAD_FINAL_DIR = '/var/www/uploads' # 创建临时上传目录 if not os.path.exists(UPLOAD_TMP_DIR): os.makedirs(UPLOAD_TMP_DIR) @app.route('/upload', methods=['POST']) def upload_file(): if 'file' not in request.files: return redirect(request.url) file = request.files['file'] if file.filename == '': return redirect(request.url) if file: filename = secure_filename(file.filename) tmp_path = os.path.join(UPLOAD_TMP_DIR, filename) file.save(tmp_path) # 处理文件(如压缩图片) process_file(tmp_path) # 移动到持久化目录 final_path = os.path.join(UPLOAD_FINAL_DIR, filename) os.rename(tmp_path, final_path) return '文件上传成功' def process_file(file_path): # 示例:图片压缩处理 pass - Web应用接收用户上传的图片、文档等文件时,可先暂存到
-
大型项目编译构建:
- 编译大型项目(如Linux内核、Java项目)时,会产生大量中间文件,占用较大存储空间,且需要跨编译过程保留,可指定
/var/tmp作为临时目录:
# 编译Linux内核,指定临时目录 make -j4 TMPDIR=/var/tmp # 编译Java项目,指定Maven临时目录 mvn clean package -Djava.io.tmpdir=/var/tmp - 编译大型项目(如Linux内核、Java项目)时,会产生大量中间文件,占用较大存储空间,且需要跨编译过程保留,可指定
-
临时文件清理策略:
- 手动清理
/tmp目录(适用于临时文件过多导致空间不足):
# 删除7天前的临时文件 find /tmp -type f -mtime +7 -delete- 配置
/var/tmp清理策略:通过/etc/cron.daily/tmpwatch(RHEL系)或/etc/cron.daily/logrotate(Debian系)配置文件,设置自动清理规则,例如:
# /etc/cron.daily/tmpwatch 配置 /usr/sbin/tmpwatch 30d /var/tmp表示清理
/var/tmp目录下30天未访问的文件。 - 手动清理
七、系统资源共享区:/usr
核心功能
/usr 全称Unix System Resources,是Linux系统中最大的目录之一,用于存储系统共享资源,包括共享库、用户级程序、文档、字体、图标等。该目录下的资源对所有用户开放,是系统正常运行和用户日常使用的重要支撑。
关键子目录详解
- /usr/bin:存放用户级的应用程序和命令,与
/bin目录的区别在于,/usr/bin下的命令非系统启动必需,是系统安装后额外提供的工具(如git、python3、gcc等)。 - /usr/sbin:存放系统管理相关的应用程序和命令,与
/sbin目录的区别在于,/usr/sbin下的命令非系统启动必需(如httpd、nginx、mysqld等服务的启动命令)。 - /usr/lib:存放应用程序的共享库文件(
.so文件),是程序运行时依赖的核心文件,类似于Windows系统的dll文件。64位系统中,32位库文件通常存放在/usr/lib32,64位库文件存放在/usr/lib64。 - /usr/local:用于存放用户自行编译安装的软件(区别于系统包管理器安装的软件),其目录结构与
/usr类似(包含bin、lib、share等子目录)。例如通过源码编译安装的软件,默认会安装到/usr/local/bin、/usr/local/lib等目录。 - /usr/share:存放共享数据,包括文档(
man手册、帮助文档)、字体(fonts)、图标(icons)、语言文件(locale)、示例配置文件等,这些数据通常不依赖于硬件架构,可在不同系统间共享。 - /usr/include:存放C/C++等编程语言的头文件,是编译程序时必需的依赖文件。
实战场景与最佳实践
-
开发依赖管理:
- Python包安装路径:通过
pip安装的Python包,默认会安装到/usr/local/lib/python3.10/site-packages(根据Python版本不同路径略有差异),可通过pip show <package_name>查看具体路径:
pip show requests # 输出示例:Location: /usr/local/lib/python3.10/site-packages- 手动指定安装路径:
pip install requests --target=/usr/lib/python3.10/site-packages - Python包安装路径:通过
-
字体安装与管理:
- 安装自定义字体(如中文字体、特殊设计字体),只需将字体文件(
.ttf、.otf格式)复制到/usr/share/fonts目录,然后更新字体缓存即可全局生效:
# 创建字体目录 mkdir -p /usr/share/fonts/custom # 复制字体文件 cp ~/Downloads/*.ttf /usr/share/fonts/custom/ # 修改权限 chmod 644 /usr/share/fonts/custom/*.ttf # 更新字体缓存 fc-cache -fv- 验证字体是否安装成功:
fc-list | grep "字体名称" - 安装自定义字体(如中文字体、特殊设计字体),只需将字体文件(
-
源码编译安装软件:
- 以安装Nginx为例,通过源码编译安装到
/usr/local/nginx目录:
# 下载源码包 wget https://nginx.org/download/nginx-1.25.4.tar.gz tar -zxvf nginx-1.25.4.tar.gz cd nginx-1.25.4 # 配置编译参数,指定安装目录 ./configure --prefix=/usr/local/nginx --with-http_ssl_module # 编译安装 make && make install # 启动Nginx /usr/local/nginx/sbin/nginx- 为方便使用,可创建符号链接到
/usr/bin目录:
ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx # 直接执行nginx命令即可 nginx -v - 以安装Nginx为例,通过源码编译安装到
八、系统启动核心:/boot
核心功能
/boot 目录是Linux系统启动的关键目录,存储系统启动过程中必需的核心文件,包括内核镜像、引导加载器(GRUB)配置文件、初始化ramdisk(临时根文件系统)等。系统启动时,BIOS/UEFI会先加载GRUB引导程序,GRUB再从 /boot 目录加载内核和初始化ramdisk,最终启动系统。
关键文件与目录
- 内核镜像文件:
vmlinuz-<kernel-version>(如vmlinuz-5.15.0-78-generic),是Linux内核的二进制镜像文件,包含系统核心功能模块。 - 初始化ramdisk文件:
initrd.img-<kernel-version>或initramfs-<kernel-version>.img,是系统启动初期的临时根文件系统,包含启动过程中必需的驱动程序和工具,用于挂载真正的根分区。 - GRUB配置文件:
/boot/grub/grub.cfg(或/boot/grub2/grub.cfg):GRUB的主配置文件,定义了启动菜单、内核路径、启动参数等。/boot/grub/menu.lst:GRUB的菜单配置文件(部分系统使用)。
- 设备树文件(嵌入式系统):
/boot/dtbs/<kernel-version>/,存放设备树(Device Tree)文件,用于描述硬件设备信息。
实战场景与最佳实践
-
内核升级与管理:
- 手动升级内核:下载新内核镜像文件和初始化ramdisk文件,复制到
/boot目录:
# 复制新内核文件 cp vmlinuz-5.15.0-80-generic /boot/ cp initrd.img-5.15.0-80-generic /boot/- 更新GRUB配置,使新内核出现在启动菜单:
# Debian系 update-grub # RHEL系 grub2-mkconfig -o /boot/grub2/grub.cfg- 重启系统,在GRUB菜单中选择新内核启动,验证是否正常运行:
uname -r # 输出新内核版本号即表示升级成功 - 手动升级内核:下载新内核镜像文件和初始化ramdisk文件,复制到
-
系统救援模式:
-
当系统内核损坏或GRUB配置错误导致无法启动时,可通过Live CD(如Ubuntu安装盘、CentOS救援盘)进入救援模式,修复
/boot目录:- 从Live CD启动,选择"Try Ubuntu without installing"(或类似选项)。
- 挂载系统根分区(假设根分区为
/dev/sda1):
mount /dev/sda1 /mnt- 挂载必要的系统目录:
mount --bind /dev /mnt/dev mount --bind /proc /mnt/proc mount --bind /sys /mnt/sys- 切换到根分区环境:
chroot /mnt- 修复GRUB或重新安装内核:
# 重新安装GRUB grub-install /dev/sda # 更新GRUB配置 update-grub # 或重新安装内核包 apt reinstall linux-image-5.15.0-78-generic- 退出chroot环境,卸载分区并重启:
exit umount /mnt/dev /mnt/proc /mnt/sys /mnt reboot
-
-
GRUB启动参数配置:
- 临时修改启动参数:系统启动时,在GRUB菜单中按
e键编辑启动项,在linux或linux16行末尾添加参数(如quiet splash nomodeset禁用显卡驱动),按Ctrl+X启动系统,该修改仅对当前启动有效。 -
永久修改启动参数:编辑GRUB配置文件
/etc/default/grub,修改GRUB_CMDLINE_LINUX或GRUB_CMDLINE_LINUX_DEFAULT字段:vi /etc/default/grub # 修改示例 GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nomodeset" -
更新GRUB配置使修改生效:
update-grub # Debian系 # 或 grub2-mkconfig -o /boot/grub2/grub.cfg # RHEL系
- 临时修改启动参数:系统启动时,在GRUB菜单中按
九、虚拟文件系统:/dev 与 /proc
核心功能
/dev 和 /proc 是Linux系统中的虚拟文件系统(Virtual File System),它们并不存储在磁盘上,而是由内核在系统运行时动态创建和维护,提供了用户空间与内核空间、硬件设备交互的接口。
/dev 目录:设备文件接口
核心功能
/dev 目录存放系统中所有硬件设备的设备文件,每个设备对应一个或多个设备文件,应用程序通过操作这些文件与硬件设备进行交互(如读取硬盘数据、打印文件、网络通信等)。设备文件分为两类:
- 块设备文件:以块为单位读写数据的设备(如硬盘、U盘、光盘),文件类型标识为
b,例如/dev/sda(第一块SCSI/SATA硬盘)、/dev/sdb1(第二块硬盘的第一个分区)。 - 字符设备文件:以字符为单位读写数据的设备(如键盘、鼠标、串口、打印机),文件类型标识为
c,例如/dev/tty1(第一个虚拟终端)、/dev/input/mouse0(鼠标设备)。 - 特殊设备文件:如
/dev/null(空设备,写入的数据会被丢弃)、/dev/zero(零设备,生成无限的空字符)、/dev/random(随机数设备)。
实战场景与最佳实践
-
硬件设备识别:
- 查看系统识别的硬盘设备:
ls -l /dev/sd* # 输出示例:brw-rw---- 1 root disk 8, 0 5月 20 10:00 /dev/sda- 查看网络接口设备:
ls -l /dev/net/tun # 输出示例:crw-rw-rw- 1 root root 10, 200 5月 20 10:00 /dev/net/tun -
设备挂载与使用:
- 挂载U盘(假设U盘设备为
/dev/sdc1):
mkdir -p /mnt/usb mount /dev/sdc1 /mnt/usb # 访问U盘数据 ls /mnt/usb # 卸载U盘 umount /mnt/usb - 挂载U盘(假设U盘设备为
-
磁盘分区管理:
- 使用
fdisk工具查看和管理磁盘分区,通过/dev/sda设备文件操作第一块硬盘:
fdisk -l /dev/sda # 输出硬盘分区信息 - 使用
/proc 目录:系统信息接口
核心功能
/proc 目录存放系统运行时的实时信息,包括进程状态、CPU信息、内存使用情况、网络状态、内核参数等。每个目录项都是一个虚拟文件,读取这些文件即可获取对应的系统信息,修改部分文件(如内核参数文件)可实时调整系统配置。
关键文件与目录
- 进程信息:每个运行中的进程对应一个以PID为名称的目录(如
/proc/1对应PID为1的init进程),目录下包含进程的命令行参数(cmdline)、环境变量(environ)、内存使用(status、statm)、打开的文件(fd)等信息。 - 系统硬件信息:
/proc/cpuinfo:CPU详细信息(型号、核心数、频率等)。/proc/meminfo:内存使用情况(总内存、空闲内存、缓存等)。/proc/diskstats:磁盘I/O统计信息。/proc/interrupts:中断控制器信息。
- 系统运行状态:
/proc/loadavg:系统负载平均值(1分钟、5分钟、15分钟负载)。/proc/uptime:系统运行时间。/proc/net/:网络相关信息(如tcp连接状态、udp端口监听等)。
- 内核参数:
/proc/sys/目录下存放内核参数,可通过修改这些文件调整系统配置(如网络参数、文件系统参数),例如/proc/sys/net/ipv4/ip_forward控制IP转发功能。
实战场景与最佳实践
-
系统性能监控:
- 查看CPU信息:
cat /proc/cpuinfo | grep "model name" # 查看CPU型号 cat /proc/cpuinfo | grep "cpu cores" # 查看CPU核心数- 查看内存使用情况:
cat /proc/meminfo | grep -E "MemTotal|MemFree|MemAvailable" # 输出示例: # MemTotal: 16384000 kB # MemFree: 8192000 kB # MemAvailable: 12288000 kB- 查看系统负载:
cat /proc/loadavg # 输出示例:0.30 0.25 0.20 1/100 12345 # 分别表示1分钟、5分钟、15分钟负载,当前运行进程数/总进程数,最近运行的进程PID -
进程状态查询:
- 查看指定PID进程的命令行参数:
cat /proc/1234/cmdline # 1234为进程PID- 查看进程打开的文件:
ls -l /proc/1234/fd- 查看进程内存使用详情:
cat /proc/1234/status -
内核参数临时调整:
- 启用IP转发功能(用于路由器、VPN服务器):
echo 1 > /proc/sys/net/ipv4/ip_forward- 调整TCP连接超时时间:
echo 300 > /proc/sys/net/ipv4/tcp_fin_timeout- 注意:通过
/proc/sys/修改的内核参数仅在当前系统运行时有效,重启后会恢复默认值。若需永久生效,需修改/etc/sysctl.conf或/etc/sysctl.d/目录下的配置文件,然后执行sysctl -p使配置生效。
除非注明,否则均为李锋镝的博客原创文章,转载必须以链接形式标明本文链接
文章评论