跳到主要内容

Linux 常用命令

Linux 命令行是系统管理和开发工作的核心工具。本章将详细介绍 Linux 最常用的命令,帮助你高效地完成日常任务。

文件和目录操作

目录导航

# 显示当前目录
pwd

# 列出目录内容
ls # 基本列出
ls -l # 详细列表(权限、大小、时间)
ls -la # 包含隐藏文件
ls -lh # 人类可读的文件大小
ls -ltr # 按时间排序,反向显示

# 切换目录
cd /home/user # 绝对路径
cd .. # 上级目录
cd ~ # 用户主目录
cd - # 返回上次目录

# 创建目录
mkdir dirname # 创建单级目录
mkdir -p path/to/dir # 递归创建多级目录
mkdir -m 755 dirname # 创建时指定权限

# 删除目录
rmdir dirname # 删除空目录
rm -r dirname # 递归删除目录及其内容
rm -rf dirname # 强制递归删除(慎用)

# 复制目录
cp -r source dest # 递归复制
cp -rp source dest # 保留权限递归复制
cp -ru source dest # 仅复制更新的文件

# 移动/重命名目录
mv oldname newname # 重命名
mv source /path/dest # 移动

文件操作

# 创建文件
touch filename # 创建空文件或更新时间戳
touch file1 file2 # 创建多个文件

# 查看文件内容
cat filename # 显示全部内容
cat -n filename # 显示行号
less filename # 分页查看(可上下滚动)
more filename # 分页查看(只能向下)
head -20 filename # 查看前20行
tail -20 filename # 查看后20行
tail -f filename # 实时追踪文件变化

# 复制文件
cp source dest # 基本复制
cp -i source dest # 覆盖前提示
cp -p source dest # 保留文件属性
cp -v source dest # 显示复制过程

# 移动/重命名文件
mv oldname newname # 重命名
mv source /path/dest # 移动
mv -i source dest # 覆盖前提示
mv -f source dest # 强制覆盖

# 删除文件
rm filename # 删除文件
rm -i filename # 删除前提示
rm -f filename # 强制删除
rm -v filename # 显示删除过程

# 创建链接
ln source linkname # 创建硬链接
ln -s source linkname # 创建符号链接(软链接)
ls -l linkname # 查看链接指向

文件搜索

# 查找文件
find /path -name "*.txt" # 按名称查找
find /path -type f -name "*.log" # 查找文件类型
find /path -type d -name "config" # 查找目录类型
find /path -size +100M # 查找大于100M的文件
find /path -mtime -7 # 查找7天内修改的文件
find /path -user username # 查找特定用户的文件
find /path -perm 644 # 查找特定权限的文件

# 高级查找
find /path \( -name "*.tmp" -o -name "*.log" \) -delete # 查找并删除
find /path -type f -exec chmod 644 {} \; # 查找并修改权限
find /path -type f | xargs grep "pattern" # 查找并搜索内容

# 快速定位(使用 updatedb 数据库)
locate filename # 快速查找文件
locate -i filename # 忽略大小写
updatedb # 更新数据库(需要root权限)

# 在文件中搜索
grep "pattern" file # 基本搜索
grep -i "pattern" file # 忽略大小写
grep -r "pattern" /path # 递归搜索
grep -n "pattern" file # 显示行号
grep -v "pattern" file # 反向匹配
grep -E "pattern1|pattern2" file # 正则表达式

# 增强版 grep
rg "pattern" # ripgrep,更快更智能
ag "pattern" # The Silver Searcher

文件权限管理

权限基础

# 查看权限
ls -l filename
# -rw-r--r-- 1 user group 1234 Jan 1 12:00 filename
# | [所有者][组][其他]
# - 文件类型(-文件,d目录,l链接)
# rw- 所有者权限(读、写、执行)
# r-- 组权限
# r-- 其他用户权限

# 修改权限(数字模式)
chmod 755 filename # rwxr-xr-x
chmod 644 filename # rw-r--r--
chmod 777 filename # rwxrwxrwx(不推荐)
chmod 600 filename # rw-------(仅所有者)

# 修改权限(符号模式)
chmod u+x filename # 给所有者添加执行权限
chmod g-w filename # 移除组的写权限
chmod o=r filename # 设置其他用户只有读权限
chmod a+x filename # 给所有用户添加执行权限
chmod u=rwx,g=rx,o=r filename # 组合设置

