linux shell基础知识

什么是shell

  • shell是一个命令解释器,提供用户和机器之间的交互
  • 支持特定语法,比如逻辑判断、循环
  • 每个用户都可以有自己特定的shell
  • CentOS7默认shell为bash(Bourne Agin Shell)
  • 还有zsh、ksh等

1.10 命令历史

怎么查看历史命令?如下:

# cat /root/.bash_history

在自己的家目录下,存放的历史命令。

1.11 命令能存多少条呢?可以查看历史命令

# history 

这是之前存放的命令,默认最大能存1000条,怎么查看?如下:

# echo $HISTSIZE
1000

注:当你敲的命令只是存在内存当中,退出终端才保存到自己的家目录下。清空内存中的历史命令。如下:

# history -c

1.12 更改历史命令最大保存1000,编辑配置文件:

# vim /etc/profile
找到
HISTSIZE=1000
更改为你想要的最大历史保存数量
HISTSIZE=5000

这样更改不是马上生效,是要退出终端从新连接才生效。如何做不退出终端生效?如下:

# source /etc/profile

不相信可以echo查看下

# echo $HISTSIZE
5000

1.13 把对应的命令用时间记录下来,怎样才能达到效果?如下:

vim /etc/profile
找到
HISTSIZE=5000
在下面一行添加如下:
HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S "

马上生效

# source /etc/profile
# history 
    1  2019/09/22 14:35:05 vim /etc/profile
    2  2019/09/22 14:37:12 source /etc/profile

这时候就定义格式。

1.14 怎么永久保存不让别人删除

# chattr +a ~/.bash_history
[root@linux1 ~]# rm -f .bash_history
rm: 无法删除".bash_history": 不允许的操作

1.15 怎么去执行历史命令?

# !!
history 

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

!n(n是数字)执行n的命令

# !10
chattr +a ~/.bash_history

!vim是指执行最后一次用到vim的命令

# !vim
vim /etc/profile

2.10 命令补全和别名

  • tab键,敲一下自动补全命令,敲两下查看文件
  • 参数补全,安装bash-completion
  • alias别名给命令重新起个名字
  • 各用户都有自己配置别名的文件 ~/.bashrc
  • ls /etc/profile.d/
  • 自定义的alias放到~/.bashrc

2.11  参数补全,安装bash-completion

# yum install -y bash-completion

需要重启机器生效。

2.12 alias别名给命令重新起个名字,假如输入一个命令很长,可以做个别名偷懒。如下:

# alias aaa=‘vim /etc/sysconfig/network-scripts/ifcfg-ens36‘

这时候输入aaa就能编辑网卡配置文件,查看全部别名。

# alias

各用户都有自己配置别名的文件 ~/.bashrc,可以cat查看下:

# cat .bashrc 

还有在/etc/profile.d/文件里面,自定义别名放到~/.bashrc下。如何取消别名:

# unalias aaa

3.10 通配符

把文件txt的文件全匹配出来

# ls *.txt
1.txt  2.txt  3.txt

3.11 ?号是匹配任意一个字符

# ls ?.txt
1.txt  2.txt  3.txt  a.txt

3.12 []方括号写的是范围,你要搜索的范围

# ls [0-3].txt
1.txt  2.txt  3.txt

# ls [13].txt
1.txt  3.txt

# ls [0-9a-z].txt
1.txt  2.txt  3.txt  a.txt

 

4.10 输出重定向

>一个大于号把前面查看的内容的输出输入到后面的文件,会删除后面文件里面的内容

# cat 1.txt > 2.txt

>>两个大于号是把前面输出的内容追加到后面的文件。不会删除后面文件里面的内容

# cat 1.txt >> 2.txt

4.11 >正确的输出 >>追加 2>错误的输入 2>>追加错误的 如何把正确输出和错误输出输入到一个文件里面去 &结合正确和错误的:

# ls [12].txt aaaa.txt &> a.txt
# cat a.txt
ls: 无法访问aaaa.txt: 没有那个文件或目录
1.txt
2.txt

把正确的输出和错误的输出放到a.txt里还可以追加

# ls [12].txt aaaa.txt &>> a.txt

可以把正确的输出保存到1.txt 错误的保存到a.txt

# ls [12].txt aaaa.txt > 1.txt 2> a.txt

# cat 1.txt
1.txt
2.txt

# cat a.txt
ls: 无法访问aaaa.txt: 没有那个文件或目录

5.10管道符和作业控制

管道符把一个输出的结果传给后面的命令

# cat 1.txt | wc -l

5.11 作业控制,当你在vi或者vim编辑一个文件时,想看看磁盘负载一般模式ctrl+z退出查看

# vim 1.txt

[1]+  已停止               vim 1.txt

它还在编辑配置文件,回到配置文件按fg命令即可

# fg

jobs可以把停止编辑的文件列出来

# jobs

也可以调到后台去执行

# bg 1

sleep暂停,暂停5秒

# sleep 5

 

6.10 shell变量

获取系统的变量,系统的变量都是大写开头

# env

还有另外一种查看变量,也可以查看用户自定义的变量

# set

可以自定义变量

# a=111

# echo $a
111

# set |grep 111
_=111
a=111

变量名规则:字母、数字下划线,首位不能为数字

变量值有特殊符号时需要用单引号括起来

# a="a$bc"
# echo $a
a

# a=‘a$b c‘
# echo $a
a$b c

为什么要单引号,上图可以清晰看出。双引号达不到想要的效果。

linux shell基础知识

上图要取中间值或者要加上””双引号引起来

linux shell基础知识

上一篇:linux shell


下一篇:LeetCode 538. 把二叉搜索树转换为累加树