linux基础操作

Linux基础操作完全指南 ------ 从入门到日常使用

一、前言

Linux 是每个开发者绕不开的操作系统。无论是服务器部署、嵌入式开发,还是日常使用的 Ubuntu/Debian 桌面,掌握 Linux 基础操作已经成为技术人员的必备技能。

本文从零开始,梳理 Linux 最核心、最常用的操作,涵盖文件管理、文本编辑、权限控制、进程管理、网络操作等常见场景,帮你建立起 Linux 命令行操作的基础体系。

适合人群:Linux 初学者、刚接触命令行的开发者、想要系统梳理基础知识的同学。


二、文件与目录操作

2.1 目录导航

bash 复制代码
pwd                     # 查看当前工作目录
ls                      # 列出当前目录的文件
ls -l                   # 详细列表(权限、大小、时间)
ls -a                   # 显示隐藏文件(以 . 开头的文件)
ls -lh                  # 人性化显示文件大小(KB/MB)
ls -lt                  # 按修改时间排序
tree                    # 以树形结构显示目录(需安装 tree)

cd /path/to/dir         # 切换到指定目录
cd ~                    # 回到家目录
cd -                    # 回到上一个目录
cd ..                   # 上一级目录
cd ../..                # 上两级目录

2.2 文件操作

bash 复制代码
# 创建
touch file.txt          # 创建空文件或更新文件时间戳
mkdir dir               # 创建目录
mkdir -p a/b/c          # 递归创建多级目录

# 查看
cat file.txt            # 查看完整文件内容
less file.txt           # 分页查看(空格翻页,q 退出)
head -n 20 file.txt     # 查看前 20 行
tail -n 30 file.txt     # 查看后 30 行
tail -f app.log         # 实时跟踪日志输出(Ctrl+C 退出)
wc -l file.txt          # 统计行数

# 复制/移动/删除
cp src.txt dst.txt      # 复制文件
cp -r dir1 dir2         # 递归复制目录
mv old.txt new.txt      # 重命名或移动
rm file.txt             # 删除文件(谨慎!不可恢复)
rm -rf dir              # 强制递归删除目录(极其危险!)

⚠️ 安全提醒rm -rf / 会删光整个系统,永远不要运行这条命令 。日常建议使用 trash 代替 rm 来保护自己。

2.3 文件查找

bash 复制代码
find /path -name "*.py"           # 按文件名查找
find . -type f -size +10M         # 查找大于 10MB 的文件
locate nginx.conf                 # 从数据库快速查找(需要 sudo updatedb 更新)
grep "error" app.log              # 在文件中搜索关键词
grep -r "TODO" ./src/             # 递归搜索目录下所有文件
grep -n "function" main.py        # 显示行号

2.4 压缩与解压

bash 复制代码
# tar(最常用)
tar -czf archive.tar.gz dir/      # 打包并压缩为 .tar.gz
tar -xzf archive.tar.gz           # 解压 .tar.gz
tar -cjf archive.tar.bz2 dir/     # 打包为 .tar.bz2
tar -xjf archive.tar.bz2          # 解压 .tar.bz2

# zip
zip -r archive.zip dir/           # 压缩为 .zip
unzip archive.zip                 # 解压 .zip

三、文件权限与用户管理

3.1 权限基础

Linux 的文件权限分为三组:所有者(User)所属组(Group)其他人(Others)

bash 复制代码
ls -l file.txt
# 输出示例:-rwxr-xr--  1 user group  1024 Jun 18 10:00 file.txt
#           ^^^^  ^^^^  ^^^
#            U    G    O

权限位的含义:

权限 文件 目录
r (4) 读取文件内容 列出目录下的文件名
w (2) 修改文件内容 创建/删除目录中的文件
x (1) 执行文件 进入目录(cd)

3.2 修改权限

bash 复制代码
# 符号模式
chmod u+x script.sh        # 给所有者添加执行权限
chmod g-w file.txt         # 移除所属组的写权限
chmod o+r file.txt         # 给其他人添加读权限
chmod a+x script.sh        # 给所有人(ugo)添加执行权限

