Linux-Command Memo

Linux-Command Memo

退出 / 关闭虚拟机:init 0

init是 Linux 系统初始化进程,运行级别0代表关机(仅 root 权限可执行),用于安全关闭虚拟机 / 服务器,区别于强制断电,会先终止进程、同步数据后关机。

  • 基础用法:init 0

  • 常用示例:

    1
    2
    3
    4
    init 0  # 以root身份执行,安全关闭虚拟机(普通用户需加sudo:sudo init 0)
    # 补充:CentOS7+也可使用shutdown命令(更灵活)
    shutdown -h now # 立即关机(等价于init 0)
    shutdown -h 10 # 10分钟后关机

重启虚拟机:init 6 /reboot

init 6是传统运行级别重启(执行系统重启流程),reboot是通用重启命令,两者均可安全重启虚拟机,优先推荐reboot更易记。

  • 基础用法:init 6reboot

  • 常用示例:

    1
    2
    3
    4
    5
    init 6  # root权限重启虚拟机(普通用户:sudo init 6)
    reboot # 通用重启命令(无需记运行级别,root/普通用户加sudo均可)
    reboot -f # 强制重启(紧急情况使用,可能丢失未保存数据)
    # 补充:shutdown也可实现重启
    shutdown -r now # 立即重启

查看当前工作目录:pwd

pwd(Print Working Directory)用于显示当前 Shell 会话所在的绝对路径,解决 “不知道自己在哪个目录” 的问题,是最基础的路径定位命令。

  • 基础用法:pwd

  • 常用示例:

    1
    2
    pwd  # 输出当前目录(如/home/ubuntu/test)
    pwd -P # 显示真实路径(若当前目录是软链接,会指向链接的原始目录)

切换目录:cd

cd(Change Directory)用于切换 Shell 的工作目录,支持绝对路径、相对路径、快捷路径,是目录操作的核心命令。

  • 基础用法:cd [目标目录路径]

  • 常用示例:

    1
    2
    3
    4
    5
    6
    cd /usr/local  # 绝对路径:切换到/usr/local目录
    cd test # 相对路径:切换到当前目录下的test子目录
    cd .. # 切换到上级目录(..代表父目录)
    cd ~ # 切换到当前用户的家目录(如/home/ubuntu)
    cd - # 切换到上一次所在的目录(快速回切)
    cd / # 切换到系统根目录(最顶层目录)

列出目录内容:ls

ls(List)用于列出指定目录下的文件 / 目录,默认列出当前目录,搭配参数可显示权限、大小、隐藏文件等详细信息。

  • 基础用法:ls [参数] [目标目录]

  • 常用示例:

    1
    2
    3
    4
    5
    6
    7
    ls  # 列出当前目录的文件/目录(仅名称)
    ls /usr/bin # 列出/usr/bin目录下的内容
    ls -l # 长格式显示(包含权限、所有者、大小、修改时间,简称ll)
    ls -a # 显示所有文件(包含隐藏文件,以.开头的文件)
    ls -lh # 人性化显示文件大小(如100M、2G,替代字节数)
    ls -lt # 按修改时间排序(最新的在前)
    ls /dir1 /dir2 # 叠加目录:同时列出dir1和dir2的内容

清屏:clear

清空终端当前显示的内容,仅隐藏历史输出(并非删除),快捷键Ctrl+L等价于clear,适合终端内容过多时整理界面。

  • 基础用法:clear

  • 常用示例:

    1
    2
    clear  # 清空终端界面
    # 快捷键:Ctrl+L(无需输入命令,更快捷)

查看 / 设置系统时间:date

显示或修改系统当前时间,设置时间需 root 权限,常用于时间同步、日志排查时的时间校准。

  • 基础用法:date [参数] [时间格式/设置值]

  • 常用示例:

    1
    2
    3
    4
    5
    6
    date  # 显示当前系统时间(如 Thu Dec 18 10:00:00 CST 2025)
    date +"%Y-%m-%d %H:%M:%S" # 自定义格式显示(如 2025-12-18 10:05:30)
    date -s "2025-12-18 10:08:00" # root权限设置系统时间(普通用户:sudo date -s "...")
    date -s "2025/12/18 10:08:00" # 另一种日期格式,效果同上
    # 补充:同步硬件时间(避免重启后时间还原)
    hwclock -w # 将系统时间写入硬件时钟(root权限)

终止进程 / 放弃输入:Ctrl+C

终端快捷键,核心作用有两个:① 放弃当前正在输入的命令内容;② 终止前台运行的进程(如正在执行的脚本、curl 请求、ping 命令等)。

  • 基础用法:输入过程中 / 进程运行时按 Ctrl+C

  • 常用示例:

    1
    2
    3
    4
    5
    6
    7
    # 场景1:放弃输入(输入一半不想执行)
    [root@localhost ~]# ls /usr/xxx # 输入到一半,按Ctrl+C直接清空输入行
    [root@localhost ~]# # 回到空白输入行

    # 场景2:终止前台进程(比如持续ping百度)
    ping www.baidu.com # 执行后会持续输出,按Ctrl+C终止
    ^C # 终端显示^C,进程停止,回到输入行

查找大文件 / 磁盘空间分析:du /find

