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

标签:shell

共 90 篇相关文章

IT 累计浏览 2,239

Bash 中的 & 符号和文件描述符

这篇讲的是 Bash 中 `&` 符号和文件描述符的深入应用,远不止于用 `&` 把进程丢到后台那么简单。作者从大家熟悉的 `>` 重定向出发,点明了其背后的实质——文件描述符 `1`(标准输出)。接着,文章系统地梳理了 `0`(标准输入)、`1`(标准输出)和 `2`(标准错误)这三个标准文件描述符,并展示了如何用它们精准控制命令的输出流向。 文章的核心亮点在于剖析了文件描述符操作的“顺序陷阱”。例如,`find ... 1>services.txt 2>&1` 能成功将所有结果(包括错误)写入文件,但仅仅调换顺序变成 `2>&1 1>services.txt`,错误信息就会直接打印到终端。作者通过 Bash 从左到右的处理逻辑解释了其中的原因:文件描述符是“通道”,在打开 `1` 指向文件之后,再将 `2` 导向 `1`,错误才会正确流入文件。 最后,文章回归到 `&` 的另一个关键角色,介绍了 `&>` 这个简洁的语法糖,它等价于 `2>&1`,能一步到位地合并标准输出和标准错误。掌握文件描述符的工作原理,是写出健壮、可控的 Bash 脚本的重要一步。

IT 累计浏览 2,261

如何从 Linux 命令行安装软件

这篇讲的是,即使在图形界面盛行的今天,许多资深Linux用户依然偏爱用命令行安装软件——因为它更快、更直接。文章从25年Linux用户的经验出发,介绍了包管理器的核心概念:它如何像一个智能助手,自动处理应用的安装、更新与依赖关系。 作者重点对比了两大主流系统:Debian、Ubuntu等基于`.deb`的发行版,常用`apt`或`dpkg`命令;而Red Hat、CentOS等基于`.rpm`的系统,则主要使用`yum`、`dnf`或`rpm`命令。文中清晰列出了从安装、卸载到升级的具体命令示例,比如`sudo apt install`与`sudo dnf install`,让读者能直观看到操作差异。 无论你使用哪种发行版,掌握对应的包管理命令行工具,都能让软件管理变得更高效。文章最后也提醒,一旦习惯了这种方式,你会发现它比图形界面工具还要快。

IT 累计浏览 2,094

如何在 Linux 中使用 find

这篇讲的是如何真正发挥 Linux 中 `find` 命令的威力。作者从最简单的 `find /` 命令会输出海量无用信息这一常见困境出发,手把手地演示了如何通过组合使用各种参数,让这个工具变得精准而高效。 文章从查找指定名称(`-name`)和大小写不敏感(`-iname`)的基础开始,迅速引入了使用 `-o` 进行逻辑或组合,以及用 `-type` 区分文件与目录。这些是让搜索结果从“杂乱”变得“可用”的关键一步。接着,文章展示了更高级的过滤条件:如何通过 `-mtime` 按修改时间(如过去一周)筛选,通过 `-size` 找出占用大量空间的大文件,通过 `-owner` 定位特定用户拥有的文件,甚至通过 `-perm` 查找权限可能设置不当的文件。 作者并没有停留在列举参数上,而是强调 `find` 的真正潜力在于将这些测试条件与布尔逻辑结合,并最终可以通过 `-exec` 或 `-delete` 对找到的文件直接执行操作。整篇文章从一个朴素的需求切入,层层递进地给出了解决方案,完整展现了如何将一个基础命令用成系统管理的利器。

IT 累计浏览 1,800

每个 Linux 新手都应该知道的 10 个命令

这篇讲的是,看似熟悉的互联网其实运行在 Linux 之上——从 Android 手机到超级计算机,90% 的网络服务器都依赖它。文章从这个事实出发,为那些想从桌面环境踏入命令行世界的用户,梳理了必须掌握的10个基础命令。 作者没有停留在概念层面,而是具体展示了每个命令的用途和细节。例如,`ls` 用来查看文件目录,`cd` 用于目录跳转(并解释了目录名含空格时需用反斜杠),`mv` 负责移动文件。文章还特别整理了一组能大幅提升效率的终端快捷键,比如用 `CTRL+K` 剪切、`ALT+B` 按词回退,并举例说明如何快速修正命令行中的拼写错误。 这些命令构成了与 Linux 系统交互的基础语法。掌握它们,你就能创建 (`mkdir`, `touch`)、查找 (`locate`)、移动 (`mv`) 乃至删除 (`rm`, `rmdir`) 文件与目录,并设置定时任务 (`at`)。作者将它们称为“简单却有用”,正是因为它们是理解更复杂系统操作的第一步。

IT 累计浏览 1,562

如何在 Linux 中的特定时间运行命令

这篇讲的是,在Linux系统里如何为一条命令设定执行时限,时间一到就自动让它“收工”。文章的出发点很实际:作者用 `rsync` 传输大文件时,既不想干等20分钟,又不想手动中断进程。他发现系统里其实有现成的工具能轻松实现“定时关闭”。 文章核心介绍了两种解决方案。最常用的是 `timeout` 命令,它属于GNU coreutils包,几乎开箱即用。用法很简单,例如 `timeout 10s tail -f /var/log/pacman.log` 就能让 `tail` 命令只运行10秒。它还支持分钟(m)、小时(h)、天(d)等单位,并且可以通过 `-k` 参数设定一个超时的“宽限期”。 另一种是 `timelimit` 程序,功能比 `timeout` 更丰富,可以分别设置警告信号、终止信号及其时间点,为进程提供更优雅的退出过程。它需要在Debian或Arch等发行版中额外安装。 这两个工具对于那些可能长时间运行、甚至可能冻结系统的命令来说非常实用,能有效防止资源被无限占用。文章通过一个日常运维场景,清晰地展示了两种工具的用法和差异。

IT 累计浏览 2,187

我正在运行的 Linux 是什么版本?

“我正在运行的 Linux 是什么版本?”——这个问题看似简单,却常常指向两个不同的答案:你究竟想知道内核的版本,还是整个操作系统的发行版?对于需要排查驱动问题或确定软件包管理方式的用户来说,这两者都至关重要。 这篇文章没有空谈概念,而是直接给出了实操路径。要找出内核版本,作者推荐了最简洁的命令 `uname -srm`,一行输出即可包含内核名称、版本号和硬件架构。对于发行版信息,检查 `/etc/os-release` 文件是最通用的方法。文章以 Fedora 为例,展示了该文件不仅包含名称与版本号(如 "Fedora 28"),还透露了更丰富的上下文,比如变体(Workstation Edition)。 更巧妙的一点是,作者指出了 `os-release` 文件中 `ID_LIKE` 字段的实际价值。比如 CentOS 的这个字段明确写着它像 RHEL,这为用户在寻找解决方案时提供了关键线索——你可以放心地参考 RHEL 的文档来处理 CentOS 上的问题。这对于在庞大 Linux 生态中导航的用户来说,是一个非常实用的技巧。

IT 累计浏览 1,760

在 Linux 上复制和重命名文件

这篇讲的是 Linux 命令行里文件操作的进阶玩法。它跳出了大家最熟悉的 cp 和 mv,介绍了几个能显著提升效率的工具。 作者从基础的 cp/mv 命令切入,指出它们在处理批量文件时的局限性。接着展示了更高效的替代方案:用 tar 命令快速创建整个目录或符合模式的文件归档;用 for 循环脚本批量为文件添加备份后缀;以及利用 Shell 的花括号扩展,用一条 cp 命令完成长文件名的备份。 文章的核心亮点在重命名部分,详细演示了 rename 命令的威力。它通过灵活的 Perl 正则表达式,可以一次性完成批量操作,例如将所有大写字母转为小写、统一移除或添加文件扩展名,甚至替换文件名中的特定字符串。通过对比 mv 的单个操作与 rename 的批量处理,突显了后者在特定场景下的不可替代性。 总的来说,这篇文章不是泛泛而谈,而是通过具体、可立即上手的命令示例,展示了几种被低估的文件管理技巧。掌握这些方法,能让你在日常维护中处理大量文件时事半功倍。

IT 累计浏览 1,399

如何在命令行中整理数据

数据审计中常遇到格式错误、乱码、控制字符等棘手问题,而许多人却执着于寻找昂贵的专用工具或编写复杂脚本。这篇文章作者结合自身兼职数据审计的经验,提出了一个返璞归真的解决方案:直接使用命令行工具链。 作者处理过十万至百万行、包含多达两百个字段的导出表格,发现混乱无处不在。他指出,人们往往陷入“数据悲伤”的五个阶段,最终才承认需要帮助,并误以为必须依赖特定软件。实际上,Bash shell本身就是一个强大的工具箱。grep、cut、awk这些经典的文本处理器,在应对脏数据时既可靠又高效。 文章用一个具体例子展示了威力:如何用一行组合命令(tail、cut、awk),在短短4秒内从超过112万条记录中精准找出某个字段的最长数据项,并封装成可重复使用的函数。作者强调,这种方法的安全优势尤为突出——所有操作都在数据库外部进行,使用的是导出后的纯文本副本,因此完全不影响原始数据库的结构与安全。 对于受过Unix训练的读者,这或许是一次怀旧;但对于更多人,它是一个实用提醒:在追求复杂方案前,不妨先“保持冷静,打开一个终端”。

