介绍
你在命令行上操作的越多,你会发现你使用的大多数命令是可用命令的一个很小的子集。 大多数任务是习惯的,你可以每天以相同的方式运行。
虽然许多最常见的命令实用程序的制造商已尝试通过使用缩短的名称来消除无关的打字(考虑每天通过键入“ls”而不是“列表”和“cd”而不是“change-directory “),这些不是普遍存在的。 此外,许多人总是运行命令,每次都启用相同的几个选项。
幸运的是,bash允许我们通过使用别名和shell函数来创建我们自己的快捷键和时间保存。 在本指南中,我们将讨论如何使用这些,并给你一些有用的例子,让你开始在正确的方向。
如何声明一个Bash别名
在bash中声明别名非常简单。 这很容易,你现在应该尝试。
你可以通过简单地在命令行中输入这些来声明一个只要你的shell会话持续的别名。 语法如下所示:
alias alias_name="command_to_run"
注意,在相邻元素和等号之间没有间隔。 这不是可选的。 这里的空格将打破命令。
让我们现在创建一个公共bash别名。 很多人经常使用的一个惯用命令语句为ls -lha
或ls -lhA
(第二忽略了当前和父目录列表)。 我们可以创建一个快捷方式,可以称为ll
通过键入:
alias ll="ls -lhA"
现在,我们可以输入ll
,我们将当前目录的上市,长格式,包括隐藏目录:
ll
-rw-r--r-- 1 root root 3.0K Mar 20 18:03 .bash_history
-rw-r--r-- 1 root root 3.1K Apr 19 2012 .bashrc
drwx------ 2 root root 4.0K Oct 24 14:45 .cache
drwx------ 2 root root 4.0K Mar 20 18:00 .gnupg
-rw-r--r-- 1 root root 0 Oct 24 17:03 .mysql_history
-rw-r--r-- 1 root root 140 Apr 19 2012 .profile
drwx------ 2 root root 4.0K Oct 24 14:21 .ssh
-rw------- 1 root root 3.5K Mar 20 17:24 .viminfo
如果你想摆脱一个别名,只需使用unalias
命令:
unalias ll
别名现已删除。
您可以通过将列举所有配置的别名alias
命令不带任何参数:
alias
要暂时绕过别名(比方说,我们别名ls
到ls -a
),我们可以输入:
\ls
这将调用在我们的路径中找到的正常命令,而不使用别名版本。
假设你没有取消设置它,该ll
别名将可在当前整个shell会话,但是当你打开一个新的终端窗口,这将不可用。
要使这个持久化,我们需要将它添加到shell会话开始时读取的各种文件之一。 流行的选择是~/.bashrc
和~/.bash_profile
。 我们只需要打开文件并添加别名:
nano ~/.bashrc
在底部或任何您想要的位置,添加您在命令行中添加的别名。 随意添加一个注释声明整个部分专用于bash别名:
#########
# Aliases
#########
alias ll="ls -lhA"
此别名或变体实际上可能已在您的文件中。 许多发行版附带一组带有一些有用别名的标准bash配置文件。
保存并关闭文件。 您添加的任何别名将在下次启动新的shell会话时可用。 要阅读在你的文件制作成当前会话的任何改变,只是告诉bash现在重新读取文件:
source ~/.bashrc
别名示例
现在,你知道如何创建自己的别名,让我们谈谈一些流行的,可能对你有用的。 这些可以在整个网络中找到,一些也可能包括在您的分发的默认bash配置中。
导航和列出
许多最简单的Linux命令在应用某些格式和选项时更有帮助。
我们讨论的一个ls
上面的例子,但也有许多人可能会发现。
让ls
显示在列,与文件类型指标在默认情况下(与最终目录“/”等):
alias ls="ls -CF"
我们也可以预期一些打字错误,使它调用正确的命令:
alias sl="ls"
让我们也使一个别名来管我们的产量,以less
观看大型目录列表与长格式:
alias lsl="ls -lhFA | less"
怎么样,我们从流浪ls
,并尝试一些有用的命令cd
。
这将会改变到你的父目录,即使你忘记了空间:
alias cd..="cd .."
您也可以切出cd
通过一个别名部分完全..
:
alias ..="cd .."
我们可以通过设置此别名轻松找到我们当前目录中的文件:
alias fhere="find . -name "
系统别名
我们的一些监控和系统统计命令如何? 我每次都使用相同的选项来调用这些选项,所以我也可以做一些别名。
这将列出我们的磁盘使用情况,包括文件系统类型,并在底部打印一个总数:
alias df="df -Tha --total"
我们不妨添加一个别名为我们的首选du
输出,以及:
alias du="du -ach | sort -h"
让我们保持在同一个方向前进通过我们的free
输出更人性友好:
alias free="free -mt"
我们可以做很多与我们的上市流程表。 让我们开始设置默认输出:
alias ps="ps auxf"
我们如何使我们的进程表可搜索。 我们可以创建一个别名,在我们的进程中搜索我们将传递的参数:
alias psg="ps aux | grep -v grep | grep -i -e VSZ -e"
现在,当我们使用进程名称调用它时,我们将其作为参数,我们将得到一个很好的,紧凑的输出:
psg bash
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
1001 5227 0.0 0.0 26320 3376 pts/0 Ss 16:29 0:00 bash
杂项别名
一个常见的选项给mkdir
,我们经常使用的命令是-p
标志进行任何必要的父目录。 我们可以使其成为默认值:
alias mkdir="mkdir -p"
我们可能要添加-v
最重要的是标志,这样我们被告知每一个目录的创建,它可以帮助我们快速认识到,如果我们有造成意外目录分支一个错字的:
alias mkdir="mkdir -pv"
当从互联网与下载文件wget
,几乎在所有的情况下,你会想通过-c
标志,才能继续下载问题的情况下。 我们可以这样设置:
alias wget="wget -c"
我们可以搜索我们的历史很容易想与一个grep的history
命令的输出。 这有时比使用CTRL-R反向搜索更有用,因为它给你命令编号以后进行更复杂的调用:
alias histg="history | grep"
我有几个系统工具,我喜欢从标准版升级到更复杂的工具。 这些只有在您下载了所需的实用程序后才能工作,但它们可能非常有用。 请记住,这些可能会影响您的其他别名。
这一个取代了传统的top
与是对眼睛更容易,可分类的增强版本的命令,搜索和无并发症滚动:
alias top="htop"
以类似的方式, ncdu
命令可以下载哪些呈现在交互式ncurses的文件和目录的大小显示可以浏览和使用来执行简单的文件操作:
alias du="ncdu"
有一个升级工具df
以及这就是所谓的pydf
。 它提供彩色输出和基于文本的使用条。 我们可以默认使用这个实用程序,如果我们有它:
alias df="pydf"
当你在路由器后面使用NAT时,你是否需要从命令行的公共IP地址? 这样的东西可能是有用的:
alias myip="curl http://ipecho.net/plain; echo"
对于我自己而言,我喜欢来优化我上传的文章是690px或更少的图像,所以我用ImageMagick软件包( sudo apt-get install imagemagick
如果还没有),其中包含一个命令调用mogrify
,不只是这一点。 我在这个命令~/.bashrc
文件中:
alias webify="mogrify -resize 690\> *.png"
这将调整当前目录中的所有PNG图像,只有当它们的宽度大于690像素。
如果我再要他们上传到服务器,我可以用sftp
连接,并自动切换到一个特定的目录:
alias upload="sftp username@server.com:/path/to/upload/directory
Bash函数入门
尽管别名可以快速和容易实现,但它们的范围相当有限。 你会发现,当你试图链接命令在一起,你不能访问在运行时给出的参数很好,等等。 别名也可能相当缓慢,因为它们是在所有函数之后读取的。
有一个别名的替代方法是更强大,可以帮助您弥合bash别名和完整的shell脚本之间的差距。 这些被称为外壳函数。 它们的工作方式与别名几乎相同,但是更加程序化,并以标准方式接受输入。
我们在这里不会详细介绍,因为这些可以在这么多复杂的情况下使用,bash是一个完整的脚本语言,但我们将讨论一些基本的例子。
对于初学者,有两种基本方法来声明一个bash语法。 第一个使用function
命令看起来是这样的:
function function_name { command1 command2 }
另一种语法使用一组更像“C样”的括号:
function_name () { command1 command2 }
我们可以将第二种形式压缩成一行,并用分号分隔命令。 分号必须拿出最后一个命令后,太:
function_name () { command1; command2; }
让我们首先展示一个非常有用的bash函数。 这将创建一个目录,然后立即移动到该目录。 这通常是我们在创建新目录时的顺序:
mcd () {
mkdir -p $1
cd $1
}
现在,当我们用用,而不是常规此功能mkdir
命令来自动切换到创建后的目录:
mcd test
pwd
/home/demouser/test
你会看到周围一个很酷的功能是extract
功能。 这结合了很多实用程序,允许您解压缩任何压缩文件格式。 有一些变化,但是这一次是来自这里 :
function extract {
if [ -z "$1" ]; then
# display usage if no parameters given
echo "Usage: extract <path/file_name>.<zip|rar|bz2|gz|tar|tbz2|tgz|Z|7z|xz|ex|tar.bz2|tar.gz|tar.xz>"
else
if [ -f $1 ] ; then
# NAME=${1%.*}
# mkdir $NAME && cd $NAME
case $1 in
*.tar.bz2) tar xvjf ../$1 ;;
*.tar.gz) tar xvzf ../$1 ;;
*.tar.xz) tar xvJf ../$1 ;;
*.lzma) unlzma ../$1 ;;
*.bz2) bunzip2 ../$1 ;;
*.rar) unrar x -ad ../$1 ;;
*.gz) gunzip ../$1 ;;
*.tar) tar xvf ../$1 ;;
*.tbz2) tar xvjf ../$1 ;;
*.tgz) tar xvzf ../$1 ;;
*.zip) unzip ../$1 ;;
*.Z) uncompress ../$1 ;;
*.7z) 7z x ../$1 ;;
*.xz) unxz ../$1 ;;
*.exe) cabextract ../$1 ;;
*) echo "extract: '$1' - unknown archive method" ;;
esac
else
echo "$1 - file does not exist"
fi
fi
}
此函数接受第一个参数,并根据所使用的文件扩展名调用相应的实用程序。
结论
希望本指南给你一些灵感,创建自己的别名和bash函数。 广泛使用这些可以帮助你的时间在shell更愉快,更不复杂。
记住要注意用可能具有破坏性的行为重新定义现有命令。 甚至做相反的和别名命令到一个更安全的变种(总是要求确认之前,递归删除,例如)可以回来咬你,你第一次在一个系统没有它,一旦你依靠它。
要找到可能是好的创建别名的候选人,最好搜索您最常用的命令的历史记录。 从一班轮在这里让我们看到了我们最常用的命令:
history | awk '{CMD[$2]++;count++;}END { for (a in CMD)print CMD[a] " " CMD[a]/count*100 "% " a;}' | grep -v "./" | column -c3 -s " " -t | sort -nr | nl | head -n10
1 247 24.7% cd
2 112 11.2% vim
3 90 9% exit
4 72 7.2% ls
5 70 7% xset
6 56 5.6% apt-get
7 40 4% vlc
8 40 4% rm
9 38 3.8% screen
10 27 2.7% htop
我们可以很容易地使用这个列表作为我们经常使用的命令的起点。 在评论部分,随时分享您最喜欢的bash别名和功能: