前言

在Linux系统运维与日常操作中,date、history、scp、rsync等命令是高频实用工具,涵盖时间管理、命令追溯、文件传输、内存监控等核心场景。这些命令操作简洁、功能强大,既能满足基础操作需求,也能通过参数组合实现复杂运维任务,是Linux使用者必备的技能基础。本文将结合实操案例,详细拆解各命令的功能与用法。

一、date

1.1 date功能

date命令核心用于显示当前系统日期时间,支持自定义输出格式,也可手动设置系统时间,是时间管理与脚本编程中常用的基础命令。

1.2 date详细案例

  • 显示当前系统默认格式时间:
    date
    
    输出示例:Wed Aug 14 16:24:51 UTC 2025
  • 自定义时间格式(年-月-日 时:分:秒):
    date "+%Y-%m-%d %H:%M:%S"
    
    输出示例:2025-08-14 16:24:51
  • 显示时间戳(从1970年1月1日至今的秒数):
    date +%s
    
    输出示例:1692017091
  • 手动设置系统日期(需root权限):
    sudo date +%Y-%m-%d -s "2025-08-14"
    
  • 同时设置日期与时间:
    sudo date -s "2025-08-14 16:30:00"
    

二、cal

2.1 cal功能

cal命令用于显示日历,支持查看当前月份、指定年月或全年日历,方便快速查询日期信息。

2.2 cal详细案例

  • 显示当前月份日历:
    cal
    
    输出示例(2025年8月):
    August 2025
    Su Mo Tu We Th Fr Sa
         1  2  3  4  5  6
    7  8  9 10 11 12 13
    14 15 16 17 18 19 20
    21 22 23 24 25 26 27
    28 29 30 31
    
  • 显示指定年月日历(2025年12月):
    cal 12 2025
    
  • 显示全年日历(2025年):
    cal -y 2025
    

三、history(重点)

3.1 history功能

history命令用于查看当前用户的命令执行历史,默认保存1000条记录(可配置),支持过滤查询、重复执行历史命令等操作,是故障排查与操作追溯的重要工具。历史记录默认存储在~/.bash_history文件中。

3.2 history详细案例

  • 查看所有命令历史:
    history
    
  • 查看最近10条命令历史:
    history 10
    
  • 过滤包含指定关键字的历史命令(如查找mkdir相关命令):
    history | grep "mkdir"
    
  • 执行指定编号的历史命令(执行编号为2的命令):
    !2
    
  • 快速重复执行上一条命令(4种方式):
    !!  # 方式1
    !-1  # 方式2
    上方向键  # 方式3
    Ctrl+P  # 方式4
    
  • 显示命令执行时间戳(临时生效):
    export HISTTIMEFORMAT='%F %T'
    history | more
    
    输出示例:1 2025-08-14 16:24:55 ls
  • 永久设置时间戳(写入全局配置文件):
    echo 'export HISTTIMEFORMAT="%F %T"' >> /etc/profile
    source /etc/profile
    
  • 调整历史记录保存条数(永久生效):
    echo 'export HISTSIZE=100000' >> /etc/profile
    echo 'export HISTFILESIZE=100000' >> /etc/profile
    source /etc/profile
    
  • 剔除连续重复的命令:
    export HISTCONTROL=ignoredups
    
  • 清除所有命令历史:
    history -c
    

四、scp

4.1 scp功能

scp(Secure Copy)命令基于SSH协议,用于本地与远程服务器之间安全复制文件/目录,数据传输过程加密,适用于跨主机文件同步场景,支持本地到远程、远程到本地的双向复制。

4.2 scp详细案例

  • 本地文件复制到远程服务器:
    scp /local/path/file.txt user@remote_ip:/remote/path/
    
    示例:将本地/home/test.txt复制到192.168.10.20的/opt/目录
    scp /home/test.txt root@192.168.10.20:/opt/
    
  • 本地目录复制到远程服务器(需加-r参数递归复制):
    scp -r /local/dir/ user@remote_ip:/remote/dir/
    
  • 远程文件复制到本地:
    scp user@remote_ip:/remote/path/file.txt /local/destination/
    
  • 远程目录复制到本地:
    scp -r user@remote_ip:/remote/dir/ /local/dir/
    

五、rsync

5.1 rsync功能