IT 累计浏览 2,339

find命令详解

这篇讲的是Linux系统里人人都会用、但未必人人都精通的`find`命令。作者开篇就直指那些让很多人困惑的细节:比如`find / -mtime +7`和`find / -mtime -7`到底在找什么?为什么`-exec`后面有时是`{}`加`+`,有时是`{}`加`\;`? 文章的核心是把`find`的参数拆解成四大类:Tests(条件测试)、Actions(执行动作)、全局选项和位置选项。重点落在Tests部分,这里把时间参数讲得非常透彻。`-mtime 7`并不是“修改于7天前”,而是“修改时间落在当前往前第7个24小时那个区间内”;加上`+`号就变成了“大于7天前”,加上`-`号则是“7天以内”。这种对数字范围的精确界定,是很多教程一笔带过的。文章还对比了`-anewer`、`-newer`等不同时间比较参数的用法,甚至提到了`-newerXY`这种能跨时区比较(如修改时间对比变更时间)的进阶技巧。 除了时间,文章也梳理了如何按用户、权限来筛选文件,并穿插了`-ls`、`-exec`等常用动作的实际案例。整体来说,它不是一份简单的命令手册,而是通过厘清易混淆的概念(尤其是时间参数和`-exec`的语法),帮助读者把`find`从“会用”提升到“精准使用”的层次。对于需要经常处理文件系统的运维或开发人员,这些细节差异直接决定了命令的成败。

IT 累计浏览 1,611

shell实现ssh自动登录

作者因为在Mac下没找到顺手的SSH客户端,干脆自己用expect写了一套自动登录方案。这篇分享的核心是一个名为`ssh_auto_login`的expect脚本,它能自动处理SSH连接中的密码验证,甚至支持通过通道机(跳板机)进行动态密码认证和内网服务器跳转,省去了手动输入的繁琐。 配合一个更上层的shell启动器脚本,作者实现了通过简单命令(如`./launcher 49`)快速连接不同服务器(如联通、电信线路或特定IP)的功能。整个方案无需复杂配置,特别适合需要频繁通过跳板机访问内网服务器的运维或开发场景。虽然脚本中的服务器IP和通道机逻辑是为特定环境编写的,但其处理SSH交互、动态密码匹配的核心思路清晰,稍作修改就能适配其他服务器。作者用这个实用小工具,演示了Shell脚本在自动化运维中解决具体痛点的灵活价值。

IT 累计浏览 3,628

初入运维的小伙伴,别再问需不需要学Python了

这篇讲的是运维人员该不该学Python的老话题。作者从百度知道上一个常见的提问切入,观点很明确:掌握一门开发语言,尤其是Python,已经是高级运维工程师的必备技能。 文章认为,不会开发,就难以深入理解业务流程、优化性能,也无法在复杂场景(如数千台服务器)中实现真正的自动化运维,只能依赖通用工具或拼凑开源软件。而Python恰好能胜任,它既是强大的脚本语言,满足绝大部分自动化需求,又能用于开发后端的C/S架构和Web界面,让运维人员有能力构建自己的运维平台,从而体现核心价值。 作者也对比了其他语言。比如,PHP更专注于Web;Java显得臃肿;C++在运维场景中多数时候“是为了来装B的”;而Go语言虽新,但预计不会成为运维开发的主流。同时,针对“Python效率低”的说法,作者指出程序效率更取决于开发者本身,并以Tornado框架在Python下实现高并发作为例证,强调语言本身的影响只占一部分。 文章的核心结论是:别再纠结“需不需要学”,Python因其简洁、全面和生态优势,就是运维转向开发、提升竞争力的首选工具。

IT 累计浏览 1,894

awk调用shell,并将变量传递给shell