du(Disk Usage)用于统计目录 / 文件的磁盘占用,find用于精准查找指定大小的文件,两者结合可快速定位磁盘占用过大的文件。

  • 基础用法:

    • du [参数] 目录:统计目录占用
    • find 路径 -type f -size 大小条件:查找指定大小文件
  • 常用示例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # 1. 统计当前目录下一级目录的磁盘占用(按大小降序)
    du -h --max-depth=1 | sort -hr
    # -h:人性化显示大小(K/M/G);--max-depth=1:仅显示一级目录;sort -hr:按大小降序排序

    # 2. 查找当前目录下大于100M的所有文件(显示详细信息)
    find . -type f -size +100M -exec ls -lh {} \;
    # .:当前目录;-type f:仅查找文件(排除目录);-size +100M:大于100M;-exec:执行后续ls命令

    # 3. 统计指定目录总占用(如/var/log)
    du -sh /var/log # -s:汇总总大小;-h:人性化显示

命令行计算器:bc

bc是交互式算术计算器,支持整数 / 小数运算、逻辑运算,无需图形界面即可完成简单 / 复杂计算,也可非交互式执行计算。

  • 基础用法:bc(交互式) / echo "计算式" | bc(非交互式)

  • 常用示例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # 场景1:交互式计算(输入bc进入计算器,输入算式回车计算,quit退出)
    bc
    10 + 20 # 输入后回车,输出30
    100 / 3 # 整数除法,输出33
    scale=2; 100 / 3 # 设置小数位数为2,输出33.33
    quit # 退出计算器

    # 场景2:非交互式计算(直接输出结果)
    echo "5 * 8 + 20" | bc # 输出60
    echo "scale=3; (20 - 5) * 2 / 7" | bc # 输出4.285

开放端口(firewalld):firewall-cmd

firewall-cmd是 CentOS7+/RHEL7 + 默认的防火墙管理命令(firewalld),用于配置端口放行、查看防火墙状态,Ubuntu 系统需用ufw(补充在示例中)。

  • 基础用法:firewall-cmd [参数] [端口/协议]

  • 常用示例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    # 1. 放行80端口(TCP),永久生效(--permanent)
    sudo firewall-cmd --zone=public --add-port=80/tcp --permanent

    # 2. 重新加载防火墙配置(使永久规则生效)
    sudo firewall-cmd --reload

    # 3. 查看已开放的所有端口
    sudo firewall-cmd --list-ports

    # 4. 补充:删除已开放的端口(如删除80端口)
    sudo firewall-cmd --zone=public --remove-port=80/tcp --permanent
    sudo firewall-cmd --reload

    # 5. 查看防火墙状态
    sudo firewall-cmd --state # 输出running(运行中)/not running(未运行)

    # 6. Ubuntu系统(ufw防火墙)开放端口示例
    sudo ufw allow 80/tcp # 放行80端口
    sudo ufw reload # 重载配置
    sudo ufw status # 查看开放端口

远程连接:SSH

SSH(Secure Shell)是加密的远程登录协议,用于安全访问 Linux 服务器(替代明文传输的 Telnet),默认端口 22,是远程管理 Linux 的核心方式。

  • 基础用法:ssh [参数] 用户名@目标IP/主机名

  • 常用示例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    # 1. 基础连接(默认端口22,需输入密码)
    ssh root@192.168.1.100

    # 2. 指定端口连接(服务器SSH端口非22时,如端口2222)
    ssh -p 2222 root@192.168.1.100

    # 3. 免密登录配置(无需输入密码,推荐)
    # 第一步:本地生成密钥对(一路回车即可,无需设置密码)
    ssh-keygen -t rsa
    # 第二步:将公钥复制到远程服务器(需输入一次服务器密码)
    ssh-copy-id root@192.168.1.100
    # 配置完成后,直接ssh root@192.168.1.100即可免密登录

    # 4. 断开SSH连接
    exit # 或按Ctrl+D

    # 5. 后台保持SSH连接(避免超时断开,临时生效)
    ssh -o ServerAliveInterval=60 root@192.168.1.100
    # 永久生效:编辑~/.ssh/config,添加以下内容
    # Host *
    # ServerAliveInterval 60

查看内核日志:dmesg

用于查看 Linux 内核环形缓冲区的日志信息,包含系统启动时的硬件检测、驱动加载、内核报错 / 警告等内容,是排查硬件、驱动、内核相关问题的核心命令。

  • 基础用法:dmesg

  • 常用示例:

    1
    2
    3
    4
    5
    dmesg  # 输出所有内核日志
    dmesg | grep -i error # 筛选包含"error"的内核错误日志(忽略大小写)
    dmesg -T # 以人类可读的时间格式显示日志(默认是启动后的时间戳)
    dmesg | head -20 # 仅查看前20行内核日志
    dmesg | tail -10 # 仅查看最后10行(最新的内核日志)

加载脚本配置:source

在当前 Shell 会话中执行指定脚本,等价于.(点号),区别于直接执行脚本(会新建子 Shell),执行后脚本中的环境变量、别名等会立即生效。

  • 基础用法:source 脚本路径. 脚本路径

  • 常用示例:

    1
    2
    3
    4
    5
    source ~/.bashrc  # 重新加载bash配置文件,使配置修改立即生效
    . /etc/profile # 等价于source,加载系统全局环境配置
    # 示例:修改~/.bashrc后生效(添加别名)
    echo 'alias ll="ls -lh"' >> ~/.bashrc
    source ~/.bashrc # 执行后ll命令即可使用

查找命令路径:which

