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

标签:bash

共 41 篇相关文章

IT 累计浏览 3,084

USE(Universal Script Executor):一个基于SSH的本机、远程机器统一视图的通用脚本执行器

这篇讲的是作者的第一个开源项目,USE(Universal Script Executor)。他想解决一个运维中很常见的痛点:如何用一个统一的入口,来管理并执行分布在多台不同机器上的脚本。核心方案巧妙地组合了PHP、Bash和SSH这三种常见技术,通过SSH协议连接到各个节点,从而为用户构建出一个“本机与远程机器无差别”的统一视图。这样,集中管理和执行运维脚本就变得非常直接。 作者设计的出发点在于“无侵入”——USE作为管理工具,不需要在目标机器上安装额外的代理或修改现有服务,很大程度上降低了部署和维护的复杂度。尽管项目使用PHP来实现,但这更多是为了快速验证“组合现有工具解决问题”这一核心思路。作者也坦诚了目前的依赖限制(需要预先配置PHP环境和SSH信任),并分享了未来的演进方向:使用C++直接调用libssl库来重写,以彻底消除这些前置条件,让工具的使用更加轻量和原生。 整个项目体现了典型的实用主义工程思维:从具体需求出发,选择最直接有效的技术栈来验证想法,并将集中管理与无干扰操作作为关键的设计目标。

IT 累计浏览 4,300

bash shell - sed及awk文本捕获及替换

这篇讲的是如何用sed和awk处理一个看似简单、实则棘手的字符串操作问题:给一个包含多个背景图片URL的字符串,一次性给每个URL后面追加一段签名串。文章从一个具体的需求出发,直指bash shell中正则操作的便利性问题。 作者首先分析了用sed解决的思路:虽然可以逐个替换,但要在一条sed命令里同时捕获并替换字符串中多个不连续、结构相同的模式(比如多个图片URL),实现起来非常别扭,甚至可能无法直接完成。这揭示了sed在处理“一行内多模式捕获与替换”这类任务时的局限性。 相比之下,awk展现了它的优势。因为awk是基于“记录-字段”的模式,并支持关联数组和编程逻辑,可以更灵活地在一次文本处理中匹配所有符合模式的内容,并执行复杂的替换操作。作者通过代码示例清晰地展示了awk方案如何更直接、更优雅地实现目标。 这篇文章的核心价值在于,它并非简单地介绍命令语法,而是通过一个实战案例,对比了sed和awk在不同场景下的适用边界。它告诉我们:当需要对一行文本内的多个离散模式进行捕获和复杂处理时,awk通常是比sed更顺手的工具。这种基于具体问题的工具选型思考,对日常的脚本编写很有启发。

IT 累计浏览 7,107

终端二则

这篇讲的是作者在终端颜色显示上的一次认知更新。在此之前,他一直以为终端只能支持 16 色,根源是早期使用 SecureCRT 时,切换不同终端类型(比如“Linux”默认黑底,“XTerm”默认白底)后都需要手动选颜色方案,于是便将这种限制简单归因于“VT100”这类旧协议。直到最近他才发现,通过在 `.bashrc` 配置文件中添加几行简单的配置,就能轻松启用 256 色模式,彻底打破了之前的错误假设。 文章从个人经历出发,拆解了一个容易被忽视的技术细节。它提醒我们,某些过时的印象可能并非技术本身的限制,而是源于早期工具的默认行为或不完整的探索。对于日常在终端中工作的开发者而言,确保环境正确配置以获得更丰富的视觉反馈,其实只需要一行配置的距离。

IT 累计浏览 2,398

Mac下如何添加开机启动后台Bash程序?

这篇讲的是如何让Mac开机后自动在后台运行一个Bash脚本,解决作者每天手动重复执行同一命令的烦恼。作者从实际痛点出发——厌倦了每次开机都要手动启动一个用于SSH连接的脚本,哪怕已经免密登录,依然觉得繁琐。 文章的核心方案是利用macOS系统自带的`launchd`守护进程来管理自启任务。具体操作上,作者展示了如何创建一个`.plist`(属性列表)文件,在其中指定脚本的执行路径、运行参数以及“在登录时启动”等关键配置。将这个配置文件放入系统对应的目录后,就能让指定的Bash程序在用户登录时自动、静默地在后台运行,无需任何人工干预。 通过这个清晰的设置,作者成功将重复劳动交给了系统,实现了开机即自动执行预设任务。文章提供了一套具体、可复现的系统级自动化方案,让Mac用户也能轻松管理后台服务,把精力留给更重要的事情。

