您最喜欢的 Linux 终端技巧是什么?

每个人都想提高他们在命令行下的生产力。您最喜欢的 Linux 终端技巧是什么?
337 位读者喜欢这个。
bash logo on green background

Opensource.com

您还记得第一次看到真正精通 Linux 终端的人努力工作的情景吗?

对您来说,这可能看起来像魔法。或者,至少,它看起来像是电影《黑客帝国》里的场景。

当然,在现实中,没有人会坐在那里以每分钟 60 个单词的速度输入命令,看着屏幕上的输出飞快闪过,同时以近乎恒定的速度给他们的机器发出进一步的指令。但是,当您进入状态时,有时,即使只是几分钟,也会感觉像那样。

您最喜欢的终端生产力技巧是什么?也许是您为您经常使用的命令的长串选项设置的简单别名。也许是您用来自动化工作流程中枯燥部分的简短脚本集合。也许是您对 screentmux 等终端多路复用器的精通。或者,也许您对所有 Bash 键盘快捷键的记忆最终让您感觉像一个命令行英雄

无论您最喜欢的技巧是什么,都请本着开源的精神花点时间与社区分享。当您刚开始使用终端时,您希望自己知道什么,以及为什么?请在下面的评论中告诉我们。

User profile image.
Opensource.com 发布关于创建、采用和分享开源解决方案的故事。在 Twitter 上关注我们 @opensourceway。

80 条评论

使用 rxvt-unicode,我最喜欢的技巧是添加配色方案和选项卡式界面

$ cat ~/.Xdefaults

! 匹配 gnome-terminal “Linux 控制台”方案
! 前景/背景
URxvt*background: [90]#000000
URxvt*depth: 32
URxvt*foreground: #ffffff
! 黑色
URxvt.color0 : #000000
URxvt.color8 : #555555
! 红色
URxvt.color1 : #AA0000
URxvt.color9 : #FF5555
! 绿色
URxvt.color2 : #00AA00
URxvt.color10 : #55FF55
! 黄色
URxvt.color3 : #AA5500
URxvt.color11 : #FFFF55
! 蓝色
URxvt.color4 : #0000AA
URxvt.color12 : #5555FF
! 洋红色
URxvt.color5 : #AA00AA
URxvt.color13 : #FF55FF
! 青色
URxvt.color6 : #00AAAA
URxvt.color14 : #55FFFF
! 白色
URxvt.color7 : #AAAAAA
URxvt.color15 : #FFFFFF

URxvt*font: xft:Monospace:pixelsize=12

URxvt*boldFont: xft:Monospace:pixelsize=12
!URxvt*letterSpace: -1
URxvt.perl-ext-common : default,matcher
URxvt.urlLauncher : firefox
URxvt.matcher.button : 1

! 滚动条样式 - rxvt (默认), plain (最紧凑), next, 或 xterm
URxvt.scrollstyle: rxvt
URxvt.scrollBar_right: True
URxvt.iconFile: /usr/share/icons/gnome/256x256/apps/terminal.png
URxvt.keysym.C-Delete: perl:matcher:last
URxvt.keysym.M-Delete: perl:matcher:list

URxvt.colorUL: #4682B4

! 选项卡
! Shift+ 向下 新建选项卡
! Shift+ 向左 转到左侧选项卡
! Shift+ 向右 转到右侧选项卡
! Ctrl+ 向左 将选项卡向左移动
! Ctrl+ 向右 将选项卡向右移动
! Ctrl+D: 关闭选项卡
URxvt.perl-ext-common: default,tabbed
URxvt.tabbed.tabbar-fg: 2
URxvt.tabbed.tabbar-bg: 0
URxvt.tabbed.tab-fg: 3
URxvt.tabbed.tab-bg: 0

<()$() 的用法

从命令行启动一个 python http 服务器。类似 ‘python3 -m http.server’ 这样的命令将使本地文件夹通过 http 可用,这通常比 nfs 或 sftp 更快。

否则,就是别名。我最喜欢的是别名 "grin"="grep -rin",我一直用它来查找代码中的东西。

还有,locate,这是一种在 Unix 中查找文件的超快方法,因为它基于缓存的数据库。

我最喜欢的是 sudo !! 每当我忘记在命令前输入 sudo 时。它将使用 sudo 运行上一个命令。

大家好,
我一直很喜欢使用 Linux ubuntu 18.04 bionic beaver,我只是最近才开始认真学习 linux 环境和终端。

