标签:linux bash
shell:外壳(是用户能直接操作系统资源的入口)
shell一般分两种:
图形界面GUI:gnome,kde,xfce
命令行界面CLI:sh、csh、ksh、bash、tcsh、zsh
进程:在每个进程看来,当前主机上只存在内核和当前进程。
进程是运行中的程序,程序只有一个但是进程却可以有多个
shell和子shell:
当我们登录成功时,系统会给我们一个shell,如果我们在这个shell里面执行bash、csh等命令,系统会为我们打开一个新的shell,随之我们便切换到那个子shell,可以用exit退出,用pstree,可以了解到这个过程
示例:
[root@logstach ~]# bash
[root@logstach ~]# pstree
init─┬─crond
├─6*[mingetty]
├─rsyslogd───5*[{rsyslogd}]
├─sshd───sshd───bash───bash───pstree
└─udevd───udevd
[root@logstach ~]# exit
exit
[root@logstach ~]# pstree
init─┬─crond
├─6*[mingetty]
├─rsyslogd───5*[{rsyslogd}]
├─sshd───sshd───bash───pstree
└─udevd───udevd
[root@logstach ~]#
bash的特性:
1、命令历史
2、管道、重定向
3、命令别名
4、命令行编辑器
5、命令行展开
6、文件名通配
7、变量
8、编程
命令行编辑:
光标跳转:
ctrl+a:跳到行首
ctrl+e:跳到行尾
ctrl+u:删除光标到行首的内容
ctrl+k:删除光标到行尾的内容
ctrl+l:清屏
命令历史:
查看命令历史:history
-c:清空命令历史
-d OFFSET [N]:删除指定位置历史命令
-w:保存命令历史到历史文件(用户家目录里面隐藏文件.bash_history)中
环境变量
PATH:命令搜索路径
HISTSIZE:命令历史缓冲区大小
命令历史的使用技巧:
!n:执行命令历史中的第n条命令
!-n:执行命令历史中的倒数第n条
!!:执行第n条
!string:执行命令历史中最近一个以指定字符开头的命令
!$或者Esc+ . :引用前一个命令的最后一个参数
命令补全:
当你输入一个命令的前几个字符时候,如果这几个字符可以确认命令的唯一性那么嗯tab键的时候会自动补齐命令,如果不能则显示以这几个字符开头的所有可能命令。
示例:
[root@logstach ~]# pw
pwck pwconv pwd pwdx pwunconv
[root@logstach ~]# pwc
pwck pwconv
[root@logstach ~]# pwconv
路径补全:
类似于命令补全,不同的是,命令补全是在PATH这个环境变量所指定的路径中查找命令,而路径则是在指定的路径中找相关的目录或文件。
命令别名:
alias CMDALIAS=‘COMMAND [options] [arguments]‘
在shell中定义的别名仅在当前shell生命周期中有效,当shell进程挂掉的时候,alias也随之失效。要想永久生效,可以写入到shell配置文件中。
当别名与命令名称相同的时候,可以是用\CMD使用原来的命令
当想取消别名,就用unalia CMSALIAS
命令替换:把命令中的某个子命令替换为其执行结果的过程
$(COMMAND)或者反引号`COMMAND`
示例:
创建一个当前文件,并命名为类似file-2015-12-21-16-54.txt的格式,2015-12-21-16-54代表2015.12.21 16:54
touch file-`date +%Y-%m-%d-%H-%M`.txt
或 touch file-$(date +%Y-%m-%d-%H-%M).txt
bash 支持的引号:
``:命令替换
“”:弱引用,可以实现变量替换
‘‘:强引用,不完成变量替换
文件名通配:
*:通配任意长度、任意字符
?:通配指定任意字符中的一个
[]:通配指定字符中的一个
[a-z]、[0-9]...
[:space:]:空白字符
[:punct:]:标点符号
[:digit:]:数字
[:lower:]:小写字母
[:upper:]:大写字母
[:alpha:]:大小写字母
[:alnum:]:数字和大小写字母
其他的可以man 7 glob
[^]:除了指定字符外的任意一个
示例:
当我们想用特殊字符作为文件名的时候,可以使用‘ ’来实现这一过程
[root@logstach tmp]# touch ‘a b‘
[root@logstach tmp]# ls
a b
[root@logstach tmp]#
当我们想查找某一个包含某种特性的文件的时候,我们可以采用文件名通配来提高查找效率,比如:
在/tmp/路径下,包含各式各样的文件,我们想显示一个以字母开头,以数字结尾的文件,可以这样显示:
[root@logstach tmp]# ls
14ahhs1 25 534 71233bbc a a b kkll568 sadsa*787sdd
[root@logstach tmp]# ls [a-zA-Z]*[0-9]
kkll568
也可以这样:
[root@logstach tmp]# ls [[:alpha:]]*[0-9]
kkll568
注:在使用[:space:]这类通配符的时候必须使用两个[],像这样:[[:alpha:]]
如果我们想显示以字母开头和结尾,中间包含空格的文件,可以这样:
[root@logstach tmp]# ls [a-zA-Z]*[[:space:]]*[a-zA-Z]
a b
但是这类文件名通配符有它的局限性,比如下面的要求就做不到:
显示所有以数字结尾,并且文件名中不包含空格的文件。
本文出自 “单季稻” 博客,谢绝转载!
标签:linux bash
原文地址:http://linzb.blog.51cto.com/5192423/1727616