我们知道当我们用鼠标点击,或输入一个命令,系统就玩帮我们完成一个任务,那么当我们点击一个链接时,系统由是如何知道要去完成相应的操作呢?这是因为通过shell来完成的。
那么什么是shell呢?
shell就是用户和操作系统之间的一个接口,通过这个接口shell接受来自用户的命令,并调用相应的应用程序来呼叫kernel来处理相应的工作。
在linux系统上面存放着多种类型的shell,这些shell存放在/etc/shells文件里,默认RedHat使用的shell为bash
下面介绍一些bash的特型及相应的命令
bash具有以下特性
1、命令历史和命令补全
2、可以使用管道和重定向
3、可以使用命令别名
4、支持命令行编辑
5、支持命令行展开
6、支持文件名通配
7、支持变量
8、支持shell编程
命令历史
什么是目录历史?
命令历史就是譬如使用的一些命令如ls、cd、pwd等命令存放在内存缓冲区当中,这些命令在系统关机后会自动的写入到~/.bash_history当中。
使用命令历史可以很方便的进行命令操作
语法格式 history [option]
不加选项时。列出命令历史中使用过的命令
-c:清空整个命令历史
-d num:***指定位置的命令历史
-w :将缓冲区中的命令历史写入到~/.bash_history当中
命令历史的使用技巧
!n:执行命令历史中的第n条命令
!-n:执行命令历史中的倒数第n行命令
!!:执行上一次命令
!string:执行命令历史中最近一次以string开头的命令
COMMAND !$:引用前一次命令的最后一个参数
COMMAND Esc,.:也可以引用前一次命令的最后一个参数
COMMAND Alt+.:引用前一次命令的最后一个参数
那是不是缓冲区中可以无限的存命令历史了?
当然不是,默认情况下,系统只能存取一定数量的命令历史。
使用echo $HISTSIZE 可以显示系统默认存放的命令历史的条数
命令补全机制:该命令是在PATH这个环境变量下搜索出来的
路径补全机制:是在打头路径下查找的
命令别名alias
当一个命令过长或经常使用的话,可以通过定义别名的方法来操作
语法格式:alias COMMALIAS=COMMAND OPTION
注意:在shell中的定义的别名仅在当前shell有效,shell的有效范围为当前shell进程
unalias COMMALIAS :撤销别名
\COMMAND:不使用别名,而是使用原命令本身
命令替换
命令替换就是把某个子命令替换为其执行结果的过程
$()=``
在某些命令当中,如果出现命令替换符,那么kernel会首先执行子命令,然后在执行外部命令
bash支持的三种引号
反引号``:用于命令替换
双引号"":弱引用,可以实现变量替换
单引号‘‘:强引号,原样输出
光标跳转
Ctrl+a:跳到行首
Ctrl+e:跳到行尾
Ctrl+u:***光标至命令行首的内容
Ctrl+k:***光标至命令行尾的内容
Ctrl+l:清屏
文件名通配
*:匹配任意长度的任意字符
?:匹配任意单个字符(不含空格符)
[]:匹配指定范围内的任意单个字符
[^]:匹配指定范围之外的任意单个字符
[:space:]:所有空白字符
[:punct:]:所有标点符号
[:lower:]:所有小写字母
[:upper:]:所有大写字母
[:alpha:]:大小写字母
[:digit:]:所有数字
[:alnum:]:数字和大小写字母
文件的权限
文件的权限分别对应着3类用户,文件的所有者,文件的所有者属组和其他用户
每一类权限都是有按照rwx这个顺序组成的,其中-表示该为的权限为空
例如(某个位的权限如果存在则为1,空则为0),那么:
000 ---:权限为空
001 --x:有执行权限
010 -w-:有些权限
011 -wx:有写和执行权限
100 r--:有读权限
101 r-x:有读和执行的权限
110 rw-:有读写的权限
111 rwx:有读写和执行的权限
那么对于文件和目录,权限的含义又是什么呢?
对于文件而言
r:具有可读的权限,例如可以使用cat等命令来查看文件内容
w:具有写的权限,用户可以编辑和***该文件
x;具有执行的权限,可以在命令提示符下提交命令给kernel执行
对于目录而言
r:可以对此目录使用ls等命令来查看该目录下的文件
w:可以在此目录下创建文件
x:可以使用cd命令来切换进入此目录,也可以使用ls -l命令来查看此目录下的文件的详细信息
用户管理
我们知道linux是一个多用户多任务的系统,不同的用户具有不同的权限,且彼此之间的操作互不影响。
那么系统中的有哪些类型的用户了?
用户的类型
管理员用户:UID=0
普通用户:UID=[1-65535]
系统用户:UID=[1-499],系统用户的账号是不可登入的
一般用户:UID=500+
用户组类型
基本组:用户的默认组
私有组:创建用户时,如果没有知道所属的组,则系统会自动创建一个与用户名相同的组名
额外组,附加组:默认组以外的其他的组
那么这些用户和组都存放在那里呢?
/etc/passwd:该文件是存放用户的相关的信息的
每一行用冒号:隔开,共有7个字段
第一个字段:显示的是用户名
第二个字段:为用户的密码占位符,实际密码在/etc/shadow中
第三个字段:为用户的UID
第四个字段:为用户所属组的GID
第五个字段:注释信息
第六个字段:用户的家目录
第七个字段:用户默认的shell
用户所属组的相关信息存放在/etc/group中
每一行用冒号:隔开,关共有4个字段
第一字段:为用户所属的组
第二个字段:用户所属组的密码,实际密码在/etc/gshadow中,这里只是占位符
第三个字段为用户所属组的GID
第四个字:为该组支持的用户
再来谈一下用户的密码存放在那个文件中?
/etc/shadow
每一行用冒号隔开,共有9个字段
第一个字段:为用户名
第二个字段:加密后的密码(如果显示为!!表示该用户被锁定了,不可登入)
第三个子段:从1970年到最近一次密码改变所经过的天数
第四个字段:为密码最短使用期限
第五个字段:为密码最长使用期限
第六个字段:离密码过期之前的提醒时间
第七个字段:为密码宽限天数(可以登入,不过登入必须先改密码)
第八个字段:为用户禁用的天数(过了这个天数用户失效,不管密码过期没)
第九个字段:保留
想一想,为什么当我们使用useradd命令创建用户时,这个用户会显示那么多的信息?
linux学习之路之bash及其特性,布布扣,bubuko.com