bash 别名_必不可少的Bash别名

bash 别名

Bash别名是用新命令补充或覆盖Bash命令的方法。 Bash别名使用户可以轻松自定义其在POSIX终端中的体验。 它们通常在$ HOME / .bashrc$ HOME / bash_aliases中定义 (必须由$ HOME / .bashrc加载)。

大多数发行版都会在任何新用户帐户的默认.bashrc文件中至少添加一些流行的别名。 这些是简单的示例,用于演示Bash别名的语法:


   
   
alias ls = 'ls -F'
alias ll = 'ls -lh'

但是,并非所有发行版都附带预填充的别名。 如果手动添加别名,则必须将它们加载到当前的Bash会话中:


   
   
$ source ~/.bashrc

否则,您可以关闭您的终端并重新打开它,以便它重新加载其配置文件。

使用在Bash初始化脚本中定义的那些别名,然后可以键入ll并获取ls -l的结果,而在键入ls时可以得到,而不是普通的old的输出。 ls

这些别名非常有用,但是它们只是在表面上铺平了道路。 以下是十大Bash别名,一旦尝试它们,您将无法生存。

首先设置

在开始之前,创建一个名为〜/ .bash_aliases的文件:


   
   
$ touch ~/.bash_aliases

然后,确保此代码出现在您的〜/ .bashrc文件中:


   
   
if [ -e $HOME / .bash_aliases ] ; then
    source $HOME / .bash_aliases
fi

如果要自己尝试使用本文中的任何别名,请将其输入到.bash_aliases文件中,然后使用源〜/ .bashrc命令将其加载到Bash会话中。

按文件大小排序

如果您是从GUI文件管理器开始计算的,例如GNOME中的Nautilus,MacOS中的Finder或Windows中的Explorer,那么您可能习惯于按文件大小对文件列表进行排序。 您也可以在终端中执行此操作,但这并不十分简洁。

将此别名添加到GNU系统上的配置中:


   
   
alias lt = 'ls --human-readable --size -1 -S --classify'

该别名用ls命令替换lt ,该命令显示每个项目的大小,然后在单个列中按大小对大小进行排序,并带有表示文件类型的符号。 加载新的别名,然后尝试一下:


   
   
$ source ~ / .bashrc
$ lt
total 344K
140K configure *
 44K aclocal.m4
 36K LICENSE
 32K config.status *
 24K Makefile
 24K Makefile.in
 12K config.log
8.0K README.md
4.0K info.slackermedia.Git-portal.json
4.0K git-portal.spec
4.0K flatpak.path.patch
4.0K Makefile.am *
4.0K dot-gitlab.ci.yml
4.0K configure.ac *
    0 autom4te.cache /
    0 share /
    0 bin /
    0 install-sh @
    0 compile @
    0 missing @
    0 COPYING @

在MacOS或BSD上, ls命令没有相同的选项,因此可以使用此别名:


   
   
alias lt = 'du -sh * | sort -h'

这个版本的结果有些不同:


   
   
$ du -sh * | sort -h
0       compile
0       COPYING
0       install-sh
0       missing
4.0K    configure.ac
4.0K    dot-gitlab.ci.yml
4.0K    flatpak.path.patch
4.0K    git-portal.spec
4.0K    info.slackermedia.Git-portal.json
4.0K    Makefile.am
8.0K    README.md
12K     config.log
16K     bin
24K     Makefile
24K     Makefile.in
32K     config.status
36K     LICENSE
44K     aclocal.m4
60K     share
140K    configure
476K    autom4te.cache

实际上,即使在Linux上,该命令也很有用,因为 使用ls列出目录和符号链接的大小为0,这可能不是您真正想要的信息。 这是你的选择。

感谢Brad Alexander提供这个别名。

仅查看已安装的驱动器

mount命令曾经是如此简单。 仅需一个命令,您就可以获取计算机上所有已挂载文件系统的列表,该列表通常用于概述工作站上连接了哪些驱动器。 过去看到三到四个条目令人印象深刻,因为大多数计算机没有比这更多的USB端口,因此结果是可管理的。

现在的计算机要复杂一些,在LVM,物理驱动器,网络存储和虚拟文件系统之间, 安装的结果可能很难解析:


   
   
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime,seclabel)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
devtmpfs on /dev type devtmpfs (rw,nosuid,seclabel,size=8131024k,nr_inodes=2032756,mode=755)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
[...]
/dev/nvme0n1p2 on /boot type ext4 (rw,relatime,seclabel)
/dev/nvme0n1p1 on /boot/efi type vfat (rw,relatime,fmask=0077,dmask=0077,codepage=437,iocharset=ascii,shortname=winnt,errors=remount-ro)
[...]
gvfsd-fuse on /run/user/100977/gvfs type fuse.gvfsd-fuse (rw,nosuid,nodev,relatime,user_id=100977,group_id=100977)
/dev/sda1 on /run/media/seth/pocket type ext4 (rw,nosuid,nodev,relatime,seclabel,uhelper=udisks2)
/dev/sdc1 on /run/media/seth/trip type ext4 (rw,nosuid,nodev,relatime,seclabel,uhelper=udisks2)
binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,relatime)

要解决该问题,请尝试这样的别名:


   
   
alias mnt = "mount | awk -F' ' '{ printf \" %s \t %s \n \" , \$ 1, \$ 3; }' | column -t | egrep ^/dev/ | sort"

此别名使用awk逐列分析mount的输出,从而将输出减少到您可能要查找的内容( 装入了哪些硬盘驱动器,而不是文件系统):


   
   
$ mnt
/dev/mapper/fedora-root  /
/dev/nvme0n1p1           /boot/efi
/dev/nvme0n1p2           /boot
/dev/sda1                /run/media/seth/pocket
/dev/sdc1                /run/media/seth/trip

在MacOS上, mount命令不会提供非常详细的输出,因此别名可能会过大。 但是,如果您希望报告简洁明了,请尝试以下操作:


   
   
alias mnt = 'mount | grep -E ^/dev | column -t'

结果:


   
   
$ mnt
/dev/disk1s1  on  /                (apfs,  local,  journaled)
/dev/disk1s4  on  /private/var/vm  (apfs,  local,  noexec,     journaled,  noatime,  nobrowse)

在您的grep历史记录中查找命令

有时,您会弄清楚如何在终端中执行某些操作,并向自己保证,您将永远不会忘记刚刚学到的东西。 然后一个小时过去了,您完全忘记了自己的所作所为。

每个人都不时需要搜索您的Bash历史记录。 如果您确切知道要搜索的内容,则可以使用Ctrl + R在历史记录中进行反向搜索,但是有时您不记得要查找的确切命令。

这是使该任务更容易实现的别名:


   
   
alias gh = 'history|grep'

这是一个使用方法的例子:


   
   
$ gh bash
482 cat ~/.bashrc | grep _alias
498 emacs ~/.bashrc
530 emacs ~/.bash_aliases
531 source ~/.bashrc

按修改时间排序

它发生在每个星期一:您开始工作,坐在计算机旁,打开终端,您发现您已经忘记了上周五的工作。 您需要一个别名来列出最近修改的文件。

您可以使用ls命令创建别名,以帮助您找到上次停止的位置:


   
   
alias left = 'ls -t -1'

输出很简单,但是您可以根据需要使用--long选项扩展它。 列出的别名显示如下:


   
   
$ left
demo.jpeg
demo.xcf
design-proposal.md
rejects.txt
brainstorm.txt
query-letter.xml

计数文件

如果您需要知道一个目录中有多少个文件,该解决方案是UNIX命令构造的最经典示例之一:使用ls命令列出文件,使用-1选项将其输出控制为仅一列,然后通过管道将其输出到wc (字数统计)命令,以计算单个文件的行数。

这是UNIX哲学如何允许用户使用小型系统组件构建自己的解决方案的精彩展示。 如果您碰巧一天要执行几次,则此命令组合的输入也很多,并且如果不使用-R选项,该命令组合对于目录目录也不起作用,该选项会在输出中引入新行并呈现该练习无用。

相反,此别名使此过程变得容易:


   
   
alias count = 'find . -type f | wc -l'

这一计数文件,忽略目录,但包括目录内容。 如果您的项目文件夹包含两个目录,每个目录包含两个文件,则别名返回四个,因为整个项目中有四个文件。


   
   
$ ls
foo   bar
$ count
4

创建一个Python虚拟环境

您是否使用Python编写代码?

您是否经常使用Python编写代码?

如果这样做,那么您知道创建Python虚拟环境至少需要53次击键。
那是49个太多,但是很容易用两个新别名veva来规避:


   
   
alias ve = 'python3 -m venv ./venv'
alias va = 'source ./venv/bin/activate'

运行ve创建一个名为venv的新目录,其中包含Python3常用的虚拟环境文件系统。 va别名激活您当前shell中的环境:


   
   
$ cd my-project
$ ve
$ va
(venv) $

添加复制进度栏

每个人都在进度条上取笑,因为它们非常不准确。 然而,在内心深处,我们所有人似乎都想要它们。 UNIX cp命令没有进度条,但是它具有-v选项来表示详细信息,这意味着它会回显要复制到终端的每个文件的名称。 这是一个相当不错的技巧,但是当您复制一个大文件并希望指示一些文件尚未传输时,它并不能很好地工作。

pv命令在复制过程中提供了一个进度条,但作为默认应用程序并不常见。 另一方面,几乎每个可用的POSIX系统的默认安装中都包含rsync命令,它被广泛认为是远程和本地复制文件的最明智的方法之一。

更好的是,它具有内置的进度条。


   
   
alias cpv = 'rsync -ah --info=progress2'

使用此别名与使用cp命令相同:


   
   
