🍟 前言:
我们已经给大家分享过许多关于Linux基本操作符,我相信大家已经掌握的差不多了,今天让我们学习最后一点关于Linux的操作符。话不多说,我们直接开始。
时间相关的指令
现在我们使用的Linux是没有时间显示的,今天我们先来开个头,不去深入的了解时间相关的指令集。但是时间是非常重要的。
date显示
date 指定格式显示时间:
date +%Y:%m:%d
date 用法:
date [OPTION]... [+FORMAT]
在显示方面,使用者可以设定欲显示的格式,格式设定为一个加号后接数个标记,其中常用的标记列表如下 :
%H : 小时(00..23)
%M : 分钟(00..59)
%S : 秒(00..61)
%X : 相当于 %H:%M:%S
%d : 日 (01..31)
%m : 月份 (01..12)
%Y : 完整年份 (0000..9999)
%F : 相当于 %Y-%m-%d
在设定时间方面
date -s //设置当前时间,只有root权限才能设置,其他只能查看。
date -s 20080523 //设置成20080523,这样会把具体时间设置成空00:00:00
date -s 01:01:01 //设置具体时间,不会对日期做更改
date -s “01:01:01 2008-05-23″ //这样可以设置全部时间
date -s “01:01:01 20080523″ //这样可以设置全部时间
date -s “2008-05-23 01:01:01″ //这样可以设置全部时间
date -s “20080523 01:01:01″ //这样可以设置全部时间
我们在Linux系统中可以直接使用date命令(而不是data命令)进行时间的打印:
但是date命令更适合格式化输出!
什么是格式化输出,就是按照用户想要的格式进行输出,具体例子如下:
要是觉得这样的样子不好看,我们也可以修改打印的形式:
时间戳
时间->时间戳:
date +%s
时间戳->时间:
date -d@1508749502
Unix时间戳(英文为Unix epoch, Unix time, POSIX time 或 Unix timestamp)是从1970年1月1日(UTC/GMT的
午夜)开始所经过的秒数,不考虑闰秒。
其实我们还有一种时间的表示方法:
其中这个数字是什么东西呢?它是从1970年1月1日的午夜12点到现在目前为止所走过的秒数,也被人们称作时间戳。时间戳是递增且唯一的,所以其优点也是很好的体现出来——进行范围查找非常精准。
但是时间戳对于我们人来说是非常不友好的,我们无法一眼将其看出来具体时间。于是我们就可以进行时间上的转换:
但是为什么0是1970年1月1日的八点呢?相信大家都已经明白时差,我们现在使用的服务器是在国内,所以是中八区的时间。
Cal指令
相信日历大家都见过,我们以前使用的老黄历,还有手机、Windows上自带的日历都是我们经常使用的。
我们Linux系统下也有属于自己的日历。
cal命令可以用来显示公历(阳历)日历。公历是现在国际通用的历法,又称格列历,通称阳历。“阳历”又名“太阳历”,系以地球绕行太阳一周为一年,为西方各国所通用,故又名“西历”。
命令格式: cal [参数][月份][年份]
功能: 用于查看日历等时间信息,如只有一个参数,则表示年份(1-9999),如有两个参数,则表示月份和年份
常用选项:
-3 显示系统前一个月,当前月,下一个月的月历
-j 显示在当年中的第几天(一年日期按天算,从1月1号算起,默认显示当前月在一年中的天数)
-y 显示当前年份的日历
在Linux中我们可以直接输入cal指令进行当月日历的查看。
如果我们想浏览1949年的日历,我们就可以进行cal + 1949即可观看:
我们想看以本月为中心的三个月的日历,我们可以cal -3:
要是想看附近5个月的输入cal -5是错误的,cal指令中没有-5的指令。
其实最标准的查看年日历的写法为cal -y +年份,但是不加-y也是可以的。
find指令
find指令顾名思义就是帮我们查找东西的指令,它可以以各种方式来对用户的要求进行查找,所以我们今天不过多的学习,只是进行了解一下。
Linux下find命令在目录结构中搜索文件,并执行指定的操作。
Linux下find命令提供了相当多的查找条件,功能很强大。由于find具有强大的功能,所以它的选项也很多,其中大部分选项都值得我们花时间来了解一下。
即使系统中含有网络文件系统( NFS),find命令在该文件系统中同样有效,只你具有相应的权限。
在运行一个非常消耗资源的find命令时,很多人都倾向于把它放在后台执行,因为遍历一个大的文件系统可能会花费很长的时间(这里是指30G字节以上的文件系统)。
语法:
find pathname -options
功能: 用于在文件树种查找文件,并作出相应的处理(可能访问磁盘)
常用选项:
-name 按照文件名查找文件。
find可以以多种条件进行查找,比如名字、位置、大小,文件属性等等。现在我们以名字进行查找举个例子:
我们就可以在/usr/include目录下以stdio.h的名字去查找对应的文件。
以上只是一小部分。
但是find指令是对我们Linux中的树进行逐一遍历的,要是查找的比较多又比较深就会非常的缓慢。
which指令
which与find不太一样,find指令是用户提供一个路径之后就不需要管了,剩下的交给系统进行深度广度遍历,而which指令不愿意去查找文件,而是查找指令。如果我们想要知道一个指令所对应的路径,我们不需要使用find指令遍历查找,只需要使用which即可。
whereis 指令
whereis指令比较冷门,它是在系统中查找自己曾经安装过的文档,系统安装好的库头文件,压缩包等等查找。
whereis指令并不是为了去查找指令而设置的指令,但是它可以在系统指定的路径下进行搜索包含指令的头文件压缩包等等文件。
文本处理指令
grep指令
grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。
语法: grep [选项] 搜寻字符串 文件
功能: 在文件中搜索字符串,将找到的行打印出来
常用选项:
-i :忽略大小写的不同,所以大小写视为相同
-n :顺便输出行号
-v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行
它使用的是贪心算法进行查找,假设查找的文本为‘A'它就会将所有的’A'全部匹配出来。
我们先随便创建一个文本文件,随便写入一些值进行保存。然后进行查找即可。
这样直接进行搜索对字符的大小写是非常敏感的,搜索‘A'只会出现’A'。
而我们在grep后加入-i(ignore)后,就不会那么敏感。
它就会将大小写全部打印出来。
grep -n是将匹配行的行号也进行打印。
grep -v就比较有趣了,它是将文本中不包含搜索字符的行进行打印出来。就如同逆向匹配。
但是这些都不是grep指令的最优使用,grep指令是进行行过滤的,所以我们可以在一个大文本中以关键字的形式查找对应需要的信息。
所以在以后使用时,我们经常会利用|(管道)进行组合使用。
grep指令是对文本进行处理的,那我们就再拓展几个关于处理文本的指令。
sort指令
sort指令时利用ascall码值对文本中的内容进行排序的。
上面是我们新写入的文本内容,然后我们进行sort排序。
在sort指令后加上-r就可以逆向排序:
uniq指令
uniq的单词意思是唯一的,指将相邻且重复的行只保留唯一行。
这与原文本的内容有差异的,相邻行没有重复内容了。
uniq -d指令是指将相邻且重复的内容进行打印,即逆向输出。
这个命令是用来取出文本中重复行的命令,但是如果行内容相同但不是相邻的就无法去重。所以说取出不彻底。那要怎么完全去重呢?
我们可以先使用sort进行排序,然后进行uniq去重。 用|进行连接。
uniq -c可以统计行出现的个数。
文本指令可以进行组合,对文本内容处理非常方便。
文件解压打包指令
文件为什么要打包压缩?它可以让多个文件变成一个文件,更加节约了空间,但是对更重要的是在网络传输过程中,更节约时间。
zip/unzip指令
压缩解压相信大家并不陌生,在我们Windows中经常会有压缩文件出现。而我们在Windows中使用压缩解压也非常简单方便,直接使用快压……一些软件进行操作即可。但是在Linux中,我们没有这些软件使用,应该怎么解压压缩文件呢?
zip指令
语法: zip 压缩文件.zip 目录或文件
功能: 将目录或文件压缩成zip格式
常用选项:
-r 递 归处理,将指定目录下的所有文件和子目录一并处理
系统中如果没有zip指令时,在root账号下输入:yum install -y zip指令即可下载。
我们想要进行压缩文件时,只需要在zip -r指令后输入需要压缩的目录即可。
注意:千万不要直接输入zip + 目录名,这样就会压缩后的就是一个空目录!!!
而unzip指令是对压缩文件进行解压的指令,非常简单只需要unzip + 压缩文件名即可。但是这样只能解压到当前目录下,并不能转到其他目录中去。如果想移动就得提前将压缩文件进行mv指令转移。
我们先来示范一下:
上面是当前目录下的所有内容,我们想要将lesson3中的内容进行压缩。
然后放到lesson4中进行解压。
我们可以看到lesson4中已经有lesson3的目录了。
我们也可以在输入unzip +压缩文件名 -d +解压到(路径)。即可进行转移压缩,省去使用mv指令。
我们将lesson4中内容全部删除,然后进行压缩操作lesson3.最后直接进行不同路径解压:
s举例:
将test2目录压缩:
zip test2.zip test2/*
解压到tmp目录:
unzip test2.zip -d /tmp
针对不同后缀的压缩包,我们需要使用不同的解压指令进行操作,并不是只有zip指令解压,还有其他指令。
Linux中还有一种压缩文件后锥是以.tgz的形式保存的,那我们就不能使用zip指令进行了。
tar指令
tar指令就是对.tgz形式的文件进行解压打包的,也可以不压缩只打包……tar命令的后缀形式非常多,我们可以了解一下,这里就不过多讲解了。
tar [-cxtzjvf] 文件与目录 .... 参数:
-c :建立一个压缩文件的参数指令(create 的意思);
-x :解开一个压缩文件的参数指令!
-t :查看 tarfile 里面的文件!
-z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩?
-j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩?
-v :压缩的过程中显示文件!这个常用,但不建议用在背景执行过程!
-f :使用档名,请留意,在 f 之后要立即接档名喔!不要再加参数!
-C : 解压到指定目录
我们只是示范tar指令中的一个组合指令。
现在我们将刚才zip指令示范的内容全部清空(将lesson3.zip,lesson4中的lesson3删除),然后进行对应的操作示范:
-c创建一个文件,-f给目标文件进行命名,-z是打包时进行解压操作。所以我们要创建一个压缩包必须进行组合操作:-czf。
一个.tgz的压缩包就这么创建好了!
我们先将leeson3.tgz压缩包mv到lesson4的目录中去
然后进行解压操作:
如果我们想看一下打包解压的过程,可以在-xzf中加入一个v即可。
最后我们想要将其指定到指定目录时,使用tar -cvzf 压缩包名称 -C 目标目录 路径,即可。压缩与解压是一样的都是这个格式,只需要将c换成v即可。在这里就不演示了!!!
案例:
范例一:将整个 /etc 目录下的文件全部打包成为 `/tmp/etc.tar`
[root@linux ~]# tar -cvf /tmp/etc.tar /etc<==仅打包,不压缩!
[root@linux ~]# tar -zcvf /tmp/etc.tar.gz /etc <==打包后,以 gzip 压缩
[root@linux ~]# tar -jcvf /tmp/etc.tar.bz2 /etc <==打包后,以 bzip2 压缩
特别注意,在参数 f 之后的文件档名是自己取的,我们习惯上都用 .tar 来作为辨识。
如果加 z 参数,则以 .tar.gz 或 .tgz 来代表 gzip 压缩过的 tar file ~
如果加 j 参数,则以 .tar.bz2 来作为附档名啊~
上述指令在执行的时候,会显示一个警告讯息:
『`tar: Removing leading `/" from member names`』那是关於绝对路径的特殊设定。
范例二:查阅上述 /tmp/etc.tar.gz 文件内有哪些文件?
[root@linux ~]# tar -ztvf /tmp/etc.tar.gz
由於我们使用 gzip 压缩,所以要查阅该 tar file 内的文件时,就得要加上 z 这个参数了!这很重要的!
范例三:将 /tmp/etc.tar.gz 文件解压缩在 /usr/local/src 底下
[root@linux ~]# cd /usr/local/src
[root@linux src]# tar -zxvf /tmp/etc.tar.gz
在预设的情况下,我们可以将压缩档在任何地方解开的!以这个范例来说,
我先将工作目录变换到 /usr/local/src 底下,并且解开 /tmp/etc.tar.gz ,
则解开的目录会在 /usr/local/src/etc 呢!另外,如果您进入 /usr/local/src/etc
则会发现,该目录下的文件属性与 /etc/ 可能会有所不同喔!
范例四:在 /tmp 底下,我只想要将 /tmp/etc.tar.gz 内的 etc/passwd 解开而已[root@linux ~]# cd /tmp
[root@linux tmp]# tar -zxvf /tmp/etc.tar.gz etc/passwd
我可以透过 tar -ztvf 来查阅 tarfile 内的文件名称,如果单只要一个文件,
就可以透过这个方式来下达!注意到! etc.tar.gz 内的根目录 / 是被拿掉了!
范例五:将 /etc/ 内的所有文件备份下来,并且保存其权限!
[root@linux ~]# tar -zxvpf /tmp/etc.tar.gz /etc
这个 -p 的属性是很重要的,尤其是当您要保留原本文件的属性时!
范例六:在 /home 当中,比 2005/06/01 新的文件才备份
[root@linux ~]# tar -N "2005/06/01" -zcvf home.tar.gz /home
范例七:我要备份 /home, /etc ,但不要 /home/dmtsai
[root@linux ~]# tar --exclude /home/dmtsai -zcvf myfile.tar.gz /home/* /etc
范例八:将 /etc/ 打包后直接解开在 /tmp 底下,而不产生文件!
[root@linux ~]# cd /tmp
[root@linux tmp]# tar -cvf - /etc | tar -xvf -
这个动作有点像是 cp -r /etc /tmp 啦~依旧是有其有用途的!
要注意的地方在於输出档变成 - 而输入档也变成 - ,又有一个 | 存在~
这分别代表 standard output, standard input 与管线命令啦!
这样的压缩后缀有很多很多,如果遇到自己没见过的,可以在某度上进行搜索,里面都有详细的教程。
uname指令
这个指令不是很常用,但是我们必须要了解。
语法:uname [选项]
功能: uname用来获取电脑和操作系统的相关信息。
补充说明:uname可显示linux主机所用的操作系统的版本、硬件的名称等基本信息。
常用选项: -a或–all 详细输出所有信息,依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类 型,硬件平台类型,操作系统名称
以上就是我在用的Linux的基本信息。
那要是我们想查看我们Linux的版本,我们就可以进行一下操作:
要是想查看cpu的信息就可以进行:
下面还有,这里不展示。
还可以看服务器的内存大小:
重要的几个热键[Tab],[ctrl]-c, [ctrl]-d
[Tab]按键---具有『命令补全』和『档案补齐』的功能
[Ctrl]-c按键---让当前的程序『停掉』
[Ctrl]-d按键---通常代表着:『键盘输入结束(End Of File, EOF 戒 End OfInput)』的意思;另外,他也可 以用来取代exit
我们可以使用上下键进行历史命令查找使用。
当我们记不起来一个指令的全称但可以记住首字母时,我们就可以使用tab键进行查找以a开头的所有指令。
以上就是以a开头的目前在Linux可以使用的所以指令。
如果我们想知道现在Linux中有多少可以执行的指令时,我们就可以快速tab两次,然后选择y(yes)来查看所有指令。
可以看出我Linux上目前有1275个可以执行的指令。
如果我们进行运行一个非常长的程序或死循环,当我们想停止此指令时使用ctrl+c即可停止执行。
ctrl+d是让如同C语言中的break语句,让我们跳出一个区域中,当我们一直使用ctrl+d就可以关闭xshell。就如同Windows中的alt+f4。
关机
语法:
shutdown [选项] ** 常见选项:**
-h : 将系统的服务停掉后,立即关机。
-r : 在将系统的服务停掉之后就重新启动
-t sec : -t 后面加秒数,亦即『过几秒后关机』的意思
Linux与Windows互通
其实我们的Linux系统与Windows系统可以进行一个交互。但是这需要我们装一个指令。
在root账号中输入:
yum install -y lrzsz
我们可以直接将windows中的文件、目录直接拖拽到Linux中去。
在当前目录下就有我们传入的zip文件。
我们也可以从Linux中往Windows中传入文件等内容。
这样我们就可以在Windows中看到这个内容。
Linux也可以与Linux进行交互,无论是怎样的交互,但是我们传输的同时最好是打包成压缩包进行传输
以上就是本次全部内容,制作不易还请多多支持,给个三连鼓励一下吧!!