血的教训!解锁 source 命令新的姿势,已准备跑路。 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
shayuvpn0001
V2EX    程序员

血的教训!解锁 source 命令新的姿势,已准备跑路。

  shayuvpn0001 2019-01-17 10:44:43 +08:00 24962 次点击
这是一个创建于 2461 天前的主题,其中的信息可能已经有所发展或是发生改变。

刚刚脑子也是抽了,觉得 history 里面 clear, exit, pwd 这种垃圾太多,总翻不到自己想找的以前的命令(某个 grep 正则表达式),于是准备拿.bash_history 开刀,vim 一番操作终于干掉了 clear, pwd 这种。

然后敲了一下 history,发现还没更新(应该是下次登录的时候重新载入),于是想到了用 source 更新一下。

高潮来了,我在命令行里敲下了 source .bash_history,一行行字符在屏幕飞速滚过,好像有什么不对。。。

左右翻看了一下,挂载到根目录下的硬盘被清空。。。

看了一下 history。。。

是不是已经凉了?还有救么?

第 1 条附言    2019-01-17 11:32:51 +08:00
From #22, @Liberal0
source FILENAME [arguments]:read and execute commands from FILENAME in the current shell.
第 2 条附言    2019-01-17 11:33:35 +08:00
我有些没理解,
为什么不是 cd 到 CrGuard 目录了吗? 为什么 rm -rf * 会删到 /下面?

source 的时候 cd 命令不起作用? 并且楼主是在 根路径下执行的 source ?

-------------------------------------------------------------
这是 N 年以前下载 CrGuard 的时候的操作,本来是手动在 Z 盘创建了一个 CrGuard 目录,然后 cd 进去的,git 下载了就拷贝出去了然后删除了 CrGuard。刚才 source 这一把执行到 cd CrGuard 这里必然是 No such file or directory,然后继续在 /z 执行了 rm -rf * -_-!!!!


这真的是美好的一天啊!!!
第 3 条附言    2019-01-17 11:34:22 +08:00
rm -rf 这种敏感操作,我还是很注意的。主要是没想到 source 这个浓眉大眼的也这么凶狠。。。
第 4 条附言    2019-01-17 17:02:25 +08:00
说用 sudo 能够拯救我的,放弃吧。你们更新环境参数 /配置的时候,也会加上 sudo 的吧,只要加了 sudo 提权,后面的都无解吧。你每次运行 source .bashrc 肯定前面会加上 sudo 的,所以这里我还是会加上 sudo 的。


====================醒!目!提!示!====================

这次事故是在 win7 系统下的 git bash 操作的, win 7 会把 C 盘, D 盘.... Z 盘挂在根目录上.
win7 下默认是管理员权限启动 git bash, 不存在 root 用户不 root 用户, 直接一把梭...
目前 Z 盘正在恢复中....

====================醒!目!提!示!====================

主要不是 sudo 的问题,也不是不注意 rm -rf 用法的问题.
是没想到 source 和.bash_history 这两个人畜无害的组合起来要了老命.
156 条回复    2019-10-28 10:42:51 +08:00
1  2  
holajamc
    1
holajamc  
   2019-01-17 10:47:56 +08:00
陈独秀你坐下
sambawy
    2
sambawy  
   2019-01-17 10:49:14 +08:00   6
快联系去越南或者泰国的船吧
CallMeReznov
    3
CallMeReznov  
   2019-01-17 10:49:50 +08:00   58
hahiru
    4
hahiru  
   2019-01-17 10:50:00 +08:00   4
强迫症患者的第 101 种死法。
cjlmwcy
    5
cjlmwcy  
   2019-01-17 10:50:04 +08:00
凉凉
zhangroyaso
    6
zhangroyaso  
   2019-01-17 10:50:59 +08:00   1
于是想到了用 source 更新一下
=====
这...什么神操作?!!
a41050447
    7
a41050447  
   2019-01-17 10:51:27 +08:00 via iPhone
source 也敢乱用,佩服佩服
auxox
    8
auxox  
   2019-01-17 10:52:30 +08:00   1
比惨我从来没有输过谁 : )
simoncos
    9
simoncos  
   2019-01-17 10:52:42 +08:00   1
又一次理解了懒惰的智慧
yuikns
    10
yuikns  
   2019-01-17 10:53:26 +08:00 via iPad   3
@zhangroyaso 想要刷一下环境变量吧

楼主好好练歌,我会考虑买你握手券的
shayuvpn0001
    11
shayuvpn0001  
OP
   2019-01-17 10:54:13 +08:00
@zhangroyaso 以为可以像 source .bashrc 那样。。。
ABenmao
    12
ABenmao  
   2019-01-17 10:55:16 +08:00   2
哈哈哈,吓得我赶紧看了下 source 的用法
al0ne
    13
al0ne  
   2019-01-17 10:55:57 +08:00
重新读取是 history -r 老哥这次要记住了
yuikns
    14
yuikns  
   2019-01-17 10:56:16 +08:00 via iPad   2
不楼主你们这种动不动就是 root,还把各种服务放一起的(如果是),这种事情今天不发生明天也会的
exip
    15
exip  
   2019-01-17 10:56:17 +08:00 via Android
source 命令敢这样用?看来您是没明白 source 到底是干什么的。
xcai
    16
xcai  
   2019-01-17 10:58:30 +08:00 via Android
你千万别想着乘走私船到缅甸,再到越南柬埔寨。。我与 rm -rf / 不共戴天
ucanuup
    17
ucanuup  
   2019-01-17 10:59:34 +08:00   1
ctrl+r 用来搜索历史命令很好用啊
4DAX07B8Kle4Dm6T
    18
4DAX07B8Kle4Dm6T  
   2019-01-17 11:02:47 +08:00
我这里有本《 99 种跑路法》,只需要 10 块钱,楼主来一本?
Greendays
    19
Greendays  
   2019-01-17 11:05:25 +08:00
为什么这个命令会出现在 history 里?
cmllwxxl
    20
cmllwxxl  
   2019-01-17 11:08:08 +08:00
老哥,需要跑路一条龙吗,不要 998,只要 98,赶紧联系,晚了就跑不了了
kassadin
    21
kassadin  
   2019-01-17 11:08:09 +08:00
吓得我也看了下 source 的用法,一直固定使用 source .zshrc,都当成固定用法了 ,原来还有这种骚操作
Liberal0
    22
Liberal0  
   2019-01-17 11:08:49 +08:00 via Android
source FILENAME [arguments]:read and execute commands from FILENAME in the current shell.
zpf124
    23
zpf124  
   2019-01-17 11:11:01 +08:00
我有些没理解,
为什么不是 cd 到 CrGuard 目录了吗? 为什么 rm -rf * 会删到 /下面?

source 的时候 cd 命令不起作用? 并且楼主是在 根路径下执行的 source ?
shayuvpn0001
    24
shayuvpn0001  
OP
   2019-01-17 11:12:38 +08:00
@Greendays 这是 N 年以前下载 CrGuard 的时候的操作,本来是手动在 Z 盘创建了一个 CrGuard 目录,然后 cd 进去的,git 下载了就拷贝出去了然后删除了 CrGuard。刚才 source 这一把执行到 cd CrGuard 这里必然是 No such file or directory,然后继续在 /z 执行了 rm -rf * -_-!!!!


这真的是美好的一天啊!!!
jssyxzy
    25
jssyxzy  
   2019-01-17 11:12:55 +08:00
hhhhhhhhhh
pexcn
    26
pexcn  
   2019-01-17 11:14:17 +08:00
资深运维啊 XD
shayuvpn0001
    27
shayuvpn0001  
OP
   2019-01-17 11:14:59 +08:00
不是删除了整个根目录,是删除了挂载到根目录下的 z 盘的全部内容。。。
exip
    28
exip  
   2019-01-17 11:15:27 +08:00
数据恢复或许还来得及
whypool
    29
whypool  
   2019-01-17 11:15:45 +08:00
优秀
richzhu
    30
richzhu  
   2019-01-17 11:17:48 +08:00
看了下楼主的帖子 貌似是 JAVA 程序员,我还以为是我同行~
Yiki
    31
Yiki  
   2019-01-17 11:18:13 +08:00
哇好骚啊..
ooeyunarika
    32
ooeyunarika  
   2019-01-17 11:18:45 +08:00
承包了我今天的笑点
morefreeze
    33
morefreeze  
   2019-01-17 11:18:57 +08:00
你这个需求 ctrl+r 肯定也解决了 如果还找不到 那也是 grep 命令太多了 和 pwd 这些无关
不过学到了跑路新姿势(手动滑稽
gabon
    34
gabon  
   2019-01-17 11:20:37 +08:00 via Android
alias 了解一下
xiaket
    35
xiaket  
   2019-01-17 11:21:05 +08:00   1
fzf 解决找历史命令的需求
shayuvpn0001
    36
shayuvpn0001  
OP
   2019-01-17 11:21:16 +08:00
@morefreeze 是的,grep 太多,我知道 ctrl + r 的,这次纯粹是想回去翻某一条已经忘记的正则。
anzu
    37
anzu  
   2019-01-17 11:22:07 +08:00
2333333
《 99 种 rm -rf 意外事故》
panyanyany
    38
panyanyany  
   2019-01-17 11:22:28 +08:00
@zpf124 #23 在楼主执行 source 的时候,z 和 CrGuard 这 2 个目录并不存在,所以还是在根目录 / 下
SakuraKuma
    39
SakuraKuma  
   2019-01-17 11:26:06 +08:00   1
... 简直惨..

source 还有个.操作, 还是小心点吧..
. .bash_history 一样效果
wenzhoou
    40
wenzhoou  
   2019-01-17 11:27:13 +08:00 via Android
让我先笑三十分钟先。
Zzdex
    41
Zzdex  
   2019-01-17 11:27:34 +08:00 via iPhone
@zpf124 楼主已经把 CrGuard 目录删了 cd 失败 上面还有一个 cd /
jasonyang9
    42
jasonyang9  
   2019-01-17 11:28:40 +08:00
@panyanyany #38 不是根,`cd z`生效的,他把挂载在这个目录下的分区清空了
jzmws
    43
jzmws  
   2019-01-17 11:30:15 +08:00
你跑把,弟妹和孩子我们会照顾好的!!
lynnX
    44
lynnX  
   2019-01-17 11:36:35 +08:00
Windows 大法好!
HiJackXD
    45
HiJackXD  
   2019-01-17 11:42:56 +08:00
1oNflow
    46
1oNflow  
   2019-01-17 11:47:51 +08:00 via iPhone
那 source .bashrc 有什么风险吗…
pkookp8
    47
pkookp8  
   2019-01-17 11:48:30 +08:00 via Android
rm $ENV -rf
的也注意了,ENV 哪天没赋值,又是 sudo 执行,就炸了
不过现在很多系统都会询问一下是否删除
不过不过不过很多人都不会看直接 yes
ymj123
    48
ymj123  
   2019-01-17 11:52:32 +08:00 via Android
这么说来,楼主在删库前应该还下了个,gitbuh 上的库。哈哈。
wlsnx
    49
wlsnx  
   2019-01-17 11:52:33 +08:00
exec $SHELL 了解一下
H0TSp1RnG
    50
H0TSp1RnG  
   2019-01-17 11:53:43 +08:00
欢声笑语打出 GG
guanhui07
    51
guanhui07  
   2019-01-17 11:55:49 +08:00
流弊
photon006
    52
photon006  
   2019-01-17 12:03:44 +08:00   8
分享一个方法快速找到之前命令:
在当前用户~目录新建一个隐藏文件.inputrc,内容如下:
"\e[A": history-search-backward
"\e[B": history-search-forward
set show-all-if-ambiguous on
set completion-ignore-case on


退出 terminal,重进,输入命令开头几个字母按“上”就出来了。
niuoh
    53
niuoh  
   2019-01-17 12:07:15 +08:00
source .bash_history 这条命令也会保存在.bash_history 里
那么这条命令是不是会死循环...
bugsnail
    54
bugsnail  
   2019-01-17 12:17:01 +08:00
又多了一种删库跑路的新姿势
anofac
    55
anofac  
   2019-01-17 12:17:48 +08:00
@photon006
好用
JackieMe
    56
JackieMe  
   2019-01-17 12:23:03 +08:00 via Android
我前几天想把别的文件一些内容添加进 ~/.vimrc,没想好正则怎么写命令都没写完脑子抽了就直接运行了,然后命令变成了 grep > ~/.vimrc ..
gethin0321
    57
gethin0321  
   2019-01-17 12:24:38 +08:00
![AKBIG4038ABYIQUC]($1NTW.jpg]( https://i.loli.net/2019/01/17/5c400376aa6c0.jpg)
bomb77
    58
bomb77  
   2019-01-17 12:26:47 +08:00
因为命令是顺序执行的啊,先 cd 到了 / 目录,你后面还有 cd z 和 cd CrGuard 命令,但如果 / 目录里面没有 z 目录的话,这两个 cd 命令就执行失败了,然后还是在 / 目录,后面的 rm -rf * 就默默在 / 目录里执行了啊
gaby2018
    59
gaby2018  
   2019-01-17 12:34:38 +08:00
这么骚的操作?看来船票是买好了啊!!!
yulgang
    60
yulgang  
   2019-01-17 12:54:16 +08:00
于是想到了用 source 更新一下.... 骚得我差点信了。
wemore
    61
wemore  
   2019-01-17 12:59:21 +08:00 via iPhone
你可以陪哥仨当偶像了
asdf123101
    62
asdf123101  
   2019-01-17 13:09:45 +08:00 via Android
给大佬劈叉。。。
tabris17 data-uid=
    63
tabris17  
   2019-01-17 13:13:34 +08:00
cd /
......
cd CrGuard/ # CrGuard 不存在,所以当前目录仍然是 /
cncoffer
    64
cncoffer  
   2019-01-17 13:15:23 +08:00
刚好楼主的头像很像火箭, 看起来是准备逃去月球了么
liuxey
    65
liuxey  
   2019-01-17 13:16:25 +08:00
真是愉快的一天
Chenamy2017
    66
Chenamy2017  
   2019-01-17 13:44:16 +08:00
感谢你教会了我这种骚操作。
sxsexe
    67
sxsexe  
   2019-01-17 13:46:17 +08:00
当你意识到问题的严重性时有没有一种从头凉到脚的感觉?
喂 喂 楼主还在吗
xiaket
    68
xiaket  
   2019-01-17 13:46:57 +08:00
@niuoh 没完成的命令不会写入 history
starsky007
    69
starsky007  
   2019-01-17 13:48:16 +08:00 via Android
666
Felldeadbird
    70
Felldeadbird  
   2019-01-17 13:50:32 +08:00
老哥太秀了吧,rm -fr *
删除文件真的不能偷懒
BigPig666
    71
BigPig666  
   2019-01-17 13:50:59 +08:00
你好骚啊
xi2008wang
    72
xi2008wang  
   2019-01-17 14:06:11 +08:00
history 文件太坑了,为什么直接以命令的形式保存呢?

如果文件内容形式这样:
1 2018-10-19 10:57:47 cd /
或者前面加#号也可以
#1539915426
#pwd

那完成可以避免。。。。
9Rubi
    73
9Rubi  
   2019-01-17 14:09:22 +08:00
是个狠人
jim9606
    74
jim9606  
   2019-01-17 14:09:29 +08:00
我是好奇为啥你们都直接用 root 用户呢,有 sudo 就算错误执行也不会怎样啊
MarioLuisGarcia
    75
MarioLuisGarcia  
   2019-01-17 14:13:13 +08:00
@xi2008wang 方便读取了再执行,比如 `!123` 是执行编号为 123 的 history 命令。
Govda
    76
Govda  
   2019-01-17 14:15:21 +08:00
学到了..
Muyiafan
    77
Muyiafan  
   2019-01-17 14:15:39 +08:00
sdijeenx
    78
sdijeenx  
   2019-01-17 14:17:58 +08:00
其实还好啊,UNIX 认为用户知道自己在干什么,但实际上用户根本不知道自己在干什么。
loveCoding
    79
loveCoding  
   2019-01-17 14:18:30 +08:00
是个狠人
haiyang1992
    80
haiyang1992  
   2019-01-17 14:24:04 +08:00 via Android
楼主为什么不 history | grep 一下呢
geew
    81
geew  
   2019-01-17 14:25:27 +08:00
抱歉 不厚道的笑了 感谢分享 还真不知道 source 原来是这个效果的...
fakefish
    82
fakefish  
   2019-01-17 14:28:50 +08:00
厉害
laudukang
    83
laudukang  
   2019-01-17 14:30:42 +08:00
优秀
co3site
    84
co3site  
   2019-01-17 14:38:51 +08:00 via Android
哈哈,真是元气慢慢地一天,我 source 我的骚操作,还是 root 权限
ooooo
    85
ooooo  
   2019-01-17 14:44:08 +08:00
论 走上跑路道路 的新姿势
CSM
    86
CSM  
   2019-01-17 15:01:35 +08:00 via Android
不对啊,history 里那条命令是
50 rm -rf *
应该报错 command 50 not found 啊
missdeer
    87
missdeer  
   2019-01-17 15:05:27 +08:00
原谅我笑出了声
abclucifer
    88
abclucifer  
   2019-01-17 15:07:31 +08:00
不好意思,我笑了
JZ8ZW193q6W9Awgy
    89
JZ8ZW193q6W9Awgy  
   2019-01-17 15:09:44 +08:00
@al0ne 我也记住了,哈哈
demo
    90
demo  
   2019-01-17 15:16:49 +08:00
@CSM 50 是行号
log4geek
    91
log4geek  
   2019-01-17 15:17:11 +08:00
幸亏你还有在 cd z,要是连这个 cd z 都没有,哈哈哈哈哈哈
sillinger
    92
sillinger  
   2019-01-17 15:22:49 +08:00
虽然感觉是个很悲伤的故事,但为何嘴角疯狂上扬......抱歉抱歉
Applenice
    93
Applenice  
   2019-01-17 15:23:05 +08:00
原来 source 还能这么用,我去看 source 的用法了。。。
XiaoXiaoNiWa
    94
XiaoXiaoNiWa  
   2019-01-17 15:24:54 +08:00 via Android
。。
lemonda
    95
lemonda  
   2019-01-17 15:29:48 +08:00
只有我觉得每条命令前输入 sudo 很麻烦吗?
改造 .bash_history 记录格式又要每台机器操作一遍
删除非空文件夹不用 rm -rf 该怎么删安全? 我现在习惯按照 v2 上某条回复 rm 路径 -rf 这样,稍稍避免了点输错路径粗手指按到回车的风险。
sikariba
    96
sikariba  
   2019-01-17 15:40:01 +08:00
笑死了哈哈哈哈楼主拯救了我郁闷的一天
azuginnen
    97
azuginnen  
   2019-01-17 15:40:59 +08:00   1
fzf 啊

lzj307077687
    98
lzj307077687  
   2019-01-17 15:44:12 +08:00
成为地下偶像吧
allenhu
    99
allenhu  
   2019-01-17 15:53:30 +08:00 via Android
厉害了
cppgohan
    100
cppgohan  
   2019-01-17 15:54:24 +08:00
我不厚道的笑了..
1  2  
关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1129 人在线   最高记录 6679       Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 36ms UTC 23:10 PVG 07:10 LAX 16:10 JFK 19:10
Do have faith in what you're doing.
ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86