[8] Shell 基础知识
来源:互联网 发布:苹果电脑装机软件 编辑:程序博客网 时间:2024/06/06 17:16
[8] Shell 基础知识
8.1 shell介绍
提供使用者使用界面”的软件(命令解析器,提供用户和机器之间的交互,支持特定语法,比如逻辑判断、循环,centos7默认shell为bash(Bourne Again Shell)。除了bash之外还有zsh、ksh
8.2 命令历史
- 命令历史文件
[root@localhost ~]# ls .bash_history
- 历史命令最大保存1000条
[root@localhost ~]# echo $HISTSIZE 1000
- 清空命令历史
[root@localhost ~]# history -c清空内存中命令历史,但不会清空命令历史文件.bash_history
前输入的命令历史,不会立刻保存到命令历史文件中,而是先保存在内存中,只有退出当前终端时才会将内存命令历史写到文件中
- 更改最大命令历史
[root@localhost ~]# vim /etc/profile搜索HISTSIZE关键字,更改值为5000[root@localhost ~]# source /etc/profile[root@localhost ~]# echo $HISTSIZE5000
- 添加命令历史修改时间
新建一个环境变量,用来输出时间格式
[root@localhost ~]# HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S "[root@localhost ~]# echo $HISTTIMEFORMAT %Y/%m/%d %H:%M:%S[root@localhost ~]# history 1 2017/06/29 00:49:11 vim /etc/profile 2 2017/06/29 00:49:21 [root@localhost ~]# vim /etc/profile 3 2017/06/29 00:50:26 vim /etc/profile 4 2017/06/29 00:51:05 source /etc/profile 5 2017/06/29 00:51:16 echo $HISTSIZE 6 2017/06/29 00:51:21 [root@localhost ~]# source /etc/profile 7 2017/06/29 00:51:21 [root@localhost ~]# echo $HISTSIZE 8 2017/06/29 00:54:52 HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S " 9 2017/06/29 00:55:06 echo $HISTTIMEFORMAT 10 2017/06/29 00:55:21 history
上述方法只在上前终端有效,下面方法可全局生效
将$HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S "写进/etc/profie中,并生效该文件
- 设置命令历史文件特殊权限,防止被删除
[root@localhost ~]# chattr +a .bash_history
此时不设置最大保存命令数量,该文件也不会被删除
- 其他历史用法
!! 表运行history文件中最后一条命令!n n为historyr命令显示内容的序列号,如!24,运行history命令历史中第24条命令!word 运行history命令中最近的关键词的命令
8.3 命令补全和别名
tab补全命令、文件路径centos7中支持参数补全,操作如下:[root@localhost ~]# yum install -y bash-completion设置别名:alias 别名='具体命令'取消别名:unalis 别名
8.4 通配符
* 通配零个或无穷多任意字符? 通配一个任意字符+ 通配一个或多个任意字符[0-9] 或 [a-z] 范围内,任选其一,或者{1,2} 范围内,人员其一,或1,或2
8.5 输入输出重定向
- 输出
echo "123" > 1.txt 将123输入到1.txt文件中,会覆盖原1.txt数据echo "123" >> 1.txt 将123追加到1.txt文件中,不会覆盖原1.txt数据2> 错误重定向,将屏幕中错误信息重定向至文件中2>> 追加错误重定向,将屏幕中错误信息追加重定向至文件中>+2> == &> 将错误和正确的信息重定向到文件中>+2>> == &>> 将错误和正确的信息追加重定向到文件中
- 将正确和错误输出区分开
[root@localhost ~]# ls [1-9].txt 222.txt > 1.txt 2> 2.txt
- 输入
用法:[命令]<文件,将后面的文件作为前面命令的参数输入[root@localhost ~]# wc -l < 2.txt 2
- 扩展
shell 1>&2 2>&1 &>filename重定向的含义和区别
8.6 管道符和作业控制
- | 管道符
将一个命令的输出变为另一个命令的输入
[root@localhost ~]# ls | wc -l25[root@localhost ~]# find / -name "*.conf" |wc -l721[root@localhost ~]# yum list |grep vim
- 作业控制
ctrl+z 暂停一个命令jobs 查看当前终端后台运行或者暂停的任务,但可以查看到该任务进程fg+n 恢复暂停的任务,放置前台运行,n为jobs命令查询到的id号bg+n 把任务放到后台运行,n为jobs命令查询到的id号[root@localhost ~]# vmstat 1procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 1 0 0 1298764 1112 387736 0 0 108 19 54 74 0 0 98 2 0 0 0 0 1298748 1112 387736 0 0 0 0 39 46 0 0 100 0 0^Z[1]+ 已停止 vmstat 1[root@localhost ~]# bg[root@localhost ~]# jobs[1]+ 运行中 vmstat 1 &还有一种办法可以将任务快速丢到后台运行[root@localhost ~]# sleep 100 &[1] 2561[root@localhost ~]# jobs [1]+ 运行中 sleep 100 &ps aux 查看系统进程kill -9 [pid] 结束进程
8.7 shell变量
- env 查看系统预设全部环境变量
- set 查看系统预设的全部变量、用户自定义的变量
- 变量名规则
myname=temence1.设定变量的格式为a=b,其中a为变量名,b为变量的内容,等号两边不能有空格; 2.变量名只能由英、数字以及下划线组成,而且不能以数字开头; 3.当变量内容带有特殊字符(如空格)时,需要加上单引号。4.变量内容中本身带有单引号,这就需要用到双引号了。 myname="temence's"5.变量内容中需要用到其他命令运行结果,使用反引号。 myname=`pwd`6.变量内容可以累加其他变量的内容,需要加双引号 myname="$LOGNAME"temence
总结:使用双引号时不会取消掉里面出现的特殊字符的本身作用(比如$),而使用单引号则里面的特殊字符全部失去它本身的作用。
- 查看当前终端
[root@localhost ~]# echo $SSH_TTY/dev/pts/1[root@localhost ~]# w 01:46:21 up 1:35, 1 user, load average: 0.07, 0.03, 0.05USER TTY FROM LOGIN@ IDLE JCPU PCPU WHATroot pts/1 192.168.1.33 00:40 5.00s 0.38s 0.00s w
- 进入当前shell子shell
[root@localhost ~]# bash 进入子shell[root@localhost ~]# pstree 显示树状结构,清楚地表达程序间的相互关系[root@localhost ~]# exit 退出子shell
- 全局变量
默认当前新建的变量都只会在当前终端下生效,本地变量并非全局变量,很多时候需要将变量生效为全局变量。需要使用export,export其实就是声明一下这个变量的意思,让该shell的子shell也知道变量。如果export后面不加任何变量名,则它会声明所有的变量。export向下声明变量,不能向上声明变量
用法:export [变量名][root@localhost ~]# ggg=temence 设置ggg变量[root@localhost ~]# echo $ggg 显示变量ggg内容temence [root@localhost ~]# bash 进入子shell[root@localhost ~]# echo $ggg 查看子shell中ggg变量值 [root@localhost ~]# exitexit[root@localhost ~]# export ggg 全局申明变量ggg[root@localhost ~]# bash 再次进入子shell[root@localhost ~]# echo $ggg 再次查看子shell中ggg变量值,此时可以看到全局变量ggg的值temence
- 取消变量
用法:unset [变量名]
8.8 环境变量配置文件
/etc/profile 用户环境变量,交换、登陆后才能执行里面内容。预设了几个重要的变量,例如PATH,USER,LOGNAME,MAIL, INPUTRC,HOSTNAME,HISTSIZE,umask等等。/etc/bashrc 用户不用登陆,执行shell就能生效。预设umask值以及PS1(echo $PS1)。.bash_profile 定义了用户的个人化路径与环境变量的文件名称。每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次。.bashrc 该文件包含专用于你的shell的bash信息,当登录时以及每次打开新的shell时,该文件被读取。例如你可以将用户自定义的alias或者自定义变量写到这个文件中。.bash_history 记录命令历史。 .bash_logout 当退出shell时,会执行该文件。可以把一些清理的工作放到这个文件中。
- PS1 环境变量
PS1是主提示符变量,也是默认提示符变量。定义命令行提示字符即可,最常用的需求就是显示登录的用户名、主目录、主机名
显示用户名,主机名和动态显示当前目录 [\u@\h \W]\$颜色显示用户名、主机名、当前目录[root@localhost etc]# PS1='[\[\033[01;32m\]\u@\h\[\033[00m\] \[\033[01;36m\]\W\[\033[00m\]]\$ 'PS1常用参数如下:/d 代表日期,格式为weekday month date,例如:"Mon Aug 1"/H 完整的主机名称。例如:我的机器名称为:fc4.linux,则这个名称就是fc4.linux/h 仅取主机的第一个名字,如上例,则为fc4,.linux则被省略/t 显示时间为24小时格式,如:HH:MM:SS/T 显示时间为12小时格式/A 显示时间为24小时格式:HH:MM/u 当前用户的账号名称/v BASH的版本信息/w 完整的工作目录名称。家目录会以 ~代替/W 利用basename取得工作目录名称,所以只会列出最后一个目录/# 下达的第几个命令/$提示字符,如果是root时,提示符为:# ,普通用户则为:$/[ 字符"["/] 字符"]"/! 命令行动态统计历史命令次数
- PS2 环境变量
PS2是副提示符变量,默认值是 > ,一般使用于命令行里较长命令的换行提示信息。如进入mysql提示信息
8.9 cut命令
- shell特殊符号
* 代表任意个字符? 代表任意一个字符# 注释字符\ 脱意字符| 管道符$ 变量前缀!$ 在一行中运行两个或两个以上的命令,在命令之间加一个;; shell命令行中表示上一条命令,正则里面表示行尾~ 用户家目录,正则表达式中表示匹配符& 放到命令后面,把命令丢到后台> 输出重定向>> 追加重定向< 输入重定向2> 错误重定向2>> 错误追加重定向[ ] 中间为字符组合,代表中间字符中的任意一个; 也可以,if判断语句[ -d dir ]判断目录是否存在shell中的连接符(1) command1 ; command2 和 不管command1是否执行成功都会执行command2(2) command1 && command2 并且 只有command1执行成功后,command2才会执行(3) command1 || command2 或 command1和command2中只会执行一条命令。1执行,2不执行,2执行,1不执行。
- cut 命令
语法: cut -d "分隔字符" [-cf] n 这里的n是正整数 -d 指定分隔符,不用引号也可以-f 指定第几段 -c 后面只有一个数字表示截取第几个字符,后面跟一个数字区域n1-n10,表示截取从几到几,也可以n1,n3,n5 ,表示截取第一,三,五字符。-c参数不能和-d参数同时使用[root@localhost /]# cat /etc/passwd |head -n2root:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologin[root@localhost /]# cat /etc/passwd |head -n2 | cut -d ":" -f 1-4root:x:0:0bin:x:1:1[root@localhost /]# cat /etc/passwd |head -n2 | cut -c 1-10root:x:0:0bin:x:1:1:
8.10 sort\wc\uniq命令
- sort 排序
语法: sort [-t 分隔符] [-kn1,n2] [-nru] 这里的n1<n2 -t : 指定分隔符,作用跟cut的-d一个意思 -n:使用纯数字排序,字幕和特殊符号被识别为0-r:反向排序-u:去重复 当使用-un参数时,sort会把文档中的字母看成0。-kn1,n2:由n1区间排序到n2区间,可以只写-kn1,即对n1字段排序不加任何参数,则按照ASCII码升序排序
- uniq 去重复命令
比sort -u多一个功能,可以计算重复的行数
使用uniq 的前提是需要先给文件排序
-c:统计重复的行数,并把行数写在前面 sort testb.txt |uniq -c
- wc命令
-l 统计行数,后面可以跟多个文件,算总行数-w 统计单词个数,以空格为分隔符-m 统计字符个数
8.11 tee\tr\split命令
- tee 双重输出
类似与重定向,但是比重定向多了一个功能,在把文件写入后面所跟的文件,还显示在屏幕上。常用于管道符|后
-a 可以在文件中追加内容[root@localhost ~]# echo "aa" |tee test.txtaa[root@localhost ~]# cat test.txt aa[root@localhost ~]# echo "bb" > test.txt [root@localhost ~]# cat test.txt bb清空一个文件内容,而不删除文件[root@localhost ~]# > test.txt [root@localhost ~]# cat test.txt
- tr 替换字符
-d:删除某个字符,-d后面跟要删除的字符 -s:把重复的字符去掉,后面再跟一个字符把重复的字符替换成后面跟的字符替换大小写 tr '[a-z]' '[A-Z]' [root@localhost ~]# echo "temence" |tr "temence" "Temence"Temence
- split 切割文件
-b:依据大小来分割文档,默认单位为byte-l:依据行数来分割文档文件后面可以指定切割后的文件名 split -b500 passwd 123
阅读全文
0 0
- [8] Shell 基础知识
- shell基础知识
- shell基础知识
- shell基础知识
- SHELL 基础知识
- Shell 基础知识
- shell基础知识
- shell基础知识
- shell 基础知识
- shell 基础知识
- shell 基础知识
- Shell基础知识
- Shell基础知识
- shell基础知识
- shell基础知识
- shell基础知识
- shell基础知识
- shell基础知识
- 三,我的大学生活(2)--新的开始
- textCNN在tensorflow上的故事——记一个tf入门者的学习之路
- 通向架构师的道路(第一天)之Apache整合Tomcat
- 'org.springframework.beans.MutablePropertyValues.get(Ljava/lang/ String;)Ljava/lang/Object;'. See E
- Eclipse中导入外部项目时提示HttpServletRequest 不能引用的问题
- [8] Shell 基础知识
- 基于HTML5 画布功能canvas的绘画板:画线、画圆、画矩形、橡皮、改变线条
- [树的点分治] 不虚就是要AK
- 通向架构师的道路(第二天)之apache tomcat https应用
- 数据库存储引擎学习总结
- 通向架构师的道路(第三天)之apache性能调优
- UVALive4167 HDU2700 Parity【水题】
- asp.net 操作带输入输出参数的分页存储过程(—)
- 通向架构师的道路(第四天)之Tomcat性能调优