Linux笔记

01 linux概述

Linux 是一个开源的操作系统内核,诞生于 1991 年,由芬兰程序员 Linus Torvalds 开发。它的核心特点是自由、开放、高度可定制,并广泛应用于服务器、开发、嵌入式设备等领域。


1. Linux 是什么?

操作系统内核:Linux 本质是一个管理计算机硬件和软件资源的“核心程序”(称为 内核),负责处理内存、CPU、设备驱动等底层任务。
Linux 发行版:普通人接触的 Linux 通常是“发行版”(如 Ubuntu、CentOS、Debian),它们在内核基础上打包了图形界面、软件工具等,形成完整的操作系统。
开源与自由:Linux 遵循 GPL 协议,允许用户自由使用、修改、分发代码,这与 Windows/macOS 的闭源模式截然不同。


2. Linux 的独特优势

稳定性:Linux 服务器可长时间运行不崩溃(比如运行数年无需重启)。
安全性:开源特性让漏洞更容易被发现和修复,且病毒较少。
资源占用低:适合老旧设备或嵌入式系统(如路由器、智能手表)。
强大的命令行:通过终端(Terminal)可以高效完成复杂任务(如批量处理文件、自动化脚本)。
软件生态丰富:支持大量免费开源软件,开发者工具(如 Python、GCC)尤其完善。


3. Linux 的常见用途

服务器领域:全球超 90% 的互联网服务器运行 Linux(如网站、数据库、云计算平台)。
开发环境:程序员常用 Linux 进行编程、部署(支持 Docker/Kubernetes 等工具)。
嵌入式设备:智能家电、车载系统、路由器等底层系统往往是 Linux。
科学计算:科研机构用 Linux 处理大数据、高性能计算(HPC)。


4. 学习 Linux 的起点

推荐发行版:可以从 CentOS7 开始。
基础学习
• 掌握常用命令:ls, cd, mkdir, rm, grep, chmod 等。
• 理解文件系统结构:/home, /etc, /var, /bin 等目录的作用。
• 学会包管理工具:apt(Debian/Ubuntu)或 yum(CentOS7)安装软件。
实践方法
• 在虚拟机(如CentOS7)或旧电脑上安装 Linux。
• 尝试用命令行完成日常任务(如安装软件、配置网络)。
• 参与开源项目或搭建个人服务器(如用 Nginx 部署网站)。


5. 学习资源推荐

在线文档:Linux 命令行教程、Linux中文手册


02 Linux基本目录

1. 根目录 /

所有目录的起点,类似于 Windows 的 C:\
关键规则:根目录下不直接存放用户文件,仅包含系统必要的子目录。


2. 核心系统目录

目录 用途 典型内容示例
/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 虚拟文件系统,用于配置内核参数 设备驱动、电源管理、内核模块

3. 用户相关目录

