Chinaunix首页 | 论坛 | 博客
  • 博客访问: 146769
  • 博文数量: 70
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 770
  • 用 户 组: 普通用户
  • 注册时间: 2017-11-04 11:19
文章分类

全部博文(70)

文章存档

2018年(69)

2016年(1)

我的朋友

分类: LINUX

2018-06-27 23:44:07

8.1 shell介绍

我们打开一个终端,输入用户名密码登陆之后,看到的等待输入提示符,就是一个shell
而zsh和ksh是类似的但不一样的环境,而可以通过yum进行安装的。


8.2 命令历史
[root@localhost ~]# ls /root/.bash_history        //执行过的历史命令,存储在这个文件当中
/root/.bash_history

[root@localhost ~]# ls /root/.bash_history
[root@localhost ~]# cat !$    //调用上一条命令的最后一个参数
这个文件最大可以存1000条命令,是由环境变量  “$HISTSIZE” 系统设置的

[root@localhost ~]# history -c       
//清除当前内存中的历史命令记录。不能清空文件(.bash_history)中记录的历史命令
只有退出当前终端,内存中的命令记录才会被写到文件中

[root@localhost ~]# vim /etc/profile
......
HISTSIZE=1000        //这个变量是在这个文件中被定义的。可以修改。
......
如果修改过这个参数,想要生效,要么退出终端重新登陆,或者执行下面内容:
[root@localhost ~]# source /etc/profile

记录命令的执行时间:
[root@localhost ~]# HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S"   
//直接执行的配置,仅在当前环境生效
[root@localhost ~]# history | head -2
    1  2018/06/27 19:17:24ip ad
    2  2018/06/27 19:17:24_lft forever preferred_lft forever

如果想要改内容永久生效,需要修改配置文件:/etc/profile
[root@localhost ~]# vim /etc/profile
HISTSIZE=1000
HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S"
同样的,要生效,需要source一下,或者退出终端,重新登陆。

想要命令历史永久保存,不想别人删除:
[root@localhost ~]# chattr +a ~/.bash_history        //“a”只能追加不能删除

如果终端没有正常退出,那么历史命令会保存的不完整

“!!”:执行上一条命令
“!n”:eg:!761。历史命令的第761条执行
“!echo”:历史命令中最后一个 echo开头的命令,也是最离当前最近的echo开头的命令


8.3 命令补全和别名
快捷键:tab。帮助补全命令。补全或者进行提示
补全参数,需要安装软件包:bash-completion


alias别名
设置别名:
[root@localhost ~]# alias myls="ls -lah"    //临时生效

[root@localhost ~]# 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 myls='ls -lah'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

想要别名永久生效:
[root@localhost ~]# vim /root/.bashrc
......
alias myls="ls -lah"        //添加到末尾

初次之外还有文件可以定义:
/etc/profile.d/、/etc/bashrc

取消别名:
[root@localhost ~]# unalias myls


8.4 通配符


[root@localhost ~]# ls
1                2                a.txt      CentOS7-Base-163.repo
1_heard.txt      aaa              a.txt.bz2  two
1_heard.txt.bak  anaconda-ks.cfg  a.txt.gz
[root@localhost ~]# ls *.txt
1_heard.txt  a.txt

[root@localhost ~]# ls ?.txt
a.txt

[root@localhost ~]# ls [a-c].txt        //指定范围
a.txt
[root@localhost ~]# ls [0-3]        //指定范围,方括号里面的内容只取一个
1:
abc  a.txt  a.txt.bak
2:
a.txt  a.txt.bak

[root@localhost ~]# ls {a,b}.txt
ls: 无法访问b.txt: 没有那个文件或目录
a.txt
[root@localhost ~]# touch b.txt
[root@localhost ~]# ls {a,b}.txt            //查看a.txt或b.txt
a.txt  b.txt


8.5 输入输出重定向
[root@localhost ~]# cat a.txt
aaaaaaa
[root@localhost ~]# cat b.txt 
bbbbb
[root@localhost ~]# cat a.txt > b.txt     //覆盖了
[root@localhost ~]# cat b.txt 
aaaaaaa

[root@localhost ~]# cat a.txt
aaaaaaa
[root@localhost ~]# cat b.txt 
bbbbb
[root@localhost ~]# cat a.txt >> b.txt         //在文件末尾追加
[root@localhost ~]# cat b.txt 
bbbbb
aaaaaaa

[root@localhost ~]# ls aaaa.txt                    //正常查看,返回没有信息
ls: 无法访问aaaa.txt: 没有那个文件或目录
[root@localhost ~]# ls aaaa.txt 2> err        //将错误信息指定到err文件,在当前目录中被创建
//并且不影响正常命令结果
[root@localhost ~]# ls aaaa.txt 2> err        //覆盖写入
还有追加重定向:
[root@localhost ~]# ls aaaa.txt 2>> err
[root@localhost ~]# echo $?        //上面命令执行是失败的
2
[root@localhost ~]# ls a.txt 2> err            //如果文件存在,那么正常返回
a.txt

如果想要将所有返回信息(不论对错)都存到某个文件中:“&>”
[root@localhost ~]# ls a.txt &> err
[root@localhost ~]# cat err 
a.txt
[root@localhost ~]# ls aaaa.txt &> err
[root@localhost ~]# cat err 
ls: 无法访问aaaa.txt: 没有那个文件或目录
[root@localhost ~]# ls a.txt &>> err
[root@localhost ~]# cat err 
ls: 无法访问aaaa.txt: 没有那个文件或目录
a.txt

那么如何将正确返回信息跟错误返回信息分开呢:
[root@localhost ~]# ls aaaa.txt a.txt > y.txt 2>n.txt
[root@localhost ~]# cat y.txt 
a.txt
[root@localhost ~]# cat n.txt 
ls: 无法访问aaaa.txt: 没有那个文件或目录


输入重定向:用的比较少
[root@localhost ~]# wc -l < 1_heard.txt        //将这个文件给前面的命令
260

阅读(1163) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~