Answers:
答案取决于您使用的是哪个shell。许多炮弹有echo
一个内置的命令,这意味着它不会产生一个独立的过程,因此在上市过程将不会出现。但是,如果您键入/bin/echo
或./echo
或如果您使用enable -n echo
命令禁用了内置命令,则外壳将不使用其内置命令,而将使用二进制版本。这将显示在过程列表中。
如果您使用的是二进制文件而不是内置的Shell,echo命令将一直显示,直到将数据移至另一个进程的STDIN缓冲区为止。此缓冲区的大小是有限的,因此,如果缓冲区中的数据量超出了缓冲区的容量,则echo命令将必须挂起一段时间,直到其他进程可以从缓冲区中读取一些数据为止。对于大多数情况(例如您上面给出的两个示例),此时间段将为微秒。如果您恰巧使用echo将20MB的SQL转储粘贴到MySQL中,则时间可能会更长。无论时间有多短,如果您使用的是二进制文件而不是内置的Shell,并且碰巧有人正好安排好时间,他们将能够在进程列表中看到该进程。
您可以通过将机密数据放入文件(具有适当的权限)并将文件用作STDIN来避免这种情况,如下所示:
mysql -u root -p < file_with_secret.sql
只需使用
mysql -uroot -p
然后按回车。然后将提示您输入密码,并且该密码在进程列表或历史记录文件中都不可见。