linux的shell基础介绍

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux的shell基础介绍相关的知识,希望对你有一定的参考价值。

8.1 shell介绍:之间的交互


1、shell是一个命令解释器,提供用户和机器之间的交互

2、 支持特定语法,比如逻辑判断、循环

3、每个用户都可以有自己特定的shell

4、 CentOS7默认shell为bash(Bourne Agin Shell)

5、 还有zsh、ksh等


查看系统是否有安装zsh、ksh,示例如下:

[[email protected] ~]# yum list |grep zsh
zsh.x86_64                              5.0.2-25.el7                   installed
autojump-zsh.noarch                     22.3.0-3.el7                   epel    
zsh.x86_64                              5.0.2-28.el7                   base    
zsh-html.x86_64                         5.0.2-28.el7                   base    
zsh-lovers.noarch                       0.9.0-1.el7                    epel    
[[email protected] ~]# yum list |grep ksh
ksh.x86_64                              20120801-34.el7                base    
mksh.x86_64                             46-5.el7                       base    
python-XStatic-Rickshaw.noarch          1.5.0.0-4.el7                  epel    
python-moksha-common.noarch             1.2.3-2.el7                    epel    
python-moksha-hub.noarch                1.5.3-2.el7                    epel    
python-moksha-wsgi.noarch               1.2.2-2.el7                    epel


8.2 命令历史:


1、history命令             //查看之前使用的命令。

2、.bash_history       //存储使用过的命令文件,在root的家目录下

3、最大1000条           //存储使用命令的最大数

4、变量HISTSIZE

5、/etc/profile中修改

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

7、永久保存 chattr +a ~/.bash_history

8、!!                        //执行上一条命令

9、!n                     //n表示数字   比如:!176   这样它就会执行命令历史里的176这条命令

10、!echo            //echo表示你需要找命令历史里从下往上找以word开头的第一条命令执行它。


示例如下:

[[email protected] ~]# ls /root/.bash_history
/root/.bash_history
[[email protected] ~]# cat /root/.bash_history
[[email protected] ~]# history
    1  ls -l /tmp/
    2  ls -l
......
  585  ls /root/.bash_history
  586  cat /root/.bash_history
  587  history
[[email protected] ~]# echo $HISTSIZE
1000
[[email protected] ~]# history -c         //清空当前命令历史记录
[[email protected] ~]# history
    1  history
[[email protected] ~]# cat .bash_history    //查看是否清空了配置文件命令,没有,只能清空当前命令历史的。
ls -l /tmp/
ls -l
which rm

注意:当前使用的命令并不会直接保存到.bash_history配置文件里面去,只有当你退出终端的时候才会保存到配置文件里。


更改命令历史变量数值:

[[email protected] ~]# vi /etc/profile    //更改存储命令变量,进入这个文件找到以下图示位置更改

技术分享

[[email protected] ~]# echo $HISTSIZE           //保存退出后查看变更并没有生效
1000
[[email protected] ~]# source /etc/profile         //更改变量扣执行这条命令
[[email protected] ~]# echo $HISTSIZE       //完成更改
5000
[[email protected] ~]# history
    1  history
    2  cat .bash_history
    3  vi /etc/profile
    4  echo $HISTSIZE
    5  source /etc/profile
    6  echo $HISTSIZE
    7  history

更改命令历史格式:

[[email protected] ~]# HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S "
[[email protected] ~]# echo $HISTTIMEFORMAT
%Y/%m/%d %H:%M:%S
[[email protected] ~]# history
    1  2017/11/14 16:45:35 history
    2  2017/11/14 16:46:43 cat .bash_history
    3  2017/11/14 17:59:55 vi /etc/profile
    4  2017/11/14 18:04:45 echo $HISTSIZE
    5  2017/11/14 18:05:12 source /etc/profile
    6  2017/11/14 18:05:14 echo $HISTSIZE
    7  2017/11/14 18:06:30 history
    8  2017/11/14 18:07:10 HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S "
    9  2017/11/14 18:07:34 echo $HISTTIMEFORMAT
   10  2017/11/14 18:07:57 history
[[email protected] ~]# vim /etc/profile  //如果想要保存如上history效果,就进入配置文件加上如下这条变量命令,保存退出。

技术分享

[[email protected] ~]# source /etc/profile 
[[email protected] ~]# echo $HISTTIMEFORMAT    //这样哪怕再开一个终端这也保存了。
%Y/%m/%d %H:%M:%S

为了让命令历史永久保存,不想让其它人去破坏它,可以给它加一个特殊的权限。

[[email protected] ~]# chattr +a ~/.bash_history   //运行这条命令就可以。

注意:如果执行了这条命令后,你并没有正常退出终端,就会导致保存的命令不全。


8.3 命令补全和别名:


1、tab键,敲一下,敲两下

2、参数补全,安装bash-completion

3、alias别名给命令重新起个名字

4、 各用户都有自己配置别名的文件 ~/.bashrc    //存放别名的路径地址

5、ls /etc/profile.d/                              //存放别名的路径地址

6、 自定义的alias放到~/.bashrc         //自定义后别名存放的地址


示例如下:

[[email protected] ~]# systemctl restart network  //使用tab补全这条命令参数
[[email protected] ~]# yum install -y bash-completion //安装这个库
[[email protected] ~]# reboot                       //重启系统
[[email protected] ~]# alias restartnet=‘systemctl restart network.service‘ //alias别名给命令重新命名
[[email protected] ~]# restartnet                  //设置好的别名命令生效
[[email protected] ~]# 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 restartnet=‘systemctl restart network.service‘
alias rm=‘rm -i‘
alias which=‘alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde‘
[[email protected] ~]# unalias restartnet    //取消设置好的别名
[[email protected] ~]# restartnet             //别名命令失效
-bash: restartnet: 未找到命令


8.4 通配符:


1、ls *.txt              //表示查找.txt通配文件

2、ls ?.txt             //表示一个任意的字符

3、ls [0-9].txt        //列出满足条件范围内的文件

4、ls {1,2}.txt        //用花括号列出你需要的文件


示例如下:

[[email protected] ~]# ls
111  1_heard.txt.bak  1.txt.bak  2.txt  456     aminglinux      
123  1_sorft.txt.bak  234        3.txt  aming2  anaconda-ks.cfg
[[email protected] ~]# ls *.txt
2.txt  3.txt
[[email protected] ~]# ls *txt
2.txt  3.txt
[[email protected] ~]# ls *txt*
1_heard.txt.bak  1_sorft.txt.bak  1.txt.bak  2.txt  3.txt
[[email protected] ~]# ls 1*
1_heard.txt.bak  1_sorft.txt.bak  1.txt.bak

111:

123:
[[email protected] ~]# ls ?.txt
2.txt  3.txt
[[email protected] ~]# touch 1.txt
[[email protected] ~]# ls ?.txt
1.txt  2.txt  3.txt
[[email protected] ~]# touch a.txt
[[email protected] ~]# touch bb.txt
[[email protected] ~]# ls ?.txt
1.txt  2.txt  3.txt  a.txt
[[email protected] ~]# ls [0-3].txt
1.txt  2.txt  3.txt
[[email protected] ~]# ls [12].txt
1.txt  2.txt
[[email protected] ~]# ls [23].txt
2.txt  3.txt
[[email protected] ~]# ls {1,2}.txt
1.txt  2.txt


8.5 输入输出重定向


1、cat 1.txt >2.txt        //>它会把命令产生的正确信息输出到指定文件里去,删除之前文件内容重写。

2、cat 1.txt >> 2.txt     //>>把前面命令输出内容重定向追加到后面命令里去,不删除旧的。

3、ls aaa.txt 2> err      //它会把命令产生的错误信息输出到指定文件里去

4、ls aaa.txt 2>> err   //  错误信息输出追加重定向                                                  

5、wc -l < 1.txt           //查看一个文件的行数


示例如下:

[[email protected] ~]# lsaaa         //输出一条错误信息
-bash: lsaaa: 未找到命令
[[email protected] ~]# lsaaa 2> a.txt   //保存一条信息到指定文件里去
[[email protected] ~]# cat a.txt            //查看结果
-bash: lsaaa: 未找到命令
[[email protected] ~]# lsaaa 2>> a.txt    //追加一次错误信息到文件
[[email protected] ~]# cat a.txt               //查看结果
-bash: lsaaa: 未找到命令
-bash: lsaaa: 未找到命令
[[email protected] ~]# ls [12].txt aaa.txt &> a.txt     //&>结合正确错误信息重定向到一个文件里去
[[email protected] ~]# cat a.txt                           //查看结果
ls: 无法访问aaa.txt: 没有那个文件或目录
1.txt
2.txt
[[email protected] ~]# ls [12].txt aaa.txt &>> a.txt     //追加正确错误信息重定向
[[email protected] ~]# cat a.txt
ls: 无法访问aaa.txt: 没有那个文件或目录
1.txt
2.txt
ls: 无法访问aaa.txt: 没有那个文件或目录
1.txt
2.txt
[[email protected] ~]# ls [12].txt aaa.txt > 1.txt  2>a.txt    //既有正确也有错误的输出,区分开来保存在指定的文件里。
[[email protected] ~]# cat 1.txt
1.txt
2.txt
[[email protected] ~]# cat a.txt
ls: 无法访问aaa.txt: 没有那个文件或目录


本文出自 “Gary博客” 博客,请务必保留此出处http://taoxie.blog.51cto.com/10245493/1982118

以上是关于linux的shell基础介绍的主要内容,如果未能解决你的问题,请参考以下文章

linux的shell基础介绍

逆向及Bof基础实践

Linux系统——shell脚本编程基础介绍

什么是Shell?Shell脚本基础知识详细介绍

20155201 李卓雯 《网络对抗技术》实验一 逆向及Bof基础

20155307刘浩《网络对抗》逆向及Bof基础