查找指定命令的可执行文件绝对路径,仅检索$PATH环境变量中配置的目录,用于确认命令是否安装、以及当前执行的是哪个版本。

  • 基础用法:which 命令名

  • 常用示例:

    1
    2
    3
    4
    which python  # 查找python命令的可执行路径(如/usr/bin/python3)
    which ls # 查找ls命令路径(通常为/bin/ls)
    which nginx # 若未安装则无输出,安装则显示nginx可执行文件路径
    which -a java # 列出所有名为java的可执行文件路径(多个版本时)

网络数据传输:curl

命令行网络工具,支持 HTTP/HTTPS/FTP 等协议,可用于测试接口、下载文件、模拟 HTTP 请求,无需图形界面即可完成网络交互。

  • 基础用法:curl [参数] URL

  • 常用示例:

    1
    2
    3
    4
    5
    curl https://www.baidu.com  # 访问百度并输出页面内容
    curl -o baidu.html https://www.baidu.com # 下载页面内容保存为baidu.html
    curl -X POST -d "username=test&pwd=123" https://api.example.com/login # 发送POST请求并携带参数
    curl -I https://www.baidu.com # 仅获取HTTP响应头(查看状态码、服务器信息等)
    curl -s https://www.baidu.com # 静默模式(不输出进度条、错误信息)

端口测试 / 远程登录:telnet

基于 TCP 协议的工具,主要用于测试目标主机的端口是否开放,也可用于简单的远程登录(需先安装 telnet)。

  • 基础用法:telnet 目标IP 端口号

  • 常用示例:

    1
    2
    3
    4
    5
    6
    7
    8
    # 先安装telnet(CentOS/Ubuntu)
    sudo yum install telnet -y # CentOS/RHEL
    sudo apt install telnet -y # Ubuntu/Debian

    telnet 192.168.1.100 80 # 测试192.168.1.100的80端口是否开放
    telnet www.baidu.com 443 # 测试百度443端口(HTTPS)是否可达
    # 若端口开放:显示"Connected to www.baidu.com";关闭:显示"Connection refused"
    # 退出telnet:按Ctrl+],再输入quit回车

设置环境变量:export

用于定义 / 导出环境变量,使变量在当前 Shell 及子 Shell 中生效;若需永久生效,需将命令写入~/.bashrc//etc/profile等配置文件。

  • 基础用法:export 变量名=值(临时生效)

  • 常用示例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    export PATH=$PATH:/usr/local/mybin  # 新增自定义路径到PATH(临时生效)
    export JAVA_HOME=/usr/lib/jvm/java-11-openjdk # 设置Java环境变量
    export PATH=$JAVA_HOME/bin:$PATH # 将Java命令加入PATH(可直接执行java -version)

    # 永久生效(追加到bash配置文件):
    echo 'export JAVA_HOME=/usr/lib/jvm/java-11-openjdk' >> ~/.bashrc
    echo 'export PATH=$JAVA_HOME/bin:$PATH' >> ~/.bashrc
    source ~/.bashrc # 重新加载配置使永久变量生效

    # 查看已定义的环境变量
    echo $JAVA_HOME # 输出Java环境变量路径
    env | grep PATH # 筛选查看PATH变量

创建目录:mkdir

mkdir(Make Directory)用于创建新目录,支持递归创建多级目录,是文件管理基础命令。

  • 基础用法:mkdir [参数] 目录名

  • 常用示例:

    1
    2
    3
    4
    mkdir test  # 在当前目录创建test目录
    mkdir /usr/local/test # 绝对路径创建test目录
    mkdir -p a/b/c # 递归创建多级目录(a目录下的b,b下的c)
    mkdir -m 777 public # 创建目录并直接设置权限(777为所有用户可读可写可执行)

删除文件 / 目录:rm

rm(Remove)用于删除文件或目录,-r递归删除目录,-f强制删除(无提示),使用时需谨慎(避免误删系统文件)。

  • 基础用法:rm [参数] 文件/目录

  • 常用示例:

    1
    2
    3
    4
    rm test.txt  # 删除当前目录下的test.txt文件(会提示确认,按y回车)
    rm -f test.txt # 强制删除test.txt(无提示)
    rm -r testdir # 递归删除testdir目录及其中所有内容(需确认)
    rm -rf testdir # 强制递归删除目录(无提示,高危!避免执行rm -rf /)

复制文件 / 目录:cp

cp(Copy)用于复制文件或目录,-r递归复制目录,是数据备份常用命令。

  • 基础用法:cp [参数] 源文件/目录 目标路径

  • 常用示例:

    1
    2
    3
    4
    cp test.txt /tmp/  # 复制test.txt到/tmp目录下
    cp -r testdir /tmp/ # 递归复制testdir目录到/tmp下
    cp -p test.txt /tmp/ # 复制文件并保留原文件的权限、修改时间
    cp test.txt /tmp/newtest.txt # 复制并改名(目标文件名为newtest.txt)

移动 / 重命名文件:mv

mv(Move)用于移动文件 / 目录,也可用于重命名(同一目录下移动 = 重命名),移动后原路径文件消失。

  • 基础用法:mv 源文件/目录 目标路径/新名称

  • 常用示例:

    1
    2
    3
    4
    mv test.txt /tmp/  # 将test.txt移动到/tmp目录
    mv test.txt newtest.txt # 同一目录下重命名(test.txt→newtest.txt)
    mv testdir /usr/local/ # 移动目录到/usr/local
    mv -f test.txt /tmp/ # 强制移动(目标存在则覆盖)

