Skip to content

第二章 Shell命令 v1.0 ​

第一部分 文件与目录操作 ​

一、文件操作命令 ​

文件操作命令是Linux系统中最基础和最常用的命令

①基本文件操作 ​

  • ls:列出当前目录文件

    • ls -l:显示详细信息(权限、所有者、大小、修改时间)
    • ls -a:显示所有文件(包括隐藏文件)
    • ls -la:显示所有文件的详细信息
    • ls -lh:以人类可读格式显示文件大小(KB、MB、GB,-h 需配合 -l 或 -s 才生效)
    • ls -t:按修改时间排序
    • ls --color=auto:彩色显示文件类型
  • touch:创建空文件或更新文件时间戳

    • touch file.txt:创建空文件
    • touch -t 202312311200 file.txt:修改文件时间戳为2023年12月31日12:00
  • cp:复制文件或目录

    • cp file1 file2:复制file1到file2
    • cp -r dir1 dir2:递归复制目录dir1到dir2
    • cp -p file1 file2:复制时保留文件属性(权限、时间戳等)
    • cp -i file1 file2:覆盖前提示确认
  • mv:移动或重命名文件

    • mv file1 file2:重命名file1为file2
    • mv file1 dir1/:移动file1到dir1目录
    • mv -i file1 file2:覆盖前提示确认
  • rm:删除文件或目录

    • rm file.txt:删除文件
    • rm -r dir1/:递归删除目录
    • rm -rf dir1/:强制递归删除(慎用)
    • rm -i file.txt:删除前提示确认

②文件内容查看 ​

  • cat:查看文件全部内容

    • cat file.txt:显示文件内容
    • cat -n file.txt:显示行号
    • cat -b file.txt:显示行号(跳过空行)
    • cat file1 file2 > merged.txt:合并多个文件
  • less:分页查看文件内容

    • less file.txt:打开文件
    • 快捷键:
      • 空格键:向下翻页
      • b:向上翻页
      • /关键词:向下搜索
      • ?关键词:向上搜索
      • n:下一个搜索结果
      • N:上一个搜索结果
      • q:退出
  • head:查看文件开头部分

    • head file.txt:显示前10行
    • head -n 20 file.txt:显示前20行
  • tail:查看文件末尾部分

    • tail file.txt:显示后10行
    • tail -n 20 file.txt:显示后20行
    • tail -f file.log:实时监控日志文件(f = follow)

③文件查找 ​

  • find:查找文件和目录

    • find . -name "*.txt":当前目录查找所有.txt文件
    • find /home -type f -name "test":在/home目录查找名为test的文件
    • find . -type d -name "logs":查找名为logs的目录
    • find . -size +100M:查找大于100M的文件
    • find . -mtime -7:查找7天内修改过的文件
    • find . -perm 755:查找权限为755的文件
  • locate:快速查找文件(需要先更新数据库)

    • locate file.txt:查找file.txt
    • sudo updatedb:更新文件数据库
  • whereis:查找二进制程序、源代码和手册

    • whereis ls:查找ls命令的位置

二、目录操作命令 ​

目录操作命令用于管理文件系统的目录结构

①目录基本操作 ​

  • pwd:显示当前工作目录

    • pwd:显示当前目录的绝对路径
  • cd:切换目录

    • cd /home/user:切换到绝对路径
    • cd ..:切换到上级目录
    • cd ~:切换到用户主目录
    • cd -:切换到上一次所在目录
    • cd Desktop:切换到当前目录下的Desktop目录
  • mkdir:创建目录

    • mkdir dir1:创建单个目录
    • mkdir -p dir1/dir2/dir3:递归创建多级目录
    • mkdir -m 755 dir1:创建目录并设置权限
  • rmdir:删除空目录

    • rmdir dir1:删除空目录
    • rmdir -p dir1/dir2/dir3:递归删除多级空目录
  • tree:以树形结构显示目录

    • tree:显示当前目录树形结构
    • tree -L 2:显示2层深度的目录结构
    • tree -d:只显示目录
    • tree -a:显示所有文件(包括隐藏文件)

第二部分 文本处理命令 ​

一、文本搜索与编辑 ​

文本处理命令用于查找、替换和处理文本文件

