Linux 命令行的最佳实践和技巧?

Linux 命令行的最佳实践和技巧?

我想开启一个讨论,积累您的 Linux 命令行 (CLI) 最佳实践和技巧。

我一直在寻找这样的讨论来分享以下评论,但没有找到,因此发表了这篇文章。

我希望我们都能从中吸取教训。

欢迎您分享您的 Bash 技巧、grep、sed、AWK、/proc 以及所有其他相关的 Linux/Unix 系统管理、shell 编程最佳实践,以造福我们所有人。

答案1

使用屏幕,由 GNU 项目开发的免费终端多路复用器,可以让您在一个终端中拥有多个终端。

您可以开始一个会话,即使连接丢失,您的终端也会被保存,因此您可以稍后或在家中继续。

答案2

SSH!
SSH 是神命令——我认为它是最值得学习的命令。这些选项可能相当令人生畏,但我似乎在不断学习使用我从未想过会用到的 SSH 新命令行选项。我可能已经用过它们了。

你用得越多,你对它的了解就越多。你可以用它做一些令人惊奇的事情。

注意:所有这些操作都可以远程完成,除了运行 ssh 服务器外,不需要在您的服务器上进行任何设置。

通过互联网挂载文件系统

在网上搜索 SSHFS

转发命令

SVN+SSH 协议是从远程客户端到没有运行 DEAMON 的服务器的 Subversion!SVN 命令通过 ssh shell 启动服务器,并通过现有管道来回传递信息。rsync 程序执行相同的操作,通过 SSH 启动一个 rsync 守护进程,在没有 rsync 守护进程的服务器上运行。编写自己的 bash 文件来执行类似的技巧很容易。

通过防火墙的链条

我一直用它通过我家里的 Linux 服务器跳转到我的 Mac。

转发端口:
似乎只是适度有用,直到您意识到您可以通过家庭防火墙反弹并在家中配置路由器,就像您在家庭网络内进行配置一样)。

转发 X 请求:

这又是一个令人惊奇的功能。无论远程系统上是否运行着 X 服务器,您都可以运行 x-windows 程序,并且窗口将显示在您的本地屏幕上。只需使用开关 -X,就这么简单!

由于您不必在远程服务器上运行 X 服务器,因此对服务器的 CPU 影响很小,您可以拥有一个 TINY Linux 服务器,它可以为运行 Windows 和 cygwin/X 的强大游戏 PC 提供大型应用程序。

当然,VI 和 EMACS 可以通过 SSH 工作,但当我在家运行时,有时我需要更多。我使用 ssh -X 来启动 Eclipse 的副本!如果您的服务器比笔记本电脑更强大,那么您的笔记本电脑上就有 GUI,但编译是在服务器上完成的,因此不必担心系统负载。

在批处理文件中运行

(意思是运行一个在其他系统上“执行操作”的本地批处理文件):

有两件事结合起来让这个很酷。一是您可以使用(更安全的)加密密钥来消除密码提示。二是您可以在 SSH CLI 上指定命令。我以一些有趣的方式使用它——例如,当远程服务器上的编译失败时,我会让它通过 SSH 进入我的计算机并播放声音文件)。

请记住,您可以重定向远程命令的输出并在本地批处理文件中使用它,这样您也可以在本地跟踪在服务器上运行的编译。

内置于 Mac

服务器和客户端都内置在 Mac 和 Linux 中。对于 Mac 和 Ubuntu,启用服务器就像找到正确的复选框一样简单。

在 PC 上安装 cygwin 或 cygwin/X(cygwin/X 允许您将 x-window 输出从 Linux 机器转发到 Windows PC——它会安装一个 X 服务器)

重要提示/配置文件

切勿在防火墙上使用端口 22。您会遇到很多黑客攻击,这不值得。只需让防火墙将其他端口转发到您的服务器即可。

有大量的配置选项,可让您大大简化 ssh 命令。以下是我工作中的一个例子:

Host home
    hostname billshome.hopto.org
    Port=12345
    user=bill
    LocalForward=localhost:1025 mac:22

当我输入“ssh home”(没有其他内容)时,它就像我输入了以下内容一样:

ssh -p 12345 [email protected]

然后将我的本地端口 1025 转发到我家里的系统“mac”。这样做的原因是,我的文件中还有另一个条目:

Host mac
    hostname localhost
    port=1025

这样,一旦我完成了“ssh home”并且窗口仍然打开,我就可以输入“ssh mac”,这里工作的计算机实际上会尝试连接到它自己的端口 1025,该端口已被其他命令转发到“mac:22”,所以它将通过防火墙连接到我家里的 Mac。

编辑-很酷的脚本!

我找到了一个我非常喜欢的旧脚本——不得不回来发布它,以便任何可能感兴趣的人都可以在这里找到它。该脚本名为“authMe”

#!/bin/bash
if [ ! -f ~/.ssh/id_dsa.pub ]
then
    echo 'id_dsa.pub does not exist, creating'
    ssh-keygen -tdsa
fi
ssh $1 'cat >>.ssh/authorized_keys' <~/.ssh/id_dsa.pub

如果您的主目录中有此脚本,并且有一个您可以连接的主机(通过 ssh),那么您可以输入“./authMe hostName”。

如果有必要,它会为您创建一个公钥/私钥对,然后它会通过 ssh 连接到另一台机器并复制您的公钥(ssh 命令会提示您输入密码...)

此后,SSH 命令在连接到远程系统时不再要求您输入密码,它将使用公钥/私钥对。

如果您的远程计算机并不总是安全的,您应该考虑在提示时设置“密码”。

您可能还想配置远端的 ssh 服务器以不允许使用文本密码(仅密钥)来增加安全性。

答案3

我喜欢用

cd -

切换到上一个目录。非常有用!

答案4

sudo !!

以 root 身份重新运行上一个命令。

[当前站点上的顶级命令http://www.commandlinefu.com,一个以这个问题为主题的网站。

相关内容