大数据之路之Linux篇

Posted ╭⌒若隐_RowYet——大数据

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大数据之路之Linux篇相关的知识,希望对你有一定的参考价值。

目 录

1.Linux简介篇

1.1 为什么要学习Linux

  • 工作需要,从事IT工作或多或少都要设计Linux;
  • 迟早老子会有钱,要买一台苹果Mac坐在星巴克追剧,那你会发现,Mac的命令行模式竟然和Linux惊人的相识,我每次用到Mac命令行操作都是直接网上直接copy的,不知道啥意思,这是我一个做设计的朋友跟我吐槽的,嘿嘿,就怕哪天你copy了个rm -rf *
  • 每次看美国大片,发现那些电脑高手都在一个黑框框里啪啦啪啦的敲键盘,他们在敲啥呢?想不想成为他们一样的高手?

1.2 Linux是什么

  Linux,全称GNU/Linux,含义linux is not unix,自身解释自己,是一套免费使用和自由传播的类Unix操作系统;说白了就是跟你平时用的Windows一样是个操作系统,起到连接管理计算机硬件和软件的一个大程序;
  因为具有免费(有商业版收费)、完全开源、支持多用户多任务,跑程序任务稳定等优点,让他在程序员界是灰常有名气的,企业级项目基本都会部署到Linux系统;
  错觉:Linux比Window安全?该命题不一定成立,为啥有此错觉 ,因为在中国,整Windows的人比整Linux的人多,自然发现的隐患就多;

1.3 Linux创始人

  林纳斯·本纳第克特·托瓦兹(Linus Benedict Torvalds,1969年12月28日- ),看名字就知道他和Linux之前的关系吧,芬兰赫尔辛基人,著名的大佬程序员,我辈之楷模,一般人我不告诉他,git也是他的杰作,牛吧?主要是头发还多,不用担心学Linux会秃头了吧?

图1.2 Linux之父Linus

1.4 Linux主要发行版本

  Linux还分不同的版本?是的,正经来说,Linux指的是Linux的内核,但是很多组织及机构呢基于这个内核上进行了自己特色的二次开发,就形成了各自特色的Linux系统;
  主要发型版本有Ubuntu,RedHat,CentOS(大数据用的较多,据说快消亡了,初学者不建议用)、AlmaLinux、Rocky Linux、Oracle Linux、Debian、deepin、opensuse、fedora等……
  系统间的指令和玩法95%都相同,所以懂得一个就能懂得其他的,莫慌!

图1.4 Linux内核

1.5 Linux和Unix前世今生

  • 上世纪70年代,美国通用电气、麻省理工、贝尔实验室三家合力开发分时操作系统Multics,遗憾最后整个计划以失败告终,但是却流下了宝贵的思想和代码;

  • 贝尔实验室的大佬Ken.Thompson就十分珍惜这些代码,自己在贝尔实验室继续努力,基于B语言开发了一个文件管理系统,其中的思想理念至今保留在了Unix和Linux上,即万物皆文件,小系统问世后在贝尔实验室内部使用,好评如潮;

  • Ken.Thompson的好基友Dennis Ritchie用完后更是称赞不已,觉得这东西不该只局限于贝尔实验室,应该被推广全世界,针对当时的不足以及B语言的不足,于是二位大佬又在B语言的基础上开发了C语言(牛,除了佩服只能佩服),并且用C语言重写了文件管理系统,命名Unix;

  • 80代,商业巨头们闻到了Unix的商机,各自开发了自己的Unix系统;同时也暴露除了两个弊端,商业版价格昂贵不开源;Unix必须跑在高性能的巨型计算机上;

  • 商业巨头插手后,大多数Unix收费,其中有个免费开源版本美国电话电报公司AT&T System V,被荷兰阿姆斯特丹的Vrije大学计算机科学系的Andrew S. Tanenbaum教授改写,命名Minix,用于教学工作,同时还提出一个构思,希望基于Minix的改进,Unix有一天能跑在个人计算机上;

  • Richard M.Stallman大佬,当时首屈一指的权威骇客,痛斥商业巨头对对软件的封闭,认为软件应该开源,商业应该靠服务赚钱,GUN拟定普遍公用版权协议(GeneralPublicLicense,简称GPL),GPL协议下认为自由软件允许用户自由拷贝、修改和销售,但是对其源代码的任何修改都必须向所有用户公开,即设定一个开源、免费的内核,内核以上的各种服务,应用可以是商业巨头门的收费内容;Linux的成功就得益于GPL协议。

  • 大佬Linus基于GUN计划和Minix思想,写了第一版Linux内核,放到了网上,引起了很多技术大佬的反应,各地网络界的雷锋纷纷支持改进,Linux开始不断发展;

  • 商业大佬们再次发现商机,基于Linux内核发展自己的Linux系统;于是百花齐放;

图1.5 Linux和Unix的关系

  以下开始讲Linux基础及实操;采用和版本:CentOS7,这个版本也是大数据集群用的最多的一个版本;

2.Linux系统基础篇

2.1 Linux安装

  为了避免太臃肿,链接到博主的另一篇博客,图文并茂的讲解;

2.2 Linux用户管理、组管理、权限管理

  为了避免太臃肿,链接到博主的另一篇博客,图文并茂的讲解;

2.3 Linux磁盘基础知识、分类、分区、挂载、卸载、扩容等操作;

  为了避免太臃肿,链接到博主的另一篇博客,图文并茂的讲解;Linux基础篇——Linux磁盘操作(磁盘基础知识、分类、分区、挂载、卸载、扩容)详解

2.4 Linux网络配置(配置网卡、固定IP,固定hostname,终端远程登录)

  为了避免太臃肿,链接到博主的另一篇博客,图文并茂的讲解;Linux基础篇——Linux网络配置(配置网卡、固定IP,固定hostname,终端远程)详解

2.5 Linux开关机、重启

  注意:如果是服务器,关机,重启,一定要在工作群或者邮件先通知相关的服务器user,该服务器是否可以重启,否则容易造成部分user的文件丢失,这时你少不了被请喝茶;而且开关机的账号一定要有sudo权限或者是root才行。

  • sync:把内存的数据同步到磁盘上

当我们关机或者重启时,都应该先执行3遍sync,防止数据丢失。重要的事做三遍;

  • shutdown

shutdown -h now:表示立即关机
shutdown -h 1:表示1分钟后关机
shutdown -r now:立即重启
shutdown -k 5 “Waring:maybe the system will be shutdown” :给所有系统的用户发一条警告信息,实际不会重启
man shutdown :查看更多的shutdown参数使用

  • halt

halt:直接使用,关机,简单

  • halt:直接使用,关机
  • reboot

reboot 重启系统

  • logout

logout:注销用户
登录时少用root账号登录,以避免操作失误的损失
平时可登录普通账户,再用“su - 用户名”切换成管理员登录,或者指令前面加sudo,临时将root权限赋值给该账号,前提是要该账号有sudo权限,不懂的可以参考本文2.2 Linux用户管理、组管理、权限管理

  • init

init 6:重启系统,这里采用的是Linux的运行级别,在3.1 Linux运行级别及找回root密码会细讲
init 0:关机,这里采用的是Linux的运行级别,在3.1 Linux运行级别及找回root密码会细讲

2.6 Linux的主要目录介绍

  • Linux的目录中有且只有一个根目录;
  • Linux是以文件的形式管理我们的设备,因此linux系统,一切皆为文件,而细分一下又可以理解为只有文件夹和文件两种;
  • Linux的目录存放有规划,乱放文件显得自己菜

  利用tree命令,查看linux的根目录\\下的主要文件夹;

`sudo yum -y install tree`

tree -L 1
.
├── bin -> usr/bin
├── boot
├── data
├── dev
├── etc
├── home
├── lib -> usr/lib
├── lib64 -> usr/lib64
├── media
├── mnt
├── opt
├── proc
├── root
├── run
├── sbin -> usr/sbin
├── srv
├── sys
├── tmp
├── usr
└── var


  或者可视化软件MobaXterm``xftp查看根目录下的主要文件夹如图2.6.1;