查看文件内容:cat

cat(Concatenate)用于查看文件全部内容,适合小文件;大文件推荐用less/more-n可显示行号。

  • 基础用法:cat [参数] 文件名

  • 常用示例:

    1
    2
    3
    4
    cat test.txt  # 查看test.txt全部内容
    cat -n test.txt # 显示内容并标注行号
    cat file1.txt file2.txt > file3.txt # 合并file1和file2内容到file3
    cat /dev/null > test.txt # 清空test.txt内容(保留文件)

文本搜索:grep

grep是文本过滤工具,用于在文件 / 命令输出中查找包含指定关键词的行,支持正则表达式,是排查日志、配置文件的核心命令。

  • 基础用法:grep [参数] 关键词 文件名/命令输出

  • 常用示例:

    1
    2
    3
    4
    5
    6
    grep "error" /var/log/messages  # 在日志文件中查找包含error的行
    grep -i "error" /var/log/messages # 忽略大小写查找
    grep -n "error" /var/log/messages # 显示匹配行的行号
    grep -v "error" /var/log/messages # 反向匹配(排除含error的行)
    # 结合管道过滤命令输出
    ps -ef | grep nginx # 查找nginx相关进程

查看进程:ps

ps(Process Status)用于查看系统中运行的进程,ps -ef/ps aux是最常用的全量进程查看方式。

  • 基础用法:ps [参数]

  • 常用示例:

    1
    2
    3
    4
    5
    ps  # 查看当前Shell的进程
    ps -ef # 全量查看所有进程(UID/PID/PPID/COMMAND等)
    ps aux # 以BSD格式查看所有进程(更详细的CPU/内存占用)
    ps -ef | grep java # 筛选java相关进程
    ps -p 1234 # 仅查看PID为1234的进程

终止进程:kill

kill用于向进程发送信号,默认发送TERM(终止)信号,-9发送强制终止信号(KILL),需知道进程 PID(通过 ps 获取)。

  • 基础用法:kill [参数] 进程PID

  • 常用示例:

    1
    2
    3
    4
    5
    kill 1234  # 向PID为1234的进程发送终止信号(进程可优雅退出)
    kill -9 1234 # 强制终止PID为1234的进程(无法拦截,紧急使用)
    kill -l # 查看所有可用的信号(如1=HUP,9=KILL,15=TERM)
    # 批量终止进程(如终止所有nginx进程)
    ps -ef | grep nginx | grep -v grep | awk '{print $2}' | xargs kill -9

查看磁盘空间:df

df(Disk Free)用于查看文件系统的磁盘空间使用情况,-h人性化显示大小(K/M/G),是排查磁盘满的核心命令。

  • 基础用法:df [参数]

  • 常用示例:

    1
    2
    3
    4
    df  # 查看所有文件系统磁盘占用(默认字节数)
    df -h # 人性化显示(如/dev/sda1 50G 20G 30G 40% /)
    df -i # 查看inode使用情况(inode满也会导致磁盘无法写入)
    df -h / # 仅查看根目录(/)的磁盘占用

修改文件权限:chmod

chmod(Change Mode)用于修改文件 / 目录的访问权限,支持数字权限(777/755 等)和符号权限(u+r、g-w 等),仅文件所有者 /root 可修改。

  • 基础用法:chmod [权限] 文件名/目录

  • 常用示例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # 数字权限(r=4,w=2,x=1;u=所有者,g=组,o=其他)
    chmod 755 test.sh # 所有者可读可写可执行,组/其他可读可执行(脚本常用)
    chmod 644 test.txt # 所有者可读可写,组/其他仅可读(普通文件常用)
    chmod 777 public # 所有用户可读可写可执行(测试用,不推荐生产环境)

    # 符号权限
    chmod u+x test.sh # 给所有者添加执行权限
    chmod g-w test.txt # 移除组的写入权限
    chmod o+r test.txt # 给其他用户添加读取权限
    chmod -R 755 testdir # 递归修改目录及所有子文件权限

切换用户:su /sudo

su(Switch User)用于切换到其他用户(默认切换到 root),sudo用于以 root 权限执行单条命令(无需切换用户),是权限管理核心命令。

  • 基础用法:

    • su [用户名]:切换用户
    • sudo [命令]:以 root 权限执行命令
  • 常用示例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    su root  # 切换到root用户(需输入root密码)
    su - root # 切换到root并加载root的环境变量(推荐)
    su ubuntu # 从root切换到普通用户ubuntu(无需密码)
    exit # 退出切换后的用户,回到原用户

    sudo ls /root # 以root权限查看/root目录(普通用户默认无权限)
    sudo -i # 切换到root Shell(等价于su - root)
    sudo passwd ubuntu # 重置ubuntu用户密码(root权限)
    # 配置sudo免密(需修改/etc/sudoers)
    sudo visudo # 编辑sudo配置,添加:ubuntu ALL=(ALL) NOPASSWD: ALL

FTP 文件传输:ftp

FTP(File Transfer Protocol)是用于服务器与本地之间文件传输的协议,ftp命令是 Linux 下的 FTP 客户端工具,支持文件上传、下载、目录管理等操作,需先安装客户端,默认使用 21 端口。

  • 基础用法:ftp [参数] 服务器IP(登录 FTP 服务器),登录后执行内部命令操作文件
  • 常用示例:

1. 安装 FTP 客户端

1
2
3
4
5
# CentOS/RHEL系统
sudo yum install ftp -y

# Ubuntu/Debian系统
sudo apt install ftp -y

2. 登录 FTP 服务器(3 种方法)

1
2
3
4
5
6
7
8
9
10
11
12
# 方法1:直接登录(需后续输入用户名和密码)
ftp 192.168.126.131
# 按提示输入用户名(Name)和密码(Password),登录成功后进入ftp>交互模式

# 方法2:先启动ftp,再连接服务器
ftp
ftp> open 192.168.126.131 # 连接目标IP
# 输入用户名和密码登录

# 方法3:免交互前置登录(直接指定用户和密码)
ftp -n 192.168.126.131
ftp> user oracle pwdoracle # 格式:user 用户名 密码,直接登录

注意:root 用户权限过大,默认不允许登录 FTP 服务器,需使用普通用户。

3. 目录操作(登录后执行)

1
2
3
4
5
6
7
8
9
# 查看FTP服务器当前工作目录
ftp> pwd

# 切换FTP服务器上的目录(目录名含空格需用双引号包裹)
ftp> cd /freecplus # 切换到服务器的/freecplus目录
ftp> cd "test dir" # 切换含空格的目录

# 切换本地(自己电脑)的工作目录(下载/上传的默认路径)
ftp> lcd /tmp # 本地文件操作默认路径改为/tmp

4. 查看 FTP 服务器文件 / 目录

1
2
3
4
5
6
7
8
# 列出服务器目录/文件的详细信息(类似Linux ls -l)
ftp> ls /freecplus # 查看/freecplus目录详情
ftp> dir /freecplus # 与ls功能一致,用法相同

