目录
Shell概述
Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。Shell还是一个功能相当强大的编程语言,易编写,易调试,灵活性较强。Shell是解释执行的脚本语言,在Shell中可以直接调用Linux系统命令。
Linux支持的Shell: /etc/shells
Shell脚本的执行方式
echo输出命令
[root@localhost ~]# echo [选项] [输出内容]
选项:-e: 支持反斜线控制的字符转换
[root@localhost ~]# echo -e "ab\bc" #删除左侧字符
[root@localhost ~]# echo -e "a\tb\tc\nd\te\tf" #制表符与换行符
历史命令 history
选项:
-c: 清空历史命令
-w: 把缓存中的历史命令写入历史命令保存文件
默认保存在家目录下的 ./bash_history下,root用户就是保存在 ~/.bash_history
先敲三个命令:ls、pwd、whoami,然后用history命令查看,拉到最下面:
打开.bash_history 这个文件,却发现没有保存刚才敲下的命令。原因是需要正常登录退出后才会写入。使用 history -w 可以直接写入。然后再打开这个文件查看就有了。
使用 history -c 可以清空历史命令。一般情况下不建议清空。
历史命令默认会保存1000条,可以在环境变量配置文件/etc/profile中进行修改
打开这个文件找到HISTSIZE:
这个数值可以重新设置,设置完成后需要重新登录才能生效。
历史命令的调用:
使用上、下箭头调用以前的历史命令(这个最常用)
使用“!n”重复执行第n条历史命令
使用“!!”重复执行上一条命令
使用“!字串”重复执行最后一条以该字串开头的命令
命令与文件补全:在输入命令或文件时,按“Tab”键就会自动进行补全。
命令别名 alias
[root@localhost ~]# alias 别名='原命令' #设定命令别名,这样设置只会临时生效。
[root@localhost ~]# alias #查询命令别名
[root@localhost ~]# vi /root/.bashrc,让别名永久生效
[root@localhost ~]# unalias 别名, 删除别名
命令执行时顺序
1 第一顺位执行用绝对路径或相对路径执行的命令。
2 第二顺位执行别名。
3 第三顺位执行Bash的内部命令。
4 第四顺位执行按照$PATH环境变量定义的目录查找顺序找到的第一个命令。
Bash常用快捷键
输入重定向 和 输出重定向
1、标准输入输出
2、输出重定向
例如:ls > log.txt,将ls输出的结果保存在log.txt中;pwd >> log.txt,将pwd输出的结果追加保存在log.txt中。
只要有输出的命令,都可以进行输出重定向。例如 ls 命令。
再如,常用的date 获取当前时间,也可以保存成文件(此处使用追加的形式 >> ):
再打开abc这个文件,就能看到最后面写入了当前时间。
错误输出重定向:例如敲下lst 这个不存在的命令,并追加写入abc 文件:
会发现,并没有写入成功。原因是错误命令写入需要加个2,即 lst 2>> abc
注意:这里的2和>> 之间不能有空格。
以上的用法意义不大。因为如果可以判断敲下的是个错误命令,就不用把它保存了。看下面:
格式1举例:pwd >> bcd.txt 2>&1
格式2举例:date &>> cde.txt (这个更简单一点,推荐用这种)
现在演示将正确命令和错误命令分别存储的办法:pwd >> success.txt 2>>error.txt
同样的,注意:2和>> 不能有空格。
wc命令
[root@localhost ~]# wc [选项] [文件名]
选项:
-c 统计字节数
-w 统计单词数
-l 统计行数
上面的案例表示:输入了4行,5个单词(有空格就是单词),25个字符(回车符也算是字符)
* 命令<文件 把文件作为命令的输入
上面表示:anaconda-ks.cfg 这个文件共有 65行,135个单词,1386个字符。
如果使用了选项 -c / -w / -l ,将只统计对应的数据:
多命令顺序执行与管道符
多命令顺序执行
例子:[root@localhost ~]# ls ; date ; cd /user ; pwd
① 分号相隔的多个命令会顺序执行,且彼此之间没有逻辑联系。
上面三个命令中,第二个命令是错的,但是依然不影响第三个命令的执行。
扩展:使用dd复制文件或磁盘:dd if=输入文件 of=输出文件 bs=字节数 count=个数
选项:
if=输入文件 指定源文件或源设备
of=输出文件 指定目标文件或目标设备
bs=字节数 指定一次输入/输出多少字节,即把这些字节看做一个数据块
count=个数 指定输入/输出多少个数据块
例子:前后写入date命令,中间写入执行复制文件的命令。这样就可以知道复制这样一个文件用了多长时间。
[root@localhost ~]# date ;dd if=/dev/zero of=/root/testfile bs=1k count=100000 ;date
100000kb 就是 将近100MB,上面可以看出98M与此相近。
② && 符号相隔的多个命令会进行逻辑与执行,某个命令出错了,其后的命令就不会再执行。
[root@localhost ~]# ls anaconda-ks.cfg && echo yes
③ || 符号相隔的多个命令会进行逻辑或执行,某个命令出错了,其后的命令才会正确执行;某个命令执行正确了,其后的命令就不会执行。
[root@localhost ~]# ls /root/test || echo "no
④ 判断一条命令是否正确: 命令 && echo yes || echo no
原理:如果命令正确执行了,就会执行“echo yes”,所以 || 后面的 “echo no”就不会执行;
如果命令没有正确执行,就不会执行“echo yes”,于是 || 后面的 “echo no” 就会执行。
管道符
命令格式: [root@localhost ~]# 命令1 | 命令2 #命令1的正确输出作为命令2的操作对象
例子:使用ll 查看/etc 下面的文件信息,会很多。这是使用下面的命令,可以像使用more命令一样分页查看。
[root@localhost ~]# ll -a /etc/ | more
此时就可以按下空格 或者 回车 进行翻页查看。
[root@localhost ~]# netstat -an | grep "ESTABLISHED"
这个命令是查看当前网络的连接状况,后面加上管道符 | grep "ESTABLISHED" 就是表示只显示当前正在连接的信息
显示当前处于监听状态的信息:(监听:LISTEN)
grep 命令
[root@localhost ~]# grep [选项] "搜索内容" 文件名
例子:在/etc/passwd 文件中查看和“root”这个字符串相关的信息:
选项:
-i: 忽略大小写
-n: 输出行号
-v: 反向查找
--color=auto 搜索出的关键字用颜色显示
通配符
演示:在/tmp 目录下删除全部文件(*) :
[root@localhost ~]# cd /tmp/
[root@localhost tmp]# rm -rf *
接下来创建下面几个文件,使用ls看到的是全部文件:
查看 ls *abc 的结果:
理由是:*abc 表示 任意字符(0个或多个)后面匹配“abc”。若还要匹配“abcd”,就需要使用: *abc*
?abc 表示匹配 至少一个字符后面跟着abc
[0-9]abc 表示匹配abc前面跟着任意一个数字
[^0-9]bcd 表示匹配 bcd前面跟着任意一个非数字
Bash中其他特殊符号
* 单引号与双引号
[root@localhost ~]# name=sc #变量赋值,后会详叙。
[root@localhost ~]# echo '$name'
[root@localhost ~]# echo "$name"
[root@localhost ~]# echo ‘$(date)'
[root@localhost ~]# echo “$(date)"
反引号(``) 与 $()意义相同,都是用来引用系统命令。推荐使用$()
[root@localhost ~]# echo `ls`
[root@localhost ~]# echo $(date)
环境变量配置文件
source命令
[root@localhost ~]# source 配置文件
或
[root@localhost ~]# . 配置文件
环境变量配置文件中主要是定义对系统的操作环境生效的系统默认环境变量,比如PATH、HISTSIZE、PS1、HOSTNAME等默认环境变量。
【举例:PATH】
变量叠加:
如果重启系统,上面的操作就会丢失。若要永久保存类似于上面的配置信息,需要写入配置文件(等待)。
set命令
查看已经写入配置文件的环境变量
系统中的5类环境变量
① /etc/profile
② /etc/profile.d/*.sh
③ ~/.bash_profile
④ ~/.bashrc
⑤ /etc/bashrc
其中,①②⑤ 会对所有用户生效,③④只对自己生效
环境变量配置文件的作用:
/etc/profile的作用:
* USER变量:
* LOGNAME变量:
* MAIL变量:
* PATH变量:
* HOSTNAME变量:
* HISTSIZE变量:
* umask:
* 调用/etc/profile.d/*.sh文件
~/.bash_profile的作用
* 调用了~/.bashrc文件。
* 在PATH变量后面加入了“:$HOME/bin”这个目录
~/.bashrc的作用
* 定义默认别名
* 调用/etc/bashrc
/etc/bashrc的作用
* PS1变量
* umask
* PATH变量
* 调用/etc/profile.d/*.sh文件
3 其他配置文件和登录信息
- 注销时生效的环境变量配置文件:~/.bash_logout #系统注销时要执行那些命令?写在这里!
- 其他配置文件:~/bash_history #历史命令
- Shell登录信息:本地终端欢迎信息: /etc/issue
转义符作用
\d 显示当前系统日期
\s 显示操作系统名称
\l 显示登录的终端号,这个比较常用。
\m 显示硬件体系结构,如i386、i686等
\n 显示主机名
\o 显示域名
\r 显示内核版本
\t 显示当前系统时间
\u 显示当前登录用户的序列号