ithuang
ithuang
发布于 2025-07-05 / 4 阅读
0

Linux基础总结

Linux基础总结

一、Linux 基础介绍

什么是 Linux?
Linux 是一套类 UNIX 的开源操作系统内核,由林纳斯·托瓦兹于 1991 年首次发布。通常所说的“Linux”是指基于 Linux 内核、搭配 GNU 工具链和各种应用的完整操作系统(GNU/Linux 发行版)。

核心概念:

  • 内核:管理硬件、内存、进程、文件系统和设备驱动。
  • Shell:用户与内核交互的命令解释器,常见的有 Bash、Zsh、Fish。
  • 文件系统:一切皆文件。采用树形结构,根目录为 /。
  • 多用户多任务:支持多个用户同时登录,且每个用户可运行多个进程。

常见发行版家族:

  • Debian 系:Ubuntu, Debian, Linux Mint(包管理 apt/dpkg)
  • Red Hat 系:RHEL, CentOS Stream, Fedora, Rocky Linux(包管理 yum/dnf/rpm)
  • 其他:Arch Linux (pacman), openSUSE (zypper), Alpine (apk)

主要目录结构(FHS):

  • /bin、/sbin:基本系统命令(现代系统常链接到 /usr/bin)
  • /boot:内核和引导文件
  • /dev:设备文件
  • /etc:系统和应用配置文件
  • /home:普通用户主目录
  • /root:root 用户主目录
  • /var:可变数据,如日志、数据库、邮件
  • /tmp:临时文件,重启后可能清空
  • /usr:共享的只读用户程序和数据
  • /proc、/sys:虚拟文件系统,提供内核和进程信息

二、目录与文件操作

所有操作都围绕文件和目录展开,掌握以下命令及其选项是基础。

1. 导航与查看

pwd                     # 显示当前目录
cd /etc/apt             # 切换目录
cd ..                   # 返回上级
cd ~                    # 回用户主目录
ls -la                  # 列出所有文件(含隐藏),长格式显示
ls -lhS                 # 按大小排序,人类可读格式
tree -L 2 /usr          # 以树形显示 /usr 下两层结构

2. 创建与删除

mkdir -p project/src/main   # 递归创建多级目录
rmdir emptydir              # 仅删除空目录
rm -rf temp/                # 强制递归删除(慎用)
rm -i *.txt                 # 交互式删除每个 .txt 文件

3. 复制与移动

cp file1.txt file2.txt          # 复制文件
cp -r dir1/ dir2/               # 递归复制目录
mv oldname.txt newname.txt      # 重命名
mv file.txt /path/to/dest/      # 移动文件

4. 文件操作

touch newfile.txt               # 创建空文件或更新时间戳
file unknown.dat                # 识别文件类型
ln -s /original/file link_name  # 创建软链接(符号链接)
ln hardlink target              # 创建硬链接(不可跨文件系统,不用于目录)

5. 查看文件内容

cat file.txt                    # 一次显示全部
tac file.txt                    # 反向显示
less largefile.log              # 分页浏览,支持搜索 (/关键词),按 q 退出
more file.txt                   # 老式分页
head -n 20 file.txt             # 显示前 20 行
tail -f /var/log/syslog         # 动态跟踪文件末尾
nl file.txt                     # 带行号显示

6. 通配符与匹配

  • * 匹配任意多个字符
  • ? 匹配单个字符
  • [abc] 匹配括号中任一字符
  • [a-z] 匹配范围内字符
ls *.conf           # 列出所有 .conf 文件
rm report?.txt      # 删除 report1.txt, reportA.txt 等
cp data[0-9].csv bak/

三、基本工具与核心命令

这些命令构成日常操作、自动化和文本处理的基石。

1. 信息与帮助

man ls              # 手册页,最详细(按 / 搜索,q 退出)
ls --help           # 简短帮助
type cd             # 显示命令类型(内建/外部)
which python3       # 查找可执行文件路径
whatis ls           # 一句话描述命令
alias ll='ls -la'   # 创建别名
unalias ll          # 取消别名

2. 输入输出与重定向

  • > 覆盖写入文件
  • >> 追加写入
  • < 文件作为输入
  • 2> 重定向标准错误
echo "Hello" > greeting.txt
date >> log.txt
wc -l < file.txt                # 输入重定向,只输出行数
ls nonexist/ 2> error.log       # 错误信息写入文件
ls existing/ non/ &> all.log    # 同时重定向标准输出和错误

3. 管道与组合命令

# 将前一个命令的输出作为后一个命令的输入
ps aux | grep nginx | wc -l
cat /etc/passwd | sort | less

4. 常用工具

echo "User: $USER"              # 输出变量内容
printf "Name: %s, Age: %d\n" "Alice" 30
date "+%Y-%m-%d %H:%M:%S"       # 格式化日期
history | tail -20              # 查看最近20条命令
clear                           # 清屏
seq 1 10                        # 生成序列

5. 文本处理(不含三剑客)

wc -lwc file.txt                # 行数、单词数、字符数
sort -n -k2 data.txt            # 按第二列数字排序
sort -u names.txt               # 排序并去重
uniq -c repeated.txt            # 统计重复行数(需先 sort)
cut -d':' -f1,7 /etc/passwd     # 提取第1和第7列,分隔符为:
tr 'a-z' 'A-Z' < file.txt       # 大小写转换
tr -d '\r' < dosfile > unixfile # 删除回车符
tee output.txt                  # 将标准输出同时写入文件和屏幕

6. 查找与定位

# find:实时搜索,条件丰富
find /home -name "*.jpg" -size +1M                  # 大于1M的jpg
find /var/log -mtime -7 -name "*.log" -exec ls -lh {} \;  # 最近7天修改的日志
find . -type f -empty -delete                       # 删除当前目录下空文件

# locate:需更新数据库 updatedb,速度快
locate nginx.conf

7. 压缩与归档

# tar 打包解包
tar -cvf archive.tar dir1/          # 打包
tar -xvf archive.tar                # 解包
tar -czvf archive.tar.gz dir/       # 打包并用 gzip 压缩
tar -xzvf archive.tar.gz
tar -cjvf archive.tar.bz2 dir/      # bzip2 压缩
tar -xJvf archive.tar.xz            # xz 解压

# 单独压缩工具
gzip file.txt           # 生成 file.txt.gz,原文件删除
gunzip file.txt.gz
zip -r backup.zip dir/  # 兼容 Windows 的打包压缩
unzip backup.zip

四、Linux 三剑客:grep、sed、awk

文本处理神器,是 Shell 脚本和日志分析的核心。

1. grep - 文本搜索

从文件或输入中过滤出匹配模式的行。

# 基本用法
grep "error" /var/log/syslog                     # 搜索包含 error 的行
grep -i "Error" file.txt                         # 忽略大小写
grep -v "debug" app.log                          # 反向选择,不包含 debug 的行
grep -r "TODO" ./src                             # 递归搜索目录
grep -E "[0-9]{1,3}\.[0-9]{1,3}" log.txt        # 扩展正则 (ERE),匹配 IP
grep -oP '\d+\.\d+\.\d+\.\d+' access.log        # Perl 正则,仅输出匹配部分
grep -c "timeout" service.log                    # 统计匹配行数
grep -A 2 -B 1 "panic" log                       # 匹配行及前后各 1/2 行

2. sed - 流编辑器

逐行处理文本,用于替换、删除、插入等。

# 替换(s/模式/替换/标志)
sed 's/old/new/' file.txt                    # 每行只替换第一个
sed 's/old/new/g' file.txt                   # 全局替换
sed '3s/foo/bar/' file.txt                   # 仅替换第3行
sed -i 's/#\(PermitRootLogin\).*/\1 yes/' /etc/ssh/sshd_config  # 直接修改文件(备份:-i.bak)

# 删除与打印
sed '5,10d' file.txt                         # 删除第5-10行,其余输出
sed -n '/start/,/end/p' log                  # 打印从 start 到 end 之间的行

# 插入与追加
sed '1i\# New Header' file.txt               # 第1行前插入
sed '$a\# EOF' file.txt                      # 最后一行后追加

# 多点编辑
sed -e 's/foo/bar/g' -e 's/baz/qux/g' file

3. awk - 格式化与报告工具

按列处理文本,内置强大的模式匹配和计算能力。

# 基本结构
awk '条件 {动作}' file
awk -F: '{print $1, $7}' /etc/passwd          # -F 指定分隔符,默认空格/制表符

# 示例:分析访问日志(假设格式为  IP 时间 请求 状态码 字节)
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head  # IP 访问量 Top 10
awk '$4 == "404" {print $7}' access.log | sort | uniq -c | sort -rn  # 404 请求的 URL 统计

# 内置变量:NR 行号,NF 列数,$0 整行
awk 'NF > 5 {print NR, $0}' data.txt           # 打印列数大于5的行及行号

# 计算与输出
df -h | awk '/\/dev\/sd/ {sum+=$2} END {print "Total:", sum}'  # 统计磁盘总量

# 格式化输出
awk -F: 'BEGIN {printf "%-15s %-5s\n", "User", "UID"} {printf "%-15s %-5s\n", $1, $3}' /etc/passwd

五、用户与权限管理

Linux 是多用户系统,安全性依赖于严格的权限模型。

1. 用户与组

核心文件:

  • /etc/passwd:用户信息(用户名:密码占位:x:UID:GID:描述:家目录:Shell)
  • /etc/shadow:加密密码及过期信息
  • /etc/group:组信息

管理命令:

# 用户
useradd -m -s /bin/bash alice                # 创建用户并建家目录
useradd -u 1500 -g developers bob            # 指定 UID 和主组
passwd alice                                 # 设置密码
usermod -aG sudo,docker alice                # 追加附加组(-a 追加,否则覆盖)
usermod -L bob                               # 锁定用户
userdel -r alice                             # 删除用户并清理家目录

# 组
groupadd developers                          # 新建组
groupmod -n devs developers                  # 重命名组
groupdel devs                                # 删除组
gpasswd -d bob sudo                          # 从组中移除用户

# 查看与切换
id alice                                     # 查看用户 UID、GID 及所有组
whoami                                       # 当前用户
su - bob                                     # 切换到 bob 并加载其环境
sudo command                                 # 以 root 或其他用户权限执行(需在 sudoers 中配置)
visudo                                       # 安全编辑 /etc/sudoers,如允许 wheel 组免密: %wheel ALL=(ALL) NOPASSWD: ALL

2. 文件权限与所有权

ls -l 输出: -rwxr-xr-- 1 alice devs 4096 May 29 10:00 script.sh
# 类型|拥有者(u) 组(g) 其他人(o)
# r=4, w=2, x=1

# 修改权限
chmod u+x script.sh           # 拥有者加执行
chmod g-w,o-r file.txt        # 组去掉写,其他人去掉读
chmod 755 script.sh           # rwxr-xr-x
chmod 644 file.txt            # rw-r--r--

# 修改属主与属组
chown alice:devs file.txt     # 同时改用户和组
chown -R bob:www-data /web    # 递归修改目录下所有文件
chgrp admins report.txt       # 仅改组

# 默认权限掩码
umask 022                     # 新文件权限为 644 (666-022),目录为 755 (777-022)

3. 特殊权限

  • SUID (4):作用于二进制可执行文件,执行时具有文件所有者的权限。chmod u+s /usr/bin/passwd,显示为 rws。
  • SGID (2):作用于文件时,用文件所属组权限执行;作用于目录时,在该目录下新建文件默认继承目录的组。chmod g+s shared/,显示为 r-s。
  • Sticky Bit (1):仅对目录有效,目录下的文件只能由文件所有者和 root 删除。chmod +t /tmp,显示为 rwt。

4. 访问控制列表 (ACL)

提供更细粒度的权限管理。

getfacl file.txt                              # 查看 ACL
setfacl -m u:bob:rw- report.txt               # 给用户 bob 添加读写权
setfacl -m g:developers:r-- report.txt        # 给组 developers 添加读权
setfacl -x u:bob report.txt                   # 删除 bob 的 ACL 条目
setfacl -b report.txt                         # 清空所有 ACL

六、系统命令

用于监控系统状态、管理进程和存储。

1. 系统信息

uname -a                   # 完整内核信息
hostnamectl                # 主机名及系统详情
lsb_release -a             # 发行版本信息
uptime                     # 系统运行时间及负载
lscpu                      # CPU 信息
lsmem                      # 内存硬件信息

2. 进程管理

# 查看
ps aux                     # 所有进程 BSD 风格
ps -ef                     # 所有进程标准格式
pgrep -u alice nginx       # 查找 alice 的 nginx 进程 PID
pidof sshd                 # 进程名称匹配 PID
top                        # 动态交互查看,按 P CPU排序,M 内存排序,k 杀进程
htop                       # top 增强版,界面更友好