# 仅列出文件名(不显示详细信息)
ftp> nlist /freecplus/*.h # 列出服务器/freecplus下所有.h文件
# 列出文件名并保存到本地文件
ftp> nlist /freecplus/*.h /tmp/freecplus.list # 结果输出到本地/tmp/freecplus.list

5. 文件传输模式(必设!)

FTP 支持二进制(推荐)和 ASCII 模式,二进制可传输所有文件(压缩包、图片、程序等),ASCII 仅支持文本文件。

1
2
3
4
5
6
7
8
# 查看当前传输模式
ftp> type

# 切换为二进制模式(优先使用,适配所有文件)
ftp> bin

# 切换为ASCII模式(仅传输.txt/.htm等文本文件)
ftp> ascii

6. 下载文件(从 FTP 服务器到本地)

1
2
3
4
5
6
7
# 下载单个文件(get/recv通用)
ftp> get /freecplus/_ftp.h # 下载到本地当前目录(lcd设置的路径)
ftp> recv /freecplus/_ftp.h /tmp/ftp.h # 下载并指定本地保存路径+文件名

# 下载多个文件(支持通配符)
ftp> prompt # 关闭逐一确认提示(批量下载必备)
ftp> mget /freecplus/*.h # 下载服务器/freecplus下所有.h文件到本地

7. 上传文件(从本地到 FTP 服务器)

1
2
3
4
5
6
7
# 上传单个文件(put/send通用)
ftp> put /tmp/test.txt # 上传本地/tmp/test.txt到服务器当前目录
ftp> send /tmp/test.txt /freecplus/newtest.txt # 上传并指定服务器保存路径+文件名

# 上传多个文件(支持通配符)
ftp> prompt # 关闭逐一确认提示
ftp> mput /tmp/*.txt # 上传本地/tmp下所有.txt文件到服务器

8. 其他常用 FTP 命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 重命名服务器上的文件
ftp> rename oldname.txt newname.txt

# 删除服务器上单个文件
ftp> delete test.txt

# 批量删除服务器上的文件
ftp> mdelete *.txt # 删除服务器当前目录下所有.txt文件

# 在服务器上创建目录
ftp> mkdir newdir

# 删除服务器上的目录
ftp> rmdir newdir

# 查看FTP命令帮助(不输入命令名则显示所有帮助)
ftp> help # 显示所有FTP命令帮助
ftp> help get # 查看get命令的具体用法

# 退出FTP连接
ftp> bye # 或quit,断开连接并退出ftp模式

注意事项

  1. 目录名含特殊字符(如空格)需用双引号包裹;
  2. 批量上传 / 下载前执行prompt关闭确认提示,提高效率;
  3. 本地操作权限由执行 ftp 命令的用户决定,服务器操作权限由 FTP 登录用户决定;
  4. 若连接失败,需检查服务器 21 端口是否开放(firewall-cmd --list-ports)。

编译构建:make

make是基于 Makefile 的项目构建工具,自动执行编译、链接等操作,简化多文件项目的编译流程,支持并行编译、清理编译产物等核心操作。

  • 基础用法:make [参数/目标]

  • 常用示例:

    1
    2
    3
    4
    5
    make  # 执行Makefile默认目标(通常编译生成可执行文件)
    make -j4 # 并行编译(4线程,加快速度,j后接CPU核心数)
    make clean # 清理编译生成的目标文件、可执行文件等产物
    make all # 执行Makefile中all目标(编译所有产物)
    make test # 执行Makefile中test目标(运行测试用例)

C/C++ 编译:gcc/g++

gcc是 C 语言编译器,g++是 C++ 编译器,支持编译、链接、生成动态库 / 静态库,可指定编译标准、链接第三方库等参数。

  • 基础用法:

    • gcc [参数] 源文件 -o 可执行文件
    • g++ [参数] 源文件 -o 可执行文件
  • 常用示例:

    1
    2
    3
    4
    5
    6
    7
    8
    # 编译C++程序(链接pthread线程库,指定C++17标准)
    g++ -o test_ol_ThreadPool test_ol_ThreadPool.cpp -lpthread -std=c++17
    # 生成动态共享库(-shared:共享库,-fPIC:位置无关代码,-ldl:链接动态链接库)
    gcc -shared -fPIC -o libfile_hook.so file_hook.c -ldl
    # 查看gcc版本
    gcc -v
    # 编译C程序生成可执行文件
    gcc -o test_unlink test_unlink.c

系统资源监控:top

top是交互式系统监控工具,实时显示进程的 CPU、内存、PID 等资源占用情况,支持排序、筛选、终止进程,是排查资源占用的核心工具。

  • 基础用法:top

  • 常用示例:

    1
    2
    3
    4
    5
    top  # 启动监控界面(默认按CPU占用降序)
    # top界面常用操作:
    # P:按CPU占用率排序 | M:按内存占用率排序
    # 输入PID后按k,再输入9:强制终止指定进程
    # q:退出top界面

文本编辑:vi/vim

vimvi的增强版文本编辑器,支持命令模式、插入模式、末行模式,是 Linux 无图形界面下的核心编辑工具。

  • 基础用法:vim [文件名]

  • 常用示例:

    1
    2
    3
    4
    5
    6
    7
    vim /proc/cpuinfo  # 打开CPU信息文件查看/编辑
    vim /etc/vsftpd.conf # 编辑FTP服务配置文件
    vim file.txt # 打开当前目录的file.txt
    # 核心操作:
    # i:进入插入模式(输入内容) | Esc:退出插入模式
    # :w:保存 | :q:退出 | :wq:保存并退出 | :q!:强制退出(放弃修改)
    # /关键词:搜索关键词 | dd:删除当前行

查看日历:cal

cal用于显示系统日历,默认显示当前月份,可指定年份 / 月份查看特定日历。

  • 基础用法:cal [参数] [年份/月份]

  • 常用示例:

    1
    2
    3
    cal  # 显示当前月份日历
    cal 2025 # 显示2025年全年日历
    cal 12 2025 # 显示2025年12月日历

进程间通信 (IPC) 查看:ipcs

ipcs用于查看 Linux 系统中 IPC 资源(共享内存、信号量、消息队列),是排查 IPC 资源泄漏的核心工具。

  • 基础用法:ipcs [参数]

  • 常用示例:

    1
    2
    3
    4
    ipcs  # 显示所有IPC资源
    ipcs -m # 仅显示共享内存
    ipcs -s # 仅显示信号量
    ipcs -q # 仅显示消息队列

进程间通信 (IPC) 删除:ipcrm

ipcrm用于删除无用的 IPC 资源(共享内存、信号量、消息队列),释放系统资源。

  • 基础用法:ipcrm [资源类型] [资源ID]

  • 常用示例:

    1
    2
    3
    ipcrm -m 0  # 删除ID为0的共享内存(-m=共享内存)
    ipcrm -s 2 # 删除ID为2的信号量(-s=信号量)
    ipcrm -q 5 # 删除ID为5的消息队列(-q=消息队列)

系统调用跟踪:strace

strace用于跟踪进程的系统调用和信号,可指定跟踪特定调用,是排查程序运行异常的核心工具。

  • 基础用法:strace [参数] 命令

  • 常用示例:

    1
    2
    3
    4
    # 跟踪ls命令的stat/open等系统调用
    strace -e trace=stat,statat,lstat,open,openat /usr/bin/ls /tmp/protected.txt 2>&1
    # 详细输出并保存跟踪结果到文件
    strace -v -o ls_trace.log /usr/bin/ls /tmp

包管理(CentOS/RHEL):yum

yum是 RHEL/CentOS 的包管理工具,自动解决依赖,用于安装 / 更新 / 卸载软件包。

  • 基础用法:yum [参数] 操作 软件包名

  • 常用示例:

    1
    2
    3
    4
    yum install -y strace coreutils  # 安装软件(-y:自动确认)
    sudo yum install -y ftp # 普通用户加sudo获取权限
    yum remove -y ftp # 卸载软件
    yum update -y # 更新所有软件包

包管理(Ubuntu/Debian):apt/apt-get

aptapt-get简化版)是 Ubuntu/Debian 的包管理工具,需先更新源再安装软件。

  • 基础用法:

    • apt [参数] 操作 软件包名
    • apt-get [参数] 操作 软件包名
  • 常用示例:

    1
    2
    3
    4
    sudo apt-get update  # 更新软件源(必须先执行)
    sudo apt install ftp # 安装ftp
    sudo apt-get install vsftpd # 安装FTP服务
    sudo apt remove vsftpd # 卸载软件

手册查询:man

man用于查看命令 / 系统调用 / 函数的官方手册,不同章节对应不同类型文档(1 = 用户命令,2 = 系统调用,3 = 库函数)。

  • 基础用法:man [章节] 命令/函数名

  • 常用示例:

    1
    2
    3
    4
    man read  # 查看read默认手册
    man 1 read # 第1章(用户命令)的read手册
    man 2 read # 第2章(系统调用)的read手册
    man memcmp # 查看memcmp库函数手册

环境变量删除:unset

unset用于删除已定义的环境变量,删除后变量立即失效。

  • 基础用法:unset 变量名

  • 常用示例:

    1
    2
    3
    unset LD_PRELOAD  # 删除动态库预加载变量
    unset JAVA_HOME # 删除Java环境变量
    echo $LD_PRELOAD # 验证变量是否删除(无输出则成功)

查看文件尾部:tail

tail用于查看文件尾部内容,默认显示最后 10 行,-f可实时监控日志。

  • 基础用法:tail [参数] 文件名

  • 常用示例:

    1
    2
    3
    tail /home/mysql/Projects/File_Protector/test/prot.txt  # 显示最后10行
    tail -n 20 /tmp/log.txt # 显示最后20行
    tail -f /var/log/vsftpd.log # 实时跟踪日志(Ctrl+C退出)

目录树查看:tree

tree以树形结构显示目录层级,直观展示文件 / 子目录,需先安装。

  • 基础用法:tree [参数] 目录

  • 常用示例:

    1
    2
    3
    4
    5
    sudo yum install tree -y  # CentOS安装
    sudo apt install tree -y # Ubuntu安装
    tree # 查看当前目录树
    tree /home/mysql/Projects/File_Protector # 查看指定目录树
    tree -d /home/mysql/OL # 仅显示目录(不显示文件)

DNS 解析:nslookup/getent

nslookup查询域名 DNS 解析结果,getent hosts查询主机名 / IP 映射(优先 /etc/hosts)。

  • 基础用法:

    • nslookup 域名/IP
    • getent hosts 域名/IP
  • 常用示例:

    1
    2
    3
    nslookup www.baidu.com  # 查询百度DNS解析结果
    getent hosts www.baidu.com # 查询百度主机映射
    getent hosts 1.1.1.1 # 反向查询IP对应的域名

网络连通性测试:ping

ping基于 ICMP 协议测试主机连通性,默认持续发送数据包,Ctrl+C 终止。

  • 基础用法:ping [参数] 目标IP/域名

  • 常用示例:

    1
    2
    3
    ping www.baidu.com  # 测试百度连通性
    ping -c 5 192.168.1.100 # 发送5个数据包后停止
    ping -W 2 192.168.0.157 # 超时2秒,测试内网主机

系统服务管理:systemctl

systemctl是 systemd 系统的服务管理工具,用于启动 / 停止 / 重启系统服务(如 vsftpd)。

  • 基础用法:systemctl [操作] 服务名

  • 常用示例:

    1
    2
    3
    4
    systemctl restart vsftpd  # 重启FTP服务
    systemctl start vsftpd # 启动服务
    systemctl stop vsftpd # 停止服务
    systemctl status vsftpd # 查看服务状态

批量终止进程:pkill

pkill根据进程名批量终止进程,无需手动查找 PID,比kill更便捷。

  • 基础用法:pkill [参数] 进程名

  • 常用示例:

    1
    2
    pkill -9 File_Protector.exe  # 强制终止所有该进程
    pkill -9 test_tcp_server # 终止包含该名称的进程

创建 / 写入文件:echo >/>>

echo输出字符串,结合>(覆盖)/>>(追加)可快速创建 / 修改文件。

  • 基础用法:echo "内容" > 文件名echo "内容" >> 文件名

  • 常用示例:

    1
    2
    3
    echo "我是受保护文件" > /tmp/protected.txt  # 创建并写入(覆盖原有内容)
    echo "新增内容" >> /tmp/protected.txt # 追加内容到文件末尾
    echo "" > /tmp/log.txt # 清空文件内容(保留文件)

递归修改权限:chmod -R

chmod -R递归修改目录及所有子文件 / 子目录的权限,适用于批量设置。

  • 基础用法:chmod -R 权限 目录

  • 常用示例:

    1
    2
    chmod -R 777 .ssh  # 递归设置.ssh目录为777权限
    chmod -R 755 /home/mysql/Projects # 递归设置项目目录为755

查看目录本身权限:ls -ld

ls -ld仅显示目录本身的权限 / 属性,而非目录内文件,常用于检查目录权限。

  • 基础用法:ls -ld 目录名

  • 常用示例:

    1
    2
    ls -ld .ssh  # 查看.ssh目录本身权限
    ls -ld /home/mysql/OL # 查看OL目录权限和所有者

动态库预加载:LD_PRELOAD

LD_PRELOAD是 Linux 环境变量,指定优先加载的动态库,可覆盖系统默认库函数。

  • 基础用法:export LD_PRELOAD=动态库路径

  • 常用示例:

    1
    2
    3
    4
    export LD_PRELOAD=/home/mysql/Projects/File_Protector/4/libfile_protector.so
    # 仅当前命令生效的预加载
    LD_PRELOAD=./libfile_hook.so /usr/bin/cat /tmp/protected.txt
    unset LD_PRELOAD # 取消预加载

查看进程可执行路径:/proc/self/exe

/proc/self/exe是指向当前进程可执行文件的符号链接,用于排查进程来源。

  • 基础用法:ls -l /proc/self/exe

  • 常用示例:

    1
    2
    ls -l /proc/self/exe  # 查看当前Shell进程的可执行路径
    ls -l /proc/1234/exe # 查看PID=1234进程的可执行路径

清空 / 删除目录:rm -rf

rm -rf递归强制删除目录及所有内容(无提示),需谨慎使用。

  • 基础用法:rm -rf 目录名/文件

  • 常用示例:

    1
    2
    rm -rf /home/mysql/OL/build/*  # 清空build目录(保留目录)
    rm -rf /home/mysql/OL/build # 删除整个build目录

网络配置查看:ifconfig(补充 ipconfig)

ipconfig是 Windows 命令,Linux 等价命令是ifconfig(需安装 net-tools),用于查看 / 配置网卡信息。

  • 基础用法:ifconfig

  • 常用示例:

    1
    2
    3
    4
    sudo yum install net-tools -y  # CentOS安装
    sudo apt install net-tools -y # Ubuntu安装
    ifconfig # 查看所有网卡信息
    ifconfig eth0 # 查看eth0网卡信息

查看 CPU 信息:/proc/cpuinfo

/proc/cpuinfo是伪文件,存储 CPU 硬件信息(核心数、型号等),通过cat/vi查看。

  • 基础用法:cat /proc/cpuinfovi /proc/cpuinfo

  • 常用示例:

    1
    2
    3
    cat /proc/cpuinfo  # 查看所有CPU信息
    cat /proc/cpuinfo | grep "model name" | uniq # 筛选CPU型号
    cat /proc/cpuinfo | grep "cpu cores" | uniq # 筛选CPU核心数

文件搜索:find

find是 Linux 中功能强大的文件搜索工具,可根据文件属性(文件名、类型、大小、目录深度等)查找磁盘文件,通过指定对应参数即可实现精准搜索。

- 基础用法:find 搜索路径 [搜索参数] 搜索条件

- 常用示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 1. 按文件名搜索(-name):支持精确和模糊查询,模糊查询建议用引号包裹通配符
find /root -name "*.txt" # 模糊查询:搜索/root目录下后缀为txt的文件
find /root -name "onepiece.txt" # 精确查询:搜索/root目录下名为onepiece.txt的文件

# 2. 按文件类型搜索(-type):常用类型字符:f(普通文件)、d(目录)、l(软链接)
find /root -type l # 搜索/root目录下的软链接文件

# 3. 按文件大小搜索(-size):单位:k(小写)、M(大写)、G(大写);+大于、-小于、无符号则是区间(大小-1, 大小]
find ./ -size +3M # 搜索当前目录下大于3M的文件
find ./ -size -3M # 搜索当前目录下小于等于2M的文件(区间:[0M, 2M])
find ./ -size 3M # 搜索当前目录下2M~3M的文件(区间:(2M, 3M])
find ./ -size +1M -size -4M # 搜索当前目录下1M~3M的文件

# 4. 按目录层级搜索:-maxdepth(最多层级)、-mindepth(最少层级),需配合其他条件使用
sudo find / -maxdepth 5 -name "*.txt" # 从根目录开始,最多搜索5层,查找txt文件
sudo find / -mindepth 5 -name "*.txt" # 从根目录开始,至少从第5层开始,查找txt文件

# 5. 搜索后执行后续操作:exec(直接执行)、ok(交互式执行)、xargs(高效批量执行)
find ./ -maxdepth 2 -name "*.txt" -exec ls -l {} \; # 查找2层内txt文件并查看详细信息
find ./ -maxdepth 1 -name "*.txt" -ok rm -rf {} \; # 交互式删除1层内txt文件(需确认)
find ./ -maxdepth 1 -name "*.cpp" | xargs ls -l # 用xargs批量查看1层内cpp文件详细信息
文件类型 类型的字符描述
普通文件类型 f
目录类型 d
软连接类型 l
字符设备类型 c
块设备类型 b
管道类型 p
本地套接字类型 s

字符串搜索:grep

grep用于查找文件中符合条件的字符串,支持递归搜索、忽略大小写、显示行号等功能,是文本内容检索的常用命令。搜索内容建议用引号包裹,避免特殊字符解析错误。

- 基础用法:grep "搜索内容" 搜索路径/文件 [参数]

- 常用参数:

  • -r:递归搜索目录下的所有文件
  • -i:忽略搜索内容的大小写
  • -n:显示匹配内容所在的行号

- 常用示例:

1
2
3
grep "include" a.c  # 搜索a.c文件中是否包含"include"字符串
grep "INCLUDE" a.c -i # 忽略大小写,搜索a.c文件中的"INCLUDE"(含小写include)
grep "include" ./ -rn # 递归搜索当前目录下所有文件,显示含"include"的文件路径和行号

快速文件搜索:locate

locate是简化版find,通过搜索本地文件数据库实现快速查找(效率远高于find),数据库默认每日自动更新,新增/修改文件后需用updatedb手动更新。

- 基础用法:locate [参数] 搜索关键字

- 常用参数:

  • -i:忽略文件名大小写
  • -n N:仅显示前N条匹配结果
  • -r:基于正则表达式匹配文件名

- 常用示例:

1
2
3
4
5
6
sudo updatedb  # 手动更新文件数据库(普通用户需加sudo)
locate test # 搜索所有以"test"开头的文件
locate /home/robin/test # 精确搜索/home/robin/目录下以"test"开头的文件
locate TEST -i # 忽略大小写,搜索以"TEST"或"test"开头的文件
locate test -n 5 # 搜索以"test"开头的文件,仅显示前5条结果
locate -r "\.cpp$" # 用正则表达式搜索以".cpp"结尾的文件