这篇讲的是在awk脚本中调用Shell并传递变量的一个具体技巧。作者从一个常见的开发场景切入:当awk处理流程需要借助外部Shell命令完成时,如何让Shell能“感知”到awk上下文中的变量。 文章聚焦于实现这一操作的核心函数`system()`,并指出了一个容易忽略但至关重要的语法细节:调用Shell脚本时,命令字符串的拼接需要特别注意空格的使用,正确的写法是`system("sh my.sh " $var)`。通过提供的简单示例,可以清晰看到变量是如何从awk环境传递到Shell脚本内部,并被正确处理的。 对于经常编写文本处理流水线或复杂运维脚本的开发者来说,掌握这种跨语言调用的变量传递方法,能极大增强脚本的灵活性和自动化能力,是提升工作效率的一个实用知识点。

IT 累计浏览 3,917

Linux上删除空行的方法

处理文本数据时,清理空行是常见需求。这篇文章系统介绍了 Linux 下四种最常用的工具:grep、sed、awk 和 tr,它们都能轻松达成目标,但各有其巧妙的切入点。 作者没有止步于罗列命令,而是细致地指出了它们的关键差异。例如,`grep .` 和 `grep -v '^$'` 都能过滤空行;而 `sed '/^\\s*$/d'` 和 `awk NF` 则能更进一步,连只含空格、制表符等“空白内容”的行一并删去。这个细节在处理格式不规整的日志或配置文件时非常有用。 文章还特别提到了一个挺有意思的细节:在处理海量数据时,`grep .` 这种写法的执行效率通常比较高。这从侧面提醒我们,选择工具不仅要考虑功能是否满足,性能表现也是重要的考量因素。整体来看,文章通过具体的命令示例和对比,为读者提供了一个清晰实用的命令行工具选用指南。

IT 累计浏览 2,795

Linux系统巡检常用命令

这篇讲的是Linux系统日常巡检的“工具箱”,作者把运维中最常敲的几十条命令按用途做了梳理。从用`uname -a`和`cat /proc/cpuinfo`摸清系统底牌,到用`free -m`、`df -h`、`top`实时监控内存、磁盘与进程状态,再到借助`netstat`、`iptables`、`ifconfig`快速扫描网络连通性与安全设置——几乎覆盖了服务器健康检查的所有关键维度。 文章特别指出,像`uptime`和`cat /proc/loadavg`这样的组合,能让你同时看清系统负载与运行时长;而`ps -ef`配合`w`命令,既能看到全部进程,也能锁定当前登录的活跃用户。对于需要回溯问题的场景,`last`查看登录日志、`dmesg`排查硬件启动信息这些命令也都没落下。整份清单直接贴进终端就能用,省去了新手翻文档的时间,对需要快速上手Linux运维的人尤其友好。

IT 累计浏览 8,405

Linux 常见高危操作

这篇讲的是Linux系统里那些容易被忽视却可能导致灾难性后果的操作。作者从日常运维中常见的危险命令入手,清晰地指出了三个典型“雷区”。 首先是直接操作设备文件。像`echo " " > /dev/sda`或`dd if=/dev/zero of=/dev/sda`这样简单的命令,能瞬间破坏整个磁盘的文件系统与数据,且几乎无法恢复。其次是极具误导性的`rm -rf /$SOME_DIR_TOBE_DEL/`,一旦变量未赋值,就会变成删除根目录的“终极指令”。最后是重定向使用不当,错误的写法可能覆盖`/dev/null`,导致系统标准输出和错误流混乱,影响全局服务。 文章没有复杂的理论,而是用具体命令示例揭示了风险根源——对命令和系统底层文件缺乏敬畏。它提醒每一位Linux使用者,在键入回车前务必确认命令含义,因为这些操作往往没有“撤销”选项。

IT 累计浏览 4,362

推荐几本 Unix/Linux 经典书

这是一份从入门到内核的 Unix/Linux 经典书单。作者结合自身阅读经验,为不同阶段的学习者梳理了那些历经时间考验的“案头必备”。他认为,在信息爆炸的今天,与其浪费时间在平庸的书籍上,不如直接啃透经典。 对于初学者,文章推荐了《Running Linux》和《Linux in a Nutshell》作为起步。而系统管理方面,两部“大部头”——《UNIX and Linux System Administration Handbook》与《Essential System Administration》被形容为该领域的百科全书。网络原理则首推《TCP/IP Illustrated, Volume 1》,无论职位是运维还是开发,理解底层协议都至关重要。 进入编程领域,从 Kernighan 与 Pike 合著、体现 Unix 哲学的《The UNIX Programming Environment》,到 Richard Stevens 的《APUE》和《Unix Network Programming》这两部巨著,构成了进阶路径。最后,针对渴望深入内核的读者,《Operating Systems: Design and Implementation》与《Understanding the Linux Kernel》是绕不开的经典,尽管后者被坦言“学习过程痛苦”,但能帮助构建完整的内核图景。 作者的核心观点是:阅读这些英文经典,不仅能更高效地掌握技术,更是为职业生涯打下坚实基础。这些书是真正能放在手边反复翻阅的伙伴。

