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 别名

bash 别名_必不可少的Bash别名相关推荐

  1. bash 脚本_实用的 bash 自定义脚本,快速提效工作流程

    作者:掘金@苏里    https://juejin.im/post/6844904185599623175 前言 工作时间久了,发现越来越离不开 bash 自动化脚本了.bash 对于我们的便利体现 ...

  2. linux bash 变量_如何在Linux上的Bash中设置环境变量

    linux bash 变量 fatmawati achmad zaenuri/Shutterstock Fatmawati achmad zaenuri / Shutterstock There's ...

  3. shell bash脚本_如何在Windows 10上创建和运行Bash Shell脚本

    shell bash脚本 With the arrival of Windows 10's Bash shell, you can now create and run Bash shell scri ...

  4. bash 获取脚本存放路径_如何获取Bash脚本自己的路径

    bash 获取脚本存放路径 Bash script may need to get its own path. In normal Bash script, $0 is the path to the ...

  5. 几种常见shell解释器(sh,bash,csh,tcsh,ash)以及bash的优点

    文章目录 shell解释器的定义 shell的分类 sh csh tcsh ash bash bash 的优点 shell解释器的定义 Unix/Linux上常见的Shell脚本解释器有bash.sh ...

  6. 多媒体-设备的名称已被此应用程序用作别名,请使用唯一的别名

    在给TEASOFT增加背景音乐功能的时候,也就是在原来的MUSICFORM中有增加了一个MediaPlayer对象,在原来播放Video的同时还,使用FootButton控制背景音乐时,使用第二个Me ...

  7. oracle别名用双引号,Oracle别名大小写 -----解决方案

    今天做bootstrap的treeview,要求输入节点ID id,父节点ID pid,文本 text 但是执行的sql别名都是大写,所以找了下orcl的别名如何小写的问题 代码如下:SELECT T ...

  8. macos -bash: yarn: command not found/-bash: cnpm: command not found

    博客主要更新地址:?https://www.cnblogs.com/niceyoo -bash: cnpm: command not found -bash: yarn: command not fo ...

  9. Linux - #!/bin/bash 和 #!/usr/bin/env bash 的区别

    起因 为什么会想到写 #!/bin/bash 和 #!/usr/bin/env bash 的区别呢?还要从一次装插件的过程说起. 由于刚开始接触 Shell Script 不久,对一些语法用法等还不是 ...

最新文章

  1. 理解Docker——深入引擎室
  2. Powershell记录2
  3. Windows下VisualSVN Server的安装与配置方法(图文)
  4. python:实现Django简单的网页设计
  5. 关于m_pMainWnd = dlg的错误
  6. oracle 同义词_Oracle迁移到MySQL,必须要搞明白这几个问题
  7. python亲密度_859. 亲密字符串(Python)
  8. 开源jeecms,jeebbs学习笔记4——从jo_user表看持久层设计
  9. verilog赋多位值_Verilog入门学习笔记——第一弹
  10. uniapp手写地图搜索选取功能
  11. Java实现微信刷屏(2)
  12. MATLAB 显示输出数据的三种方式
  13. html添加js的代码注释,JavaScript 注释方法总结
  14. unbutu服务器误删文件,ubuntu中恢复rm命令误删文件
  15. m4s格式转换mp3_音乐怎么转换mp3格式
  16. [ITIL学习笔记]ITIL认证相关
  17. Java中Json解析
  18. Project directory ‘x/x/x‘ is not part of the build defined by settings file ‘x/x/x‘. If this is ...
  19. Power BI——建模
  20. “驯服”振荡运算放大器(2)——外部容性负载

热门文章

  1. 数据库性能怎么提升?
  2. kafka中生产者和消费者的分区问题
  3. Linux时间同步(内外网/内网/外网)
  4. Android学习笔记——保存数据到SQL数据库中(Saving Data in SQL Databases)
  5. @dynamic 模拟NSManagedObject类的内部实现,AFN的非常规用法
  6. tableciewCell 样式
  7. 备忘:VC++ 中的异常处理
  8. 晒2012年度十大杰出IT博客 奖品
  9. [脚本收集]提取Tripntale图片
  10. 程序员的进阶课-架构师之路(5)-队列