超常用 Linux 命令合辑

First Post:

Last Update:

Word Count:
3.2k

Read Time:
12 min

Page View: loading...


Linux Ubuntu 高频命令精简手册

目录


核心目录概念

在 Linux 命令行中,路径的表达依赖于几个特殊符号,理解它们的含义至关重要。

  • . (点) 代表当前目录

    • 意思: 它代表你光标当前所在的文件夹。
    • 示例: cp /etc/hosts . 这条命令的意思是,将 /etc/ 目录下的 hosts 文件,复制到这里(即当前目录)。
  • .. (点点) 代表父级目录

    • 意思: 它代表当前目录的上一层目录。
    • 示例: cd .. 这条命令会让你从当前位置切换到它的上一级目录。例如,从 /home/user/downloads 切换到 /home/user
  • / (斜杠) 代表根目录或分隔符

    • 意思:
      1. 当它出现在路径的开头时(如 /home/user),它代表整个文件系统的根目录,一切都始于此。
      2. 当它出现在路径的中间时(如 home/user),它作为不同目录之间的分隔符
  • ~ (波浪号) 代表用户主目录

    • 意思: 这是一个快捷方式,特指当前登录用户的主目录。对用户 user 来说,~ 就等同于 /home/user
    • 示例: cd ~/Documents 命令会直接将你带到你个人主目录下的 Documents 文件夹,无论你当前在哪个位置。

文件与目录管理

这类命令用于日常的文件和文件夹的创建、列出、复制、移动和删除操作。

  • 列出 (List): ls

    • 常用组合: ls -alh (显示所有、长格式、人类可读)。
  • 创建与编辑 (Create & Edit): mkdir, touch, nano

    • mkdir -p <目录名>: 创建新目录 (-p 能一次性创建多层不存在的目录)。
    • touch <文件名>: 创建一个空文件,或更新一个已有文件的时间戳。
    • nano <文件名>: 一个对新手友好的终端文本编辑器。
      • 安装: 如果提示命令未找到,请先执行 sudo apt update && sudo apt install nano
      • 使用方法:
        1. 打开或创建: nano my_script.sh
        2. 编辑: 直接输入文字。
        3. 保存: 按 Ctrl + O,然后按 Enter 确认文件名。
        4. 退出: 按 Ctrl + X。如果文件未保存,会提示你是否保存,(点击 Y 保存)。然后按 Enter 退出。
  • 复制 (Copy): cp

    • cp <源> <目标>: 复制文件。
    • cp -r <源目录> <目标目录>: 复制目录时必须使用 -r (recursive) 选项
  • 移动与重命名 (Move & Rename): mv

    • 移动: mv <源> <目标目录>
    • 重命名: mv <旧名称> <新名称>
  • 删除 (Remove): rm

    • rm <文件名>: 删除文件 (-f 强制删除)。
    • rm -r <目录名>: 递归删除目录及其所有内容,操作极度危险,请三思!

文件压缩与解压

  • tar (最常见的打包工具)

    • 压缩: tar -cvzf <压缩包名.tar.gz> <要压缩的文件或目录>
    • 解压到当前目录: tar -xvzf <文件名.tar.gz>
    • 解压到指定文件夹:
      使用 -C (大写) 选项来指定目标路径。

      示例:将 archive.tar.gz 解压到 /mnt/data/backups 目录下

      1
      tar -xvzf archive.tar.gz -C /mnt/data/backups
  • unzip (用于 .zip 文件)

    • 解压到当前目录: unzip <文件名.zip>
    • 解压到指定文件夹:
      使用 -d 选项来指定目标路径。

      示例:将 photos.zip 解压到 /home/user/Pictures 目录下

      1
      unzip photos.zip -d /home/user/Pictures
  • 注意事项:避免“双重根目录”

    • 问题: 有时解压 archive.zip 后,得到的不是文件,而是一个名为 archive 的文件夹,里面才是真正的文件,形成了 archive/archive/... 的嵌套结构。
    • 解决方案: 在解压前,先用 unzip -l <文件名.zip> 命令预览压缩包的内容结构。如果发现所有文件都包裹在一个顶层文件夹内,你就可以做到心中有数,或者选择一个更合适的目录来解压。

查看文件内容

  • cat <文件名>: 一次性显示整个文件内容。
  • less <文件名>: 分页显示大文件 (按 q 退出)。
  • head -n 20 <文件名>: 查看文件的前20行。
  • tail -f <日志文件名>: 实时监控文件末尾的新增内容,常用于看日志。

系统与进程信息

  • pwd: 显示当前工作目录。

  • df -h: 查看磁盘空间使用情况。

  • du -sh <路径>: 查看指定目录或文件的总大小。

    • 高级用法:列出当前目录内容大小并排序
      • 这个功能需要组合多个命令,通过管道 | 连接。
      • 列出最大的10个文件/目录:
        1
        du -h --max-depth=1 . | sort -rh | head -n 10
        • du -h --max-depth=1 .: 计算当前目录下(.)第一层(--max-depth=1)所有文件和目录的大小。
        • sort -rh: r表示逆序(从大到小),h表示按人类可读数值(K,M,G)排序。
        • head -n 10: 取排序后的前10行。
      • 列出最小的10个文件/目录 (不含当前目录.):
        1
        du -h --max-depth=1 . | sort -h | tail -n 11 | head -n 10
  • top / htop: 动态显示系统进程和资源占用。htop 更直观,推荐。

  • kill <进程ID>: 终止一个进程 (-9 为强制终止)。


网络操作

  • ping <主机名或IP>: 测试网络连通性。
  • wget <URL>: 从指定 URL 下载文件。
  • curl ifconfig.me: 查看你的公网IP地址。

用户与SSH管理

这是系统管理的核心部分,所有操作几乎都需要 sudo

  • 添加新用户

    • 使用交互式命令添加用户,会引导你设置密码和其他信息。
      1
      sudo adduser new_username
  • 用户分组

    • 将用户添加到某个组(例如 sudo 组,使其能执行 sudo 命令)。
      1
      sudo usermod -aG sudo new_username
      • -a (append) 表示追加,-G 表示指定次要组。
    • 查看用户所属的组:
      1
      groups new_username
  • 设置和确认SSH登录 (推荐使用密钥登录)

    • 第1步 (服务器): 安装SSH服务
      1
      2
      3
      4
      sudo apt update
      sudo apt install openssh-server
      # 检查服务状态,确保 active (running)
      sudo systemctl status ssh
    • 第2步 (你的本地电脑): 生成SSH密钥
      • 如果你的本地电脑上还没有密钥 (~/.ssh/id_rsa不存在),执行此命令。一路回车即可。
        1
        ssh-keygen -t rsa -b 4096
    • 第3步 (你的本地电脑): 将公钥复制到服务器
      • 这是最关键的一步,它会自动将你的公钥追加到服务器上对应用户的 ~/.ssh/authorized_keys 文件中。
        1
        ssh-copy-id new_username@服务器IP地址
    • 第4步 (服务器): 提升安全性 (可选但强烈推荐)
      • 禁止密码登录,只允许密钥登录。
      • 编辑SSH配置文件: sudo nano /etc/ssh/sshd_config
      • 找到 PasswordAuthentication yes 这一行,把它改成 PasswordAuthentication no
      • 保存 (Ctrl+O) 并退出 (Ctrl+X)。
      • 重启SSH服务使配置生效:
        1
        sudo systemctl restart ssh
    • 第5步: 确认登录
      • 现在你可以无需密码,直接通过密钥登录服务器了。
        1
        ssh new_username@服务器IP地址

权限与管理

  • sudo <命令>: 以超级用户 (root) 权限执行命令。
  • chmod <权限模式> <文件名>: 更改文件或目录的权限。
    • 常用示例: chmod 755 script.sh (赋予所有者读/写/执行权限,其他用户读/执行权限)。

好的,这是一个专门介绍“搜索与匹配”的独立部分。这部分命令是 Linux 系统管理和日常使用中最高频、最强大的工具之一。


搜索与匹配

在复杂的系统中,快速定位文件、查找特定内容或检查进程状态至关重要。findgrep 等命令的组合使用,能极大地提升工作效率。

=w= 请搭配 正则表达式快速入门到进阶Blog 食用

1. 按名称和属性查找文件: find

find 命令用于在目录结构中搜索文件,并执行指定的操作。它的强大之处在于可以根据文件的各种属性(名称、类型、大小、修改时间等)进行精细化查找。

基本语法: find [搜索路径] [表达式选项]

应用场景举例:

  • 场景一:查找特定的配置文件

    • 需求:服务器上部署了很多服务,你想找到所有名为 nginx.conf 的配置文件。
    • 应用
      1
      2
      # 从根目录 / 开始搜索
      sudo find / -name "nginx.conf"
      • /:指定搜索的起始路径为整个系统。
      • -name:按文件名进行精确匹配。
  • 场景二:清理临时的备份文件

    • 需求:查找并删除所有由开发者或编辑器自动生成的以 .bak 结尾的备份文件。
    • 应用
      1
      2
      3
      4
      5
      # 在当前项目目录 . 中查找所有 .bak 文件
      find . -name "*.bak"

      # 找到后直接删除(请谨慎操作!)
      find . -name "*.bak" -exec rm {} \;
      • *:是通配符,"*.bak" 匹配所有以 .bak 结尾的名称。
      • -exec rm {} \;:是对找到的每个结果 {} 执行 rm 命令。
  • 场景三:按文件类型查找

    • 需求:你只想查找所有名为 project目录,而不是同名的文件。
    • 应用
      1
      find . -type d -name "project"
      • -type d:指定查找类型为目录 (directory)。相应地,-type f 表示只查找普通文件 (file)。
  • 场景四:查找近期修改过的文件

    • 需求:排查问题时,需要查看 /etc 目录下最近24小时内被修改过的所有文件。
    • 应用
      1
      find /etc -mtime -1
      • -mtime -1:表示修改时间 (Modification Time) 在1天(24小时)之内。+1 则表示超过1天。
  • 场景五:查找占用空间的大文件

    • 需求:磁盘空间告急,需要找出系统中所有超过 500MB 的大文件。
    • 应用
      1
      find / -type f -size +500M
      • -size +500M:表示文件大小 (size) 超过 (+) 500兆字节 (M)。

2. 在文件内容中搜索文本: grep

grep (Global Regular Expression Print) 是最强大的文本搜索工具,用于在文件内容中查找包含指定模式(字符串或正则表达式)的行。

基本语法: grep [选项] "要搜索的模式" [文件名]

应用场景举例:

  • 场景一:检查配置项

    • 需求:确认 SSH 服务的监听端口号。
    • 应用
      1
      grep "Port" /etc/ssh/sshd_config
      • 这会从指定文件中找出所有包含 “Port” 字符串的行。
  • 场景二:在代码库中全局搜索

    • 需求:作为一名开发者,你想在整个项目代码中查找某个函数名或变量 getUserProfile 的所有引用。
    • 应用
      1
      grep -r "getUserProfile" .
      • -r (recursive):递归地搜索当前目录 (.) 及其所有子目录下的文件。
      • -i:如果需要忽略大小写(同时匹配 getuserprofile),可以使用 grep -ri ...
  • 场景三:分析日志文件

    • 需求:你需要从巨大的系统日志中,筛选出所有关于 “error” 的记录来进行故障分析。
    • 应用
      1
      grep -i "error" /var/log/syslog
  • 场景四:过滤命令的输出(管道 | 的威力)

    • 需求ls -l 命令列出的文件太多,你只想看其中和 python 相关的文件。
    • 应用
      1
      ls -l | grep "python"
      • 管道符 | 将前一个命令 (ls -l) 的输出,作为后一个命令 (grep) 的输入。这是 Linux 中最核心、最强大的特性之一。
  • 场景五:反向匹配

    • 需求:查看一个配置文件,但想隐藏所有以 # 开头的注释行,只看有效的配置。
    • 应用
      1
      grep -v "^#" /etc/nginx/nginx.conf
      • -v (invert-match):反向匹配,即输出所有不包含指定模式的行。
      • ^# 是一个简单的正则表达式,^ 表示一行的开始。

3. 查找正在运行的进程

  • 场景一:快速检查服务是否在运行

    • 需求:确认 nginx 服务是否已经成功启动。
    • 传统方式: ps aux | grep "nginx"
      • ps aux:列出系统中所有正在运行的进程。
      • grep "nginx":从进程列表中筛选出含 “nginx” 的行。
      • (缺点:通常会把 grep 命令本身也搜出来)。
    • 现代方式: pgrep
      • pgrep 是专门用于按名称查找进程ID (PID) 的命令,更简洁、准确。
      • 应用
        1
        pgrep nginx
        如果返回一个或多个数字(进程ID),说明服务正在运行。如果无任何返回,则表示服务未运行。
  • 场景二:找到进程并获取其详细信息

    • 需求:你用 pgrep 找到了 nginx 的进程ID,现在想看这个进程的完整信息(如启动用户、CPU占用等)。
    • 应用
      1
      2
      # pgrep 的输出可以被其他命令直接使用
      ps -f -p $(pgrep nginx)
      • $(...):命令替换,它会先执行括号里的 pgrep nginx 命令,然后将其输出(即进程ID)作为 ps -p 命令的参数。