IT 累计浏览 24,410

Bash的模式和配置文件加载

这篇讲的是Bash启动时如何加载配置文件的“冷知识”,作者坦言自己早年也一知半解,于是从`man`手册出发,把这个绕人的机制捋清楚了。核心在于理解运行中的Bash有两种“模式”:交互式(是否直接与终端对话)和登录式(是否作为用户登录会话的起点)。两者独立组合,决定了启动时加载哪些文件。 文章清晰列出了加载路径:登录Shell会依次尝试`/etc/profile`、`~/.bash_profile`等;而交互式非登录Shell则主要加载`~/.bashrc`。这些规则直接解释了日常中的两个典型困惑:为什么在`crontab`里配置的环境变量常常不生效?因为非交互、非登录的Shell压根不会加载这些配置文件。同样,为什么在Mac终端里修改`~/.bashrc`没反应?因为它的终端默认启动的是登录Shell(`$0`以`-`开头),本应配置`~/.bash_profile`,而不像某些Linux发行版那样在`~/.profile`里隐式地加载了`~/.bashrc`。 搞清楚这个加载逻辑,就能精准定位Shell脚本的环境问题,无论是定时任务还是跨平台开发。作者用亲身踩坑的例子把这份“手册知识”讲得生动实用,帮读者建立起正确的心智模型。

IT 累计浏览 6,790

在命令行快速切换目录

这篇讲的是如何告别在命令行中反复输入冗长的 `cd` 路径。作者从日常开发中频繁切换到 `~/some/very/deep/often-used/directory` 这类深层目录的痛点出发,分享了一个通过修改 shell 配置文件来实现的“目录书签”方案。 核心思路是利用 `mark` 命令为当前目录创建一个别名,之后只需输入 `g 别名` 即可瞬间跳转。此外,`gs` 命令可以一览所有已标记的目录。实现上非常巧妙,作者在 `/etc/profile` 文件尾部添加了一组 shell 函数,包括 `g`(跳转)、`mark`(标记)、`unmark`(取消标记)和 `gs`(列表),并利用 `ln -s` 创建符号链接来持久化这些书签,最终还为 `g` 命令配置了命令行补全功能。 这个方案完全用原生 shell 脚本实现,无需安装额外工具,却能极大提升在复杂目录结构中导航的效率。对于经常在终端工作的开发者来说,花几分钟配置一下,就能永久解决路径切换的烦恼。

IT 累计浏览 3,005

SSH简介

这篇讲解SSH基础知识的文章,从“什么是SSH”直接切入,梳理了这项安全协议从诞生到普及的简要历程,重点则落在了实际操作与安全原理上。 文章系统梳理了SSH的核心用法:从最基础的远程登录命令,到端口参数修改。它详细拆解了SSH保障安全的关键——公钥加密验证流程,并分别阐述了两种登录方式:“口令登录”与“公钥登录”。对于后者,文章不仅解释了免密原理,还一步步指导读者如何生成密钥对、使用`ssh-copy-id`上传公钥,以及如何排查服务端配置问题。 特别值得注意的是,文中对公钥指纹验证、`known_hosts`文件的作用,以及`authorized_keys`文件的具体操作都有细致说明。这些细节对于理解SSH建立信任链的过程至关重要,也为实际配置提供了清晰路线图。对于需要安全远程管理的开发者或运维人员,这是一篇扎实的入门指南。

IT 累计浏览 6,901

Linux知识:为什么要用字符~来表示home目录

这篇讲的是Linux和Unix系统里一个常见却很少有人深究的细节:为什么用波浪号“~”来表示用户的home目录。答案其实藏在一段计算机硬件的历史里——这个用法直接沿袭自1970年代流行的Lear-Siegler ADM-3A终端机。 文章指出,在这种老式终端上,波浪号“~”键与“Home”键(将光标移至行首)被设计在同一个物理按键上。当Unix系统的开发者需要为home目录找一个便捷的符号表示时,这个现成的、含义紧密相关的按键自然就成了首选。因此,今天我们敲下的“cd ~”,其根源竟是一次跨越数十年的硬件设计传承。文章还配上了该终端机及其键盘布局的实物照片,让这段冷知识变得直观可感。了解这个小小的起源,能让我们对命令行中看似“理所当然”的设计多一分会心一笑的理解。