Maxim Veksler Asked: 2009-03-03 11:46:09 +0800 CST2009-03-03 11:46:09 +0800 CST 2009-03-03 11:46:09 +0800 CST Linux 命令行最佳实践和技巧? 772 我想开始一个讨论,以积累您的 Linux 命令行 (CLI) 最佳实践和技巧。 我已经搜索过这样的讨论来分享下面的评论,但没有找到,因此这篇文章。 我希望我们都能从中吸取教训。 欢迎您分享您的 Bash 技巧、grep、sed、AWK、/proc 和所有其他相关的 Linux/Unix 系统管理、shell 编程最佳实践,以造福我们所有人。 linux bash 30 个回答 Voted jeneriz 2009-03-03T11:54:29+08:002009-03-03T11:54:29+08:00 使用screen,一个由 GNU 项目开发的免费终端多路复用器,它允许您将多个终端合二为一。 您可以开始会话,即使您的连接丢失,您的终端也会被保存,因此您可以稍后或在家中恢复。 Bill K 2009-03-03T13:23:04+08:002009-03-03T13:23:04+08:00 SSH! SSH 是神命令——我认为它是最有价值的学习命令。这些选项可能非常令人生畏,但似乎我一直在学习为 SSH 使用新的命令行选项,而我从未认为这是必要的。在这一点上,我可能已经全部使用了它们。 你用得越多,你就越了解它。你可以用它来做一些令人惊奇的事情。 注意:除了运行 ssh 服务器外,所有这些事情都可以远程完成,无需在您的服务器上进行设置。 通过 Internet 挂载文件系统 在网上搜索 SSHFS 转发命令。 SVN+SSH 协议是从远程客户端到服务器的 Subversion,没有运行 DEAMON!SVN 命令通过 ssh shell 启动服务器,并通过现有管道来回传递信息。rsync 程序做同样的事情,通过 SSH 自己启动一个没有 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 服务器配置为不允许使用文本密码(仅限密钥)以提高安全性。 Fortyrunner 2009-03-04T00:07:01+08:002009-03-04T00:07:01+08:00 我喜欢用 cd - 切换到上一个目录。很有用! Nick Devereaux 2009-03-05T17:50:20+08:002009-03-05T17:50:20+08:00 我最近发现了pv类似于 cat 但具有传输详细信息的命令(管道查看器)。 所以而不是 $ gzip -c access.log > access.log.gz 您可以使用 $ pv access.log | gzip > access.log.gz 611MB 0:00:11 [58.3MB/s] [=> ] 15% ETA 0:00:59 因此,与其不知道您的手术何时结束,现在您会知道! 由彼得利斯克鲁明斯提供 codeinthehole 2009-03-03T13:51:45+08:002009-03-03T13:51:45+08:00 sudo !! 以 root 身份重新运行上一个命令。 [站点http://www.commandlinefu.com上的当前 top 命令,该站点以该问题为主题。] Cory R. King 2009-03-03T11:57:21+08:002009-03-03T11:57:21+08:00 命令行是一个有趣的东西。我认为你只能自己学习这么多,其余的你是在偶然看到别人使用命令行时学到的。 多年来,我一直在煞费苦心地手动输入目录名称。有一天,我看到一个朋友在系统上乱搞,他一直在按 Tab 键。我问“你为什么要点击标签?”。答:它会尝试完成目录或文件名。谁会猜到——制表符补全!输入一些文件或目录,点击选项卡,它会尝试完成您输入的内容(行为取决于哪个 shell)。 有一天,说朋友在命令行上看着我,看着我输入如下内容: coryking@cory ~/trunk/mozi $ pushd /etc /etc ~/trunk/mozi coryking@cory /etc $ popd ~/trunk/mozi coryking@cory ~/trunk/mozi $ 谁会猜到!?他从来不知道popd/ pushd。估计我们甚至... Jonik 2009-03-03T13:05:39+08:002009-03-03T13:05:39+08:00 按Ctrl-R并开始输入命令(或其任何部分) - 它会搜索命令历史记录。再次按 Ctrl-R 将跳转到下一个匹配项,回车执行当前显示的命令,右箭头(至少)会让你先编辑它。 $ (reverse-i-search)`svn': svn status 在得知这一点之前,我已经使用 Linux 作为我的主要操作系统 7 年了,但现在我知道了,它非常方便。 Ali A 2009-03-03T16:43:04+08:002009-03-03T16:43:04+08:00 学习 Vim。 它(可以说)是最好的编辑器,但肯定是裸 Linux 服务器上最好的编辑器。 mouviciel 2009-03-03T11:53:31+08:002009-03-03T11:53:31+08:00 当我想确保使用实际命令而不是别名时,我使用前导反斜杠: \rm -rf ~/tmp kyku 2009-03-03T11:49:25+08:002009-03-03T11:49:25+08:00 即使在您退出后,让程序继续运行有时也很有用。我已经看到了一些使用 nohup 甚至 screen 来实现此目的的解决方案。我知道的最简单的是: $ your_command_here & disown 您还可以分离正在运行的程序: $ your_command_here # Press <Control-Z> to stop the program and bring it to background: $ bg $ disown
使用screen,一个由 GNU 项目开发的免费终端多路复用器,它允许您将多个终端合二为一。
您可以开始会话,即使您的连接丢失,您的终端也会被保存,因此您可以稍后或在家中恢复。
SSH!
SSH 是神命令——我认为它是最有价值的学习命令。这些选项可能非常令人生畏,但似乎我一直在学习为 SSH 使用新的命令行选项,而我从未认为这是必要的。在这一点上,我可能已经全部使用了它们。
你用得越多,你就越了解它。你可以用它来做一些令人惊奇的事情。
注意:除了运行 ssh 服务器外,所有这些事情都可以远程完成,无需在您的服务器上进行设置。
通过 Internet 挂载文件系统
在网上搜索 SSHFS
转发命令。
SVN+SSH 协议是从远程客户端到服务器的 Subversion,没有运行 DEAMON!SVN 命令通过 ssh shell 启动服务器,并通过现有管道来回传递信息。rsync 程序做同样的事情,通过 SSH 自己启动一个没有 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 命令。这是我在工作中的一个例子:
当我输入“ssh home”(没有别的)时,它就像我输入了:
然后将我的本地端口 1025 转发到我家的系统“mac”。原因是我的文件中有另一个条目:
这样一旦我完成了“ssh home”并且窗口仍然打开,我可以输入“ssh mac”,这里工作的计算机实际上会尝试连接到它自己的端口 1025,该端口已转发到“mac: 22" 通过另一个命令,因此它将通过防火墙连接到我家中的 Mac。
编辑——很酷的脚本!
我挖出了一个我很喜欢的旧剧本——必须回来把它贴出来给任何可能感兴趣的人。该脚本称为“authMe”
如果你的主目录中有这个脚本并且有一个可以连接的主机(通过 ssh),那么你可以输入“./authMe hostName”。
如有必要,它将为您创建一个公钥/私钥对,然后它将 ssh 到另一台机器并复制您的公钥(ssh 命令将提示您输入密码...)
此后,SSH 命令在连接到该远程系统时不应再询问您的密码,它将使用公钥/私钥对。
如果您的远程计算机并不总是安全的,您应该考虑在出现提示时设置“密码”。
您可能还希望将远端的 ssh 服务器配置为不允许使用文本密码(仅限密钥)以提高安全性。
我喜欢用
切换到上一个目录。很有用!
我最近发现了
pv
类似于 cat 但具有传输详细信息的命令(管道查看器)。所以而不是
您可以使用
因此,与其不知道您的手术何时结束,现在您会知道!
由彼得利斯克鲁明斯提供
以 root 身份重新运行上一个命令。
[站点http://www.commandlinefu.com上的当前 top 命令,该站点以该问题为主题。]
命令行是一个有趣的东西。我认为你只能自己学习这么多,其余的你是在偶然看到别人使用命令行时学到的。
多年来,我一直在煞费苦心地手动输入目录名称。有一天,我看到一个朋友在系统上乱搞,他一直在按 Tab 键。我问“你为什么要点击标签?”。答:它会尝试完成目录或文件名。谁会猜到——制表符补全!输入一些文件或目录,点击选项卡,它会尝试完成您输入的内容(行为取决于哪个 shell)。
有一天,说朋友在命令行上看着我,看着我输入如下内容:
谁会猜到!?他从来不知道
popd
/pushd
。估计我们甚至...按Ctrl-R并开始输入命令(或其任何部分) - 它会搜索命令历史记录。再次按 Ctrl-R 将跳转到下一个匹配项,回车执行当前显示的命令,右箭头(至少)会让你先编辑它。
在得知这一点之前,我已经使用 Linux 作为我的主要操作系统 7 年了,但现在我知道了,它非常方便。
学习 Vim。
它(可以说)是最好的编辑器,但肯定是裸 Linux 服务器上最好的编辑器。
当我想确保使用实际命令而不是别名时,我使用前导反斜杠:
即使在您退出后,让程序继续运行有时也很有用。我已经看到了一些使用 nohup 甚至 screen 来实现此目的的解决方案。我知道的最简单的是:
您还可以分离正在运行的程序: