跳转至

Linux

本文件旨在介绍 Debian Linux 的常用命令,以及主要应用和服务的配置和管理,例如,Nginx、GatLab 等的配置和管理。

Bash Shell

  1. 常用 Bash 命令

    10 个最常用 Bash 命令
    排名 命令 常用场景 排名 命令 常用场景
    1 ls 查看当前目录内容 6 cp 拷贝文件/目录
    2 cd 界面切换目录 7 mv 移动或重命名项目
    3 pwd 确认当前所在目录 8 touch 新建或更新文件时间
    4 mkdir 创建新目录 9 cat 查看或合并文件内容
    5 rm 删除文件/目录 10 grep 文本模式搜索
  2. Bash 终端下,常用应用

    Bash 终端下,常用应用
    序号 应用/命令 说明与用途
    1 bash / shell 命令行解释器,执行用户输入的命令,如运行脚本、执行系统命令
    2 vim 文本编辑器,用于编辑配置文件和代码
    3 ssh 远程登录工具,用于连接远程服务器
    4 scp / rsync 文件传输工具,用于复制文件和备份同步
    5 top / htop 系统资源监控,查看进程、CPU和内存使用情况
    6 git 版本控制工具,管理代码版本和协同开发
    7 curl / wget 网络下载工具,用于下载文件和测试网络接口
    8 tmux / screen 终端复用器,管理多个终端会话,支持断线重连
    9 apt / apt-get 软件包管理器,用于安装、升级和卸载软件
    10 grep / awk / sed 文本处理工具,用于筛选日志和格式化数据
  3. Debian 服务器上,常用服务

    Debian 服务器上,常用服务
    序号 应用名称 说明与用途
    1 OpenSSH 远程管理,提供安全的远程登录和终端访问
    2 Exim4 系统通知邮件服务,处理系统和应用邮件传输
    3 Apache2 或 Nginx Web 服务,运行网站和 Web 应用服务器
    4 MariaDB / MySQL / PostgreSQL 数据库服务器,存储和管理应用数据
    5 Samba / NFS 文件共享服务,实现跨平台文件访问和网络存储
    6 DNS / DHCP / Proxy 网络基础设施服务,提供域名解析、IP分配和代理服务
    7 CUPS 打印服务,支持网络打印和共享打印机
    8 Nagios / Zabbix / Netdata 系统监控,实时监控服务器状态和性能
    9 Fail2ban / firewalld / iptables 安全防护,防止恶意攻击和管理防火墙规则
    10 rsyslog / logrotate 日志管理,收集、存储和轮替系统及应用日志
  4. cat 命令速查表

    cat 是 Linux/Unix 中最常用的文件操作命令之一,用于查看、合并和创建文件。

    常用选项

    选项 功能
    -n 为所有行编号(包括空行)。
    -b 仅为非空行编号。
    -s 将连续的空行压缩为一行。
    -E 在每行末尾显示 $,方便排查换行。
    -T 将 TAB 显示为 ^I,方便排查缩进。
    -A 显示所有不可见字符(等价于 -vET)。

    常见用法

    命令 用途
    cat -n file.txt 显示文件并编号(含空行)。
    cat -b file.txt 显示文件并编号(忽略空行)。
    cat -s file.txt 显示文件并压缩多余空行。
    cat -E file.txt 显示文件行尾 $
    cat -A file.txt 调试文件:显示不可见字符。
    cat file1 file2 > merged.txt 合并多个文件到新文件。
    cat file1 >> file2 将 file1 追加到 file2。
    cat > newfile
    (Ctrl+D 保存)
    从键盘创建文件。
    cat >> file
    (Ctrl+D 保存)
    从键盘向已有文件追加。
    cat file | less 分页查看大文件。
    cat -n file | grep "关键字" 查找关键字并显示行号。
    cat /dev/null > file 快速清空文件内容。

    小技巧

    • 排查文件隐藏字符cat -A file.txt
    • 快速清空日志文件cat /dev/null > file.log
    • 带行号搜索cat -n file.txt | grep "pattern"
  5. 实时追踪日志文件 (以 GitLab 为例)

    这个命令的目的是以管理员权限实时追踪 GitLab 的多个关键日志文件,并即时过滤出所有包含特定错误关键词的行,以便开发者或管理员能够快速诊断问题。

    1
    2
    3
    4
    5
    6
    7
    $ sudo bash -c '
    tail -f                                         \
    /var/log/gitlab/gitlab-rails/production.log     \
    /var/log/gitlab/puma/puma_stdout.log            \
    /var/log/gitlab/nginx/gitlab_error.log          \
    | grep --line-buffered -E "500 | ERROR | FATAL | ActionView::Template::Error | _top_bar.html.haml"
    '
    

    这是一个管道命令,它由三个主要部分组成:

    • sudo bash -c
      sudo: 以超级用户(root)权限运行后面的命令。这是因为 GitLab 的日志文件通常由 git 用户或 root 用户拥有,普通用户没有权限读取;
      bash -c '...': 使用 bash 来执行引号中的单行命令。这确保了整个命令作为一个整体被执行,特别是当命令中包含管道符 | 时

    • tail -f
      tail: 用于显示文件的末尾内容;
      -f: 这是 follow 的缩写,意思是“持续追踪”。它会实时监听指定文件的新增内容,并将其输出到标准输出(屏幕)。这对于监控正在运行的应用程序产生的日志非常有用
    • grep --line-buffered -E "..."
      |: 这是一个管道符(pipe),它将前一个命令(tail)的输出作为后一个命令(grep)的输入;
      --line-buffered: 这个选项非常重要。当 grep 接收来自管道的输入时,它通常会缓冲数据。这个选项强制 grep 在处理完每一行之后立即输出结果,而不是等待缓冲区填满。这对于实时日志监控至关重要,因为它能确保你立即看到新出现的匹配行;
      -E: 启用扩展正则表达式,这样你就可以使用 | 来表示“或”关系

