:系统认知与效率)
Linux基础指令二系统认知与效率本文是 Linux 基础指令系列的第二篇——在掌握了文件操作之后我们来理解系统本身它是怎么运作的命令到底是什么以及那些让你效率翻倍的工具和技巧。上一篇[一命令行入门] | 下一篇[三权限系统详解]系统信息与实用工具dateprint or set system date— 时间操作# 显示当前时间date# 输出: Wed Jan 11 18:22:50 CST 2023# 自定义显示格式date%Y/%m/%d# 2023/01/11date%Y/%m/%d-%H:%M:%S# 2023/01/11-18:23:20# 时间戳转换date%s# 当前时间 → 时间戳date%Y/%m/%d-d1000000000# 时间戳 → 可读时间2001/09/09格式标记一览标记含义示例%Y四位年份2023%m月份01-1201%d日01-3111%H小时00-2318%M分钟00-5922%S秒00-6150%F等价于%Y-%m-%d2023-01-11%X等价于%H:%M:%S18:22:50%sUnix 时间戳1673432636时间戳是从 1970 年 1 月 1 日UTC午夜开始经过的秒数——这个看似随意的起点是所有 Unix 系统计时的纪元Epoch。其他速查cal# calendar — 当月日历cal2023# 全年日历cal-3# 前月 当月 次月top# table of processes — 实时查看系统进程按 q 退出top-d1-n5# 每 1 秒刷新一次共 5 次uname-r# unix name — 查看内核版本uname-a# 查看完整系统信息bc# basic calculator — 命令行计算器支持浮点运算file文件名# determine file type — 识别文件真实类型不等同于后缀名压缩与归档zippackage and compress/unzipextract compressed filesziptest2.zip test2/*# 将 test2 目录压缩为 zipunziptest2.zip-d/tmp# 解压到 /tmp 目录tartape archiver— Linux 原生归档工具tar是 Linux 下最重要的归档命令。核心参数参数含义-c创建归档create-x解压归档extract-t查看归档内容list-z使用 gzip 压缩/解压-j使用 bzip2 压缩/解压-v显示过程详情verbose-f指定归档文件名必须紧跟文件名-C解压到指定目录实用示例# 打包并 gzip 压缩 /etc 目录tar-zcvf/tmp/etc.tar.gz /etc# 查看压缩包内容不解压tar-ztvf/tmp/etc.tar.gz# 解压到指定目录tar-zxvf/tmp/etc.tar.gz-C/usr/local/src# 只解压压缩包中的某个文件tar-zxvf/tmp/etc.tar.gz etc/passwd# 打包时排除某个目录tar--exclude/home/dmtsai-zcvfmyfile.tar.gz /home/* /etc# 打包并直接解压到另一目录不产生中间文件tar-cvf- /etc|tar-xvf--C/tmp最后一条是巧妙的管道用法-代表标准输出/标准输入让tar在打包的同时直接把数据传给另一个解压进程——省去了中间文件的磁盘写入。rzreceive ZMODEM/szsend ZMODEM— Windows 与 Linux 互传文件通过 XShell 的 ZMODEM 协议实现拖拽式文件传输。安装后可以直接把文件从 Windows 拖到 XShell 窗口上传。# 安装 lrzszsudoyuminstall-ylrzsz# CentOSsudoaptinstall-ylrzsz# Ubuntu命令的本质可执行文件抛开所有抽象概念回答一个最基本的问题ls是什么whichls# /usr/bin/lsls就是一个放在/usr/bin/下的可执行文件。当你敲下ls并回车时shell 会在PATH环境变量列出的目录中搜索名为ls的可执行文件找到后交给内核去运行。echo$PATH# /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin这意味着每一个命令都是磁盘上某个角落里的一个可执行文件。pwd是文件cat是文件grep是文件。你也可以自己写一个 C 程序编译成可执行文件放到/usr/bin/下——那么它就成为一个命令。 背景补充C 语言的main(int argc, char* argv[])中的argv就是命令行参数。你敲ls -l /homeshell 会把它拆成argv[0]ls,argv[1]-l,argv[2]/home然后传给main。命令行和 C 程序之间没有黑箱。但也有例外——有些命令不是磁盘上的文件而是 shell 内置的builtin。cd就是最典型的 shell 内置命令因为修改当前工作目录必须由 shell 自己完成外部可执行文件做不到。用type可以区分typels# ls is /usr/bin/ls → 外部命令typecd# cd is a shell builtin → 内置命令指令不需要记忆初学 Linux 的人最容易犯的错试图把每个命令的每个选项都记下来。不需要。Linux 命令的数量以千计单个命令的选项可以长达几十页。没有人——包括十年经验的老手——靠记忆工作。实际的工作流是知道能做这件事的命令叫什么而不是记住所有选项。模糊记得有个命令能看日历搜一下man -k calendar就能找到cal常用选项自然会记住ls -l、grep -r这些每天敲的自然就熟了不常用的当场man或--help善用补全和帮助Tab补全减少输入man手册是权威参考--help给出速查摘要# 当场查帮助不丢人manls# 详细手册ls--help# 速查摘要man-kkeyword# 按关键词找命令把脑力留给理解文件系统怎么运作“权限模型为什么这样设计”而不是背tar的参数顺序——后者是机器该做的事。Shell 的运行原理Linux 严格来说**内核kernel**是操作系统的核心普通用户不能直接操作 kernel。用户通过shell——一个命令行解释器Command Interpreter——与 kernel 沟通。Shell 做两件事将用户的命令翻译给 kernel 处理将 kernel 的处理结果翻译给用户这和 Windows 上的图形界面本质上扮演的是同一个角色都是用户和操作系统内核之间的中间层。只不过一个在点击图标一个在敲字符。我们常用的 shell 叫做bashBourne Again SHell是 GNU 项目对 Bourne Shell 的增强实现。三个救命热键热键作用Tab命令补全 / 文件名补全。按一下补全按两下列出所有可能CtrlC终止当前运行的程序CtrlD表示输入结束EOF也可替代exit退出终端↑/↓浏览历史命令按上键回看之前执行过的指令CtrlR搜索历史命令输入关键词即可模糊匹配曾经敲过的命令Tab补全是效率利器——命令名、路径名、文件名都可以补全。如果你敲到一半不确定按两下Tab看看有什么候选。上下方向键可能是使用频率仅次于Tab的热键——刚敲过的长命令不想再打一遍按一下↑就回来了。CtrlR更进一步支持搜索整个历史记录。bash 默认保存你最近 500~1000 条历史命令存在~/.bash_history中可以说你敲过的每一条指令都没有真正消失。本节要点date 时间戳是处理时间的基础工具%s和-d timestamp是两个方向的转换tar是 Linux 原生归档工具-zcvf打包压缩和-zxvf解压是肌肉记忆级参数组合管道能让tar在打包的同时直接解压到另一目录——-代表 stdout/stdinrz/sz通过 XShell 的 ZMODEM 协议实现 Windows 与 Linux 之间的便捷文件传输命令就是磁盘上的可执行文件which能告诉你它在哪。例外是cd这类 shell 内置命令用type区分$PATH决定了 shell 去哪找命令——你也可以把自己的程序放到 PATH 目录下它就成了一个命令C 语言的argv就是命令行参数shell 只是帮你做字符串拆分——命令行和 C 程序之间没有黑箱Shell 是用户和 kernel 之间的翻译官bash 是 GNU 对 Bourne Shell 的增强实现Tab、CtrlC、CtrlR是使用频率最高的三个热键↑键和CtrlR是你最忠实的历史记录员曾经敲过的命令从未真正消失不要背选项——知道命令叫什么当场man或--help。把记忆力留给理解系统的设计原理