标签 别名 下的文章

在你安装的 Linux 发行版中默认就包含了一些别名。

Linux 命令行别名非常适合帮助你提高工作效率。更好的是,在你安装的 Linux 发行版中默认就包含了一些别名。

这是 Fedora 27 中的命令别名的示例:

这个 alias 命令列出了已有的别名。设置别名也十分简单:

alias new_name="command"

这里有 15 个命令行别名,可以节省你的时间:

1、安装任何应用实用 / 应用程序:

alias install="sudo yum install -y"

在这里,根据每个用户的偏好,sudo-y 是可选的:

 title=

2、更新系统:

alias update="sudo yum update -y"

3、升级系统:

alias upgrade="sudo yum upgrade -y"

4、切换 root 用户:

alias root="sudo su -"

5、切换到 “user” 用户, 其中 user 设置为你的用户名:

alias user="su user"

6、显示列出所有可用端口、状态还有 IP:

alias myip="ip -br -c a"

7、ssh 到你的服务器 myserver

alias myserver="ssh user@my_server_ip”

8、列出系统中所有进程:

alias process="ps -aux"

9、检查系统的服务状态:

alias sstatus="sudo systemctl status"

10、重启系统服务:

alias srestart="sudo systemctl restart"

11、按名称杀死进程:

alias kill="sudo pkill"

 title=

12、显示系统系统总使用内存和空闲内存 :

alias mem="free -h"

13、显示系统 CPU 框架结构、CPU 数量、线程数等:

alias cpu="lscpu"

14、显示系统总磁盘大小:

alias disk="df -h"

15、显示当前系统 Linux 发行版本(适用于 CentOS、Fedora 和 Red Hat):

alias os="cat /etc/redhat-release"

 title=


via: https://opensource.com/article/18/8/time-saving-command-line-aliases

作者:Aarchit Modi 选题:lujun9972 译者:MZqk 校对:wxy

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

作为一个 Linux 用户,我们常用 ssh 命令 来登入远程机器。ssh 命令你用得越多,你在键入一些重要的命令上花的时间也越多。我们可以用 定义在你的 .bashrc 文件里的别名 或函数来大幅度缩减花在命令行界面(CLI)的时间。但这不是最佳解决之道。最佳办法是在 ssh 配置文件中使用 SSH 别名

这里是我们能把 ssh 命令用得更好的几个例子。

ssh 登入到 AWS(译注:Amazon Web Services,亚马逊公司旗下云计算服务平台)实例的连接是一种痛。仅仅输入以下命令,每次也完全是浪费你时间。

ssh -p 3000 -i /home/surendra/mysshkey.pem [email protected]

缩短到:

ssh aws1

调试时连接到系统。

ssh -vvv [email protected]

缩短到:

ssh xyz

在本篇中,我们将看到如何不使用 bash 别名或函数实现 ssh 命令的缩短。ssh 别名的主要优点是所有的 ssh 命令快捷方式都存储在一个单一文件,如此就易于维护。其他优点是 对于类似于 SSH 和 SCP 的命令 我们能用相同的别名。

在我们进入实际配置之前,我们应该知道 /etc/ssh/ssh_config/etc/ssh/sshd_config~/.ssh/config 文件三者的区别。以下是对这些文件的解释。

/etc/ssh/ssh\_config 和 ~/.ssh/config 间的区别

系统级别的 SSH 配置项存放在 /etc/ssh/ssh_config,而用户级别的 SSH 配置项存放在 ~/.ssh/config 文件中。

/etc/ssh/sshconfig 和 /etc/ssh/sshdconfig 间的区别

系统级别的 SSH 配置项是在 /etc/ssh/ssh_config 文件中,而系统级别的 SSH 服务端配置项存放在 /etc/ssh/sshd_config 文件。

在 ~/.ssh/config 文件里配置项的语法

~/.ssh/config 文件内容的语法:

配置项 值
配置项 值1 值2

例 1: 创建主机(www.linuxnix.com)的 SSH 别名

编辑 ~/.ssh/config 文件写入以下内容:

Host tlj
 User root
 HostName 18.197.176.13
 port 22

保存此文件。

以上 ssh 别名用了

  1. tlj 作为一个别名的名称
  2. root 作为将要登入的用户
  3. 18.197.176.13 作为主机的 IP 地址
  4. 22 作为访问 SSH 服务的端口

输出:

sanne@Surendras-MacBook-Pro:~ > ssh tlj
Welcome to Ubuntu 16.04.3 LTS (GNU/Linux 4.4.0-93-generic x86_64)
 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage
  Get cloud support with Ubuntu Advantage Cloud Guest:
    http://www.ubuntu.com/business/services/cloud
Last login: Sat Oct 14 01:00:43 2017 from 20.244.25.231
root@linuxnix:~# exit
logout
Connection to 18.197.176.13 closed.

例 2: 不用密码用 ssh 密钥登到系统要用 IdentityFile

例:

Host aws
 User ec2-users
 HostName ec2-54-200-184-202.us-west-2.compute.amazonaws.com
 IdentityFile ~/Downloads/surendra.pem
 port 22

例 3: 对同一主机使用不同的别名。在下例中,我们对同一 IP/主机 18.197.176.13 用了 tljlinuxnixlinuxnix.com 三个别名。

~/.ssh/config 文件内容

Host tlj linuxnix linuxnix.com
 User root
 HostName 18.197.176.13
 port 22

输出:

sanne@Surendras-MacBook-Pro:~ > ssh tlj
Welcome to Ubuntu 16.04.3 LTS (GNU/Linux 4.4.0-93-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
Get cloud support with Ubuntu Advantage Cloud Guest:
http://www.ubuntu.com/business/services/cloud
Last login: Sat Oct 14 01:00:43 2017 from 220.244.205.231
root@linuxnix:~# exit
logout
Connection to 18.197.176.13 closed.
sanne@Surendras-MacBook-Pro:~ > ssh linuxnix.com
Welcome to Ubuntu 16.04.3 LTS (GNU/Linux 4.4.0-93-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
Get cloud support with Ubuntu Advantage Cloud Guest:
http://www.ubuntu.com/business/services/cloud
Last login: Sun Oct 15 20:31:08 2017 from 1.129.110.13
root@linuxnix:~# exit
logout
Connection to 138.197.176.103 closed.
[6571] sanne@Surendras-MacBook-Pro:~ > ssh linuxnix
Welcome to Ubuntu 16.04.3 LTS (GNU/Linux 4.4.0-93-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
Get cloud support with Ubuntu Advantage Cloud Guest:
http://www.ubuntu.com/business/services/cloud
Last login: Sun Oct 15 20:31:20 2017 from 1.129.110.13
root@linuxnix:~# exit
logout
Connection to 18.197.176.13 closed.

例 4: 用相同的 SSH 别名复制文件到远程系统

语法:

scp <文件名> <ssh_别名>:<位置>

例子:

sanne@Surendras-MacBook-Pro:~ > scp abc.txt tlj:/tmp
abc.txt                           100%   12KB  11.7KB/s   00:01    
sanne@Surendras-MacBook-Pro:~ >

若我们已经将 ssh 主机设置好一个别名,由于 sshscp 两者用几乎相同的语法和选项,scp 也可以轻易使用。

请在下面尝试从本机 scp 一个文件到远程机器。

例 5: 解决 Linux 中的 SSH 超时问题。默认情况,如果你不积极地使用终端,你的 ssh 登入就会超时

SSH 超时问题 是一个更痛的点意味着你在一段时间后不得不重新登入到远程机器。我们能在 ~/.ssh/config 文件里边恰当地设置 SSH 超时时间来使你的会话不管在什么时间总是激活的。我们将用 2 个能保持会话存活的 SSH 选项来实现这一目的。之一是 ServerAliveInterval 保持你会话存活的秒数和 ServerAliveCountMax 在(经历了一个)给定数值的会话之后初始化会话。

ServerAliveInterval A
ServerAliveCountMax B

例:

Host tlj linuxnix linuxnix.com
 User root
 HostName 18.197.176.13
 port 22
 ServerAliveInterval 60
 ServerAliveCountMax 30

在下篇中我们将会看到一些其他的退出方式。


via: https://www.linuxnix.com/5-ssh-alias-examples-using-ssh-config-file/

作者:SURENDRA ANNE 译者:ch-cn 校对:wxy

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

我在我的 Linux 系统上定义了如下 mount 别名:

alias mount='mount | column -t'

但是我需要在挂载文件系统和其他用途时绕过这个 bash 别名。我如何在 Linux、*BSD、macOS 或者类 Unix 系统上临时禁用或者绕过 bash shell 呢?

你可以使用 alias 命令定义或显示 bash shell 别名。一旦创建了 bash shell 别名,它们将优先于外部或内部命令。本文将展示如何暂时绕过 bash 别名,以便你可以运行实际的内部或外部命令。

4 种绕过 bash 别名的方法

尝试以下任意一种方法来运行被 bash shell 别名绕过的命令。让我们如下定义一个别名

alias mount='mount | column -t'

运行如下:

mount

示例输出:

sysfs                        on  /sys                             type  sysfs            (rw,nosuid,nodev,noexec,relatime)
proc                         on  /proc                            type  proc             (rw,nosuid,nodev,noexec,relatime)
udev                         on  /dev                             type  devtmpfs         (rw,nosuid,relatime,size=8023572k,nr_inodes=2005893,mode=755)
devpts                       on  /dev/pts                         type  devpts           (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs                        on  /run                             type  tmpfs            (rw,nosuid,noexec,relatime,size=1610240k,mode=755)
/dev/mapper/ubuntu--vg-root  on  /                                type  ext4             (rw,relatime,errors=remount-ro,data=ordered)
/dev/sda1                    on  /boot                            type  ext4             (rw,relatime,data=ordered)
binfmt_misc                  on  /proc/sys/fs/binfmt_misc         type  binfmt_misc      (rw,relatime)
lxcfs                        on  /var/lib/lxcfs                   type  fuse.lxcfs       (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other)

方法 1 - 使用 \command

输入以下命令暂时绕过名为 mount 的 bash 别名:

\mount

方法 2 - 使用 "command"'command'

如下引用 mount 命令调用实际的 /bin/mount

"mount"

或者

'mount'

方法 3 - 使用命令的完全路径

使用完整的二进制路径,如 /bin/mount

/bin/mount
/bin/mount /dev/sda1 /mnt/sda

方法 4 - 使用内部命令 command

语法是:

command cmd
command cmd arg1 arg2

要覆盖 .bash_aliases 中设置的别名,例如 mount

command mount
command mount /dev/sdc /mnt/pendrive/

“command” 直接运行命令或显示关于命令的信息。它带参数运行命令会抑制 shell 函数查询或者别名,或者显示有关给定命令的信息。

关于 unalias 命令的说明

要从当前会话的已定义别名列表中移除别名,请使用 unalias 命令:

unalias mount

要从当前 bash 会话中删除所有别名定义:

unalias -a

确保你更新你的 ~/.bashrc$HOME/.bash_aliases。如果要永久删除定义的别名,则必须删除定义的别名:

vi ~/.bashrc

或者

joe $HOME/.bash_aliases

想了解更多信息,参考这里的在线手册,或者输入下面的命令查看:

man bash
help command
help unalias
help alias

via: https://www.cyberciti.biz/faq/bash-bypass-alias-command-on-linux-macos-unix/

作者:Vivek Gite 译者:geekpi 校对:wxy

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

我在远程主机上上设置过一个叫做 file\_repl 的 bash 别名 。当我使用 ssh 命令登录远程主机后,可以很正常的使用这个别名。然而这个 bash 别名却无法通过 ssh 来运行,像这样:

$ ssh [email protected] file_repl
bash:file_repl:command not found

我要怎样做才能通过 ssh 命令运行 bash 别名呢?

SSH 客户端 (ssh) 是一个登录远程服务器并在远程系统上执行 shell 命令的 Linux/Unix 命令。它被设计用来在两个非信任的机器上通过不安全的网络(比如互联网)提供安全的加密通讯。

如何用 ssh 客户端执行命令

通过 ssh 运行 free 命令或 date 命令 可以这样做:

$ ssh [email protected] date

结果为:

Tue Dec 26 09:02:50 UTC 2017

或者:

$ ssh [email protected] free -h

结果为:

 total used free shared buff/cache available
Mem:2.0G 428M 138M 145M 1.4G 1.1G
Swap:0B 0B 0B

理解 bash shell 以及命令的类型

bash shell 共有下面几类命令:

  1. 别名,比如 ll
  2. 关键字,比如 if
  3. 函数 (用户自定义函数,比如 genpasswd
  4. 内置命令,比如 pwd
  5. 外部文件,比如 /bin/date

type 命令command 命令 可以用来查看命令类型:

$ type -a date
date is /bin/date
$ type -a free
free is /usr/bin/free
$ command -V pwd
pwd is a shell builtin
$ type -a file_repl
is aliased to `sudo -i /shared/takes/master.replication'

datefree 都是外部命令,而 file_replsudo -i /shared/takes/master.replication 的别名。你不能直接执行像 file_repl 这样的别名:

$ ssh user@remote file_repl

在 Unix 系统上无法直接通过 ssh 客户端执行 bash 别名

要解决这个问题可以用下面方法运行 ssh 命令:

$ ssh -t user@remote /bin/bash -ic 'your-alias-here'
$ ssh -t user@remote /bin/bash -ic 'file_repl'

ssh 命令选项:

bash shell 的选项:

  • -i:运行交互 shell,这样 shell 才能运行 bash 别名。
  • -c:要执行的命令取之于第一个非选项参数的命令字符串。若在命令字符串后面还有其他参数,这些参数会作为位置参数传递给命令,参数从 $0 开始。

总之,要运行一个名叫 ll 的 bash 别名,可以运行下面命令:

$ ssh -t [email protected] -ic 'll'

结果为:

Running bash aliases over ssh based session when using Unix or Linux ssh cli

下面是我的一个 shell 脚本的例子:

#!/bin/bash
I="tags.deleted.410"
O="/tmp/https.www.cyberciti.biz.410.url.conf"
box="[email protected]"
[!-f "$I" ] && { echo "$I file not found。"; exit 10; }
>$O
cat "$I" | sort | uniq | while read -r u
do
    uu="${u##https://www.cyberciti.biz}"
    echo "~^$uu 1;" >>"${O}"
done
echo "Config file created at ${O} and now updating remote nginx config file"
scp "${O}" ${box}:/tmp/
ssh ${box} /usr/bin/lxc file push /tmp/https.www.cyberciti.biz.410.url.conf nginx-container/etc/nginx/
ssh -t ${box} /bin/bash -ic 'push_config_job'

相关资料

更多信息请输入下面命令查看 OpenSSH 客户端bash 的 man 帮助

$ man ssh
$ man bash
$ help type
$ help command

via: https://www.cyberciti.biz/faq/use-bash-aliases-ssh-based-session/

作者:Vivek Gite 译者:lujun9972 校对:wxy

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

bash 别名 alias 只不过是指向命令的快捷方式而已。alias 命令允许用户只输入一个单词就运行任意一个命令或一组命令(包括命令选项和文件名)。执行 alias 命令会显示一个所有已定义别名的列表。你可以在 ~/.bashrc 文件中自定义别名。使用别名可以在命令行中减少输入的时间,使工作更流畅,同时增加生产率。

本文通过 30 个 bash shell 别名的实际案例演示了如何创建和使用别名。

bash alias 的那些事

bash shell 中的 alias 命令的语法是这样的:

alias [alias-name[=string]...]

如何列出 bash 别名

输入下面的 alias 命令

alias

结果为:

alias ..='cd ..'
alias amazonbackup='s3backup'
alias apt-get='sudo apt-get'
...

alias 命令默认会列出当前用户定义好的别名。

如何定义或者创建一个 bash shell 别名

使用下面语法 创建别名

alias name =value
alias name = 'command'
alias name = 'command arg1 arg2' 
alias name = '/path/to/script' 
alias name = '/path/to/script.pl arg1'

举个例子,输入下面命令并回车就会为常用的 clear(清除屏幕)命令创建一个别名 c

alias c = 'clear'

然后输入字母 c 而不是 clear 后回车就会清除屏幕了:

c

如何临时性地禁用 bash 别名

下面语法可以临时性地禁用别名

## path/to/full/command
/usr/bin/clear
## call alias with a backslash ##
\c
## use /bin/ls command and avoid ls alias ##
command ls

如何删除 bash 别名

使用 unalias 命令来删除别名。其语法为:

unalias aliasname
unalias foo

例如,删除我们之前创建的别名 c

unalias c

你还需要用文本编辑器删掉 ~/.bashrc 文件 中的别名定义(参见下一部分内容)。

如何让 bash shell 别名永久生效

别名 c 在当前登录会话中依然有效。但当你登出或重启系统后,别名 c 就没有了。为了防止出现这个问题,将别名定义写入 ~/.bashrc file 中,输入:

vi ~/.bashrc

输入下行内容让别名 c 对当前用户永久有效:

alias c = 'clear'

保存并关闭文件就行了。系统级的别名(也就是对所有用户都生效的别名)可以放在 /etc/bashrc 文件中。请注意,alias 命令内建于各种 shell 中,包括 ksh,tcsh/csh,ash,bash 以及其他 shell。

关于特权权限判断

可以将下面代码加入 ~/.bashrc

# if user is not root, pass all commands via sudo #
if [ $UID -ne 0 ]; then
    alias reboot='sudo reboot'
    alias update='sudo apt-get upgrade'
fi

定义与操作系统类型相关的别名

可以将下面代码加入 ~/.bashrc 使用 case 语句

### Get os name via uname ###
_myos="$(uname)"

### add alias as per os using $_myos ###
case $_myos in
   Linux) alias foo='/path/to/linux/bin/foo';;
   FreeBSD|OpenBSD) alias foo='/path/to/bsd/bin/foo' ;;
   SunOS) alias foo='/path/to/sunos/bin/foo' ;;
   *) ;;
esac

30 个 bash shell 别名的案例

你可以定义各种类型的别名来节省时间并提高生产率。

1:控制 ls 命令的输出

ls 命令列出目录中的内容 而你可以对输出进行着色:

## Colorize the ls output ##
alias ls = 'ls --color=auto'

## Use a long listing format ##
alias ll = 'ls -la'

## Show hidden files ##
alias l.= 'ls -d . .. .git .gitignore .gitmodules .travis.yml --color=auto'

2:控制 cd 命令的行为

## get rid of command not found ##
alias cd..= 'cd ..'

## a quick way to get out of current directory ##
alias ..= 'cd ..'
alias ...= 'cd ../../../'
alias ....= 'cd ../../../../'
alias .....= 'cd ../../../../'
alias .4= 'cd ../../../../'
alias .5= 'cd ../../../../..'

3:控制 grep 命令的输出

grep 命令是一个用于在纯文本文件中搜索匹配正则表达式的行的命令行工具

## Colorize the grep command output for ease of use (good for log files)##
alias grep = 'grep --color=auto'
alias egrep = 'egrep --color=auto'
alias fgrep = 'fgrep --color=auto'

4:让计算器默认开启 math 库

alias bc = 'bc -l'

4:生成 sha1 数字签名

alias sha1 = 'openssl sha1'

5:自动创建父目录

mkdir 命令 用于创建目录:

alias mkdir = 'mkdir -pv'

6:为 diff 输出着色

你可以使用 diff 来一行行第比较文件 而一个名为 colordiff 的工具可以为 diff 输出着色:

# install colordiff package :)
alias diff = 'colordiff'

7:让 mount 命令的输出更漂亮,更方便人类阅读

alias mount = 'mount |column -t'

8:简化命令以节省时间

# handy short cuts #
alias h = 'history' 
alias j = 'jobs -l'

9:创建一系列新命令

alias path = 'echo -e ${PATH//:/\\n}'
alias now = 'date +"%T"'
alias nowtime =now
alias nowdate = 'date +"%d-%m-%Y"'

10:设置 vim 为默认编辑器

alias vi = vim
alias svi = 'sudo vi'
alias vis = 'vim "+set si"'
alias edit = 'vim'

11:控制网络工具 ping 的输出

# Stop after sending count ECHO_REQUEST packets #
alias ping = 'ping -c 5'

# Do not wait interval 1 second, go fast #
alias fastping = 'ping -c 100 -i.2'

12:显示打开的端口

使用 netstat 命令 可以快速列出服务区中所有的 TCP/UDP 端口:

alias ports = 'netstat -tulanp'

13:唤醒休眠的服务器

Wake-on-LAN (WOL) 是一个以太网标准,可以通过网络消息来开启服务器。你可以使用下面别名来快速激活 nas 设备 以及服务器:

## replace mac with your actual server mac address #
alias wakeupnas01 = '/usr/bin/wakeonlan 00:11:32:11:15:FC'
alias wakeupnas02 = '/usr/bin/wakeonlan 00:11:32:11:15:FD'
alias wakeupnas03 = '/usr/bin/wakeonlan 00:11:32:11:15:FE'

14:控制防火墙 (iptables) 的输出

Netfilter 是一款 Linux 操作系统上的主机防火墙。它是 Linux 发行版中的一部分,且默认情况下是激活状态。这里列出了大多数 Liux 新手防护入侵者最常用的 iptables 方法

## shortcut for iptables and pass it via sudo#
alias ipt = 'sudo /sbin/iptables'

# display all rules #
alias iptlist = 'sudo /sbin/iptables -L -n -v --line-numbers'
alias iptlistin = 'sudo /sbin/iptables -L INPUT -n -v --line-numbers'
alias iptlistout = 'sudo /sbin/iptables -L OUTPUT -n -v --line-numbers'
alias iptlistfw = 'sudo /sbin/iptables -L FORWARD -n -v --line-numbers'
alias firewall =iptlist

15:使用 curl 调试 web 服务器 / CDN 上的问题

# get web server headers #
alias header = 'curl -I'

# find out if remote server supports gzip / mod_deflate or not #
alias headerc = 'curl -I --compress'

16:增加安全性

# do not delete / or prompt if deleting more than 3 files at a time #
alias rm = 'rm -I --preserve-root'

# confirmation #
alias mv = 'mv -i'
alias cp = 'cp -i'
alias ln = 'ln -i' 

# Parenting changing perms on / #
alias chown = 'chown --preserve-root'
alias chmod = 'chmod --preserve-root'
alias chgrp = 'chgrp --preserve-root'

17:更新 Debian Linux 服务器

apt-get 命令 用于通过因特网安装软件包 (ftp 或 http)。你也可以一次性升级所有软件包:

# distro specific - Debian / Ubuntu and friends #
# install with apt-get
alias apt-get= "sudo apt-get"
alias updatey = "sudo apt-get --yes"

# update on one command
alias update = 'sudo apt-get update && sudo apt-get upgrade'

18:更新 RHEL / CentOS / Fedora Linux 服务器

yum 命令 是 RHEL / CentOS / Fedora Linux 以及其他基于这些发行版的 Linux 上的软件包管理工具:

## distrp specifc RHEL/CentOS ##
alias update = 'yum update'
alias updatey = 'yum -y update'

19:优化 sudo 和 su 命令

# become root #
alias root = 'sudo -i' 
alias su = 'sudo -i'

20:使用 sudo 执行 halt/reboot 命令

shutdown 命令 会让 Linux / Unix 系统关机:

# reboot / halt / poweroff
alias reboot = 'sudo /sbin/reboot'
alias poweroff = 'sudo /sbin/poweroff' 
alias halt = 'sudo /sbin/halt'
alias shutdown = 'sudo /sbin/shutdown'

21:控制 web 服务器

# also pass it via sudo so whoever is admin can reload it without calling you #
alias nginxreload = 'sudo /usr/local/nginx/sbin/nginx -s reload' 
alias nginxtest = 'sudo /usr/local/nginx/sbin/nginx -t'
alias lightyload = 'sudo /etc/init.d/lighttpd reload' 
alias lightytest = 'sudo /usr/sbin/lighttpd -f /etc/lighttpd/lighttpd.conf -t'
alias httpdreload = 'sudo /usr/sbin/apachectl -k graceful' 
alias httpdtest = 'sudo /usr/sbin/apachectl -t && /usr/sbin/apachectl -t -D DUMP_VHOSTS'

22:与备份相关的别名

# if cron fails or if you want backup on demand just run these commands #
# again pass it via sudo so whoever is in admin group can start the job #
# Backup scripts #
alias backup = 'sudo /home/scripts/admin/scripts/backup/wrapper.backup.sh --type local --taget /raid1/backups' 
alias nasbackup = 'sudo /home/scripts/admin/scripts/backup/wrapper.backup.sh --type nas --target nas01'
alias s3backup = 'sudo /home/scripts/admin/scripts/backup/wrapper.backup.sh --type nas --target nas01 --auth /home/scripts/admin/.authdata/amazon.keys'
alias rsnapshothourly = 'sudo /home/scripts/admin/scripts/backup/wrapper.rsnapshot.sh --type remote --target nas03 --auth /home/scripts/admin/.authdata/ssh.keys --config /home/scripts/admin/scripts/backup/config/adsl.conf'
alias rsnapshotdaily = 'sudo /home/scripts/admin/scripts/backup/wrapper.rsnapshot.sh --type remote --target nas03 --auth /home/scripts/admin/.authdata/ssh.keys --config /home/scripts/admin/scripts/backup/config/adsl.conf'
alias rsnapshotweekly = 'sudo /home/scripts/admin/scripts/backup/wrapper.rsnapshot.sh --type remote --target nas03 --auth /home/scripts/admin/.authdata/ssh.keys --config /home/scripts/admin/scripts/backup/config/adsl.conf' 
alias rsnapshotmonthly = 'sudo /home/scripts/admin/scripts/backup/wrapper.rsnapshot.sh --type remote --target nas03 --auth /home/scripts/admin/.authdata/ssh.keys --config /home/scripts/admin/scripts/backup/config/adsl.conf' 
alias amazonbackup =s3backup

23:桌面应用相关的别名 - 按需播放的 avi/mp3 文件

## play video files in a current directory ##
# cd ~/Download/movie-name
# playavi or vlc
alias playavi = 'mplayer *.avi' 
alias vlc = 'vlc *.avi' 

# play all music files from the current directory #
alias playwave = 'for i in *.wav; do mplayer "$i"; done'
alias playogg = 'for i in *.ogg; do mplayer "$i"; done'
alias playmp3 = 'for i in *.mp3; do mplayer "$i"; done'

# play files from nas devices #
alias nplaywave = 'for i in /nas/multimedia/wave/*.wav; do mplayer "$i"; done'
alias nplayogg = 'for i in /nas/multimedia/ogg/*.ogg; do mplayer "$i"; done' 
alias nplaymp3 = 'for i in /nas/multimedia/mp3/*.mp3; do mplayer "$i"; done'

# shuffle mp3/ogg etc by default # 
alias music = 'mplayer --shuffle *'

24:设置系统管理相关命令的默认网卡

vnstat 一款基于终端的网络流量检测器dnstop 是一款分析 DNS 流量的终端工具tcptrack 和 iftop 命令显示 TCP/UDP 连接方面的信息,它监控网卡并显示其消耗的带宽。

## All of our servers eth1 is connected to the Internets via vlan / router etc ##
alias dnstop = 'dnstop -l 5 eth1'
alias vnstat = 'vnstat -i eth1'
alias iftop = 'iftop -i eth1' 
alias tcpdump = 'tcpdump -i eth1' 
alias ethtool = 'ethtool eth1' 

# work on wlan0 by default #
# Only useful for laptop as all servers are without wireless interface
alias iwconfig = 'iwconfig wlan0'

25:快速获取系统内存,cpu 使用,和 gpu 内存相关信息

## pass options to free ##
alias meminfo = 'free -m -l -t' 

## get top process eating memory
alias psmem = 'ps auxf | sort -nr -k 4' 
alias psmem10 = 'ps auxf | sort -nr -k 4 | head -10'

## get top process eating cpu ##
alias pscpu = 'ps auxf | sort -nr -k 3'
alias pscpu10 = 'ps auxf | sort -nr -k 3 | head -10' 

## Get server cpu info ##
alias cpuinfo = 'lscpu'

## older system use /proc/cpuinfo ##
##alias cpuinfo='less /proc/cpuinfo' ##

## get GPU ram on desktop / laptop##
alias gpumeminfo = 'grep -i --color memory /var/log/Xorg.0.log'

26:控制家用路由器

curl 命令可以用来 重启 Linksys 路由器

# Reboot my home Linksys WAG160N / WAG54 / WAG320 / WAG120N Router / Gateway from *nix.
alias rebootlinksys = "curl -u 'admin:my-super-password' 'http://192.168.1.2/setup.cgi?todo=reboot'"

# Reboot tomato based Asus NT16 wireless bridge
alias reboottomato = "ssh [email protected] /sbin/reboot"

27:wget 默认断点续传

GNU wget 是一款用来从 web 下载文件的自由软件。它支持 HTTP,HTTPS,以及 FTP 协议,而且它也支持断点续传:

## this one saved by butt so many times ##
alias wget = 'wget -c'

28:使用不同浏览器来测试网站

## this one saved by butt so many times ##
alias ff4 = '/opt/firefox4/firefox' 
alias ff13 = '/opt/firefox13/firefox' 
alias chrome = '/opt/google/chrome/chrome' 
alias opera = '/opt/opera/opera'

#default ff
alias ff =ff13

#my default browser
alias browser =chrome

29:关于 ssh 别名的注意事项

不要创建 ssh 别名,代之以 ~/.ssh/config 这个 OpenSSH SSH 客户端配置文件。它的选项更加丰富。下面是一个例子:

Host server10
 Hostname 1.2.3.4
 IdentityFile ~/backups/.ssh/id_dsa
 user foobar
 Port 30000
 ForwardX11Trusted yes
 TCPKeepAlive yes

然后你就可以使用下面语句连接 server10 了:

$ ssh server10

30:现在该分享你的别名了

## set some other defaults ##
alias df = 'df -H'
alias du = 'du -ch'

# top is atop, just like vi is vim
alias top = 'atop'

## nfsrestart - must be root ##
## refresh nfs mount / cache etc for Apache ##
alias nfsrestart = 'sync && sleep 2 && /etc/init.d/httpd stop && umount netapp2:/exports/http && sleep 2 && mount -o rw,sync,rsize=32768,wsize=32768,intr,hard,proto=tcp,fsc natapp2:/exports /http/var/www/html && /etc/init.d/httpd start'

## Memcached server status ##
alias mcdstats = '/usr/bin/memcached-tool 10.10.27.11:11211 stats'
alias mcdshow = '/usr/bin/memcached-tool 10.10.27.11:11211 display'

## quickly flush out memcached server ##
alias flushmcd = 'echo "flush_all" | nc 10.10.27.11 11211'

## Remove assets quickly from Akamai / Amazon cdn ##
alias cdndel = '/home/scripts/admin/cdn/purge_cdn_cache --profile akamai'
alias amzcdndel = '/home/scripts/admin/cdn/purge_cdn_cache --profile amazon'

## supply list of urls via file or stdin
alias cdnmdel = '/home/scripts/admin/cdn/purge_cdn_cache --profile akamai --stdin' 
alias amzcdnmdel = '/home/scripts/admin/cdn/purge_cdn_cache --profile amazon --stdin'

总结

本文总结了 *nix bash 别名的多种用法:

  1. 为命令设置默认的参数(例如通过 alias ethtool='ethtool eth0' 设置 ethtool 命令的默认参数为 eth0)。
  2. 修正错误的拼写(通过 alias cd..='cd ..'cd.. 变成 cd ..)。
  3. 缩减输入。
  4. 设置系统中多版本命令的默认路径(例如 GNU/grep 位于 /usr/local/bin/grep 中而 Unix grep 位于 /bin/grep 中。若想默认使用 GNU grep 则设置别名 grep='/usr/local/bin/grep' )。
  5. 通过默认开启命令(例如 rmmv 等其他命令)的交互参数来增加 Unix 的安全性。
  6. 为老旧的操作系统(比如 MS-DOS 或者其他类似 Unix 的操作系统)创建命令以增加兼容性(比如 alias del=rm)。

我已经分享了多年来为了减少重复输入命令而使用的别名。若你知道或使用的哪些 bash/ksh/csh 别名能够减少输入,请在留言框中分享。


via: https://www.cyberciti.biz/tips/bash-aliases-mac-centos-linux-unix.html

作者:nixCraft 译者:lujun9972 校对:wxy

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

昨天,微博上的朋友 @马甲与小号 告诉我发现了一个奇怪的东西,本着好奇心使人进步(害死猫?)的目的,我去观摩了一番,于是就有了今天这篇文章。

这是一个 bash shell 脚本,其中有若干可以整蛊(结仇)你的同事的小技巧——或者说恶作剧。看完之后,感觉不寒而栗,要是谁敢这样整我,我一定和他绝交!

警告,切勿在生产环境体验,一切后果脚本作者和本文作者均不不承担!

警告,切勿在生产环境体验,一切后果脚本作者和本文作者均不不承担!

警告,切勿在生产环境体验,一切后果脚本作者和本文作者均不不承担!

这个世界怎么了?

这个脚本主要由一些别名、函数、环境变量定义组织而成,执行该脚本后,你的 shell 环境就变成了一个光怪陆离的世界。

好了,那么我们来看看都发生了什么。

注:本脚本适用于 bash 环境,其它 shell 环境有些不支持。

可怕的默认编辑器

当系统调用默认编辑器来编辑比如 crontab 时,biu 的一下,文件没了!

export EDITOR=/bin/rm;

这是将 EDITOR 环境变量定义为 rm,而它原本应该是 viemacsnano 的,体会一下,是不是很酸爽?

学习课堂:

EDITOR 环境变量用于定于系统的默认编辑器,在一些系统内置功能里面,比如编辑 crontab 时,会根据该变量调用默认编辑器。

猥琐的制表符(tab)

当你想用制表符来个自动补全时,你会它非但不干,而且还删除了一个字母,不信邪的你使劲多砸了几个制表符,这下好了,更多的字符被删除了。

tset -Qe $'\t';

原来是将制表符定义为退格键了。

学习课堂:

tset 用于设置终端特征;-e 参数设置擦除字符,缺省为退格字符;-Q 表示不显示设置信息(静默)。

莫名退出

有时候,执行一个命令就会莫名其妙地退出 shell,只不过是命令有个非 0 的返回状态嘛,为什么会这样?

((RANDOM % 10)) || set -o errexit;

学习课堂:

set -o errexit 等价于 set -e,表示有任何错误(命令的返回状态非 0 )时即退出。

啥都看(cat)不了

当我想看(cat)一下文件时,它居然就当没听见,到底文件里面有啥啊?

alias cat=true;

原来是把 cat 定义成 true 命令的别名了, true 命令啥都不干,不管你给它什么参数和什么输入,它只是静静地返回一个 0 的状态码。

学习课堂

true 命令和 false 命令常用于 shell 脚本中。

到底是按什么排列的啊?

好吧,我想看看目录里面有啥文件,于是我输入了 ls,咦?这是什么顺序?我再次输入一遍,怎么回事,列出的文件和目录又是一种顺序,难道它的输出看心情吗?

function ls { command ls -$(opts="frStu"; echo ${opts:$((RANDOM % ${#opts})):1}) "$@"; }

原来它用一个函数重新定义了 ls,所以,真是看心情,你永远不知道它会以什么顺序返回结果。

学习课堂:

ls 的 f 选项表示不排序输出(即只按照磁盘存储顺序输出);r 表示反向排序;S 表示按文件大小排序;t 表示按修改时间排序;u 表示按最后访问时间排序。

再也不要试着进入目录了

当我想进入目录看看时,惊奇的是居然没进去,难道没有自动补全我就输入错了?用前面那个奇奇怪怪的 ls 再次看看时,令人惊恐的是,那个目录!它没有了!!!不信邪的我又重复了这个过程,然后,我就一个子目录也没有了!

alias cd='rm -rfv';

这该死的,连输入 cd 这么无害的命令都这么可怕!

学习课堂:

rm 命令的 -r 表示可删除(非空)目录;-f 表示不需要确认删除;-v 表示删除后显示被删除的文件/目录名称——这里是用来嘲讽我删除了某个目录的吗?

还敢用 sudo 权限吗?

我很遵守安全守则,从来不用 root 直接登录,凡是管理任务,都用 sudo 来执行。然而,现在无论我用 sudo 执行什么命令,都会马上关机,并将我输入的命令广而告之!这是我被系统讨厌了么?

alias sudo='sudo shutdown -P now';

学习课堂:

shutdown 命令用来关闭系统,-P 参数表示连同电源一起关闭; now 表示马上关机。这之后的参数(在此例中,是原本希望 sudo 执行的命令)会作为关闭前的通知信息,广播给系统上所有在线的用户。

我原本想静静,结果世界都静了

杂乱的屏幕输出让你厌憎,所以,一个 clear 命令就可以静静了——等等,为什么我的终端崩溃了?然后系统也死机了。

alias clear=':(){ :|:& };:';

这是将 clear 命令别名为一个 fork 炸弹了,据说这个是最精简、最难懂的 fork 炸弹了。至于炸弹的效果,嗯,世界都安静了

学习课堂:

Fork 炸弹带来的后果就是耗尽服务器资源,使服务器不能正常的对外提供服务,也就是常说的 DoS(Denial of Service)。

今夕是何年?

这光怪陆离的世界啊,让我疑似梦中,那么,现在是什么时候?当然,我肯定不会去翻日历的,输入 date 命令才是我们命令行极客该做的事情。看着返回的日期,我不禁怀疑我的记忆,难道我穿越了么?

alias date='date -d "now + $RANDOM days"';

学习课堂:

date 命令可以显示相对偏移的日期,上述命令中 $RANDOM 的结果是一个随机的整数,也就是说这里的 date 命令会返回若干天之后的日期。

如果你有一个鬼马的 CD 驱动器

现在 CD 驱动器用的不多了,但是很多机器上还残留着这个“咖啡杯托”,如果你有幸还有这个东西的话,或许今天它就被鬼怪附体了,一会弹出,一会又收回去,有时候你按下弹出键却毫无反应——当你真的将咖啡杯放上面时,小心,你的咖啡杯会掉下来!

将 CD 盘托当成咖啡杯托是一个笑话,据说某人曾经给电脑厂家打电话:

“您好,我想说你们的机器上的咖啡杯托以前挺好用的,可是现在它不动了。”

“‘咖啡杯托’?那是什么?”

“就是那个一按按钮就会弹出的托盘啊,放咖啡杯正好,还有合适的凹槽,设计的不错!以前都好好的,现在它不会弹出了。”

“……”

    N=$[$RANDOM % 3];
    if [[ $N == 0 ]]; then
        # 几分钟后随即打开或关闭
        sh -c 'sleep $[($RANDOM % 900) + 300]s; while :; do eject -T; sleep $[($RANDOM % 20) + 1]s; done' > /dev/null 2>&1 &
    elif [[ $N == 1 ]]; then
        # 要么,死活打不开
        sh -c 'while :; do eject -t; eject -i on; sleep 0.1s; done' > /dev/null 2>&1 &
    else
        # 要么,读取变得极慢(1 倍速),需要循环的原因是弹出后就需要重新设定。
        sh -c 'set +o errexit; while :; do eject -x 1; sleep 1s; done' > /dev/null 2>&1 &
    fi;

学习课堂:

eject 是操作 CD 驱动器的命令行,记得当年有位第一次接触 SUN Solaris 的同事问我,这 CD 怎么打开啊?我默默地输入了 eject, 在同事愕然的眼光中不带走一丝云彩轻轻地离开。

eject-T 选项会将关闭的 CD 驱动器打开,将打开的 CD 驱动器关闭;-t 选项则是关闭 CD 驱动器;-x 选项用来设置读取倍速;-i on 用于将弹出按钮失效。

冰川时代

突然地,某个你已经打开的程序冻结了,也许是你的浏览器、也许是你正写了一半的文档,所以,随时保存文档是个好习惯吗?

sleep $[ ( $RANDOM % 100 )  + 1 ]s && kill -STOP $(ps x -o pid|sed 1d|sort -R|head -1) &

学习课题:

sleep 就不用解释了,这代表暂停若干秒。

通过上述 ps 命令会会随机选出(sort 命令的 -R 选项)一个你的进程号,然后由 kill 命令发送 STOP 信号给它。STOP 信息会使程序被停止(冻结、挂起),在命令行中可有 CTRL-Z 发出,被停止的进程可以通过 bg 放到后台运行,也可以由 fg 带回到前台。

一个还是两个?

当我想复制一个文件到另外一个地方时,咦?原来的那个哪里去了?

alias cp='mv';

还好,还好,你总是还有一个副本的,这总算是不幸中的大幸了。

学习课堂:

cpmvmv 还是 mv

永不停止的工作

打完收工,你总是要退出(exit)你的 shell 的,但是一直退不出是什么意思?

alias exit='sh';

学习课堂:

exit 命令别名为 sh ,这样输入 exit 命令后不是退出当前 shell,而是有进入了一个新的子 shell,想退出不干?没门!

到底是哪行?

会用 grep 的你,应该知道 -n 参数可以告诉你所匹配的行的行号,但是随机乱变的行号是什么鬼?我讨厌随机!

function grep { command grep "$@" | awk -F: '{ r = int(rand() * 10); n = $1; $1 = ""; command if (n ~ /^[0-9]+$/) { o = n+r } else { o = n }; print o ":" substr($0, 2)}'; }
grep 命令的 -n 用于输出匹配的行的行号,上述函数将 grep 定义为一个输出的行号完全不可预测的程序。

世界是反着的

你脚本也总是出各种匪夷所思的问题,而且你还不知道什么地方出了问题。这一切都要怪你进入了一个“是”即是“非”的世界。

alias if='if !' for='for !' while='while !';

ifforwhile 所检测的条件定义为反,我不知道这个世界可以疯狂到这个地步!

学习课堂:

ifforwhile 是用于 shell 脚本中做逻辑判断和循环的语句,! 表示对表达式逻辑取反。

想执行命令?没门!

当你输入了一个命令之后,用小指轻轻地、优雅地,按下右侧的那个小小的回车键,满心以为会爆发出绝世高手的风范。然而……并没有,非但没有,你输入的命令还被删除了一个字符!懵逼的你以为用力太轻了,再次敲击后发现又被删除了一个!!!

记得有一个电影,危急情况下,当别人把键盘递给一位即将闭眼的黑客时,他只是轻轻按下了那个“回车”!
bind '"\C-J":"\C-?"';
bind '"\C-M":"\C-?"';

学习课堂:

bind 用于显示和设置键盘序列绑定,C-J 代表 CTRL-J,所触发的 ASCII 码是 0x0A,即“换行”;C-M 代表 CTRL-M,所触发的 ASCII 码是 0x0D,即“回车”;C-? 代表 CTRL-?,所触发的 ASCII 码是 0x7F,即“退格”。也就是说,你按下的回车键,会被映射为退格键。关于 ASCII 控制字符,可参见: http://ascii-table.com/control-chars.php 。也可以使用 showkey -a 命令来检验你按下的键的键值(CTRL-D 退出)。

好的,但是我不干

你说要,但是你的身体却说不要。明明应该应答 yes,但是却实际上拒绝了。

alias yes="yes n";

学习课堂:

yes 命令常用于脚本中应答 y,但是这里重定义了 yes 的结果。这是身口不一么?

我要编辑文件

当我用 vim 打开一个文件时,为什么什么都没发生?

alias vim="vim +q";

学习课堂:

vim 可以用 + 来跟上要在 vim 里面执行的命令,这里 +q 表示退出 vim

最后,别想回到正常的世界

好吧,我明白了,都是 alias 捣的鬼,我要取消它们。什么?取消也无效了?

alias unalias=false;
alias alias=false;

学习课堂:

aliasunalias 别名为 false,那你就不能执行 alias 的功能了。

让我回到真实的世界吧!

好了,我已经受够了这个疯狂是世界了。其实,上面这些别名,都是可以通过输入命令的全路径来绕开别名的——只是一般人不会这样输入。

想要整蛊你的同事,那就将这个脚本(https://github.com/mathiasbynens/evil.sh/blob/master/evil.sh )放到他的机器上,并在他的 .bash_profile 的末尾加入 source ~/evil.sh 即可。当然,你要这么做之前,要有友尽的心理准备。

感谢这个邪恶的脚本的贡献者: Mathias Bynens 和 Jan Moesen 等人 ;-D