目录 用途 说明
/home 普通用户的家目录 每个用户独立子目录(如 /home/alice
/root 超级用户(root)的家目录 存放 root 的配置和文件
/tmp 临时文件(所有用户可读写) 重启后自动清理(部分系统保留一定时间)

4. 应用程序与资源目录

目录 用途 典型内容示例
/usr 用户级应用程序和资源(类似 C:\Program Files gcc, python, 文档、图标、库文件
/opt 第三方独立软件(如商业软件) /opt/google/chrome
/usr/local 用户手动编译安装的软件 推荐替代 /opt 的自定义安装位置
/srv 服务数据(如网站、FTP 文件) /srv/www(网站根目录)

5. 运行时与动态数据目录

目录 用途 典型内容示例
/var 动态数据(日志、缓存、数据库等) /var/log(日志)、/var/lib/mysql
/run 系统运行时的临时文件(如 PID 文件) /run/lock(锁文件)、进程 PID

6. 挂载点目录

目录 用途
/media 自动挂载可移动设备(U 盘、光盘)
/mnt 手动挂载临时文件系统(如网络存储)

7. 库文件与内核模块

目录 用途
/lib 系统核心库文件(如 /lib64 用于64位系统)
/lib/modules 内核模块(驱动)

8. 其他特殊目录

目录 用途
/lost+found 文件系统修复后恢复的碎片文件
/selinux SELinux 安全策略配置文件

目录结构图示

/
├── bin      # 基础命令
├── boot     # 启动文件
├── dev      # 设备文件
├── etc      # 配置
├── home     # 用户家目录
├── lib      # 系统库
├── media    # 自动挂载点
├── mnt      # 手动挂载点
├── opt      # 第三方软件
├── proc     # 内核/进程信息
├── root     # root家目录
├── run      # 运行时文件
├── sbin     # 系统管理命令
├── srv      # 服务数据
├── sys      # 内核参数
├── tmp      # 临时文件
├── usr      # 用户程序
└── var      # 动态数据

关键规则

  1. 用户文件
    • 个人数据存放于 /home/用户名,避免直接在根目录下创建文件。
    /tmp 仅用于临时文件,重启后可能丢失。

  2. 配置文件
    • 修改系统配置前备份 /etc 下的文件。
    • 自定义服务配置文件通常放在 /etc 的子目录(如 /etc/nginx)。

  3. 软件安装
    • 优先使用包管理器(yum/apt)安装到 /usr
    • 手动编译或第三方软件建议安装到 /opt/usr/local

  4. 日志与监控
    • 系统日志在 /var/log,定期清理避免占满磁盘。
    • 使用 df -h 检查挂载点磁盘使用情况。


03 常见的基本命令

一、文件与目录操作

命令 用途 常用参数示例 示例说明
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

五、软件包管理(以 CentOS 为例)

命令 用途 示例说明
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.txtfile.txt.gz
unzip 解压 ZIP 文件 unzip archive.zip

八、帮助与文档

命令 用途 示例说明
man 查看命令手册 man ls
--help 快速查看命令帮助 ls --help
which 显示命令的绝对路径 which python

常见问题(FAQ)

  1. 如何查看命令的详细用法?
    • 使用 man 命令名(如 man grep)或 命令名 --help

  2. 如何强制终止无响应的进程?
    • 先用 ps -aux | grep 进程名 找到 PID,再用 kill -9 PID

  3. 如何实时监控日志文件?
    • 使用 tail -f /var/log/syslog(Ubuntu)或 tail -f /var/log/messages(CentOS)。

  4. 如何统计文件行数?
    • 使用 wc -l file.txt


04 文件属性查看和修改

一、查看文件属性

1. 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:文件名。

2. stat 命令

用途:显示文件的详细属性(包括 inode、时间戳等)。
示例

stat file.txt

输出关键字段
Access:最后访问时间。
Modify:最后修改时间(文件内容变更)。
Change:最后状态变更时间(如权限或所有者修改)。
Inode:文件的唯一标识符。


二、文件权限管理

1. 权限符号说明

权限表示rwxr-xr-- 分为三组:
前 3 位:所有者权限(u)。
中 3 位:所属组权限(g)。
后 3 位:其他用户权限(o)。
符号含义
r(读):文件可读取,目录可列出内容。
w(写):文件可修改,目录可创建/删除文件。
x(执行):文件可执行,目录可进入。

2. 修改权限: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)
3. 修改所有者和所属组:chown

修改所有者

chown user file.txt        # 修改文件所有者
chown -R user:group dir/   # 递归修改目录所有者及所属组

仅修改所属组

chgrp group file.txt       # 修改文件所属组

三、时间戳管理

1. 修改文件时间戳:touch

更新为当前时间

touch file.txt            # 更新所有时间戳为当前时间

自定义时间

touch -t 202310011200 file.txt  # 设置为 2023-10-01 12:00

四、文件特殊属性

1. 隐藏属性:chattrlsattr

查看隐藏属性

lsattr file.txt

设置属性

chattr +i file.txt    # 设置不可修改(immutable,root 用户操作)
chattr -i file.txt    # 取消不可修改属性

常用属性
a:仅允许追加内容(适用于日志文件)。
i:文件不可删除、修改或重命名。


五、总结与注意事项

1. 常用操作速查表
操作 命令示例
查看文件权限 ls -l file.txt
修改权限为 rwxr-xr-x chmod 755 file.txt
递归修改目录所有者 chown -R user:group dir/
防止文件被误删 chattr +i file.txt
2. 注意事项

谨慎使用 chmod 777:过度开放权限可能导致安全风险。
chattr 需 root 权限:修改隐藏属性通常需要管理员权限。
备份配置文件:修改 /etc 下的文件前建议备份。

05 多种文件内容查看方式

一、基础文件查看

1. cat - 直接显示文件内容

用途:快速查看小文件,或合并多个文件。
示例

cat file.txt              # 显示全部内容
cat file1.txt file2.txt   # 合并显示多个文件
cat -n file.txt          # 显示行号
2. nl - 显示带行号的内容

用途:类似 cat -n,但格式更规范。
示例

nl file.txt               # 显示行号及内容
nl -b a file.txt          # 显示所有行号(包括空行)

二、分页浏览文件

1. more - 分页显示(仅向下翻页)

用途:适合查看较长的文件。
操作

more file.log

空格键:向下翻页。
Enter:逐行滚动。
q:退出。

2. less - 高级分页(支持上下翻页/搜索)

用途:功能更强大的分页工具。
操作

less file.log

上下箭头:逐行滚动。
/keyword:搜索关键词(按 n 跳转到下一个匹配项)。
g:跳到文件开头,G:跳到文件末尾。
q:退出。


三、实时监控文件变化

1. tail - 查看文件尾部

用途:实时跟踪日志文件更新。
示例

tail -n 20 file.log      # 显示最后20行
tail -f file.log         # 实时跟踪新增内容(常用监控日志)
tail -F file.log         # 跟踪文件(即使文件被重命名或重新创建)
2. head - 查看文件头部

用途:快速查看文件开头部分。
示例

head -n 10 file.txt      # 显示前10行

四、过滤与搜索内容

1. grep - 关键词搜索

用途:查找包含特定模式的行。
示例

grep "error" file.log           # 查找包含 "error" 的行
grep -i "warning" file.log      # 忽略大小写搜索
grep -v "debug" file.log        # 排除包含 "debug" 的行
grep -C 3 "error" file.log      # 显示匹配行及其前后3行上下文
2. awk - 按列处理文本

用途:提取特定列或格式化输出。
示例

awk '{print $1, $3}' data.txt   # 打印第1列和第3列
awk -F ',' '{print $2}' data.csv  # 以逗号分隔列(处理CSV)
3. sed - 流编辑器(批量处理)

用途:替换或删除指定内容。
示例

sed 's/old/new/g' file.txt      # 替换所有 "old" 为 "new"
sed -n '5,10p' file.txt         # 仅显示5到10行

五、按列处理文件

1. cut - 按列切割内容

用途:提取特定列的数据。
示例

cut -d ':' -f 1,3 /etc/passwd   # 提取用户名和UID(以冒号分隔)
2. column - 列对齐显示

用途:将文本按列对齐(适合表格数据)。
示例

cat data.txt | column -t        # 自动对齐列

六、排序与去重

1. sort - 排序内容

示例

sort file.txt                  # 按字母顺序排序
sort -n data.txt               # 按数值大小排序
sort -u file.txt               # 去重后排序
2. uniq - 去重相邻重复行

示例

uniq file.txt                  # 去重(需先排序)
uniq -c file.txt               # 统计重复次数

七、文件差异比较

1. diff - 比较两个文件差异

示例

diff file1.txt file2.txt       # 显示差异行
diff -u file1.txt file2.txt    # 生成合并格式的差异报告
2. vimdiff - 可视化差异比较

用途:用 Vim 分屏对比文件。
示例

vimdiff file1.txt file2.txt    # 高亮显示差异

八、高级编辑工具

1. vim / vi - 编辑文件

用途:直接编辑文件并查看内容。
操作

vim file.txt

i:进入编辑模式。
Esc:q:退出。
/keyword:搜索内容。

2. view - 只读模式打开文件

用途:类似 vim,但禁止编辑。

view file.txt

总结:根据场景选择工具

需求 推荐命令
快速查看小文件 cat, nl
分页浏览长文件 less(优先), more
实时监控日志尾部 tail -f
关键词搜索 grep
按列提取数据 cut, awk
批量替换文本 sed
比较文件差异 diff, vimdiff
编辑文件 vim, nano

06 硬链接和软链接

在 Linux/Unix 系统中,硬链接(Hard Link)软链接(Symbolic Link,也称软连接) 是两种不同的文件链接方式,用于实现文件的多路径访问和管理。


一、硬链接(Hard Link)

1. 定义

硬链接是文件系统中 指向同一 inode 的多个文件名,所有硬链接共享相同的物理数据块。
本质:同一文件的多个入口(别名),删除原文件不会影响硬链接的可用性。

2. 创建方法
ln 原文件 硬链接名

示例

ln file.txt hard_link.txt
3. 特点

共享 inode:所有硬链接和原文件具有相同的 inode 号。
同步更新:修改任一硬链接或原文件,所有链接内容同步变化。
独立性:删除原文件后,硬链接仍有效(仅减少 inode 的引用计数)。
限制
• 无法跨不同文件系统(如从 /dev/sda1 链接到 /dev/sdb1)。
• 无法链接目录(防止循环引用导致系统问题)。

4. 使用场景

• 防止重要文件被误删(通过多个硬链接保留访问入口)。
• 共享大型文件(节省磁盘空间,避免重复存储)。

5. 查看硬链接
ls -i file.txt hard_link.txt  # 查看 inode 号
stat file.txt                # 查看链接数(Links 字段)

二、软链接(Symbolic Link)

1. 定义

软链接独立文件,存储目标文件的路径信息,类似 Windows 的快捷方式。
本质:指向另一个文件的指针,依赖目标文件的存在。

2. 创建方法
ln -s 目标文件 软链接名

示例

ln -s /var/log/app.log app_log_link
3. 特点

独立 inode:软链接有自己的 inode 号,与目标文件不同。
路径依赖:目标文件被删除后,软链接失效(成为“悬空链接”)。
灵活性
• 可跨不同文件系统和磁盘分区。
• 可链接目录(如 /usr/bin/python3 -> /usr/bin/python3.9)。
权限无关:软链接权限始终为 lrwxrwxrwx,实际权限由目标文件决定。

4. 使用场景

• 为长路径文件创建快捷方式(如链接到深层目录的配置文件)。
• 动态切换版本(如 /usr/bin/python 指向不同 Python 版本)。
• 跨文件系统引用(如将数据目录链接到外部存储)。

5. 查看软链接
ls -l 软链接名          # 显示指向路径(例如:app_log_link -> /var/log/app.log)
readlink 软链接名       # 直接输出目标路径

三、关键区别对比

特性 硬链接 软链接
存储内容 直接指向 inode 和数据块 存储目标文件的路径字符串
inode 号 与原文件相同 独立 inode 号
跨文件系统 不支持 支持
链接目录 不支持 支持
原文件删除后 仍有效(引用计数减 1) 失效(悬空链接)
文件大小 与原文件相同(共享数据块) 较小(仅存储路径信息)
权限同步性 与原文件权限一致 自身权限固定为 777(实际权限由目标文件决定)

四、操作示例与验证

1. 创建并验证硬链接
# 创建原文件
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
2. 创建并验证软链接
# 创建目标文件
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

07 Vim编辑器

一、Vim 是什么?

Vim(Vi IMproved) 是 Linux/Unix 系统中最强大的 终端文本编辑器 之一,是经典编辑器 Vi 的增强版。
特点
模式化编辑:通过不同模式(插入、命令、可视等)提高效率。
高度可定制:支持插件、主题和快捷键配置。
跨平台:可在终端、SSH 等无图形界面环境中使用。


二、Vim 的安装

1. 安装 Vim

CentOS/RHEL

sudo yum install vim
2. 启动 Vim
vim 文件名     # 打开/创建文件(若文件不存在则新建)

三、Vim 的三种核心模式

Vim 的操作围绕 模式切换 展开,以下是三种最常用模式:

模式 功能 进入方式
普通模式 执行命令(移动光标、删除、复制等) 启动 Vim 后的默认模式,或按 Esc
插入模式 输入文本 i(插入)或 a(追加)
命令模式 执行保存、退出等操作 普通模式下按 :

四、基础操作命令

1. 移动光标(普通模式)

方向键h(左)、j(下)、k(上)、l(右)。
按单词移动
w:跳到下一个单词开头。
b:跳到上一个单词开头。
行首/行尾
0:移动到行首。
$:移动到行尾。
翻页
Ctrl + f:向下翻页。
Ctrl + b:向上翻页。

2. 插入文本

i:在光标前插入。
a:在光标后插入。
o:在当前行下方插入新行。
O:在当前行上方插入新行。

3. 删除与撤销

x:删除光标处字符。
dd:删除整行。
u:撤销操作。
Ctrl + r:重做操作。

4. 复制与粘贴

yy:复制当前行。
p:粘贴到光标后。
P:粘贴到光标前。

5. 保存与退出(命令模式)
:w            # 保存文件
:q            # 退出 Vim
:wq           # 保存并退出
:q!           # 强制退出(不保存修改)

五、高效编辑技巧

1. 批量替换文本

语法:%s/旧内容/新内容/g

:%s/foo/bar/g      # 全局替换所有 "foo" 为 "bar"
:%s/foo/bar/gc     # 替换前逐个确认(c = confirm)
2. 搜索关键词

普通模式下按 /,输入关键词后回车:

/keyword      # 搜索 "keyword"
n             # 跳转到下一个匹配项
N             # 跳转到上一个匹配项
3. 多窗口编辑

水平分屏:sp 文件名
垂直分屏:vsp 文件名
切换窗口Ctrl + w + 方向键

4. 显示行号
:set number     # 显示行号
:set nonumber   # 隐藏行号

六、Vim 配置优化(~/.vimrc)

通过 ~/.vimrc 文件自定义 Vim 行为,示例配置:

" 显示行号
set number

" 启用语法高亮
syntax on

" 自动缩进
set autoindent

" Tab 转换为 4 个空格
set tabstop=4
set shiftwidth=4
set expandtab

" 高亮搜索匹配项
set hlsearch

七、Vim 学习资源

交互式教程:终端输入 vimtutor


八、Vim 常见问题

  1. 如何退出 Vim?
    • 按 Esc 进入普通模式,输入 :q 退出。
  2. 误触了 Ctrl + s,Vim 卡死?
    • 按 Ctrl + q 恢复。
  3. 如何删除多行?
    • 普通模式下输入 5dd 删除 5 行。

08 Linux账号管理

一、用户管理

1. 创建用户
sudo useradd [选项] 用户名

常用选项
-m:创建用户家目录(如 /home/用户名)。
-s:指定 Shell(如 -s /bin/bash)。
-u:手动指定 UID。
-g:指定主组(需提前创建)。
-G:指定附加组(多个组用逗号分隔)。
示例

sudo useradd -m -s /bin/bash alice  # 创建用户 alice 并生成家目录
2. 设置/修改密码
sudo passwd 用户名    # 管理员为用户设置密码
passwd               # 当前用户修改自己的密码
3. 修改用户属性
sudo usermod [选项] 用户名

常用选项
-l 新用户名:重命名用户。
-d 新家目录:修改家目录路径。
-aG 附加组:将用户添加到附加组(需与 -G 结合使用)。

4. 删除用户
sudo userdel -r 用户名    # -r 表示同时删除家目录和邮件池
5. 查看用户信息
id 用户名        # 显示 UID、GID 及所属组
finger 用户名   # 查看用户详细信息(需安装 finger 包)

二、组管理

1. 创建组
sudo groupadd 组名
2. 修改组属性
sudo groupmod -n 新组名 旧组名    # 重命名组
3. 删除组
sudo groupdel 组名
4. 将用户加入/移出组
sudo usermod -aG 组名 用户名    # 将用户加入附加组(-a 表示追加)
sudo gpasswd -d 用户名 组名     # 将用户移出组

三、用户与组配置文件

1. /etc/passwd

格式用户名:x:UID:GID:描述:家目录:Shell
示例

alice:x:1001:1001:Alice:/home/alice:/bin/bash
2. /etc/shadow

格式用户名:加密密码:最后修改天数:最小密码寿命:最大密码寿命:警告期:失效宽限:账号失效日:保留
关键字段
• 密码策略:chage -l 用户名 查看。

3. /etc/group

格式组名:x:GID:组成员列表
示例

developers:x:1002:alice,bob

四、权限管理

1. 文件权限

权限类型r(读)、w(写)、x(执行)。
权限层级:所有者(u)、所属组(g)、其他用户(o)。

2. 修改文件所有者与组
sudo chown 所有者:组 文件     # 同时修改所有者和组
sudo chown 所有者 文件       # 仅修改所有者
sudo chgrp 组 文件          # 仅修改所属组
3. 修改文件权限
chmod 755 文件              # 数字模式(rwxr-xr-x)
chmod u+x,g-w,o=r 文件      # 符号模式(所有者添加执行,组移除写,其他设为只读)

五、Sudo 权限管理

1. 赋予用户 Sudo 权限

编辑 sudoers 文件

sudo visudo    # 安全编辑方式,避免语法错误

添加以下行

用户名 ALL=(ALL:ALL) ALL    # 允许用户执行所有命令
%组名 ALL=(ALL) ALL         # 允许组内所有用户执行命令
2. 临时切换为 Root
sudo -i       # 切换到 root 用户
exit          # 退出

六、安全最佳实践

  1. 禁用 Root 登录
    • 修改 /etc/ssh/sshd_config,设置 PermitRootLogin no
  2. 密码策略
    sudo chage -M 90 -m 7 -W 14 用户名  # 密码最长90天,最短7天修改,提前14天警告
    
  3. 限制用户权限
    • 使用 sudo 替代直接使用 root。
    • 通过组管理批量分配权限。
  4. 监控登录
    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 文件

09 用户组

一、用户组的作用

权限共享:通过组批量管理用户对文件/目录的访问权限。
简化管理:替代为每个用户单独设置权限,提升效率。
安全隔离:限制非授权用户访问敏感资源。


二、组类型

1. 主组(Primary Group)

• 每个用户必须属于 一个主组
• 用户创建文件时,文件的默认所属组为其主组。
相关文件/etc/passwd 中用户行的第4字段(GID)。

2. 附加组(Supplementary Group)

• 用户可加入多个附加组,获得额外的权限。
相关文件/etc/group 中组的最后一个字段(成员列表)。


三、组管理命令

1. 创建组
sudo groupadd 组名           # 创建普通组
sudo groupadd -g 1005 组名   # 指定 GID 创建组
2. 修改组属性
sudo groupmod -n 新组名 旧组名   # 重命名组
sudo groupmod -g 1006 组名       # 修改组的 GID
3. 删除组
sudo groupdel 组名    # 删除空组(无成员)
sudo groupdel -f 组名 # 强制删除非空组(慎用!)
4. 查看组信息
getent group 组名      # 查看组详细信息
cat /etc/group | grep 组名  # 过滤组配置

四、用户与组的关联操作

1. 创建用户时指定组
sudo useradd -g 主组名 -G 附加组1,附加组2 用户名

示例

sudo useradd -g developers -G docker,www-data alice
2. 将用户加入/移出附加组
sudo usermod -aG 附加组名 用户名   # 将用户加入组(-a 表示追加)
sudo gpasswd -d 用户名 组名       # 将用户移出组
3. 查看用户所属的组
groups 用户名    # 显示用户的主组和附加组
id 用户名        # 显示 UID、GID 及所有组
4. 临时切换用户的主组
newgrp 组名     # 切换后创建的文件默认属于该组(需用户已加入该组)

五、文件与组的权限控制

1. 修改文件所属组
sudo chgrp 组名 文件或目录    # 修改所属组
sudo chown :组名 文件或目录   # 等效于 chgrp
2. 设置目录的 SetGID 位

作用:目录中新创建的文件自动继承父目录的所属组。
示例

sudo chmod g+s /shared_dir    # 添加 SetGID 位
ls -ld /shared_dir            # 查看权限(drwxr-sr-x)
3. 组权限分配示例

场景:团队协作目录 /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

六、组与 Sudo 权限

通过组批量授予管理员权限(如允许 admins 组执行任何命令):

sudo visudo    # 编辑 sudoers 文件

添加以下行:

%admins ALL=(ALL:ALL) ALL   # % 表示组名

七、配置文件解析

1. /etc/group

格式组名:x:GID:成员列表
示例

developers:x:1001:alice,bob

八、常用命令速查

操作 命令
创建组 sudo groupadd 组名
将用户加入附加组 sudo usermod -aG 组名 用户名
查看用户所属组 groups 用户名
修改文件所属组 sudo chgrp 组名 文件
设置目录 SetGID 位 sudo chmod g+s 目录
删除组 sudo groupdel 组名

10 Linux 磁盘管理

一、磁盘信息查看

1. lsblk - 列出块设备信息

用途:查看磁盘、分区及挂载点信息。
常用选项

lsblk               # 显示树形结构
lsblk -f            # 包含文件系统类型和 UUID
lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT  # 自定义输出列
2. df - 查看磁盘空间使用情况

用途:显示已挂载文件系统的磁盘空间占用。
常用选项

df -h              # 人类可读格式(GB/MB)
df -i              # 查看 inode 使用情况
df -T              # 显示文件系统类型

二、挂载与卸载

1. mount - 挂载文件系统

用途:将分区或设备挂载到目录。
示例

sudo mount /dev/sdb1 /mnt  # 挂载到 /mnt
sudo mount -o ro /dev/sdb1 /mnt  # 以只读模式挂载
2. umount - 卸载文件系统

用途:卸载已挂载的分区。
示例

sudo umount /mnt           # 通过挂载点卸载
sudo umount /dev/sdb1      # 通过设备路径卸载
3. /etc/fstab - 永久挂载配置

编辑文件

sudo vim /etc/fstab

添加行示例

UUID=1234-5678 /data ext4 defaults 0 0

三、磁盘空间分析

1. du - 查看目录/文件占用空间

用途:统计磁盘使用情况。
常用选项

du -sh /path/to/dir     # 显示目录总大小
du -h --max-depth=1 /   # 查看根目录下一级子目录大小
du -ah /path            # 显示所有文件和目录的详细大小
2. ncdu - 交互式磁盘分析工具

用途:可视化分析磁盘空间占用。
安装与使用

sudo apt install ncdu   # Debian/Ubuntu
ncdu /path/to/scan      # 扫描目录

四、数据备份与恢复

1. dd - 磁盘数据克隆

用途:全盘备份或恢复(谨慎使用!)。
示例

sudo dd if=/dev/sdb of=/dev/sdc bs=4M status=progress  # 磁盘克隆
sudo dd if=/dev/sdb of=disk.img bs=4M  # 创建磁盘镜像
2. rsync - 增量备份文件

用途:高效同步文件和目录。
示例

rsync -avz /source/dir /backup/dir    # 本地备份
rsync -avz -e ssh user@remote:/path /local/path  # 远程备份

五、常用命令速查表

场景 命令
查看磁盘和分区 lsblkfdisk -lparted -l
挂载/卸载分区 mount /dev/sdb1 /mntumount /mnt
查看磁盘空间使用 df -hdu -sh /path
数据克隆 dd if=/dev/sda of=/dev/sdb

11 Linux进程管理

1. 进程查看

ps:查看当前进程快照

ps aux       # 查看所有进程详细信息
ps -ef       # 标准格式显示进程

top:实时动态监控进程及资源占用(按 q 退出)
htop:增强版 top(需安装,支持鼠标操作)
pstree:以树形结构显示进程关系


2. 进程终止

kill:通过 PID 终止进程

kill -9 PID    # 强制终止进程

killall:通过进程名终止所有同名进程

killall nginx

pkill:通过模式匹配终止进程

pkill -f "python script.py"

3. 进程搜索

pgrep:通过名称查找进程 PID

pgrep nginx    # 输出 Nginx 的 PID

lsof:查看进程打开的文件/端口

lsof -i :80    # 查看占用 80 端口的进程

4. 优先级调整

nice:启动进程时指定优先级(范围:-20 到 19,默认 0)

nice -n 10 command   # 低优先级启动

renice:修改运行中进程的优先级

renice 5 -p PID      # 将 PID 进程优先级改为 5

5. 后台/前台控制

&:后台运行进程

python script.py &

jobs:查看当前终端后台任务

jobs -l       # 显示任务 ID 和 PID

fg:将后台任务转到前台

fg %1        # 恢复任务 ID 为 1 的进程

bg:恢复暂停的后台任务

bg %1        # 后台继续运行任务 ID 为 1 的进程

nohup:脱离终端运行进程(忽略挂断信号)

nohup command &

6. 系统服务管理

systemctl:管理系统服务(systemd 系统)

systemctl start nginx     # 启动服务
systemctl stop nginx      # 停止服务
systemctl status nginx   # 查看状态

service:传统服务管理命令(SysVinit 系统)

service nginx restart

7. 资源监控

vmstat:查看内存、CPU、I/O 等系统状态

vmstat 1     # 每秒刷新一次

free:查看内存使用情况

free -h      # 人类可读格式

iostat:监控磁盘 I/O 和 CPU 使用率

iostat -x 1

sar:系统活动报告(需安装 sysstat

sar -u 1      # 查看 CPU 使用率

8. 网络连接关联进程

netstat:查看网络连接与进程

netstat -tulnp | grep :80

ss:替代 netstat 的现代工具

ss -tulnp

9. 进程调试

strace:跟踪进程的系统调用

strace -p PID

gdb:调试进程(需安装调试符号)


10. 定时任务

crontab:管理定时任务

crontab -e       # 编辑当前用户的定时任务
crontab -l       # 列出任务

你可能感兴趣的:(linux,笔记,运维)