①文本搜索 ​

  • grep:文本搜索工具
    • grep "error" log.txt:在log.txt中搜索error
    • grep -r "error" ./logs/:递归搜索logs目录下所有文件
    • grep -i "error" log.txt:忽略大小写搜索
    • grep -n "error" log.txt:显示匹配的行号
    • grep -v "error" log.txt:显示不包含error的行
    • grep -E "error|warning" log.txt:搜索error或warning
    • grep -c "error" log.txt:统计匹配的行数
    • grep --color=auto "error" log.txt:高亮显示匹配内容

②文本排序与去重 ​

  • sort:文本排序

    • sort file.txt:按字母顺序排序
    • sort -n file.txt:按数字顺序排序
    • sort -r file.txt:反向排序
    • sort -u file.txt:排序并去重
    • sort -t: -k2 -n /etc/passwd:按第2字段数字排序(以冒号分隔)
  • uniq:去重(需要先排序)

    • uniq file.txt:去除相邻重复行
    • sort file.txt | uniq:排序后去重
    • uniq -c file.txt:统计重复次数
    • uniq -d file.txt:只显示重复的行

二、文本统计与转换 ​

①文本统计 ​

  • wc:统计文件信息
    • wc file.txt:显示行数、字数、字节数
    • wc -l file.txt:只显示行数
    • wc -w file.txt:只显示字数
    • wc -c file.txt:只显示字节数
    • wc -L file.txt:显示最长行的长度

②文本转换 ​

  • tr:字符替换和删除

    • tr 'a-z' 'A-Z' < file.txt:小写转大写
    • tr -d '0-9' < file.txt:删除所有数字
    • tr -s ' ' < file.txt:压缩连续空格为一个空格
  • cut:按列切分文本

    • cut -f1 file.txt:提取第1列(以Tab分隔)
    • cut -d: -f1 /etc/passwd:以冒号分隔,提取第1列
    • cut -c1-10 file.txt:提取每行第1到10个字符
  • sed:流编辑器

    • sed 's/old/new/g' file.txt:全局替换old为new
    • sed '3d' file.txt:删除第3行
    • sed '2,5d' file.txt:删除第2到5行
    • sed '/error/d' file.txt:删除包含error的行
    • sed -i 's/old/new/g' file.txt:直接修改文件(备份后)
    • sed -i.bak 's/old/new/g' file.txt:修改并备份为file.txt.bak
  • awk:文本分析工具

    • awk '{print $1}' file.txt:打印第1列
    • awk -F: '{print $1}' /etc/passwd:以冒号分隔,打印第1列
    • awk '{print NR, $0}' file.txt:显示行号和整行内容
    • awk '{sum+=$1} END {print sum}' file.txt:计算第1列的和
    • awk 'NR==5' file.txt:只显示第5行
    • awk 'NR>=5 && NR<=10' file.txt:显示第5到10行

第三部分 权限与用户管理 ​

一、文件权限管理 ​

Linux使用rwx权限模式控制文件访问

①权限表示 ​

权限数字说明
r4读权限(read)
w2写权限(write)
x1执行权限(execute)
组合权限说明
rwx7读+写+执行
rw-6读+写
r-x5读+执行
r--4只读

②chmod:修改文件权限 ​

  • 字母模式

    • chmod u+x file.txt:所有者增加执行权限
    • chmod g-w file.txt:工作组去掉写权限
    • chmod o=r file.txt:其他用户设置为只读
    • chmod a+r file.txt:所有用户增加读权限
  • 数字模式

    • chmod 755 file.txt:所有者rwx,组和其他用户rx
    • chmod 644 file.txt:所有者rw,组和其他用户r
    • chmod 777 dir/:所有用户全部权限(不安全)
    • chmod -R 755 dir/:递归设置目录及内部文件权限

权限示例:

text
-rwxr-xr--  1  user  group  1024  Jan 1 12:00  file.txt
│  ││││  │      │    │      │     │           │
│  ││││  │      │    │      │     └── 文件名
│  ││││  │      │    │      └────────── 修改时间
│  ││││  │      │    └────────────────── 文件大小
│  ││││  │      └─────────────────────── 所属组
│  ││││  └────────────────────────────── 所有者
│  └┴┴┴└─────────────────────────────── 文件类型及权限

二、用户与组管理 ​

