linux学习之路之bash及其特性

我们知道当我们用鼠标点击,或输入一个命令,系统就玩帮我们完成一个任务,那么当我们点击一个链接时,系统由是如何知道要去完成相应的操作呢?这是因为通过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

时间: 2024-09-29 01:46:31

linux学习之路之bash及其特性的相关文章

linux学习之路之磁盘阵列RAID及硬件RAID和软件RAID的区别

我们知道单个磁盘存储数据的容量是有限的,为了让磁盘的容量增大,我们可以将多个较小的磁盘组合在一起,形成一个较大的磁盘装置,这就是RAID(独立式磁盘阵列),RAID不仅可以提高数据的存储容量,也可以提高数据保护功能,不同级别的RAID,所提供的的功能各不一样. RAID常见的级别有RAID0,RAID1,RAID5,RAID10,RAID01,RAID5,RAID50 下面逐个介绍这些级别的工作原理. RAID0:首先将磁盘分成等量的数据块(CHUNK),然后在将存储的数据切分成符合CHUNK大

linux学习之路之使用脚本来复制二进制程序和所需的库文件

首先介绍bash的特殊语法 ${parameter#*word} 其中parameter为变量,word为分隔符,表示从变量最边左字符开始到第一匹配到分隔符(word)之间的字符串都去掉 ${parameter##*word}:表示从变量最左边字符开始到最后一次匹配到该分隔符之间的字符串都去掉 注意:其中变量不要加$符号 当*在分隔符(word)前面时,表示从左开始匹配 当*在分隔符(word)后面时,表示从右开始匹配 ${parameter%word*}:表示从最右边字符开始到第一次匹配到的分

linux学习之路之LVM

试想一种情况,当初我们在规划磁盘的时候,只给某一个磁盘或分区之划分了30G的容量,但是后来,随着业务的需求,该磁盘或者分区的使用量会越来越大,等到以后再有数据存放时,发现该磁盘或者分区的容量不够用,此时该怎么办了?可以新增一个磁盘,经过格式化,挂载等过程就可以使用这个磁盘了,再将原来磁盘的数据完全的复制过来.等到后来又发现,规划的磁盘又太大了,然后又使用上述方法来减少磁盘的大小.虽然这种方法可行,但是效率低,比较复杂.不应该是我们首选的方法. 当然,我们可以这样做,将多个磁盘或者分区(PV)组合

linux学习之路之LVM的快照功能

我们知道LVM可以弹性的调整文件系统的大小,其实LVM除了可以调整文件系统的大小之外,还有另一个功能就是系统快照. 所谓系统快照就是将某一时刻文件系统中的信息记录到快照区中,这里的某一时刻指的是在原始数据被改变的那一瞬间,原始数据会移到快照区里.而其他没有改变的数据,快照区和文件系统共享.所以刚建立快照时快照区内容和文件系统的内容一样. 由于我们知道只有改变的数据才会移动到快照区,因此快照区中保存的内容比较少. 快照区的原理图如下: 那么如何建立快照区呢? 使用lvcreate -s命令来创建快

linux学习之路之磁盘管理和文件系统三

ext3文件系统和ext2文件系统的区别? 在某些时候,某个用户在linux系统上写入数据,这时系统正好断电或者系统核心出现错误,写入的数据仅有inode table和datablock而已,可能会导致之前写过的数据没有保存在磁盘上.而当系统重启后,系统可能会对没有保存的数据进行数据恢复.但是,由于系统并不知道是哪个文件不完整,因此会遍历整个文件系统中inode,来查看block是否完整.不过,当某个文件的数据太大时,数据的恢复时间可能会比较长,而这对于服务器来说是不利的.所以在这种情况下,也就

linux学习之路之vim编辑器的使用

本章将介绍vim编辑器的使用 vim编辑器是vi编辑器的增强版 vim是一种全屏的编辑器,是一种模式化的编辑器,之所以称为模式化的编辑器,因为vim有多种模式. 接下来将介绍vim主要的三种模式: 编辑模式(也叫命令模式):在该模式下你可以完成字符串跳转,字符串删除,翻屏操作等操作 输入模式:在该模式下输入的任何字符都会保存在该文件中,作为文件的一部分 末行模式:在该模式下,可以实现字符串搜索,字符串替换等操作 vim编辑器的三种模式之间的相互转换 模式转换: 编辑模式-->输入模式 i:在当前

linux学习之路之文本的查找---find命令的使用

文本的查找可以使用两种方式来实现,即使用locate命令来查找和find命令来查找 那么这两种方式有什么区别呢? locate:是一种非实时查找,所谓非实时查找就是查找的不够实际,不够精确.因为locate查找是在 系统文件数据库中进行的,而数据库默认是一天更新一次,也就是说你查找的文件再数据库 更新之前查找的话,有可能找不到文件,因为那时数据库还没有去读取硬盘上的文件,所以 有些文件没有写入到数据库中. 可以收到更新数据库,使用命令updatedb 因为不上在硬盘上读取,因此速度快 locat

linux学习之路之sed命令使用

本章主要介绍sed的命令使用 sed(Stream Editor)是一种流编辑器,或者叫做行编辑器,以行为单位进行编辑处理,而后续会介绍的vi编辑器是一种全屏编辑器. sed的工作原理: 逐行读取文件中的每一行,并将其放在内存空间中,在对内存空间中的数据进行处理,将处理后的结果打印到屏幕上.而这种内存空间也叫做模式空间. 所谓模式空间:就是将放在内存空间的数据根据模式来匹配,匹配成功的数据进行相应的编辑处理,将处理后的数据打印到屏幕上去. 说明:sed命令默认将文件中所有的行打印到屏幕上去. s

linux学习之路之目录管理和文件管理

我们知道linux文件系统是一个树型结构,在最上层是'/'目录,根目录的下面就是其他目录,而这些目录下面又可以有多个子目录,这样一层一层的就形成一个树型结构图.那是不是我们查找某一个文件必须要从根目录开始往下查找的呢?当然不是,在这里我将会介绍两种路径方式:相对路径和绝对路径. 什么是相对路径和绝对路径? 绝对路径:就是从'/'根目录开始往下一级一级的查找,直到目的所经过的线路. 相对路径:就是相对当前位置而言来找到目的地所经过的线路. 目录的创建 mkdir:用于创建目录 语法格式:mkdir