命令行下的好东西,Bash入门技巧分享

2019-10-01 14:35 来源:未知

列举你可能没注意过的好用的 Linux 命令行命令

Linu Bash入门技巧分享

Linux 下shell基本上默认是 bash, 下面是我总结的一些技巧。

&  后台运行程序
()  使用子shell, 比如 (cd ../../commlib/; make)
$()  命令替换,和 ``的作用是一样的
<(命令)  把命令的输出到一个临时文件
<< HereDoc

使用举例:
比如你要在 shell 脚本中 使用 awk 脚本
awk -f <(cat <<EOF
  /abc/{
  print $0;
}
EOF
)

$(())  执行整数计算 $((66/2))

if (( 算术运算 ))
if [[ 字符串运算 ]]
alias 定义命令别名
dot .  或 source 命令, 在当前shell中执行脚本
exec 可以重定向当前shell的文件描述符, 或运行另一个程序。
trap 可以捕获信号
nohup 防止ssh 挂起导致的问题
screen 可以用来保持 会话,  不受ssh的关闭影响
export 导出变量给子shell使用
tee 可以 把 输出 分流
ENV_VAR=VALUE your_program 这样可以 为这一个程序 修改它环境变量,外部shell的环境变量没有被更改
tac 倒置文件

目录跳转
cd -  快速回到前一个路径
cd  回到用户的home目录
pushd, popd, dirs 实现多目录跳转
pushd 命令用来更改您的当前目录并将其存储在堆栈中。 popd 命令用来从堆栈的顶部移除目录并使您返回该位置。 dirs 命令来显示当前目录堆栈。(dir –v –p)
pushd +n; popd +n 可以操作虚拟目录堆栈

快速跳至常用目录
    你可能已经知道$PATH变量可以列出 bash的“搜索路径”——当在当前目录不能找到请求的文件时,bash会自动搜索的目录。不过,bash也支持$CDPATH变量,当试图改变目录时该变量列出cd命令转向的目录。为了使用这个特性,我们要对$CDPATH变量赋值一个目录列表,如下面的例子所示:
bash> CDPATH='.:~:/usr/local/apache/htdocs:/disk1/backups'
bash> export CDPATH
现在,无论何时使用cd命令,bash将会检查$CDPATH列表中的所有目录来查找要转向的目录名。

特殊参数
1) $*: 代表所有参数,其间隔为IFS内定参数的第一个字元
2) [email protected]: 与*星号类同。不同之处在於不参照IFS
3) $#: 代表参数数量
4) $?: 执行上一个指令的返回值
5) $-: 最近执行的foreground pipeline的选项参数
6) $$: 本身的Process ID
7) $!: 执行上一个背景指令的PID
8) $_: 显示出最後一个执行的命令

bash快捷键

Emacs风格

ctrl+p: 方向键 上 ↑
ctrl+n: 方向键下 ↓
ctrl+b: 方向键 ←
alt+f: 光标右移一个单词
ctrl+f :方向键 →
alt+b: 光标左移一个单词
ctrl+a:光标移到行首
ctrl+e:光标移到行尾
ctrl+k:清除光标后至行尾的内容。
ctrl+d: 删除光标所在字母;注意和backspace以及ctrl+h的区别,这2个是删除光标前的字符
ctrl+r:搜索之前打过的命令。会有一个提示,根据你输入的关键字进行搜索bash的history
ctrl+m : 输入回车
ctrl+i : 输入tab
ctrl+[ : 输入esc

其它
ctrl+h:删除光标前一个字符,同 backspace 键相同。
alt + p 非增量方式反向搜索历史
alt + > 历史命令列表中的最后一行命令开始向前
ctrl+u: 清除光标前至行首间的所有内容。
ctrl+w: 移除光标前的一个单词
ctrl+t: 交换光标位置前的两个字符
ctrl+y: 粘贴或者恢复上次的删除
ctrl+l:清屏,相当于clear。
ctrl + xx 光标在行头与行尾进行跳转
alt+r 撤销当前行的所有内容
ctrl+z : 把当前进程转到后台运行
ctrl+s : 锁住屏幕
ctrl+q : 恢复屏幕
ctrl+v key: 输入特殊字符
alt + l 将当前光标处之后的字母转化成小写字母
alt + u 将当前光标处之后的字母转化成大写字母
ctrl + Alt + e 扩展命令行的内容(例如:ls  =>  ls  -l  --color=tty)
ctrl+c:杀死当前进程, 输入模式下,中断输入的命令。
ctrl+d:退出当前 Shell
esc + . 快捷键可以轮询历史命令的参数或选项。
esc + t 快捷键可以 置换前两个单词。
输入重复字母 Esc {100} e 可以输入100个e字符

按多次{esc}可以补全
{esc}{~}可以补全本机上的用户名
{esc}{/}可以补全文件名
{esc}{@}可以补全主机名,localhost可以方便地用 lo补全.

Bang Bang 历史命令
!!    重新执行上一条命令
!N  重新执行第N条命令。比如 !3
!-N 重新执行倒数第N条命令。!-3
!string  重新执行以字符串打头的命令。 比如 !vim
!?string?  重新执行包含字符串的命令。 比如 !?test.cpp?
!?string?%  替换为: 最近包含这个字符串的命令的参数。比如:  vim !?test.cpp?%
!$  替换为:上一条命令的最后一个参数。比如 vim !$
!!string  在上一条命令的后面追加 string ,并执行。
!Nstring  在第N条指令后面追加string,并执行。
^old^new^  对上一条指令进行替换
修饰

:s/old/new/  对第N条指令中第一次出现的new替换为old。 比如 vim !?test.cpp?:s/cpp/c/
:gs/old/new/  全部替换
:wn  w为数字, 取指令的第w个参数.
:p 回显命令而不是执行, 比如 !ls:p  。 这个很有用, 你可以先查看你选的命令对不对,要执行时再使用!!

Bash相关文件
    /etc/profile 设置环境变量(所有用户)
    ~/.bash_profile 设置环境变量(当前用户)
    ~/.bashrc
    ~/.bash_history
    ~/.bash_logout

Linux下获取电脑硬件配置信息的bash脚本代码

bash的登录与欢迎信息:/etc/issue,/etc/motd 

Bash常用的几个配置文件

Bash脚本15分钟进阶教程

10个 Linux/Unix下 Bash 和 KSH shell 的作业控制实例

Ubuntu下shell脚本运行异常:Bash和dash的区别

Bash脚本之for语句if语句以及各种测试语句

什么是Bash Shell的内建(build in)命令

分享有用的 bash 别名和函数 

本文永久更新链接地址:

Bash入门技巧分享 Linux 下shell基本上默认是 bash, 下面是我总结的一些技巧。 后台运行程序 () 使用子shell, 比如 (cd ../../commlib/; make) $() 命...

Linux 下shell基本上默认是 bash, 下面是我总结的一些技巧。

现在做网站做移动应用最讲究的就是推广了,推广做的好那就成功了一大半,相对的没曝光产品再好也很难做下去。就这个角度而言绝大多数 Linux 命令行的推广简直是烂透了。繁多 Linux 有用极了的命令行工具就静静的躺在你发行版默认安装的包裹里,很多时候只有当你碰到什么问题的时候网上搜一圈才能知道。更蛋疼的是这里面很多东西你一旦知道了就会想我靠原来没这个到底是怎么过的下去。所以这里我会列出一些我用过的一些,大部分发行版默认就有,或者能用包裹管理工具轻松获取的东西。

&  后台运行程序
()  使用子shell, 比如 (cd ../../commlib/; make)
$()  命令替换,和 ``的作用是一样的
<(命令)  把命令的输出到一个临时文件
<< HereDoc

这篇文章仅讨论 Linux 环境下的东西,很显然对 MacOS 也适用。其实很多东西虽然有 Windows 也可以找的到但配置比较麻烦,这里不再仔细讲。很多东西像 Linux 老鸟看起来会觉得哈哈哈实在是太基础。但是像 cd, ls, mkdir 这些太基础的写在这里又显得太业余,所以很多十分常用的命令这边我也跳过了。像 git 这种重量级的工具,和 sed, awk 这些能单独出书的东西我觉得我也讲不清楚,所以这边都是功能简单的小东西。不过这些小问题就算了吧...

使用举例:
比如你要在 shell 脚本中 使用 awk 脚本
awk -f <(cat <<EOF
  /abc/{
  print $0;
}
EOF
)

如果你时间比较充裕

...那么不如看看这本书吧: <<The Linux Command Line>>。书的内容就跟标题一样,深入浅出的介绍了所谓 "Linux 命令行" 的方方面面,本文很多内容也是从书里看到的。网站上有 PDF 合法免费下载,书写的很好可以很随意的看不会觉得压力太大。最主要的,如果你是刚刚接触 Linux 那么这个说不定是最好的上手教程,我十分后悔原来不知道这么书。这么说起来另外一本 Linux 入门大师级教程应该是鸟哥私房菜,这个实在是太出名以至于我觉得没什么可以说的。

$(())  执行整数计算 $((66/2))

如果你没什么空的话

那下面就以随机的顺序列出一些我觉得非常棒的命令行工具。这里不详细介绍各种参数,你应该做的是用 man xxx 来查看文档。如果这些程序在你的发行版里没有安装,那么请手动搜一下。Mac 用户的话在 homebrew 里可以应该都能找到。

if (( 算术运算 ))
if [[ 字符串运算 ]]
alias 定义命令别名
dot .  或 source 命令, 在当前shell中执行脚本
exec 可以重定向当前shell的文件描述符, 或运行另一个程序。
trap 可以捕获信号
nohup 防止ssh 挂起导致的问题
screen 可以用来保持 会话,  不受ssh的关闭影响
export 导出变量给子shell使用
tee 可以 把 输出 分流
ENV_VAR=VALUE your_program 这样可以 为这一个程序 修改它环境变量,外部shell的环境变量没有被更改
tac 倒置文件

tmux

虽然说顺序很随机但这一条一定得排在第一个。很多人用 Linux 的状态都是自己的机器是 Windows,用 putty 连到一个哪里的 Linux 服务器进行工作。这样的话每次断开的时候你运行的程序都是会被杀掉的。你可能会希望退出的时候能把打开的程序保持在那里,下次用连接的时候又能自动到之前的工作状态。tmux 就是这个问题的终极解决方案。它们一方面的功能是能在一个 Terminal 里创建多个“窗口”,另一方面如果你关闭连接或者意外掉线,它们默认也不会关掉,下次连上去可以用 tmux attach 来恢复你之前的工作状态。

如果你没听说过这个或者类似的 screen 的话,那你应该给我一点现金。

目录跳转
cd -  快速回到前一个路径
cd  回到用户的home目录
pushd, popd, dirs 实现多目录跳转
pushd 命令用来更改您的当前目录并将其存储在堆栈中。 popd 命令用来从堆栈的顶部移除目录并使您返回该位置。 dirs 命令来显示当前目录堆栈。(dir –v –p)
pushd +n; popd +n 可以操作虚拟目录堆栈

tree

ls 可能是你最常用的命令之一。tree 可以递归的列出目录下所有的文件,并以树状形式展现:

$ tree
.
├── b
├── c
│   └── d
└── what

对应的也有 pstree 可以以这样的方式来显示进程树。

快速跳至常用目录
    你可能已经知道$PATH变量可以列出 bash的“搜索路径”——当在当前目录不能找到请求的文件时,bash会自动搜索的目录。不过,bash也支持$CDPATH变量,当试图改变目录时该变量列出cd命令转向的目录。为了使用这个特性,我们要对$CDPATH变量赋值一个目录列表,如下面的例子所示:
bash> CDPATH='.:~:/usr/local/apache/htdocs:/disk1/backups'
bash> export CDPATH
现在,无论何时使用cd命令,bash将会检查$CDPATH列表中的所有目录来查找要转向的目录名。

ack

我记得我曾经在面试的时候被问到过“请写如何调用 grep 来列出当前目录下所有文件里,含有某个字符串的行”。这个问题我的回答是 “用 ack 就可以了”。ack 的官网域名就叫 betterthangrep.com。由于在当前目录下载所有文件里查找某个字串符是如此常见的一个操作,执行 ack foo 就可以在当前目录所有文件里查找 fooack 默认会跳过很多没用的目录和文件,让查找更快,输出结果更准确。另外像默认开启的彩色显示也让人用起来很舒畅。

ack 目前大部分发行版中没有,如果你使用的是 Ubuntu 的话其包裹名字是 ack-grep,执行文件的名字也一样。具体可以在这里查看文档。

特殊参数
1) $*: 代表所有参数,其间隔为IFS内定参数的第一个字元
2) $@: 与*星号类同。不同之处在於不参照IFS
3) $#: 代表参数数量
4) $?: 执行上一个指令的返回值
5) $-: 最近执行的foreground pipeline的选项参数
6) $$: 本身的Process ID
7) $!: 执行上一个背景指令的PID
8) $_: 显示出最後一个执行的命令

rsync

比如说你本地有一台电脑,远程有一台服务器。你想把你的一个文件夹全部拷贝到另外一边的某个地方去。你这个文件夹经常也要更新,希望通过某种方式把更新的部分能迅速同步过去。这应该怎么做?不知道 rsync 的话你可能会想用 git,搭建一个 ftp,或者用 scp 或者别的。但事实上 rsync 才是真正的为精确的解决这个问题而生的软件。rsync 最棒的地方就是差量更新,也就是只把另外一边缺少的东西传过去,而且你不需要任何额外配置,速度快的飞起。一个例子:

rsync -arvuzp --chmod=g+rx ./built/ me@example.com:/var/www/site

bash快捷键

TAG标签:
版权声明:本文由金沙澳门官网4166发布于世界史,转载请注明出处:命令行下的好东西,Bash入门技巧分享