《Linux系统编程之入门基础》【Linux基础 理论+命令】(下)

【Linux基础 理论+命令】(下)目录

往期《Linux系统编程》回顾:

/------------ 入门基础 ------------/
【Linux的前世今生】
【Linux的环境搭建】
【Linux基础 理论+命令】(上)

前言:

hi~小伙伴们大家好啊!(ノ≧∀≦)ノ

今天是阳历10月21号,同时也是阴历九月初一哦!( ̄︶ ̄)↗ 所以说,今天也算是新一月的开启之日呀!✧。٩(ˊᗜˋ)و✧。

古人将秋季分为孟秋、仲秋、季秋三个阶段,而农历九月正处于季秋时节,也被大家称之为"深秋"。(。•ᴗ•。)

说到这儿,必须提一句鼠鼠超爱这个月份!正如诗句所言:"自古逢秋悲寂寥,我言秋日胜春朝。" ٩(◕‿◕)۶
那我们就在这个秋意满满的时刻,继续我们Linux系统编程的学习吧~(ノ´∀`)

今天学习的内容就是【Linux基础 理论+命令】(下)啦!准备好的话,就放下手里的鱼吧~(`⌒´メ)

---------------理论知识---------------

1. 什么是时间戳?

时间戳(Timestamp) :是数字世界中用于精准标记特定时刻的**"时间印记"**

  • 它像一把尺子,为信息事件数据 的时间属性提供了统一的度量标准,方便在不同场景下实现定位记录追溯同步

时间戳的核心是 "标记时间",但为了适应不同场景(比如:人类理解或计算机处理),衍生出了多种形式:

1. Unix 时间戳(计算机友好型)

这是编程和计算机系统中最常用的形式,本质是一个整数,代表从 "时间起点"------1970 年 1 月 1 日 00:00:00 UTC(协调世界时,即格林尼治标准时间) 开始,到目标时刻所经过的秒数(或毫秒数、微秒数)

  • 2024 年 1 月 1 日 00:00:00 UTC 对应的 Unix 时间戳约为1704067200 秒
  • 若精确到毫秒,则在秒数后加三位数字(如:1704067200000)

这种形式的优势在于格式统一、占用空间小、便于计算机存储和计算,无需处理时区、闰年等复杂逻辑,因此广泛用于数据库记录、程序日志、API 接口等场景。


2. 人类可读时间戳(用户友好型)(了解即可)
以人类日常习惯的时间格式呈现,直接包含年月日、时分秒等信息,比如:

  • 国际通用格式:2024-05-20 15:30:45(年 - 月 - 日 时:分: 秒)
  • 中文常用格式:2024年5月20日 下午3点30分45秒
  • 带时区的格式:2024-05-20T15:30:45+08:00(其中+08:00表示东八区,即北京时间)

这种形式直观易懂,常见于文件命名(如:"会议记录_20240520.txt")、新闻发布时间、聊天记录等场景。


3. 媒体文件中的时间戳(内容定位型)(了解即可)

在视频、音频、直播等媒体内容中,时间戳特指内容在文件中的具体位置,通常以 "时:分: 秒" 或 "分:秒" 表示。

  • 视频中 "01:23:45" 表示播放到 1 小时 23 分 45 秒的画面
  • 音频中 "3:15" 表示歌曲播放到 3 分 15 秒的片段

这种时间戳在视频剪辑(如:PR 中标记关键帧)、字幕制作(匹配台词出现的时间)、弹幕定位(对应画面的时刻)、影视剧 "名场面" 分享(如 "第 45 分钟高能")等场景中至关重要,能帮助用户快速定位到目标内容。


小知识:为什么计算机关机后,开机还能准确记录时间呢?

  • 这是因为主板上有一颗纽扣电池(也叫 CMOS 电池 )
  • 当计算机断电关机时,纽扣电池会持续为主板上的实时时钟(RTC)电路供电,让时钟可以不间断地计数

这样一来,即便长时间关机,实时时钟也能维持正常走时,开机后系统就能读取到准确时间啦~


小知识:1970 年 1 月 1 日 00:00:00 UTC ------ 格林尼治标准时间

格林尼治天文台是世界上最具标志性的天文机构之一,位于英国伦敦东南部的格林尼治公园,因确立了 "本初子午线""格林尼治标准时间(GMT)" 而闻名全球,成为连接地理、时间与全球导航的重要坐标。

2. 时间戳有什么用?

1. 数字与时间的转换桥梁

时间戳(像 1725974746 这类 Unix 时间戳 )能精准转换为人类可读的具体时间,把冰冷的数字,变成 "2025 年 X 月 X 日 X 时 X 分 X 秒" ,让计算机记录的时间,能被我们直观理解。


2. 行为追溯的 "时间证人"

当用户(比如:张三)在系统里操作(如:删除动作),系统会生成日志 ,每条日志都会绑定时间戳

通过 用户→日志→时间戳 这条线索,能清晰还原:

  • 谁(张三)在什么精确时间(时间戳对应的时刻)
  • 做了什么操作(删除动作)
  • 操作对象是什么(删除的具体内容 )

无论是排查误删问题、审计操作流程,还是保障系统安全,时间戳都是关键的 "时间证据",让每一步行为都有迹可循~

3. 打包和压缩的本质与价值是什么?

一、"是什么"------ 概念区分

打包核心是文件合并 ,把多个零散文件或文件夹,整合成一个独立的 "打包文件"(比如:Windows 里的 .zip 初始打包、Linux 下的 .tar 文件 )

  • 作用像 "整理抽屉",把零散文件归成一个整体,方便管理,但 本身不改变文件总大小

压缩关键是减少体积 ,通过算法(如:常见的 zip、gzip、7z 算法 ),对文件数据进行 "瘦身" 处理。

  • 原理类似 "把棉花挤成棉片",让文件占用空间变小,压缩后体积通常远小于原文件总和
  • 压缩率取决于文件类型:
    • 文本、代码压缩率高
    • 视频、图片等已压缩过的文件,压缩率低甚至可能变大

二、"为什么"------ 实用价值

打包的意义:防丢失、好管理

  • 防止文件丢失:多个文件打包成一个后,传输、存储时只需要关注这一个文件,避免零散文件因误操作(比如:删错、漏传 )丢失
  • 简化操作流程:分享资料时,对方无需逐个下载文件,打包后 "一键下载/解压" 就能获取全部内容;备份数据时,打包也能让备份任务更简洁

压缩的价值:省空间、快传输

  • 节省存储空间:压缩后体积变小,能在硬盘、网盘里存更多内容,尤其适合备份大量文本、文档类数据
  • 加快网络传送:体积小了,上传、下载的时间就短。发邮件、传网盘、传文件给同事,压缩后能 有效减少网络传输耗时 ,提升效率

虽然打包和压缩有概念区分,但实际操作里, 打包和压缩常被 "绑定使用"

  • 比如我们用软件做 "压缩文件" 时,软件会 先打包(合并文件)、再压缩(减小体积) ,最终生成一个 .zip .rar 这类 "既合并又瘦身" 的文件

  • 所以日常使用中,大家 不用严格区分 "打包" 和 "压缩" 的操作步骤 ,只要选一个压缩工具(如:WinRAR、7-Zip、系统自带的压缩功能 ),就能一步完成 "合并 + 瘦身"

Linux 下 tar 是纯打包,tar + gzip 才是打包 + 压缩


简单总结:

  • 理解概念时,打包是 "合并"、压缩是 "瘦身"
  • 实际用的时候,不用纠结步骤,选压缩工具 "一键操作",就能同时实现 "好管理 + 省空间 + 快传输" 的需求

4. 何为指令集体系结构?

x86 是 Intel、AMD 等芯片长期使用的 指令集体系结构 (指令集是体系结构的核心部分,规定了 CPU 能识别、执行哪些操作命令)

  • x86 32 位(x86):早年主流,能处理的内存地址空间有限(最大支持约 4GB 内存寻址),软件、系统也要适配 32 位体系结构开发
  • x86 64 位(x64) :是 32 位的扩展,支持更大内存(理论上能寻址上百 GB),能执行更复杂的 64 位指令,让软件(尤其是大型游戏、专业软件)运行更高效

它们的区别本质是:体系结构在 "指令集内存管理能力" 上的迭代 ,直接影响计算机能装多少内存、能跑多复杂的程序

5. shell命令的运行原理是什么?

严格来说,Linux 所指的操作系统核心是 "内核(kernel)" ,但普通用户无法直接与 kernel 交互。

  • 这是因为 kernel 负责管理硬件资源、执行最底层的操作
  • 直接操作它风险极高,且需要专业的、极复杂的指令

所以 :我们得借助 kernel 的 "外壳" 程序 ------ Shell ,来与 kernel 沟通。


从技术角度看,Shell 最简洁的定义是 命令行解释器(command Interpreter) ,主要承担两大任务:

  • 把用户输入的命令,"翻译" 成 kernel 能理解的指令,交给 kernel 处理
  • 等 kernel 处理完,再把结果 "翻译" 回人类能看懂的信息,反馈给用户

对比 Windows 系统的图形界面(GUI),我们操作 Windows 时,也不是直接操作内核,而是通过图形接口(比如:双击 D 盘盘符进入 D 盘、点击图标运行程序)


Shell 对 Linux 的作用,和 Windows 图形界面类似:解析用户指令,传达给 Linux 内核;内核运行出结果后,再通过 Shell 反馈给用户 ,让我们不用懂内核复杂逻辑,就能轻松用 Linux 干活。

为了方便理解,举个趣味类比:

  • 假设你是个腼腆的程序员,看上了村里漂亮的翠花(把翠花类比成 操作系统内核 ),但不好意思直接表白

  • 这时候,Shell 就像 "媒婆"(比如:常用的 bash Shell ,就像媒婆中的 "王婆" , 当然还有"张婆------Z Shell","李婆------C Shell"),你把想说的话(用户命令)告诉媒婆,媒婆再转述给翠花;翠花的回应(内核处理结果),也由媒婆翻译回你能懂的意思

通过 Shell ,你不用直面内核的 "高冷"(你不用和翠花说话),就能让系统干活~(就能向翠花表白)

---------------基础命令---------------

------- 系统信息管理 -------

一、date

date

核心作用显示或设置系统的日期和时间


基本用法

  • date:不带任何参数时,显示当前系统的日期和时间(默认格式)

    bash 复制代码
    date  # 示例输出:Thu Aug  7 15:30:45 CST 2025
  • date +[格式符] :按指定格式显示日期时间(格式符以 % 开头)

    bash 复制代码
    date +"%Y-%m-%d %H:%M:%S"  # 按 "年-月-日 时:分:秒" 格式显示
  • date -s "[日期时间]":设置系统日期和时间(需要 root 权限)

    bash 复制代码
    sudo date -s "2025-08-07 16:00:00"  # 设置系统时间为2025年8月7日16:00:00

常用格式符

  • %Y:4 位年份(如:2025)
  • %m:2 位月份(01-12)
  • %d:2 位日期(01-31)
  • %H:24 小时制小时(00-23)
  • %M:分钟(00-59)
  • %S:秒(00-59)
  • %a:缩写星期(如:Thu)
  • %A:完整星期(如:Thursday)
  • %b:缩写月份(如:Aug)
  • %B:完整月份(如:August)
  • %F :等价于 %Y-%m-%d(标准日期格式)
  • %T :等价于 %H:%M:%S(标准时间格式)

使用示例

bash 复制代码
date +"%F"                # 显示当前日期(如 2025-08-07)
date +"%T"                # 显示当前时间(如 15:35:22)
date +"%Y年%m月%d日 %H:%M" # 显示中文格式日期时间(如 2025年08月07日 15:36)

date -d "2 days ago"      # 显示两天前的日期时间
date -d "next Monday"     # 显示下周一的日期

sudo date -s "20:30"      # 仅修改系统时间(保持日期不变)

注意事项

  • 非 root 用户只能使用 date 查看时间,无法修改系统时间
  • 修改系统时间后,建议同步硬件时钟(可使用 hwclock -w 命令,需 root 权限)
  • -d 选项可用于显示相对时间(如:过去 / 未来的日期),非常实用

二、cal

cal - 英文全称为 "calendar"

核心作用显示当前或指定年份、月份的日历,以直观的表格形式展示日期分布


基本用法

  • cal:不带任何参数时,显示当前月份的日历(当前日期会高亮显示)

    bash 复制代码
    cal  # 显示当前月的日历
  • cal [月份] [年份]:显示指定月份和年份的日历(月份在前,年份在后,年份需为 4 位数字)

    bash 复制代码
    cal 10 2025  # 显示2025年10月的日历
    cal 2 2024   # 显示2024年2月的日历(2024是闰年,2月有29天)
  • cal [年份]:显示指定年份的全年日历(12 个月)

    bash 复制代码
    cal 2025  # 显示2025年全年的日历

常用选项

  • -3:显示上一个月、当前月和下一个月的日历(共 3 个月)
  • -y:显示当前年份的全年日历(与cal [当前年份]效果相同)
  • -j:显示一年中的第几天(儒略日,1-365/366)

使用示例

bash 复制代码
cal 12 2023    # 查看2023年12月的日历
cal -3 5 2024  # 显示2024年4月、5月、6月的日历
cal -j 2024    # 以儒略日显示2024年全年日历

注意事项

  • 月份参数需在 1-12 之间,年份参数通常需为 1-9999 之间的有效年份
  • 部分系统的 cal 命令支持更多功能(如:-A n 显示当前月及之后 n 个月,-B n 显示当前月及之前 n 个月),可通过 man cal 查看详细说明
  • 日历中当前日期会以高亮或反色显示,便于快速定位

三、top

top - 英文全称为 "table of processes"

核心作用实时动态监控系统进程和系统资源(CPU、内存、负载等)的使用情况,默认按 CPU 使用率排序,是系统性能分析的常用工具


基本用法

  • top :直接运行,进入实时监控界面,按 q 退出

    bash 复制代码
    top  # 启动实时进程监控,界面会动态刷新(默认3秒一次)
  • top [选项]:带选项运行,自定义监控方式

    bash 复制代码
    top -n 3  # 只刷新3次后自动退出
    top -d 5  # 每5秒刷新一次

界面核心信息(顶部系统状态区):

  • 第一行:系统时间、运行时间、当前登录用户数、系统负载(1 分钟、5 分钟、15 分钟平均负载)
  • 第二行:进程总数(total)、运行中(running)、休眠(sleeping)、停止(stopped)、僵尸进程(zombie)数量
  • 第三行:CPU 使用率(us:用户进程;sy:系统进程;ni:优先级进程;id:空闲;wa:IO 等待;hi:硬件中断;si:软件中断)
  • 第四行:物理内存使用(total:总内存;free:空闲;used:已用;buff/cache:缓存和缓冲区)
  • 第五行:交换分区使用(total:总交换空间;free:空闲;used:已用;avail Mem:可用内存)

进程列表字段(主要列):

  • PID:进程 ID
  • USER:进程所有者
  • PR/NI:进程优先级(PR:系统动态优先级;NI:nice 值,-20~19,值越小优先级越高)
  • VIRT/RES/SHR:进程内存使用(VIRT:虚拟内存;RES:物理内存;SHR:共享内存)
  • S:进程状态(R:运行;S:休眠;Z:僵尸;T:停止等)
  • %CPU/%MEM:进程占用 CPU 和内存的百分比
  • TIME+:进程累计 CPU 使用时间
  • COMMAND:进程命令名称

常用交互命令(在 top 界面中输入):

  • P:按 CPU 使用率排序(默认)
  • M:按内存使用率排序
  • N:按 PID 排序
  • T:按累计 CPU 时间排序
  • k:杀死指定 PID 的进程(需输入 PID 并确认信号,默认 15:正常终止,9:强制终止)
  • u:过滤显示指定用户的进程(输入用户名)
  • f:自定义显示的字段(按上下键选择,按空格键切换显示状态)
  • h:查看帮助信息
  • q:退出 top

使用示例

bash 复制代码
top -d 2  # 每2秒刷新一次
top -n 5  # 刷新5次后退出

top -p 1234  # 只监控PID为1234的进程
top -u root  # 只显示root用户的进程

注意事项

  • 系统负载值(第一行)若长期高于 CPU 核心数,可能表示系统压力过大
  • %CPU 列中单个进程使用率超过 100%(多核 CPU)是正常的,代表占用多个核心
  • 僵尸进程(Z 状态)若过多,可能是父进程未正确回收子进程资源,需排查对应父进程
  • top 类似的工具还有 htop(更友好的交互界面,需额外安装)

四、uname

uname - 英文全称为 "Unix name"

核心作用显示当前操作系统的相关信息,包括内核名称、版本、主机名、硬件架构等,常用于识别系统环境


基本用法

  • uname:不带选项时,默认只显示内核名称

    bash 复制代码
    uname  # 示例输出:Linux(表示内核为Linux)
  • uname [选项]:通过选项指定要显示的系统信息

    bash 复制代码
    uname -a  # 显示所有系统信息

常用选项

  • -a:显示所有可用的系统信息(完整信息,最常用)
  • -s:显示内核名称(与默认无选项效果相同)
  • -n:显示网络节点主机名(即系统主机名)
  • -r:显示内核发行版本号
  • -v:显示内核版本(编译信息等)
  • -m:显示硬件架构(如:x86_64、arm64 等)
  • -p:显示处理器类型(部分系统可能显示 "unknown")
  • -i:显示硬件平台(部分系统可能显示 "unknown")
  • -o:显示操作系统名称

使用示例

bash 复制代码
uname -a  # 显示所有信息,示例输出:
# Linux myserver 5.15.0-78-generic #85-Ubuntu SMP Fri Jul 15 19:07:51 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux

uname -r  # 显示内核版本,示例输出:5.15.0-78-generic
uname -n  # 显示主机名,示例输出:myserver
uname -m  # 显示硬件架构,示例输出:x86_64(表示64位x86架构)
uname -o  # 显示操作系统,示例输出:GNU/Linux

