Shell介绍

Shell是一个命令解释器,提供用户和机器的交互;

Centos7下默认shell为bash,除此之外还有zsh、ksh等;

Shell支持特定语法,如逻辑判断、循环(if、for、while…);

命令历史

用户的命令历史保存在用户家目录下的.bash_history文件中

[root@localhost ~]# pwd

/root

[root@localhost ~]# cat .bash_history

history命令:用于查看命令历史中保存的命令

[root@localhost ~]# history

….

203  vim test1.sh

204  cat test1.sh

205  cat test1.sh|awk -F ':' '{print $3}'

206  cat test1.sh|awk -F ':' '{print $4}'

207  cat test1.sh|awk -F ':' '{print $7}'

208  pwd

209  cat .bash_history

210  history

目前命令历史中保存了210条命令,默认最多保存1000条历史命令;

有时使用history查看历史命令会看到打印出来的命令条数超过了HISTSIZE环境变量的值,那是因为这部分超出的命令被暂时保存于内存中;

-c参数:history命令后跟该参数则会将保存在内存中的历史命令全部清空,但不会删除.bash_history文件;

[root@localhost ~]# history -c

[root@localhost ~]# history

  1. history

用户敲完命令后,历史命令不会马上被存到.bash_history文件中,只会被存到内存中,只有当用户正常退出终端时,内存中的历史命令才会被保存到.bash_history文件中;

如果不希望保存历史命令的文件被破坏,可以设置:

[root@localhost ~]# chattr +a .bash_history

此时.bash_history文件只能追加内容,无法删除或修改,此时即使命令历史中的命令条数超过HISTSIZE定义的值,系统也无法删除多出的历史命令;

当用户没有正常退出终端时,敲过的命令无法正常保存,可能导致保存的历史命令有缺失(正常退出:输入exit、logout等,不正常退出:直接点叉关闭终端软件界面);

HISTSIZE:是一个环境变量,该变量的值决定了最多可以保存历史命令的条数

[root@localhost ~]# echo $HISTSIZE

1000

定义环境变量HISTSIZE:

[root@localhost ~]# vim /etc/profile

44

45 HOSTNAME=`/usr/bin/hostname 2>/dev/null`

46 HISTSIZE=2000 在文件中修改该参数即可

47 ot@localhost ~]# history –c

[root@localhost ~]# echo $HISTSIZE

1000 此时定义的变量并未生效

[root@localhost ~]# source /etc/profile 需要使用source命令重新执行文件或退出当前终端重新进入新的终端才会生效

[root@localhost ~]# echo $HISTSIZE

2000

HISTTIMEFORMAT:定义显示历史命令执行时间的格式

当前终端定义HISTTIMEFORMAT:

[root@localhost ~]# HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S"

[root@localhost ~]# echo $HISTTIMEFORMAT

%Y/%m/%d %H:%M:%S

[root@localhost ~]# history

1  2018/12/17 20:45:21history

2  2018/12/17 20:50:24vim /etc/profile

3  2018/12/17 20:53:48echo $HISTSIZE

4  2018/12/17 20:54:55source /etc/profile

重新打开一个新终端:

[root@localhost ~]# echo $HISTTIMEFORMAT

[root@localhost ~]#

[root@localhost ~]# history

1  cd /etc

2  ls

  1. ls |wc –l

新终端下没有HISTTIMEFORMAT这个环境变量,如果希望这个变量在新终端下也生效,可以编辑/etc/profile将该变量添加到环境变量HISTSIZE后面:

[root@localhost ~]# vim /etc/profile

46 HISTSIZE=2000

47 HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S"

[root@localhost ~]# source /etc/profile

[root@localhost ~]# echo $HISTTIMEFORMAT

%Y/%m/%d %H:%M:%S

[root@localhost ~]# history

1  2018/12/17 21:37:04cd /etc

2  2018/12/17 21:37:04ls

3  2018/12/17 21:37:04ls |wc -l

  1. 2018/12/17 21:7:04ls

!!:执行命令历史中的最后一条命令

[root@localhost ~]# ls

a  anaconda-ks.cfg  test  test1.sh  test.sh  vim

[root@localhost ~]# !!

ls

a  anaconda-ks.cfg  test  test1.sh  test.sh  vim

!n:n表示命令编号,会将历史命令中对应编号的命令执行一遍

[root@localhost ~]# history

257  2018/12/17 21:37:14echo $HISTTIMEFORMAT

258  2018/12/17 21:40:16history

259  2018/12/17 21:43:08echo $$HISTTIMEFORMAT

260  2018/12/17 21:47:21echo $HISTTIMEFORMAT

261  2018/12/17 21:47:31source /etc/profile

262  2018/12/17 21:47:33echo $HISTTIMEFORMAT

263  2018/12/17 21:48:02history

264  2018/12/17 21:55:17chattr +a .bash_history

265  2018/12/17 22:05:27ls

266  2018/12/17 22:05:51history

[root@localhost ~]# !257

echo $HISTTIMEFORMAT

%Y/%m/%d %H:%M:%S

!echo:在命令历史中从后向前查找以echo开头的命令

[root@localhost ~]# !echo