# 递归修改权限
chmod -R 755 directory

# 修改所有者
chown user filename # 修改所有者
chown user:group filename # 修改所有者和组
chown :group filename # 只修改组
chown -R user:group directory # 递归修改

# 修改组
chgrp group filename # 修改文件组
chgrp -R group directory # 递归修改

特殊权限

# SUID(Set User ID)
chmod u+s filename # 设置 SUID 位
chmod 4755 filename # 数字方式设置 SUID

# SGID(Set Group ID)
chmod g+s directory # 设置 SGID 位
chmod 2755 directory # 数字方式设置 SGID

# Sticky Bit
chmod +t directory # 设置粘滞位
chmod 1755 directory # 数字方式设置粘滞位

# 查看特殊权限
ls -l /usr/bin/passwd # -rwsr-xr-x(SUID)
ls -ld /tmp # drwxrwxrwt(Sticky Bit)

系统信息和管理

系统信息

# 系统基本信息
uname -a # 显示所有系统信息
uname -r # 显示内核版本
uname -m # 显示机器硬件名称
hostname # 显示主机名
hostname -I # 显示IP地址

# 系统版本信息
cat /etc/os-release # 显示操作系统版本
cat /etc/issue # 显示登录前信息
lsb_release -a # 显示发行版信息

# 系统运行时间
uptime # 显示运行时间和负载
uptime -p # 显示友好的运行时间

# 当前用户
whoami # 显示当前用户名
who # 显示登录用户
w # 显示登录用户和正在执行的命令
id # 显示当前用户ID和组ID
id username # 显示指定用户信息
last # 显示最近登录记录

进程管理

# 查看进程
ps # 当前终端的进程
ps aux # 所有进程的详细信息
ps -ef # 全格式显示所有进程
ps aux | grep nginx # 查找特定进程
ps -u username # 查看特定用户的进程
ps -p PID -o pid,ppid,cmd,%mem,%cpu # 查看特定进程

# 实时进程监控
top # 交互式进程查看器
htop # 增强版 top(需安装)

# 进程控制
kill PID # 终止进程(发送 SIGTERM)
kill -9 PID # 强制终止进程(SIGKILL)
kill -15 PID # 优雅终止(SIGTERM)
kill -1 PID # 重新加载配置(SIGHUP)
killall processname # 按名称终止所有进程
pkill processname # 按名称模式终止进程

# 后台运行
command & # 后台运行命令
Ctrl+Z # 暂停当前进程
bg # 将暂停的进程放到后台
fg # 将后台进程放到前台
fg %1 # 将作业1放到前台
jobs # 查看后台作业
nohup command & # 后台运行,忽略挂起信号
disown # 从当前 shell 移除作业

# 进程优先级
nice -n 10 command # 以较低优先级运行
renice -n 5 -p PID # 修改运行中进程的优先级

系统资源

# 内存使用
free # 显示内存使用情况
free -h # 人类可读格式
free -m # 以MB为单位

# 磁盘使用
df # 显示文件系统磁盘空间
df -h # 人类可读格式
df -T # 显示文件系统类型
df -i # 显示inode使用情况

# 目录大小
du # 显示目录空间使用
du -h # 人类可读格式
du -sh /path # 显示目录总大小
du -h --max-depth=1 # 显示一级子目录大小

# 磁盘IO
iostat # 显示CPU和IO统计(需安装sysstat)
iostat -x # 扩展统计信息

# 网络IO
iftop # 实时网络流量监控(需安装)
nethogs # 按进程显示网络流量(需安装)

# 系统负载
vmstat 1 5 # 每秒显示一次,共5次
vmstat -s # 显示事件计数器

# 综合监控
sar # 系统活动报告(需安装sysstat)
sar -u 1 5 # CPU使用率
sar -r 1 5 # 内存使用率

网络管理

网络配置

# 查看网络接口
ip addr # 显示所有网络接口
ip addr show eth0 # 显示特定接口
ifconfig # 传统方式(需安装net-tools)
ifconfig eth0 # 显示特定接口

# 查看路由表
ip route # 显示路由表
ip route | grep default # 显示默认网关
route -n # 传统方式

# 查看网络连接
ss # 查看套接字统计(推荐)
ss -t # 显示TCP连接
ss -u # 显示UDP连接
ss -l # 显示监听端口
ss -tlnp # 显示TCP监听端口和进程
ss -s # 显示统计摘要

netstat -tlnp # 传统方式(需安装net-tools)

# 配置网络接口(临时)
ip addr add 192.168.1.100/24 dev eth0
ip link set eth0 up
ip route add default via 192.168.1.1

# 查看DNS配置
cat /etc/resolv.conf # 查看DNS服务器
host www.example.com # DNS查询
nslookup www.example.com # DNS查询
dig www.example.com # 详细DNS查询

网络诊断

# 测试连通性
ping www.example.com # 测试连通性
ping -c 4 www.example.com # 发送4个包
ping -i 0.2 host # 设置间隔0.2秒

# 追踪路由
traceroute www.example.com # 追踪路由路径
tracepath www.example.com # 类似 traceroute
mtr www.example.com # 综合网络诊断工具

# 端口测试
telnet host port # 测试端口连通性
curl -v telnet://host:port # 使用 curl 测试端口
nc -zv host port # 使用 netcat 测试端口

# 下载文件
curl -O http://example.com/file # 下载文件
curl -L -o file http://example.com/file # 跟随重定向
curl -I http://example.com # 查看HTTP头
wget http://example.com/file # 下载文件
wget -c http://example.com/file # 断点续传
wget -r -np http://example.com/dir # 递归下载

# 网络扫描
nmap -sP 192.168.1.0/24 # 扫描存活主机
nmap -sT 192.168.1.1 # TCP端口扫描
nmap -sU 192.168.1.1 # UDP端口扫描

文本处理

文本查看和过滤

# 查看文件
cat file # 显示文件内容
cat file1 file2 # 连接多个文件
cat -n file # 显示行号

tac file # 反向显示(从最后一行开始)

# 分页查看
less file # 可前后翻页
less +F file # 实时追踪(类似 tail -f)
more file # 只能向下翻页

# 显示部分内容
head -20 file # 前20行
head -c 100 file # 前100字节
tail -20 file # 后20行
tail -f file # 实时追踪
tail -n +20 file # 从第20行开始显示

# 过滤内容
grep "pattern" file # 匹配行
grep -v "pattern" file # 不匹配行
grep -i "pattern" file # 忽略大小写
grep -n "pattern" file # 显示行号
grep -c "pattern" file # 计数
grep -r "pattern" dir # 递归搜索
grep -E "pat1|pat2" file # 扩展正则
grep -w "word" file # 匹配整个单词

# 排序和去重
sort file # 按字母排序
sort -n file # 按数字排序
sort -r file # 反向排序
sort -k 2 file # 按第2列排序
sort -t: -k 3 -n /etc/passwd # 按第3列数字排序

uniq file # 去除相邻重复行
uniq -c file # 统计重复次数
uniq -d file # 只显示重复行
uniq -u file # 只显示唯一行

sort file | uniq # 去重所有重复行
sort file | uniq -c # 统计每行出现次数

文本处理工具

# 文本统计
wc file # 行数、单词数、字节数
wc -l file # 只显示行数
wc -w file # 只显示单词数
wc -c file # 只显示字节数

# 文本转换
tr 'a-z' 'A-Z' < file # 小写转大写
tr -d '0-9' < file # 删除数字
tr -s ' ' < file # 压缩连续空格
tr ',' '\n' < file # 逗号换行

# 列处理
cut -d: -f1 /etc/passwd # 提取第1列(以:分隔)
cut -d: -f1,3 /etc/passwd # 提取第1和第3列
cut -c1-10 file # 提取前10个字符

# 高级列处理
awk '{print $1}' file # 打印第1列
awk '{print $NF}' file # 打印最后一列
awk '{print $1, $3}' file # 打印第1和第3列
awk -F: '{print $1}' file # 指定分隔符
awk '{sum+=$1} END {print sum}' file # 求和
awk 'NR==10' file # 打印第10行
awk 'NR>5 && NR<=10' file # 打印6-10行
awk '/pattern/' file # 匹配行
awk '/start/,/end/' file # 打印范围

# 流编辑器
sed 's/old/new/' file # 替换每行第一个匹配
sed 's/old/new/g' file # 替换所有匹配
sed 's/old/new/2' file # 替换第2个匹配
sed 's/old/new/2g' file # 从第2个开始替换
sed -i 's/old/new/g' file # 直接修改文件
sed '2d' file # 删除第2行
sed '/pattern/d' file # 删除匹配行
sed -n '5,10p' file # 打印5-10行
sed 's/^/# /' file # 行首添加注释

# 文本比较
diff file1 file2 # 比较文件差异
diff -u file1 file2 # 统一格式输出
diff -y file1 file2 # 并排显示

comm file1 file2 # 比较排序后的文件
comm -12 file1 file2 # 只显示共同行

# 文本合并
paste file1 file2 # 并排合并
paste -d: file1 file2 # 指定分隔符

join file1 file2 # 按共同字段合并

# 高级文本处理
# 从JSON提取数据(需安装jq)
cat data.json | jq '.name'
cat data.json | jq '.items[] | .title'

# 从YAML提取数据(需安装yq)
cat data.yaml | yq '.name'

压缩和归档

# tar 归档
tar -cvf archive.tar files # 创建归档
tar -cvzf archive.tar.gz files # 创建gzip压缩归档
tar -cvjf archive.tar.bz2 files # 创建bzip2压缩归档
tar -cvJf archive.tar.xz files # 创建xz压缩归档

tar -xvf archive.tar # 解压归档
tar -xvzf archive.tar.gz # 解压gzip归档
tar -xvjf archive.tar.bz2 # 解压bzip2归档
tar -xvJf archive.tar.xz # 解压xz归档

tar -tvf archive.tar # 列出归档内容
tar -rvf archive.tar newfile # 追加文件到归档

# gzip/gunzip
gzip file # 压缩文件(生成file.gz)
gzip -k file # 压缩并保留原文件
gzip -d file.gz # 解压
gunzip file.gz # 解压

# bzip2/bunzip2
bzip2 file # 压缩文件
bzip2 -d file.bz2 # 解压
bunzip2 file.bz2 # 解压

# xz/unxz
xz file # 压缩文件
xz -d file.xz # 解压
unxz file.xz # 解压

# zip/unzip
zip archive.zip files # 创建zip归档
zip -r archive.zip directory # 递归压缩目录
unzip archive.zip # 解压
unzip -l archive.zip # 列出内容
unzip archive.zip -d /path # 解压到指定目录

# 7z
7z a archive.7z files # 创建7z归档
7z x archive.7z # 解压
7z l archive.7z # 列出内容

软件包管理

Debian/Ubuntu (APT)

# 更新包列表
sudo apt update

# 升级已安装包
sudo apt upgrade
sudo apt full-upgrade # 完整升级(处理依赖变化)

# 安装软件包
sudo apt install package
sudo apt install package1 package2
sudo apt install -y package # 自动确认

# 删除软件包
sudo apt remove package # 保留配置
sudo apt purge package # 删除配置
sudo apt autoremove # 删除不再需要的依赖

# 搜索软件包
apt search keyword
apt-cache search keyword
apt-cache show package # 显示包信息

# 其他操作
sudo apt list # 列出所有包
sudo apt list --installed # 列出已安装包
sudo apt show package # 显示包详情
sudo apt-cache policy package # 显示版本信息
sudo apt-get source package # 下载源码

# 清理
sudo apt clean # 清理下载的包
sudo apt autoclean # 清理旧版本包

RHEL/CentOS/Fedora (YUM/DNF)

# DNF (Fedora, RHEL 8+)
sudo dnf update # 更新所有包
sudo dnf install package # 安装包
sudo dnf remove package # 删除包
sudo dnf search keyword # 搜索包
sudo dnf info package # 显示包信息
sudo dnf list installed # 列出已安装包
sudo dnf clean all # 清理缓存

# YUM (CentOS 7, RHEL 7)
sudo yum update
sudo yum install package
sudo yum remove package
sudo yum search keyword
sudo yum info package
sudo yum list installed
sudo yum clean all

用户和权限管理

# 用户管理(需要root权限)
sudo useradd username # 创建用户
sudo useradd -m username # 创建用户并创建主目录
sudo useradd -m -s /bin/bash username # 指定shell
sudo userdel username # 删除用户
sudo userdel -r username # 删除用户及其主目录
sudo usermod -aG group username # 添加用户到组
sudo passwd username # 修改用户密码

# 组管理
sudo groupadd groupname # 创建组
sudo groupdel groupname # 删除组
sudo groupmod -n newname oldname # 重命名组

# 查看用户信息
whoami # 当前用户
id # 当前用户ID和组
id username # 指定用户信息
groups # 当前用户所属组
groups username # 指定用户所属组
finger username # 显示用户信息(需安装)

# 切换用户
su - username # 切换到用户(加载环境)
su username # 切换到用户(不加载环境)
sudo -u username command # 以其他用户执行命令
sudo -i # 切换到root

# sudo 配置
sudo visudo # 编辑sudoers文件
sudo -l # 列出当前用户sudo权限

系统服务管理

systemd 命令

# 查看服务状态
systemctl status service # 查看服务状态
systemctl is-active service # 检查是否运行
systemctl is-enabled service # 检查是否开机启动

# 启动/停止/重启服务
sudo systemctl start service # 启动服务
sudo systemctl stop service # 停止服务
sudo systemctl restart service # 重启服务
sudo systemctl reload service # 重新加载配置

# 开机启动管理
sudo systemctl enable service # 开机启动
sudo systemctl disable service # 禁用开机启动
sudo systemctl enable --now service # 立即启用并启动

# 查看所有服务
systemctl list-units # 查看活动单元
systemctl list-units --type=service # 查看服务
systemctl list-unit-files # 查看所有单元文件

# 日志查看
journalctl # 查看所有日志
journalctl -u service # 查看特定服务日志
journalctl -f # 实时追踪
journalctl --since "1 hour ago" # 查看最近1小时
journalctl -n 100 # 查看最后100行
journalctl --disk-usage # 查看日志占用空间

# 系统控制
sudo systemctl poweroff # 关机
sudo systemctl reboot # 重启
sudo systemctl suspend # 挂起
sudo systemctl hibernate # 休眠

定时任务

# 查看定时任务
crontab -l # 列出当前用户任务
sudo crontab -l # 列出root用户任务
cat /etc/crontab # 查看系统crontab
ls /etc/cron.d/ # 查看cron.d目录
ls /etc/cron.daily/ # 查看每日任务
ls /etc/cron.weekly/ # 查看每周任务
ls /etc/cron.monthly/ # 查看每月任务

# 编辑定时任务
crontab -e # 编辑当前用户任务
sudo crontab -e # 编辑root用户任务

# Crontab 格式
# 分 时 日 月 星期 命令
# * * * * * command
# │ │ │ │ │
# │ │ │ │ └─── 星期 (0-7, 0和7都是周日)
# │ │ │ └───── 月 (1-12)
# │ │ └─────── 日 (1-31)
# │ └───────── 时 (0-23)
# └─────────── 分 (0-59)

# 示例
* * * * * command # 每分钟
*/5 * * * * command # 每5分钟
0 * * * * command # 每小时
0 0 * * * command # 每天午夜
0 2 * * * command # 每天凌晨2点
0 0 * * 0 command # 每周日
0 0 1 * * command # 每月1号
0 0 1 1 * command # 每年1月1号

0 9-17 * * 1-5 command # 工作日9点到17点每小时
*/30 9-17 * * 1-5 command # 工作日9点到17点每30分钟

# 使用 at 执行一次性任务
at 14:00 # 在今天14:00执行
at now + 1 hour # 1小时后执行
at 14:00 tomorrow # 明天14:00执行
atq # 列出待执行任务
atrm 1 # 删除任务1

小结

  1. 文件操作:ls, cd, pwd, cp, mv, rm, mkdir, touch, find, grep
  2. 权限管理:chmod, chown, chgrp
  3. 系统信息:uname, hostname, uptime, who, ps, top
  4. 网络管理:ip, ss, ping, curl, wget, netstat
  5. 文本处理:cat, grep, sed, awk, sort, uniq, cut, wc
  6. 压缩归档:tar, gzip, zip, unzip
  7. 软件包管理:apt, dnf, yum
  8. 服务管理:systemctl, journalctl
  9. 定时任务:crontab, at

练习

  1. 查找系统中大于100MB的文件并删除
  2. 创建定时任务,每天凌晨备份日志文件
  3. 使用awk处理日志文件,统计IP访问次数
  4. 配置systemd服务,管理自定义应用