IT 累计浏览 4,331

.bash_pfofile、.bash_logout和.bashrc

很多 Linux 用户都遇到过这个困惑:.bash_profile、.bashrc 和 .bash_logout 这几个文件到底该往哪里写配置?这篇文章就从这个常见问题出发,清晰地拆解了这三个文件的加载时机、作用域和典型用途。 文章的核心对比在于交互式登录 Shell 与非登录 Shell 的区别。作者指出,.bash_profile 仅在用户首次登录时加载,适合放置需要在整个会话中生效的环境变量(如 PATH)。而 .bashrc 则在每次打开新终端时执行,因此更适宜放置别名(alias)和函数这类针对具体交互的设置。至于 .bash_logout,则在用户退出登录时执行,可以用来清理临时文件或记录日志。 文章最终给出了一个简洁的实践建议:将全局的、静态的配置放在 .bash_profile,而将频繁变动的交互式配置放在 .bashrc。这个分类原则让配置管理变得有条理,也避免了因文件加载顺序导致的潜在问题。

IT 累计浏览 8,088

Bash 小技巧:给目录加上书签,快速切换目录

这篇讲的是命令行开发中一个让人头疼的日常痛点:频繁切换目录。作者从“每天敲 cd 都敲得想吐”这一生动场景出发,指出尽管 Bash 内置了 cd -、pushd/popd 等命令,但在面对复杂目录层级时,它们的便利性依然有限。 文章随后介绍了一种更顺手的方案——给常用目录“加上书签”,从而实现快速跳转。这个小技巧巧妙地解决了路径记忆和快速切换的难题,能有效解放被 Tab 键“摧残”的手指,提升在终端下的工作效率。 对于经常与命令行打交道的开发者来说,掌握这种目录管理技巧,可以避免在繁琐的路径跳转上浪费时间,让工作流更加顺畅直接。

IT 累计浏览 4,928

bash下利用trap捕捉信号量

作者从实际场景出发,为生产环境编写一个安全的bash维护脚本,希望脚本在退出时能清理启动的后台进程与临时文件,因此引入了`trap`命令来捕获信号。但在测试中遇到了一个有趣的现象:脚本能正确响应`CTRL+C`(SIGINT)信号,却对`kill`命令发送的SIGTERM信号无动于衷。 经过分析,作者找到了根因:问题的关键在于脚本内部有一个`sleep 30`的长等待。`kill`命令确实发出了SIGTERM信号,但此时脚本正沉浸在`sleep`中,信号的处理被阻塞了。只有等到这个长达30秒的`sleep`结束,脚本才会真正“醒过来”并处理该信号。 这篇文章揭示了在使用`trap`处理信号时一个容易忽略的细节:信号的捕获并非总是立即发生的。如果脚本正忙于执行某个阻塞性命令(如`sleep`、网络请求或长时间的I/O操作),那么信号处理函数需要等到当前命令执行完毕后才会被调用。这个发现提醒我们,在编写需要快速响应退出信号的脚本时,需要仔细考虑主循环或关键操作的阻塞时长与信号处理时机。

IT 累计浏览 7,804

bash shell里反斜杠(backslash)和字符串原文输出(无转义)

这篇讲的是Bash Shell里一个细微但常让人困惑的点:反斜杠的转义行为,以及如何让字符串“原样”输出。 作者从逐行读文件的常见场景切入,揭示了问题所在。在交互式终端输入`\$`时,反斜杠会“吃掉”后面的美元符号,导致Shell试图执行空命令而报错;但在脚本文件里,同样写法却可能正常工作,因为文件读取的上下文不同。这种差异很容易让人踩坑。 文章的核心,是清晰对比了反斜杠作为转义字符与作为普通字符的区别。关键差异在于:单引号内的字符串,其中的反斜杠会失去转义能力,所有字符都被视为字面意思,这正是实现“无转义”原文输出的最直接方式。比如`echo 'Hello\nWorld'`就会原样输出`Hello\nWorld`,而不是换行。 作者通过具体命令演示了如何在不同场景(交互、脚本、变量赋值)中正确处理反斜杠,并给出了使用单引号保持字符串原文的可靠方法。对于经常编写Shell脚本的开发者来说,厘清这个转义逻辑,能避免许多因上下文不同而产生的诡异行为。

