指令篇·二:Linux指令后续)
◆博主名称少司府欢迎来到少司府的博客☆*: .. o(≧▽≦)o ..:*☆⭐数据结构系列个人专栏初阶数据结构 高阶数据结构⭐C基础个人专栏C初阶 C进阶⭐Linux个人专栏Linux系统编程⭐琢玉成器终有时笔底生花夺锦归目录1. 打印指令与重定向1.1 printf1.2 echo1.3 重定向相关1.3.1 前置知识点1.3.2 重定向1.3.3 重定向的特殊用法2. more、less、head和tail2.1 more2.2 less2.3 head2.4 tail3. 时间相关3.1 时间戳3.1.1 什么是时间戳3.1.2 时间戳的特点3.2 小知识3.3 date和cal3.3.1 date3.3.2 cal4. 查找相关4.1 find4.2 which4.3 whereis4.4 过滤器grep4.5 任务管理器top5. 压缩与打包5.1 zip/unzip5.2 tar5.3 不同系统之间传输两个文件6. bc和uname6.1 计算器bc6.2 uname7. 热键与关机7.1 常见的热键7.2 关机8. shell1. 打印指令与重定向1.1 printfprintf是Linux中常用的格式化输出命令核心功能是按照指定格式规则输出文本语法设计参考了 C 语言的 printf 函数但因运行在 Shell 解释环境中二者在底层逻辑、行为细节上存在显著差异。printf 格式字符串 [参数1 参数2 ...]常用格式说明符printf Hello, Linux printf!\n与C语言中printf的差异1、Linux的printf本质是Shell 内置命令/ 外部程序在命令行 / 脚本中解释执行C语言的printf本质是C 标准库函数编译后嵌入程序运行时直接调用。2、在参数性质上Linux的printf所有参数本质都是字符串Shell 会先完成变量展开、分词、通配符替换再传给 printfC语言的printf参数有明确数据类型int/float/char* 等编译期做类型检查运行时直接传值。3、格式符上Linux下的printf支持 Shell 特有的 %b解析参数中的转义不支持 %n 等底层危险格式符C语言的printf无 %b支持 %n将已输出字符数写入变量地址等底层格式符。1.2 echoecho也是Linux下的一个打印文本的命令。指令操作echo [选项] [字符串]-n不输出行尾的换行符。-e激活转义字符如解析 \n, \t 等。echo后接字符串带上引号可以直接打印对应字符串。如果字符串中间没有空格的话也可以不带引号。1.3 重定向相关1.3.1 前置知识点1、前文说了Linux系统下一切皆文件包括自己建立的文件、键盘、显示器等这些都是文件。这些统称设备文件。设备文件通常放在 /dev 下。2、我们在printf/scanf、cin/cout的时候本质上就是进行文件操作。3、因此这些设备文件在访问之前也必须被打开4、文件完整类型-普通文件d目录文件c字符文件键盘、显示器、终端输入的数据具有顺序性b块设备文件磁盘l连接文件p管道文件5、Linux系统不区分文件有无后缀只做对文件名的区分第三方工具如gcc、g要对文件的后缀做区分。1.3.2 重定向重定向的定义重定向是指改变标准输入、标准输出或标准错误输出的默认方向。1、echo输出到文件里输出重定向echo hello Linux hello.txt如图该指令有两个意思a若 后面跟的文件不存在则新建之。b先清空再写入。2、输入重定向cat test.txt读取 test.txt 文件的内容并输出到终端屏幕。3、追加重定向echo hello Linux hello.txt将指令的输出内容写入到文件的末尾。它不会清空原文件而是在后面“接龙”。1.3.3 重定向的特殊用法在重定向时我们可以不做任何操作用来协助我们新建/清空文件。log.txt 1.tst ls 1.txt hello.txt log.txt test.c2. more、less、head和tail2.1 more# 命令⾏输出多⾏⽂本 [whbbite-alicloud test]$ cnt0; while [ $cnt -le 2000 ]; do echo hello bite; let cnt; done temp.txt # -n 指定输出⾏数 [whbbite-alicloud test]$ more -10 temp.txt hello bite hello bite hello bite hello bite hello bite hello bite hello bite hello bite hello bite hello bite --More--(0%)more 是 Linux 中经典的分页式文本查看工具属于终端分页器Pager核心功能是将长文本按终端屏幕大小分页显示满屏后自动暂停输出等待用户指令后继续专门解决 cat 查看长文件时内容快速刷屏、无法阅读的问题。2.2 less# 命令⾏输出多⾏⽂本 [whbbite-alicloud test]$ cnt0; while [ $cnt -le 2000 ]; do echo hello $cnt; let cnt; done temp.txt # 测试搜索和-N等功能 [whbbite-alicloud test]$ less -N temp.txt 1 hello 0 2 hello 1 3 hello 2 4 hello 3 5 hello 4 6 hello 5 7 hello 6 8 hello 7 9 hello 8 10 hello 9 11 hello 10 12 hello 11 13 hello 12 14 hello 13 ... # 其他选项也可以直接测试2.3 head[whbbite-alicloud test]$ head temp.txt hello 0 hello 1 hello 2 hello 3 hello 4 hello 5 hello 6 hello 7 hello 8 hello 9 [whbbite-alicloud test]$ head -5 temp.txt hello 0 hello 1 hello 2 hello 3 hello 42.4 tail# 基本功能演⽰ [whbbite-alicloud test]$ tail temp.txt hello 1991 hello 1992 hello 1993 hello 1994 hello 1995 hello 1996 hello 1997 hello 1998 hello 1999 hello 2000 [whbbite-alicloud test]$ tail -3 temp.txt hello 1998 hello 1999 hello 20003. 时间相关3.1 时间戳3.1.1 什么是时间戳时间戳Unix Timestamp / 纪元时间是计算机领域通用的标准时间表示方式核心定义为从 UTC 时区 1970 年 1 月 1 日 00:00:00Unix 纪元到目标时刻的总秒数本质是一个纯整数。3.1.2 时间戳的特点1、时区无关同一时刻全球任意时区的 Unix 时间戳完全相同转换为本地可读时间时才会叠加时区偏移非常适合跨时区存储与计算。2、计算简便两个时间戳直接相减即可得到精确时间差无需处理日期进位、时分秒换算。3、存储高效仅用一个整数即可表示时间占用空间极小。3.2 小知识计算机已经关机了为什么开机之后他还拥有准确的时间呢计算机的主板上有纽扣电池纽扣电池给硬件实时时钟RTC / CMOS 时钟供电用来记录时间。3.3 date和cal3.3.1 date# 查看当前本地完整时间 date # 查看当前秒级时间戳 date %s # 查看当前毫秒级时间戳 date %s%3N# 时间戳转本地可读时间 后接秒级时间戳 date -d 1726060000 # 自定义格式输出转换结果 date -d 1726060000 %Y-%m-%d %H:%M:%S # 指定日期转时间戳 date -d 2024-09-12 12:00:00 %s3.3.2 cal# 查看当月日历 cal # 查看指定年份全年日历 cal 2025 # 查看指定年月 cal 9 20254. 查找相关4.1 find# 在指定路径下搜索执⾏名称的⽂件 [whbbite-alicloud test]$ find ~ -name test.c /home/whb/test_code/old_code/test.c /home/whb/test_code/test.c ...4.2 which[whbbite-alicloud test]$ which ls alias lsls --colorauto /usr/bin/ls [whbbite-alicloud test]$ which pwd /usr/bin/pwd4.3 whereis[whbbite-alicloud test]$ whereis ls ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz [whbbite-alicloud test]$ whereis libc.so libc: /usr/lib64/libc.so /usr/lib64/libc.a /usr/share/man/man7/libc.7.gz4.4 过滤器grep强大的文本搜索工具它能使用正则表达式搜索文本并将匹配的行打印出来。常配合管道符 | 使用用于过滤其他命令的输出结果。# 在日志文件中查找包含 error 的行 grep error app.log # 不区分大小写查找 warning并显示每行的行号 grep -in warning app.log # 输出配置文件中所有非 # 开头的有效配置行 grep -v ^# /etc/ssh/sshd_config # 只匹配完整的 user 单词不会匹配 username、user_id 等包含 user 的词 grep -w user config.txt # 在 /etc 目录下所有文件中递归查找包含 localhost 的行 grep -r localhost /etc/ # 统计访问日志中状态码 404 出现的次数 grep -c 404 access.log # 查看系统中所有 nginx 相关的进程 ps aux | grep nginx # 查看系统中监听的端口过滤出 80 端口 netstat -tulpn | grep :80 # 查找包含 error 或 warning 的行扩展正则 grep -E error|warning app.log # 只提取文件中的所有数字 grep -o [0-9]* test.txt4.5 任务管理器toptop 是 Linux 系统中实时交互式的系统性能与进程监控工具地位相当于 Windows 系统的任务管理器是排查系统负载过高、CPU / 内存异常占用、定位异常进程的核心基础工具。# 设置刷新间隔为2秒 top -d 2 # 只监控指定PID的进程支持多个PID逗号分隔 top -p 1234,5678 # 只显示指定用户的进程 top -u nginx # 非交互模式输出一次结果后退出适合写入脚本采集数据 top -bn15. 压缩与打包5.1 zip/unzipunzip [选项] 压缩包名# 压缩单个文件 zip test.zip file.txt # 压缩多个文件和目录 zip test.zip file1.txt file2.log docs/ # 递归压缩整个文件夹最常用 zip -r project.zip project/ # 最高压缩比递归压缩 zip -9r data.zip data/ # 带密码压缩 zip -rP 123456 secret.zip secret/ # 静默压缩不输出过程 zip -qr backup.zip /home/user/dataunzip [选项] 压缩包名# 直接解压到当前目录 unzip test.zip # 解压到指定目录最常用 unzip test.zip -d /opt/app/ # 只查看压缩包内容不解压 unzip -l test.zip # 测试压缩包是否完整损坏 unzip -t test.zip # 解压并强制覆盖已有文件 unzip -o test.zip # 带密码解压 unzip -P 123456 secret.zip5.2 tartar [选项] [归档文件名] [文件或目录...]# 1. 基础打包不压缩仅合并成 .tar tar -cvf project.tar project/ # 2. 打包 gzip 压缩最常用.tar.gz tar -czvf backup.tar.gz /home/user/data/ # 3. 打包 bzip2 压缩更高压缩比.tar.bz2 tar -cjvf backup.tar.bz2 /home/user/data/ # 4. 打包 xz 压缩最高压缩比大文件推荐.tar.xz tar -cJvf backup.tar.xz /home/user/data/ # 5. 打包时排除指定文件/目录 tar -czvf backup.tar.gz --exclude*.log --excludetmp /data/ # 6. 保留权限打包系统配置备份推荐 tar -czvpf etc-backup.tar.gz /etc/# 1. 解压到当前目录自动识别压缩格式无需指定 z/j/J tar -xvf backup.tar.gz # 2. 解压到指定目录最常用-C 为大写 tar -xvf backup.tar.gz -C /opt/app/ # 3. 只解压包内的单个文件/目录 tar -xvf backup.tar.gz etc/ssh/sshd_config # 4. 解压时去掉前1层目录包内是data/file.txt解压后直接得到file.txt tar -xvf backup.tar.gz --strip-components1 # 5. 静默解压不输出过程 tar -xf backup.tar.gz5.3 不同系统之间传输两个文件我们需要sz、rz命令sz表示发送rz表示接收。如图我们可以在Linux上把打包好的zip文件传输到windows电脑。输入rz可以传文件到Linux电脑上。scp命令用于两台Linux机器的远端拷贝。#格式scp dst.tgz 用户名公网IP:路径6. bc和uname6.1 计算器bcecho 1234 | bc 10bc命令用于计算一般配合其他命令使用。6.2 unameuname用于查看Linux的体系结构。什么是体系结构在 Linux 语境下体系结构Architecture通常指硬件平台与操作系统的组合方式。它决定了计算机如何处理数据如 32 位或 64 位以及内核的版本信息。简单来说就是告诉软件“我这台机器的大脑是什么型号沟通语言的版本是多少。”uname -r #查看Linux的体系结构7. 热键与关机7.1 常见的热键在 Linux 操作中熟练使用热键可以极大提高工作效率避免重复敲打冗长的路径或陷入失控的进程。1、ctrl c 终止异常的任务2、键盘上下键历史命令3、xxx tab 自动搜索以xxx开头的历史命令wh 键盘上的tab #搜索以wh开头的历史命令4、ctrl r 搜索历史命令5、ctrl d 退出当前用户7.2 关机格式shutdown [选项] [时间]注意Linux云服务器永远不会关机8. shell从技术角度shell的定义命令行解释器command Interpreter主要包含外壳程序的作用1、用户不擅长给操作系统直接打交道我们可以通过外壳程序来控制操作系统2、当用户输入危险信息时外壳程序直接拦截防止破坏操作系统内核3、外壳程序有自己的进程当有新命令来临时会创建相应的子进程shell是命令行外壳程序的统称Linux自己的命令行程序是bash。本期的分享就到这里如果觉得博主的文章比较对胃口的话可以点一个小小的关注~您的三连是我持续更新的动力~