图2.6.1 图形界面化下的根目录下主要目录

  这些主要目录的解释如下;

  • /bin: 是Binary的缩写,这个目录存放着最经常使用的命令。
  • /sbin:s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。
  • /home:存放普通用户的主目录,在Linux中每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
  • /root:该目录为系统管理员,也称作超级权限者的用户主目录。
  • /lib:系统开机所需要最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。
  • /lost+found:这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
  • /etc:所有的系统管理所需要的配置文件和子目录my.conf。
  • /usr/local:这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似与windows下的program files目录,博主就喜欢把工具装在/usr/local/tools
  • /boot:存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。
  • /proc:这个目录是一个虚拟的目录,它是系统内存的映射,访问这个目录来获取系统信息。
  • /srv:service的缩写,该目录存放一些服务启动之后需要提供的数据。
  • /sys:这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统sysfs。
  • /tmp:这个目录是用来存放一些临时文件的。
  • /dev:类似windows的设备管理器,把所有的硬件用文件的形式存储。
  • /media:linux系统会自动识别一些设备,例如U盘光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。
  • /mnt:系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂载在/mnt/上,然后进入该目录就可以查看里面的内容了。
  • /opt:这是给主机额外安装软件所摆放的目录,如安装ORACLE数据库就可放到该目录下。默认为空。
  • /usr/local:这是另一个给主机额外安装软件所安装的目录,一般是通过编译源码的方式安装的程序。
  • /var:这个目录中存放着在不断扩充着的东西,习惯将经常被修改的目录放在这个目录下,包括各种日志文件。
  • /selinux:SELinux是一种安全子系统,它能控制程序只能访问特定文件。

3.Linux实操进阶篇

3.1 Linux运行级别及找回root密码

  为了避免太臃肿,链接到博主的另一篇博客,图文并茂的讲解;Linux基础篇——Linux运行级别及找回root密码

3.2 Linux实用指令

3.2.1 帮助指令man、help

  用法

  • man [命令或配置文件]
  • help [命令或配置文件]
man ls

help cd

3.2.2 文件目录类指令

  用法

  • pwd:Print Working Directory,显示当前工作目录的绝对路径

  • ls:-a:显示当前目录所有的文件和目录,包括隐藏的; -l:以列表的方式显示信息。常用:ls -al 或ll

  • cd:切换文件夹,cd ~:回到自己的家目录;cd …:回到当前目录的上一级目录。

  • mkdir:创建目录;-p:创建多级目录。

  • rmdir:删除空目录。rmdir不能删除非空的目录。如果需要删除非空的目录,需要使用rm -rf。

  • cp:拷贝文件到指定目录; -r:递归复制整个文件夹。-f:强制覆盖不提示的方法:

  • rm:移除文件或目录; -r:递归删除整个文件夹; -f:强制删除不提示。

  • mv:移动文件与目录或重命名,两种功能!

  • touch:创建空文件。可以一次性创建多个文件;

  • ln 给文件创建一个软连接,类似windows的快捷方式 用法:ln -sf [源文件或目录] [软连接名]

# 查看当前路径 pwd
[root@centos-7 local]# pwd
/usr/local

# 预览当前路径的文件 ls -al 或 ll
[root@centos-7 local]# ls -al
总用量 0
drwxr-xr-x. 12 root root 131 527 2021 .
drwxr-xr-x. 13 root root 155 527 2021 ..
drwxr-xr-x.  2 root root   6 411 2018 bin
drwxr-xr-x.  2 root root   6 411 2018 etc
drwxr-xr-x.  2 root root   6 411 2018 games
drwxr-xr-x.  2 root root   6 411 2018 include
drwxr-xr-x.  2 root root   6 411 2018 lib
drwxr-xr-x.  2 root root   6 411 2018 lib64
drwxr-xr-x.  2 root root   6 411 2018 libexec
drwxr-xr-x.  2 root root   6 411 2018 sbin
drwxr-xr-x.  5 root root  49 527 2021 share
drwxr-xr-x.  2 root root   6 411 2018 src

# 创建文件夹 mkdir
[root@centos-7 local]# mkdir tools

# 创建多级文件夹 mkdir -p 
[root@centos-7 local]# mkdir -p tools/java

# 切换目录 cd 
[root@centos-7 local]# cd tools/

# 预览该目录下的内容
[root@centos-7 tools]# ls
java

# copy文件
[root@centos-7 tools]# cp /root/anaconda-ks.cfg java/
[root@centos-7 tools]# cd java
[root@centos-7 java]# ls
anaconda-ks.cfg

# 重命名文件
[root@centos-7 java]# mv anaconda-ks.cfg  anaconda-ks.cfg_bak
[root@centos-7 java]# ls
anaconda-ks.cfg_bak

# 新建文件
[root@centos-7 java]# touch test.sh
[root@centos-7 java]# ls
anaconda-ks.cfg_bak  test.sh

