您的位置 首页 > 德语词汇

bash是什么意思(不可或缺的)

大家好,关于bash是什么意思很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于不可或缺的的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!

厌倦了一遍又一遍地输入相同的长命令?你觉得在命令行上工作效率低吗?Bash别名可以为你创造一个与众不同的世界。

bash是什么意思(不可或缺的)

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

大多数发行版在新用户帐户的默认.bashrc文件中至少添加了一些流行的别名。这些可以用来简单演示Bash别名的语法:

aliasls='ls-F'\naliasll='ls-lh'\n

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

$source~/.bashrc\n

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

通过Bash初始化脚本中定义的那些别名,你可以键入ll而得到ls-l的结果,当你键入ls时,得到也不是原来的ls的普通输出。

那些别名很棒,但它们只是浅尝辄止。以下是十大Bash别名,一旦你试过它们,你会发现再也不能离开它们。

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

$touch~/.bash_aliases\n

然后,确认这些代码出现在你的~/.bashrc文件当中:

if[-e$HOME/.bash_aliases];then\nsource$HOME/.bash_aliases\nfi\n

如果你想亲自尝试本文中的任何别名,请将它们输入到.bash_aliases文件当中,然后使用source~/.bashrc命令将它们加载到当前Bash会话中。

如果你一开始使用过GNOME中的Nautilus、MacOS中的Finder或Windows中的资源管理器等GUI文件管理器,那么你很可能习惯了按文件大小排序文件列表。你也可以在终端上做到这一点,但这条命令不是很简洁。

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

aliaslt='ls--human-readable--size-1-S--classify'\n

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

$source~/.bashrc\n$lt\ntotal344K\n140Kconfigure*\n44Kaclocal.m4\n36KLICENSE\n32Kconfig.status*\n24KMakefile\n24KMakefile.in\n12Kconfig.log\n8.0KREADME.md\n4.0Kinfo.slackermedia.Git-portal.json\n4.0Kgit-portal.spec\n4.0Kflatpak.path.patch\n4.0KMakefile.am*\n4.0Kdot-gitlab.ci.yml\n4.0Kconfigure.ac*\n0autom4te.cache/\n0share/\n0bin/\n0install-sh@\n0compile@\n0missing@\n0COPYING@\n

在MacOS或BSD上,ls命令没有相同的选项,因此这个别名可以改为:

aliaslt='du-sh*|sort-h'\n

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

$du-sh*|sort-h\n0compile\n0COPYING\n0install-sh\n0missing\n4.0Kconfigure.ac\n4.0Kdot-gitlab.ci.yml\n4.0Kflatpak.path.patch\n4.0Kgit-portal.spec\n4.0Kinfo.slackermedia.Git-portal.json\n4.0KMakefile.am\n8.0KREADME.md\n12Kconfig.log\n16Kbin\n24KMakefile\n24KMakefile.in\n32Kconfig.status\n36KLICENSE\n44Kaclocal.m4\n60Kshare\n140Kconfigure\n476Kautom4te.cache\n

实际上,即使在Linux上,上面这个命令也很有用,因为使用ls列出的目录和符号链接的大小为0,这可能不是你真正想要的信息。使用哪个看你自己的喜好。

感谢BradAlexander提供的这个别名的思路。

mount命令过去很简单。只需一个命令,你就可以获得计算机上所有已挂载的文件系统的列表,它经常用于概览连接到工作站有哪些驱动器。在过去看到超过三、四个条目就会令人印象深刻,因为大多数计算机没有那么多的USB端口,因此这个结果还是比较好查看的。

现在计算机有点复杂,有LVM、物理驱动器、网络存储和虚拟文件系统,mount的结果就很难一目了然:

sysfson/systypesysfs(rw,nosuid,nodev,noexec,relatime,seclabel)\nprocon/proctypeproc(rw,nosuid,nodev,noexec,relatime)\ndevtmpfson/devtypedevtmpfs(rw,nosuid,seclabel,size=8131024k,nr_inodes=2032756,mode=755)\nsecurityfson/sys/kernel/securitytypesecurityfs(rw,nosuid,nodev,noexec,relatime)\n[...]\n/dev/nvme0n1p2on/boottypeext4(rw,relatime,seclabel)\n/dev/nvme0n1p1on/boot/efitypevfat(rw,relatime,fmask=0077,dmask=0077,codepage=437,iocharset=ascii,shortname=winnt,errors=remount-ro)\n[...]\ngvfsd-fuseon/run/user/100977/gvfstypefuse.gvfsd-fuse(rw,nosuid,nodev,relatime,user_id=100977,group_id=100977)\n/dev/sda1on/run/media/seth/pockettypeext4(rw,nosuid,nodev,relatime,seclabel,uhelper=udisks2)\n/dev/sdc1on/run/media/seth/triptypeext4(rw,nosuid,nodev,relatime,seclabel,uhelper=udisks2)\nbinfmt_miscon/proc/sys/fs/binfmt_misctypebinfmt_misc(rw,relatime)\n

要解决这个问题,试试这个别名:

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

此别名使用awk按列解析mount的输出,将输出减少到你可能想要查找的内容(挂载了哪些硬盘驱动器,而不是文件系统):

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

在MacOS上,mount命令不提供非常详细的输出,因此这个别名可能过度精简了。但是,如果你更喜欢简洁的报告,请尝试以下方法:

aliasmnt='mount|grep-E^/dev|column-t'\n

结果:

$mnt\n/dev/disk1s1on/(apfs,local,journaled)\n/dev/disk1s4on/private/var/vm(apfs,local,noexec,journaled,noatime,nobrowse)\n在你的grep历史中查找命令

有时你好不容易弄清楚了如何在终端完成某件事,并觉得自己永远不会忘记你刚学到的东西。然后,一个小时过去之后你就完全忘记了你做了什么。

搜索Bash历史记录是每个人不时要做的事情。如果你确切地知道要搜索的内容,可以使用Ctrl+R对历史记录进行反向搜索,但有时你无法记住要查找的确切命令。

aliasgh='history|grep'\n

这是如何使用的例子:

$ghbash\n482cat~/.bashrc|grep_alias\n498emacs~/.bashrc\n530emacs~/.bash_aliases\n531source~/.bashrc\n按修改时间排序

每个星期一都会这样:你坐在你的电脑前开始工作,你打开一个终端,你发现你已经忘记了上周五你在做什么。你需要的是列出最近修改的文件的别名。

你可以使用ls命令创建别名,以帮助你找到上次离开的位置:

aliasleft='ls-t-1'\n

输出很简单,但如果你愿意,可以使用--long选项扩展它。这个别名列出的显示如下:

$left\ndemo.jpeg\ndemo.xcf\ndesign-proposal.md\nrejects.txt\nbrainstorm.txt\nquery-letter.xml\n文件计数

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

这是UNIX理念如何允许用户使用小型的系统组件构建自己的解决方案的精彩演示。如果你碰巧每天都要做几次,这个命令组合也要输入很多字母,如果没有使用-R选项,它就不能用于目录,这会为输出引入新行并导致无用的结果。

而这个别名使这个过程变得简单:

aliascount='find.-typef|wc-l'\n

这个别名会计算文件,忽略目录,但不会忽略目录的内容。如果你有一个包含两个目录的项目文件夹,每个目录包含两个文件,则该别名将返回4,因为整个项目中有4个文件。

$ls\nfoobar\n$count\n4\n创建Python虚拟环境

你用Python编程吗?

如果是这样,那么你就知道创建Python虚拟环境至少需要53次击键。

这个数字里有49次是多余的,它很容易被两个名为ve和va的新别名所解决:

aliasve='python3-mvenv./venv'\naliasva='source./venv/bin/activate'\n

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

$cdmy-project\n$ve\n$va\n(venv)$\n增加一个复制进度条

每个人都会吐槽进度条,因为它们似乎总是不合时宜。然而,在内心深处,我们似乎都想要它们。UNIX的cp命令没有进度条,但它有一个-v选项用于显示详细信息,它回显了复制的每个文件名到终端。这是一个相当不错的技巧,但是当你复制一个大文件并且想要了解还有多少文件尚未传输时,它的作用就没那么大了。

pv命令可以在复制期间提供进度条,但它并不常用。另一方面,rsync命令包含在几乎所有的POSIX系统的默认安装中,并且它被普遍认为是远程和本地复制文件的最智能方法之一。

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

aliascpv='rsync-ah--info=progress2'\n

像使用cp命令一样使用此别名:

$cpvbigfile.flac/run/media/seth/audio/\n3.83M6%213.15MB/s0:00:00(xfr#4,to-chk=0/4)\n

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

你不应该使用rm命令。rm手册甚至这样说:

警告:如果使用rm删除文件,通常可以恢复该文件的内容。如果你想要更加确保内容真正无法恢复,请考虑使用shred。

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

POSIX使这很简单,因为垃圾桶是文件系统中可访问的一个实际位置。该位置可能会发生变化,具体取决于你的平台:在FreeDesktop上,“垃圾桶”位于~/.local/share/Trash,而在MacOS上则是~/.Trash,但无论如何,它只是一个目录,你可以将文件藏在那个看不见的地方,直到你准备永久删除它们为止。

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

aliastcn='mv--force-t~/.local/share/Trash'\n

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

$ls\nfoobar\n$tcnfoo\n$ls\nbar\n

现在文件已“消失”,只有在你一头冷汗的时候才意识到你还需要它。此时,你可以从系统垃圾桶中抢救该文件;这肯定可以给Bash和mv开发人员提供一些帮助。

注意:如果你需要一个具有更好的FreeDesktop兼容性的更强大的垃圾桶命令,请参阅Trashy。

每个人都有自己独特的工作流程,但无论如何,通常都会有重复的任务。如果你经常使用Git,那么你可能会发现自己经常重复的一些操作序列。也许你会发现自己回到主分支并整天一遍又一遍地拉取最新的变化,或者你可能发现自己创建了标签然后将它们推到远端,抑或可能完全是其它的什么东西。

无论让你厌倦一遍遍输入的Git魔咒是什么,你都可以通过Bash别名减轻一些痛苦。很大程度上,由于它能够将参数传递给钩子,Git拥有着丰富的内省命令,可以让你不必在Bash中执行那些丑陋冗长的命令。

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

这是一个来查找Git项目的顶级目录的别名,无论你当前在哪个项目中工作,都可以将目录改变为顶级目录,切换到主分支,并执行Git拉取:

aliasstartgit='cd`gitrev-parse--show-toplevel`&&gitcheckoutmaster&&gitpull'\n

这种别名绝不是一个普遍有用的别名,但它演示了一个相对简单的别名如何能够消除大量繁琐的导航、命令和等待提示。

一个更简单,可能更通用的别名将使你返回到Git项目的顶级目录。这个别名非常有用,因为当你在一个项目上工作时,该项目或多或少会成为你的“临时家目录”。它应该像回家一样简单,就像回你真正的家一样,这里有一个别名:

aliascg='cd`gitrev-parse--show-toplevel`'\n

现在,命令cg将你带到Git项目的顶部,无论你下潜的目录结构有多深。

(据称)曾经一位著名科学家提出过,我们可以通过收集极客输入cd后跟ls消耗的能量来解决地球上的许多能量问题。

这是一种常见的用法,因为通常当你更改目录时,你都会有查看周围的内容的冲动或需要。

但是在你的计算机的目录树中移动并不一定是一个走走停停的过程。

这是一个作弊,因为它根本不是别名,但它是探索Bash功能的一个很好的借口。虽然别名非常适合快速替换一个命令,但Bash也允许你在.bashrc文件中添加本地函数(或者你加载到.bashrc中的单独函数文件,就像你的别名文件一样)。

为了保持模块化,创建一个名为~/.bash_functions的新文件,然后让你的.bashrc加载它:

if[-e$HOME/.bash_functions];then\nsource$HOME/.bash_functions\nfi\n

在该函数文件中,添加这些代码:

functioncl(){\nDIR="$*";\n#ifnoDIRgiven,gohome\nif[$#-lt1];then\nDIR=$HOME;\nfi;\nbuiltincd"${DIR}"&&\\\n#useyourpreferredlscommand\nls-F--color=auto\n}\n

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

$source~/.bash_functions\n$clDocuments\nfoobarbaz\n$pwd\n/home/seth/Documents\n$cl..\nDesktopDocumentsDownloads\n[...]\n$pwd\n/home/seth\n

函数比别名更灵活,但有了这种灵活性,你就有责任确保代码有意义并达到你的期望。别名是简单的,所以要保持简单而有用。要正式修改Bash的行为,请使用保存到PATH环境变量中某个位置的函数或自定义的shell脚本。

附注,有一些巧妙的奇技淫巧来实现cd和ls序列作为别名,所以如果你足够耐心,那么即使是一个简单的别名也永无止限。

可以定制你的环境使得Linux变得如此有趣,提高效率使得Linux可以改变生活。开始使用简单的别名,进而使用函数,并在评论中发布你必须拥有的别名!

via:https://opensource.com/article/19/7/bash-aliases

作者:SethKenlon选题:lujun9972译者:wxy校对:wxy

本文由LCTT原创编译,Linux中国荣誉推出

END,本文到此结束,如果可以帮助到大家,还望关注本站哦!

本站涵盖的内容、图片、视频等数据,部分未能与原作者取得联系。若涉及版权问题,请及时通知我们并提供相关证明材料,我们将及时予以删除!谢谢大家的理解与支持!

Copyright © 2023