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脚本的执行方式: ...
随机推荐
- 2019JAVA第八次实验报告
班级 计科二班 学号 20188442 姓名 吴怡君 完成时间 2019.11.1 评分等级 课程作业: 将奇数位小写字母改写为大写字母(用文件输出) 实验代码: package Domon7; im ...
- HDU 1159 Common Subsequence (动态规划、最长公共子序列)
Common Subsequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- 再谈PG索引-存储架构
1.索引的基本架构 PG的索引是B+树,B+树是为磁盘或其他直接存取辅助设备而设计的一种平衡查找树,在B+树中,所有记录节点都是按键值的大小顺序存放在同一层的叶节点中,各叶节点指针进行连接: meta ...
- c#中抽象类和接口的相同点跟区别
下面是自己写的一个demo,体现抽象类和接口的用法. using System; using System.Collections.Generic; using System.Linq; using ...
- django 商城项目之购物车以及python中的一些redis命令
最近在用django restframe框架做一个商城项目,有一个关于购物车的业务逻辑,是用cookie和redis存储的购物车信息,在这里记录一下. 完成一个商城项目,如果不做一个购物车,就是十分可 ...
- 上载和下载CSV文件
sap中把txt .excel .文件上载到内表中,txt和csv速度最快. excel文件导出的csv是用,分隔符分隔的,如果单元格的文本中就有逗号,这样会和分隔符逗号混淆,最好abap产生csv文 ...
- java获取json数组格式中的值
第一种方法: String str = "{'array':[{'id':5,'name':'张三'},{'id':6,'name':'李四'}]}"; JSONArray jso ...
- java.lang.IllegalStateException: No output folder
将正在正常运行的tomcat打包(使用tar -zcvf命令打的包),然后放到其他服务器上使用非root用户解压(使用tar -zxvf命令)配置好之后,启动tomcat后报错如下 HTTP Stat ...
- @ResponseBody 注解是什么意思?
1. @ResponseBody注解的作用是将Controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据 ...
- 重大更新:DeepFaceLab更新至2019.12.20
本次更新增加SAEHD:lr_dropout参数,训练时可以打开或者禁用(默认禁用),每次换脸经过足够的训练后可以启用此选项以减少重复次数,从而获得额外的清晰度.还有一个比较有意义的更新是增加了图片元 ...