今天打算讲完挂载并初步讲述shell的入门。
上一篇博客我们讲了mount命令,用户挂载外部设备或者硬盘,现在我们讲解虚拟机中硬盘的挂载,真实机也类似。
fdisk分区:用于添加硬盘后将硬盘分区,步骤操作如下:
- 先添加硬盘到虚拟机中
- 用 fdisk -l 来查看硬盘情况
- fdisk /dev/sdb 用命令将硬盘分区,这个/dev/sdb。执行该命令后会进入编辑该硬盘的界面,里面的如何创建分区,给分区分配内存之类的内容大火可以去看看其他大佬写的博客,我就不多说说了
- partprobe :重新读取分区信息,一般来说不用执行该命令
- mkfs -t ext4 /dev/sdb1:格式化分区,其中ext4是文件系统名,目前CentOS7的文件系统是xfs,所以我们可以执行mkfs -t xfs /dev/sdb1
- 挂载分区,普通挂载每次重启后要重新挂载
- df 或者 mount命令查看是否挂载
只是执行了mount命令,下一次重启后会自动失效,要想每次开机后都能自动挂载,即永久挂载,我们要把该挂载命令写入文件:/etc/fstab
- 分区设备文件名或UUID(硬盘唯一识别码),Centos7的用户可以通过blkid命令查看UUID,比如
blkid /dev/sdb1 - 挂载点
- 文件系统名称
- 挂载参数,填默认defaults就可以了
- 指定分区是否被dump备份,0便是不备份,1表示备份
- 指定分区是否被fsck检测,0表示不检测,其他数字检测表示优先级,越小优先级越大
比如我想自动挂载/dev/sdb1这个硬盘分区,我可以这样输入:
/dev/sdb1 /mnt/disk1 xfs defaults 0 0
以上就是挂载和硬盘分区的全部内容了,加下来先讲解一些帮助我们更好使用Linux的命令。
history:查看历史命令
- history -c:清空历史命令
- history -w:把缓存中的历史命令写入历史命令保存文件 ~/.bash_histroy
历史命令的调用:
- 使用“!n”重复执行第n条历史命令
- 使用“!!”重复执行上一条命令
- 使用“!字串”重估执行最后一条以该字串开头的命令
加下来我们来说说Linux命令执行的原理,其实Linux的命令都是一个个以该命令命名的可执行shell文件。我们可以做个小实验,执行whereis ls这个命令,就会发现这个命令其实是在执行ls: /usr/bin/ls 这个文件。那存储命令文件的目录就叫系统环境变量。
命令执行也是有前后顺序的,当我们敲了一个命令,系统回逐个到存储目录中寻找同名的可执行文件
命令执行顺序:
- 1——绝对路径或者相对路径
- 2——顺位执行别名(alias),后面会讲解
- 3——顺位执行Bash的内部命令
- 4——顺位执行$PATH环境变量
系统环境变量:我们所执行命令都是由该命令所命名的可执行文件,比如ls命令,其实就是在执行ls文件。那么这些文件都在哪里呢?其实都在系统的某些目录中,我们通过echo $PATH命令查看那些目录/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin,命令文件就存储在这些目录中,这些也叫做系统变量。
举个例子:假如我想在/tmp中创建一个shell脚本,作用是输出hello shell,我创建完后可以通过绝对路径来执行,也可以通过cp到/bin/中,变成系统变量,当然还可以利用PATH:变量执行路径来实现。假设我的shell在/tmp中,那么我只要在原有的PATH基础上加上/tmp即可,即输入命令:PATH="$PATH":/tmp
命令别名:alias
- alias:查看有哪些别名
- alias 别名=‘原命令’:给原命令起别名,比如alias ld=‘ls -d’
- unalias 别名:删除别名
别名一旦退出登录就会消失,要想永久添加别名,要修改~/.bashrc里面的命令其实这个文件是每次登录都会运行,写入这个文件即每次都自动添加别名,实现永久别名的功能。
Bash常用快捷键:
- ctrl + A:把光标移动到命令行开头
- ctrl + E:把光标移动到命令行结尾
- ctrl + K:删除或剪切光标之后内容
- ctrl + U:删除或剪切光标之前的内容
- ctrl + Y:粘贴之前剪切的内容
- ctrl + D:退出终端
- ctrl + R:在历史命令中搜索
输入输出重定向:指本应在屏幕上输出的或者用键盘输入的命令和信息,通过其他方式输入输出。举个例子:比如我想将ls命令的结果保存到文件中而不是显示出来,这就是输出重定向。
- >:输出重定向,且输出的信息会覆盖当前文件,比如ls > abc:将ls命令显示的内容保存到abc文件,文件之前的内容会被覆盖
- >>:追加到文件中,比如ls >> abc:将ls命令显示的内容保存到abc文件,文件之前的内容不会被覆盖
这些输出重定向是输出正确情况下,那么如果在执行中报错呢?这就要涉及错误输出重定向,很简单,也就是 2>。默认 > 其实是 1> ,你可以理解为正确输出重定向。
- 如果当我想返回错误的信息:比如我故意将 ls 命令输错成 lst ,并把错误信息保存到abc文件中,lst 2>> abc:这里的2表示为错误信息输出
一般来说上述的两个命令意义不大,因为我们得先判断命令是否有错才能使用该命令,而很多时候我们会不知道命令是否有错的前提下,通过输出命令结果来判断是否命令出错。
- 命令 >&:以覆盖的方式将正确输出和错误输出都保存到一个文件中
- 命令 >>&:以覆盖的方式将正确输出和错误输出都保存到一个文件中
- 命令 > 文件 2>&1:另一种写法,以覆盖的方式将正确输出和错误输出都保存到一个文件中,这种方式其实原理是把错误信息放入“正确输出”中,再把“正确输出”保存到文件中
- 命令>>文件A 2>>文件B:把正确的输出追加到文件A中,把错误的输出追加到文件B中,这种写法相当常见,在Linux中,存在这一个文件/dev/null,类似于windows的回收站,所有信息输入进去后都会被清除,我们有时候可以把错误信息 2>>/dev/null中。
输出重定向就比较简单了,一般是将文件的内容导入一个程序或者命令中。
- 程序A < 文件B:将文件B的内容导入到程序A中,并返回结果到显示屏幕
- wc -c < 文件A:利用wc命令统计文件A有多少字符
- wc -l < 文件A:利用wc命令统计文件A有多少行
- tr ‘:’ ‘ ’ < 文件A:利用tr命令将文件A的冒号:替换成空格
多命令执行
- 命令1 ; 命令2:命令1与命令2顺序执行,命令之间灭有任何逻辑联系,即使命令1错误,命令2也照样执行
- 命令1 && 命令2:逻辑与,只有当命令1正确执行,命令2才执行,反之若命令1报错则不会执行命令2
- 命令1 || 命令2:逻辑或,只有当命令1执行不正确,命令2才执行,当命令1正确执行,命令2则不执行
常见的骚操作:命令 && echo yes || echo no:当命令执行正确,会输出yes,反之会输入no
管道符:|,比如命令1 | 命令2,命令l1的正确输出作为命令2的操作对象
- last | wc -l:用last命令查看最近登录的用户,将结果通过管道符给wc命令,统计多少用户(一行表示一个用户,统计行数即同时用户数)。管道符可以连续用下去:命令A | 命令B | 命令C | 命令D
通配符:用来匹配文件名,注意,不要与正则搞混!!!
符号 | 作用 |
---|---|
? | 匹配任意一个字符 |
* | 匹配0个或任意多个字符 |
[abc] | 匹配其中任意一个字符,比如a,b或者c |
[a-z] | 匹配小写字母a到z |
[^] | 逻辑非,比如[^0-9]表示匹配不是数字的字符 |
’ ’ | 单引号括起来的都是普通字符 |
" " | 双引号里面的是特殊字符 |
$() | 和反引号``类似,Bash中先执行,然后再赋予变量 |
# | 开头注释 |
$ | 调用变量的值时,要用$ |
\ | 反斜杠,转义符,表示\后面的特殊字符失去特殊含义 |