你最喜欢的 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 console" 方案
! 前景/背景
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 设置为对现代/中级/思科主机使用最佳实践密码规范
5. ansible 在任何地方设置我的环境
6. pageup/pagedown 映射到历史记录搜索
7. .ssh/config Host 行包含别名,以避免不必要的 ssh-keyscan 通知
8. 对任何不显示进度的应用程序(如 dd)使用 'pv'
9. XXX | sudo tee -a filename 用于添加到系统文件
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 一切
平铺窗口管理器!xmonad

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

这让我感觉自己很聪明。

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

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

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

-. (句点)的作用相同,你可以通过 -# (数字,从零开始表示命令本身)从上一个命令中获取任何参数进行复制,并使用 -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.