curl 简介

curl 是一个用来在命令行下进行数据传输的工具,支持多种协议(HTTP、HTTPS、FTP、SFTP 等)。它常用于调试网络请求、下载文件或与 API 交互。

curl 常用命令介绍
# 命令 参数介绍 作用说明
1 curl -v -v (verbose), 详细模式 详细模式,显示请求和响应的详细信息(请求头、响应头等)
2 curl -X <方法> -X (request method) 指定 HTTP 请求方法,如 GET、POST、PUT、DELETE 等
3 curl -d <数据> -d (data) 发送 POST 请求时提交的数据,支持字符串或从文件读取数据
4 curl -H <头> -H (header) 自定义 HTTP 头部,如 -H "Content-Type: application/json"
5 curl -o <文件> -o (output) 将响应内容保存到指定文件,而不是输出到终端
6 curl -I -I 仅获取响应头信息,不返回响应体
7 curl -L -L (location) 跟随服务器的重定向(HTTP 3xx 响应)
8 curl -u 用户名:密码 -u (user) 进行 HTTP 基本认证,提供用户名和密码
9 curl --data-urlencode <数据> --data-urlencode 发送 URL 编码后的数据
10 curl --compressed --compressed 请求服务器返回压缩内容(如 gzip)并自动解压
11 curl -k -k (insecure) 忽略 HTTPS 证书验证,允许访问自签名证书的 HTTPS 网站
12 curl -s -s (silent) 静默模式,不输出进度和错误信息

curl 详细用法示例

  1. 发送 GET 请求

    # 简单请求网页内容
    curl https://example.com
    
    # 显示请求和响应头(详细模式)
    curl -v https://example.com
    
    # 仅获取响应头,不下载内容
    curl -I https://example.com
    
    # 跟随重定向
    curl -L http://example.com
    

  2. 发送 POST 请求

    1
    2
    3
    4
    5
    6
    7
    8
    # 发送表单数据(默认表单格式)
    curl -X POST -d "username=tom&password=123" https://example.com/login
    
    # 发送 JSON 格式数据
    curl -X POST -H "Content-Type: application/json" -d '{"name":"Tom","age":30}' https://api.example.com/users
    
    # 从文件读取 POST 数据
    curl -X POST -H "Content-Type: application/json" -d @data.json https://api.example.com/users
    

  3. 添加自定义请求头

    # 添加多个请求头
    curl -H "Authorization: Bearer YOUR_TOKEN" -H "Accept: application/json" https://api.example.com/data
    

  4. 认证相关

    1
    2
    3
    4
    5
    # HTTP 基本认证
    curl -u username:password https://example.com/protected
    
    # Bearer Token 认证
    curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" https://api.example.com/secure-data
    

  5. 下载和保存文件

    1
    2
    3
    4
    5
    # 保存响应内容到指定文件
    curl -o myfile.zip https://example.com/file.zip
    
    # 自动使用服务器返回的文件名保存
    curl -O https://example.com/file.zip
    

  6. 处理 Cookie

    1
    2
    3
    4
    5
    6
    7
    8
    # 发送 Cookie
    curl --cookie "sessionid=abcd1234" https://example.com/profile
    
    # 从文件读取 Cookie
    curl --cookie cookies.txt https://example.com/profile
    
    # 保存 Cookie 到文件
    curl -c cookies.txt https://example.com/login
    

  7. 忽略 HTTPS 证书验证

    curl -k https://self-signed.badssl.com/
    

  8. 支持压缩传输

    curl --compressed https://example.com/data
    

  9. 超时控制

    1
    2
    3
    4
    5
    # 连接超时 10 秒
    curl --connect-timeout 10 https://example.com
    
    # 请求最大时间 30 秒
    curl --max-time 30 https://example.com
    

  10. 发送 PUT 和 DELETE 请求

    1
    2
    3
    4
    5
    # PUT 请求上传数据
    curl -X PUT -d '{"name":"Tom"}' -H "Content-Type: application/json" https://api.example.com/users/123
    
    # DELETE 请求
    curl -X DELETE https://api.example.com/users/123
    

Nginx

Nginx 常用命令

Nginx 最常用的 10 个命令
序号 命令 作用和使用场景
1 sudo nginx 启动 Nginx; 第一次启动或服务未运行时启动
2 sudo nginx -s stop 立即停止 Nginx; 紧急停止服务(不保存连接)
3 sudo nginx -s quit 平滑停止 Nginx; 优雅退出,处理完当前连接再停止
4 sudo nginx -s reload 重新加载配置文件; 修改了配置文件后生效,不中断连接
5 sudo nginx -t 测试配置文件是否正确; 修改配置后先检查语法错误
6 sudo nginx -T 测试并输出完整配置; 调试配置文件时查看合并结果
7 nginx -V 不确定当前系统 Nginx 配置文件位置时; 显示编译参数和模块信息
8 sudo systemctl start nginx 启动 Nginx(systemd 管理); 使用 systemd 管理服务
9 sudo systemctl stop nginx 停止 Nginx(systemd 管理); 停止服务
10 sudo systemctl restart nginx 重启 Nginx(systemd 管理); 配置大改后重新启动
11 sudo systemctl status nginx 查看 Nginx 状态; 查看是否运行、最近日志等
12 sudo systemctl enable nginx 开机自动启动 Nginx 服务
13 tail -f /var/log/nginx/error.log 查看错误日志
14 sudo netstat -tulnp | grep nginx 查看监听端口
  1. sudo nginx -t
    1
    2
    3
    4
    5
    # -t 是 test 的意思,表示测试配置文件语法,用来测试 Nginx 配置文件语法是否正确
    # 运行后,Nginx 会检查配置文件是否有语法错误或其他配置问题
    # 查配置文件,一般是 /etc/nginx/nginx.conf 和包含的其他配置文件
    # 该命令不会启动、停止或重载 Nginx,仅做语法检测
    $ sudo nginx -t
    
  2. sudo systemctl reload nginx
    1
    2
    3
    4
    5
    6
    7
    8
    # 重新加载 Nginx 服务的配置,在不停止当前服务的情况下,应用新的配置文件
    #
    # 与 restart 的区别:
    # 1) reload 是平滑重载配置,服务不会中断,连接不会断开
    # 2) restart 是完全重启服务,会先停止 Nginx,再重新启动,期间可能有短暂的服务不可用
    #
    # 使用场景:配置文件修改且语法检测通过后,执行此命令让新的配置生效
    $ sudo systemctl reload nginx
    
  3. 一般执行流程
    # 1) 在 sites-available 新建站点配置文件
    $ sudo vim /etc/nginx/sites-available/example.com
    
    # 2) 建立软链接到 sites-enabled
    $ sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
    
    # 3) 检查配置语法
    $ sudo nginx -t
    
    # 4) 重载 Nginx
    $ sudo systemctl reload nginx
    

systemctl 是管理 systemd 系统服务的命令,详见 systemd 系统服务中的介绍

主要文件夹和文件

文件夹 作用简介 文件 作用简介
conf.d 额外配置文件目录 fastcgi.conf FastCGI 参数配置
modules-available 可用模块配置 fastcgi_params FastCGI 参数(旧版)
modules-enabled 已启用模块配置 koi-utf KOI8-R 与 UTF-8 映射表
sites-available 可用虚拟主机配置 koi-win KOI8-R 与 Windows 编码映射
sites-enabled 已启用虚拟主机配置 mime.types MIME 类型映射文件
snippets 配置片段(复用配置) nginx.conf Nginx 主配置文件
proxy_params 代理相关请求头配置
scgi_params SCGI 参数配置
uwsgi_params uWSGI 参数配置
win-utf Windows 编码与 UTF-8 映射表
  1. conf.d
    存放通用配置文件片段,这些文件会被主配置文件 nginx.conf 自动包含。默认规则: include /etc/nginx/conf.d/*.conf; 所以放在 conf.d/ 目录里、扩展名是 .conf 的文件都会被加载。
    常见用途:配置额外的虚拟主机(server 块); 设置全局反向代理、缓存、限流等; 按功能拆分配置文件,方便管理
    特点:放进去的 .conf 文件会自动生效,不需要手动“启用”,只要语法正确 Nginx 就会加载

  2. sites-available
    存放站点配置文件(通常是 server 块),默认规则:Nginx 主配置文件中并不会直接 include sites-available/* 所以这个目录只是一个仓库,用来放置所有可能要启用的站点配置。
    特点:存放的配置不会自动生效,用来“备份”或存档所有的站点配置,方便管理

  3. sites-enabled
    存放已启用的站点配置文件,由主配置文件 nginx.conf 引入。在 nginx.conf 里有这样一行: include /etc/nginx/sites-enabled/*; sites-enabled 里的文件通常不是直接写的,而是软链接到 sites-available 里的文件:

    1
    2
    3
    4
    5
    # 启用站点时
    sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
    
    #禁用站点时
    sudo rm /etc/nginx/sites-enabled/example.com
    
    优点:方便启用/停用某个站点配置,不用改文件内容,只操作软链接;避免直接修改生效文件,减少风险

Nginx 配置决策图

flowchart LR
  A["你要添加的是 Nginx 配置吗?"]
  A --> B{"这个配置会不会频繁启用/禁用?"}

  B -- "是" --> C["配置是某个站点(server块)"]
  B -- "否" --> D["配置是通用功能或固定站点"]

  C --> E["放到 sites-available; ln -s 到 sites-enabled"]
  D --> F["放到 conf.d(会自动加载)"]