2017-10-27Linux基础知识bash基础特性
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2017-10-27Linux基础知识bash基础特性相关的知识,希望对你有一定的参考价值。
2017-10-27Linux基础知识(9)bash基础特性在上一章当中我们讲述了FHS、以及一些命令和bash命令历史的特性,FHS是标准的文件系统层级结构,它规定的文件系统的分类存储,使得让各个Linux的发行版本得到的参考和统一,之后我们介绍了一些基本命令,例如:添加别名等,最后我们介绍了Linux文件系统的类型等,那我们接下来继续介绍bash的基础特性,还有一些其它命令。
一、命令补全
用户在shell界面中(或者叫CLI界面中)输入某个字符,解析为是否是内部命令还是外部命令,如果是外部命令,shell程序就会在指定的文件路径下去查找用户所键入字符相对应,如果字符与该目录文件唯一,则可以用tab键补全,如果不唯一,按一下tab不会显示什么,不过第二下就会显示相应的命令列表来给你进行参考,如果按两下tab没有用的话,即使你回车,shell就会提示你没有这个命令。
那么来总结一下,shell程序在接收用户执行命令的请求,分析完成之后,最左侧的字符串会被当成命令,而查找的处理机制分为两类,如果是shell内部命令,就查找其shell的内部命令;如果是外部命令,就会根据PATH环境变量中设定的目录,自左而右逐个搜索目录下的文件名。
当你输入某个命令是,如果是唯一的,按住一次tab就会进行补全,这是因为给定的打头字符如果能唯一标识某命令的程序文件,则直接补全,不能唯一标识某命令的程序文件,则在击tab键一次,给出相应的列表供你选择。
所以命令补全是在给定的起始路径下,以对应路径下的打头字符串逐一匹配起始路径下的每个文件;如果能唯一标识,则直接补全,否则,再一次tab,给出列表。
1.1 目录管理类的命令
首当其冲我们首先要讲的是mkdir和rmdir这两个命令,那么顾名思义,就是创建和删除目录,在Windows中我们创建目录的话,直接右键->新建->文件夹,在Linux中我们则使用mkdir命令在创建目录,其命令格式为:
# mkdir [OPTION]... DIRECTORY...
常用的选项有以下几种:
-p:自动按需创建父目录; -v:verbose, 显示详细过程; -m MODE:直接给定权限;
需要注意的是:路径的基名方为命令的作用对象;基名之前的路径必须得存在;起始基名就是最后一个名称。
接下来说的是删除目录命令,删除目录命令为rmdir,如果前提是该目录是一个空目录才能删除,里面要是有文件或目录的话,我们可以批量删除,命令的用法也是与创建目录的用法相同:
# rmdir [OPTION]... DIRECTORY...
选项如下:
-p:删除某个目录后,如果其父目录为空,并一并删除之; -v:显示过程;
现在有以下两个问题:
1、如何创建/tmp/x/y1, /tmp/x/y2, /tmp/x/y1/a, /tmp/x/y1/b?
2、如何创建a_c, a_d, b_c, b_d?
二、命令行展开
命令行展开无非有一下几类:一类是家目录的,一类是{},之前我们也讲过在命令提示符当中~
代表着当前的家目录或自动展开为用户的家目录,而{}是可承载一个以逗号的路径列表,并能够将其展开为多个路径,以下可示例:
例如:/tmp/{a,b},相当于:/tmp/a, /tmp/b
好的以上就是命令行的展开,那么前两题的答案如下:
# mkdir -pv x/{y1/{a,b},y2} # mkdir -pv {a,b}_{c,d}
现在有个问题3:创建如下结构:
/tmp/mysysroot/ bin sbin etc sysconfig network-scripts usr bin sbin local bin sbin etc lib lib lib64 var cache log run
答案:
# mkdir -pv /tmp/sysroot/{bin,sbin,etc/sysconfig/network-scripts,usr/{bin,sbin,local/{bin,sbin,etc,lib}},lib/lib64,var/{cache,log,run}}
我们可以用tree命令查看一下,需要注意的是,在Linux系统当中,可能是没有这条命令,我们可以使用yum命令安装,至于yum命令的用法,我们随后讲系统管理时再次说明。
# yum -y install tree
命令用法:
# tree [options] [directory] -L level:指定要显示的层级;
# tree /tmp/sysroot/ /tmp/sysroot/ |-- bin |-- etc | `-- sysconfig | `-- network-scripts |-- lib | `-- lib64 |-- sbin |-- usr | |-- bin | |-- local | | |-- bin | | |-- etc | | |-- lib | | `-- sbin | `-- sbin `-- var |-- cache |-- log `-- run 19 directories, 0 files
三、命令的执行状态结果
我们在shell当中输入某个命令时,如果执行对了就会显示其相应的结果,命令输错也有相应的提示,而每个命令的结果其实都有它的返回值的,其结果也无非是正确和错误,那么bash就是通过执行状态的返回值来输出此结果,成功就是0,失败的范围数很大,从1到255,当你的命令执行完成之后,其状态返回值保存于bash的特殊变量$?
中。
# ls anaconda-ks.cfg fstab functions lover.txt shell_scripts # echo "$?" 0 # lss -bash: lss: command not found # $? -bash: 127: command not found
还有,当命令正常执行时,有的还回命令结果的返回值;根据命令及其功能的不同,结果也各不相同。
我们还可以引用命令的执行结果,有以下两种方式:
$(COMMAND)或`COMMAND` # mkdir `date +"%F_%T"` # ll drwxr-xr-x. 2 root root 6 Oct 29 11:13 2017-10-29_11:13:15
四、引用
我们可使用单引号和双引号来引用变量和语句等,差别就是一个是强引用,后者为弱引用,强引用是无论你是不是变量,都给你原样显示,不显示变量结果,只显示变量名称,弱引用与强引用不同的是,弱引用是能显示变量结果的,示例如下:
# echo ‘$PATH‘ $PATH # echo "$PATH" /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
还有一种是命令引用,这个在上面我们讲过,此处略。
五、快捷键
我们在Windows中会知道各种各样的快捷键,最简单的也无非就是复制(Ctrl+c)和粘贴(Ctrl+v)了,在Linux也有其相应的快捷键,我们使用快捷键可以更好的处理Linux上的命令:
Ctrl+a:跳转至命令行行首; Ctrl+e:跳转至命令行行尾; Ctrl+u:删除行首光标所在处之间的所有字符; Ctrl+k:删除光标所在处至行尾的所有字符; Ctrl+l:清屏,相当于clear;
5.1 文件查看类命令
我们之前讲过文件查看类的命令,cat和tac前者是正序,后者是倒序查看,这是两个基本的命令,但是这两个命令直接就显示到底部,并没有一个查看过程,所以more命令和less命令就是将这个查看过程给显示出来,这两个的命令格式也是很简单的:
# more FILE
more命令有个特点:翻屏至文件尾部之后会自动退出;
# less FILE
另一个文件查看类命令为head和tail,不一样的是前者的命令查看前n行,而后者的命令查看倒数n行,格式如下:
# head [options] FILE
选项:
-n # -#
head默认不加选项的话,只是显示前10行默认,tail命令也是,显示为后10行;
# tail [options] FILE
选项:
-n # -# -f:查看文件尾部内容结束后不退出,跟随显示新增的行;
接下来说一下stat命令,stat命令无疑是显示文件或文件系统状态,命令格式为
# stat FILE...
如果查看某个文件状态,就会看到一下结果,我们举例来演示一下:
# stat anaconda-ks.cfg File: ‘anaconda-ks.cfg’ Size: 1612 Blocks: 8 IO Block: 4096 regular file Device: 803h/2051d Inode: 50824939 Links: 1 Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root) Context: system_u:object_r:admin_home_t:s0 Access: 2017-10-03 22:18:51.777786103 +0800 Modify: 2017-10-03 22:18:51.794786340 +0800 Change: 2017-10-03 22:18:51.794786340 +0800
我们主要讲的是倒数后三行,前几行我们很容易理解。如上所示,会出现三个类型的时间,分别是访问时间、修改时间和更改时间。
Access time:表示最后一次访问(仅仅是访问,没有改动)文件的时间; Modify time:最后一次修改文件的时间; Change time:最后一次文件属性修改的时间,包括权限、大小、属性等;
5.2 文件管理工具
有文件查看工具就有它的管理工具,例如我们复制、移动和删除都是用来管理文件的命令,首先我们说一下复制命令,复制命令的过程很简单,将文件的数据流通过管道传送到一个新的文件中去,原文件保留,移动也就将源文件删除,而数据流则保留到了新的文件中,删除就是将数据从磁盘上移除,但是并不代表磁盘块中没有数据,当新的数据写入时,则那些磁盘块就会自动替换,而块中的源数据则不会在保留;现在我们说一下cp命令。
cp命令无非就是复制命令,从源文件产生目标文件的一个过程,有单源复制和多源复制这两大选项,命令格式为:
单源复制:# cp [OPTIONS]... [-T] SOURCE REST 多源复制:# cp [OPTIONS]... SOURCE... DIRECTORY # cp [OPTIONS]... -t DIRECTORY SOURCE...
我们先来说一下单源复制,单源复制:如果DEST不存在:则事先创建此文件,并复制源文件的数据流至DEST中,但如果DEST存在,那就得往两方面考虑,一种是如果DEST是非目录文件:则覆盖其目标文件;另一种是如果DEST是目录文件:则现在DEST目录下先创建一个与源文件同名的文件,并复制其数据流。
单源复制:# cp [OPTIONS]... [-T] SOURCE REST
另一种是多源复制,就是将多个文件复制到一个地方去,如果说DEST不存在有两个选项,第一个就是如果DEST是非目录文件:则直接错误;但如果DEST是目录文件:则分别复制每个文件至目标目录中,并保持原名。
cp的常用选项如下:
-i:交互式复制,即覆盖之前提醒用户确认; -f:强制覆盖目标文件; -r:递归复制目录; -d:复制符号链接本身,而非指向其源文件; -a: ---preserve=all, archive, 用于实现归档; --preserv= mode:权限 ownership:属主和属组 timestamps:时间戳 context:安全标签 xattr:扩展属性 links:符号链接 all:上述所有属性
那么关于移动的命令为mv命令,使用命令的格式也是和cp命令差不多,大致格式为:
mv [OPTION]... [-T] SOURCE DEST mv [OPTION]... SOURCE... DIRECTORY mv [OPTION]... -t DIRECTORY SOURCE...
常用选项:
-i:交互式; -f:force
接下来就是删除命令了,rm命令就是清除命令,这个命令是非常危险的,弄不好的话可以将系统删除,简直就是灰飞烟灭,而且这个删除命令,是不可逆操作的,请慎用这个命令,其命令格式如下:
# rm [OPTIONS]... FILE...
常用选项:
-i:interactive -f:force -r:recursive
如果你想强制删除某个目录,就用以下格式:
# rm -rf /PATH/TO/DIR
其中最危险的操作:
# rm -rf /*
危险的命令推荐使用一下,体验它的严重性,这样保证在生产环境中就会谨慎。需要注意的是:所有不用的文件建议不要直接删除,而是移动某个专用目录。(模拟回收站)
六、变量
变量其实是一个很大的话题,这里就简单说一下,变量就是在内存当中申请一块空间用来存放数据,用变量名称来标识其该变量的内存地址,命名的内存空间;变量类型有很多,大致分为字符型、数值型等,我们以字符型为例,分为精确数值和近似数值。使用变量我们一定要考虑它的存储格式、数据范围和参与运算的性质,那么变量的复制操作为:name=var。
本文出自 “天蝎座” 博客,转载请与作者联系!
以上是关于2017-10-27Linux基础知识bash基础特性的主要内容,如果未能解决你的问题,请参考以下文章