所以,我想分享的技巧可能真的不算是什么技巧,更像是我第一次尝试使用终端安装软件包或软件时,我知道我应该使用
$> apt-get install [这里是我想安装的软件的名称]

但是,我记得收到了一个关于无法访问某些文件或位置之类的错误。

所以我一直在挠头,但在快速在线搜索后,我意识到我需要在命令中使用关键字 "sudo",所以我应该像这样输入
$> sudo apt-get install [要安装的软件名称]

当我按下键盘上的回车键后,系统提示我输入密码,这部分也让我有点困惑,我一直输入我自己的 linux 用户登录密码,但一直失败,提示我密码不正确,天哪!!那时我一直在怀疑自己的理智,最终我记得在我的 linux 安装过程中,我确实遇到一个屏幕,要求我为名为“root”的东西输入某种密码。无论如何,结果证明我应该在终端中输入的密码是所谓的“root 密码”。

就这样。那是我最早的 Linux 终端学习经历之一。通过终端学习做事一直是一种乐趣。

祝大家一切顺利

~Sam~

现在你把我搞糊涂了:sudo 的重点是当它提示你时,你*确实*输入你*自己的*密码。

但是,如果在安装时要求您输入 root 密码 - 您没有说是哪个发行版 - 那么您可能没有设置 sudoers 文件,并且期望您以 root 身份进行系统管理。

回复 作者 Peaceful Salma…

在许多安装中,只有 “wheel” 或 “admin” 组中的用户才具有 sudo 访问权限。因此,您可能需要先将自己添加到该组。

回复 作者 dgrb (未验证)

我也经常忘记 sudo。如果这是一个很长的命令需要重新输入,请执行

sudo !!

这将使用 sudo 重新运行上一个命令

回复 作者 Peaceful Salma…

有趣的是,您仍然在不知不觉中与同样的问题作斗争。当使用 sudo 时,您应该输入当前用户的密码,而不是 root 密码。如果您输入 su,然后输入 root 密码,然后运行命令,那么您将使用 root 密码来运行特权命令。

回复 作者 Peaceful Salma…

我喜欢使用 set -o vi,这样我的所有命令历史记录就像使用 vi 编辑器一样,我可以按 k 然后输入前几个字符来搜索命令。我也可以编辑 Linnea,而无需反复按左/右箭头,只需使用常规的 vi 语法即可。

与其说是一个 shell 技巧,不如说我想在旁白视频时模拟在命令行中键入。我找到了一些“模拟键入”实用程序,但决定自己编写一个。基本上,它非常像 'echo',除了

chdelay(ch);
putchar(ch);
fflush(stdout);

而 chdelay() 是我编写的一个函数,它根据字符类型创建延迟 - 因此您可以为空格设置更长的延迟,并在行尾之前设置更长的延迟。

有了这个,我编写了一个简单的 shell 脚本,该脚本使用我的 'simtype' 程序回显命令行,然后执行相同的命令行。这意味着我无需在谈论命令行时键入它。
https://www.youtube.com/watch?v=o09FLGmbdp4

正如其他人评论的那样...我想我目前最喜欢的是别名。虽然我的别名与 ssh 进入多台服务器有关。我发现输入长服务器名称很烦人并且会花费额外的时间,但是一旦配置文件设置好(也在服务器本身上),它确实简化了从一台服务器跳转到另一台服务器的过程。

我的配置文件已经有了我的身份信息... 我只是为我经常使用的所有服务器连接添加了以下内容。

Host dev01
HostName somelgservername.businessname.com

现在我可以从我的机器直接连接到服务器,只需输入
ssh dev01

将其添加到所有服务器上的配置允许我通过简单地键入该命令来跳转到另一台服务器。

所有这些都假设一个人已经完成了添加您的公钥和私钥的所有步骤,并且是一个额外的设置步骤...但它确实帮助我节省了时间。

我目前正在使用(并且喜爱)Fedora 28。如果我正在使用终端,我经常使用 vim。为了使我的终端体验更加愉快,我喜欢在我的主目录中创建文件 .vimrc,内容如下

syntax on
set number
colorscheme slate

下次您使用 vim 时,您将默认获得语法高亮、行号和 slate 配色方案!

复制整个目录树而不更改文件属性

tax cf - | (cd destination_dir && tar xf - )

那不是 cp -a 吗??

回复 作者 Francisco Mardones (未验证)

我不明白这些人为什么会如此糟糕地误导别人。当然,您可以使用 cp 来复制目录和隐藏文件。

回复 作者 Shawn H Corey

当 cp 的许多选项还不存在时,几十年前使用两个 tar 实例克隆目录的技巧就奏效了。特别是那些保留用户/组/权限的选项,那些复制符号链接(而不是跟随它们)的选项,以及其他用于制作备份类型克隆的必要选项。

今天,大部分都可以用 cp 的 “-a” 和 “-R” 选项来完成,但这只是一个相对较新的创新。

回复 作者 WhaitWhat (未验证)

tar 方法与 cp 或其他方法的区别在于,tar 保留(如果您使用正确的选项)权限和软链接。如果您使用 cp,您的软链接会消失,并且您将获得软链接指向的文件的另一个副本(并且不再是软链接)。Tar 是一种更好的方法。但是,如果您正在处理 /dev,则它会缺少,在这种情况下,cpio 是一种更好的方法,或者 dump 和交互式 restore。

回复 作者 Francisco Mardones (未验证)

rsync 也非常适合这项工作。

回复 作者 Francisco Mardones (未验证)

安装 Yakuake 终端。

然后将其添加到设置中的启动程序中,以便在我登录时启动它。

在 Yakuake 中禁用启动通知,这样它就不会用愚蠢的启动消息来烦我

更改设置,使其在启动时不会打开。

更改设置以确保它在失去焦点时关闭。

添加 “Meta + T” 快捷方式,以便在我按下 “Meta + T” 时打开(下拉)终端。

这使我可以立即拥有一个终端,它可以立即隐藏,在后台运行命令或脚本,而无需任何麻烦或担心,因为我可以立即打开任何东西来检查它,最重要的是,我可以自定义终端以匹配我的系统的 “外观和感觉”(又名主题),甚至使其半透明,或将背景色和前景色更改为我喜欢的颜色。

有史以来最好的终端!

我喜欢 'dirs, pushed, 和 popd' 的效率。一旦掌握了这个概念,它就变得非常自然,并且是遍历和移动目录的真正节省时间的方法。多年来,我经常被问到类似“你是如何像那样跳来跳去的?太神奇了。”之类的问题。很多次。此外,如果有人感兴趣,我在 GitHub 上有一个项目,它将本机 bag 'dirs' 管理为项目:它被称为 "dirp"

我从事许多项目,并且一些项目会修改 shell 环境,从深层目录操作等等。所以我使用 bash 中的 'rc' 函数
rc () {
source ~/rc/$1.rc
}
来获取我在该特定文件中的项目。由于我也使用许多机器,因此 rc 文件也自我记录了这方面。也是一个很好的提醒,只是为了查看 ~/rc 目录中文件的名称。

我有一个命令 "ec",它是我的编辑器,它在文件上调用 'emacsclient --no-wait ',但也记录文件的日期、目录和名称。然后命令 "ecg" 在文件上使用 grep,以帮助我提醒自己该文件在哪里,例如
ecg sky1
将返回
2018-05-21_02:44:17 /home/teuben/QAC/ngVLA sky1.py
2018-05-28_22:21:03 /home/teuben/QAC/test sky1.py
2018-06-10_21:41:39 /home/teuben/QAC test/sky1.py
这正是我在屏幕上需要的一切,以便回到我之前做过的事情。

安装 'pv'。它将为您提供所有内容的进度条。将其用作您将使用 'cat' 的替代品。通过它管道传输内容。它太棒了。

1. bash 提示符,显示主机名,PROMPT_COMMAND 设置为使用工作目录更新终端标题。
2. python venv 的 bash 提示符更改
3. 使用 terminator 获取多个窗格
4. .ssh/config 设置,根据主机使用现代/中级/cisco 的最佳实践密码规范
5. 使用 ansible 在任何地方设置我的环境
6. pageup/pagedown 映射到历史记录搜索
7. .ssh/config Host 行包含别名,以避免不必要的 ssh-keyscan 通知
8. 对任何不显示进度的应用程序(如 dd)使用 'pv'
9. XXX | sudo tee -a 文件名,用于添加到系统文件
10. gpg + gpg-agent 用于密码短语

第一次看到在命令行中使用 Tab 补全时,它对我来说就像魔法一样。

我是一个简单的人,我喜欢 Ctrl+R,它允许在终端中搜索以前输入的命令。

exit -> 意味着所有工作都已完成,我可以回家了

一个非常简单的技巧:!!
或 !tar

我将 'less -FsXR' 设置为两个字母的别名,并且经常使用它。但是,当 less 抱怨我尝试读取目录而不是文件时,我不喜欢它。
我通过将此内容放入我的 shell rc 文件中来修复了该问题

LESSOPEN='|dir=%s;test -d "$dir" && ls -lah --color "$dir"';export LESSOPEN

我几乎将 screen 用于我的所有终端活动。我通常使用 screen。我可以保持终端会话打开,并使用 screen -ls 和 screen -r 重新连接到它们

Screen 使我能够在 Windows 系统、Linux 和 Mac 系统之间旅行,并且仍然回到我的开发状态,emacs 仍然完好无损。

❤️ screen

我还发现 'watch' 对于监控长时间运行的迭代过程很有用。

这很有趣!我正在使用带有 i3wm 的 Debian,我最喜欢的 bash “技巧” 是 cut。它允许您从长列表中获取一列,并定义分隔符。

还有... touch {fileone.txt,file2.txt,file3.txt} 我觉得很棒!

我正在使用带有 i3wm 的 Debian。我很喜欢它!

只是为了扩展花括号文件命名的酷炫之处
touch file{one,2,3}.txt

做同样的事情。您可以仅使用逗号表示空,例如
touch {fileone.txt,file2.txt,file3.txt,file.txt}


touch file{one,2,3,}.txt

相同,最后一个逗号为您提供文件名 "file.txt"

回复 作者 Ezequiel Lopez (未验证)

GNU Parallel,它有点像大杂烩,但哦,天哪,它的力量。获取任何内容的输出,并在其中并行操作……取代 bash 循环、xargs 和其他工具。

sudo !! - 以 sudo 身份执行上一个命令。当您忘记使用 sudo 时,这是最好的,并且比编辑上一个命令以在前面加上 sudo 更快

oh-my-zsh
fzf
vim
solarized dark everything
平铺窗口管理器!xmonad

cp /path/to/file{,.bak}

这让我感觉自己很聪明。

我还最近在一个课程中接触了 Tab 补全,这节省了很多时间;非常适合您只记住一半的命令或输入长文件名。我发现另一个有用的命令是 script 命令,它记录您在终端中键入的所有命令;我使用它来记录我所做的事情,因为我必须在现场的其他服务器上重复这项工作。

“sudo !!”。执行上一个命令,但在开头加上 sudo。
例如 "fdisk -lu"
权限被拒绝。
“sudo !!”
“sudo fdisk -lu”

您可以使用 !$,它表示上一个命令的最后一个参数。

-.(句点) 的作用相同,您可以从上一个 cmd 中获取任何参数,通过 -# (数字,从零开始表示命令本身) 进行复制,并通过 -y 将其拖动到光标处。

回复 作者 Agent766 (未验证)

嗯,将我的 meta 键名称变成了 html 标签。该 ALT-.(句点), ALT-# (数字) 用于复制,CTRL-ALT-y 用于拖动/粘贴复制的参数

回复 作者 afbach

我认为其他人也提到过,但是 yum update 对我来说是真正的启发。从 Windows 转过来,能够使用一个简单的命令来完成需要多个步骤才能完成的事情,就像天堂打开,天使在歌唱一样。从那时起,我探索了所有开关和修改命令的方法,使生活更加轻松。

我确信我使用了更多,但是当我第一次接管我们的 Red Hat 环境并开始学习 Linux 时,这对我的影响最大。

我知道这很逊,但是我在我的 .bashrc 文件中添加了一些快捷方式,使命令更短

[jhibbets@jhibbets ~]$ cat .bashrc
# .bashrc

# 用户特定的别名和函数

# 来源全局定义
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi

alias q='exit'
alias h='cd ~/'
alias c='clear'

不如你想象的那么逊。哈哈。这些都在我的个人资料中。

alias ll='ls -lh $LS_OPTIONS'
alias llm='ls -alh $LS_OPTIONS | less'
alias lrt='ls -alhrt $LS_OPTIONS'
alias ls='ls $LS_OPTIONS'
alias lsd='ls -lhd */ 2>/dev/null $LS_OPTIONS'
alias lsnd='ls -lh $LS_OPTIONS |grep -v ^d'
alias ipcalc='ipcalc.pl -nb'
unalias rm
alias cp="cp"
alias mv="mv"
alias df="df -h"
alias vi="/usr/bin/vim"
alias ping="/bin/ping -n"

回复 作者 jhibbets

1.) ls -lt 按日期列出文件
2.) ip 命令,它已经取代了 ifconfig 工具集。
3.) Reboot "抱歉老板,我不知道发生了什么,服务器应该在 10 分钟内恢复"
4.) Sudo rm -rf \*

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 获得许可。
© . All rights reserved.