V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
shayuvpn0001
V2EX  ›  程序员

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

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

刚刚脑子也是抽了,觉得 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 用来搜索历史命令很好用啊
wispx
    18
wispx  
   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
    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
不好意思,我笑了
xixibb
    89
xixibb  
   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   ·   我们的愿景   ·   实用小工具   ·   971 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 37ms · UTC 20:23 · PVG 04:23 · LAX 13:23 · JFK 16:23
Developed with CodeLauncher
♥ Do have faith in what you're doing.