Linux基础第一天笔记
1.常用的Linux系统有哪些?
- 新手:Ubuntu、Linux Mint、Zorin OS。
- 企业用户:RHEL、CentOS、openSUSE Leap。
- 开发者:Fedora、Arch Linux、Manjaro。
- 游戏/娱乐:SteamOS、Deepin。
- 高级用户:Debian、Gentoo、NixOS。
2.哪些Linux系统属于国产化
(1)银河麒麟(KylinOS)
(2)统信UOS(UnionTech OS)
(3)欧拉(openEuler)
(4)Deepin(深度操作系统)
(5)中标麒麟(NeoKylin)
(6)红旗Linux(Red Flag Linux)
(7)普华Linux(i-soft)
(8)中兴新支点(New Start)
(9)龙蜥(Anolis OS)
(10)TencentOS
(11)一铭Linux(YMOS)
3.哪些系统使用yum,哪些使用apt?
(1)使用 APT(Advanced Package Tool)的系统:
APT 是 Debian 系 Linux 发行版的包管理工具,管理 .deb
格式的软件包。
发行版 | 说明 |
---|---|
Ubuntu | 最流行的 Debian 衍生版,广泛用于个人和服务器场景。 |
Debian | 最流行的 Debian 衍生版,广泛用于个人和服务器场景。 |
Linux Mint | 最流行的 Debian 衍生版,广泛用于个人和服务器场景。 |
Deepin | 国产 Linux 发行版,基于 Debian,注重美观和用户体验。 |
Elementary OS | 基于 Ubuntu,提供类似 macOS 的界面。 |
Zorin OS | 基于 Ubuntu,专为 Windows 用户设计,界面类似 Windows。 |
MX Linux | 基于 Debian,轻量级桌面系统,适合老旧硬件。 |
(2)使用 YUM(Yellowdog Updater Modified)的系统:
YUM 是 Red Hat 系 Linux 发行版的包管理工具,管理 .rpm
格式的软件包。
DNF(Dandified YUM)是 YUM 的现代替代品,用于 RHEL 8+、Fedora 22+ 等新版本。
发行版 | 说明 |
---|---|
Red Hat Enterprise Linux(RHEL) | 企业级商业发行版,长期支持(LTS)。 |
CentOS | RHEL 的免费社区版(CentOS 8 后转向 CentOS Stream)。 |
Fedora | Red Hat 赞助的社区版,技术前沿,常用于开发和测试。 |
openSUSE | 提供 Leap(稳定版)和 Tumbleweed(滚动更新版),支持 YUM/DNF。 |
Rocky Linux | RHEL 兼容的社区发行版,CentOS 8 停止维护后的替代方案。 |
AlmaLinux | 另一个 RHEL 兼容的社区发行版,与 CentOS 类似。 |
4.yum与apt有什么区别?
(1)基本概念与适用发行版
APT(Advanced Package Tool):APT 是 Debian 系 Linux 发行版的包管理工具,管理 .deb
格式的软件包。****
YUM(Yellowdog Updater Modified):YUM 是 Red Hat 系 Linux 发行版的包管理工具,管理 .rpm
格式的软件包。
(2)包格式与底层工具
APT:基于 DEB(Debian Package Manager)包管理系统,通过 APT 仓库自动解决依赖关系。
YUM:基于 RPM(Red Hat Package Manager) 包管理系统,通过 YUM 仓库自动解决依赖关系。
5.安装Linux系统,推荐Ubuntu22.04?
(1)长期支持(LTS)
支持周期:Ubuntu 22.04 LTS 提供 5 年技术支持(至 2027 年),适合需要长期稳定性的场景(如生产环境、企业服务器、开发环境)。
安全性:定期发布安全补丁和更新,降低系统漏洞风险。
(2)稳定性与性能优化
内核版本:基于 Linux Kernel 5.15(部分资料提到 6.8,需确认),对现代硬件(如 NVMe SSD、多核 CPU)支持更完善。
性能提升:优化了内存管理、磁盘 I/O 和启动速度,适合高负载任务(如开发、虚拟化、数据库服务)。
(3)软件生态丰富
预装工具:默认包含 LibreOffice、Firefox、Thunderbird 等常用软件,满足办公和开发需求。
软件源支持:提供丰富的 APT 仓库,安装第三方软件简单高效(如 sudo apt install )。
兼容性:支持 GNOME 42 桌面环境,适配触控设备和高分辨率显示器。
(4)安全增强
安全机制:默认启用 AppArmor 和 SELinux,强化应用程序隔离和权限控制。
加密支持:支持 OpenSSL v3,提升数据传输和存储的安全性。
(5)社区与商业支持
开源社区:活跃的开发者社区,问题排查和资源获取便捷。
企业支持:Canonical 提供付费技术支持(如 Ubuntu Advantage),适合企业用户。
6.Linux安装系统之后,如何使用账号密码登录,截图你登录成功的界面。
(1)本地终端登录
根据安装系统时设置的账号密码登录
(2)通过ssh远程登录
首先要查看本机的IP地址:
#管理网络接口的 IP 地址
ip addr
我这边选择的是windterm工具:
输入账户名和密码,便可以进入到ssh工具界面
7.Linux下的目录结构是什么与Windows有什么区别?
目录 | 用途 | 示例 | 特点 |
---|---|---|---|
/ | 根目录 | 所有文件系统的起点 | 无 |
/bin | 基本用户命令 | /bin/ls、 /bin/bash | 通常为/usr/bin的符号链接 |
/boot | 启动文件 | /boot/vmlinuz、 /boot/grub/grub.cfg | 系统启动依赖,勿随意删除 |
/dev | 设备文件 | /dev/sda、 /dev/null | 以文件形式表示硬件设备 |
/etc | 配置文件 | /etc/passwd、 /etc/fstab | 系统和应用程序的配置文件 |
/home | 用户主目录 | /home/user1、 /home/user2 | 每个用户有独立子目录 |
/lib | 系统库文件 | /lib/libc.so.6 | 支持/bin和/sbin中的命令 |
/lost+found | 文件恢复 | 无 | 文件系统检查时恢复损坏文件 |
/media | 可移动设备挂载 | /media/usb | 自动挂载U盘、光盘等 |
/mnt | 临时挂载点 | /mnt/data | 手动挂载硬盘分区、网络共享 |
/opt | 第三方软件 | /opt/google/chrome | 安装大型商业软件或工具 |
/proc | 虚拟文件系统 | /proc/cpuinfo、 /proc/1/status | 显示运行时系统信息 |
/root | root用户主目录 | /root/.bashrc | 仅root可访问 |
/run | 运行时数据 | /run/lock/subsys | 重启后清空,存储临时状态 |
/sbin | 系统管理命令 | /sbin/reboot、 /sbin/fdisk | 通常需root权限 |
/sys | 硬件状态 | /sys/class/net/ | 内核与硬件交互接口 |
/tmp | 临时文件 | /tmp/scratch | 重启后清空,所有用户可读写 |
/usr | 用户程序和资源 | /usr/bin、 /usr/share | 类似Windows的Program Files |
/var | 动态数据 | /var/log/syslog、 /var/spool/cron | 存储日志、缓存、队列数据 |
/
├── bin/ # 基本用户命令
├── boot/ # 启动文件
├── dev/ # 设备文件
├── etc/ # 配置文件
├── home/ # 用户主目录
│ ├── user1/ # 用户1的文件
│ └── user2/ # 用户2的文件
├── lib/ # 系统库文件
├── lost+found/ # 文件恢复
├── media/ # 可移动设备挂载点
├── mnt/ # 临时挂载点
├── opt/ # 第三方软件
├── proc/ # 虚拟文件系统
├── root/ # root 用户主目录
├── run/ # 运行时数据
├── sbin/ # 系统管理命令
├── sys/ # 硬件状态
├── tmp/ # 临时文件
├── usr/ # 用户程序和资源
│ ├── bin/ # 用户级应用程序
│ ├── lib/ # 应用程序依赖库
│ ├── include/ # 头文件(开发)
│ ├── share/ # 共享数据(字体、文档)
│ └── local/ # 本地安装的软件
└── var/ # 动态数据
├── log/ # 系统日志
├── cache/ # 应用缓存
├── spool/ # 队列数据(邮件、打印)
└── lib/ # 程序运行时数据
和Windows的区别:
特性 | Linux | Windows |
---|---|---|
目录结构 | 单一树状结构(所有文件从 / 开始) | 多根结构(如 C:\ 、D:\ ) |
路径分隔符 | 正斜杠 / | 反斜杠 \ |
大小写敏感 | 区分大小写(File.txt 不等与 file.txt) | 不区分大小写 |
权限管理 | 基于rwx权限模型(用户/组/其他) | 基于ACL(访问控制列表) |
8.Linux下如何 进入目录,创建目录,删除目录,更改目录名,移动目录
(1)进入目录 :cd
命令:cd [路径]
功能:切换当前工作目录
示例:
cd /home/user/Documents # 进入指定路径
cd .. # 返回上一级目录
cd ~ # 返回当前用户的家目录
cd - # 返回上一次所在的目录
(2)创建目录:mkdir
命令:mkdir [选项] 目录名
功能:创建新目录
常用选项:
-p
:递归创建多级目录(即使父目录不存在也会自动创建)。-m
:设置目录权限(如mkdir -m 755 secure_dir
)。
示例:
mkdir project # 创建单个目录
mkdir -p project/src # 递归创建多级目录(project/src)
(3)删除目录:rmdir
或 rm -r
命令:rmdir [目录名]或
rm -r [目录名]
功能:
-
rmdir
:仅删除空目录。 -
rm -r
:递归删除目录及其内容(需谨慎使用)。 -
rm -rf
:强制删除(不提示确认)。示例:
rmdir empty_dir # 删除空目录 rm -r non_empty_dir # 删除非空目录(会提示确认) rm -rf non_empty_dir # 强制删除非空目录(无提示)
(4)更改目录名:mv
命令:mv [原目录名] [新目录名]
功能:重命名目录(或文件)。
示例:
mv old_dir new_dir # 将 old_dir 重命名为 new_dir
(5)移动目录:mv
命令:mv [原目录路径] [目标路径]
功能:将目录移动到其他位置。
示例:
mv project /home/user/backup/ # 将 project 目录移动到 /home/user/backup/
(6)实际场景示例
场景 1:创建项目目录结构
mkdir -p project/{src,docs,tests} # 创建 src、docs、tests 子目录
场景 2:清理旧目录
rm -rf /tmp/old_project # 删除 /tmp 下的旧项目目录
场景 3:重命名并移动目录
mv project new_project # 重命名目录
mv new_project /home/user/backup/ # 移动到备份目录
9.Linux下如何 查看文件,删除文件,更改文件名,移动文件
(1)查看文件内容
命令 | 功能 | 示例 |
---|---|---|
cat | 显示文件的全部内容(适合小文件) | cat file.txt |
more | 分页查看文件内容(按空格翻页,按 q 退出)。 | more large_file.txt |
less | 分页查看文件内容(支持上下键滚动,按 q 退出)。 | less big_file.log |
head | 显示文件前几行(默认 10 行)。 | head file.txt |
tail | 显示文件后几行(默认 10 行,实时查看日志时常用 -f )。 | tail -n 20 file.txt tail -f log.txt |
注意事项:
cat
适合查看小文件,大文件可能导致终端卡顿。less
比more
更灵活(支持上下滚动)。tail -f
可实时监控日志文件更新。
(2)删除文件
命令:rm [文件名]
功能: 删除文件或目录(需谨慎使用)
常用选项:
-i
:删除前提示确认(避免误删)-f
:强制删除(不提示确认)-v
:显示删除过程(verbose模式)
示例:
rm file.txt # 删除单个文件
rm -i *.txt # 删除当前目录下所有 .txt 文件(需确认)
rm -rf directory/ # 强制删除目录及其内容(危险操作!)
注意事项
-
rm -rf /
是毁灭性操作,绝对不能执行! -
删除文件前建议先用
ls
确认路径和文件名。 -
若权限不足,可使用
sudo
提权:sudo rm -rf directory/
(3)更改文件名
命令:mv [原文件名] [新文件名]
功能:重命名文件或目录
示例:
mv old_name.txt new_name.txt # 将 old_name.txt 重命名为 new_name.txt
mv file.txt /path/to/new_directory/ # 移动并重命名文件
注意事项
- 使用通配符(如
*.txt
)时,确保目标路径存在。 - 移动目录时,目录内容会一并移动。
(4)常见问题与技巧
场景1:误删文件怎么办?
Linux 默认没有回收站,删除后无法恢复!建议:
- 使用
rm -i
确认删除。 - 对重要文件定期备份。
场景2:查找文件后直接操作
结合 find
和 xargs
批量处理文件:
find /path/to/search -name "*.log" -exec rm -f {} \; # 删除所有 .log 文件
场景3:查看文件类型
使用 file
命令判断文件类型:
file file.txt # 显示文件类型(如 ASCII text)
场景4:文件权限问题
若无法操作文件(如删除或重命名),检查权限:
ls -l file.txt # 查看文件权限
chmod +w file.txt # 添加写权限
10.Linux下如何编辑文件。
(1)使用vi
或vim
编辑器
vi
是 Linux 最经典的文本编辑器,vim
是其增强版,功能更强大。适合命令行环境和高级用户。
基本操作流程:
- 打开文件
vi 文件名 # 例如:vi example.txt
如果文件不存在,会创建新文件
- 切换到插入模式
按键i
(insert)进入插入模式,此时可编辑文本。
其他进入插入模式的按键:
a
:在当前光标后插入
o
:在当前行下方插入新行
-
保存并退出
按
Esc
退出插入模式,进入命令模式。输入以下命令并按回车:
:wq
:保存并退出
:q!
:强制退出(不保存)
:w
:仅保存
:q
:仅退出(文件未修改时) -
常用快捷键
操作 快捷键 删除当前行 dd
复制当前行 yy
粘贴 p
查找关键字 /关键字
撤销操作 u
显示行号 :set nu
移动到文件末尾 G
移动到文件开头 gg
(2)其他编辑器
编辑器 | 特点 | 适用场景 |
---|---|---|
vi/vim | 功能强大,适合命令行环境 | 高级用户、服务器管理 |
nano | 简单易用,适合新手 | 快速编辑小型文件 |
gedit | 图形化界面,操作直观 | 图形桌面环境下的日常编辑 |
emacs | 功能丰富,支持插件和自定义 | 高级编程和文本处理 |
(3)实际场景示例
场景 1:修改系统配置文件
sudo vi /etc/ssh/sshd_config # 修改 SSH 配置
场景 2:快速编辑日志文件
nano /var/log/syslog # 查看并临时修改日志(谨慎操作!)
场景 3:批量替换文本
使用 vim
替换文件中的所有 old
为 new
:
vim 文件名
在vim
命令模式下输入:
:%s/old/new/g
:wq
11.Linux的Tab键有什么用,按1次和按2次有什么区别,对应什么场景
在 Linux 命令行中,Tab 键是提升效率的重要工具,主要用于自动补全命令、路径、参数等。
(1)按 1 次 Tab 键的作用
功能:
自动补全唯一匹配项:如果当前输入的内容只有一个可能的匹配项,系统会直接补全整个内容。
无操作(无匹配时):如果当前输入的内容没有唯一匹配项,按 1 次 Tab 键不会有任何反应。
适用场景:
命令补全:输入部分命令后,按 Tab 键自动补全完整命令。
示例:
ls /etc/pa[TAB] # 自动补全为 `ls /etc/passwd`(假设只有唯一匹配)
路径补全:输入路径的一部分后,按 Tab 键补全完整路径。
示例:
cd /ho[TAB] # 自动补全为 `cd /home/`
2. 按 2 次 Tab 键的作用
功能:
- 列出所有可能的匹配项:如果当前输入的内容存在多个匹配项,按 2 次 Tab 键会列出所有可能的选项,方便用户选择。
适用场景:
命令补全:输入部分命令后,按 2 次 Tab 键查看所有可能的命令。
示例:
ls /etc/p[TAB][TAB] # 显示所有以 `/etc/p` 开头的命令或文件(如 `passwd`、`php.ini` 等)
路径补全:输入路径的一部分后,按 2 次 Tab 键列出所有匹配的目录或文件。
示例:
cd /u[TAB][TAB] # 显示所有以 `/u` 开头的路径(如 `/usr`、`/users` 等)
(3)实际使用场景
场景 1:快速补全命令
vi /etc/ap[TAB] # 如果只有 `apache2` 匹配,补全为 `/etc/apache2`
- 按 1 次 Tab:直接补全为
/etc/apache2
。 - 按 2 次 Tab:列出所有以
/etc/ap
开头的路径(如/etc/apt/
、/etc/apparmor/
等)。
场景 2:处理长路径
cd /home/user/do[TAB] # 补全为 `/home/user/documents/`
- 按 1 次 Tab:直接补全路径。
- 按 2 次 Tab:列出所有以
/home/user/do
开头的目录(如documents/
、downloads/
等)。
场景 3:补全参数或选项
git st[TAB][TAB] # 列出所有以 `st` 开头的 Git 命令(如 `status`、`stash`)
(4)常见问题与技巧
问题 1:Tab 键不起作用
原因:终端模拟器设置问题、Shell 配置冲突(如 .bashrc
中禁用了补全功能)。
解决方法:
- 检查终端设置,确保未禁用 Tab 补全。
- 重启终端或运行
source ~/.bashrc
重新加载配置。
问题 2:补全选项过多
解决方法:
- 按 2 次 Tab 查看所有选项。
- 输入更多字符后再按 Tab(逐步缩小匹配范围)。
技巧:
-
通配符补全:输入
*.txt
后按 Tab,系统会列出所有.txt
文件。rm file[TAB] # 补全为 `file1.txt`(如果有唯一匹配)
12.如何查看一个目录的大小
(1) 基本用法
1.查看目录的总大小
du -sh /path/to/directory
参数解释:
-s
:汇总模式,只显示目录的总大小(不列出子目录的大小)。-h
:以易读的格式显示大小(如 KB、MB、GB)。/path/to/directory
:替换为实际的目录路径。
示例:
du -sh /home/user/data
输出可能为:
2.3G /home/user/data
2.查看目录及其子目录的详细大小
du -h /path/to/directory
- 功能:列出目录下每个文件和子目录的大小。
示例:
du -h /home/user/data
输出可能为:
1.5M /home/user/data/file1.txt
2.0M /home/user/data/subdir1
3.5G /home/user/data/subdir2
(2)高级用法
1.递归查看并按大小排序
du -ah /path/to/directory | sort -h
- 功能:列出目录下的所有文件和子目录,并按从小到大的顺序排序。
示例:
du -ah /home/user/data | sort -h
2.从大到小排序
du -ah /path/to/directory | sort -hr
- 功能:列出目录下的所有文件和子目录,并按从大到小的顺序排序。
示例:
du -ah /home/user/data | sort -hr
(3)其他方法
1.使用 ls
和 awk
计算当前目录下所有文件的大小总和
ls -l | awk '{sum += $5} END {print sum}'
- 功能:仅计算当前目录下所有文件的大小总和(不包括子目录)。
2.使用 ncdu
工具(交互式磁盘使用分析)
安装 ncdu
:
-
Ubuntu/Debian:
sudo apt install ncdu
-
CentOS/RHEL:
sudo yum install ncdu
运行 ncdu
:
ncdu /path/to/directory
- 功能:交互式查看目录大小,并支持快速导航和删除操作。
(4)常见问题及解决方法
问题 1:权限不足
-
现象:无法访问某些受保护的目录。
-
解决方法:使用
sudo
提权。sudo du -sh /path/to/protected_directory
问题 2:目录结构复杂导致 du
运行缓慢
-
解决方法:限制递归深度(
--max-depth
参数)。du -h --max-depth=1 /path/to/directory
问题 3:排除特定文件或目录
-
解决方法:使用
--exclude
参数。du -sh --exclude='*.log' /path/to/directory
13.如何查看一个文件的大小
(1)使用 ls
命令(查看文件的实际内容大小)
基本语法:
ls -l 文件路径
-
默认单位:字节(Byte)
-
示例:
ls -l /etc/passwd
输出:
-rw-r--r-- 1 root root 1234 May 10 14:30 /etc/passwd
- 第5列(
1234
)表示文件的实际大小(字节)。
- 第5列(
以人类可读格式显示大小:
ls -lh 文件路径
-
示例:
ls -lh /etc/passwd
输出:
-rw-r--r-- 1 root root 1.2K May 10 14:30 /etc/passwd
1.2K
表示文件大小为 1.2 千字节。
2. 使用 du
命令(查看文件的磁盘占用空间)
基本语法:
du -b 文件路径
-
功能:显示文件占用的磁盘空间(以字节为单位)。
-
示例:
du -b /etc/passwd
输出:
4096 /etc/passwd
4096
表示文件占用 4096 字节(即使文件实际内容只有 1234 字节,也可能因文件系统块大小而占用更多空间)。
以人类可读格式显示磁盘占用空间:
du -h 文件路径
-
示例:
du -h /etc/passwd
输出:
4.0K /etc/passwd
3. 使用 stat
命令(查看文件的详细信息)
基本语法:
stat 文件路径
-
功能:显示文件的元数据,包括实际大小、磁盘占用块数等。
-
示例:
stat /etc/passwd
输出:
File: /etc/passwd Size: 1234 Blocks: 8 IO Block: 4096 regular file ...
Size
:文件的实际内容大小(字节)。Blocks
:文件占用的磁盘块数(每个块通常为 512 字节或 4096 字节)。
仅显示文件的实际大小:
stat -c "%s" 文件路径
-
示例:
stat -c "%s" /etc/passwd
输出:
1234
4. 其他方法
使用 wc
命令(统计文件内容的字节数)
wc -c 文件路径
-
功能:仅统计文件内容的字节数。
-
示例:
wc -c /etc/passwd
输出:
1234 /etc/passwd
命令对比与选择建议
命令 | 显示内容 | 适用场景 | 优势 |
---|---|---|---|
ls -l | 文件的实际内容大小(字节) | 快速查看单个文件大小 | 简洁直观,支持 -h 人类可读格式 |
du -b | 文件占用的磁盘空间(字节) | 分析存储占用(如小文件优化) | 反映真实磁盘消耗 |
stat | 实际大小 + 磁盘占用块数 | 调试文件系统行为 | 信息全面,支持定制输出 |
wc -c | 文件内容的字节数 | 脚本中精确获取大小 | 输出纯净,易于程序解析 |
注意事项
- 权限问题:
查看系统文件时可能需要sudo
权限,例如:
sudo du -h /root/file
- 实际大小 vs 磁盘占用:
实际大小(ls
/stat
/wc
):文件的真实内容大小。
磁盘占用(du
):受文件系统块大小影响,小文件可能占用更多空间。
例如:1 字节的文件可能占用 4KB 的磁盘空间(默认块大小为 4KB)。
- 文件路径含空格:
若文件路径包含空格,需用引号或反斜杠转义:
ls -l "文件 名"
# 或
ls -l 文件\ 名
14.如何查看系统磁盘的大小
(1)使用 df
命令(查看已挂载磁盘的使用情况)
基本语法:
df -h
功能:以人类可读的格式(如 GB、MB)显示已挂载磁盘的总容量、已用空间、可用空间及使用百分比。
示例输出:
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 20G 15G 4.0G 78% /
tmpfs 3.9G 0 3.9G 0% /dev/shm
/dev/sdb1 100G 60G 40G 60% /data
- Size:磁盘总容量。
- Mounted on:挂载点路径。
其他常用选项:
-
查看特定文件系统类型:
df -t ext4 # 仅显示 ext4 文件系统
-
排除特定文件系统类型:
df -x tmpfs -x devtmpfs # 排除 tmpfs 和 devtmpfs
-
汇总所有磁盘的总容量:
df -h --total
(2)使用 fdisk
命令(查看磁盘和分区的详细信息)
基本语法:
sudo fdisk -l
功能:列出所有磁盘及其分区的详细信息,包括总大小、分区表类型、起始和结束扇区等。
示例输出:
Disk /dev/sda: 21.5 GB, 21474836480 bytes, 41943040 sectors
Disk /dev/sdb: 107.4 GB, 107374182400 bytes, 209715200 sectors
- Disk /dev/sda:磁盘名称及总大小(如 21.5 GB)。
适用场景:
- 查看未挂载的磁盘或分区信息。
- 分析磁盘的分区表结构(如 MBR 或 GPT)。
(1)使用 lsblk
命令(列出块设备信息)
基本语法:
lsblk
功能:以树状结构显示磁盘、分区及挂载点信息。
示例输出:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 21.5G 0 disk
└─sda1 8:1 0 20.5G 0 part /
sdb 8:16 0 107.4G 0 disk
└─sdb1 8:17 0 107.4G 0 part /data
- SIZE:磁盘或分区的大小。
- MOUNTPOINT:挂载点路径。
扩展功能:
-
显示文件系统类型和挂载点:
lsblk -f
4. 使用 parted
命令(高级分区工具)
基本语法:
sudo parted -l
功能:列出所有磁盘的分区信息,包括总大小、分区类型和文件系统。
示例输出:
Disk /dev/sda: 21.5GB
Disk /dev/sdb: 107.4GB
(5)查看未挂载磁盘的总大小
如果某些磁盘未挂载,可以结合 fdisk
和 lsblk
查看:
lsblk | grep disk
-
示例输出:
sda 8:0 0 21.5G 0 disk sdb 8:16 0 107.4G 0 disk
(6)图形化工具(适用于桌面环境)
- GNOME 桌面环境:
- 打开应用程序菜单,搜索并运行 “磁盘” 工具。
- 以图形界面查看磁盘分区、总大小、已用空间等信息。
(6)命令对比与选择建议
命令 | 适用场景 | 优势 |
---|---|---|
df -h | 快速查看已挂载磁盘的使用情况 | 简单直观,支持人类可读格式 |
fdisk -l | 查看磁盘和分区的详细信息 | 显示分区表类型和扇区信息 |
lsblk | 列出磁盘和分区的树状结构 | 输出清晰,支持文件系统类型和挂载点 |
parted -l | 高级分区信息分析 | 支持大容量磁盘(如 GPT 分区) |
注意事项
- 权限问题:
fdisk
和parted
需要sudo
权限。- 普通用户使用
df
和lsblk
通常无需权限。
- 磁盘大小单位:
df
的Size
列默认以 1K 块为单位,使用-h
参数后自动转换为 GB/MB。fdisk
和parted
以字节(bytes)为单位显示磁盘大小。
- 未挂载磁盘:
- 未挂载的磁盘在
df
中不会显示,需通过fdisk
或lsblk
查看。
- 未挂载的磁盘在
15.Linux中进程是什么
在 Linux 系统中,进程(Process) 是操作系统进行资源分配和调度的基本单位。它是程序在内存中的一次动态执行过程,包含程序代码、数据、运行状态及系统资源(如内存、文件描述符等)。
(1)进程的核心概念
-
程序 vs 进程:
- 程序:是静态的指令集合(如存储在磁盘上的可执行文件)。
- 进程:是程序的运行实例,是动态的,占用系统资源(CPU、内存、I/O 等)。
例如:
/bin/ls
是程序,运行ls
命令时会创建一个对应的进程。 -
进程的唯一标识符(PID):
- 每个进程都有唯一的 进程 ID(PID),由内核分配,用于标识和管理进程。
- 父进程的 PID 称为 PPID(Parent Process ID)。
-
进程控制块(PCB):
-
进程的信息通过 PCB(Process Control Block) 存储,Linux 中的 PCB 是
task_struct
结构体。 -
task_struct
包含以下关键信息:
- 状态:进程的当前状态(运行、睡眠、停止等)。
- 资源分配:内存地址、打开的文件、信号处理方式等。
- 优先级:Nice 值(-20 到 19,值越低优先级越高)。
- 调度信息:进程的调度策略和上下文切换数据。
-
(2)进程的状态
Linux 进程可能处于以下状态之一(可通过 ps
或 top
查看):
状态 | 含义 |
---|---|
R | 可运行(Running):进程正在运行或等待 CPU 调度。 |
S | 可中断睡眠(Sleeping):进程等待某个事件(如 I/O 完成),可被信号中断。 |
D | 不可中断睡眠(Uninterruptible Sleep):进程等待关键资源(如磁盘 I/O),不能被信号中断。 |
T | 停止(Stopped):进程被暂停(如收到 SIGSTOP 信号)。 |
Z | 僵尸(Zombie):进程已终止,但父进程未回收其资源。 |
X | 退出(Dead):进程即将被销毁(通常不可见)。 |
(3)进程的分类
- 交互式进程:
- 由用户直接启动(如终端中运行的
vim
或bash
)。 - 需要与用户交互,响应时间敏感。
- 由用户直接启动(如终端中运行的
- 批处理进程:
- 在后台运行,不与用户直接交互(如定时任务
cron
)。 - 通常按计划执行,对响应时间要求较低。
- 在后台运行,不与用户直接交互(如定时任务
- 守护进程(Daemon):
- 系统启动时运行的后台进程(如
sshd
、nginx
)。 - 无控制终端,提供系统服务。
- 系统启动时运行的后台进程(如
(4)进程的创建与管理
-
创建进程:
- 使用
fork()
系统调用复制当前进程,生成子进程。 - 子进程通过
exec()
系列函数加载新的程序代码。
- 使用
-
进程调度:
- 内核通过调度器(Scheduler)分配 CPU 时间片。
- 支持多种调度策略(如
SCHED_FIFO
、SCHED_RR
)。
-
进程优先级:
-
通过 Nice 值 调整优先级(范围 -20 到 19)。
-
使用
nice
和renice
命令设置优先级:nice -n 5 ./myprogram # 启动进程,Nice 值为 5(优先级较低) renice -10 -p 1234 # 修改 PID 为 1234 的进程优先级为 -10
-
(5)查看和管理进程的常用命令
命令 | 功能 |
---|---|
ps | 查看当前进程快照(如 ps -ef 或 ps aux )。 |
top / htop | 实时监控进程资源使用情况(CPU、内存等)。 |
kill | 向进程发送信号(如 kill -9 PID 强制终止进程)。 |
pkill | 根据名称终止进程(如 pkill nginx )。 |
pgrep | 根据名称查找进程 PID(如 pgrep sshd )。 |
pstree | 以树状结构显示进程层级关系。 |
(6)进程与线程的关系
- 进程:拥有独立的地址空间和资源(如内存、文件描述符)。
- 线程:同一进程内的执行单元,共享进程的资源,但拥有独立的栈和寄存器。
- Linux 中的线程:通过
pthread
库实现,本质上是轻量级进程(Lightweight Process)。
(7)进程的生命周期
- 创建:通过
fork()
和exec()
生成。 - 运行:占用 CPU 执行代码。
- 等待:因 I/O 或资源阻塞进入睡眠状态。
- 终止:通过
exit()
或信号结束,进入僵尸状态。 - 清理:父进程调用
wait()
回收资源。
示例:查看进程信息
# 查看当前终端的进程
ps -o pid,ppid,cmd,%cpu,%mem --sort -%cpu
# 实时监控进程资源
top
# 查看指定进程的详细信息
cat /proc/1234/status # 1234 是进程的 PID
16.如何查看哪个进程占用CPU最高
方法 1:使用 top
命令
top
是 Linux 最常用的实时进程监控工具,默认按 CPU 使用率排序。
步骤:
-
运行
top
命令:top
-
按 CPU 使用率排序:
- 在
top
界面中按下键盘上的P
(大写),进程列表会按 CPU 使用率从高到低排序。 - 最上方的进程即为当前占用 CPU 最高的进程。
- 在
-
退出
top
:- 按
q
或Ctrl + C
退出。
- 按
关键字段解释:
- %CPU:进程占用的 CPU 百分比。
- PID:进程 ID。
- COMMAND:启动进程的命令名称。
方法 2:使用 htop
命令(增强版 top
)
htop
提供更友好的交互界面和更直观的进程管理功能。
步骤:
-
安装
htop
(如未安装):sudo apt install htop # Debian/Ubuntu sudo yum install htop # CentOS/RHEL
-
运行
htop
:htop
-
按 CPU 使用率排序:
- 默认按 CPU 使用率排序,占用最高的进程会显示在顶部。
- 可通过鼠标点击表头(如
%CPU
)调整排序方式。
优势:
- 支持颜色标记、垂直/水平滚动。
- 可直接通过鼠标选择进程并操作(如终止、调整优先级)。
方法 3:使用 ps
命令(一次性快照)
ps
可快速列出当前系统的进程状态,并结合 sort
排序。
查看 CPU 占用最高的前 10 个进程:
ps aux --sort=-%cpu | head -n 10
输出示例:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1234 99.6 0.1 57636 2936 ? R 10:00 26:19 java
root 1235 98.7 0.1 57636 2936 ? R 10:01 26:18 java
...
关键参数:
--sort=-%cpu
:按 CPU 使用率降序排序。head -n 10
:仅显示前 10 行结果。
方法 4:使用 pidstat
命令(详细统计)
pidstat
是 sysstat
工具包中的命令,提供更详细的进程资源使用数据。
步骤:
-
安装
sysstat
(如未安装):sudo apt install sysstat # Debian/Ubuntu sudo yum install sysstat # CentOS/RHEL
-
查看 CPU 使用情况:
pidstat -u 1 5
-u
:显示 CPU 使用情况。1
:每秒更新一次。5
:总共显示 5 次。
输出示例:
Linux 5.4.0 (hostname) 01/01/2025 _x86_64_ (4 CPU)
01:00:00 PM UID PID %usr %system %guest %wait %CPU CPU Command
01:00:01 PM 0 1234 99.60 0.00 0.00 0.00 99.60 0 java
01:00:01 PM 0 1235 98.70 0.00 0.00 0.00 98.70 0 java
...
方法 5:直接查看 /proc
文件系统
通过 /proc
文件系统可获取进程的详细资源使用情况。
查看指定进程的 CPU 使用率:
cat /proc/<PID>/stat
<PID>
:替换为实际进程 ID。- 输出中的第 14 和 15 个字段表示用户态和内核态的 CPU 时间(以时钟周期为单位)。
进一步分析高 CPU 进程的原因
如果发现某个进程占用 CPU 过高,可进一步排查:
-
检查进程的线程(适用于多线程程序):
top -Hp <PID>
- 按
H
键切换线程视图,找到占用 CPU 最高的线程。
- 按
-
将线程 ID 转换为 16 进制:
printf "%x\n" <LID>
<LID>
:线程 ID。
-
分析线程堆栈(如 Java 应用):
jstack <PID> | grep <16进制LID> -A 10
-
使用
strace
跟踪系统调用:strace -p <PID>
总结:推荐方法
方法 | 适用场景 | 优点 |
---|---|---|
top | 实时监控系统资源使用情况 | 默认安装,无需额外配置 |
htop | 图形化交互式进程管理 | 界面友好,支持鼠标操作 |
ps | 快速查看一次性快照 | 结合 sort 可灵活排序 |
pidstat | 详细统计进程资源使用(需安装) | 提供时间间隔内的平均值 |
17.如何查看哪个进程占用内存最高
方法 1:使用 top
命令
top
是 Linux 最常用的实时进程监控工具,默认按 CPU 使用率排序,但可以切换为按内存排序。
步骤:
-
运行
top
命令:top
-
按内存占用排序:
- 在
top
界面中按下键盘上的Shift + M
,进程列表会按内存使用率从高到低排序。 - 最上方的进程即为当前占用内存最高的进程。
- 在
-
退出
top
:- 按
q
或Ctrl + C
退出。
- 按
关键字段解释:
- %MEM:进程占用的物理内存百分比。
- RES(Resident Set Size):进程实际占用的物理内存大小(单位 KB)。
- VIRT(Virtual Memory):进程使用的虚拟内存总量(包括物理内存和 Swap)。
方法 2:使用 htop
命令(增强版 top
)
htop
提供更友好的交互界面和更直观的进程管理功能。
步骤:
-
安装
htop
(如未安装):sudo apt install htop # Debian/Ubuntu sudo yum install htop # CentOS/RHEL
-
运行
htop
:htop
-
按内存使用率排序:
- 默认按 CPU 使用率排序,可通过点击表头
MEM%
列或按下F6
键选择MEM%
排序。 - 占用内存最高的进程会显示在顶部。
- 默认按 CPU 使用率排序,可通过点击表头
优势:
- 支持颜色标记、垂直/水平滚动。
- 可直接通过鼠标选择进程并操作(如终止、调整优先级)。
方法 3:使用 ps
命令(一次性快照)
ps
可快速列出当前系统的进程状态,并结合 sort
排序。
查看内存占用最高的前 10 个进程:
ps aux --sort=-%mem | head -n 10
输出示例:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1234 0.5 10.2 57636 2936 ? Ss 10:00 26:19 java
root 1235 0.3 8.7 57636 2936 ? Ss 10:01 26:18 java
...
关键参数:
--sort=-%mem
:按内存使用率降序排序。head -n 10
:仅显示前 10 行结果。RSS
:实际占用的物理内存(Resident Set Size)。VSZ
:虚拟内存使用量(Virtual Memory Size)。
方法 4:使用 /proc
文件系统
通过 /proc
文件系统可获取进程的详细内存使用情况。
查看指定进程的内存使用:
cat /proc/<PID>/status | grep -i mem
-
<PID>
:替换为实际进程 ID。 -
输出示例:
VmSize: 57636 kB # 虚拟内存(VIRT) VmRSS: 2936 kB # 实际内存(RES) VmSwap: 0 kB # Swap 使用量
方法 5:使用 smem
命令(更详细的内存报告)
smem
提供更精确的内存统计,支持按物理内存、Swap 等排序。
步骤:
-
安装
smem
(如未安装):sudo apt install smem # Debian/Ubuntu sudo yum install smem # CentOS/RHEL
-
查看内存占用最高的进程:
smem -s rss -r | head -n 10
-s rss
:按实际内存(RSS)排序。-r
:降序排列。
输出示例:
PID User Command Swap USS PSS RSS
1234 root java 0.0 2936.0 2936.0 57636.0
1235 root java 0.0 2936.0 2936.0 57636.0
...
方法 6:使用 glances
工具(综合监控)
glances
是一个综合监控工具,支持内存、CPU、磁盘等资源的实时查看。
步骤:
-
安装
glances
:sudo apt install glances # Debian/Ubuntu sudo yum install glances # CentOS/RHEL
-
运行
glances
:glances
-
按内存排序:
- 按键
m
可切换内存排序视图。
- 按键
进一步分析内存占用高的原因
如果发现某个进程占用内存过高,可进一步排查:
-
检查进程的线程(适用于多线程程序):
top -Hp <PID>
- 按
H
键切换线程视图,找到占用内存最高的线程。
- 按
-
将线程 ID 转换为 16 进制:
printf "%x\n" <LID>
<LID>
:线程 ID。
-
分析线程堆栈(如 Java 应用):
jstack <PID> | grep <16进制LID> -A 10
-
使用
pmap
查看内存映射:pmap -x <PID>
-
检查 Swap 使用情况:
-
在
top
中按f
键启用SWAP
字段。 -
或使用:
smem -s swap -r | head -n 10
-
总结:推荐方法
方法 | 适用场景 | 优点 |
---|---|---|
top | 实时监控系统资源使用情况 | 默认安装,无需额外配置 |
htop | 图形化交互式进程管理 | 界面友好,支持鼠标操作 |
ps | 快速查看一次性快照 | 结合 sort 可灵活排序 |
smem | 详细统计内存使用(需安装) | 支持 Swap 和物理内存区分 |
/proc | 精确查看单个进程的内存使用 | 直接读取内核数据,无需额外工具 |
18.系统重启和关机命令有哪些
一、系统重启命令
reboot
-
功能:立即重启系统。
-
示例:
sudo reboot
-
特点:
- 简单直接,适合快速重启。
- 会通知用户并安全关闭服务,避免数据丢失。
shutdown -r
-
功能:安全重启系统,支持延迟和通知用户。
-
示例:
sudo shutdown -r now # 立即重启 sudo shutdown -r +5 # 5分钟后重启 sudo shutdown -r 23:00 # 在23:00重启 sudo shutdown -r +10 "系统将在10分钟后重启,请保存工作!" # 带警告信息
-
特点:
-r
表示重启(reboot)。- 可指定时间或发送通知,适合生产环境。
init 6
-
功能:通过切换运行级别(runlevel)重启系统。
-
示例:
sudo init 6
-
特点:
- 早期 Linux 系统常用,现代系统中逐渐被
reboot
和shutdown
替代。
- 早期 Linux 系统常用,现代系统中逐渐被
二、系统关机命令
shutdown -h
-
功能:安全关机,支持延迟和通知用户。
-
示例:
sudo shutdown -h now # 立即关机 sudo shutdown -h +10 # 10分钟后关机 sudo shutdown -h 04:00 # 在04:00关机 sudo shutdown -h +5 "系统将在5分钟后关机,请保存工作!" # 带警告信息
-
特点:
-h
表示关机(halt)。- 安全关闭所有服务并通知用户,适合生产环境。
halt
-
功能:停止系统运行,但不一定关闭电源。
-
示例:
sudo halt
-
特点:
- 类似于
shutdown -h
,但不强制切断电源。 - 通常需要手动关闭电源。
- 类似于
poweroff
-
功能:立即关闭系统并切断电源。
-
示例:
sudo poweroff
-
特点:
- 直接断电,操作“粗暴”。
- 如果系统有未保存的数据,可能导致数据丢失,不建议随意使用。
init 0
-
功能:通过切换运行级别(runlevel)关机。
-
示例:
sudo init 0
-
特点:
- 早期 Linux 系统常用,现代系统中逐渐被
shutdown
和poweroff
替代。
- 早期 Linux 系统常用,现代系统中逐渐被
三、注意事项
-
权限要求:
- 大多数命令需要
root
权限,需使用sudo
或以 root 身份执行。
- 大多数命令需要
-
生产环境建议:
- 优先使用
shutdown
:支持延迟和通知用户,确保服务安全关闭。 - 避免
poweroff
:除非明确需要立即断电,否则可能引发数据丢失。
- 优先使用
-
取消计划任务:
-
如果误操作设置了延迟关机或重启,可用以下命令取消:
sudo shutdown -c
-
-
紧急情况:
- 如果系统无响应,可尝试 REISUB 组合键(Alt + SysRq + R/E/I/S/U/B)强制重启,但需谨慎使用。
四、总结对比
命令 | 功能 | 是否安全 | 是否需要 root 权限 | 适用场景 |
---|---|---|---|---|
reboot | 立即重启 | ✅ | ✅ | 快速重启 |
shutdown -r | 安全重启 | ✅ | ✅ | 计划重启、通知用户 |
init 6 | 通过 runlevel 重启 | ✅ | ✅ | 旧系统或脚本中使用 |
shutdown -h | 安全关机 | ✅ | ✅ | 计划关机、通知用户 |
halt | 停止系统 | ✅ | ✅ | 临时停止(需手动断电) |
poweroff | 立即断电 | ❌ | ✅ | 紧急情况或服务器无人值守时使用 |
now # 立即关机 | ||||
sudo shutdown -h +10 # 10分钟后关机 | ||||
sudo shutdown -h 04:00 # 在04:00关机 | ||||
sudo shutdown -h +5 “系统将在5分钟后关机,请保存工作!” # 带警告信息 |
- 特点:
- `-h` 表示关机(halt)。
- 安全关闭所有服务并通知用户,适合生产环境。
2. **`halt`**
- **功能**:停止系统运行,但不一定关闭电源。
- 示例:
sudo halt
- 特点:
- 类似于 `shutdown -h`,但不强制切断电源。
- 通常需要手动关闭电源。
3. **`poweroff`**
- **功能**:立即关闭系统并切断电源。
- 示例:
sudo poweroff
- 特点:
- 直接断电,操作“粗暴”。
- 如果系统有未保存的数据,可能导致数据丢失,不建议随意使用。
4. **`init 0`**
- **功能**:通过切换运行级别(runlevel)关机。
- 示例:
sudo init 0
- 特点:
- 早期 Linux 系统常用,现代系统中逐渐被 `shutdown` 和 `poweroff` 替代。
------
**三、注意事项**
1. 权限要求:
- 大多数命令需要 `root` 权限,需使用 `sudo` 或以 root 身份执行。
2. 生产环境建议:
- **优先使用 `shutdown`**:支持延迟和通知用户,确保服务安全关闭。
- **避免 `poweroff`**:除非明确需要立即断电,否则可能引发数据丢失。
3. 取消计划任务:
- 如果误操作设置了延迟关机或重启,可用以下命令取消:
```
sudo shutdown -c
```
4. 紧急情况:
- 如果系统无响应,可尝试 **REISUB** 组合键(Alt + SysRq + R/E/I/S/U/B)强制重启,但需谨慎使用。
------
**四、总结对比**
| **命令** | **功能** | **是否安全** | **是否需要 root 权限** | **适用场景** |
| ------------- | ------------------ | ------------ | ---------------------- | ------------------------------ |
| `reboot` | 立即重启 | ✅ | ✅ | 快速重启 |
| `shutdown -r` | 安全重启 | ✅ | ✅ | 计划重启、通知用户 |
| `init 6` | 通过 runlevel 重启 | ✅ | ✅ | 旧系统或脚本中使用 |
| `shutdown -h` | 安全关机 | ✅ | ✅ | 计划关机、通知用户 |
| `halt` | 停止系统 | ✅ | ✅ | 临时停止(需手动断电) |
| `poweroff` | 立即断电 | ❌ | ✅ | 紧急情况或服务器无人值守时使用 |
| `init 0` | 通过 runlevel 关机 | ✅ | ✅ | 旧系统或脚本中使用 |