AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 68883
In Process
Maxim Veksler
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 30 个回答
  • 21217 Views

30 个回答

  • Voted
  1. jeneriz
    2009-03-03T11:54:29+08:002009-03-03T11:54:29+08:00

    使用screen,一个由 GNU 项目开发的免费终端多路复用器,它允许您将多个终端合二为一。

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

    • 111
  2. 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 服务器配置为不允许使用文本密码(仅限密钥)以提高安全性。

    • 101
  3. Fortyrunner
    2009-03-04T00:07:01+08:002009-03-04T00:07:01+08:00

    我喜欢用

    cd -
    

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

    • 73
  4. 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
    

    因此,与其不知道您的手术何时结束,现在您会知道!

    由彼得利斯克鲁明斯提供

    • 69
  5. codeinthehole
    2009-03-03T13:51:45+08:002009-03-03T13:51:45+08:00
    sudo !!
    

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

    [站点http://www.commandlinefu.com上的当前 top 命令,该站点以该问题为主题。]

    • 53
  6. 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。估计我们甚至...

    • 45
  7. 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 年了,但现在我知道了,它非常方便。

    • 45
  8. Ali A
    2009-03-03T16:43:04+08:002009-03-03T16:43:04+08:00

    学习 Vim。

    它(可以说)是最好的编辑器,但肯定是裸 Linux 服务器上最好的编辑器。

    • 41
  9. mouviciel
    2009-03-03T11:53:31+08:002009-03-03T11:53:31+08:00

    当我想确保使用实际命令而不是别名时,我使用前导反斜杠:

    \rm -rf ~/tmp
    
    • 38
  10. 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
    
    • 38

相关问题

  • 多操作系统环境的首选电子邮件客户端

  • 你最喜欢的 Linux 发行版是什么?[关闭]

  • 更改 PHP 的默认配置设置?

  • 保护新的 Ubuntu 服务器 [关闭]

  • (软)Ubuntu 7.10 上的 RAID 6,我应该迁移到 8.10 吗?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve