您最喜欢的 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…

或者按向上箭头,然后按 Home 键并输入 "sudo "

回复 作者 gMagicScott (未验证)

有趣的是,您仍然在不知不觉中与同样的问题作斗争。当使用 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,则 tar 就不足了,在这种情况下,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. bash 提示符为 python venv 更改
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.