Linux常用命令备忘录
命令要常用才记得住,就比如我最开始查看某个文件内容只会用cat和vim ,不知道还有less和tail、head,即便less或者tail会更加的方便。所以这里就写一遍我应该常常使用的那些命令,以便后续使用的时候能有一个印象。
快速了解系统信息
查看系统发行版信息(各个发行版都会存在这个文件):
查看操作系统版本
各个发行版本的Linux都会存在/etc/os-release文件,用cat即可快速查看发行版信息。
cat /etc/os-release
# PRETTY_NAME="Ubuntu 22.04.5 LTS"
CPU信息
lscpu
该命令会展示CPU架构、核心数、型号、频率等详细信息。
内存信息
free -h
-h 参数让输出以人类可读的格式显示(自动转为 MB/GB)。
磁盘信息
lsblk # 以树状结构显示块设备(磁盘及分区)
df -h # 显示文件系统磁盘空间使用情况
网卡信息
ip addr # 或 ip a,显示所有网卡的IP地址和状态
ifconfig # 传统命令,部分系统需要先安装 net-tools
系统用户
cat /etc/passwd
每行代表一个用户,格式为 用户名:密码占位符:UID:GID:描述:家目录:登录Shell。其中/sbin/nologin表示该账户不能用于登录系统。
命令查找与定位
whereis
定位命令/程序的二进制文件、源码和man手册页的位置。
whereis nginx
# nginx: /usr/sbin/nginx /etc/nginx /usr/share/nginx /usr/share/man/man8/nginx.8.gz
这里忽然想到Windows下的where命令功能类似:
where python
which
which用于在$PATH环境变量指定的路径中查找某个命令的位置,只返回第一个找到的可执行文件路径。
which python # 输出 /usr/bin/python
文件与目录操作
ls与ll
ls -l
以长格式列出目录内容。多数系统(如Ubuntu、CentOS、龙蜥)会将ll预设为ls -l的别名,但某些精简系统(如Debian)没有此别名,需要自行添加或直接用原命令。
# 在Debian中需要执行完整命令
ls -l
# 若想支持ll,可手动设置别名
alias ll='ls -l'
清屏
clear
快捷键 Ctrl + L 可达到同样效果。
创建多级目录
mkdir -p parent/child/grandchild
-p 参数会自动创建所有不存在的父目录。
创建文件
touch file1 file2 file3 # 创建多个空文件,同时可用于更新已有文件的时间戳
当然,用 vim 编辑并保存也是一种方式。
重命名文件
mv oldname.txt newname.txt # 简单重命名
rename 's/old_pattern/new_pattern/' *.txt # 批量重命名,支持正则表达式
返回上级目录
cd .. # 上级目录
cd ../.. # 上上级目录
cd - # 返回上次所在的目录
包管理器
apt(Debian/Ubuntu系列)
apt update # 更新软件包列表
apt upgrade # 升级所有可升级的软件包
apt install nginx # 安装软件
apt remove nginx # 移除软件(保留配置文件)
apt purge nginx # 彻底移除(含配置文件)
apt search keyword # 搜索软件包
yum(CentOS/RHEL/Anolis OS系列)
yum check-update # 检查可更新的软件包
yum update # 更新所有软件包
yum install nginx # 安装软件
yum remove nginx # 移除软件
yum search keyword # 搜索软件包
yum list installed # 列出已安装的软件包
进程与服务
ps aux
静态查看当前系统运行的进程快照。
ps aux
a:显示所有终端下的进程u:以用户友好的格式显示(含CPU/内存使用率)x:显示没有控制终端的进程
systemctl status
查看 systemd 管理的系统服务的详细状态。
systemctl status nginx # 查看服务状态
systemctl start nginx # 启动服务
systemctl stop nginx # 停止服务
systemctl restart nginx # 重启服务
systemctl enable nginx # 设置开机自启
systemctl disable nginx # 禁用开机自启
service
传统的服务管理命令,实际上底层多数已调用 systemctl。
service nginx status
service --status-all # 查看所有服务状态
kill / skill / killall / pkill
kill -9 PID # 强制终止指定PID的进程
killall -9 nginx # 根据进程名终止所有同名进程
pkill -9 nginx # 根据进程名(支持模糊匹配)终止进程
skill 命令在现代系统中已经较少使用,其功能通常已被 pkill 和 killall
替代。
防火墙与端口
关闭防火墙(主流方法)
| 防火墙类型 | 临时关闭(立即生效) | 永久关闭(禁用开机自启) | 查看状态 | 适用系统 |
|---|---|---|---|---|
firewalld |
sudo systemctl stop firewalld |
sudo systemctl disable firewalld |
sudo systemctl status firewalld |
CentOS/RHEL 7+ |
iptables |
sudo service iptables stop |
sudo chkconfig iptables off |
sudo service iptables status |
CentOS/RHEL 6 |
ufw |
sudo ufw disable |
sudo ufw disable(已含禁用自启) |
sudo ufw status |
Debian/Ubuntu |
安全提醒:生产环境请勿永久关闭防火墙。临时关闭调试完毕后应立即重新开启(如 sudo systemctl start firewalld)。
查看端口开放情况
1. ss(推荐)
现代 Linux 默认安装,速度更快。
sudo ss -tuln # 查看所有监听端口(TCP/UDP,数字格式)
sudo ss -tulnp # 显示占用端口的进程名和PID
sudo ss -tuln | grep ':80' # 检查特定端口(如80)是否在监听
2. netstat
传统工具,可能需要安装 net-tools。
sudo netstat -tuln # 查看所有监听端口
sudo netstat -tulnp # 显示进程信息
sudo netstat -tuln | grep ':80'
3. lsof
列出打开的文件,也可查看端口占用。
sudo lsof -i :80 # 查看哪个进程占用了80端口
sudo lsof -i -P -n | grep LISTEN # 列出所有监听端口及进程
查看防火墙规则中开放的端口
| 防火墙类型 | 命令 | 说明 |
|---|---|---|
firewalld |
sudo firewall-cmd --list-all |
查看当前区域所有开放端口 |
iptables |
sudo iptables -L -n |
查看规则链,分析放行的端口 |
ufw |
sudo ufw status verbose |
查看UFW状态及放行端口 |
磁盘与内存管理
du -sh
du -f 并非有效选项,正确用法是:
du -sh /path/to/directory # 查看目录总大小
du -h --max-depth=1 /path # 查看目录下各子目录的大小
-s:仅显示总计(summary)-h:人类可读格式
创建交换分区(Swap)
低内存服务器可通过swap临时缓解内存压力:
# 创建2GB交换文件
dd if=/dev/zero of=/swapfile bs=1M count=2048
# 设置权限
chmod 600 /swapfile
# 格式化为交换空间
mkswap /swapfile
# 启用交换
swapon /swapfile
# 设置开机自动挂载(添加一行到 /etc/fstab)
echo '/swapfile none swap sw 0 0' >> /etc/fstab
压缩打包
tar
# 打包压缩
tar -czvf archive.tar.gz /path/to/dir # 创建 .tar.gz 压缩包
tar -cjvf archive.tar.bz2 /path/to/dir # 创建 .tar.bz2 压缩包
# 解包解压
tar -xzvf archive.tar.gz # 解压 .tar.gz
tar -xjvf archive.tar.bz2 # 解压 .tar.bz2
tar -xvf archive.tar # 解压 .tar
参数说明:
-c:创建归档-x:解压归档-z:通过 gzip 处理-j:通过 bzip2 处理-v:显示详细过程-f:指定归档文件
gzip(单独使用)
gzip file # 压缩成 file.gz
gzip -d file.gz # 解压
定时任务
crontab
Crontab 格式:分 时 日 月 周 命令
crontab -e # 编辑当前用户的定时任务
crontab -l # 查看当前用户的定时任务
crontab -r # 删除当前用户的所有定时任务
常用示例:
# 每天凌晨2点30分执行备份脚本
30 2 * * * /home/user/backup.sh
# 每周一上午9点
0 9 * * 1 /path/to/command
# 每5分钟执行一次
*/5 * * * * /path/to/command
历史命令
history
history # 显示命令历史列表
history 20 # 显示最近20条命令
!123 # 执行历史中编号为123的命令
!! # 执行上一条命令
查找与搜索
find
# 按名称查找
find /path -name "*.log" # 精确匹配文件名
find /path -iname "*.log" # 忽略大小写
# 按类型查找
find /path -type f # 只找文件
find /path -type d # 只找目录
# 按大小查找
find /path -size +100M # 大于100MB的文件
# 按时间查找
find /path -mtime -3 # 3天内修改过的文件
grep
grep "pattern" file.txt # 在文件中搜索
grep -r "pattern" /path/to/dir # 递归搜索目录
grep -v "pattern" file.txt # 输出不匹配的行
grep -n "pattern" file.txt # 显示匹配行的行号
grep -E "pattern1|pattern2" file.txt # 扩展正则(相当于 egrep)
在查找日志时,grep 通常与管道组合使用:
cat app.log | grep "ERROR" # 从日志中筛选错误行
编辑器
vim / vi
# 基本操作
vim filename # 打开文件
# 按 i 进入插入模式,按 ESC 返回普通模式
# 按 :wq 保存并退出
# 按 :q! 强制退出不保存
# 没有vim时,可用 vi(功能较精简)
vi filename
权限管理
chmod
chmod +x script.sh # 为脚本添加执行权限
chmod -x script.sh # 移除执行权限
chmod 755 script.sh # 设置 rwxr-xr-x 权限
chown
chown user:group file.txt # 更改文件所有者和属组
管道与重定向
管道符号 |
将前一个命令的输出作为后一个命令的输入。
ps aux | grep nginx # 过滤nginx相关进程
输出重定向
> # 覆盖写入文件
>> # 追加写入文件
2> # 重定向错误输出(stderr)
2>&1 # 将stderr合并到stdout
&> # 将stdout和stderr都重定向到同一文件
# 示例:将容器日志同时输出到终端和文件
docker logs -f container_name | tee container.log
tee 命令不仅会将内容写入文件,还会同时输出到终端,便于实时查看。
常用快捷键
命令行编辑
Ctrl + A:光标移动到行首(等同于Home键)Ctrl + E:光标移动到行尾(等同于End键)Ctrl + B:光标向左移动一个字符(等同于左方向键)Ctrl + F:光标向右移动一个字符(等同于右方向键)Ctrl + D:删除光标所在位置的字符(或退出当前终端)Ctrl + K:删除光标至行尾的内容Ctrl + U:删除光标至行首的内容
历史命令与进程控制
Ctrl + R:反向搜索历史命令(输入关键词即可匹配)Ctrl + C:中断当前正在运行的前台进程Ctrl + Z:暂停当前进程(可随后用fg恢复)Ctrl + D:退出当前终端会话(等效于exit)
通用帮助
获取帮助
command -h # 查看简要帮助(部分命令支持)
command --help # 更详细的帮助信息
man command # 查看系统手册页(最全面)
查看版本
command -v # 部分命令使用 -v 显示版本
command --version # 通用版本查看方式
日志定位技巧
快速查找某款软件的日志文件,可以遵循以下步骤:
- 用
whereis或which找到软件安装路径whereis nginx - 进入配置目录查看配置文件
cd /etc/nginx/ - 在配置文件中搜索
log相关配置grep 'log' nginx.conf通常可以直接找到
error_log和access_log的路径。
补充说明
source:在当前 shell 环境中执行脚本(使环境变量立即生效)source ~/.bashrc # 重新加载 bash 配置,等效于 . ~/.bashrc- 任何命令都可以尝试附加
-h、--help、-v或--version来获取快速帮助,这是最通用、最有效的自学方法。
本文档将持续更新,记录日常运维中常用的命令与技巧。