📌 1. 文件/目录操作
命令 | 缩写 | 作用 | 示例 | 选项解释 |
---|---|---|---|---|
ls | list | 列出目录内容 | ls -l | -l 显示详细信息 |
ls -a | -a 显示隐藏文件 | |||
ls -lh | -h 以可读格式显示文件大小 | |||
cd | change directory | 切换目录 | cd /home | 切换到 /home 目录 |
cd .. | 返回上一级目录 | |||
cd - | 返回上次所在目录 | |||
pwd | print working directory | 显示当前路径 | pwd | 显示当前目录路径 |
mkdir | make directory | 创建目录 | mkdir new_dir | 创建 new_dir 目录 |
mkdir -p dir/subdir | -p 递归创建目录 | |||
rmdir | remove directory | 删除空目录 | rmdir mydir | 删除 mydir (必须为空) |
rm | remove | 删除文件/目录 | rm file.txt | 删除 file.txt |
rm -r folder | -r 递归删除目录 | |||
rm -rf folder | -f 强制删除 | |||
cp | copy | 复制文件/目录 | cp file1 file2 | 复制 file1 到 file2 |
cp -r dir1 dir2 | -r 递归复制目录 | |||
cp -i file1 file2 | -i 复制前询问确认 | |||
mv | move | 移动/重命名文件 | mv old.txt new.txt | 重命名 old.txt 为 new.txt |
mv file /home/user/ | 移动 file 到 /home/user/ | |||
touch | - | 创建空文件 | touch newfile.txt | 创建 newfile.txt |
find | - | 查找文件/目录 | find / -name "file.txt" | 在 / 目录中查找 file.txt |
find . -type f -size +1M | 查找当前目录中大于 1MB 的文件 | |||
locate | - | 快速查找文件 | locate file.txt | 搜索 file.txt (需先运行 updatedb 更新数据库) |
📌 2. 文件内容操作
命令 | 缩写 | 作用 | 示例 | 选项解释 |
---|---|---|---|---|
cat | concatenate | 查看/合并文件内容 | cat file.txt | 显示 file.txt 内容 |
cat file1 file2 > merged.txt | 合并 file1 和 file2 并保存到 merged.txt | |||
tac | reverse cat | 反向查看文件内容 | tac file.txt | 反向显示 file.txt |
more | - | 分页查看文件 | more file.txt | 逐页显示 file.txt 内容 |
less | - | 分页查看(比 more 更强大) | less file.txt | 逐页查看,支持上下滚动 |
head | - | 查看文件头部 | head -n 5 file.txt | -n 5 显示前 5 行 |
tail | - | 查看文件尾部 | tail -f log.txt | -f 实时跟踪文件内容(日志监控) |
grep | global regular expression print | 文本搜索 | grep "error" log.txt | 搜索 log.txt 中包含 “error” 的行 |
grep -i "error" log.txt | -i 忽略大小写 | |||
grep -r "keyword" /var/log/ | -r 递归搜索 | |||
sed | stream editor | 文本流编辑 | sed 's/old/new/g' file.txt | 替换 file.txt 中的 old 为 new |
awk | - | 文本处理 | awk '{print $1}' file.txt | 显示 file.txt 的第一列 |
awk -F ":" '{print $1}' /etc/passwd | -F ":" 指定 : 为分隔符 |
📌 3. 用户管理
命令 | 缩写 | 作用 | 示例 | 选项解释 |
---|---|---|---|---|
who | - | 查看在线用户 | who | 显示当前登录用户 |
whoami | - | 显示当前用户名 | whoami | 显示当前用户的名称 |
id | - | 显示用户 ID | id username | 显示 username 的 UID、GID |
su | substitute user | 切换用户 | su root | 切换到 root 用户 |
su - user1 | 切换到 user1 用户并加载其环境变量 | |||
sudo | superuser do | 以超级用户执行命令 | sudo apt update | 以 root 权限执行 apt update |
passwd | password | 修改用户密码 | passwd username | 修改 username 的密码 |
adduser | add user | 添加用户 | adduser newuser | 创建 newuser |
useradd | user add | 添加用户(底层命令) | useradd -m newuser | -m 创建 home 目录 |
deluser | delete user | 删除用户 | deluser newuser | 删除 newuser |
usermod | user modify | 修改用户信息 | usermod -aG sudo user1 | -aG 添加 user1 到 sudo 组 |
groupadd | group add | 添加用户组 | groupadd mygroup | 创建 mygroup 组 |
📌 4. 权限管理
命令 | 缩写 | 作用 | 示例 | 选项解释 |
---|---|---|---|---|
chmod | change mode | 修改文件权限 | chmod 755 file | 755 代表权限 rwxr-xr-x |
chmod +x script.sh | +x 赋予执行权限 | |||
chmod -R 777 /var/www/ | -R 递归修改目录权限 | |||
chown | change owner | 修改文件所有者 | chown user:group file.txt | 变更 file.txt 的拥有者 |
chown -R user:group /home/user | -R 递归修改目录所有者 | |||
chgrp | change group | 修改文件所属组 | chgrp group file.txt | 变更 file.txt 的用户组 |
umask | user mask | 设置默认权限 | umask 022 | 022 代表 755 权限 |
lsattr | list attributes | 查看文件特殊属性 | lsattr file.txt | 显示 file.txt 的特殊属性 |
chattr | change attributes | 修改文件特殊属性 | chattr +i file.txt | +i 让 file.txt 变为不可修改 |
📌 5. 进程管理
命令 | 缩写 | 作用 | 示例 | 选项解释 |
---|---|---|---|---|
ps | process status | 查看进程 | ps aux | a 所有用户,u 用户格式,x 后台进程 |
top | - | 实时查看进程 | top | 实时显示系统进程 |
htop | - | 交互式进程管理(需安装) | htop | 颜色显示进程信息 |
kill | - | 终止进程 | kill -9 1234 | -9 强制杀死进程 1234 |
pkill | - | 按名称终止进程 | pkill firefox | 结束 firefox 进程 |
jobs | - | 查看后台任务 | jobs -l | -l 显示详细信息 |
bg | background | 继续后台任务 | bg %1 | 继续执行 jobs 列出的任务 1 |
fg | foreground | 恢复前台任务 | fg %1 | 恢复 jobs 任务 1 到前台 |
nohup | no hang up | 让程序在后台运行 | nohup command & | & 让进程在后台运行 |
nice | - | 以低优先级运行进程 | nice -n 10 command | -n 10 设置进程优先级 |
renice | - | 更改运行中的进程优先级 | renice -5 1234 | -5 提高进程 1234 的优先级 |
📌 6. 磁盘管理
命令 | 缩写 | 作用 | 示例 | 选项解释 |
---|---|---|---|---|
df | disk free | 查看磁盘使用情况 | df -h | -h 以人类可读格式显示 |
du | disk usage | 查看目录占用空间 | du -sh /home | -s 统计总大小,-h 友好格式 |
mount | - | 挂载磁盘 | mount /dev/sdb1 /mnt | 挂载 /dev/sdb1 到 /mnt |
umount | - | 卸载磁盘 | umount /mnt | 卸载 /mnt |
fsck | file system check | 检查磁盘文件系统 | fsck -y /dev/sdb1 | -y 自动修复错误 |
mkfs | make filesystem | 格式化磁盘 | mkfs.ext4 /dev/sdb1 | 将 /dev/sdb1 格式化为 ext4 |
📌 7. 网络管理
命令 | 缩写 | 作用 | 示例 | 选项解释 |
---|---|---|---|---|
ifconfig | interface config | 查看/配置网络接口 | ifconfig eth0 | 查看 eth0 详情(部分系统已被 ip 取代) |
ip | - | 现代网络管理命令 | ip a | 显示所有网络接口 |
ip r | 显示路由表 | |||
ping | - | 测试网络连通性 | ping -c 4 google.com | -c 4 发送 4 个数据包 |
traceroute | - | 跟踪数据包路径 | traceroute google.com | 显示到 google.com 的路径 |
netstat | network statistics | 查看网络连接 | netstat -tulnp | -tulnp 显示监听端口 |
ss | socket statistics | 替代 netstat 查看连接 | ss -tulnp | -tulnp 监听端口 |
curl | - | 发送 HTTP 请求 | curl -I https://example.com | -I 仅获取响应头 |
wget | web get | 下载文件 | wget -O file.zip URL | -O 指定保存文件名 |
📌 8. 系统管理
命令 | 缩写 | 作用 | 示例 | 选项解释 |
---|---|---|---|---|
uname | unix name | 显示系统信息 | uname -a | -a 显示所有信息 |
uptime | - | 查看系统运行时间 | uptime | 显示系统运行时长 |
free | - | 查看内存使用情况 | free -m | -m 以 MB 显示 |
history | - | 查看历史命令 | `history | grep ssh` |
shutdown | - | 关机 | shutdown -h now | -h 立即关机 |
reboot | - | 重启系统 | reboot | 立即重启 |
systemctl | system control | 管理系统服务 | systemctl restart nginx | 重启 nginx 服务 |
systemctl enable nginx | 设置 nginx 开机启动 |
在 Linux 使用过程中,常见问题及解决方法如下:
📌 1. 端口被占用
问题
尝试启动服务(如 Nginx、MySQL)时,提示 端口已被占用。
解决方法
① 查找占用端口的进程
lsof -i :80 # 查看占用 80 端口的进程
netstat -tulnp | grep :80 # 另一种方式
ss -tulnp | grep :80 # 推荐,替代 netstat
② 杀死进程
kill -9 进程ID # 强制终止进程
③ 释放端口
如果进程是 systemd
管理的:
sudo systemctl stop 进程名
sudo systemctl restart 进程名
📌 2. 磁盘空间占满
问题
使用 df -h
发现磁盘空间不足,导致系统无法正常运行。
解决方法
① 查找大文件
du -ah / | sort -rh | head -n 20 # 找出前 20 大的文件/目录
② 清理日志
journalctl --vacuum-size=100M # 清理 systemd 日志
③ 删除缓存
rm -rf ~/.cache/*
📌 3. 进程占用过高
问题
服务器变慢,top
或 htop
显示某个进程占用大量 CPU 或内存。
解决方法
① 查找高占用进程
top -o %CPU # 按 CPU 使用率排序
top -o %MEM # 按内存使用率排序
② 限制进程资源
renice 10 进程ID # 降低进程优先级
cpulimit -p 进程ID -l 50 # 限制 CPU 使用率(需安装 cpulimit)
③ 终止异常进程
kill -9 进程ID
📌 4. SSH 连接超时
问题
远程 SSH 连接经常掉线或超时。
解决方法
① 修改客户端配置
在本地 ~/.ssh/config
中添加:
Host *
ServerAliveInterval 60
ServerAliveCountMax 5
② 修改服务器配置
在服务器 /etc/ssh/sshd_config
里修改:
ClientAliveInterval 60
ClientAliveCountMax 5
然后重启 SSH:
sudo systemctl restart sshd
📌 5. 文件被占用无法删除
问题
尝试删除文件时,提示 “Device or resource busy”
解决方法
① 查找占用文件的进程
lsof /path/to/file
② 关闭相关进程
kill -9 进程ID
③ 解除挂载(如果是目录)
umount /path/to/mount
📌 6. 误删文件恢复
问题
误删了重要文件,比如 /etc/nginx/nginx.conf
解决方法
① 通过 locate
搜索可能的备份
locate nginx.conf
② 通过 ls
搜索回收站(某些 Linux 发行版支持)
ls ~/.local/share/Trash/files/
③ 从 .bak
或 .old
恢复
cp /etc/nginx/nginx.conf.bak /etc/nginx/nginx.conf
④ 使用 extundelete
恢复
sudo extundelete /dev/sda1 --restore-file /etc/nginx/nginx.conf
(适用于 ext4
文件系统)
📌 7. 防火墙导致端口无法访问
问题
应用已经启动,但外部无法访问端口。
解决方法
① 检查防火墙状态
sudo ufw status # Ubuntu/Debian
sudo firewall-cmd --list-all # CentOS/RHEL
② 允许端口
sudo ufw allow 8080/tcp # 允许 8080 端口(Ubuntu)
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent && sudo firewall-cmd --reload # CentOS
③ 关闭防火墙(测试时)
sudo systemctl stop firewalld # 关闭 firewalld
sudo systemctl disable firewalld # 禁止开机启动
📌 8. Permission Denied
权限问题
问题
运行某个命令或访问文件时,提示 “Permission Denied”
解决方法
① 提升权限
sudo 命令
② 修改权限
chmod +x script.sh # 赋予执行权限
③ 修改所有者
chown 用户:组 文件
📌 9. 定时任务 (crontab
) 不生效
问题
创建了 crontab
任务,但没有执行。
解决方法
① 检查 crontab
语法
crontab -l # 查看当前用户的定时任务
示例(每 5 分钟执行一次 backup.sh
):
*/5 * * * * /home/user/backup.sh
② 使用完整路径
/usr/bin/python3 /home/user/script.py
③ 检查日志
cat /var/log/syslog | grep CRON
📌 10. 网络 DNS 解析失败
问题
无法解析域名(ping google.com
失败,但 ping 8.8.8.8
成功)。
解决方法
① 修改 resolv.conf
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf
② 重新启动网络
sudo systemctl restart networking
当然还有!下面列举 更多 Linux 常见问题及解决方法,覆盖 系统管理、进程管理、用户管理、软件管理 等多个方面。
📌 11. Linux 进程僵死(Zombie Process)
问题
运行 ps aux | grep defunct
发现有僵尸进程(Z
状态)。
解决方法
① 查找僵尸进程
ps aux | grep defunct
② 找到父进程 ID(PPID)
ps -o ppid= -p 僵尸进程ID
③ 杀死父进程
kill -9 父进程ID
如果不能杀死父进程,可以用 systemctl restart 相关服务
重新启动服务。
📌 12. command not found
命令找不到
问题
执行命令时报错 command not found
,可能是命令不存在或 PATH
变量缺失。
解决方法
① 确保软件已安装
which 命令名
如果返回空,说明命令不存在,需要安装:
sudo apt install 软件名 # Ubuntu
sudo yum install 软件名 # CentOS
② 检查 PATH
变量
echo $PATH
export PATH=$PATH:/usr/local/bin # 临时修复
③ 永久修复(添加到 ~/.bashrc
或 ~/.profile
)
echo 'export PATH=$PATH:/usr/local/bin' >> ~/.bashrc
source ~/.bashrc
📌 13. Too many open files
文件句柄数过多
问题
某些服务(如 MySQL、Nginx)日志中报 Too many open files
,进程打开的文件句柄超过系统限制。
解决方法
① 查看当前限制
ulimit -n # 显示最大打开文件数
② 临时修改
ulimit -n 65535 # 设置更大的文件句柄数
③ 永久修改
编辑 /etc/security/limits.conf
,添加:
* soft nofile 65535
* hard nofile 65535
然后重启系统生效。
📌 14. cannot execute binary file: Exec format error
问题
运行二进制程序时报 Exec format error
,通常是 架构不兼容(例如在 x86_64
机器上运行 ARM
版本的程序)。
解决方法
① 检查架构
uname -m # 查看当前 CPU 架构
file ./binary_file # 查看文件架构
② 运行正确版本
如果 file
命令显示 ARM
,说明当前系统不能直接运行该文件,需要使用 QEMU 或 Docker 运行。
📌 15. /tmp
目录满了导致程序异常
问题
某些程序(如 MySQL、Docker)依赖 /tmp
目录,如果 /tmp
空间满了,会导致无法运行。
解决方法
① 查看 /tmp
使用情况
df -h /tmp
② 清理 /tmp
sudo rm -rf /tmp/*
③ 临时扩大 /tmp
mount -o remount,size=5G /tmp
④ 永久扩大 /tmp
修改 /etc/fstab
:
tmpfs /tmp tmpfs defaults,size=5G 0 0
然后运行:
sudo mount -a
📌 16. Device is busy
卸载磁盘失败
问题
尝试 umount /mnt
时提示 device is busy
,说明有进程在使用该目录。
解决方法
① 查找占用进程
lsof /mnt
② 结束进程
kill -9 进程ID
③ 强制卸载
umount -l /mnt # 立即卸载
umount -f /mnt # 强制卸载
📌 17. tar: Exiting with failure status due to previous errors
问题
使用 tar
压缩或解压时报错,可能原因:
- 目标文件不存在
- 磁盘空间不足
- 权限问题
解决方法
① 确保文件存在
ls -lh 文件名
② 确保磁盘空间足够
df -h
③ 加 --warning=no-file-changed
忽略错误
tar -czf backup.tar.gz --warning=no-file-changed /path/to/files
📌 18. dpkg: error: dpkg frontend is locked by another process
问题
在 Ubuntu/Debian 上运行 apt install
时,提示 dpkg frontend is locked
。
解决方法
① 关闭占用 dpkg
的进程
ps aux | grep apt
sudo kill -9 进程ID
② 删除锁文件
sudo rm /var/lib/dpkg/lock
sudo rm /var/lib/dpkg/lock-frontend
③ 重新配置 dpkg
sudo dpkg --configure -a
📌 19. yum lock
锁住无法安装软件
问题
在 CentOS 上 yum install
时卡住,显示 Existing lock /var/run/yum.pid: another copy is running as pid 1234
。
解决方法
① 杀死 yum
进程
ps aux | grep yum
sudo kill -9 进程ID
② 删除 yum
锁文件
sudo rm -f /var/run/yum.pid
③ 清除 yum
缓存
sudo yum clean all
📌 20. screen
断开后恢复会话
问题
使用 screen
运行任务,SSH 断开后,如何恢复?
解决方法
① 启动新会话
screen -S mysession
② 断开后恢复会话
screen -r mysession
如果 screen -r
提示多个会话:
screen -ls # 列出所有会话
screen -r 会话ID
当然,还有很多 Linux 常见问题,以下是 不重复的 更多问题及解决方法,涵盖 网络、存储、权限、系统管理、性能优化 等方面。
📌 21. Linux 服务器时间不对
问题
使用 date
命令发现服务器时间错误,可能导致日志时间错乱、证书过期等问题。
解决方法
① 查看当前时间
date
② 立即同步时间
sudo timedatectl set-ntp true
③ 手动设置时区
sudo timedatectl set-timezone Asia/Shanghai
④ 手动同步时间
sudo ntpdate ntp.aliyun.com # 需要安装 ntpdate
📌 22. Permission denied (publickey)
SSH 连接失败
问题
使用 SSH 连接服务器时报错,可能是密钥认证问题。
解决方法
① 确保公钥在服务器上
ls -lh ~/.ssh/authorized_keys
② 确保 .ssh
目录权限正确
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
③ 确保 SSH 允许密钥登录
编辑 /etc/ssh/sshd_config
:
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
然后重启 SSH:
sudo systemctl restart sshd
📌 23. Disk quota exceeded
磁盘配额超限
问题
尝试写入文件时报 Disk quota exceeded
,用户磁盘配额用尽。
解决方法
① 查看用户磁盘配额
quota -u 用户名
② 释放空间
rm -rf ~/大文件
③ 调整用户磁盘配额(root 权限)
sudo edquota -u 用户名
📌 24. Broken pipe
远程 SSH 连接断开
问题
SSH 连接一段时间不操作就断开,报 Broken pipe
。
解决方法
① 客户端修改 ~/.ssh/config
Host *
ServerAliveInterval 60
ServerAliveCountMax 5
② 服务器端修改 /etc/ssh/sshd_config
ClientAliveInterval 60
ClientAliveCountMax 5
然后重启 SSH:
sudo systemctl restart sshd
📌 25. mount: unknown filesystem type
挂载失败
问题
挂载磁盘时报错,可能是文件系统不支持。
解决方法
① 检查磁盘格式
sudo blkid /dev/sdb1
② 安装文件系统支持
sudo apt install exfat-utils # 处理 exFAT
sudo apt install ntfs-3g # 处理 NTFS
③ 重新挂载
sudo mount -t exfat /dev/sdb1 /mnt
📌 26. No space left on device
但磁盘未满
问题
磁盘未满 (df -h
显示有空间),但仍然报 No space left on device
。
可能原因
- inode 用尽(小文件太多)
- 文件系统损坏
- 磁盘已读写保护
解决方法
① 查看 inode
df -i
如果 Inodes
用尽:
find / -xdev -type f | wc -l # 查找小文件数量
② 删除无用小文件
find /var/log -type f -name "*.log" -delete
③ 检查文件系统
sudo fsck -y /dev/sda1
📌 27. Killed
进程被强制终止
问题
运行某个程序时,突然终止并显示 Killed
,可能是内存不足 (OOM, Out of Memory)。
解决方法
① 查看 dmesg
日志
dmesg | tail -20
如果看到 Out of memory: Kill process
,说明系统 OOM 了。
② 限制进程内存
ulimit -m 1048576 # 限制最大内存 1GB
③ 开启 Swap
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
📌 28. E: Unable to locate package
软件包找不到
问题
使用 apt install
安装软件时报错。
解决方法
① 更新源
sudo apt update
② 更换国内源
编辑 /etc/apt/sources.list
,替换为:
deb http://mirrors.ustc.edu.cn/ubuntu focal main restricted universe multiverse
然后执行:
sudo apt update
📌 29. 502 Bad Gateway
Nginx 代理后端服务异常
问题
Nginx 反向代理后端服务时,返回 502 Bad Gateway
。
解决方法
① 确保后端服务运行
sudo systemctl status backend_service
② 检查 Nginx 连接后端日志
sudo tail -f /var/log/nginx/error.log
③ 增加 proxy_connect_timeout
在 nginx.conf
里:
proxy_connect_timeout 10;
proxy_read_timeout 30;
然后重启 Nginx:
sudo systemctl restart nginx
📌 30. Connection reset by peer
网络连接被重置
问题
使用 ssh
、scp
或 wget
下载大文件时,连接被中断。
解决方法
① 修改 TCP 保持连接时间
sudo sysctl -w net.ipv4.tcp_keepalive_time=60
② 调整 iptables
连接跟踪限制
sudo iptables -A INPUT -p tcp --dport 22 -m state --state ESTABLISHED -j ACCEPT
③ 服务器端修改 sshd_config
TCPKeepAlive yes
然后重启 SSH:
sudo systemctl restart sshd
📌 31. ERROR 1045 (28000): Access denied for user
MySQL 登录失败
问题
MySQL 登录时报 ERROR 1045 (28000)
,可能是密码错误或权限不足。
解决方法
① 以 root 身份重置密码
sudo systemctl stop mysql
sudo mysqld_safe --skip-grant-tables &
mysql -u root
然后在 MySQL 里执行:
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
FLUSH PRIVILEGES;
② 确保 bind-address
允许外部访问
编辑 /etc/mysql/mysql.conf.d/mysqld.cnf
:
bind-address = 0.0.0.0
然后重启 MySQL:
sudo systemctl restart mysql