IT 累计浏览 2,610

bash shell杂记

这篇讲的是作者在给模块编写编译脚本时,积累的一些 bash shell 实用技巧与踩坑记录。它不是系统性的教程,而是更像一个“经验工具箱”,直击脚本编写中的真实痛点。 文章从解决“编译规则”这个具体任务出发,穿插了变量处理、条件判断、循环控制等常见操作。比如如何优雅地处理文件路径、怎样避免展开时的意外陷阱,以及一些能让脚本更健壮的小技巧。这些都源于实际项目,带着“解决过具体问题”的痕迹。 对于常和 shell 打交道的人来说,里面提到的那些不起眼但关键的语法细节和执行逻辑,往往就是平时脚本报错、行为诡异的根源。它分享的不仅是命令本身,更是如何思考和调试 shell 脚本的视角。

IT 累计浏览 5,281

.bash_profile和.bashrc的什么区别

许多刚接触Linux的同学会困惑:为什么环境变量要分别写在.bash_profile和.bashrc里?这篇讲的正是这两个“孪生”配置文件的核心区别。作者从登录流程与交互式Shell的启动机制出发,清晰地梳理了.bash_profile仅在登录时(如SSH连接、切换用户)加载,而.bashrc则在每次打开新终端窗口时都会执行。这意味着,像PATH这样的全局环境变量通常放在.bash_profile中,而alias别名、个人开发脚本等更适合写在.bashrc里,以免重复定义或影响非交互式脚本。文章还点出了一个常见陷阱:许多图形界面终端实际运行的是“非登录式交互Shell”,只读.bashrc,因此若只配置了.bash_profile会导致设置不生效。作者通过具体场景的举例,帮读者建立了“按需配置、分层管理”的清晰思路。

IT 累计浏览 5,420

【总结】美化bash,python的soap client,python获取系统编码函数

这篇讲的是三个能提升日常开发效率的实用技巧。作者从最具体的痛点出发:面对超长的终端路径时,那挤到屏幕右边、难以看清的光标确实让人头疼。文章分享了一个用PROMPT_COMMAND来美化和简化bash提示符的方案,让路径显示更紧凑清晰。 接着,作者转向Python生态,介绍了如何使用现代库zeep来构建SOAP客户端,并对比了传统lxml方案,指出了zeep在代码简洁性和自动处理WSDL方面的优势。最后,关于“Python获取系统编码”这个经典坑,文章点明了直接调用sys.getdefaultencoding()可能拿不到进程实际编码的问题,并给出了结合locale环境变量的更可靠获取方式。 虽然都是些“小”技巧,但文章把每个点的背景、核心做法和关键细节都讲得很实在,对经常和终端、老旧接口或编码问题打交道的开发者来说,这些经验能直接用在刀刃上。

IT 累计浏览 5,477

使用Shell快捷键助你一臂之力

这篇讲的是作者从多年的Linux和Unix系统使用经验出发,分享如何利用Shell中的快捷键来显著提升命令行操作效率。文章的核心并非罗列所有快捷键,而是聚焦于那些能真正改变工作流、让你的手指告别在键盘和鼠标间反复跳跃的高频操作。 作者从实际场景切入,比如如何快速移动光标、编辑命令行内容、进行历史命令搜索等,并具体演示了如 `Ctrl+A`(跳到行首)、`Ctrl+K`(删除到行尾)、`Ctrl+R`(反向搜索历史)等快捷键的妙用。这些技巧的巧妙之处在于,它们能将原本需要多次按键或鼠标点击的动作简化为一个组合键,让复杂命令的构建和调试变得行云流水。 文章的立意很实在,不仅在于节省时间、提升工作效率,更深层的目的是“保护键盘”——减少不必要的机械操作,从而间接呵护操作者的手腕。对于任何日常与终端打交道的开发者、运维或系统管理员来说,这些沉淀下来的经验是让枯燥的命令行交互变得得心应手的实用技巧。

IT 累计浏览 10,075

利用脚本分析日志并利用snmp自定义OID,再通过cacti画图

这篇讲的是如何让沉睡的日志数据“活”起来,通过一套组合拳让它们变得直观可见。作者从一个常见需求出发:我们手头有大量日志,想从中提取关键指标进行长期监控和趋势分析,但Cacti自带的模板未必直接支持我们独特的日志格式。 为此,他提出了一条清晰的路径。第一步是编写解析脚本,从原始日志中提取出我们关心的数值。核心的巧妙之处在于下一步:没有直接用脚本把数据推给Cacti,而是通过SNMP协议,为这些数据注册了自定义的OID。这就相当于给每个指标发了一个“身份证”,让它们能被标准化地识别和访问。 最后,在Cacti中配置相应的数据查询和图形模板,去轮询这些新暴露的OID,数据便自然汇聚成了直观的图表。整套方案打通了从原始文本日志到可视化监控的全链路,让脚本的解析能力、SNMP的开放性和Cacti的绘图能力各展所长,最终实现了日志数据的可视化监控。

IT 累计浏览 5,021

Bash Shell 快捷键

这篇讲的是提升Bash命令行操作效率的必备快捷键。文章从最常用的CTRL键组合入手,详细列出了如跳转行首(Ctrl+a)、行尾(Ctrl+e)、终止命令(Ctrl+c)以及快速清屏(Ctrl+l)等十余个核心快捷键的具体功能。 其中特别点出了几个高频实用场景:通过Ctrl+r反向搜索历史命令可以快速复用长命令;Ctrl+u能在输入密码出错时一键删除整行;Ctrl+w则专门用于删除最后一个输入的单词,适合代码编辑时的局部修正。这些细节让抽象的快捷键描述变得具象可感。 对于日常和服务器打交道的开发者或运维人员来说,掌握这些快捷键能显著减少在命令行界面的时间开销,将注意力更集中于任务本身。文章提供的清单很实用,是那种存下来偶尔翻看就能立即提升效率的参考资料。

IT 累计浏览 5,169

Linux常用命令,命令行技巧

这篇讲的是,如何在Linux命令行下更聪明、更高效地干活。 文章没有停留在罗列`ls`、`cd`这些基础指令,而是直接切入实战场景,对比了多组“常被用到但容易混淆”的命令。比如,它详细拆解了文件搜索领域里`find`命令与新兴工具`ripgrep`的差异:前者功能全面但速度有时是痛点,后者通过预编译索引和智能忽略规则,能在大型代码仓库中实现秒级检索。这种对比立刻让读者明白了工具的适用边界。 在文本处理环节,文章对比了`grep`与`ripgrep`(再次出场)、`awk`与`sed`各自的核心优势。它指出,简单的模式匹配与替换用`grep`和`sed`更直接,而一旦涉及复杂的列提取或格式化处理,`awk`的编程能力就显现出价值。作者还穿插了具体案例,展示了如何组合`xargs`与`find`来批量处理文件,或者用`<( )`进程替换巧妙实现命令输出的即时比较。 对于开发者而言,文章中关于`git`命令行技巧与常见别名(alias)设置的部分尤为实用,它演示了如何用一条复合命令快速完成`git add -p`后的选择、提交和推送,将原本繁琐的交互式流程自动化。整篇文章的铺陈就像一个经验丰富的工程师在分享他的终端快捷键,通过扎实的对比和场景化的技巧,为读者勾勒出了一条从“会用”到“巧用”命令行的清晰路径。

IT 累计浏览 5,578

懒人连ssh不输密码若干大法

