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 命令在现代系统中已经较少使用,其功能通常已被 pkillkillall 替代。

防火墙与端口

关闭防火墙(主流方法)

防火墙类型 临时关闭(立即生效) 永久关闭(禁用开机自启) 查看状态 适用系统
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   # 通用版本查看方式

日志定位技巧

快速查找某款软件的日志文件,可以遵循以下步骤:

  1. whereiswhich 找到软件安装路径
    whereis nginx
  2. 进入配置目录查看配置文件
    cd /etc/nginx/
  3. 在配置文件中搜索 log 相关配置
    grep 'log' nginx.conf

    通常可以直接找到 error_logaccess_log 的路径。

补充说明

  • source:在当前 shell 环境中执行脚本(使环境变量立即生效)
    source ~/.bashrc    # 重新加载 bash 配置,等效于 . ~/.bashrc
  • 任何命令都可以尝试附加 -h--help-v--version 来获取快速帮助,这是最通用、最有效的自学方法。

本文档将持续更新,记录日常运维中常用的命令与技巧。