①用户管理 ​

  • useradd:创建用户

    • useradd username:创建用户
    • useradd -m username:创建用户并创建主目录
    • useradd -d /home/user username:指定主目录
    • useradd -s /bin/bash username:指定默认shell
  • userdel:删除用户

    • userdel username:删除用户(保留主目录)
    • userdel -r username:删除用户及主目录
  • passwd:修改用户密码

    • passwd:修改当前用户密码
    • passwd username:修改指定用户密码(需要root权限)
  • whoami:显示当前用户名

  • who:显示登录用户信息

  • w:显示登录用户及其活动

②组管理 ​

  • groupadd:创建用户组

    • groupadd groupname:创建组
  • groupdel:删除用户组

    • groupdel groupname:删除组
  • usermod:修改用户属性

    • usermod -aG groupname username:将用户添加到组(不覆盖原有组)
    • usermod -g groupname username:修改用户的主组
    • usermod -l newname oldname:修改用户名
  • groups:显示用户所属组

    • groups:显示当前用户所属组
    • groups username:显示指定用户所属组

③文件所有者管理 ​

  • chown:修改文件所有者
    • chown user file.txt:修改文件所有者为user
    • chown user:group file.txt:修改所有者和组
    • chown -R user:group dir/:递归修改目录及内部文件
    • chown :group file.txt:只修改组

第四部分 系统管理命令 ​

一、进程管理 ​

进程管理命令用于监控和控制运行的程序

①进程查看 ​

  • ps:查看进程

    • ps:显示当前用户的进程
    • ps aux:显示所有进程详细信息
    • ps -ef:显示所有进程(格式略有不同)
    • ps aux | grep nginx:查看nginx相关进程
    • ps -u username:查看指定用户的进程
  • top:实时显示进程信息

    • top:启动top
    • 快捷键:
      • P:按CPU使用率排序
      • M:按内存使用率排序
      • N:按PID排序
      • q:退出
      • k:杀死进程(输入PID)
  • htop:增强版top(需要安装)

    • htop:启动htop(支持鼠标和颜色显示)

②进程控制 ​

  • kill:终止进程
    • kill PID:正常终止进程(发送SIGTERM信号)
    • kill -9 PID:强制终止进程(发送SIGKILL信号)
    • kill -l:列出所有信号

常见信号:

信号数字说明
SIGTERM15终止信号(进程可捕获并处理)
SIGKILL9强制终止(进程无法捕获)
SIGHUP1重新加载配置
  • pkill:按名称终止进程

    • pkill nginx:终止所有名为nginx的进程
    • pkill -9 nginx:强制终止nginx进程
  • killall:按名称终止所有进程

    • killall nginx:终止所有nginx进程
    • killall -9 nginx:强制终止所有nginx进程
  • nohup:后台运行程序(不挂断)

    • nohup command &:后台运行命令
    • nohup ./app > app.log 2>&1 &:后台运行并重定向输出
  • bg:将后台暂停的作业继续运行

  • fg:将后台作业调至前台

  • jobs:显示后台作业列表

二、系统监控 ​

①资源监控 ​

  • free:查看内存使用情况

    • free:显示内存信息(默认单位 KiB)
    • free -h:以人类可读格式显示
    • free -m:以MB显示
    • free -g:以GB显示
    • free -s 2:每2秒刷新一次
  • df:查看磁盘使用情况

    • df:显示磁盘使用情况(1KB块)
    • df -h:以人类可读格式显示
    • df -T:显示文件系统类型
    • df -i:显示inode使用情况
  • du:查看目录占用空间

    • du -h dir/:显示目录大小
    • du -sh dir/:显示目录总大小
    • du -h --max-depth=1 /:显示根目录下一级目录的大小
  • uptime:查看系统运行时间和负载

    • uptime:显示运行时间、用户数、平均负载

②日志查看 ​

  • dmesg:查看内核日志

    • dmesg:显示内核消息
    • dmesg | grep error:搜索error相关内核消息
  • journalctl:查看systemd日志

    • journalctl:查看所有日志
    • journalctl -u nginx:查看nginx服务日志
    • journalctl -f:实时查看日志
    • journalctl --since today:查看今天的日志
    • journalctl -p err:查看错误级别日志

第五部分 网络命令 ​

一、网络连接管理 ​

