IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

标签:Shell

共 90 篇相关文章

IT 累计浏览 11,586

Linux命令行里的“瑞士军刀”

这篇讲的是那些能用一行命令完成复杂任务的Linux“瑞士军刀”级技巧。作者分享了一组来自Quora的高效单行脚本,它们能用极简的语法替代大段的代码,威力惊人。 比如,要计算两个文本文件的交集、并集和差集,只需`cat a b | sort | uniq`的几种变体即可轻松搞定,无论文件多大。汇总一列数字的和,一条`awk`命令就能完成,比用Python写循环快3倍且代码量更少。想要快速查看目录下所有文件的大小和修改时间?`find . -type f -ls`比递归的`ls -lR`输出更清晰。 文章还展示了`xargs`的惊人力量——它能将标准输入转化为命令参数,用于批量处理,比如从文件读取主机名列表并并行执行SSH命令。另一个实用场景是分析Web日志:一行命令就能统计日志中特定参数(如`acct_id`)的请求次数,并按频率排序。 这些技巧的共同点是极致的效率与简洁,充分体现了Unix哲学中组合小工具完成大任务的思想。对于系统管理员或后端开发者来说,掌握这些单行命令,能让你在文本处理、系统运维等任务上如虎添翼。

IT 累计浏览 4,546

Shell的那些事儿

这篇讲的是 Shell 语言如何从大学里一个简单的工具,成长为作者工作中不可或缺的效率利器。作者从学生时代用 Shell 命令裁减文件系统、处理 BAT 脚本讲起,到工作后利用 `grep -Irl` 快速查找文本文件,或用 `find |xargs wc -l` 统计代码行数,生动展现了 Shell 在解决实际问题时“组合命令”的核心魅力。 文章并未停留在基础用法,而是深入探讨了 Shell 的“工程化”一面。作者分享了在性能团队学到的实用技巧,比如用 `-x` 选项调试脚本执行过程、设置参数默认值以及实现进程并发控制。同时,也坦诚讨论了 Shell 语法的灵活性甚至“不严谨”之处,比如 `if` 语句的多种写法和对换行符的敏感,并澄清了如何正确处理分号与命令返回值 `$?` 的使用。 作者的最终观点很明确:相对于 C/C++/Java 等编译型语言,Shell 作为一种“工具性语言”,以其无需编译、即写即测的特性,提供了无与伦比的开发效率。无论是压力测试还是复杂逻辑控制,它都是快速将想法落地的首选。文末那句“不熟悉 Shell 都不好意思说会性能调优”,既是对 Shell 地位的肯定,也点明了在追求效率的现代开发中,掌握这门语言的重要性。

IT 累计浏览 3,864

快速查看服务器硬件配置信息

这个脚本的目标很明确:为运维和开发人员提供一个一键式工具,快速获取Linux服务器的硬件与系统概况。它从几个关键维度着手,条理清晰。 首先,它智能识别操作系统发行版,无论是通过`lsb_release`还是直接读取`/etc/issue`,确保兼容性。接着,脚本深入`/proc/cpuinfo`和`/proc/meminfo`,提取CPU型号、物理颗数、核心数、逻辑处理器数,以及内存总量、交换空间、缓存等详细数据。对于磁盘信息,它整合了`fdisk`和`df`命令的结果,给出物理磁盘概况与各分区使用情况。 脚本的一个巧妙之处在于对64位系统的判断逻辑——通过检查CPU是否支持`lm`(长模式)标志,而非直接依赖系统位数。整个实现大量运用了管道和`awk`/`sed`进行文本处理,逻辑连贯,输出格式用等号线分隔,清晰易读。 对于需要快速摸底新服务器配置,或进行批量巡检的团队来说,这个脚本提供了一个非常直接、可立即落地的方案。它省去了手动拼接多个命令的麻烦,将分散的信息点整合成一份完整的“体检报告”。

IT 累计浏览 11,607

100个常用的linux命令

这篇整理了100个高频Linux命令的实用指南,覆盖了从基础文件操作到系统监控的方方面面。比如,用 `echo "aa" > test.txt` 清空并写入文件,`chmod go+w -R` 精准修改权限,`tar -tzvf` 快速查看压缩包内容,`du -sh` 一目了然获取目录总大小。文章对每个命令的说明都直击要点,例如解释 `bc -l` 能直接进行浮点运算,`uptime` 能快速查看系统负载均值,`lsof -i :22` 可以揪出占用特定端口的进程。 除了常规操作,还包含了不少实用技巧,比如通过 `ctrl+a` 和 `ctrl+e` 在命令行快速移动光标,使用 `rsync -P` 在同步文件时显示进度,以及用 `nmap -sP` 扫描网段内的活跃主机。这些命令片段犹如一张速查表,无论是新手入门还是老手备忘,都能从中找到即拿即用的解决方案。对于经常在终端下工作的开发者来说,掌握这些命令能显著提升日常操作效率。

IT 累计浏览 4,585

Unix考古记:一个“遗失”的shell

这篇讲的是Unix历史上第一个被广泛传播的shell——Thompson Shell,它由Ken Thompson编写,却常常被后来的Bourne Shell的光芒所掩盖。作者从Unix V6时代的尘封文档和源代码出发,带我们重新认识了这个只有900行C代码、却奠定了现代shell基因的“鼻祖”。 文章的价值在于,它清晰地展示了Thompson Shell如何将管道线、I/O重定向、通配符扩展和后台执行这些影响深远的概念工程化实现。尽管它在1977年就被Bourne Shell取代,但它所确立的命令语言结构和解释器可移植性原则,直接塑造了我们今天习以为常的命令行交互方式。 更妙的是,文章深入其解释器源码,剖析了预处理、词法扫描等步骤。你会发现,这个简陋的解释器原理竟与编译器一脉相承,对于想理解Shell或编译原理的读者来说,这份“活化石”级别的代码解析提供了难得的直观视角。

IT 累计浏览 4,490

编程珠玑番外篇之番外篇-N 答 UNIX 痛恨者王垠

这篇讨论 UNIX 与 Windows 设计哲学之争的文章,从王垠批评 UNIX 的观点出发,深入剖析了两者的核心差异。作者指出,UNIX 的图形系统(如 X Window)与操作系统内核的松耦合,反而为针对不同设备(如移动平台)定制高效 GUI 提供了灵活性,而微软 NT 内核与 UI 的深度绑定,则导致其在跨平台时面临复杂的兼顾问题,迭代缓慢。 文章进一步探讨了工具设计的复杂性根源。以 TeX 为例,作者认为其“复杂”源于要解决排版领域本身的精确控制问题,而非设计失败。这揭示了一个重要观点:工具设计的简单或复杂,应取决于其要封装的“领域模型”的固有难度,而非简单地追求操作极简。将 Unix 工具比作“魔鬼棋”的类比,可能忽略了这一层因果关系。 最后,作者提出了一个有趣的角度:真正的 Unix 用户恰恰是其“痛恨者”,因为深刻理解其缺陷是高效使用它的前提。这种基于开放环境竞争、不断吸收优秀设计的演进模式,而非某种“宗教”,才是 Unix 家族最终胜出的关键。

IT 累计浏览 3,906

如何使用Shell缉拿问题进程

服务器在凌晨某时段突发高负载,但人工排查时故障往往已消失,成为许多运维人员的棘手难题。文章作者面对这一挑战,没有依赖复杂的监控体系,而是用一段简洁的Shell脚本巧妙“伏击”了问题进程。 核心思路是利用Cron定时任务每分钟运行一个脚本,实时读取系统负载。一旦发现平均负载超过CPU核心数,便立即通过`ps`命令捕获当前所有进程的快照并存档。这样,当次日早上分析日志时,就能直接从保存的文件里看到案发时的“进程嫌疑人”。 作者特别提醒了实际使用的两个关键点:一是要注意定期清理日志文件,避免占满磁盘;二是Cron的分钟级粒度可能漏掉更短暂的峰值,对精度要求高的场景可改为常驻守护进程。虽然脚本本身并不复杂,但它将被动响应转化为主动记录,有效解决了故障排查中“抓不到现行”的核心痛点,体现了运维中用简单工具解决实际问题的实用智慧。

IT 累计浏览 9,462

linux下搜索find命令详解

这篇文章来自一次内部技术培训,作者觉得分享的内容不够全面,于是系统地整理了 Linux 下 `find` 命令的各种常用选项和示例。 它开篇点明 `find` 是一个强大但速度较慢的搜索工具,随后围绕其基本语法 `find [路径] <表达式> [操作]`,详细拆解了十多个核心选项。文章不仅列举了按文件名(`-name`)、按时间(`-atime`, `-mmin`)、按用户(`-user`)和按大小(`-size`)进行查找的常规操作,还介绍了一些实用的进阶技巧。例如,使用 `-exec` 可以直接对查找结果执行命令,像批量删除 `.svn` 目录;利用 `-perm` 和 `-regex` 则能满足更精细的权限或模式匹配需求。文末附带的逻辑组合(`-o`, `-a`, `!`)和目录深度控制(`-maxdepth`)示例,让复杂条件的查询成为可能。 整体来看,这更像一份为团队定制的 `find` 命令速查手册,将零散的知识点梳理成了清晰的条目,每个选项都配以实际可运行的命令。对于日常需要在 Linux 文件系统中定位文件的开发者和运维人员来说,这份清单覆盖了绝大多数使用场景,省去了反复查阅手册的麻烦。

IT 累计浏览 8,949

应该知道的Linux技巧

这篇讲的是每个Linux用户都应该知道的效率技巧,核心观点直接而有力:在Unix/Linux下,最高效的技巧不是操作图形界面,而是掌握命令行,因为它意味着自动化。 文章从Quora的一个热门问答出发,结合作者的实践理解,梳理了一份从基础到进阶的实用清单。基础部分强调了学习Bash、vim和ssh的重要性,指出这些是高效操作的基石。日常技巧则聚焦于能立刻提升操作速度的快捷键与命令,例如用Ctrl-R历史搜索、用xargs串联命令,或是通过pstree和pkill管理进程。 清单中也不乏一些精妙的“冷知识”,比如利用`<(command)`将命令输出当作文件进行比较,或是通过`set -x`和`trap`调试与控制脚本。这些细节让自动化和脚本编写变得更灵活可靠。作者还不忘提醒,掌握man、Google搜索以及从源码编译,是自主解决问题和深入探索的关键。整篇文章罗列了数十个具体命令和场景,目的不是让你全部记住,而是展示命令行的丰富可能性——熟悉其中一部分,就能让你从繁重的手动操作中解脱出来,把时间留给更重要的思考。

IT 累计浏览 6,990

linux目录跳转快捷方式——z武器

这篇讲的是Linux下如何告别繁琐的`cd`命令,实现目录的“智能跳转”。作者从在机房目睹资深工程师行云流水般的`cd`操作说起,分享了自己想提升效率却常被“忘记目标目录在哪一层”困扰的经历,从而引出了一个名为“z”的命令行小工具。 z本质上是一个轻量的shell脚本,它通过自动记录你常访问的目录路径,让你只需输入目录名称的关键词就能一键跳转。文章清晰地介绍了它的核心用法:安装后,z会默默记住你的操作习惯。以后,无论你身处何处,只需输入`z 关键词`(例如`z python`),就能立刻进入之前记录过的、包含该关键词的目录,彻底省去了层层递进的`cd`和反复`Tab`补全的麻烦。 对于需要在多个项目目录间频繁切换的开发者和运维人员来说,这个小工具能显著提升命令行操作的流畅度与效率,是一个即学即用的实用技巧。

IT 累计浏览 3,676

linux 定期自动备份mysql的shell

这篇讲的是,一位作者从保障用户数据安全的实际需求出发,分享了一个简洁实用的MySQL自动备份方案。 他编写了一个Shell脚本,核心是利用`mysqldump`工具导出服务器上所有的数据库,并通过管道用`gzip`进行高压缩存储。脚本通过配置`crontab`定时任务,设定在每天凌晨3点自动执行,实现了完全无人值守的备份流程。 方案的一个关键设计在于备份文件的自动轮转清理。脚本采用目录轮转的方式(`backup.0`至`backup.4`),每次执行前会先删除最旧的一天备份,然后生成新的备份文件,从而确保服务器磁盘空间始终只被最近5天的备份占用,避免了存储空间无限增长的问题。 文章直接提供了完整的脚本代码,包括数据库连接信息、文件路径定义和命令组合等,读者可以根据自身环境稍作修改后直接使用。作者也提醒,从安全角度考虑,执行备份的脚本应使用Root权限,这提醒了读者在自动化运维中需兼顾权限管理。整个方案轻量、可靠,非常适合中小型项目或个人服务器进行日常数据保护。

IT 累计浏览 8,314

你可能不知道的Shell

这篇讲的是Shell里那些常被忽略但极其实用的“冷知识”和高效命令。作者从Shell的历史冷知识切入——它比所有流行的Linux内核都要年长,是先有Shell再有Kernel;并且在全球编程语言排名中,shell家族稳居前列,在GitHub上的项目数占比高达8%,与Java相当,印证了它在实战工程中的“宝刀不老”。 文章的核心部分分享了一系列能显著提升效率的命令行技巧。比如用“!$”快速引用上一条命令的最后一个参数,用“sudo !!”一键重跑上条命令并提权,或是用“cd -”在前后两个目录间快速切换。此外,还有像“^old^new”替换历史命令字符串、查看ASCII码表、远程执行脚本等数十个具体用法,每一个都配有清晰的使用场景。 这些技巧并非教科书上的基础内容,而是能立即应用于日常开发、运维工作的“甜点”。无论是想提升命令行效率的新手,还是希望查漏补缺的老手,都能从中找到立刻上手尝试的实用技巧。

IT 累计浏览 16,791

28个Unix/Linux的命令行神器

这篇讲的是28个实用但可能被你忽视的Unix/Linux命令行工具。作者Kristóf Kovács将它们汇集成一份清单,其中既有广为人知的效率利器,也有极为小众却能解决特定痛点的“隐藏宝石”,比如能可视化磁盘占用的ncdu、快速查找文件的fzf,或是生成ASCII艺术图的asciiquarium。 这些工具覆盖了日常开发、系统监控、数据处理等多个场景,核心差异在于它们用极其精练的命令行接口,解决了那些原本需要复杂脚本或多步骤操作才能完成的任务。例如,与其手动解析日志,不如用glow直接渲染Markdown;比起复杂的管道组合,bat提供了带语法高亮的文件查看体验。 这篇文章源自Hacker News上的热门讨论,作者在原始推荐基础上增加了官方链接和简要说明,让每个工具的用途一目了然。它们并非炫技的玩具,而是能切实提升你终端工作效率的实用组件,让命令行环境变得更强大、更人性化。

IT 累计浏览 6,534

统计最近用过的linux命令

这篇讲的是一个轻松实用的bash练习:作者通过编写一个脚本,来统计最近在终端中使用过的linux命令。虽然作者坦言这“没什么具体用途”,但它恰恰展示了一个清晰的实践目标——熟悉bash环境和命令行操作的痕迹。 文章的核心是一个小巧的脚本实现。它利用Linux系统中的历史记录功能,提取并分析用户最近的命令输入。你可以想象,这个脚本会遍历你的命令历史,进行排序、去重或者计数,最终生成一份使用清单。这不仅仅是统计,更是对shell编程中文本处理、循环和管道等基础技能的一次综合练习。 对于初学bash的开发者来说,这类小项目非常有价值。它从一个非常个人化、可感知的需求出发,让你在实现“统计自己用过什么”这个过程中,不知不觉地巩固了脚本编写的多个知识点。文章本身更像是一份作者的练习笔记,展示了一个从想法到简单实现的小闭环,对于想动手但不知从何开始的读者,或许能提供一种朴实的启发。

IT 累计浏览 10,746

每个程序员都应该知道的8个Linux命令

这篇讲的是,程序员在职业生涯中难免要和Linux命令行打交道,你不需要成为专家,但掌握几个核心命令就能高效完成绝大多数任务。文章从实际工作场景出发,精选了8个关键的Linux命令进行讲解。作者强调,熟练运用这些命令后,基本上可以应对任何常见的命令行任务。文章没有停留在罗列命令层面,而是结合了作者自身的使用经验,把工具的实用性和如何上手讲得很清楚,让一个技术点的分享变得具体又接地气。

IT 累计浏览 2,088

Linux下的半自动磁盘清理工具

这篇讲的是一个为解决Linux磁盘空间告急而设计的半自动清理工具。作者的出发点很实际:应用日志持续堆积,最终把磁盘撑满了。虽然系统监控、定时任务这类“标准答案”很多,但作者还是想做个更趁手的工具来应对这类日常又恼人的状况。 工具的核心思路是“半自动”。它不会冒然自动删除所有东西,而是辅助管理员进行决策。主要功能包括扫描指定目录、识别出占用空间较大的文件或日志,并允许用户预设清理规则(比如保留最近几天的文件)。这样一来,既避免了因误删重要日志导致排查困难,又比完全手动清理高效得多,把管理员从反复执行 `du` 和 `rm` 的机械操作中解放出来。 这个工具的价值在于找到了一个平衡点:它承认完全自动化存在风险,而完全手动又太耗精力。通过提供有规则的、可预览的清理建议,它实际上把最耗时的“查找与分析”环节自动化了,把最终的“确认与执行”决策权留给了人。对于那些被日志和临时文件搞得头疼的Linux运维或开发来说,这种思路或许比一个全自动的“清道夫”更让人放心。

IT 累计浏览 3,428

无限递归导致 Segmentation fault

这篇讲的是一个看似莫名其妙的服务器故障。某台服务器上的定时任务——一个 shell 脚本周期性地调用 Java 程序——突然开始频繁报“Segmentation fault”。这个错误通常和底层内存访问有关,很容易让人以为是 JVM 本身或者硬件出了问题。 但作者没有停留在表面。他顺着线索一层层深挖,最终发现问题并不在 Java 虚拟机,也不在宿主环境,而是藏在了业务代码逻辑里。罪魁祸首竟然是代码中一个未能正确终止的无限递归调用。递归层层叠加,最终耗尽了线程栈内存,从而触发了操作系统的这个致命错误。 整个排查过程清晰地展示了如何从令人困惑的系统层错误日志入手,抽丝剥茧,最终定位到应用层的逻辑漏洞。它提醒我们,即使遇到像“Segmentation fault”这样底层、凶险的报错,排查的起点也永远应该是审视最上层的代码逻辑。

IT 累计浏览 2,247

什么是导出(export)环境变量

这篇讲的是 Linux 和 macOS 系统中 `export` 命令的底层作用与实际效果。作者从“为什么我定义的变量在子进程里不见了”这个常见困惑出发,拆解了 Shell 环境变量的继承机制。 核心对比在于:一个普通的 Shell 变量只在当前会话内存中生效,而一旦用 `export` 导出,它就被标记为“环境变量”,并会通过 `fork()` 系统调用复制给子进程的环境块。文章用具体例子演示了不加 `export` 时,脚本或子 Shell 读不到父 Shell 变量的典型场景,也解释了 `env`、`printenv` 与 `export -p` 三者查看环境变量的区别。 作者还提到,`export` 不仅用于添加变量,也能用来修改已存在于环境中的值,这对于临时覆盖路径(如 `PATH`)或配置项非常实用。文章强调,理解“变量作用域”与“环境继承”是写可靠 Shell 脚本的基础,能避免许多诡异的“它明明在那里却找不到”的问题。

IT 累计浏览 4,297

grep: writing output: Broken pipe in iTerm2

这篇文章从一个常见的终端报错切入,探讨了在 iTerm2 中使用 grep 处理大文件时,频繁遇到的 "Broken pipe" 错误。作者首先描述了问题场景:当执行类似 `grep "xxx" filename | head` 的命令,且输出内容很多时,终端会刷出大量错误信息。 其根本原因被归结为管道通信机制与终端缓冲特性共同作用的结果。具体来说,当管道的下游命令(如 head)提前获取到所需行数并退出时,管道被关闭,但上游的 grep 可能仍在向已断裂的管道写入数据,从而触发错误信号。而在 iTerm2 这类现代终端中,其独特的 I/O 缓冲处理可能进一步加剧了这类信号的可见性,导致错误被频繁输出。 针对这一问题,文章提供了实用的解决方案。一个核心思路是使用 `grep` 的 `--line-buffered` 选项,确保输出立即刷新,减少缓冲区积压。另一个方法则是用 `tr` 命令来替代直接的管道连接,以改变输出缓冲的行为。这些方法能有效抑制 Broken pipe 错误的产生。 总的来说,这篇文章清晰地剖析了一个在命令行高阶使用中容易遇到,但常被误解的棘手问题。它不仅解释了“为什么会发生”,更给出了“如何解决”的具体命令,为日常使用 grep 和管道的开发者提供了一份清晰的避坑指南。

IT 累计浏览 3,172

大文件重定向和管道的效率对比

这篇讲的是当处理大文件时,shell 中 `>` 重定向和 `|` 管道这两种看似相似的操作,效率为何天差地别。作者从微博上的一个具体问题出发,深入底层,拆解了它们的核心差异。 重定向 `>` 本质是 shell 自己先打开(或创建)目标文件,然后等待命令执行完成,最后将所有输出一次性写入。而管道 `|` 则是通过 `fork` 创建子进程并建立管道,父进程和子进程通过管道进行 I/O 交互。这个过程中,数据是流式的,并且涉及进程间通信。 在处理GB级别的大文件时,这种差异会被急剧放大。重定向的“一次性写入”模式会导致内存占用激增,甚至因缓冲区压力而性能骤降;而管道的流式处理则内存友好,但其效率依赖于上下游命令的 I/O 模式是否匹配(比如是否都用了缓冲优化)。 文章最终的结论很明确:重定向适合将完整输出保存为文件,管道则专长于将一个命令的输出作为另一个命令的输入进行流式处理。两者并无绝对的优劣,关键在于理解其机制,并根据实际场景——是保存整个输出,还是进行数据流转换——来做出正确选择。