echo $HISTTIMEFORMAT

%Y/%m/%d %H:%M:%S

命令补全和别名

按tab键可以补全命令:

[root@localhost ~]# mktemp 以mkt开头的命令只有一个,按一下tab键即可自动补全

[root@localhost ~]# mkdi 以mkdi开头的命令有多个,按两下tab键显示可补全的命令

mkdict  mkdir

centos6中仅支持补全命令本身,centos7可以支持补全命令和参数,但centos7默认不支持补全参数,需要安装一个包然后重启系统:

[root@localhost ~]# yum install -y bash-completion

[root@localhost ~]# reboot

alias别名:为一些较长的或其他的命令定义别名,可以让命令被更快的执行

[root@localhost ~]# alias restartnet='systemctl restart network.service' 为命令定义别名

[root@localhost ~]# restartnet 用别名执行命令

[root@localhost profile.d]# unalias restartnet 取消别名

[root@localhost profile.d]# restartnet

-bash: restartnet: 未找到命令

[root@localhost ~]# alias 列出系统中所有的别名

命令别名的保存位置:

[root@localhost ~]# cat .bashrc 该文件保存了部分命令别名,自定义的命令别名会被放到当前用户家目录的.bashrc文件中

# .bashrc

# User specific aliases and functions

alias rm='rm -i'

alias cp='cp -i'

alias mv='mv -i'

[root@localhost /]# cd /etc/profile.d 其余的命令别名保存在该目录下的文件中

[root@localhost profile.d]# ls

256term.csh         colorgrep.csh  colorls.sh  less.csh  vim.sh

256term.sh          colorgrep.sh   lang.csh    less.sh   which2.csh

bash_completion.sh  colorls.csh    lang.sh     vim.csh   which2.sh

通配符

* 表示匹配0个或多个任意字符

[root@localhost ~]# ls

a  anaconda-ks.cfg  test  test1.sh  test.sh  vim

[root@localhost ~]# ls *.sh

test1.sh  test.sh

[root@localhost ~]# ls v*m

Vim

[root@localhost ~]# ls test*

test  test1.sh  test.sh

? 表示匹配一个任意字符

[root@localhost ~]# ls ?.txt

1.txt  a.txt

[root@localhost ~]# touch bb.txt

[root@localhost ~]# ls *.txt

1.txt  a.txt  bb.txt

[root@localhost ~]# ls ?.txt

1.txt  a.txt

[] 匹配方括号内的某个字符

[root@localhost ~]# ls [0-3].txt 匹配数字0-3中的一个

1.txt  2.txt

[root@localhost ~]# ls [0-9a-zA-Z].txt 匹配数字0-9或大写或小写字母中的a-z其中一个

1.txt  2.txt  a.txt

{} 匹配多个字符中的一个字符,字符间需要用逗号分割

[root@localhost ~]# ls {1,2,a}.txt 匹配单个字符1或2或a

1.txt  2.txt  a.txt

输入输出重定向

> 将前一个命令的输出的结果输出到后面的文件中

>> 将前一个命令输出的结果追加输出到后面的文件中

2> 将一个命令产生的错误信息输出到后面的文件中

2>> 将一个命令产生的错误信息追加到后面的文件中

重定向

[root@localhost ~]# ls >1.txt

[root@localhost ~]# cat 1.txt

12.txt

1.txt

2.txt

a

anaconda-ks.cfg

a.txt

bb.txt

test

test1.sh

test.sh

vim

追加重定向

[root@localhost ~]# ls >>1.txt

[root@localhost ~]# cat 1.txt

12.txt

1.txt

2.txt

a

anaconda-ks.cfg

a.txt

bb.txt

test

test1.sh

test.sh

vim

12.txt

1.txt

2.txt

a

anaconda-ks.cfg

a.txt

bb.txt

test

test1.sh

test.sh

vim

错误重定向

[root@localhost ~]# lsaaa 2>a.txt

[root@localhost ~]# cat a.txt

-bash: lsaaa: 未找到命令

错误追加重定向

[root@localhost ~]# lsaaa 2>>a.txt

[root@localhost ~]# cat a.txt

-bash: lsaaa: 未找到命令

-bash: lsaaa: 未找到命令

正确输出和错误输出同时重定向

[root@localhost ~]# ls 1.txt aaa.txt &>2.txt

[root@localhost ~]# cat 2.txt

ls: 无法访问aaa.txt: 没有那个文件或目录

1.txt

正确输出和错误输出同时追加重定向

[root@localhost ~]# ls 1.txt aaa.txt &>>2.txt

[root@localhost ~]# cat 2.txt

ls: 无法访问aaa.txt: 没有那个文件或目录

1.txt

ls: 无法访问aaa.txt: 没有那个文件或目录

1.txt

正确输出和错误输出分别重定向到不同文件

[root@localhost ~]# ls 1.txt aaa.txt >2.txt 2>a.txt

[root@localhost ~]# cat 2.txt

1.txt

[root@localhost ~]# cat a.txt

ls: 无法访问aaa.txt: 没有那个文件或目录

< 输入重定向,通常会将一个文件中的内容输入到一条命令中

[root@localhost ~]# wc -l<1.txt

22

[root@localhost ~]# 2.txt<1.txt 左边必须为一条命令,不支持文件到文件

-bash: 2.txt: 未找到命令

shell训练营日常打卡DAY1相关推荐

  1. 句句真研—每日长难句打卡Day1

    句句真研-每日长难句打卡Day1

  2. ireport怎么套打_柳州男孩小指被螺母套牢,还有熊娃被卡进这地方!消防员笑抽,网友:日常打“卡”...

    都说只有爸妈想不到, 没有熊孩子"卡"不到的地方! 这话说得太精辟了, 要知道熊孩子们打起"卡"来 那真的是连自己都怕! 8月20日下午,一名家长带着儿子急匆匆 ...

  3. python+大数据学习打卡day1

    [大数据从0-1打卡-day1] 1.简单了解一些关于大数据的概念 数据:数据就是对客观事件进行记录并可以鉴别的符号.他不仅仅是指数字,还可以是有一定意义的字母.文字.符号.语音.文字.图画.视频或者 ...

  4. 何凯文每日一句打卡||DAY1~DAY3

    何凯文每日一句打卡||DAY1~DAY3 01长难句 In an open meeting with congressional Democrats and Republicans, Trump em ...

  5. 安卓从sd引导linux,从android中的adb shell手动挂载SD卡

    我不敢相信没有人在2个月内回复你?哇-多么懈怠! 好吧无论如何我想我应该填写一些信息并提出一些问题. 1).您是否拥有root权限,或者是否从发布映像/固件中获取了系统vold?像Linux Supe ...

  6. android sd卡挂载命令,android - 从android中的adb shell手动挂载SD卡 - 堆栈内存溢出

    我有一个Android 4.1手机(联想820). 经过一些旨在对内部SD ram进行分区的更改(更改后,手机将不再安装外部 SD卡.我很擅长Linux,但我从未见过Android shell. 我很 ...

  7. SHELL训练营--day5__shell脚本(1)

    shell脚本意义 shell是一种脚本语言,具备计算机语言的基本特点:逻辑判断.循环.自定义函数等. shell脚本 主要使用 linux系统的命令,来实现特定目的. 可用于自动化运维,提长运维效率 ...

  8. shell训练营Day18

    练习31 提示用户输入网卡的名字,然后我们用脚本输出网卡的ip,需要考虑下面问题: 输入的字符不符合网卡名字规范,怎么应对. 名字符合规范,但是根本就没有这个网卡又怎么应对. #!/bin/bash ...

  9. 日常打卡:平淡无奇的一天

    大家好,我是『K同学啊』! 我试着将自己每天的工作日常分享出来,希望可以激励到正处于困惑.迷茫状态中的你,也希望你可以加入群聊,分享自己fighting的日常

  10. shell训练营Day31

    练习96 需求背景: 领导要求小明备份数据库服务器里面的100个库(数据量在几十到几百G),需要以最快的时间完成(5小时内),并且不能影响服务器性能. #!/bin/bash ##假设100个库的库名 ...

最新文章

  1. python用print函数打印皮卡丘_Python学习之print()函数
  2. c语言字母表关键字,读书笔记-C语言关键字
  3. python画数组曲线_python – 在matplotlib中如何填充由两组不同数组定义的两条曲线?...
  4. python培训班排行榜-西安排名前十的python开发培训学校排行榜
  5. Java_JDBC_MySql
  6. SpringBoot2.0 以上 WebMvcConfigurerAdapter 方法过时 解决办法
  7. 2019年春第四次课程设计实验报告
  8. 如何把proe的工作目录怎么设置在服务器上的唯一方法
  9. Android 通过WebService进行网络编程,使用工具类轻松实现
  10. 使用loadrunner录制winsock协议的程序(原创)
  11. 新任项目经理的五项必修课 (转)
  12. 再次联手法国力克,雅戈尔打造中国服装“智造”典范
  13. win10配置ffmpeg环境
  14. 解决swiper动态改变数据后分页混乱问题
  15. 展讯通信:文章紫光收购后展讯困难重重”失实
  16. c语言课程设计(图书馆管理系统)
  17. iPhone14pro紫色“掉漆”/ 苹果英伟达拒绝台积电涨价/ DALL·E取消排队...今日更多新鲜事在此...
  18. PostgreSQL的upsert功能(on conflict do)的用法
  19. Oracle运维手册
  20. 2022测试岗各大厂面试真题汇总(附带答案解析)

热门文章

  1. bootstrap黑色酷炫IT行业个人博客模板
  2. 35岁后你的职场危机,你该何去何从
  3. 远程桌面3389加固
  4. 2021-03-19Windows取消禁止驱动签名的方法
  5. 智慧社区中的物联网产品应用
  6. Arm 虚拟硬件与新解决方案或将颠覆物联网产品研发
  7. 使用MNE工具包处理脑电数据(1)基础处理总览(EEG、MEG、ERP研究)
  8. 史上最全各种简历模板,自荐信模板和面试技巧
  9. MySQL三个表的连接查询
  10. 计算机一级win7win10,一招win7免费升级成win10系统的简单方法(图文)