Linux 武功秘籍 (三)shell学习 —— Bash shell


Bash shell 强大功能

/bin/bash是Linux默认shell,Bash也是Linux distributions 的标准 shell。
Bash是在sh基础上添加一些使用者需求而形成的加强shell版本。
为什么Bash会成为Linux默认的shell?这就来介绍下Bash几个人性化的功能,简直太好用了。

保存历史命令(history)

1、只要在命令行中按“上下键”就可以找到前/后输入的命令,这种命令记忆能力可以达到1000个。
2、命令存放在~/.bash_history中,不过注意的是这里面存放的命令是登陆之前所执行的指令;

  当前登陆所执行的命令会被暂存在内存中(使用history命令可以查看),历史命令在我退出时,会将最近执行的命令记录到我的纪录档当中,当登陆系统后,指令记忆记录到.bash_history当中。当然, 也可以用 history -w 强制立刻写入的。
这功能可以让使用者查看之前操作的每一个命令。

history [n]
history [-c]
history [-raw] histfiles
n 数字, 意思是“要列出最近的 n 笔命令列表”
-c 将目前的 shell 中的所有 history 内容全部消除
-a 将目前新增的 history 指令新增入 histfiles 中, 若没有加 histfiles , 则默认写入 ~/.bash_history
-r 将 histfiles 的内容读到目前这个 shell 的 history 记忆中
-w 将目前的 history 记忆内容写入 histfiles 中

列出目前内存内的所有 history 记忆:history
列出目前最近的 3 笔数据:history 3
立刻将目前的数据写入 histfile 当中:history -w(在默认的情况下, 会将历史纪录写入 ~/.bash_history 当中)
查看~/.bash_history 会记录几笔数据:echo ${HISTSIZE}

!number
!command
!!
number 执行第几笔指令
command 由最近的指令向前搜寻“指令串开头为 command”的那个指令, 并执行
!! 执行上一个指令( 相当于按↑按键后, 按 Enter)
这三条命令也相当的好用,有兴趣的好兄弟们可以试试!!

命令和文件补全键【Tab】

bash里有这个功能可以使你少打很多字并且输入的数据是正确的。
[Tab]按键接在指令的第一个字后和第二个字后,补全的内容会有所不同。

[Tab] 接在一串指令的第一个字的后面, 则为命令补全;
[Tab] 接在一串指令的第二个字以后时, 则为“文件补齐”!

如果想要打印出当前环境下以 c 为开头的所有指令, 就按下“ c[tab][tab] ”。


命令别名设置(alias,unalias)

如果你惯用的有些命令执行太过于长,可以将这些命令做个别名取代,这样便于执行。
比如,想要查看文件下所有类型的文件以及文件属性,就要使用“ls -la”命令查看。这命令不够简练,就可以用“la”来取代这个命令。以后只要输入“la”就相当于输入"ls -la"

使用别名的命令:alias 后面加上 {“别名”=‘指令 选项…’ }
比如:alias la=‘ls -la’

若你以root的身份删除一些文件,直接执行”rm 文件名“没有任何提示信息。万一不小心打错了文件名,在命令执行的时候幡然醒悟。这时候可以将“rm”命令用“rm -i”来做个别名。这样在执行”rm“命令时就省心多了。alias rm=‘rm -i’

查看当前系统中所有做了别名的命令

DWB@ubuntu:~$ alias

alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'
alias rm='rm -i'

如果要取消命令别名的话, 那么就使用 unalias。 例如要将rm命令别名拿掉,使用unalias rm


工作控制、 前景背景控制( job control, foreground, background)

工作控制( jobs) 可以让我们随时将工作丢到背景中执行。 而不怕不小心使用了 [Ctrl] + c 来停掉该程序。


程序化脚本( shell scripts)

在 Linux 下面的 shellscripts 则发挥更为强大的功能。可以将平日里经常用的连续指令写在一个文件里,通过对谈互动式的方式来进行主机的侦测工作。也可以借由 shell 提供的环境变量及相关指令来进行设计。


万用字符

想要知道 /usr/bin 下面有多少以 C 为开头的文件吗?
使用: “ ls -l /usr/bin/C* ”就能够知道。加快使用者的操作。


查看命令是否为Bash shell的内置命令

如何查看一个命令是否为Bash shell的内置命令?是使用man查看bash相关说明文档?命令man bash
在bash的man page里面有很多详尽的数据,要在里面找一个命令是否为Bash shell的内置命令,那也太过于麻烦了。有没简单点的方式?嘿嘿!!!有的,type命令

type [-tpa] name
不加任何选项与参数时, type 会显示出 name 是外部指令还是 bash 内置指令
-t 当加入 -t 参数时, type 会将 name 以下面这些字眼显示出他的意义:
file : 表示为外部指令;
alias : 表示该指令为命令别名所设置的名称;
builtin : 表示该指令为 bash 内置的指令功能;
-p 如果后面接的 name 为外部指令时, 才会显示完整文件名
-a 会由 PATH 变量定义的路径中, 将所有含 name 的指令都列出来, 包含 alias
DWB@ubuntu:~$ type cd                       // cd命令属于内置命令
cd is a shell builtin
DWB@ubuntu:~$ type -t cd
builtin
DWB@ubuntu:~$ type -a cd
cd is a shell builtin
DWB@ubuntu:~$ type ls						// ls命令属于外部命令
ls is aliased to `ls --color=auto'
DWB@ubuntu:~$ type -t ls
alias
DWB@ubuntu:~$ type -a ls
ls is aliased to `ls --color=auto'
ls is /bin/ls
DWB@ubuntu:~$ type vi						// vi命令属于可执行文件
vi is hashed (/usr/bin/vi)
DWB@ubuntu:~$ type -t vi
file
DWB@ubuntu:~$ type -a vi
vi is /usr/bin/vi

注:利用 type 搜寻后面的名称时, 如果后面接的名称并不能以可执行文件的状态被找到, 那么该名称是不会被显示出来的。 也就是说, type 主要在找出“可执行文件”而不是一般文件文件名

猜你喜欢

转载自blog.csdn.net/weixin_43564241/article/details/129911436