# 创建软链接
[root@centos-7 java]# ln -sf test.sh test
[root@centos-7 java]# ll
总用量 4
-rw-------. 1 root root 1719 29 10:54 anaconda-ks.cfg_bak
lrwxrwxrwx. 1 root root    7 29 10:55 test -> test.sh
-rw-r--r--. 1 root root    0 29 10:55 test.sh

# 删除文件
[root@centos-7 java]# rm -rf anaconda-ks.cfg_bak
[root@centos-7 java]# ll
总用量 0
lrwxrwxrwx. 1 root root 7 29 10:55 test -> test.sh
-rw-r--r--. 1 root root 0 29 10:55 test.sh

3.2.6 文件查看指令

  • cat:查看文件内容。只能浏览文件,而不能修改文件。 -n:显示行号。 结尾加上 | more:分页显示,不会全部一下显示完。
  • more:是一个基于VI编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件的内容。more还内置了很多快捷键: 空白键(Space):向下翻一页 Enter:向下翻一行 q:立刻离开more,不再显示该文件内容 Ctrl + F:向下滚动一屏 Ctrl + B:返回上一屏 = :输出当前行的行号 :f 输出文件名和当前行的行号
  • less:用来分屏查看文件内容,与more相似,但是更强大,支持各种显示终端。less指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示需要加载内容。对于显示大型文件具有较高的效率。
  • head:显示文件的开头部分。-n 5:看前面5行内容。
  • tail:输出文件中尾部的内容。 -n 5:看后面5行内容。 -f:时事追踪该文档的所有更新,Ctrl+z结束
  • >指令:输出重定向。如果不存在会创建文件,否则会将原来的文件内容覆盖。
  • >>指令:追加。如果不存在会创建文件,否则不会覆盖原来的文件内容,而是追加到文件的尾部。
  • echo:输出内容到控制台。
  • history:查看历史指令。
# cat 查看文件内容
[root@centos-7 doc]# pwd
/usr/local/doc
[root@centos-7 doc]# ll
总用量 32
-rw-r--r--. 1 root root 26850 29 11:54 learn_english.txt
-rw-r--r--. 1 root root    12 29 11:55 test.txt

[root@centos-7 doc]# cat learn_english.txt
[root@centos-7 doc]# cat learn_english.txt | more

# more less 分页显示文件内容
[root@centos-7 doc]# more learn_english.txt
[root@centos-7 doc]# less learn_english.txt

# haed 显示文件开头 或者前5行
[root@centos-7 doc]# head learn_english.txt
[root@centos-7 doc]# head -n 5 learn_english.txt

# tail 显示文件末尾,-n 5:看后面5行内容。 -f:时事追踪该文档的所有更新
[root@centos-7 doc]# tail -n 5 learn_english.txt
[root@centos-7 doc]# tail -n 5 -f  learn_english.txt

# echo 输出到屏幕
[root@centos-7 doc]# echo "hello world"
hello world

# 出书重定向>和追加>>
[root@centos-7 doc]# echo "hello world" > test.txt
[root@centos-7 doc]# cat test.txt
hello world
[root@centos-7 doc]# echo "hello linux" >> test.txt
[root@centos-7 doc]# cat test.txt
hello world
hello linux

# 查看历史命令
[root@centos-7 doc]# history
[root@centos-7 doc]# history | grep echo
  139  echo "hello world" >> learn_english.txt
  142  echo "hello world" > test.txt
  159  echo "hello world" > test.txt
  161  echo "hello world"
  162  echo "hello linux" >> test.txt
  164  history | grep echo

# 查看历史命令也可以按住 Ctrl+r,然后输入你要的命名,没有的话一直按Ctrl+r,往上找,直到找到为止
(reverse-i-search)`ech': echo "hello world"

#同时方向键 ↑和↓也可以切换历史命令
[root@centos-7 doc]# history | grep echo

3.2.7 日历指令date、cal

-date:显示当前日期和时间

  1. date “+%Y”:显示当前年份
  2. date “+%d”:显示当前月份
  3. date “+%Y-%m-%d %H:%M:%S”:显示年-月-日 时:分:秒
  4. 设置日期:date -s 字符串时间
  • cal:查看日历指令
  1. cal [月] [年份]:显示某一年或月的日历
# date用法
[root@centos-7 doc]# date "+%Y-%m-%d %H:%M:%S"
2022-02-09 00:12:31

[root@centos-7 doc]# date -s "20220209"
2022年 02月 09日 星期三 00:00:00 CST

# cal 用法
[root@centos-7 doc]# cal 10 02 2022
      二月 2022
日 一 二 三 四 五 六
       1  2  3  4  5
 6  7  8  9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28

[root@centos-7 doc]# cal -3
      一月 2022             二月 2022             三月 2022
日 一 二 三 四 五 六  日 一 二 三 四 五 六  日 一 二 三 四 五 六
                   1         1  2  3  4  5         1  2  3  4  5
 2  3  4  5  6  7  8   6  7  8  9 10 11 12   6  7  8  9 10 11 12
 9 10 11 12 13 14 15  13 14 15 16 17 18 19  13 14 15 16 17 18 19
16 17 18 19 20 21 22  20 21 22 23 24 25 26  20 21 22 23 24 25 26
23 24 25 26 27 28 29  27 28                 27 28 29 30 31


3.2.8 查找指令find、location、grep

  • find:从指定目录向下递归的遍历其各个子目录,将满足条件的文件或者目录显示在终端。
  1. find (搜索范围) -name (文件名):按照指定的文件名查找模式查找文件。
  2. find (搜索范围) -user (用户名):按照指定的用户名查找模式查找文件。
  3. find (搜索范围) -size (+多少/-多少/多少):按照指定的文件大小查找模式查找文件(大于多少/小于多少/等于多少)
  4. 查询 /目录下所有.txt的文件:find / -name "*.txt"
  • locate:locate (搜索文件), 可以快速定位文件路径。locate指令利用事先建立的系统中所有文件名称及路径的locate数据库实现快速定位给定的文件。 locate指令无需遍历整个文件系统,查询速度较快。为了保证查询结果的准确度,管理员必须定期更新locate时刻。 在第一次运行之前,必须使用updatedb指令创建locate数据库。
  • grep:过滤查找,表示将前一个命令的处理结果输出传递给后面的命令处理。经常跟管道一起使用。
    grep [选项] 查找内容 源文件 -n:显示匹配行及行号。 -i:忽略大小写字母。
# find 用法,查找所有txt文件
find / -name "*.txt"

# 查找当前的root用户的文件
[root@centos-7 doc]# find -user root
.
./learn_english.txt
./test.txt
./others

# 查找当前文件大于27k
[root@centos-7 doc]# find -size +25k
./learn_english.txt

# locate 查找文件路径
[root@centos-7 /]# locate learn_english.txt
/usr/local/doc/learn_english.txt
# locate 模糊定位
[root@centos-7 /]# locate "learn_"
/usr/local/doc/learn_english.txt
/usr/share/help/C/orca/howto_learn_modes.page

# grep 查看过滤文本内容
[root@centos-7 /]# cat /usr/local/doc/learn_english.txt | grep -n "hello"
221:hello world

3.2.12 压缩和解压指令

  • gzip/gunzip:压缩文件/解压
  1. gzip (文件):压缩为.gz文件,原来文件不保留。
  2. gunzip (文件):解压缩,同样也不保留源文件。
  • zip/unzip:压缩文件/解压
  1. zip [选项] (压缩后文件xxx.zip) (将要压缩的文件)
  2. unzip [选项] (要解压的文件xxx.zip)
  3. zip -r:递归压缩,即压缩目录
  4. unzip -d (目录):指定解压后的文件的存放目录
  • tar:打包指令,最后打包后的文件是.tar.gz的文件
    tar [选项] xxx.tar.gz (打包的内容)
    选项与参数:
    -c : 创建打包文件, 可搭配 -v 来察看过程中被打包的文件名( filename)
    -t : 察看打包文件的内容含有哪些文件名, 重点在察看“文件名”就是了;
    -x : 解打包或解压缩的功能, 可以搭配 -C ( 大写) 在特定目录解开,特别留意的是, -c, -t, -x 不可同时出现在一串命令行中。
    -z : 通过 gzip 的支持进行压缩/解压缩: 此时文件名最好为 *.tar.gz
    -j : 通过 bzip2 的支持进行压缩/解压缩: 此时文件名最好为 *.tar.bz2
    -J : 通过 xz 的支持进行压缩/解压缩: 此时文件名最好为 *.tar.xz,特别留意, -z, -j, -J 不可以同时出现在一串命令行中
    -v : 在压缩/解压缩的过程中, 将正在处理的文件名显示出来!
    -f filename: -f 后面要立刻接要被处理的文件名! 建议 -f 单独写一个选项啰! ( 比较不会忘记)
    -C 目录 : 这个选项用在解压缩, 若要在特定目录解压缩, 可以使用这个选项。
    -p( 小写) : 保留备份数据的原本权限与属性, 常用于备份( -c) 重要的配置文件
    -P( 大写) : 保留绝对路径, 亦即允许备份数据中含有根目录存在之意;
    –exclude=FILE: 在压缩的过程中, 不要将 FILE 打包!
  1. 压缩:tar -zcvf (压缩后文件名) (要压缩的文件)
  2. 解压:tar -zxvf (要解压的文件)
  3. 解压到指定目录:tar -zxvf (要解压的文件) -C (指定目录),指定解压到的目录要存在。
# gzip 压缩和gunzip解压
[root@centos-7 doc]# ll
总用量 32
-rw-r--r--. 1 root root 26850 29 2022 learn_english.txt
drwxr-xr-x. 2 root root     6 28 00:06 others
-rw-r--r--. 1 root root    24 29 2022 test.txt

[root@centos-7 doc]# gzip learn_english.txt
[root@centos-7 doc]# ll
总用量 8
-rw-r--r--. 1 root root 1119 29 2022 learn_english.txt.gz
drwxr-xr-x. 2 root root    6 28 00:06 others
-rw-r--r--. 1 root root   24 29 2022 test.txt
[root@centos-7 doc]# gunzip learn_english.txt.gz
[root@centos-7 doc]# ll
总用量 32
-rw-r--r--. 1 root root 26850 29 2022 learn_english.txt
drwxr-xr-x. 2 root root     6 28 00:06 others
-rw-r--r--. 1 root root    24 29 2022 test.txt

# zip 和 unzip
[root@centos-7 doc]# zip learn_english.zip learn_english.txt
  adding: learn_english.txt (deflated 96%)
[root@centos-7 doc]# ll
总用量 36
-rw-r--r--. 1 root root 26850 29 2022 learn_english.txt
-rw-r--r--. 1 root root  1267 28 01:28 learn_english.zip
drwxr-xr-x. 2 root root     6 28 00:06 others
-rw-r--r--. 1 root root    24 29 2022 test.txt
[root@centos-7 doc]# unzip learn_english.zip
Archive:  learn_english.zip
replace learn_english.txt? [y]es, [n]o, [A]ll, [N]one, [r]ename: y
  inflating: learn_english.txt
[root@centos-7 doc]# ll
总用量 36
-rw-r--r--. 1 root root 26850 29 2022 learn_english.txt
-rw-r--r--. 1 root root  1267 28 01:28 learn_english.zip
drwxr-xr-x. 2 root root     6 28 00:06 others
-rw-r--r--. 1 root root    24 29 2022 test.txt

# tar解压和压缩
[root@centos-7 doc]# tar -zcvf ../files/learn_english.tar.gz ./learn_english.txt
./learn_english.txt
[root@centos-7 doc]# ls ../files/
learn_english.tar.gz

[root@centos-7 doc]# cd ../files/
[root@centos-7 files]# ll
总用量 4
-rw-r--r--. 1 root root 1204 28 01:37 learn_english.tar.gz
[root@centos-7 files]# tar -zxvf ./learn_english.tar.gz -C ../doc/
./learn_english.txt
tar: ./learn_english.txt:时间戳 2022-02-09 11:54:20 是未来的 123292.314216 秒之后

  以上就是一些常用的linux命令,实际的linux命令是列举不全的,而且不同版本系统的linux命令也会略有差别,需要读者有举一反三的精神,有问题多百度。

3.3 Linux调度任务crontab,at

  • 基本语法
    crontab [选项]
  • 选项说明
表3.3.1 crontab选项参数
选项功能
-e编辑crontab定时任务
-l查询crontab任务
-r删除当前用户所有的crontab任务
# 查看crontab任务
[root@centos-7 files]# crontab -l
no crontab for root

# 编辑crontab任务
[root@hadoop101 ~]# crontab -e 
# 进入crontab编辑界面。会打开vim编辑你的工作。

#新增,然后wq! 保存退出后就可生效
*/1 * * * * echo "hello world" >> /usr/local/doc/hello.txt

# 然后监控该文件,发现确实每分钟会追加一条hello world,证明成功了
[root@centos-7 doc]# tail -n 50 -f /usr/local/doc/hello.txt
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world



# 再查看crontab任务
[root@centos-7 files]# crontab -l
*/1 * * * * echo "hello world" >> /usr/local/doc/hello.txt

# 删除root下的所有crontab
[root@centos-7 files]# crontab -r

# 再查看crontab任务
[root@centos-7 files]# crontab -l
no crontab for root

  • 编辑crontab任务
    语法:cron时间表达式 shell语句或者shell脚本 :简单的直接写shell语句,复杂的要写入shell脚本,然后执行shell脚本;

  cron时间表达式具体说明如表3.3.2,这一块是重点;

表3.3.2 cron时间表达式
项目含义取值范围
第一个“*”一小时当中的第几分钟0-59
第二个“*”一天当中的第几小时0-23
第三个“*”一个月当中的第几天1-31
第四个“*”一年当中的第几月1-12
第五个“*”一周当中的星期几0-7(0和7都代表星期日)

  cron时间表达式中的特殊符号含义如表3.3.3,主要是针对一些特殊的调度取值范围。

表3.3.3 cron时间表达式中的特殊符号含义
特殊符号含义
*代表任何时间。比如第一个“*”就代表一小时中每分钟都执行一次的意思。
代表不连续的时间。比如“0 8,12,16 * * * 命令”,就代表在每天的8点0分,12点0分,16点0分都执行一次命令
-代表连续的时间范围。比如“0 5 * * 1-6命令”,代表在周一到周六的凌晨5点0分执行命令
*/n代表每隔多久执行一次。比如“*/10 * * * * 命令”,代表每隔10分钟就执行一遍命令

  cron时间表达式的一些例子。

表3.3.4 cron时间表达式举例
时间举例含义
45 22 * * * 命令在22点45分执行命令
0 17 * * 1 命令每周1 的17点0分执行命令
0 5 1,15 * * 命令每月1号和15号的凌晨5点0分执行命令
40 4 * * 1-5 命令每周一到周五的凌晨4点40分执行命令
*/10 4 * * * 命令每天的凌晨4点,每隔10分钟执行一次命令
0 0 1,15 * 1 命令每月1号和15号,每周1的0点0分都会执行命令。注意:星期几和几号最好不要同时出现,因为他们定义的都是天。非常容易让管理员混乱。

  注意:时至今日,crontab调度因为其命令行操作的不方便以及易错性,早已经基本不用了,取而代之的是各种稳定的调度器,如Azkaban、DolphinScheduler等,但是其经典cron时间表达式却一直在各种时间调度器上沿用,希望读者必须牢记掌握。

  • at 一次性调度任务
    选项与参数:
    -m : 当 at 的工作完成后, 即使没有输出讯息, 亦以 email 通知使用者该工作已完成。
    -l: at -l 相当于 atq, 列出目前系统上面的所有该使用者的 at 调度;
    -d : at -d 相当于 atrm , 可以取消一个在 at 调度中的工作;
    -v : 可以使用较明显的时间格式列出 at 调度中的工作列表;
    -c : 可以列出后面接的该项工作的实际指令内容。
    TIME: 时间格式, 这里可以定义出“什么时候要进行 at 这项工作”的时间, 格式有:
    HH:MM04:00,在今日的 HH:MM 时刻进行, 若该时刻已超过, 则明天的 HH:MM 进行此工作。
    HH:MM YYYY-MM-DD 如; 04:00 2015-07-30
    强制规定在某年某月的某一天的特殊时刻进行该工作!
    HH:MM[am|pm] [Month] [Date] 如:04pm July 30
    也是一样, 强制在某年某月某日的某时刻进行!
    HH:MM[am|pm] + number [minutes| hours|days|weeks]now + 5 minutes , 04pm + 3 days
    就是说, 在某个时间点“再加几个时间后”才进行。
# 5分钟后执行保存
[hadoop@centos-7 system]$ at now + 5 minutes
at> /bin/sync
at> /bin/sync
at> /sbin/reboot
at> <EOT>    # 按ctrl+d 结束
job 1 at Tue Feb 22 11:01:00 2022

# 查看该账号下的at工作
[hadoop@centos-7 system]$ at -l
1       Tue Feb 22 11:01:00 进阶大数据架构师学习路线

架构师成长之路之~Node.js安装篇

linux学习之路二 ------登陆篇

苏宁人工智能研发中心智能创意平台架构成长之路--大数据架构篇

大数据成神之路-Netty(源码解析篇)

阿里巴巴大数据之路——数据模型篇