# 控制
kill 1234                  # 发送 TERM 信号(默认,优雅退出)
kill -9 1234               # 强制杀死
pkill -f "python app.py"   # 按进程名及参数杀
killall nginx              # 杀掉所有名为 nginx 的进程
nice -n 10 long_running.sh # 以低优先级运行(-20 最高,19 最低)
renice -5 -p 8888          # 调整已运行进程优先级

# 后台与持久化
command &                  # 放后台
jobs                       # 查看后台任务
fg %1                      # 把作业1调回前台
bg %1                      # 让后台作业继续运行
nohup long_task.sh &       # 关闭终端后继续运行,输出默认到 nohup.out
screen -S my_session       # 新建 screen 会话
screen -r my_session       # 重新连接
tmux new -s dev            # 新建 tmux 会话 (功能更强大)
tmux attach -t dev

3. 磁盘与内存

df -h                      # 分区使用情况,人类可读
du -sh /var/log/*          # 目录/文件大小总结
du -h --max-depth=1 /home  # 一层深度大小
free -m                    # 内存和交换分区(-h 人类可读)
vmstat 2 5                 # 每2秒采集5次虚拟内存统计
iostat -x 1                # 磁盘 I/O 详细统计
lsblk                      # 列出块设备树
blkid                      # 查看块设备 UUID 和文件系统类型
mount /dev/sdb1 /mnt/data  # 挂载
umount /mnt/data           # 卸载
fdisk -l                   # 查看磁盘分区
parted /dev/sdb mklabel gpt mkpart primary ext4 1MiB 100%  # 创建 GPT 分区
mkfs.ext4 /dev/sdb1        # 格式化
fsck /dev/sdb1             # 文件系统检查
dd if=/dev/sda of=/backup/mbr.img bs=512 count=1 # 备份 MBR
dd if=/path/image.iso of=/dev/sdc bs=4M status=progress # 写入 U 盘

4. 网络

# 地址与接口
ip a                       # 查看网络接口和 IP (现代命令)
ifconfig                   # 传统命令 (需 net-tools)
ip r                       # 路由表

# 诊断
ping -c 4 8.8.8.8          # 测试连通性
traceroute google.com      # 路由跟踪
nslookup example.com       # 查询 DNS
dig example.com A +short   # 详细 DNS 查询
netstat -tulnp             # 监听端口及进程(-t tcp, -u udp, -l listen, -n 数字, -p 进程)
ss -tulnp                  # 更快的 netstat 替代
tcpdump -i eth0 port 80 -w capture.pcap   # 抓包
curl -I https://example.com               # 查看响应头
wget -c https://example.com/file.iso      # 下载,支持断点续传

# 文件传输
scp file.txt user@host:/remote/path/
rsync -avzP /local/dir/ user@host:/remote/dir/   # 增量同步,-P 显示进度并支持续传

5. 日志与计划任务

# journalctl (systemd 系统)
journalctl -u nginx --since "1 hour ago" -f   # 查看 nginx 服务日志并实时跟踪
journalctl -b -p err                           # 本次启动后 error 级别日志
dmesg | tail -30                               # 内核环形缓冲日志
tail -f /var/log/syslog /var/log/auth.log      # 多文件监控

# 定时任务
crontab -l                     # 列出当前用户定时任务
crontab -e                     # 编辑 (格式: 分 时 日 月 周 命令)
# 每天凌晨2点备份数据
0 2 * * * /home/alice/backup.sh
# 每5分钟检查服务
*/5 * * * * /usr/local/bin/check.sh
# 使用 at 执行一次性任务
at now + 1 hour
at> touch /tmp/onedone
at> Ctrl+D
systemctl list-timers --all    # 查看 systemd 定时器

6. 服务管理 (systemd)

systemctl status nginx         # 查看状态
systemctl start|stop|restart|reload nginx
systemctl enable --now nginx   # 设置开机自启并立即启动
systemctl disable nginx
systemctl list-units --type=service  # 列出所有已加载的服务
systemctl mask nginx           # 屏蔽服务(防止手动启动或自动启动)
systemctl daemon-reload        # 重载 systemd 配置

七、各种常用的服务

Linux 作为服务器,其价值体现在运行稳定的网络服务。