rsync(Remote Sync)是一款高效的增量同步工具,支持本地复制、跨主机同步,能仅传输文件差异部分,减少带宽占用与传输时间。同时保留文件权限、属性等信息,支持压缩传输、排除指定文件等高级功能,适用于备份、镜像服务器等场景。

5.2 rsync详细案例

  • 本地目录同步(保持文件属性,显示详细过程):
    rsync -av /local/source/ /local/destination/
    
  • 本地同步并删除目标目录中多余文件:
    rsync -av --delete /local/source/ /local/destination/
    
  • 远程同步(本地目录同步到远程服务器):
    rsync -avz /local/dir/ user@remote_ip:/remote/dir/
    
    参数说明:-a(归档模式,保留属性)、-v(详细输出)、-z(压缩传输)
  • 远程同步(远程目录同步到本地):
    rsync -avz user@remote_ip:/remote/dir/ /local/dir/
    
  • 同步时排除指定类型文件(如排除所有.log文件):
    rsync -avz --exclude="*.log" /local/dir/ user@remote_ip:/remote/dir/
    
  • 快速删除大量文件(利用空目录替换原理):
    mkdir /tmp/blank
    rsync --delete-before -a -H -v --progress /tmp/blank/ /path/to/delete/
    

六、ssh

6.1 ssh功能

ssh(Secure Shell)命令用于通过加密连接远程登录Linux主机,替代不安全的telnet协议,支持远程执行命令、端口转发等功能,是远程管理Linux服务器的核心工具,默认端口为22。

6.2 ssh详细案例

  • 基本远程登录(默认端口22):
    ssh user@remote_ip
    
    示例:登录192.168.10.20的root用户
    ssh root@192.168.10.20
    
  • 指定端口登录(如远程服务器端口为2222):
    ssh -p 2222 user@remote_ip
    
  • 远程执行单个命令(如查看远程服务器内存使用情况):
    ssh user@remote_ip "free -h"
    
  • 远程执行多条命令(用分号分隔):
    ssh user@remote_ip "cd /opt; ls -l"
    

6.2.1 主机名映射

为避免重复输入IP,可配置主机名映射:

  1. 编辑/etc/hosts文件:
    vim /etc/hosts
    
  2. 添加映射关系(IP与自定义主机名):
    192.168.10.20 server01
    
  3. 保存后即可通过主机名登录:
    ssh root@server01
    

6.3 可能遇到的问题

6.3.1 ssh: connect to host 192.168.10.123 port 2222: Connection refused

解决方案

  1. 检查远程服务器是否开启sshd服务:
    systemctl status sshd
    
    未启动则执行:systemctl start sshd
  2. 验证端口是否正确(查看sshd配置文件):
    vim /etc/ssh/sshd_config
    
    确认Port字段值(默认22)
  3. 检查防火墙是否放行对应端口(以端口2222为例):
    firewall-cmd --permanent --add-port=2222/tcp
    firewall-cmd --reload
    
  4. 确保远程服务器IP可达(ping测试):
    ping 192.168.10.123
    
6.3.2 补充:关闭SELinux方法

SELinux可能影响ssh连接,临时关闭:

setenforce 0

永久关闭(需重启生效):

vim /etc/selinux/config

SELINUX=enforcing改为SELINUX=disabled,保存后重启系统。


七、nohup

7.1 nohup功能

nohup(no hang up)命令用于让进程在后台持续运行,即使关闭终端也不受影响。默认将命令输出重定向到nohup.out文件,避免进程因终端断开而终止。

7.2 nohup详细案例

  • 后台运行脚本(如Python脚本):
    nohup python script.py &
    
  • 后台运行脚本并指定输出文件:
    nohup python script.py > output.log 2>&1 &
    
    说明:2>&1表示将错误输出重定向到标准输出
  • 查看后台进程输出:
    tail -f nohup.out
    
  • 终止后台运行的nohup进程(先查PID,再终止):
    ps -ef | grep "script.py"
    kill -9 进程PID
    

八、reboot

8.1 reboot功能

reboot命令用于重启Linux系统,支持立即重启、延迟重启等操作,需root权限执行,适用于系统更新后生效配置等场景。

8.2 reboot详细案例

  • 立即重启系统:
    sudo reboot
    
  • 延迟5分钟重启:
    sudo reboot +5
    
  • 重启并发送提示信息给所有登录用户:
    sudo reboot "系统将在5分钟后重启,请保存工作!"
    
  • 取消延迟重启:
    sudo shutdown -c
    

九、shutdown

9.1 shutdown功能

shutdown命令用于关闭或重启系统,支持立即操作、延迟操作,可发送提示信息给所有用户,相比reboot功能更灵活,是安全关闭系统的推荐工具。

9.2 shutdown详细案例

  • 立即关闭系统:
    sudo shutdown -h now
    
  • 延迟10分钟关闭系统:
    sudo shutdown -h +10
    
  • 立即重启系统(等同于reboot):
    sudo shutdown -r now
    
  • 定时关闭系统(23:30关闭):
    sudo shutdown -h 23:30
    
  • 发送关闭提示信息:
    sudo shutdown -h +10 "系统将在10分钟后关闭,请及时保存数据!"
    
  • 取消已计划的关机/重启操作:
    sudo shutdown -c
    

十、free命令(重点)

10.1 free命令功能

free命令用于显示系统内存使用状态,包括物理内存(RAM)、交换空间(Swap)、内核缓冲区等信息,支持以人类可读格式输出,是监控系统内存负载的核心工具。

10.2 free基本命令格式

free [选项]

常用选项:

  • -h:人类可读格式(自动适配KB/MB/GB单位)
  • -m:以MB为单位显示
  • -g:以GB为单位显示
  • -t:显示内存总用量(物理内存+交换空间)
  • -s 秒数:周期性刷新显示(如每5秒刷新)
  • -l:显示低内存与高内存详细信息

10.3 free基本用法

  • 人类可读格式显示内存状态:
    free -h
    
  • 以MB为单位显示:
    free -m
    
  • 每5秒刷新一次内存状态(按Ctrl+C终止):
    free -s 5
    
  • 显示内存总用量:
    free -t
    

10.4 free输出字段解释

free -h输出为例:

              total        used        free      shared  buff/cache   available
Mem:           15Gi       4.2Gi       8.1Gi       345Mi       4.1Gi        11Gi
Swap:          8.0Gi         0B       8.0Gi
  • total:总内存容量(物理内存/交换空间)
  • used:已使用内存(包括应用程序、缓存、共享内存等)
  • free:完全空闲的内存
  • shared:多个进程共享的内存空间
  • buff/cache:内核缓冲区(buff)和页缓存(cache)占用的内存,可被系统回收
  • available:系统实际可用内存(空闲内存+可回收缓存)
  • Swap:交换空间(虚拟内存),物理内存不足时会使用磁盘空间

10.5 free典型应用场景

  1. 快速检查系统内存是否充足:通过available字段判断,若数值过低可能导致应用卡顿
  2. 监控交换空间使用:若Swap used持续偏高,说明物理内存不足,需优化应用或增加内存
  3. 分析缓存占用:buff/cache过高是正常现象,系统会自动利用空闲内存加速文件访问
  4. 排查内存泄漏:若used内存持续增长且available不断减少,可能存在内存泄漏问题

10.6 free高级技巧

  • 实时监控内存使用趋势(结合watch命令):
    watch -n 1 free -h
    
  • 自定义输出字段(如仅显示总内存、已用内存、可用内存):
    free -o -h --columns total,used,available
    
  • 将内存使用情况输出到文件(用于后续分析):
    free -h >> /tmp/memory_logs.txt
    

10.7 free总结

free命令是Linux系统内存监控的基础工具,通过其输出可快速掌握内存整体状态。核心关注available(实际可用内存)和Swap used(交换空间使用)两个字段,结合-h选项可简化阅读,适合日常运维快速排查内存问题,也可通过周期性刷新实现长期监控。


总结

本文涵盖了Linux系统中10类常用命令,从时间管理(date、cal)、命令追溯(history)、文件传输(scp、rsync)、远程管理(ssh),到进程后台运行(nohup)、系统启停(reboot、shutdown)、内存监控(free),基本覆盖了日常操作与运维的核心场景。

这些命令的核心优势在于“简洁高效”,通过参数组合可实现复杂需求(如rsync增量备份、history命令追溯、free实时监控)。实际使用中,建议结合场景灵活运用参数,同时注意权限要求(如shutdown、reboot需root权限),避免误操作导致数据丢失或系统异常。

熟练掌握这些命令,能显著提升Linux操作效率,为系统运维、脚本编程、故障排查等工作打下坚实基础。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