shell 基础与命令补充
一、 shell介绍
1. Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。
2. 实际上Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核。
3. Shell有自己的编程语言用于对命令的编辑,它允许用户编写由shell命令组成的程序。
4. Shell编程语言具有普通编程语言的很多特点,比如它也有循环结构和分支控制结构等,用这种编程语言编写的Shell程序与其他应用程序具有同样的效果。
5. CentOS的shell默认的shell为bash,还有其它类型的shell,比如zsh、ksh、等等
二、命令历史
1. 命令历史的存放地址,这个文件最多可以存放1000条
/root/.bash_history
2.环境变量HISTSIZE ,可以查看能够存放命令的条数
[root@localhost ~]# echo $HISTSIZE
1000
3. histtory -c 清空当前内存中的命令历史,不能清空配置文件里的
当退出终端的时候,命令才会保存到配置文件里,
4. 修改环境变量HISTSIZE的值, 更改命令保存的条数
vim /etc/profile #打开配置文件
HISTSIZE=1000 #在配置文件里面找到这一行,将数值1000更改为你想要修改的值
source /etc/profile # 当更改profile文件后,需要source下或者重启终端才会生效
5. HISTTIMEFORMAT 自定义History输出格式,可以加上时间
1. [root@localhost ~]# HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S " #设置格式
2. [root@localhost ~]# echo $HISTTIMEFORMAT
%Y/%m/%d %H:%M:%S
3. [root@localhost ~]# history #可以看到history已经设置格式为年/月/日/.......,加上了时间信息
1 2018/01/10 06:36:43 vim /etc/profile
2 2018/01/10 06:40:54 HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S "
3 2018/01/10 06:41:05 history
如果想要这个环境变量永久生效,那么需要添加到配置文件里
vim /etc/profile #编辑配置文件
HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S " #将这段添加到配置文件,和 HISTSIZE=1000放在一起
source /etc/profile #编辑完成后重启配置文件生效
6. 给命令历史文件加上a权限,那么只能追加,不能删除,这样可以永久保存命令
但是如果不正常退出终端,那么命令历史不会正常保存
chattr +a /root/.bash_history
7. !! 表示命令历史里最后一条命令
!n n表示数字,输入后可以在运行历史记录里相对应id号的命令
!echo 运行命令历史echo开头的最近的一条命令
三、命令补全和别名
1.当输入命令的时候按Table可以自动补全命令或参数
yum install -y bash-completion #安装命令补全的包,安装完成后需要重启系统
2. alias 列出系统所有的别名,包括自定义的
[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 rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-ti
3. alias 存放的地址
.bashrc #用户的家目录文件下面存放了几条
[root@localhost ~]# cd /etc/profile.d
[root@localhost profile.d]# ls #在 /etc/profile.d这个目录下也放了几个配置文件,这些配置文件里面也存放了别名
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
4. 自定义别名和取消别名 alias 与 unalias
[root@localhost profile.d]# alias lspro='ls -l /etc/profile.d' #给 'ls -l /etc/profile.d'这条命令设置别名 lspro
[root@localhost profile.d]# lspro #可以直接使用lspro
总用量 60
-rw-r--r--. 1 root root 771 8月 4 07:57 256term.csh
-rw-r--r--. 1 root root 841 8月 4 07:57 256term.sh
-rw-r--r--. 1 root root 660 6月 10 2014 bash_completion.sh
-rw-r--r--. 1 root root 196 3月 25 2017 colorgrep.csh
[root@localhost profile.d]# unalias lspro #使用unalias取消自定义别名
[root@localhost profile.d]# lspro #再使用的时候提示未找到命令
-bash: lspro: 未找到命令
四、通配符
1. * 通配符,可以代表任何字,
[root@localhost ~]# ls *.txt #列出所有以”.txt“结尾的文件或目录
11_hard.txt 11.txt 555.txt
[root@localhost ~]# ls 1* #列出所有的以"1"开头的文件,不管是目录还是文件都会列出来
11_hard.txt 11.txt
2. ? 表示一个任意的字符
[root@localhost ~]# ls ?.txt #”?“表示任意的一个字符,所以只列出一个字符开头的文件
2.txt c.txt
3. [0-9] [a-z] 可以写数字或字母,表示0到9或者a-z任意一个
{1,2,3} {a,b,c}作用和[]类似,不过中间要有逗号分隔
[root@localhost ~]# ls [0-3].txt #列出0到3开头的文件
1.txt 2.txt 3.txt
[root@localhost ~]# ls [123].txt #列出1、2、3开头的文件
1.txt 2.txt 3.txt
[root@localhost ~]# ls [13].txt #列出1和3
1.txt 3.txt
[root@localhost ~]# ls [23].txt #列出2和3
2.txt 3.txt
五、输入输出重定向
1. > 重定向,将一个命令的结果输出,原文件会删除
>> 追加重定向,原来的文件不会删除
2. 2> 错误重定向,将错误的信息输出
2>> 错误追加重定向,将错误的信息输出
[root@localhost ~]# fgdddd 2> xx.txt 运行一个错误的命令,将错误的信息重定向到xx.txt文件里面去
[root@localhost ~]# cat xx.txt
-bash: fgdddd: 未找到命令
3. &> 将错误和正确的信息都输出,重定向
&>> 将错误和正确的信息都输出,追加重定向
[root@localhost ~]# ls [123].txt sss.txt &>xx.txt #ls 1、2、3.txt以及sss.txt,将错误和正确的结果都重定向到xx.txt
[root@localhost ~]# cat xx.txt
ls: 无法访问sss.txt: 没有那个文件或目录
1.txt
2.txt
3.txt
4. 将错误和正确的信息分别写在不同文件里
[root@localhost ~]# ls [123].txt sss.txt > bb.txt 2>cc.txt #将正确的信息写在bb.txt 错误的信息写在cc.txt
[root@localhost ~]# cat bb.txt
1.txt
2.txt
3.txt
[root@localhost ~]# cat cc.txt
ls: 无法访问sss.txt: 没有那个文件或目录
5. < 输入重定向
[root@localhost ~]# wc -l <1.txt