Shell中Bash的基本功能(二)
1 历史命令
1)历史命令的查看
[root@localhost ~]# history [选项] [历史命令保存文件]
选项:
-c: 清空历史命令
-w: 把缓存中的历史命令写入历史命令保存文件。如果不手工指定历史命令保存文
件,则放入默认历史命令保存文件~/.bash_history 中
[root@192 ~]# history
1 systemctl stop firewalld
2 systemctl disable firewalld
3 setenforce 0
4 getenforce
5 setenforce 0
6 getenforce
7 vim /etc/selinux/config
8 reboot
9 docker
10 docker ps -a
11 systemctl start docker
12 docker ps -a
13 docker rm cb26c27396e5
14 docker run -itd --name mongo -p 27017:27017 mongo --auth
15 docker exec -it mongo mongo admin
16 docker run -itd --name mongo1 -p 27017:27017 mongo
17 docker run -itd --name mongo1 -p 27018:27017 mongo
18 docker run -itd --name mongo2 -p 27018:27017 mongo
19 docker exec -it mongo2 mongo
20 docker ps -a
21 docker rm $(docker ps -a -q)
22 docker rm -f $(docker ps -a -q)
23 docker run -itd --name mongo -p 27017:27017 mongo
24 docker exec -it mongo mongo
25 history
[root@localhost ~]# vi /etc/profile
…省略部分输出…
HISTSIZE=1000
…省略部分输出…
我们使用 history 命令查看的历史命令和~/.bash_history 文件中保存的历史命令是不同的。那
是因为当前登录操作的命令并没有直接写入~/.bash_history 文件,而是保存在缓存当中的。需要等
当前用户注销之后,缓存中的命令才会写入~/.bash_history 文件。如果我们需要把内存中的命令直
接写入~/.bash_history 文件,而不等用户注销时再写入,就需要使用“-w”选项了。命令如下:
[root@localhost ~]# history -w
#把缓存中的历史命令直接写入~/.bash_history
这时再去查询~/.bash_history 文件,历史命令就和 history 命令查询的一致了。
[root@192 ~]# history -w
[root@192 ~]# cat .bash_history
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
getenforce
setenforce 0
getenforce
vim /etc/selinux/config
reboot
docker
docker ps -a
systemctl start docker
docker ps -a
docker rm cb26c27396e5
docker run -itd --name mongo -p 27017:27017 mongo --auth
docker exec -it mongo mongo admin
docker run -itd --name mongo1 -p 27017:27017 mongo
docker run -itd --name mongo1 -p 27018:27017 mongo
docker run -itd --name mongo2 -p 27018:27017 mongo
docker exec -it mongo2 mongo
docker ps -a
docker rm $(docker ps -a -q)
docker rm -f $(docker ps -a -q)
docker run -itd --name mongo -p 27017:27017 mongo
docker exec -it mongo mongo
history
vim .bash_history
history -w
如果需要清空历史命令,只需要执行:
[root@localhost ~]# history -c
#清空历史命令
[root@192 ~]# history -c
[root@192 ~]# history
1 history
2)、历史命令的调用
如果想要使用原先的历史命令有这样几种方法:
使用上、下箭头调用以前的历史命令
使用“!n”重复执行第 n 条历史命令
使用“!!”重复执行上一条命令
使用“!字串”重复执行最后一条以该字串开头的命令
使用“!$”重复上一条命令的最后一个参数
[root@192 ~]# !20
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3b6d2367d39c mongo "docker-entrypoint..." 34 minutes ago Up 34 minutes 0.0.0.0:27017->27017/tcp mongo
[root@192 ~]# !!
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3b6d2367d39c mongo "docker-entrypoint..." 34 minutes ago Up 34 minutes 0.0.0.0:27017->27017/tcp mongo
2、命令与文件的补全
Tab键
3 命令别名
命令格式:
[root@localhost ~]# alias
#查询命令别名
[root@localhost ~]# alias 别名='原命令'
#设定命令别名
例如:
[root@192 ~]# alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-ti lde'
[root@localhost ~]# alias vi='vim'
#定义 vim 命令的别名是 vi
既然我们说别名的优先级比命令高,那么命令执行时具体的顺序是什么呢?命令执行时的顺序是
这样的:
1、 第一顺位执行用绝对路径或相对路径执行的命令。
2、 第二顺位执行别名。
3、 第三顺位执行 Bash 的内部命令。
4 第四顺位执行按照$PATH 环境变量定义的目录查找顺序找到的第一个命令。
为了让这个别名永久生效,可以把别名写入环境变量配置文件“~/.bashrc”。命令如下:
[root@localhost ~]# vi /root/.bashrc
[root@192 ~]# vi /root/.bashrc
[root@192 ~]# source /root/.bashrc
[root@192 ~]# vi /root/.bashrc
[root@192 ~]# cat /root/.bashrc
# .bashrc # User specific aliases and functions alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias ssd='systemctl start docker'
alias vi='vim'
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
[root@192 ~]#
执行VI会发亮
测试:
[root@192 ~]# systemctl stop docker
[root@192 ~]# docker info
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
[root@192 ~]# ssd
[root@192 ~]# docker info
Containers: 1
Running: 0
Paused: 0
Stopped: 1
Images: 2
Server Version: 1.13.1
Storage Driver: overlay2
Backing Filesystem: xfs
Supports d_type: true
Native Overlay Diff: true
Logging Driver: journald
Cgroup Driver: systemd
4 Bash 常用快捷键
快捷键 作 用
ctrl+A 把光标移动到命令行开头。如果我们输入的命令过长,想要把光标移动到命令行开头时使用。
ctrl+E 把光标移动到命令行结尾。
ctrl+C 强制终止当前的命令。
ctrl+L 清屏,相当于 clear 命令。
ctrl+U 删除或剪切光标之前的命令。我输入了一行很长的命令,不用使用退格键一个一个字符的删除,使用这个快捷键会更加方便
ctrl+K 删除或剪切光标之后的内容。
ctrl+Y 粘贴 ctrl+U 或 ctrl+K 剪切的内容。
ctrl+R 在历史命令中搜索,按下 ctrl+R 之后,就会出现搜索界面,只要输入搜索内容,就会从历史命令中搜索。
ctrl+D 退出当前终端。
ctrl+Z 暂停,并放入后台。
ctrl+S 暂停屏幕输出。
ctrl+Q 恢复屏幕输出。
5 输入输出重定向
1)、输出重定向
[root@192 ~]# cd test/
[root@192 test]# ll
总用量 0
[root@192 test]# pwd
/root/test
[root@192 test]# ls > abc
[root@192 test]# cat abc
abc
[root@192 test]# ls >> abc
[root@192 test]# cat abc
abc
abc
[root@192 test]# lsal >> abc
bash: lsal: 未找到命令...
[root@192 test]# lsal 2>> abc
[root@192 test]# cat abc
abc
abc
bash: lsal: 未找到命令...
[root@192 test]# lsal &>> abc
[root@192 test]# cat abc
abc
abc
bash: lsal: 未找到命令...
bash: lsal: 未找到命令...
2)、输入重定向
[root@localhost ~]# wc [选项] [文件名]
选项:
-c 统计字节数
-w 统计单词数
-l 统计行数
[root@192 test]# wc -l abc
4 abc
[root@192 test]# wc abc
4 8 70 abc
[root@192 test]# wc -c abc
70 abc
[root@192 test]#
6 多命令顺序执行
[root@192 test]# ls ; date
abc
2019年 12月 11日 星期三 22:28:05 CST
[root@192 test]# lsl && date
bash: lsl: 未找到命令...
[root@192 test]# lsl || date
bash: lsl: 未找到命令...
2019年 12月 11日 星期三 22:29:35 CST
[root@192 test]# ls ; ddd
abc
bash: ddd: 未找到命令...
相似命令是: 'dd'
[root@192 test]# ls || ddd
abc
[root@192 test]# ls && echo yes || echo no
abc
yes
[root@192 test]# lsll && echo yes || echo no
bash: lsll: 未找到命令...
no
7 管道符
1)、行提取命令 grep
[root@localhost ~]# grep [选项] "搜索内容" 文件名
选项:
-A 数字: 列出符合条件的行,并列出后续的 n 行
-B 数字: 列出符合条件的行,并列出前面的 n 行
-c: 统计找到的符合条件的字符串的次数
-i: 忽略大小写
-n: 输出行号
-v: 反向查找
--color=auto 搜索出的关键字用颜色显示
举几个例子:
[root@localhost ~]# grep "/bin/bash" /etc/passwd
#查找用户信息文件/etc/passwd 中,有多少可以登录的用户
再举几个例子吧:
[root@localhost ~]# grep -A 3 "root" /etc/passwd
#查找包含有“root”的行,并列出后续的 3 行
[root@localhost ~]# grep -n "/bin/bash" /etc/passwd
#查找可以登录的用户,并显示行号
[root@localhost ~]# grep -v "/bin/bash" /etc/passwd
#查找不含有“/bin/bash”的行,其实就是列出所有的伪用户
[root@192 test]# grep "root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
dockerroot:x:987:981:Docker User:/var/lib/docker:/sbin/nologin
[root@192 test]# cat /etc/passwd |grep "root"
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
dockerroot:x:987:981:Docker User:/var/lib/docker:/sbin/nologin
[root@192 test]# grep -A 3 "root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
--
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
--
dockerroot:x:987:981:Docker User:/var/lib/docker:/sbin/nologin
[root@192 test]# grep -v "/bin/bash" /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
2)find 和 grep 的区别
find 命令是在系统当中搜索符合条件的文件名,如果需要模糊查询,使用通配符进行匹配,搜索时文件名是完全匹配。
[root@localhost ~]# touch abc
#建立文件 abc
[root@localhost ~]# touch abcd
#建立文件 abcd
[root@localhost ~]# find . -name "abc"
./abc
#搜索文件名是 abc 的文件,只会找到 abc 文件,而不会找到文件 abcd
#虽然 abcd 文件名中包含 abc,但是 find 是完全匹配,只能和要搜索的数据完全一样,才能找到
注意:find 命令是可以通过-regex 选项识别正则表达式规则的,也就是说 find 命令可以按
照正则表达式规则匹配,而正则表达式是模糊匹配。但是对于初学者而言,find 命
令和 grep 命令本身就不好理解,所以我们这里只按照通配符规则来进行 find 查询。
grep 命令是在文件当中搜索符合条件的字符串,如果需要模糊查询,使用正则表达式进行匹配,
搜索时字符串是包含匹配。
[root@localhost ~]# echo abc > test
#在 test 文件中写入 abc 数据
[root@localhost ~]# echo abcd >> test
#在 test 文件中再追加 abcd 数据
[root@localhost ~]# grep "abc" test
abc
abcd
#grep 命令查找时,只要数据行中包含有 abc,就会都列出
#所以 abc 和 abcd 都可以查询到
3)管道符
[root@localhost ~]# ll -a /etc/ | more
[root@localhost ~]# netstat -an | grep "ESTABLISHED"
#查询下本地所有网络连接,提取包含 ESTABLISHED(已建立连接)的行
#就可以知道我们的服务器上有多少已经成功连接的网络连接
[root@localhost ~]# netstat -an | grep "ESTABLISHED" | wc -l
#如果想知道具体的网络连接数量,就可以再使用 wc 命令统计行数
[root@localhost ~]# rpm -qa | grep httpd
Shell中Bash的基本功能(二)的更多相关文章
- Shell中bash的特性小结
Shell: 用户与操作系统之间完成交互式操作的一个接口程序,为用户提供简化了的操作:上世纪的70年代中期在贝尔实验室,Bourne位Unix开发了一个shell程序Bourne Shell,简称sh ...
- shell中bash的常见命令
shell 在计算机科学中,Shell俗称壳,用来区别Kernel(核) Shell分类:1:图形界面shell:通过提供友好的可视化界面,调用相应应用程序,如windows系列操作系统,Linux系 ...
- shell 中的特殊符号的含义
来源:http://blog.sina.com.cn/s/blog_62a151be0100x9rn.html 第四章 基本功 - 特殊符号 学习撰写 script 最迅速的捷径是观摩别人的 scri ...
- shell中的特殊符号总结
在shell中常用的特殊符号罗列如下: # ; ;; . , / \\ 'string'| ! $ ${} $? $$ $* \"string\"* ** ...
- Shell中特殊符号
http://blog.chinaunix.net/u1/53027/showart.php?id=482234 在shell中常用的特殊符号罗列如下:# ; ;; . ...
- Linux Shell中的特殊符号和含义简明总结(包含了绝大部份)
case语句适用于需要进行多重分支的应用情况. case分支语句的格式如下: case $变量名 in 模式1) 命令序列1 ;; 模式2) 命令序列2 ;; *) 默认执行的命令序列 ...
- [转帖]shell中的特殊符号总结
http://www.embeddedlinux.org.cn/emb-linux/entry-level/201907/18-8747.html 在shell中常用的特殊符号罗列如下: # ; ...
- 『忘了再学』Shell基础 — 10、Bash中的特殊符号(二)
提示:本篇文章接上一篇文章,主要说说()小括号和{}大括号的区别与使用. 8.()小括号 ():用于一串命令执行时,()中的命令会在子Shell中运行.(和下面大括号一起说明) 9.{}大括号 {}: ...
- linux笔记:shell基础和bash的基本功能
shell的优势:可以直接调用linux系统命令 shell脚本的基本写法:脚本名以.sh结尾程序的第一行为#!/bin/bash,告诉系统这是一个shell脚本以#作为注释shell脚本的执行方式: ...
随机推荐
- Linux下用Java获取本机IP
可能有多个网卡包括虚拟网卡,需要进行排除 String ip = ""; try { Enumeration<?> e1 = NetworkInterface.getN ...
- Mysql数据库表结构设计准则
一:动静分离 解释:最好做好静态表和动态表的分离.这里解释一下静态表和动态表的含义,静态表:存储着一些固定不变的资源,比如城市/地区名/国家(静态表一定要使用缓存).动态表:一些频繁修改的表 二:关于 ...
- 小记------mongodb数据库如何进行模糊查询
// 模糊匹配createTime 是以 2019-07-23 开头 db.getCollection('driver_online_record').find({"createTime ...
- 别人的Linux私房菜(24-25)X Window设置介绍、Linux内核编译与管理
X Window主要组件为:X Server .X Client . Window Manager . Display Manager. X Server管理硬件,X Client则为应用程序,将所需 ...
- 084、Prometheus 到底NB在哪里?(2019-05-06 周一)
参考https://www.cnblogs.com/CloudMan6/p/7709970.html 本节学习Prometheus的核心,多维数据模型 比如要监控容器 webapp1 的内存使 ...
- node.js使用express模块创建web服务器应用
1.安装express模块 在命令行输入 npm install body-parser --save npm install express --save 2.创建app.js文件 /*应用程序入口 ...
- linux ssh连接超时断连设置
以下均针对redhat6.5系统进行说明. 一.设置ssh超时断连 使用root用户,编辑/etc/profile文件,在 HOSTNAME='/bin/hostname' HISTIZE=30 后增 ...
- error: (-215) !empty() in function detectMultiScale
tips: pip install opencv-python or https://www.lfd.uci.edu/~gohlke/pythonlibs/ 原因确实是找不到 opencv 的 xml ...
- Instr()函数用法
返回 Variant (Long),指定一字符串在另一字符串中最先出现的位置. 语法 InStr([start, ]string1, string2[, compare]) InStr 函数的语法具有 ...
- pycharm 的一个小问题
版本:PyCharm 2018.3.7 (Professional Edition) 这段时间用pycharm写python代码,运行网上copy的代码.报错了也就是少个模块或者Python2的语法在 ...