网络命令用于配置和监控网络连接

①网络配置 ​

  • ifconfig:查看和配置网络接口(部分系统需安装net-tools)

    • ifconfig:显示所有网络接口信息
    • ifconfig eth0:显示eth0接口信息
    • ifconfig eth0 up:启用eth0接口
    • ifconfig eth0 down:关闭eth0接口
  • ip:新一代网络配置工具

    • ip addr:显示网络接口地址
    • ip link:显示网络接口状态
    • ip route:显示路由表
    • ip addr add 192.168.1.10/24 dev eth0:添加IP地址
    • ip addr del 192.168.1.10/24 dev eth0:删除IP地址
  • ping:测试网络连通性

    • ping google.com:ping谷歌
    • ping -c 4 google.com:ping 4次后停止
    • ping -i 2 google.com:间隔2秒ping一次
  • traceroute:路由追踪

    • traceroute google.com:追踪到google的路由
    • traceroute -n google.com:不解析主机名(更快)

②端口监控 ​

  • netstat:网络连接统计(部分系统需安装net-tools)
    • netstat -tunlp:显示所有监听端口
    • netstat -an:显示所有网络连接
    • netstat -tunlp | grep 80:查找占用80端口的进程

参数说明:

  • -t:TCP连接

  • -u:UDP连接

  • -n:以数字形式显示地址和端口

  • -l:只显示监听套接字

  • -p:显示进程ID和名称

  • ss:新一代网络连接查看工具

    • ss -tunlp:显示所有监听端口
    • ss -tulpn:显示所有连接和监听端口
    • ss -s:显示统计摘要
  • lsof:列出打开的文件(包括网络连接)

    • lsof -i:80:查看占用80端口的进程
    • lsof -i TCP:查看所有TCP连接
    • lsof -u username:查看指定用户打开的文件

③网络下载 ​

  • wget:下载文件

    • wget http://example.com/file.zip:下载文件
    • wget -O newname.zip http://example.com/file.zip:下载并重命名
    • wget -c http://example.com/file.zip:断点续传
    • wget -b http://example.com/file.zip:后台下载
    • wget -r http://example.com/:递归下载整个网站
  • curl:传输数据(支持多种协议)

    • curl http://example.com:获取网页内容
    • curl -O http://example.com/file.zip:下载文件
    • curl -I http://example.com:只获取响应头
    • curl -X POST -d "key=value" http://example.com/api:发送POST请求
    • curl -H "Content-Type: application/json" -d '{"key":"value"}' http://example.com/api:发送JSON数据

第六部分 压缩与归档 ​

一、压缩命令 ​

压缩命令用于减少文件大小以便存储或传输

①tar:归档工具 ​

  • tar -cvf archive.tar file1 file2:创建tar归档
  • tar -xvf archive.tar:解压tar归档
  • tar -czvf archive.tar.gz dir/:创建gzip压缩归档
  • tar -xzvf archive.tar.gz:解压gzip压缩归档
  • tar -cjvf archive.tar.bz2 dir/:创建bzip2压缩归档
  • tar -xjvf archive.tar.bz2:解压bzip2压缩归档
  • tar -xzvf archive.tar.gz -C /path/to/dest:解压到指定目录

参数说明:

  • -c:创建归档
  • -x:解压归档
  • -v:显示详细信息
  • -f:指定文件名
  • -z:使用gzip压缩
  • -j:使用bzip2压缩
  • -C:切换到指定目录

②zip/unzip ​

  • zip -r archive.zip dir/:递归压缩目录
  • zip archive.zip file1 file2:压缩多个文件
  • unzip archive.zip:解压zip文件
  • unzip -l archive.zip:列出zip文件内容(不解压)
  • unzip -o archive.zip:覆盖已存在的文件
  • unzip -d /path/to/dest archive.zip:解压到指定目录

二、压缩格式对比 ​

格式压缩率速度特点
.tar不压缩快仅归档,不做压缩
.tar.gz中等中等兼容性好,最常用
.tar.bz2较高较慢压缩率高,Linux常用
.zip中等较快跨平台兼容性好

第七部分 其他常用命令 ​

一、帮助与手册 ​

