10条Linux命令锦囊,防你牢底坐穿

可莉
• 阅读 692

10条Linux命令锦囊,防你牢底坐穿

http://xjjdog.cn 对200+原创文章进行了细致的分类,阅读更流畅,欢迎收藏。

原创:小姐姐味道(微信公众号ID:xjjdog),欢迎分享,转载请保留出处。任何不保留此声明的转载都是抄袭。

每一年,都会有删库跑路的新闻。现实中,删库容易,跑路难,从业者充满了泪水。

这些动作里面,并不总是存在主观的恶意,而是这些命令太危险了。线上操作时,一定要保持清醒的头脑,切记马虎大意。

你说你误操作的,谁信呢?

切记:

  • 严禁酒后登录线上服务器操作

  • 严禁吵架后情绪激动登录线上服务器操作

  • 严禁长时间加班后操作线上环境

  • 禁止在线上试验不熟悉的命令

  • 重要系统先做备份

1. 准备工作

在执行危险命令时,请深呼吸。首先执行ifconfig,或者ip addr命令,确认是在正确的服务器上。

$ ip addr1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00    inet 127.0.0.1/8 scope host lo       valid_lft forever preferred_lft forever    inet6 ::1/128 scope host       valid_lft forever preferred_lft forever2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000    link/ether 00:16:3e:34:e9:a9 brd ff:ff:ff:ff:ff:ff    inet 172.19.26.39/20 brd 172.19.31.255 scope global dynamic noprefixroute eth0       valid_lft 313267185sec preferred_lft 313267185sec    inet6 fe80::216:3eff:fe34:e9a9/64 scope link       valid_lft forever preferred_lft forever

这时候,再次深呼吸,然后执行pwd命令,确保自己是在正确的目录下面。

$ pwd/etc/nginx

接下来,就可以看一下执行的命令,是不是危险指令。

2. rm -rf命令

-rf参数将递归删除文件,误删文件导致数据丢失,产生严重后果。如果多一个空格,或者 /没有补齐,或者文件有特殊符号,导致误删文件的误操作居多。

rm -rf ./* => rm -rf /rm -rf abc/ => rm -rf abc /

执行rm命令,手速一定要慢。按补全,一定要等屏幕回显后操作。

另外,在脚本中,rm的坑也不小,比如:

rm -rf ${p}/*

如果p变量没有设置,就会是灾难性的后果,命令等同于rm -rf /。所以rm还有另外一条谨言:在脚本中执行rm的时候,请先判断相关的变量是否为空。

3. chmod命令

chmod是更改目录和文件权限用的,如果处理不当,会产生和rm一样的后果。

这里介绍一种非常霸道的恢复方法。在执行这个命令之前,先把所有文件的权限备份一下。这里用到getfacl这个命令。

getfacl -R / > chmod.txt 

恢复的时候,执行

setfacl --restore=chmod.txt

它将回放这个文件的权限,有时候是救命的。

4. cat命令

cat命令也能出错?是的,而且还很严重,因为你掌握了高级技能:重定向符。

如果你想要向文件中追加 内容,会使用 cat >> file的方式,如果你不小心少输入了一个>,那么不好意思,你的文件内容就丢失了。

类似的命令还有echo等,可以看到,问题不在cat,在重定向符,太容易写错。

在此,请你操作之前,确保每次深呼吸,数好箭头的个数再操作。

5. dd命令

dd命令很酷,和xjjdogjj遥相呼应。命令如下:

dd if=/dev/zero of=/dev/sda bs=512 count=1

以上命令,用于格式化硬盘,如果你的剪贴板里面有这样的命令,而且不小心粘到了命令行里,你的数据将会蒸发。

6. cp命令

cp命令会产生覆盖,如果你后悔了,想找到原文件,将非常困难。

建议增加alias cp ='cp -i',i参数表示会在拷贝时生成一个备份。大多数时候没用,有时候很有用。

和我们买保险一个道理。

mv命令类似,也可以加上-i。

7. tar命令

不要觉得tar很安全,我就曾经因为tar命令丢失过数据。

第一,tar -xf 解压的时候, 如果解压的文件已经在当前目录,覆盖原有的文件夹及文件。覆盖这两个字,很多时候意味着不安全。

8. vim命令

vim容易在打开大文件的时候,造成系统内存占用过高。如果触发了操作系统的oom-killer,将会造成其他正常进程的死亡。

如果你手速过快,执行了:wq,将会造成文件的不一致甚至损坏。

可是使用less或者more这样的命令,来查看信息。更高效,也更安全。

如果你实在不得不用vim,请保持使用view命令,它是vim的只读模式。

9. mkfs.*

类似于mkfs.ext4这种指令,将会格式化硬盘,一般用于线上环境初始化,否则不要执行。

10. MySQL

(1)使用mysql -U

--safe-updates, --i-am-a-dummy, -U

使用mysql -U 防止deleteupdate执行没带where条件的操作。当发出没有WHERE或LIMIT关键字的UPDATE或DELETE时,mysql程序拒绝执行。

alias同样是我们的好帮手,可以这么设置:

alias mysql='mysql -U'

(2)重要操作时,使用事务

start transaction执行确认commit

(3)DML误操作回滚,可以使用binlog2sql

(4)小心DDL操作

DDL往往意味着巨大的坑,锁表、误删、数据转变,往往是灾难性的。DDL 对整个表进行操作,或者是整个表所有的行、列,产生exclusive锁,产生疯狂io、严重影响生产。

这里面的任何一条,都是要命的。

仔细检查DDL,尽量在业务低峰执行,而且尽量采用inplace方式操作。

End

线上值万金,执行需谨慎。小心驶得万年船,在危险的线上环境,做事追求的不是快,而是稳。

毕竟,成熟的公司,光审批阶段就耗了好几天,你又为啥这么在乎这几秒钟呢?

作者简介:小姐姐味道  (xjjdog),一个不允许程序员走弯路的公众号。聚焦基础架构和Linux。十年架构,日百亿流量,与你探讨高并发世界,给你不一样的味道。我的个人微信xjjdog0,欢迎添加好友,进一步交流。

推荐阅读:

一图解千愁,jvm内存从来没有这么简单过!
失联的架构师,只留下一段脚本
架构师写的BUG,非比寻常
nginx工程师,需要上承天命,下召九幽
实力解剖一枚挖矿脚本,风骚操作亮瞎双眼
又一P1故障,锅比脸圆
传统企业的人才们,先别忙着跳“互联网”!
面试官很牛,逼我尿遁
又一批长事务,P0故障谁来背锅?
一天有24个小时?别开玩笑了!
《程序人生》杀机!
可怕的“浏览器指纹”,让你在互联网上,无处可藏
2w字长文,让你瞬间拥有「调用链」开发经验
996的乐趣,你是无法想象的
作为高级Java,你应该了解的Linux知识(非广告)
必看!java后端,亮剑诛仙(最全知识点)
学完这100多技术,能当架构师么?(非广告)
Linux上,最常用的一批命令解析(10年精选)
数百篇「原创」文章,助你完成技术「体系化」


10条Linux命令锦囊,防你牢底坐穿

本文分享自微信公众号 - 小姐姐味道(xjjdog)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Stella981 Stella981
3年前
Docker 部署SpringBoot项目不香吗?
  公众号改版后文章乱序推荐,希望你可以点击上方“Java进阶架构师”,点击右上角,将我们设为★“星标”!这样才不会错过每日进阶架构文章呀。  !(http://dingyue.ws.126.net/2020/0920/b00fbfc7j00qgy5xy002kd200qo00hsg00it00cj.jpg)  2
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这