1. SSH 远程登录服务

  • 服务端:openssh-server
  • 配置:/etc/ssh/sshd_config (改端口、禁止密码登录 PasswordAuthentication no、禁止 root 登录 PermitRootLogin no)
  • 客户端连接:ssh -p 2222 user@host,免密登录 ssh-copy-id user@host
  • 文件传输:scp / rsync -e "ssh -p 2222"

2. Web 服务器

  • Nginx:高性能,反向代理、负载均衡。
    • 安装:apt install nginx
    • 站点配置 /etc/nginx/sites-available/,链接到 sites-enabled
    • 示例虚拟主机:server { listen 80; server_name example.com; root /var/www/html; }
  • Apache (httpd):模块丰富,.htaccess。
    • 配置 /etc/apache2/ 或 /etc/httpd/conf/httpd.conf

3. 数据库服务

  • MySQL / MariaDB:
    • systemctl start mariadb,初始化安全配置 mysql_secure_installation
    • 备份:mysqldump -u root -p dbname > backup.sql
    • 恢复:mysql -u root -p dbname < backup.sql
  • PostgreSQL:
    • 连接 sudo -u postgres psql,创建用户和数据库 CREATE USER app WITH PASSWORD 'secret'; CREATE DATABASE appdb OWNER app;
    • 配置远程访问 pg_hba.conf 和 postgresql.conf

4. FTP 服务

  • vsftpd:轻量 FTP 服务器。
    • 配置 /etc/vsftpd.conf(启用本地用户、禁锢在家目录 chroot_local_user=YES)
    • 高安全需求建议用 SFTP (SSH 自带,配置 Subsystem sftp internal-sftp 及 ChrootDirectory)

5. 文件共享服务

  • Samba:Linux 与 Windows 共享文件。

    • apt install samba,配置 /etc/samba/smb.conf:

      [shared]
        path = /srv/shared
        valid users = @staff
        read only = no
      
    • 添加用户 smbpasswd -a username

  • NFS:Linux 之间网络文件系统。

    • 服务端 /etc/exports:/srv/nfs 192.168.1.0/24(rw,sync,no_subtree_check)
    • 客户端挂载:mount -t nfs server:/srv/nfs /mnt/nfs

6. DNS 服务

  • BIND:最广泛使用的 DNS 服务器。
    • 安装 bind9,主要配置 /etc/bind/named.conf 及区域文件
    • 正反向解析区域配置示例(SOA, A, CNAME, MX 记录)

7. DHCP 服务

  • isc-dhcp-server:动态分配 IP。

    • 配置 /etc/dhcp/dhcpd.conf:

      subnet 192.168.1.0 netmask 255.255.255.0 {
        range 192.168.1.100 192.168.1.200;
        option routers 192.168.1.1;
        option domain-name-servers 8.8.8.8;
      }
      

8. 防火墙与安全

  • iptables:传统内核级防火墙框架。
    • 链:INPUT, OUTPUT, FORWARD
    • 示例:iptables -A INPUT -p tcp --dport 22 -j ACCEPT,iptables-save
  • firewalld:动态防火墙,使用 zone 概念。firewall-cmd --add-port=80/tcp --permanent
  • ufw:Ubuntu 上的 iptables 简化前端。ufw allow 80/tcp, ufw enable

9. 容器与虚拟化

  • Docker:应用容器引擎。
    • docker run -d --name web -p 80:80 nginx:alpine
    • Docker Compose 编排多容器应用,docker-compose up -d
  • Podman:无守护进程的容器引擎,兼容 Docker CLI。

10. 监控与日志收集

  • Prometheus + Grafana:指标采集与可视化。node_exporter 收集主机指标。
  • ELK Stack (Elasticsearch, Logstash, Kibana) / EFK (用 Fluentd 代替 Logstash):集中式日志分析平台。

11. 其他常见服务

  • 邮件服务:Postfix (SMTP), Dovecot (IMAP/POP3),多用于发送系统邮件或自建轻量邮局。
  • 代理服务:Squid 正向代理、缓存;HAProxy / Nginx 做反向代理和负载均衡 (upstream 模块)。
  • VPN 服务:OpenVPN 兼容性好,WireGuard 简洁高效,配置简单,内核集成。
  • 版本控制:Git 服务 gitlab-ce、轻量级 gitea,也可通过 ssh+git 裸仓库搭建。