①获取帮助 ​

  • man:查看命令手册

    • man ls:查看ls命令的手册
    • man -f ls:显示ls相关的手册页
    • man -k keyword:搜索包含keyword的手册
  • --help:大多数命令的帮助选项

    • ls --help:查看ls命令的帮助
    • cp --help:查看cp命令的帮助
  • info:更详细的信息

    • info ls:查看ls的详细信息
  • whatis:简要描述命令

    • whatis ls:显示ls的一行描述

二、历史与快捷键 ​

①命令历史 ​

  • history:查看命令历史
    • history:显示所有历史命令
    • history 20:显示最近20条命令
    • !100:执行第100条历史命令
    • !ls:执行最近一条以ls开头的命令
    • !!:执行上一条命令

②命令行快捷键 ​

快捷键功能
Ctrl + C终止当前命令
Ctrl + Z暂停当前命令
Ctrl + D退出当前Shell或输入结束
Ctrl + L清屏(等同于clear命令)
Ctrl + A光标移至行首
Ctrl + E光标移至行尾
Ctrl + K删除光标到行尾的内容
Ctrl + U删除光标到行首的内容
Ctrl + W删除光标前一个单词
Ctrl + Y粘贴最近删除的内容
Ctrl + R搜索历史命令
Tab自动补全命令或路径
↑ / ↓上一条/下一条历史命令

三、其他实用命令 ​

  • echo:输出文本或变量

    • echo "Hello World":输出文本
    • echo $HOME:输出环境变量HOME的值
    • echo -e "Line1\nLine2":支持转义字符
    • echo "text" >> file.txt:追加文本到文件
  • date:显示或设置系统日期和时间

    • date:显示当前日期和时间
    • date "+%Y-%m-%d %H:%M:%S":自定义格式显示
    • date -s "2024-01-01 12:00:00":设置系统时间
  • cal:显示日历

    • cal:显示当前月份日历
    • cal 2024:显示2024年日历
    • cal 12 2024:显示2024年12月日历
  • alias:设置命令别名

    • alias ll='ls -l':设置ll为ls -l的别名
    • alias:显示所有别名
    • unalias ll:删除ll别名
  • exit:退出Shell

  • clear:清屏

  • sleep:暂停执行

    • sleep 5:暂停5秒
    • sleep 5 && echo "done":5秒后输出done

附录:常用组合命令示例 ​

①查找并删除大文件 ​

bash
# 查找大于100M的文件
find . -type f -size +100M -exec ls -lh {} \;

# 删除所有.log文件
find . -name "*.log" -delete

②统计代码行数 ​

bash
# 统计当前目录下所有.py文件的代码行数
find . -name "*.py" | xargs wc -l

# 递归统计目录下所有文件的行数
find . -type f | xargs wc -l | tail -1

③批量重命名 ​

bash
# 将所有.jpg文件改为.png
for file in *.jpg; do mv "$file" "${file%.jpg}.png"; done

# 批量添加前缀
for file in *; do mv "$file" "prefix_$file"; done

④监控日志文件 ​

bash
# 实时查看最新的50行日志
tail -f -n 50 app.log

# 查找错误日志
grep -i "error" app.log | tail -n 20

⑤查看进程占用端口 ​

bash
# 查看占用8080端口的进程
netstat -tunlp | grep 8080

# 或使用ss命令
ss -tunlp | grep 8080

# 或使用lsof命令
lsof -i:8080

⑥查找并杀死进程 ​

bash
# 查找nginx进程并杀死
ps aux | grep nginx | grep -v grep | awk '{print $2}' | xargs kill -9

# 或使用pkill
pkill -9 nginx

⑦查找空文件 ​

bash
# 查找当前目录下所有空文件
find . -type f -empty

# 查找并删除空文件
find . -type f -empty -delete

⑧批量修改文件权限 ​

bash
# 递归设置所有.sh文件为可执行
find . -name "*.sh" -exec chmod +x {} \;

# 或使用xargs
find . -name "*.sh" | xargs chmod +x

⑨查看文件变化 ​

bash
# 查看文件最后10行变化
watch -n 1 'tail -n 10 file.txt'

# 查看目录下的文件变化
watch -n 1 'ls -lh'

⑩查找文件中的内容 ​

bash
# 递归查找包含特定内容的文件
grep -r "function" . --include="*.js"

# 统计关键词出现的次数
grep -o "keyword" file.txt | wc -l