注意事项

  • uname 主要显示内核和硬件相关信息,若需查看更详细的操作系统发行版信息(如:Ubuntu 版本、CentOS 版本),需结合其他命令(如:lsb_release -acat /etc/os-release
  • 不同系统(如:Linux、macOS、FreeBSD)的 uname 输出格式基本一致,但部分选项(如:-p-i)的结果可能不同
  • 在脚本中,uname -m 常用于判断系统架构,以选择对应版本的软件包
  • 内核版本号(-r)通常包含内核主版本、次版本、补丁级别及发行商定制信息

五、shutdown

shutdown

核心作用安全关闭、重启或定时关闭系统,支持立即操作或设置延迟时间,是管理系统电源状态的标准命令


基本用法

  • shutdown [选项] [时间] [消息]:按指定时间和方式操作系统,可选消息会发送给所有登录用户

    bash 复制代码
    shutdown -h now  # 立即关闭系统

常用选项

  • -h:关闭系统(halt),等同于系统断电
  • -r:重启系统(reboot)
  • -c:取消已计划的 shutdown 操作
  • -k:仅发送关机消息,不实际执行关机(模拟操作)

时间参数格式

  • now:立即执行(等同于时间 0
  • hh:mm:指定 24 小时制时间(如:23:30 表示晚上 11 点 30 分)
  • +m:延迟 m 分钟后执行(如:+10 表示 10 分钟后)

使用示例

bash 复制代码
shutdown -h now              # 立即关闭系统
shutdown -r +5               # 5分钟后重启系统
shutdown -h 22:00            # 晚上10点关闭系统

shutdown -k +15 "系统将在15分钟后维护,请注意保存工作"  # 发送提醒消息,不实际关机
shutdown -c                  # 取消已计划的关机/重启任务

注意事项

  • shutdown 通常需要管理员权限(root 或 sudo)才能执行
  • 执行 shutdown 后,系统会给登录用户发送通知,避免数据丢失
  • 部分系统中,halt(关机)、reboot(重启)命令是 shutdown 的简化版本
  • 远程服务器使用 shutdown 时需谨慎,避免意外断开连接导致无法重新登录
  • 若需强制立即关机(不推荐,可能丢失数据),可使用 poweroff 命令

------- 压缩归档工具 -------

一、zip/unzip

zip/unzip

核心作用zip 用于创建 ZIP 格式的压缩包,unzip 用于解压缩 ZIP 格式的文件,是跨平台(Linux、Windows、macOS)常用的压缩工具


zip 基本用法

  • zip [压缩包名称] [文件/目录]:将指定文件或目录压缩为 ZIP 包

    bash 复制代码
    zip docs.zip report.txt  # 将 report.txt 压缩为 docs.zip
  • zip -r [压缩包名称] [目录]:递归压缩目录(包含子目录和所有文件)

    bash 复制代码
    zip -r images.zip ./photos/  # 递归压缩 photos 目录为 images.zip

zip 常用选项

  • -r:递归压缩目录(必须用于目录压缩)
  • -q:安静模式,不显示压缩过程信息
  • -9:最高压缩比(默认是 6,数值 1-9,越大压缩率越高但速度越慢)
  • -0:仅打包不压缩(快速创建归档)
  • -u:更新压缩包,添加新文件或替换已存在的旧文件
  • -d:从压缩包中删除指定文件

unzip 基本用法

  • unzip [压缩包名称]:将 ZIP 包解压缩到当前目录

    bash 复制代码
    unzip docs.zip  # 解压缩 docs.zip 到当前目录
  • unzip [压缩包名称] -d [目标目录]:将 ZIP 包解压缩到指定目录

    bash 复制代码
    unzip images.zip -d ./pics/  # 解压缩 images.zip 到 pics 目录

unzip 常用选项

  • -d:指定解压缩的目标目录(目录不存在会自动创建)
  • -l:列出压缩包内的文件列表,不实际解压缩
  • -q:安静模式,不显示解压缩过程信息
  • -o:覆盖已存在的文件,不提示确认
  • -n:不覆盖已存在的文件,跳过相同名称的文件
  • -j:解压缩时忽略目录结构,所有文件直接提取到目标目录

使用示例

bash 复制代码
# zip 示例
zip -r -9 backup.zip ./docs/ ./data/ # 高压缩比打包多个目录
zip -q update.zip newfile.txt        # 安静模式压缩单个文件
zip -u docs.zip addendum.txt         # 向 docs.zip 添加新文件
zip -d temp.zip old.txt              # 从 temp.zip 中删除 old.txt

# unzip 示例
unzip -l archive.zip                 # 查看 archive.zip 内的文件列表
unzip -o bigfile.zip -d ./extract/   # 强制解压缩到 extract 目录,覆盖现有文件
unzip -j images.zip -d ./all_pics/   # 忽略目录结构,提取所有图片到 all_pics

注意事项

  • 若系统未安装 zip/unzip,需先安装(如:sudo apt install zip unzipsudo yum install zip unzip
  • ZIP 格式默认不保留 Linux 文件的权限信息,若需保留权限,可使用 zip -y 选项(保留符号链接)或改用 tar 命令
  • 压缩包含中文名称的文件时,可能出现乱码,部分系统需添加 -O UTF-8 选项(如:unzip -O UTF-8 中文压缩包.zip
  • 大文件压缩可能耗时较长,可结合 -q 选项减少输出信息

二、tar

tar - 英文全称为 "tape archive"

核心作用将多个文件或目录打包成单一归档文件(tar 包),并支持结合不同压缩算法(如:gzip、bzip2)进行压缩,是 Linux 系统中最常用的归档与备份工具


基本用法

  • tar [选项] [归档文件名] [文件/目录]:对指定文件或目录进行打包、压缩或解压操作

    bash 复制代码
    tar -cvf archive.tar docs/  # 将 docs 目录打包为 archive.tar

核心选项

  • 功能选项(必选其一):
    • -c:创建新的归档文件(打包/压缩)
    • -x:从归档文件中提取内容(解包/解压)
    • -t:列出归档文件中的内容(查看)
  • 压缩选项(可选,指定压缩算法):
    • -z:使用 gzip 压缩/解压(对应 .tar.gz.tgz 格式)
    • -j:使用 bzip2 压缩/解压(对应 .tar.bz2 格式)
    • -J:使用 xz 压缩/解压(对应 .tar.xz 格式,压缩率最高)
  • 辅助选项
    • -f [文件名]:指定归档文件名称(必须紧跟文件名,通常放选项末尾)
    • -v:显示操作过程(verbose 模式,列出处理的文件)
    • -C [目录]:指定 解压/打包 的目标目录
    • --exclude [模式]:排除符合模式的文件或目录

操作示例

bash 复制代码
# 1. 打包(仅归档,不压缩)
tar -cvf data.tar file1.txt dir1/  # 将文件和目录打包为 data.tar

# 2. 打包并压缩
tar -zcvf backup.tar.gz docs/     # gzip压缩(最常用)
tar -jcvf logs.tar.bz2 /var/log/  # bzip2压缩
tar -Jcvf images.tar.xz pics/     # xz压缩(高压缩率)

# 3. 查看归档内容(不解压)
tar -ztvf backup.tar.gz  # 查看 gzip 压缩包内容
tar -jtvf logs.tar.bz2   # 查看 bzip2 压缩包内容

# 4. 解压缩
tar -zxvf backup.tar.gz                 # 解压到当前目录
tar -Jxvf images.tar.xz -C ./pictures/  # 解压到指定目录

# 5. 排除文件打包
tar -zcvf src.tar.gz --exclude "*.log" src/  # 打包时排除 .log 文件

注意事项

  • 选项顺序-f 必须紧跟归档文件名,推荐格式为 tar [功能选项][压缩选项]f 文件名(如:tar zcvf ...
  • 压缩率对比xz > bzip2 > gzip,但压缩速度相反(gzip 最快)
  • 保留权限:tar 会保留文件的权限、所有者等信息,适合系统备份
  • 大文件处理 :支持流式操作,可通过管道实现远程备份(如:tar zcvf - docs/ | ssh user@host "cat > backup.tar.gz"
  • 错误提示:解压时若提示 "Permission denied",需检查目标目录权限或使用 sudo

------- 其他辅助工具 -------

一、man

man - 英文全称为 "manual"

核心的作用查看 Linux 系统中命令、配置文件、系统调用等的帮助手册,获取详细的使用说明


基本的用法

  • man [命令/配置文件/函数名]:查看指定对象的帮助手册

    bash 复制代码
    man ls       # 查看 ls 命令的帮助手册
    man passwd   # 查看 passwd 命令(或其配置文件)的手册
    man 3 printf # 查看 C 语言中 printf 函数的手册(指定章节)

手册的章节:(常用)

手册通常分为 8 个章节,用于区分不同类型的内容,可通过数字指定:

  • 1用户命令(如:lscd 等)
  • 2系统调用(内核提供的函数,如:openread
  • 3库函数(编程语言的函数,如:C 库的 printf
  • 5配置文件格式(如:/etc/passwd/etc/fstab
  • 8系统管理命令(如:serviceuseradd,通常需要 root 权限)

例如

  • man 5 passwd 查看 /etc/passwd 配置文件的格式说明
  • man 1 passwd 查看 passwd 命令的用法

手册内操作:(常用)

  • /关键词 搜索(如:/option 查找包含 option 的内容),按 n 跳至下一个结果,N 跳至上一个
  • 空格 翻页,b 向前翻页,f 向后翻页
  • q 退出手册
  • h 查看更多操作帮助

使用的示例

bash 复制代码
man rm        # 查看 rm 命令的完整帮助

二、find

find

核心作用在指定目录下递归查找符合条件的文件或目录,支持按名称、类型、大小、修改时间等多种条件筛选


基本用法

  • find [查找路径] [匹配条件] [操作]:在指定路径下按条件查找,并可对结果执行操作

    bash 复制代码
    find /home -name "*.txt"  # 在 /home 目录下查找所有 .txt 文件
  • find [匹配条件]:默认在当前目录查找符合条件的 文件/目录

    bash 复制代码
    find -type d -name "docs"  # 在当前目录及子目录中查找名为 docs 的目录

匹配条件

  • -name "模式":按文件名匹配(区分大小写,支持通配符 *?[]
  • -iname "模式":按文件名匹配(忽略大小写)
  • -type [类型]:按类型匹配(f 普通文件、d 目录、l 符号链接等)
  • -size [大小]:按文件大小匹配(+n 大于 n、-n 小于 n,单位 b/k/M/G
  • -mtime [天数]:按修改时间匹配(+n 超过 n 天、-n 少于 n 天,以 24 小时为单位)
  • -user [用户名]:查找属于指定用户的文件

使用示例

bash 复制代码
# 按名称查找
find /etc -name "*.conf"  # 在 /etc 下查找所有 .conf 配置文件
find . -iname "readme"    # 在当前目录查找 readme(忽略大小写)

# 按类型和大小查找
find /var -type f -size +100M  # 在 /var 下查找大于100MB的普通文件
find ~ -type d -name "tmp*"    # 在用户家目录查找以 tmp 开头的目录

# 按时间查找
find . -mtime -1  # 查找当前目录下24小时内修改过的文件
find /log -mtime +30 -name "*.log"  # 查找 /log 下30天前修改的日志文件

三、alias

alias

核心作用为命令创建自定义别名,简化长命令或常用命令组合的输入,提高操作效率


基本用法

  • alias [别名]=[原始命令]:为指定命令创建别名(等号两侧无空格,原始命令含特殊字符需用引号包裹)

    bash 复制代码
    alias ll='ls -l'  # 为 ls -l 命令创建别名 ll
  • alias:不带参数时,显示当前系统中所有已定义的别名

    bash 复制代码
    alias  # 列出所有别名,输出如:alias ll='ls -l'  alias grep='grep --color=auto'
  • unalias [别名]:删除指定的别名(虽然是独立命令,但常与 alias 配合使用)

    bash 复制代码
    unalias ll  # 删除 ll 这个别名

常用场景

  • 简化长命令:将常用的复杂命令简化为短别名
  • 固定命令选项:为命令预设常用选项(如:详细输出、自动着色)
  • 组合命令:将多个命令组合为一个别名(需用分号分隔)

使用示例

bash 复制代码
alias la='ls -a'           # 用 la 代替 ls -a(显示所有文件,包括隐藏文件)
alias grep='grep --color'  # 为 grep 命令添加颜色高亮选项

alias cls='clear'          # 用 cls 代替 clear(类似 Windows 命令习惯)

alias update='sudo apt update && sudo apt upgrade'  # 组合更新系统的命令
alias rm='rm -i'           # 为 rm 命令添加交互式确认,防止误删

注意事项

  • 直接在命令行定义的别名仅在当前 Shell 会话中有效,关闭终端后失效
  • 若要使别名永久生效,需将别名定义添加到 Shell 配置文件(如:~/.bashrc~/.zshrc),添加后需执行 source ~/.bashrc(或重启终端)使其生效
  • 别名不能与系统已有命令同名,否则会覆盖原始命令(如:需执行原始命令,可在命令前加反斜杠,如 \ls
  • 复杂的命令组合建议使用 Shell 函数替代别名,功能更灵活

所以说 :在 Linux 系统中,ll 命令并不是系统默认自带的标准命令,而是通过 alias ll='ls -l' 这样的别名设置在配置文件中定义的。它本质上是 ls -l 命令的简化形式。

四、bc

bc - 英文全称为 "Basic Calculator"

核心作用用于在命令行进行高精度的数学计算,支持整数、小数运算及数学函数,可作为交互式计算器或在脚本中执行计算任务


基本用法

  • bc :直接运行进入交互式计算模式,输入表达式后按回车获取结果,按 Ctrl+D 退出

    bash 复制代码
    bc         # 进入交互式模式
    123 + 456  # 输入计算表达式
    579        # 输出结果
  • echo "[表达式]" | bc:通过管道传递表达式,非交互式计算

    bash 复制代码
    echo "2^10" | bc  # 计算 2 的 10 次方,输出 1024
  • bc [文件名]:执行包含计算表达式的文件

    bash 复制代码
    bc calc.txt  # 执行 calc.txt 中的计算命令

常用选项

  • -l:加载数学库,支持小数运算和数学函数(如:sinlog 等)

内置功能

  • 基本运算符+(加)、-(减)、*(乘)、/(除)、%(取余)、^(幂运算)
  • 比较运算符==(等于)、!=(不等于)、>(大于)等(返回 1 表示真,0 表示假)
  • 数学函数(需加 -l 选项):sin(x)cos(x)tan(x)log(x)sqrt(x)(平方根)等
  • 变量定义:可在交互式模式中定义变量(如:a=10; b=20; a+b
  • scale 变量:控制小数位数(如:scale=2 表示保留 2 位小数)

使用示例

bash 复制代码
# 基本运算
echo "100 - 3*15" | bc  # 计算 100-45,输出 55
echo "10/3" | bc        # 整数除法,输出 3
echo "scale=2; 10/3" | bc  # 保留 2 位小数,输出 3.33

# 幂运算与平方根
echo "2^8" | bc           # 计算 2的8次方,输出 256
echo "sqrt(625)" | bc -l  # 计算平方根(需加 -l),输出 25.0000000000

# 数学函数(弧度制)
echo "s(1)" | bc -l     # 计算 sin(1) 弧度,输出约 0.8414709848
echo "l(10)" | bc -l    # 计算自然对数 ln(10),输出约 2.3025850930

# 交互式模式下的变量与比较
bc
a=5; b=3
a*b  # 输出 15
a > b  # 输出 1(真)
scale=4
(a + b) / 2  # 输出 4.0000

注意事项

  • 默认情况下 bc 只进行整数运算,需设置 scale 变量或使用 -l 选项才能处理小数
  • 数学函数的参数采用弧度制,若需角度计算需先转换(角度转弧度:角度 ×π/180)
  • 在脚本中使用时,bc 可替代 $((...))expr 进行更复杂的数学计算
  • 支持条件判断、循环等简单编程结构,可编写复杂计算脚本(需结合 bc 的语法规则)

---------------常用热键---------------

在 Linux 系统的终端(Terminal)中,掌握常用热键(快捷键)可以极大提升操作效率。

以下是按功能分类的核心热键,适用于大多数 Shell 环境(如:Bash、Zsh):

一、光标移动与编辑

光标移动与编辑:

  • Ctrl + a :将光标快速移动到命令行开头 (类似 Windows 的Home键)
  • Ctrl + e :将光标快速移动到命令行末尾 (类似 Windows 的End键)
  • Ctrl + f :光标向右移动一个字符(同右方向键)
  • Ctrl + b :光标向左移动一个字符(同左方向键)
  • Alt + f :光标向右跳一个单词(以空格或标点分隔)
  • Alt + b :光标向左跳一个单词
  • Ctrl + xx :在当前光标位置和命令行开头之间切换

二、文本删除与剪切

文本删除与剪切:

  • Ctrl + d :删除光标所在位置的字符(若命令行为空,会退出当前终端)
  • Ctrl + h :删除光标左侧的字符 (同退格键Backspace
  • Ctrl + k :剪切(删除)从光标位置到命令行末尾的所有内容(可粘贴)
  • Ctrl + u :剪切(删除)从光标位置到命令行开头的所有内容(可粘贴)
  • Alt + d :剪切光标右侧的整个单词(从光标位置到单词结尾)
  • Alt + Backspace :剪切光标左侧的整个单词(从单词开头到光标位置)

三、命令历史与搜索

命令历史与搜索:

  • Ctrl + r :进入历史命令搜索模式 ,输入关键词可快速查找曾执行过的命令(按Enter执行找到的命令,按Ctrl + g退出搜索)
  • Ctrl + p :调用上一条历史命令 (同上方向键
  • Ctrl + n :调用下一条历史命令 (同下方向键
  • !! (输入两个感叹号):重复执行上一条命令 (常用于需要sudo权限时,如:sudo !!

四、终端控制类操作

终端控制:

  • Ctrl + c :强制终止当前运行的命令(最常用,如:终止卡住的程序)
  • Ctrl + z :将当前命令暂停并放入后台 (可通过fg命令恢复到前台)
  • Ctrl + l :清空终端屏幕(同clear命令)
  • Ctrl + s:暂停终端输出(防止滚动过快,常用于查看日志时)
  • Ctrl + q :恢复终端输出(解除Ctrl + s的暂停)
  • Ctrl + d :退出当前 Shell 会话(同exit命令,若在输入状态则删除字符)

五、其他实用的热键

其他实用热键:

  • Tab :自动补全命令、文件名或目录名(输入前几个字符按Tab,不确定时按两次Tab显示所有可能选项)
  • Esc + . (按Esc后松开,再按.):粘贴上一条命令的最后一个参数 (例如:上一条命令是cp file1.txt /home/docs,按此热键会粘贴/home/docs
  • Ctrl + w :删除光标左侧的一个单词 (与Alt + Backspace类似,部分 Shell 行为略有差异)

注意事项

  • 部分热键(如:Alt相关)在不同终端模拟器(如:GNOME Terminal、Konsole)中可能需要开启 "元键(Meta)" 支持,默认通常可用
  • 若使用远程连接工具(如:Xshell、Putty),部分热键可能被工具自身快捷键覆盖,需在工具设置中调整

掌握这些热键后,终端操作会变得非常流畅,尤其是Ctrl + r(历史搜索)、Tab(自动补全)和Ctrl + c(终止命令)堪称 "必备技能"。

相关推荐
f8979070703 小时前
配置centos 使用ssh访问文件夹
linux·centos·ssh
---学无止境---3 小时前
Linux中VFS相关slab缓存对象的创建和初始化
linux
在路上看风景3 小时前
3.5 面向连接的传输: TCP
服务器·tcp/ip
瑞士卷@3 小时前
spring从入门到精通(spring学习笔记,持续更新中)
笔记·学习·spring
fxshy3 小时前
CentOS 7上安装并配置Nginx监听81端口的完整指南
linux·nginx·centos
小熊熊知识库3 小时前
Ubuntu下载以及安装详解以及应用安装
linux·运维·ubuntu
歪歪1003 小时前
如何在Qt中使用VS的调试功能
运维·开发语言·网络·qt·网络协议·visual studio
我先去打把游戏先3 小时前
ESP32学习笔记(基于IDF):SmartConfig一键配网
笔记·嵌入式硬件·mcu·物联网·学习·esp32·硬件工程
小白银子7 小时前
零基础从头教学Linux(Day 52)
linux·运维·服务器·python·python3.11