Linux 是一个开源的操作系统内核,诞生于 1991 年,由芬兰程序员 Linus Torvalds 开发。它的核心特点是自由、开放、高度可定制,并广泛应用于服务器、开发、嵌入式设备等领域。
• 操作系统内核:Linux 本质是一个管理计算机硬件和软件资源的“核心程序”(称为 内核),负责处理内存、CPU、设备驱动等底层任务。
• Linux 发行版:普通人接触的 Linux 通常是“发行版”(如 Ubuntu、CentOS、Debian),它们在内核基础上打包了图形界面、软件工具等,形成完整的操作系统。
• 开源与自由:Linux 遵循 GPL 协议,允许用户自由使用、修改、分发代码,这与 Windows/macOS 的闭源模式截然不同。
• 稳定性:Linux 服务器可长时间运行不崩溃(比如运行数年无需重启)。
• 安全性:开源特性让漏洞更容易被发现和修复,且病毒较少。
• 资源占用低:适合老旧设备或嵌入式系统(如路由器、智能手表)。
• 强大的命令行:通过终端(Terminal)可以高效完成复杂任务(如批量处理文件、自动化脚本)。
• 软件生态丰富:支持大量免费开源软件,开发者工具(如 Python、GCC)尤其完善。
• 服务器领域:全球超 90% 的互联网服务器运行 Linux(如网站、数据库、云计算平台)。
• 开发环境:程序员常用 Linux 进行编程、部署(支持 Docker/Kubernetes 等工具)。
• 嵌入式设备:智能家电、车载系统、路由器等底层系统往往是 Linux。
• 科学计算:科研机构用 Linux 处理大数据、高性能计算(HPC)。
• 推荐发行版:可以从 CentOS7 开始。
• 基础学习:
• 掌握常用命令:ls
, cd
, mkdir
, rm
, grep
, chmod
等。
• 理解文件系统结构:/home
, /etc
, /var
, /bin
等目录的作用。
• 学会包管理工具:apt
(Debian/Ubuntu)或 yum
(CentOS7)安装软件。
• 实践方法:
• 在虚拟机(如CentOS7)或旧电脑上安装 Linux。
• 尝试用命令行完成日常任务(如安装软件、配置网络)。
• 参与开源项目或搭建个人服务器(如用 Nginx 部署网站)。
• 在线文档:Linux 命令行教程、Linux中文手册
/
• 所有目录的起点,类似于 Windows 的 C:\
。
• 关键规则:根目录下不直接存放用户文件,仅包含系统必要的子目录。
目录 | 用途 | 典型内容示例 |
---|---|---|
/bin |
基础命令的可执行文件(所有用户可用) | ls , cp , cat , bash |
/sbin |
系统管理命令(需 root 权限) | fdisk , iptables , reboot |
/boot |
系统启动文件 | 内核(vmlinuz-* )、引导程序(GRUB) |
/etc |
系统和服务的配置文件 | passwd , fstab , nginx.conf |
/dev |
设备文件(硬件抽象为文件) | sda (硬盘)、tty (终端)、null |
/proc |
虚拟文件系统,实时反映内核和进程信息 | cpuinfo , meminfo , 进程状态 |
/sys |
虚拟文件系统,用于配置内核参数 | 设备驱动、电源管理、内核模块 |
目录 | 用途 | 说明 |
---|---|---|
/home |
普通用户的家目录 | 每个用户独立子目录(如 /home/alice ) |
/root |
超级用户(root)的家目录 | 存放 root 的配置和文件 |
/tmp |
临时文件(所有用户可读写) | 重启后自动清理(部分系统保留一定时间) |
目录 | 用途 | 典型内容示例 |
---|---|---|
/usr |
用户级应用程序和资源(类似 C:\Program Files ) |
gcc , python , 文档、图标、库文件 |
/opt |
第三方独立软件(如商业软件) | /opt/google/chrome |
/usr/local |
用户手动编译安装的软件 | 推荐替代 /opt 的自定义安装位置 |
/srv |
服务数据(如网站、FTP 文件) | /srv/www (网站根目录) |
目录 | 用途 | 典型内容示例 |
---|---|---|
/var |
动态数据(日志、缓存、数据库等) | /var/log (日志)、/var/lib/mysql |
/run |
系统运行时的临时文件(如 PID 文件) | /run/lock (锁文件)、进程 PID |
目录 | 用途 |
---|---|
/media |
自动挂载可移动设备(U 盘、光盘) |
/mnt |
手动挂载临时文件系统(如网络存储) |
目录 | 用途 |
---|---|
/lib |
系统核心库文件(如 /lib64 用于64位系统) |
/lib/modules |
内核模块(驱动) |
目录 | 用途 |
---|---|
/lost+found |
文件系统修复后恢复的碎片文件 |
/selinux |
SELinux 安全策略配置文件 |
/
├── bin # 基础命令
├── boot # 启动文件
├── dev # 设备文件
├── etc # 配置
├── home # 用户家目录
├── lib # 系统库
├── media # 自动挂载点
├── mnt # 手动挂载点
├── opt # 第三方软件
├── proc # 内核/进程信息
├── root # root家目录
├── run # 运行时文件
├── sbin # 系统管理命令
├── srv # 服务数据
├── sys # 内核参数
├── tmp # 临时文件
├── usr # 用户程序
└── var # 动态数据
用户文件:
• 个人数据存放于 /home/用户名
,避免直接在根目录下创建文件。
• /tmp
仅用于临时文件,重启后可能丢失。
配置文件:
• 修改系统配置前备份 /etc
下的文件。
• 自定义服务配置文件通常放在 /etc
的子目录(如 /etc/nginx
)。
软件安装:
• 优先使用包管理器(yum
/apt
)安装到 /usr
。
• 手动编译或第三方软件建议安装到 /opt
或 /usr/local
。
日志与监控:
• 系统日志在 /var/log
,定期清理避免占满磁盘。
• 使用 df -h
检查挂载点磁盘使用情况。
命令 | 用途 | 常用参数示例 | 示例说明 |
---|---|---|---|
ls |
列出目录内容 | -l (详细信息)-a (显示隐藏文件) |
ls -la /home |
cd |
切换目录 | .. (上级目录)~ (home目录) |
cd /var/log |
pwd |
显示当前工作目录路径 | 无 | pwd → 输出 /home/user |
cp |
复制文件或目录 | -r (递归复制目录) |
cp -r dir1 dir2 |
mv |
移动/重命名文件或目录 | 无 | mv old.txt new.txt |
rm |
删除文件或目录 | -r (递归删除)-f (强制删除) |
rm -rf tmp/ (慎用!) |
mkdir |
创建目录 | -p (创建多级目录) |
mkdir -p project/src |
touch |
创建空文件或更新文件时间戳 | 无 | touch file.txt |
cat |
查看文件内容 | 无 | cat /etc/hosts |
find |
搜索文件 | -name (按名称搜索) |
find / -name "*.log" |
命令 | 用途 | 常用参数示例 | 示例说明 |
---|---|---|---|
chmod |
修改文件权限 | 755 (rwxr-xr-x) |
chmod 755 script.sh |
chown |
修改文件所有者 | user:group |
chown root:root /etc/passwd |
sudo |
以超级用户权限执行命令 | 无 | sudo apt update |
passwd |
修改用户密码 | 无 | passwd (修改当前用户密码) |
useradd |
创建用户 | -m (创建家目录) |
sudo useradd -m alice |
命令 | 用途 | 常用参数示例 | 示例说明 |
---|---|---|---|
top |
实时监控系统资源占用 | 无 | top (按 q 退出) |
ps |
查看进程状态 | -aux (显示所有进程) |
`ps -aux |
kill |
终止进程 | -9 (强制终止) |
kill -9 1234 |
df |
查看磁盘空间使用情况 | -h (人类可读格式) |
df -h |
free |
查看内存使用情况 | -h (人类可读格式) |
free -h |
du |
查看目录占用空间 | -sh (汇总显示) |
du -sh /var/log |
命令 | 用途 | 常用参数示例 | 示例说明 |
---|---|---|---|
ping |
测试网络连通性 | -c 4 (发送4次包) |
ping -c 4 google.com |
curl |
发送 HTTP 请求 | -O (下载文件) |
curl -O https://example.com/file |
wget |
下载文件 | 无 | wget http://example.com/file.zip |
ifconfig |
查看/配置网络接口(旧版) | 无 | ifconfig eth0 |
ip |
查看/配置网络接口(新版) | addr (显示IP地址) |
ip addr show |
netstat |
显示网络连接状态 | -tuln (监听端口) |
netstat -tuln |
ssh |
远程登录服务器 | -p (指定端口) |
ssh user@192.168.1.100 -p 22 |
命令 | 用途 | 示例说明 |
---|---|---|
yum |
包管理工具(CentOS/RHEL) | yum install nginx |
dnf |
新一代包管理工具(CentOS 8+) | dnf remove httpd |
rpm |
直接安装 RPM 包 | rpm -ivh package.rpm |
命令 | 用途 | 示例说明 |
---|---|---|
grep |
文本搜索 | `cat log.txt |
awk |
文本分析工具 | awk '{print $1}' data.txt |
sed |
流编辑器(批量替换文本) | sed 's/old/new/g' file.txt |
head |
显示文件头部内容 | head -n 10 log.txt |
tail |
显示文件尾部内容 | tail -f /var/log/messages (实时跟踪) |
命令 | 用途 | 示例说明 |
---|---|---|
tar |
打包/解压文件 | tar -czvf archive.tar.gz dir/ (压缩)tar -xzvf archive.tar.gz (解压) |
gzip |
压缩文件(生成 .gz 文件) |
gzip file.txt → file.txt.gz |
unzip |
解压 ZIP 文件 | unzip archive.zip |
命令 | 用途 | 示例说明 |
---|---|---|
man |
查看命令手册 | man ls |
--help |
快速查看命令帮助 | ls --help |
which |
显示命令的绝对路径 | which python |
如何查看命令的详细用法?
• 使用 man 命令名
(如 man grep
)或 命令名 --help
。
如何强制终止无响应的进程?
• 先用 ps -aux | grep 进程名
找到 PID,再用 kill -9 PID
。
如何实时监控日志文件?
• 使用 tail -f /var/log/syslog
(Ubuntu)或 tail -f /var/log/messages
(CentOS)。
如何统计文件行数?
• 使用 wc -l file.txt
。
ls
命令• 用途:列出文件/目录的基本属性。
• 常用参数:
ls -l # 查看详细信息(权限、所有者、大小、时间等)
ls -la # 显示所有文件(包括隐藏文件)
ls -lh # 以人类可读格式显示文件大小(如 KB/MB)
• 输出示例:
-rwxr-xr-- 1 user group 1.2K Sep 10 10:00 file.txt
• 字段解释:
◦ -rwxr-xr--
:文件类型与权限(见下文)。
◦ 1
:硬链接数量。
◦ user
:文件所有者。
◦ group
:文件所属组。
◦ 1.2K
:文件大小。
◦ Sep 10 10:00
:最后修改时间。
◦ file.txt
:文件名。
stat
命令• 用途:显示文件的详细属性(包括 inode、时间戳等)。
• 示例:
stat file.txt
• 输出关键字段:
• Access
:最后访问时间。
• Modify
:最后修改时间(文件内容变更)。
• Change
:最后状态变更时间(如权限或所有者修改)。
• Inode
:文件的唯一标识符。
• 权限表示:rwxr-xr--
分为三组:
• 前 3 位:所有者权限(u
)。
• 中 3 位:所属组权限(g
)。
• 后 3 位:其他用户权限(o
)。
• 符号含义:
• r
(读):文件可读取,目录可列出内容。
• w
(写):文件可修改,目录可创建/删除文件。
• x
(执行):文件可执行,目录可进入。
chmod
• 数字模式(推荐):
chmod 755 file.txt # rwxr-xr-x
chmod -R 644 dir/ # 递归修改目录内所有文件权限
• 数字对应权限:
◦ 4
= r(读)
◦ 2
= w(写)
◦ 1
= x(执行)
◦ 示例:7 = 4+2+1
(rwx),6 = 4+2
(rw-)。
• 符号模式:
chmod u+x script.sh # 给所有者添加执行权限
chmod go-w file.txt # 移除组和其他用户的写权限
chmod a=r file.txt # 所有用户权限设为只读(a = all)
chown
• 修改所有者:
chown user file.txt # 修改文件所有者
chown -R user:group dir/ # 递归修改目录所有者及所属组
• 仅修改所属组:
chgrp group file.txt # 修改文件所属组
touch
• 更新为当前时间:
touch file.txt # 更新所有时间戳为当前时间
• 自定义时间:
touch -t 202310011200 file.txt # 设置为 2023-10-01 12:00
chattr
和 lsattr
• 查看隐藏属性:
lsattr file.txt
• 设置属性:
chattr +i file.txt # 设置不可修改(immutable,root 用户操作)
chattr -i file.txt # 取消不可修改属性
• 常用属性:
◦ a
:仅允许追加内容(适用于日志文件)。
◦ i
:文件不可删除、修改或重命名。
操作 | 命令示例 |
---|---|
查看文件权限 | ls -l file.txt |
修改权限为 rwxr-xr-x | chmod 755 file.txt |
递归修改目录所有者 | chown -R user:group dir/ |
防止文件被误删 | chattr +i file.txt |
• 谨慎使用 chmod 777
:过度开放权限可能导致安全风险。
• chattr
需 root 权限:修改隐藏属性通常需要管理员权限。
• 备份配置文件:修改 /etc
下的文件前建议备份。
cat
- 直接显示文件内容• 用途:快速查看小文件,或合并多个文件。
• 示例:
cat file.txt # 显示全部内容
cat file1.txt file2.txt # 合并显示多个文件
cat -n file.txt # 显示行号
nl
- 显示带行号的内容• 用途:类似 cat -n
,但格式更规范。
• 示例:
nl file.txt # 显示行号及内容
nl -b a file.txt # 显示所有行号(包括空行)
more
- 分页显示(仅向下翻页)• 用途:适合查看较长的文件。
• 操作:
more file.log
• 空格键:向下翻页。
• Enter:逐行滚动。
• q:退出。
less
- 高级分页(支持上下翻页/搜索)• 用途:功能更强大的分页工具。
• 操作:
less file.log
• 上下箭头:逐行滚动。
• /keyword:搜索关键词(按 n
跳转到下一个匹配项)。
• g:跳到文件开头,G:跳到文件末尾。
• q:退出。
tail
- 查看文件尾部• 用途:实时跟踪日志文件更新。
• 示例:
tail -n 20 file.log # 显示最后20行
tail -f file.log # 实时跟踪新增内容(常用监控日志)
tail -F file.log # 跟踪文件(即使文件被重命名或重新创建)
head
- 查看文件头部• 用途:快速查看文件开头部分。
• 示例:
head -n 10 file.txt # 显示前10行
grep
- 关键词搜索• 用途:查找包含特定模式的行。
• 示例:
grep "error" file.log # 查找包含 "error" 的行
grep -i "warning" file.log # 忽略大小写搜索
grep -v "debug" file.log # 排除包含 "debug" 的行
grep -C 3 "error" file.log # 显示匹配行及其前后3行上下文
awk
- 按列处理文本• 用途:提取特定列或格式化输出。
• 示例:
awk '{print $1, $3}' data.txt # 打印第1列和第3列
awk -F ',' '{print $2}' data.csv # 以逗号分隔列(处理CSV)
sed
- 流编辑器(批量处理)• 用途:替换或删除指定内容。
• 示例:
sed 's/old/new/g' file.txt # 替换所有 "old" 为 "new"
sed -n '5,10p' file.txt # 仅显示5到10行
cut
- 按列切割内容• 用途:提取特定列的数据。
• 示例:
cut -d ':' -f 1,3 /etc/passwd # 提取用户名和UID(以冒号分隔)
column
- 列对齐显示• 用途:将文本按列对齐(适合表格数据)。
• 示例:
cat data.txt | column -t # 自动对齐列
sort
- 排序内容• 示例:
sort file.txt # 按字母顺序排序
sort -n data.txt # 按数值大小排序
sort -u file.txt # 去重后排序
uniq
- 去重相邻重复行• 示例:
uniq file.txt # 去重(需先排序)
uniq -c file.txt # 统计重复次数
diff
- 比较两个文件差异• 示例:
diff file1.txt file2.txt # 显示差异行
diff -u file1.txt file2.txt # 生成合并格式的差异报告
vimdiff
- 可视化差异比较• 用途:用 Vim 分屏对比文件。
• 示例:
vimdiff file1.txt file2.txt # 高亮显示差异
vim
/ vi
- 编辑文件• 用途:直接编辑文件并查看内容。
• 操作:
vim file.txt
• i:进入编辑模式。
• Esc → :q:退出。
• /keyword:搜索内容。
view
- 只读模式打开文件• 用途:类似 vim
,但禁止编辑。
view file.txt
需求 | 推荐命令 |
---|---|
快速查看小文件 | cat , nl |
分页浏览长文件 | less (优先), more |
实时监控日志尾部 | tail -f |
关键词搜索 | grep |
按列提取数据 | cut , awk |
批量替换文本 | sed |
比较文件差异 | diff , vimdiff |
编辑文件 | vim , nano |
在 Linux/Unix 系统中,硬链接(Hard Link) 和 软链接(Symbolic Link,也称软连接) 是两种不同的文件链接方式,用于实现文件的多路径访问和管理。
• 硬链接是文件系统中 指向同一 inode 的多个文件名,所有硬链接共享相同的物理数据块。
• 本质:同一文件的多个入口(别名),删除原文件不会影响硬链接的可用性。
ln 原文件 硬链接名
• 示例:
ln file.txt hard_link.txt
• 共享 inode:所有硬链接和原文件具有相同的 inode 号。
• 同步更新:修改任一硬链接或原文件,所有链接内容同步变化。
• 独立性:删除原文件后,硬链接仍有效(仅减少 inode 的引用计数)。
• 限制:
• 无法跨不同文件系统(如从 /dev/sda1
链接到 /dev/sdb1
)。
• 无法链接目录(防止循环引用导致系统问题)。
• 防止重要文件被误删(通过多个硬链接保留访问入口)。
• 共享大型文件(节省磁盘空间,避免重复存储)。
ls -i file.txt hard_link.txt # 查看 inode 号
stat file.txt # 查看链接数(Links 字段)
• 软链接是 独立文件,存储目标文件的路径信息,类似 Windows 的快捷方式。
• 本质:指向另一个文件的指针,依赖目标文件的存在。
ln -s 目标文件 软链接名
• 示例:
ln -s /var/log/app.log app_log_link
• 独立 inode:软链接有自己的 inode 号,与目标文件不同。
• 路径依赖:目标文件被删除后,软链接失效(成为“悬空链接”)。
• 灵活性:
• 可跨不同文件系统和磁盘分区。
• 可链接目录(如 /usr/bin/python3 -> /usr/bin/python3.9
)。
• 权限无关:软链接权限始终为 lrwxrwxrwx
,实际权限由目标文件决定。
• 为长路径文件创建快捷方式(如链接到深层目录的配置文件)。
• 动态切换版本(如 /usr/bin/python
指向不同 Python 版本)。
• 跨文件系统引用(如将数据目录链接到外部存储)。
ls -l 软链接名 # 显示指向路径(例如:app_log_link -> /var/log/app.log)
readlink 软链接名 # 直接输出目标路径
特性 | 硬链接 | 软链接 |
---|---|---|
存储内容 | 直接指向 inode 和数据块 | 存储目标文件的路径字符串 |
inode 号 | 与原文件相同 | 独立 inode 号 |
跨文件系统 | 不支持 | 支持 |
链接目录 | 不支持 | 支持 |
原文件删除后 | 仍有效(引用计数减 1) | 失效(悬空链接) |
文件大小 | 与原文件相同(共享数据块) | 较小(仅存储路径信息) |
权限同步性 | 与原文件权限一致 | 自身权限固定为 777 (实际权限由目标文件决定) |
# 创建原文件
echo "This is a test file." > original.txt
# 创建硬链接
ln original.txt hard_link.txt
# 查看 inode 和链接数
ls -li original.txt hard_link.txt
输出:
12345 -rw-r--r-- 2 user group 20 Sep 10 10:00 original.txt
12345 -rw-r--r-- 2 user group 20 Sep 10 10:00 hard_link.txt
# 创建目标文件
echo "Linked file content." > target.txt
# 创建软链接
ln -s target.txt soft_link.txt
# 查看软链接属性
ls -l soft_link.txt
输出:
lrwxrwxrwx 1 user group 9 Sep 10 10:00 soft_link.txt -> target.txt
• Vim(Vi IMproved) 是 Linux/Unix 系统中最强大的 终端文本编辑器 之一,是经典编辑器 Vi 的增强版。
• 特点:
• 模式化编辑:通过不同模式(插入、命令、可视等)提高效率。
• 高度可定制:支持插件、主题和快捷键配置。
• 跨平台:可在终端、SSH 等无图形界面环境中使用。
• CentOS/RHEL:
sudo yum install vim
vim 文件名 # 打开/创建文件(若文件不存在则新建)
Vim 的操作围绕 模式切换 展开,以下是三种最常用模式:
模式 | 功能 | 进入方式 |
---|---|---|
普通模式 | 执行命令(移动光标、删除、复制等) | 启动 Vim 后的默认模式,或按 Esc |
插入模式 | 输入文本 | 按 i (插入)或 a (追加) |
命令模式 | 执行保存、退出等操作 | 普通模式下按 : |
• 方向键:h
(左)、j
(下)、k
(上)、l
(右)。
• 按单词移动:
• w
:跳到下一个单词开头。
• b
:跳到上一个单词开头。
• 行首/行尾:
• 0
:移动到行首。
• $
:移动到行尾。
• 翻页:
• Ctrl + f
:向下翻页。
• Ctrl + b
:向上翻页。
• i
:在光标前插入。
• a
:在光标后插入。
• o
:在当前行下方插入新行。
• O
:在当前行上方插入新行。
• x
:删除光标处字符。
• dd
:删除整行。
• u
:撤销操作。
• Ctrl + r
:重做操作。
• yy
:复制当前行。
• p
:粘贴到光标后。
• P
:粘贴到光标前。
:w # 保存文件
:q # 退出 Vim
:wq # 保存并退出
:q! # 强制退出(不保存修改)
• 语法::%s/旧内容/新内容/g
:%s/foo/bar/g # 全局替换所有 "foo" 为 "bar"
:%s/foo/bar/gc # 替换前逐个确认(c = confirm)
• 普通模式下按 /
,输入关键词后回车:
/keyword # 搜索 "keyword"
n # 跳转到下一个匹配项
N # 跳转到上一个匹配项
• 水平分屏::sp 文件名
• 垂直分屏::vsp 文件名
• 切换窗口:Ctrl + w
+ 方向键
:set number # 显示行号
:set nonumber # 隐藏行号
通过 ~/.vimrc
文件自定义 Vim 行为,示例配置:
" 显示行号
set number
" 启用语法高亮
syntax on
" 自动缩进
set autoindent
" Tab 转换为 4 个空格
set tabstop=4
set shiftwidth=4
set expandtab
" 高亮搜索匹配项
set hlsearch
• 交互式教程:终端输入 vimtutor
。
Esc
进入普通模式,输入 :q
退出。Ctrl + q
恢复。5dd
删除 5 行。sudo useradd [选项] 用户名
• 常用选项:
• -m
:创建用户家目录(如 /home/用户名
)。
• -s
:指定 Shell(如 -s /bin/bash
)。
• -u
:手动指定 UID。
• -g
:指定主组(需提前创建)。
• -G
:指定附加组(多个组用逗号分隔)。
• 示例:
sudo useradd -m -s /bin/bash alice # 创建用户 alice 并生成家目录
sudo passwd 用户名 # 管理员为用户设置密码
passwd # 当前用户修改自己的密码
sudo usermod [选项] 用户名
• 常用选项:
• -l 新用户名
:重命名用户。
• -d 新家目录
:修改家目录路径。
• -aG 附加组
:将用户添加到附加组(需与 -G
结合使用)。
sudo userdel -r 用户名 # -r 表示同时删除家目录和邮件池
id 用户名 # 显示 UID、GID 及所属组
finger 用户名 # 查看用户详细信息(需安装 finger 包)
sudo groupadd 组名
sudo groupmod -n 新组名 旧组名 # 重命名组
sudo groupdel 组名
sudo usermod -aG 组名 用户名 # 将用户加入附加组(-a 表示追加)
sudo gpasswd -d 用户名 组名 # 将用户移出组
/etc/passwd
• 格式:用户名:x:UID:GID:描述:家目录:Shell
• 示例:
alice:x:1001:1001:Alice:/home/alice:/bin/bash
/etc/shadow
• 格式:用户名:加密密码:最后修改天数:最小密码寿命:最大密码寿命:警告期:失效宽限:账号失效日:保留
• 关键字段:
• 密码策略:chage -l 用户名
查看。
/etc/group
• 格式:组名:x:GID:组成员列表
• 示例:
developers:x:1002:alice,bob
• 权限类型:r
(读)、w
(写)、x
(执行)。
• 权限层级:所有者(u)、所属组(g)、其他用户(o)。
sudo chown 所有者:组 文件 # 同时修改所有者和组
sudo chown 所有者 文件 # 仅修改所有者
sudo chgrp 组 文件 # 仅修改所属组
chmod 755 文件 # 数字模式(rwxr-xr-x)
chmod u+x,g-w,o=r 文件 # 符号模式(所有者添加执行,组移除写,其他设为只读)
• 编辑 sudoers 文件:
sudo visudo # 安全编辑方式,避免语法错误
• 添加以下行:
用户名 ALL=(ALL:ALL) ALL # 允许用户执行所有命令
%组名 ALL=(ALL) ALL # 允许组内所有用户执行命令
sudo -i # 切换到 root 用户
exit # 退出
/etc/ssh/sshd_config
,设置 PermitRootLogin no
。sudo chage -M 90 -m 7 -W 14 用户名 # 密码最长90天,最短7天修改,提前14天警告
sudo
替代直接使用 root。last # 查看登录历史
sudo tail /var/log/auth.log # 查看认证日志(Ubuntu)
操作 | 命令 |
---|---|
创建用户并生成家目录 | sudo useradd -m 用户名 |
修改用户 Shell | sudo usermod -s /bin/bash 用户名 |
将用户加入附加组 | sudo usermod -aG 组名 用户名 |
查看用户所属组 | groups 用户名 |
删除用户及家目录 | sudo userdel -r 用户名 |
修改文件权限为所有者读写执行 | chmod 700 文件 |
• 权限共享:通过组批量管理用户对文件/目录的访问权限。
• 简化管理:替代为每个用户单独设置权限,提升效率。
• 安全隔离:限制非授权用户访问敏感资源。
• 每个用户必须属于 一个主组。
• 用户创建文件时,文件的默认所属组为其主组。
• 相关文件:/etc/passwd
中用户行的第4字段(GID)。
• 用户可加入多个附加组,获得额外的权限。
• 相关文件:/etc/group
中组的最后一个字段(成员列表)。
sudo groupadd 组名 # 创建普通组
sudo groupadd -g 1005 组名 # 指定 GID 创建组
sudo groupmod -n 新组名 旧组名 # 重命名组
sudo groupmod -g 1006 组名 # 修改组的 GID
sudo groupdel 组名 # 删除空组(无成员)
sudo groupdel -f 组名 # 强制删除非空组(慎用!)
getent group 组名 # 查看组详细信息
cat /etc/group | grep 组名 # 过滤组配置
sudo useradd -g 主组名 -G 附加组1,附加组2 用户名
• 示例:
sudo useradd -g developers -G docker,www-data alice
sudo usermod -aG 附加组名 用户名 # 将用户加入组(-a 表示追加)
sudo gpasswd -d 用户名 组名 # 将用户移出组
groups 用户名 # 显示用户的主组和附加组
id 用户名 # 显示 UID、GID 及所有组
newgrp 组名 # 切换后创建的文件默认属于该组(需用户已加入该组)
sudo chgrp 组名 文件或目录 # 修改所属组
sudo chown :组名 文件或目录 # 等效于 chgrp
• 作用:目录中新创建的文件自动继承父目录的所属组。
• 示例:
sudo chmod g+s /shared_dir # 添加 SetGID 位
ls -ld /shared_dir # 查看权限(drwxr-sr-x)
• 场景:团队协作目录 /project
,要求 developers
组内的用户可读写。
• 操作:
# 创建组和目录
sudo groupadd developers
sudo mkdir /project
# 设置目录所属组和权限
sudo chgrp developers /project
sudo chmod 770 /project # 所有者+组:读写执行,其他用户无权限
# 将用户加入组
sudo usermod -aG developers alice
sudo usermod -aG developers bob
通过组批量授予管理员权限(如允许 admins
组执行任何命令):
sudo visudo # 编辑 sudoers 文件
添加以下行:
%admins ALL=(ALL:ALL) ALL # % 表示组名
/etc/group
• 格式:组名:x:GID:成员列表
• 示例:
developers:x:1001:alice,bob
操作 | 命令 |
---|---|
创建组 | sudo groupadd 组名 |
将用户加入附加组 | sudo usermod -aG 组名 用户名 |
查看用户所属组 | groups 用户名 |
修改文件所属组 | sudo chgrp 组名 文件 |
设置目录 SetGID 位 | sudo chmod g+s 目录 |
删除组 | sudo groupdel 组名 |
lsblk
- 列出块设备信息• 用途:查看磁盘、分区及挂载点信息。
• 常用选项:
lsblk # 显示树形结构
lsblk -f # 包含文件系统类型和 UUID
lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT # 自定义输出列
df
- 查看磁盘空间使用情况• 用途:显示已挂载文件系统的磁盘空间占用。
• 常用选项:
df -h # 人类可读格式(GB/MB)
df -i # 查看 inode 使用情况
df -T # 显示文件系统类型
mount
- 挂载文件系统• 用途:将分区或设备挂载到目录。
• 示例:
sudo mount /dev/sdb1 /mnt # 挂载到 /mnt
sudo mount -o ro /dev/sdb1 /mnt # 以只读模式挂载
umount
- 卸载文件系统• 用途:卸载已挂载的分区。
• 示例:
sudo umount /mnt # 通过挂载点卸载
sudo umount /dev/sdb1 # 通过设备路径卸载
/etc/fstab
- 永久挂载配置• 编辑文件:
sudo vim /etc/fstab
• 添加行示例:
UUID=1234-5678 /data ext4 defaults 0 0
du
- 查看目录/文件占用空间• 用途:统计磁盘使用情况。
• 常用选项:
du -sh /path/to/dir # 显示目录总大小
du -h --max-depth=1 / # 查看根目录下一级子目录大小
du -ah /path # 显示所有文件和目录的详细大小
ncdu
- 交互式磁盘分析工具• 用途:可视化分析磁盘空间占用。
• 安装与使用:
sudo apt install ncdu # Debian/Ubuntu
ncdu /path/to/scan # 扫描目录
dd
- 磁盘数据克隆• 用途:全盘备份或恢复(谨慎使用!)。
• 示例:
sudo dd if=/dev/sdb of=/dev/sdc bs=4M status=progress # 磁盘克隆
sudo dd if=/dev/sdb of=disk.img bs=4M # 创建磁盘镜像
rsync
- 增量备份文件• 用途:高效同步文件和目录。
• 示例:
rsync -avz /source/dir /backup/dir # 本地备份
rsync -avz -e ssh user@remote:/path /local/path # 远程备份
场景 | 命令 |
---|---|
查看磁盘和分区 | lsblk 、fdisk -l 、parted -l |
挂载/卸载分区 | mount /dev/sdb1 /mnt 、umount /mnt |
查看磁盘空间使用 | df -h 、du -sh /path |
数据克隆 | dd if=/dev/sda of=/dev/sdb |
• ps
:查看当前进程快照
ps aux # 查看所有进程详细信息
ps -ef # 标准格式显示进程
• top
:实时动态监控进程及资源占用(按 q
退出)
• htop
:增强版 top
(需安装,支持鼠标操作)
• pstree
:以树形结构显示进程关系
• kill
:通过 PID 终止进程
kill -9 PID # 强制终止进程
• killall
:通过进程名终止所有同名进程
killall nginx
• pkill
:通过模式匹配终止进程
pkill -f "python script.py"
• pgrep
:通过名称查找进程 PID
pgrep nginx # 输出 Nginx 的 PID
• lsof
:查看进程打开的文件/端口
lsof -i :80 # 查看占用 80 端口的进程
• nice
:启动进程时指定优先级(范围:-20 到 19,默认 0)
nice -n 10 command # 低优先级启动
• renice
:修改运行中进程的优先级
renice 5 -p PID # 将 PID 进程优先级改为 5
• &
:后台运行进程
python script.py &
• jobs
:查看当前终端后台任务
jobs -l # 显示任务 ID 和 PID
• fg
:将后台任务转到前台
fg %1 # 恢复任务 ID 为 1 的进程
• bg
:恢复暂停的后台任务
bg %1 # 后台继续运行任务 ID 为 1 的进程
• nohup
:脱离终端运行进程(忽略挂断信号)
nohup command &
• systemctl
:管理系统服务(systemd 系统)
systemctl start nginx # 启动服务
systemctl stop nginx # 停止服务
systemctl status nginx # 查看状态
• service
:传统服务管理命令(SysVinit 系统)
service nginx restart
• vmstat
:查看内存、CPU、I/O 等系统状态
vmstat 1 # 每秒刷新一次
• free
:查看内存使用情况
free -h # 人类可读格式
• iostat
:监控磁盘 I/O 和 CPU 使用率
iostat -x 1
• sar
:系统活动报告(需安装 sysstat
)
sar -u 1 # 查看 CPU 使用率
• netstat
:查看网络连接与进程
netstat -tulnp | grep :80
• ss
:替代 netstat
的现代工具
ss -tulnp
• strace
:跟踪进程的系统调用
strace -p PID
• gdb
:调试进程(需安装调试符号)
• crontab
:管理定时任务
crontab -e # 编辑当前用户的定时任务
crontab -l # 列出任务