你最喜欢的 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 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”

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

-.(句点) 做同样的事情,你可以通过 -# (数字,从零开始表示命令本身) 从上一个 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.