# 数字模式(最常用)
chmod 755 script.sh        # rwxr-xr-x --- 所有者可读写执行,其他人只能读/执行
chmod 644 file.txt         # rw-r--r-- --- 所有者可读写,其他人只能读
chmod 600 secret.key       # rw------- --- 仅所有者可读写
chmod 700 private_dir/     # rwx------ --- 仅所有者完全控制

💡 数字模式解码r=4, w=2, x=1,三者相加即为数字。7=4+2+15=4+16=4+2

3.3 常见权限场景

bash 复制代码
# SSH 私钥必须严格为 600
chmod 600 ~/.ssh/id_rsa

# 脚本需要执行权限
chmod +x deploy.sh

# 目录必须有执行权限才能 cd 进去
chmod 755 myapp/

3.4 用户管理

bash 复制代码
whoami                  # 当前用户名
id                      # 显示用户 ID、组 ID
sudo useradd -m tom     # 创建用户并创建家目录
sudo passwd tom         # 设置/修改密码
sudo usermod -aG sudo tom   # 将用户加入 sudo 组
sudo deluser tom        # 删除用户

四、文本编辑器:Vim 基础

Vim 无处不在,学会基本操作能大幅提升效率。即使平时用 VS Code,SSH 到服务器时你只有 Vim。

4.1 三种模式

复制代码
┌─────────────┐     i / a / o     ┌─────────────┐
│  Normal 模式│ ──────────────>   │  Insert 模式 │
│ (浏览/操作) │ <────────────── │   (输入文本)│
└─────────────┘     Esc 键        └─────────────┘
       │                                  │
       v                                  v
┌─────────────┐                          (通过 Esc 回到
│ Visual 模式 │                           Normal 模式)  
│ (选择文本)  │
└─────────────┘

4.2 最小可行操作集

vim 复制代码
# 打开文件
vim file.txt

# 插入文本(Normal 模式下按以下键)
i       " 在当前光标处插入(insert)
a       " 在当前光标后插入(append)
o       " 在下一行插入新行
O       " 在上一行插入新行

# 保存退出
:w      " 保存
:q      " 退出
:wq     " 保存并退出
:q!     " 不保存强制退出
ZZ      " 保存并退出(快捷方式)

# 移动光标
h j k l " 左 下 上 右
w       " 跳到下一个单词开头
b       " 跳到上一个单词开头
0       " 跳到行首
$       " 跳到行尾
gg      " 跳到文件开头
G       " 跳到文件末尾

# 常用操作
x       " 删除光标处字符
dd      " 删除整行
yy      " 复制整行(yank)
p       " 粘贴
u       " 撤销
Ctrl+r  " 重做
/keyword " 搜索关键词,n 跳到下一个,N 跳到上一个

🎯 初学者建议 :先记住 i 进入插入、Esc 退回、:wq 保存退出、dd 删行、u 撤销,这 5 个操作就能应付 80% 的场景。


五、进程管理

bash 复制代码
# 查看进程
ps aux                  # 查看所有进程
ps aux | grep nginx     # 查找特定进程
top                     # 实时进程监控(按 q 退出)
htop                    # 更友好的 top(需安装)

# 进程信号
kill 1234               # 终止进程 ID 为 1234 的进程(SIGTERM)
kill -9 1234            # 强制杀死(SIGKILL,谨慎使用)
kill -15 1234           # 优雅终止(默认信号)
pkill -f "process_name" # 按名字杀进程

# 后台运行
command &               # 在后台运行命令
nohup command &         # 退出终端后继续运行
Ctrl+Z                  # 暂停当前前台进程
jobs                    # 查看后台任务
fg %1                   # 将后台任务 1 切回前台
bg %1                   # 在后台继续运行暂停的任务

六、网络操作

bash 复制代码
# 连接测试
ping 8.8.8.8            # 测试网络连通性(Ctrl+C 停止)
curl https://example.com    # HTTP 请求(最常用的网络调试工具)
curl -I https://example.com # 只查看响应头
wget https://example.com/file.zip  # 下载文件

# 网络诊断
ip addr                 # 查看 IP 地址(新版,推荐)
ifconfig                # 查看 IP 地址(旧版,可能需安装)
ss -tlnp                # 查看监听端口(新版,推荐)
netstat -tlnp           # 查看监听端口(旧版)

# DNS
nslookup example.com    # DNS 查询
dig example.com         # 更详细的 DNS 查询

# SSH 远程登录
ssh user@192.168.1.100  # SSH 登录远程服务器
ssh -p 2222 user@host   # 指定端口登录
scp file.txt user@host:/path/     # 通过 SSH 复制文件到远程
scp user@host:/path/file.txt ./   # 从远程复制文件到本地
ssh-keygen -t ed25519   # 生成 SSH 密钥对
ssh-copy-id user@host   # 将公钥复制到远程服务器

七、包管理

7.1 Debian/Ubuntu(apt)

bash 复制代码
sudo apt update                 # 更新包索引
sudo apt upgrade                # 升级已安装的包
sudo apt install nginx          # 安装软件
sudo apt remove nginx           # 卸载软件
sudo apt purge nginx            # 卸载并删除配置文件
sudo apt autoremove             # 清理不再需要的依赖
apt search keyword              # 搜索软件包
apt show nginx                  # 查看软件包信息

7.2 CentOS/RHEL(dnf/yum)

bash 复制代码
sudo dnf install nginx          # 安装
sudo dnf remove nginx           # 卸载
sudo dnf update                 # 更新
dnf search keyword              # 搜索

7.3 源码编译安装

bash 复制代码
./configure          # 检查环境并生成 Makefile
make                 # 编译
sudo make install    # 安装到系统

八、系统信息与监控

bash 复制代码
# 系统信息
uname -a                    # 内核版本信息
lsb_release -a              # 发行版信息(Ubuntu/Debian)
cat /etc/os-release         # 发行版信息(通用)
lscpu                       # CPU 信息
free -h                     # 内存使用情况(人性化显示)
df -h                       # 磁盘空间使用情况
du -sh /path/to/dir         # 查看目录总大小
du -h --max-depth=1         # 查看各子目录大小

# 时间与日期
date                        # 查看当前日期时间
timedatectl                 # 查看系统时间与时区设置
uptime                      # 系统运行时间与负载

# 硬件
lspci                       # 查看 PCI 设备
lsusb                       # 查看 USB 设备
dmesg                       # 查看内核日志

九、常用快捷键与技巧

终端快捷键

bash 复制代码
Ctrl+C          # 终止当前命令
Ctrl+D          # 退出当前 Shell / EOF
Ctrl+Z          # 暂停当前命令
Ctrl+L          # 清屏(相当于 clear)
Ctrl+A          # 跳到行首
Ctrl+E          # 跳到行尾
Ctrl+U          # 删除光标前的所有字符
Ctrl+K          # 删除光标后的所有字符
Ctrl+R          # 搜索历史命令(按一下进入搜索模式)
Ctrl+W          # 删除光标前的一个单词

命令行小技巧

bash 复制代码
!!              # 重复上一条命令
!$              # 上一条命令的最后一个参数
!nginx          # 执行最近一次以 nginx 开头的命令
Ctrl + R        # 反向搜索历史命令(超级实用!)

输入输出重定向

bash 复制代码
command > file.txt          # 标准输出重定向到文件(覆盖)
command >> file.txt         # 标准输出重定向到文件(追加)
command 2> error.log        # 标准错误重定向
command &> all.log          # 所有输出重定向
command < input.txt         # 从文件读取输入
command1 | command2         # 管道:将 command1 的输出传给 command2

💡 管道示例

bash 复制代码
# 查找最大的 10 个文件
du -ah /var | sort -rh | head -10

# 统计日志中的错误数量
grep "ERROR" app.log | wc -l

# 找到最占内存的 5 个进程
ps aux --sort=-%mem | head -6

十、系统服务管理(systemd)

现代 Linux 发行版基本上都使用 systemd 管理服务。