$ cpv bigfile.flac /run/media/seth/audio/
          3.83M 6%  213.15MB/s    0:00:00 (xfr#4, to-chk=0/4)

使用此命令的一个有趣的副作用是rsync复制文件和目录,而没有cp否则需要的-r标志。

保护自己免受文件删除事故的影响

您不应该使用rm命令。 rm手册甚至说:

警告 :如果使用“ rm”删除文件,通常可以恢复该文件的内容。 如果您想进一步确保内容确实不可恢复,请考虑使用“切细”。

如果要删除文件,则应将文件移至“废纸rash”,就像使用桌面时一样。

POSIX使此操作变得容易,因为垃圾箱是文件系统中可访问的实际位置。 该位置可能会有所不同,具体取决于您的平台:在FreeDesktop上 ,垃圾桶位于〜/ .local / share / Trash ,而在MacOS上,垃圾桶位于〜/ .Trash ,但是无论哪种方式,它都只是一个目录,您可以在其中放置文件在您准备永久删除它们之前,请先将它们隐藏起来。

这个简单的别名提供了一种从终端将文件扔到垃圾箱中的方法:


   
   
alias tcn = 'mv --force -t ~/.local/share/Trash '

该别名使用一个鲜为人知的mv标志,该标志使您能够提供要移动的文件作为最终参数,而忽略了通常要求首先列出该文件的要求。 现在,您可以使用新命令将文件和文件夹移至系统垃圾桶:


   
   
$ ls
foo  bar
$ tcn foo
$ ls
bar

现在文件已“消失”,但是直到您冒出冷汗意识到仍然需要它为止。 此时,您可以从系统垃圾桶中抢救文件; 一定要给Bash和mv开发人员小费。

注意:如果您需要具有更强FreeDesktop兼容性的更强大的Trash命令,请参阅Trashy

简化您的Git工作流程

每个人都有独特的工作流程,但是无论如何,通常都有重复的任务。 如果您定期使用Git,那么您可能会发现有一些重复序列很频繁。 也许您发现自己回到了master分支,并在一天内一次又一次地拉动最新的更改,或者您发现自己创建了标签,然后将其推到远程,或者完全是其他事情。

无论您厌倦了键入什么Git咒语,使用Bash别名都可以减轻一些痛苦。 很大程度上由于Git能够将参数传递给钩子,Git具有丰富的自省命令集,使您不必在Bash中执行不可思议的壮举。

例如,尽管您可能很难在Bash中找到项目的顶级目录(就Bash而言,这是一个完全任意的名称,因为计算机的绝对顶级目录是根目录),Git通过简单的查询即可了解其顶层。 如果您研究了Git钩子,就会发现自己能够找到Bash一无所知的各种信息,但是您可以利用Bash别名来利用这些信息。

无论您当前在该项目中的哪个位置,都可以使用以下别名查找Git项目的顶层,然后将其更改为目录,更改为master分支,然后执行Git拉取:


   
   
alias startgit = 'cd `git rev-parse --show-toplevel` && git checkout master && git pull'

这种别名绝不是通用的别名,但是它演示了相对简单的别名如何消除许多繁琐的导航,命令和等待提示。

一个更简单,可能更通用的别名将使您回到Git项目的顶层。 此别名很有用,因为当您在处理项目时,该项目或多或少会成为您的“临时主目录”目录。 回家就像回家一样简单,这里有一个别名:


   
   
alias cg = 'cd `git rev-parse --show-toplevel`'

现在,无论您进入的目录结构有多深,命令cg都将您带到Git项目的顶部。

更改目录并同时查看内容

曾经(据称)是一位著名科学家提出的,我们可以利用怪胎键入cd后跟ls所消耗的能量来解决地球上的许多能源问题。
这是一种常见的模式,因为通常在更改目录时,您有冲动或需要查看周围情况。

但是,“遍历”计算机的目录树不必是一个开始和停止的过程。

这是个骗子,因为它根本不是别名,但这是探索Bash函数的绝佳借口。 虽然别名非常适合快速替换,但Bash允许您在.bashrc文件(或加载到.bashrc的单独函数文件中添加别名)中添加本地函数。

为了保持模块化,请创建一个名为〜/ .bash_functions的新文件,然后使您的.bashrc加载该文件:


   
   
if [ -e $HOME / .bash_functions ] ; then
    source $HOME / .bash_functions
fi

在函数文件中,添加以下代码:


   
   
function cl ( ) {
    DIR = "$*" ;
        # if no DIR given, go home
        if [ $# -lt 1 ] ; then
                DIR = $HOME ;
    fi ;
    builtin cd " ${DIR} " && \
    # use your preferred ls command
        ls -F --color =auto
}

将函数加载到您的Bash会话中,然后尝试一下:


   
   
$ source ~ / .bash_functions
$ cl Documents
foo bar baz
$ pwd
/ home / seth / Documents
$ cl ..
Desktop  Documents  Downloads
[ ... ]
$ pwd
/ home / seth

函数比别名要灵活得多,但是有了这种灵活性,您就有责任确保您的代码有意义并能实现您所期望的。 别名的意思很简单,因此请使其简单易用,但实用。 要对Bash的行为进行认真的修改,请使用保存在PATH中某个位置的函数或自定义Shell脚本。

根据记录, 落实CDLS序列作为一个别名一些聪明的黑客,所以如果你足够的耐心,那么天空即使使用不起眼的别名限制。

开始别名和功能

定制环境是使Linux变得有趣的原因,而提高效率则是使Linux改变生活的原因。 从简单的别名开始,逐步过渡到功能,然后在评论中发布您必须具备的别名!

翻译自: https://opensource.com/article/19/7/bash-aliases

bash 别名

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值