这篇文章从“超级懒人”的视角出发,为系统管理员和运维人员提供了一套提升SSH连接效率的实战方案。作者坦言自己厌倦了频繁在多台机器间跳转时反复输入密码的繁琐过程,因此总结了几种切实可行的免密登录方法。 文章核心围绕着不同场景下的解决方案展开:对于Linux/Mac用户,详细讲解了基于SSH密钥对的经典配置流程;针对临时或一次性连接需求,介绍了`sshpass`这类工具的快捷用法;此外,还探讨了`ssh-agent`和`ForwardAgent`在多级跳转时保持密钥会话的技巧。作者并非单纯罗列命令,而是结合了自己作为管理员的操作习惯,分析了每种方法适用的具体情境。 整体来看,这是一篇非常实用的经验分享。它没有复杂的理论,而是直击日常运维中的一个具体痛点——如何用最少的交互完成安全、便捷的远程连接。文中提到的方法和思路,能帮助读者根据自己常用的工作流,选择最适合的“偷懒”方式,从而把更多精力集中在真正重要的运维任务上。

IT 累计浏览 3,361

给shell脚本传递变量

这篇讲的是在shell脚本中,如何灵活地给程序传递变量。作者从日常运行程序时定义变量的需求出发,直接点出了一个非常普遍的场景:比如在执行命令时,如何动态地把一个值塞给脚本里的变量。 文章具体拆解了几种主流的传递方式,比如通过命令行参数、设置环境变量,或者利用临时文件等。每种方法的适用场景和注意事项都有清晰说明。比如,环境变量适合全局配置传递,而命令行参数则更适合一次性的动态输入。 最后文章也提到了不同方式在安全性和便捷性上的权衡,帮助读者根据实际需求选择最合适的方案。

IT 累计浏览 4,325

懒人连ssh不输密码若干大法

这篇来自“超级大懒人”系统管理员的文章,从“厌倦了每次SSH连接都要敲密码”的真实痛点出发,分享了若干种优雅解决SSH免密登录的实用方法。作者没有止步于最基础的公钥认证,而是层层递进,介绍了从最经典的公钥认证配置、利用ssh-agent缓存密钥,到通过SSH config文件简化复杂连接命令等多个层次的方案。 文章的核心在于展示如何像拼乐高一样,组合使用这些技巧来构建一个极致高效的远程工作流。每一种方法都比前一种在便利性上更进一步,最终目标是让繁琐的登录步骤消失,达到“敲下回车即刻登录”的体验。对于频繁需要跨机器操作的运维和开发人员来说,这套组合拳能有效减少重复劳动,将注意力集中到真正的任务上。

IT 累计浏览 4,040

shell常用的判断条件

这篇文章整理了 Shell 脚本中常用的判断条件,是一篇典型的“知识点对比类”内容。它没有停留在罗列语法,而是将 `-f`、`-d`、`-z`、`-n`、`-eq` 这些看似相似的测试操作符,放在了具体的使用语境中进行对比。 例如,文章清晰地区分了文件类型测试(如 `-f` 判断普通文件、`-d` 判断目录)、字符串状态判断(`-z` 判断是否为空)以及数值比较(`-eq`)。更关键的是,它点出了每个条件最适用的典型场景,帮助读者在编写脚本时做出正确选择。比如,在检查用户输入是否为空时,应该使用 `-z "$var"` 而不是错误的语法。 这种结构化的梳理,不仅让初学者能快速掌握基础,也为有经验的开发者提供了一份清晰的速查指南,避免在编写复杂逻辑时混淆使用。对于想写出健壮、可维护 Shell 脚本的人来说,这是一份非常实用的参考。

IT 累计浏览 11,485

linux 建立两台机器的信任关系

这篇讲的是如何让两台 Linux 机器互相信任,实现免密码访问。作者从自动化脚本的常见痛点切入:当脚本需要跨机器执行操作(比如用 `scp` 传文件)时,每次都要手动输入用户名和密码,这既繁琐又违背了自动化“无人值守”的初衷。 文章给出的解决方案是建立基于 SSH 的信任关系。核心步骤包括在本机生成一对密钥(私钥和公钥),然后将公钥安全地复制到目标机器的授权列表中。这样,当再次发起 SSH 连接或 SCP 操作时,系统会通过密钥对自动完成身份验证,全程无需人工干预。 这种配置对于运维、开发人员以及需要编写批处理任务的场景来说非常实用。它省去了重复输入密码的步骤,让跨机器协作的脚本能够真正“跑”起来,是提升工作效率的一个基础而重要的技巧。