bash 复制代码
sudo systemctl start nginx         # 启动服务
sudo systemctl stop nginx          # 停止服务
sudo systemctl restart nginx       # 重启服务
sudo systemctl reload nginx        # 重载配置(不中断服务)
sudo systemctl enable nginx        # 设置开机自启
sudo systemctl disable nginx       # 取消开机自启
systemctl status nginx             # 查看服务状态
systemctl list-units --type=service  # 列出所有服务

# 查看日志
journalctl -u nginx                # 查看指定服务的日志
journalctl -u nginx -f             # 实时跟踪日志
journalctl -u nginx --since "10 min ago"  # 查看最近 10 分钟的日志

十一、环境变量与 Shell 配置

bash 复制代码
# 查看环境变量
echo $PATH                  # 查看 PATH
env                         # 查看所有环境变量
export MY_VAR="hello"       # 设置环境变量(仅当前会话有效)

# 配置文件
~/.bashrc                   # Bash 交互式 Shell 配置(用户级)
~/.bash_profile             # Bash 登录 Shell 配置
~/.profile                  # 通用 Shell 登录配置
~/.bash_aliases             # 别名配置(常被 .bashrc 引用)
/etc/bash.bashrc            # 全局 Bash 配置

# 常用别名示例(添加到 ~/.bashrc 或 ~/.bash_aliases)
alias ll='ls -lah'
alias la='ls -A'
alias gs='git status'
alias update='sudo apt update && sudo apt upgrade'
alias ..='cd ..'
alias ...='cd ../..'

修改配置后记得 source ~/.bashrc 使其生效。


十二、日志查看与调试

bash 复制代码
# 系统日志
dmesg                       # 内核日志
dmesg -w                    # 实时跟踪内核日志
journalctl                  # systemd 日志
journalctl -xe              # 查看最近的系统日志(带解释)

# 应用日志(通常位置)
/var/log/syslog             # 系统日志(Ubuntu/Debian)
/var/log/messages           # 系统日志(CentOS/RHEL)
/var/log/nginx/access.log   # Nginx 访问日志
/var/log/nginx/error.log    # Nginx 错误日志

十三、日常实战场景

场景 1:查找并清理大文件

bash 复制代码
# 找出 / 下最大的 20 个文件/目录
du -ah / 2>/dev/null | sort -rh | head -20

# 查找超过 1GB 的文件
find / -type f -size +1G 2>/dev/null

场景 2:批量重命名文件

bash 复制代码
# 将所有 .txt 改为 .md
for f in *.txt; do mv "$f" "${f%.txt}.md"; done

# 批量添加前缀
for f in *.jpg; do mv "$f" "vacation_$f"; done

场景 3:压缩备份日志

bash 复制代码
# 将 7 天前的日志打包压缩
find /var/log -name "*.log" -mtime +7 | tar -czf old-logs.tar.gz -T -

场景 4:快速查看端口占用

bash 复制代码
# 查看 80 端口被谁占用
sudo lsof -i :80
# 或者
sudo ss -tlnp | grep :80

场景 5:查找包含特定内容的文件

bash 复制代码
# 在当前目录的所有 .py 文件中搜索 "TODO"
grep -rn "TODO" --include="*.py" .

# 排除 node_modules 目录
grep -rn "api_key" --exclude-dir=node_modules .

十四、学习建议

  1. 别想着一下记住所有命令 --- 用得多自然就记得住,先掌握最常用的 20% 就能解决 80% 的问题
  2. 多用 --helpman --- command --helpman command 是最快的帮助文档
  3. Tab 键是你的好朋友 --- 命令和路径补全能节省大量时间
  4. 从手打命令开始 --- 别过早依赖复制粘贴,打多了肌肉记忆自然形成
  5. 犯错是正常的 --- 误操作时:Ctrl+C 终止、u 撤销 Vim 操作、查看历史记录恢复
  6. 用 alias 简化常用操作 --- 把你常用的复杂命令写成别名
  7. 遇到问题这样搜索Linux + 问题关键词 + 发行版版本(如 Linux 查看端口占用 Ubuntu

十五、参考资源