2.11 cp(拷贝)
2.11.1 cp(默认拷贝普通文件)
我们把当前路径中dirnext中的file.txt文件拷贝到当前路径dirnext2目录中,tree一下当前路径就可以看到file.txt已经被我们拷贝到dirnext2目录中了
2.11.2 cp -r(拷贝目录)&&cp -rf(强制拷贝目录)
我们在dirnext目录中创建了一个dirnext3目录,然后递归式的将其拷贝到上级目录中,我们tree一下上级目录即可看到dirnext3已经被我们拷贝到dir这个路径下了。
2.12 mv(剪切、重命名)
2.12.1 如何看待工作目录&&mv剪切(mv src(目录或文件) dst(一定是目录))
默认登录Linux,所处的目录就是你的家目录 /home/xxx,普通用户,一般而言,在自己的家目录下能够畅通无阻
我们这里把当前目录下的file.txt文件剪切到上级目录中
我们还可以将上级目录中的file.txt文件再剪切回来
我们也可以将一个目录dirnext3直接剪切到上级目录也就是dir
我们也可以将dir中的dirnext3目录剪切回dirnext目录当中
2.12.2 (mv src() 路径/文件名/路径+文件名)重命名
如果mv的dst跟的是当前文件名,只会做重命名工作
如果mv的dst跟的是某个路径,他就是纯正的剪切
如果mv的dst跟的是某个路径,且路径后面又跟了个不存在的文件名,它即完成剪切又做了重命名的工作
我们下面就将mydirnext3剪切并重新命名到dirnext2目录当中。
我们要注意的是路径是要有分隔符的,我们剪切并重命名时,dst里面就是/之前的是路径,/之后的是重新命名的名字
这里还有一个问题,我其实是想把mycode 重命名为MYCODE的,可是我没有加路径,所以Linux自动默认为当前路径,Linux就把它理解为,我要把mycode剪切到当前路径并且重新命名为MYCODE了,就出现下面的事故了。
想要在并不处于当前目录下的文件,不改变其路径位置然后重新命名的话,应该是下面那样的指令,但如果我们进入了Mydirnext3中,自然就不用那么麻烦了,直接拿出当前路径的文件并对其重命名就OK了,麻烦的原因就是我们当前的路径位置让我们重命名起来有点麻烦,有点像递归了,我们的目录就是递归定义的,所以这里指令操作起来也有点递归的意思哈,你不觉得吗?
2.13 cat(打印内容较短文本)&&echo(写入文件内容)
2.13.1 wc(word count)&&echo(将状态信息写入文件/屏幕)&&输出重定向&&追加重定向&&输入重定向
echo “hello rygttm” > mylog.txt,输出重定向,如果目标文件不存在,会自动创建并把本来显示到显示器的文本写入到文件中 – 输出重定向
向显示器打印,可以理解为向显示器写入,可以把显示器看作一种"文件",平常c程序获取数据都是从键盘获取到的,所以键盘也可以看作成一种文件。
输出重定向是一种覆盖式写入,在准备写入之前,会先清空文件,然后在写入。
如下图,它只会保持最后一次重定向输入的结果。
echo “hello rygttm” >> mylog.txt,称之为追加重定向,不断地向目标文件新增内容
Linux下一切皆文件
cat < mylog.txt和cat 前者我们将输入重定向由键盘改为从mylog.txt获取输入了,后者cat后面什么都不加,就是等我们从键盘里写东西,然后获取我们输入的东西,输入方向是我们的键盘。
另一个指令wc可以统计指定文件中的字节数,字数,行数,加选项-l我们可以只看到文本的行数
2.13.2 cat -n(输出文本带上行号)&&cat -s(不输出多行空行)
2.14 more&&less(打印内容较长文本)
2.14.1 more
打印适应屏幕大小的文本内容,敲Enter键可将内容向下翻阅,并且只能向下翻阅
2.14.2 less(分批显示,功能更加强大,推荐使用less搜索)
支持上下翻阅,按住上下方向键,敲q可以退出
也可以在冒号部分输入关键字进行文本内容的搜索。
2.15 head&&tail(提取文本前后若干行的内容)
如果不指定提取的行数,默认显示10行内容
2.15.1 |命令行管道
对于计算机来说,最重要的资源就是数据,所以管道指令 | 就会被shell解释为连接两条指令,用来传送数据的一个指令。
如果我们想要提取文本中的500到520行的内容,我们可以通过创建临时文件存储前520行的内容,然后再通过tail -20拿到后20行的内容,这样我们就就可以完成需求了。
但我们其实也可以不用创建临时文件,使用多个管道。
管道最核心的意义在于,可以集联多条命令,让命令和命令组合来完成批量化文本处理的任务,以完成对数据的加工
例如我们下面便通过cat head tail wc等指令得到了文本某些行的内容和具体行的行数
2.16 date(时间)&&cal(日历)
2.16.1 date&&时间戳
对于date,使用者可以设定任意想要显示的格式
date +%Y:%m:%d
将时间以时间戳的方式显示,时间戳是指格林威治时间自1970年1月1日00:00:00至当前时间的总秒数
相应的我们也可以将时间戳转换为当前时间,并且按照我们想要的形式,由于我们在东八区所以时间戳为0时,我们当前时间是北京时间,8点整,格林威治是在英国。
2.16.2 cal
通过指令我们也可以获得任意年份的日历
2.16.3time接口(获取当前的时间戳)
我们可以通过Linux中的time接口获得当前时间的时间戳
2.17 文档搜索三剑客:find(精确查找)whereis(文档.程序.压缩包)which(搜索指令的路径)
2.17.1 find -路径 -name文件名
2.17.2 whereis filename(文件名)
2.17.3 which 指令(搜索指令的路径)
2.17.4 alias(指令重命名)
我们的alias可以重命名ls -a -l -i -n指令,我们通过which指令可以找到我们的myls是一个重命名指令,大家可以看到ls指令中alias带有color,这也可以解释为什么使用ls指令时某些目录带有颜色了。
带有颜色的目录
2.18 grep(文本行过滤工具)
2.18.1 grep [选项] ‘字符串’ 文件(进行字符串的过滤搜索)
2.18.2 grep -n(带上行号)&&grep -v(反向匹配)&&grep -i(忽略大小写)
(大于号)>my.txt,可以清空我们的my.txt文件
2.18.3 带有命令行管道的方式cat my.txt | grep ‘字符串’
采用命令行管道的方式,也可以完成过滤文本的功能
2.18.4 sort(对文本内容进行排序)&&uniq(去掉相邻文本内容中的重复项)
排序的原则是从左开始比较每一个字符的Ascll码值,从小到大排列,如果你带-r选项,那就是从大到小排列。
由于回车字符ascll码值小于哪些字符数字,所以排序时,前面的部分是回车字符
借助管道命令,我们可以完成去掉相邻文本内容的重复项并且完成文本内容的升序排序
2.18.5 补充命令 top(任务管理器)
2.19 zip(打包)&&unzip(解包)
2.19.1 为什么要打包并压缩?
打包:可以防止文件丢失。
压缩:利用特定的算法将我们的文件进行体积的减少,可以帮助我们在网络传输过程中节省时间。
2.19.2 zip -r dirname.zip dirname(打包一个目录)&&zip filename.zip filename(打包一个文件)&&unzip file/dirname.zip(解包)
打包一个目录时,我们应该带上-r选项,进行递归式的打包,打包普通文件不用-r
打包成功了
解包成功
2.19.3 unzip file/dir name.zip -d /dir&&通配符介绍
当我们解压压缩包的时候,一般有两种解压目的地,一种是默认解压到我们当前的位置,另一种是解压到我们默认的目录下。
从下图我们便可以看到,当unzip带上-d选项之后,我们就可以将dirnext.zip压缩包解压到我们根目录下的home目录下。
并且test.txt文件中也依然有我们的you can see me文本
通配符是指通用的字符,用来模糊查找信息,通配符能够代替任意字符,我们可以利用通配符删除某一个目录底下的所有文件,或用来删除某一个特定的后缀名的文件。
他就是用来匹配全部字符的一个通用符号
匹配所有字符之后我们就将home目录下面的所有文件全部删除了
我们也可以通过.txt后缀名的匹配,将dirnext目录下面的.txt文件全部删除。
2.20 tar(压缩+解压)
2.20.1 tar(单纯的一个归档文件)
严格的说,tar 只是一种打包格式,并不对文件进行压缩,主要是为了便于文件的管理,所以打包后的文档大小一般远远大于 zip 和 tar.gz,但这种格式也有很明显的优点,例如打包速度非常快,打包时 CPU 占用率也很低,因为不需要压缩嘛。
我们现在通过tar -cvf name.tar name命令其实就可以看到一个被打包好的dirnext.tar文件包
当然我们也可以通过tar -xvf name.tar name对这个文件包进行解包,如果不带-v选项,我们自然也就无法直观的看到解包过程中文件的显示了。这个选项怎么说呢?就是能让我们解包的时候看的更加全面一点。
我们对tar的选项进行一下解释
-c:建立一个压缩文件的参数指令(create的意思)
-x:解开一个压缩文件的参数指令!
-v:压缩的过程中显示文件!
-f:使用档名,请留意,在 f 之后要立即接档名喔!不要再加参数!
我们这里要再提醒一下大家,我们确实通过cvf进行了目录的打包,但是由于我们没有利用算法对文件进行压缩,这就导致其实我们通过上述命令只能进行打包的操作。
2.20.2 tar.gz格式[简写为tgz,gzip格式 (对归档文件tar压缩) ]
-z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩
我们可以通过带-zcvf选项来对目录进行打包并利用LZ77 算法将-cvf之后的归档文件进行压缩,因此就有了tar.gz的文件 (为遵循 8.3 MS-DOS 文件名称限制,又被简称为.tgz)。
由下图可知,我们利用了LZ77算法的gzip格式进行目录的打包和压缩,与上面的.tar命令不同的其实就是,tar指令执行的选项多加了一个z,这个z其实就是进行gzip算法压缩。
当然如果我们相对一个tar.gz形式的目录进行解压,可以使用-zxvf选项来进行解压,解压就是解包并压缩。
2.20.3 tar.bz2(Burrows-Wheeler算法实现的tar.bz2格式,简写为.tbz2)
-j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩?
相比以上几种格式,tar.gz2 拥有最高的压缩率,但是压缩的时候所需要的时间也最长,CPU 占用率也最高。
如果我们相对一个目录进行超高压缩,以便于我们传输时,就可以采用-jcvf的选项来进行打包和压缩,这里的j就是是否采用bzip2的压缩
当然解包的话我们只需要将c选项换为x选项就可以进行bz2格式的解包了。
2.20.4 tar -zxvf / -jxvf / -xvf -C选项(可以解压到指定的路径下)
这里给大家演示一下,解压到指定路径下,其实这个-C选项和我们unzip的-d选项作用是相同的,我们可以看到通过-C选项我们就把压缩包解压到根目录下的home1目录当中了
2.21 bc指令(运算指令)
这个指令就是一个小玩意,和我们的cal一样,大家了解一下就好。
2.22 uname -r指令(查找软硬件体系结构)
-a或–all 选项详细输出所有信息,依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类型,硬件平台类型,操作系统名称
el就是centos的简称,el7就是centos7的简称
x86_64是我们的硬件结构
3.10.0-1160.71.1是我们的软件结构
el7是我们的商业化用户采用的发行版本,centos7
2.23 常用热键
2.23.1 ctrl+c
强制终止前台影响我输入指令的程序
2.23.2 ctrl+d
自动退出
2.23.3 上下键
我们可以通过上下键,找到最近你曾输入过的命令
2.23.4 ctrl+r&&左右键进行指令的选中
ctrl+r在历史命令中进行智能搜索,然后按住左右键可对命令搜索
下面我们就搜索到了之前,我们打印的文本内容,并执行了一下
2.23.5 history
将我们整个输入历史的指令全部保存起来
直接打印出来我们的历史指令
我们这里将历史搜索指令重定向到cmd.txt文件当中,然后通过less分批显示,并打印cmd.txt的内容
三、总结(看到这里你应该大残了👀👀👀)
其实像这种抽象的知识,我们一般会通过3种方式将其完美掌握
思考,重复,动手,翻译过来就是,多查查linux指令,多用用linux指令,多重复你上面的操作,你未来肯定是个大佬。