不懂区别Shell命令和Linux命令?看这一篇就够。(文末送福利)

说白了,shell命令和Linux命令的区别就像前端和后端的关系——shell是用户与系统交互的“界面”,而Linux命令是真正在后台工作的“工具”。

扩展一下,我们首先说一下场景中最重要的区别:去年我们运行监控系统时,当我们需要实时读取日志时,只需使用 grep 和 awk 等 shell 命令就足够了。
去年用户行为达到3 000万的时候,我们不得不使用Linux命令中的grep结合awk的路径处理。
后者可以贯穿数百万个关卡。
还有一点就是,在配置nginx这样的服务时,使用systemctl这样的Linux命令来直接操作操作系统服务。
但是,如果想写一个脚本批量配置全部3 0台服务器,就得依赖shell循环和条件判断了。
还有一个非常重要的细节。
例如,如果您使用 chmod 来设置文件权限,则此 Linux 命令直接遵循数字权限参数,但 shell 允许您使用符号权限(递归 -R)或更灵活的脚本逻辑来更改权限。

说实话,这很令人困惑。
一开始我以为cd导航命令只有Linux下才有,后来发现Windows PowerShell也有这个命令。
等等,还有别的事。
用术语来说,它被称为雪崩效应。
事实上,前面的一个小延迟就会导致后面的一切崩溃。
例如,如果您编写shell脚本并使用大量Linux命令来操作大文件,则很容易出现终端冻结的情况。

学习Linux命令时,不要把注意力集中在fdisk这样的困难命令上。
首先开始使用 ip 和 ping 等高频命令。
很多人不注意这一点。

Linux运维如何从初级进阶为高级

老实说,要学习Linux,你不能只看文档,你必须实际接触它。
刚开始的时候,我在宿舍里来回搭建Windows和Linux双系统。
硬盘坏过一次,现在想起来都后怕。
但老实说,理解目录结构比记住 Windows 驱动器号要容易得多。
/dev、/etc、/var 这样的目录用多了就会熟悉了。

对于系统管理,我有一个亲身经历。
第一次在生产环境中使用字符界面管理服务器,一个简单的 df -h 就让我震惊了——突然发现根目录都快满了,当时我的手都在颤抖。
后来逐渐熟悉了useradd、fdisk、yum install等命令,发现它们远比鼠标操作高效。
专门用于文本处理,grep用于检查日志,sed用于更改配置,awk用于统计。
如果你熟悉这些命令,可以节省半天的时间。

网络基础方面,我在帮公司接第一台交换机的时候,把VLAN搞反了,差点把整个部门的网络给断了。
因此,OSI七层模型和TCP/IP四层协议确实需要记住。
我记得有一个面试官问我TCP三向握手过程。
我说这句话时结结巴巴,结果被骂了。
对于交换机、路由器等设备来说,其原理不记得了。
阅读厂商的文档,比如Cisco的配置手册,比学校老师讲课更有效。

Shell 脚本使用得越多,就会让人上瘾。
我有一个习惯,每天早上醒来后就写一个脚本来检查服务器状态。
如果发现任何异常请给我发电子邮件。
我记得有一次我在编写脚本时犯了一个错误,所有用户的密码都被重置了。
当时我的脸就绿了。
然而,在使用了 grep、sed 和 awk 之后,处理日志就不再那么有趣了。
例如,可以使用 awk '{print $1 }' 来快速统计某个 IP 在日志中出现的次数,这比 Excel 快得多。

Web服务方面,我在帮助一家电商搭建LNMP环境时,把Apache和Nginx的配置改了3 次才解决。
后来了解到Java项目使用Tomcat+Nginx反向代理,动静态分离其实是一个很好的解决方案。
我记得有一次服务器 CPU 飙升到 9 0%,通过 Nginx 的 limit_req 模块限制流量很快就解决了问题。
虽然HTTP协议的基础很简单,但我见过人们无法理解长连接/短连接,导致长时间内接口响应速度缓慢。

就数据库而言,MySQL确实是一个宝藏。
之前在项目中使用过MyISAM引擎,但是在主从同步和数据传输时崩溃了几乎被摧毁了。
后来改用InnoDB,结合MHA主从同步,系统稳定性直接提升了一个台阶。
Redis也很有趣。
我有一个使用 Redis 共享会话的案例。
结果整个集群的CPU都变得完全忙碌起来。
最后发现代码存在死循环。
在NoSQL的背景下,MongoDB文档存储非常适合日志分析,但不要将其视为MySQL的替代品。

安全方面,刚开始学习iptables时,我把默认允许所有访问的规则去掉了。
结果,无法直接访问服务器。
因此,不要等到出现问题才实施安全策略。
例如使用 iptables -A INPUT -s 1 9 2 .1 6 8 .1 .0/2 4 -j ACCEPT 修复可信源IP,效果立竿见影。
我也曾经遇到过DDoS攻击,购买了云防火墙来应对。
然而,一个教训是,安全是一个持续的过程,不可能一劳永逸地解决。

就监控而言,Zabbix确实是个好东西。
我有一台服务器,CPU 突然达到 1 00%。
感谢 Zabbix 的电子邮件提醒,事情没有被延误。
我还创建了一个 Grafana 仪表板。
看到数据实时反弹,让我感觉自己掌控了全局。
但要注意监测指标不要过多。
比如我见过有人在一张图片上做了上百个指标,根本看不出要点。
能。

就Python而言,我学它主要是为了自动化。
例如,编写脚本自动同步代码仓库,使用Paramico进行SSH操作,比手动执行命令效率更高。
记得有一次写了一个定时任务来清除日志,但是忘记添加异常处理了。
结果就是脚本多次卡壳。
最后还被运维同事骂了。
Python是一种非常简单的语言,但细节处理得非常仔细。

总的来说,Linux运维的技术层面相当复杂。
但说实话,只要你愿意采取行动,很多问题都可以自行解决。
刚开始学习的时候,我经常沉迷于错误日志,但是随着经验的逐渐积累,我发现很多缺点是可以克服的。
正如有人所说,在运维行业,经验比理论更重要。

关于Linux ,Bash ,Shell的概念问题

嗯... bash 和 csh... 是完全不同的。

仅仅因为您可以编写 bash shell...并不意味着您可以编写 c shell。
但是...如果您已经学习了一种 shell 脚本...您应该能够快速学习另一种 shell。
至少如果你明白的话……应该没什么大不了的。

我建议你先学习bash shell。
因为它被广泛使用......而且......它非常便携。
bash 只是 shell 的一种。

至于shell...它属于系统级别的。
您只需要安装 bash shell...即可运行 bash shell 脚本。
和系统或者发行版本没有特别强的绑定关系...shell之类的东西...可以随意安装。

你习惯用什么shell?虽然它不包含在初始系统安装中,但您可以单独安装一个。

我推荐两本书。
一是《高级 Bash Shell 脚本编写指南》。
另一个是《实用Linux+Shell编程与服务器管理》。

Shell编程...可以直接体现你对Linux命令的熟练程度。
哪种情况下使用哪种命令……更符合你的工作需要。
如何简化脚本执行过程...优化您的脚本以使其更加高效。

在学习过程中...你不可避免地会接触到像sed和awk这样的流编辑器。
所以你得专门学习sed和awk。

慢慢地...您可能会发现...您不仅限于编写 shell 脚本。
您可以选择更强大的编程语言。
例如perl、python、php、C...或者其他语言。

基本上...都是这样一个过程。