rm -rf *
Linux
,全称GNU/Linux
,含义linux is not unix,自身解释自己,是一套免费使用和自由传播的类Unix操作系统;说白了就是跟你平时用的Windows一样是个操作系统,起到连接管理计算机硬件和软件的一个大程序;
因为具有免费(有商业版收费)、完全开源、支持多用户多任务,跑程序任务稳定
等优点,让他在程序员界是灰常有名气的,企业级项目基本都会部署到Linux系统;
错觉:Linux比Window安全?该命题不一定成立,为啥有此错觉 ,因为在中国,整Windows的人比整Linux的人多,自然发现的隐患就多;
林纳斯·本纳第克特·托瓦兹(Linus Benedict Torvalds,1969年12月28日- )
,看名字就知道他和Linux之前的关系吧,芬兰赫尔辛基人,著名的大佬程序员,我辈之楷模,一般人我不告诉他,git
也是他的杰作,牛吧?主要是头发还多,不用担心学Linux会秃头了吧?
Linux还分不同的版本?是的,正经来说,Linux指的是Linux的内核,但是很多组织及机构呢基于这个内核上进行了自己特色的二次开发,就形成了各自特色的Linux系统;
主要发型版本有Ubuntu,RedHat,CentOS(大数据用的较多,据说快消亡了,初学者不建议用)、AlmaLinux、Rocky Linux、Oracle Linux、Debian、deepin、opensuse、fedora等……
系统间的指令和玩法95%都相同,所以懂得一个就能懂得其他的,莫慌!
上世纪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基础及实操;采用和版本:CentOS7
,这个版本也是大数据集群用的最多的一个版本;
为了避免太臃肿,链接到博主的另一篇博客,图文并茂的讲解;
为了避免太臃肿,链接到博主的另一篇博客,图文并茂的讲解;
为了避免太臃肿,链接到博主的另一篇博客,图文并茂的讲解;Linux基础篇——Linux磁盘操作(磁盘基础知识、分类、分区、挂载、卸载、扩容)详解
为了避免太臃肿,链接到博主的另一篇博客,图文并茂的讲解;Linux基础篇——Linux网络配置(配置网卡、固定IP,固定hostname,终端远程)详解
注意:如果是服务器,关机,重启,一定要在工作群或者邮件先通知相关的服务器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
:直接使用,关机,简单
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密码
会细讲
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;
这些主要目录的解释如下;
/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是一种安全子系统,它能控制程序只能访问特定文件。
为了避免太臃肿,链接到博主的另一篇博客,图文并茂的讲解;Linux基础篇——Linux运行级别及找回root密码
用法
man [命令或配置文件]
help [命令或配置文件]
man ls
help cd
用法
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 5月 27 2021 .
drwxr-xr-x. 13 root root 155 5月 27 2021 ..
drwxr-xr-x. 2 root root 6 4月 11 2018 bin
drwxr-xr-x. 2 root root 6 4月 11 2018 etc
drwxr-xr-x. 2 root root 6 4月 11 2018 games
drwxr-xr-x. 2 root root 6 4月 11 2018 include
drwxr-xr-x. 2 root root 6 4月 11 2018 lib
drwxr-xr-x. 2 root root 6 4月 11 2018 lib64
drwxr-xr-x. 2 root root 6 4月 11 2018 libexec
drwxr-xr-x. 2 root root 6 4月 11 2018 sbin
drwxr-xr-x. 5 root root 49 5月 27 2021 share
drwxr-xr-x. 2 root root 6 4月 11 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 2月 9 10:54 anaconda-ks.cfg_bak
lrwxrwxrwx. 1 root root 7 2月 9 10:55 test -> test.sh
-rw-r--r--. 1 root root 0 2月 9 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 2月 9 10:55 test -> test.sh
-rw-r--r--. 1 root root 0 2月 9 10:55 test.sh
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 2月 9 11:54 learn_english.txt
-rw-r--r--. 1 root root 12 2月 9 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
-date:显示当前日期和时间
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
find
:从指定目录向下递归的遍历其各个子目录,将满足条件的文件或者目录显示在终端。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
gzip/gunzip
:压缩文件/解压zip/unzip
:压缩文件/解压tar
:打包指令,最后打包后的文件是.tar.gz的文件# gzip 压缩和gunzip解压
[root@centos-7 doc]# ll
总用量 32
-rw-r--r--. 1 root root 26850 2月 9 2022 learn_english.txt
drwxr-xr-x. 2 root root 6 2月 8 00:06 others
-rw-r--r--. 1 root root 24 2月 9 2022 test.txt
[root@centos-7 doc]# gzip learn_english.txt
[root@centos-7 doc]# ll
总用量 8
-rw-r--r--. 1 root root 1119 2月 9 2022 learn_english.txt.gz
drwxr-xr-x. 2 root root 6 2月 8 00:06 others
-rw-r--r--. 1 root root 24 2月 9 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 2月 9 2022 learn_english.txt
drwxr-xr-x. 2 root root 6 2月 8 00:06 others
-rw-r--r--. 1 root root 24 2月 9 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 2月 9 2022 learn_english.txt
-rw-r--r--. 1 root root 1267 2月 8 01:28 learn_english.zip
drwxr-xr-x. 2 root root 6 2月 8 00:06 others
-rw-r--r--. 1 root root 24 2月 9 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 2月 9 2022 learn_english.txt
-rw-r--r--. 1 root root 1267 2月 8 01:28 learn_english.zip
drwxr-xr-x. 2 root root 6 2月 8 00:06 others
-rw-r--r--. 1 root root 24 2月 9 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 2月 8 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命令也会略有差别,需要读者有举一反三的精神,有问题多百度。
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
cron时间表达式 shell语句或者shell脚本
:简单的直接写shell语句,复杂的要写入shell脚本,然后执行shell脚本;cron时间表达式具体说明如表3.3.2,这一块是重点;
项目 | 含义 | 取值范围 |
---|---|---|
第一个“*” | 一小时当中的第几分钟 | 0-59 |
第二个“*” | 一天当中的第几小时 | 0-23 |
第三个“*” | 一个月当中的第几天 | 1-31 |
第四个“*” | 一年当中的第几月 | 1-12 |
第五个“*” | 一周当中的星期几 | 0-7(0和7都代表星期日) |
cron时间表达式中的特殊符号含义如表3.3.3,主要是针对一些特殊的调度取值范围。
特殊符号 | 含义 |
---|---|
* | 代表任何时间。比如第一个“*”就代表一小时中每分钟都执行一次的意思。 |
, | 代表不连续的时间。比如“0 8,12,16 * * * 命令”,就代表在每天的8点0分,12点0分,16点0分都执行一次命令 |
- | 代表连续的时间范围。比如“0 5 * * 1-6命令”,代表在周一到周六的凌晨5点0分执行命令 |
*/n | 代表每隔多久执行一次。比如“*/10 * * * * 命令”,代表每隔10分钟就执行一遍命令 |
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:MM
如 04: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 2022 a hadoop
# 将1号at工作移除
[hadoop@centos-7 system]$ atrm 1··
为了避免太臃肿,链接到博主的另一篇博客,图文并茂的讲解;Linux基础篇——Linux进程、服务管理
时至今日,linux软件管理的两大主流门派分别是RPM和DPKG,分别如表3.5.0,本教程中基本都是以CentOS为主,此处就简单介绍下RPM相关的软件机制?
系统代表 | 软件管理机制 | 使用指令 | 在线升级指令 |
---|---|---|---|
RedHat/Fedora | RPM | rpm,rpmbuild | yum |
Debain/Ubuntu | DPKG | dpkg | APT(apt-get) |
rpm
软件管理机制固然方便好用,但是对于新手来说最大吐槽的地方也是,我自己安装的软件去哪里了?特别是如安装一些JDK,git等软件时,要配置环境变量往往出现找不到软件根目录的情况,表3.5.1就是记录rpm的一些默认安装目录。
默认路径 | 说明 |
---|---|
/etc | 一些配置文件放置的目录, 例如 /etc/crontab |
/usr/bin | 一些可可执行文件案 |
/usr/lib | 一些程序使用的动态函数库 |
/usr/share/doc | 一些基本的软件使用手册与说明文档 |
/usr/share/man | 一些 man page 文件 |
rpm qa
,查询服务器上rpm包安装的相关软件,常常配合rpm qa | grep ***
和rpm qa | more
等使用。# 查看git相关的已安装软件
[mrcdev@jq-mrc-250068 ~]$ rpm -qa | grep git
linux-firmware-20180220-62.2.git6d51311.el7_5.noarch
lm_sensors-libs-3.4.0-4.20160601gitf9185e5.el7.x86_64
crontabs-1.11-6.20121102git.el7.noarch
net-tools-2.0-0.22.20131004git.el7.x86_64
git-1.8.3.1-14.el7_5.x86_64
rpm -ivhe package_name
实战代码;
# 安装原版光盘上的 rp-pppoe 软件
[root@study ~]# rpm -ivh /mnt/Packages/rp-pppoe-3.11-5.el7.x86_64.rpm
Preparing... ################################# [100%]
Updating / installing...
1:rp-pppoe-3.11-5.el7 ################################# [100%]
如果安装软件的依赖导致无法安装,但是你执意要安装可以做到吗?其实是可以的,安装软件时还可以有以下安装参数选项;
--nodeps
:使用时机: 当发生软件属性相依问题而无法安装, 但你执意安装时危险性: 软件会有相依性的原因是因为彼此会使用到对方的机制或功能, 如果强制安装而不考虑软件的属性相依, 则可能会造成该软件的无法正常使用!
--prefix
: 新路径使用时机: 要将软件安装到其他非正规目录时。 举例来说, 你想要将某软件安装到 /usr/local 而非正规的 /bin, /etc 等目录, 就可以使用“ --prefix /usr/local ”来处理了,这个较为常用,重点,重点,重点
。
--replacefiles
:使用时机: 如果在安装的过程当中出现了“某个文件已经被安装在你的系统上面”的信息, 又或许出现版本不合的讯息 ( confilcting files) 时, 可以使用这个参数来直接覆盖文件。 危险性: 覆盖的动作是无法复原的!所以, 你必须要很清楚的知道被覆盖的文件是真的可以被覆盖喔! 否则会欲哭无泪!
--replacepkgs
:使用时机: 重新安装某个已经安装过的软件! 如果你要安装一堆 RPM 软件文件时, 可以使用 rpm -ivh *.rpm , 但若某些软件已经安装过了, 此时系统会出现“某软件已安装”的信息, 导致无法继续安装。 此时可使用这个选项来重复安装喔!
--force
: 使用时机: 这个参数其实就是 --replacefiles 与 --replacepkgs 的综合体!
--test
:使用时机: 想要测试一下该软件是否可以被安装到使用者的 Linux 环境当中, 可找出是否有属性相依的问题。 范例为:rpm -ivh pkgname.i386.rpm --test
--justdb
使用时机: 由于 RPM 数据库破损或者是某些缘故产生错误时, 可使用这个选项来更新软件在数据库内的相关信息。
--nosignature
: 使用时机: 想要略过数码签章的检查时, 可以使用这个选项。
--prefix
: 新路径使用时机: 要将软件安装到其他非正规目录时。 举例来说, 你想要将某软件安装到 /usr/local 而非正规的 /bin, /etc 等目录, 就可以使用“ --prefix /usr/local ”来处理了。
--noscripts
:使用时机: 不想让该软件在安装过程中自行执行某些系统指令。 说明:RPM 的优点除了可以将文件放置到定位之外, 还可以自动执行一些前置作业的指令, 例如数据库的初始化
rpm 选项 包名
:-Uvh
:后面接的软件即使没有安装过, 则系统将予以直接安装; 若后面接的软件有安装过旧版, 则系统自动更新至新版;-Fvh
:如果后面接的软件并未安装到你的 Linux 系统上, 则该软件不会被安装; 亦即只有已安装至你 Linux 系统内的软件会被“升级”! yum( Yellow dog Updater, Modified)
是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器。
都有了rpm,为啥还要yum呢?因为yum也是基于RPM包管理,而且能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装,简直不要太方便呀,唯一的缺点就是要网。
yum [option] [查询工作项目] [相关参数]
安装,升级,卸载的选项与参数:
[option]
: 主要的选项, 包括有:
install
: 后面接要安装的软件!
update
: 后面接要升级的软件, 若要整个系统都升级, 就直接 update 即可
remove
:后面接要卸载的软件
相关参数:
-y
: 当 yum 要等待使用者输入时, 这个选项可以自动提供 yes 的回应;
--installroot=/some/path
: 将该软件安装在 /some/path 而不使用默认路径
查询相关的的选项:
search
: 搜寻某个软件名称或者是描述 ( description) 的重要关键字;
list
: 列出目前 yum 所管理的所有的软件名称与版本, 有点类似 rpm -qa;
info
: 同上, 不过有点类似 rpm -qai 的执行结果;
provides
: 从文件去搜寻软件! 类似 rpm -qf 的功能!
实战例子;
yum list | grep xx
:查询yum服务器是否有需要安装的软件yum install xx
:安装指定的yum包yum -y remove xx
:卸载指定的yum包 正确使用的前提下,一般只要你的服务器联网了,就能正常使用yum,但是有些人的可能发现就算联网了yum无法正常使用,甚至是安装或者更新的很慢,怎么回事呢?原因就在于配置文件上选映射的站点问题导致的;
进入实操环节;
# 进入yum的配置文件夹
[root@node1 yum.repos.d]# cd /etc/yum.repos.d/
# 查看下配置文件下,特别注意下CentOS-Base.repo这个文件,可以打开里面的内容看一下
[root@node1 yum.repos.d]# ll
总用量 40
-rw-r--r--. 1 root root 1664 3月 27 10:49 CentOS-Base.repo
-rw-r--r--. 1 root root 1309 10月 23 2020 CentOS-CR.repo
-rw-r--r--. 1 root root 649 10月 23 2020 CentOS-Debuginfo.repo
-rw-r--r--. 1 root root 314 10月 23 2020 CentOS-fasttrack.repo
-rw-r--r--. 1 root root 630 10月 23 2020 CentOS-Media.repo
-rw-r--r--. 1 root root 1331 10月 23 2020 CentOS-Sources.repo
-rw-r--r--. 1 root root 8515 10月 23 2020 CentOS-Vault.repo
-rw-r--r--. 1 root root 616 10月 23 2020 CentOS-x86_64-kernel.repo
# 备份一下自带的映射文件
[root@node1 yum.repos.d]# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
# 下载国内的知名镜像,如网易163,阿里,知名高校等,这里以网易为例
[root@node1 yum.repos.d]# wget http://mirrors.163.com/.help/CentOS7-Base-163.repo
# 清空配置缓存,重新加载下yum资源库
[root@node1 yum.repos.d]# yum clean all
[root@node1 yum.repos.d]# yum makecache
有了rpm
和yum
这么方便的软件管理工具,为啥还要学习Tarball
呢?,原因很简单rpm,/yum
是需要有勤劳的网络雷锋实现给你编译,再做成rpm
包放到相应的网站内供你使用,但是并不是所有人都这么勤快呀,对吧,比如大数据最典型的hadoop家族系列,hads,hive,hbase,以及计算框架spark,flink等,基本rpm都不常用(也不是完全没有rpm的大数据软件,最战斗名族的clickhouse就是推荐rpm安装),都是编译 的Tarball,所以如果学习大数据,Tarball的学习是很重要的,而且tarball安装的最大的一个优点:安装软件的根目录一目了然;此处的Tarball主要讲的是编译后的Tarball,源码系列下一节再讲。
所谓的 Tarball 文件, 其实就是将软件的所有源代码文件先以 tar 打包, 然后再以压缩技术来压缩, 通常最常见的就是以 gzip 来压缩了。 因为利用了 tar 与 gzip 的功能, 所以 tarball 文件一般的扩展名就会写成 .tar.gz 或者是简写为 .tgz 啰! 不过, 近来由于 bzip2 与 xz 的压缩率较佳, 所以 Tarball 渐渐的以 bzip2 及 xz 的压缩技术来取代 gzip 啰! 因此文件名也会变成.tar.bz2, .tar.xz 之类的哩。 所以说, Tarball 是一个软件包, 你将他解压缩之后就能看到里面的文件分布了,所以tar 命令的学习是基础,不熟悉的可以参考下章节3.2.12 压缩和解压指令
;
以 hive的tarball来实战一番。
# 准备好我刚下载的hive tarball
[root@node1 hive]# cd /usr/local/tools/hive
[root@node1 hive]# ll
总用量 226592
-rw-r--r--. 1 root root 232027212 3月 27 11:46 apache-hive-2.3.5-bin.tar.gz
# 解压到当前文件夹
[root@node1 hive]# tar -zxvf apache-hive-2.3.5-bin.tar.gz
# 查看解压后的文件
[root@node1 hive]# ll
总用量 226596
drwxr-xr-x. 10 root root 4096 3月 27 11:46 apache-hive-2.3.5-bin
-rw-r--r--. 1 root root 232027212 3月 27 11:46 apache-hive-2.3.5-bin.tar.gz
# 进入文件夹查看
[root@node1 hive]# cd apache-hive-2.3.5-bin/
# 查看下文件夹内的内容
[root@node1 apache-hive-2.3.5-bin]# ll
总用量 80
drwxr-xr-x. 3 root root 4096 3月 27 11:46 bin
drwxr-xr-x. 2 root root 4096 3月 27 11:46 binary-package-licenses
drwxr-xr-x. 2 root root 4096 3月 27 11:46 conf
drwxr-xr-x. 4 root root 4096 3月 27 11:46 examples
drwxr-xr-x. 7 root root 4096 3月 27 11:46 hcatalog
drwxr-xr-x. 2 root root 4096 3月 27 11:46 jdbc
drwxr-xr-x. 4 root root 20480 3月 27 11:46 lib
-rw-r--r--. 1 root root 20798 5月 7 2019 LICENSE
-rw-r--r--. 1 root root 230 5月 8 2019 NOTICE
-rw-r--r--. 1 root root 277 5月 8 2019 RELEASE_NOTES.txt
drwxr-xr-x. 4 root root 4096 3月 27 11:46 scripts
常见的文件夹解析;
bin
: 一般就是软件的启动相关的脚本,注意window里面一般是.exe对吧,这里肯定不是,一般是一段shell脚本。
conf
:一般是配置相关的文件,涉及一些可配置的动态参数,如内存大小呀,集群名称等
lib
:一般是工具用到的函数库,如果工具用java编写,就基本是jar包了
为何这里用了一般呢,因为每个tar的设计不一样,具体还是要多参考该工具的官网或者文件的readme.md说明书。
本节重在介绍tarball安装说明,具体的hive安装完整步骤可以参考章节4.2.6 安装hive
;
源码?要编译?别讲了,我不用,头大,我不听,其实对于大多数人来说,一讲到源码,毕竟不是自己写的嘛,就头大,特别是用惯了window的同学,安装软件不是下一步,下一步,完成
吗?什么是源码?但是使用工具时,我们是否有这样的困惑,自己增加或者减少该软件的某些功能时, 大概只能求助于当初发行该软件的厂商了! ( 这就是所谓的商机吗?而且还是垄断的哟~ ),或者别说功能模块这么高深,我对软件的某些配置参数,如某个界面的显示比例,某些性能的参数不满意,我想改一下,可以吗?window下。一般是不行的,但是Linux下,如果你有源码,就可以。
tarball
源码src
,如apache-hive-2.3.5-src.tar.gz
; 在大数据行业有个软件的安装就很符合这个特点,那就是调度器工具Azkaban
,如图3.5.8,具体可以参看Azkaban官网,Azkaban源码编译安装;
rpm
源码SRPM
srpm
文件也带有关键字src
,假设我下载了一个 SRPM 的文件, 又不想要修订这个文件内的源代码与相关的设置值, 那么我可以直接编译并安装吗? 当然可以! 利用 rpmbuild 配合选项即可。 选项主要有下面两个:
选项 | 说明 |
---|---|
–rebuild | 这个选项会将后面的 SRPM 进行“编译”与“打包”的动作, 最后会产生 RPM的文件, 但是产生的 RPM 文件并没有安装到系统上。 当你使用 --rebuild 的时候, 最后通常会发现一行字体:Wrote: /root/rpmbuild/RPMS/x86_64/pkgname.x86_64.rpm 这个就是编译完成的 RPM 文件啰! 这个文件就可以用来安装啦! 安装的时候请加绝对路径来安装即可! |
–recompile | 这个动作会直接的“编译”“打包”并且“安装”啰! 请注意, rebuild 仅“编译并打包”而已, 而 recompile 不但进行编译跟打包, 还同时进行“安装”了!不过, 要注意的是, 这两个选项都没有修改过 SRPM 内的设置值, 仅是通过再次编译来产生RPM 可安装软件文件而已。 一般来说, 如果编译的动作顺利的话, 那么编译过程所产生的中间暂存盘都会被自动删除, 如果发生任何错误, 则该中间文件会被保留在系统上, 等待使用者的除错动作! |
针对源码安装这一块呢 ,一般确实用的比较少,就不展开描述了,也不是需要你对每个开源软件都了如指掌,结合自己的行业,针对某两三个软件的 源码很了如指掌已经很厉害了,甚至就可以直接去原厂商上班了。
有些官网软件太大了,我下载起来太慢了 ,我看到网上有个其他镜像文件链接或者网盘也有这个工具,我可不可以从这个地方下载呢?当然,可以,但是你担不担心这个软件被第三方或者黑客更改过再上传到某些网站的呢?黑客这么厉害?嘿嘿,那是当然的,那有没有办法验证这个软件是官网提供的呢?当然有,以Hive的tar包为例子;
常见的指纹验证机制有md5sum / sha1sum / sha256sum
,因为每个文件的内容与文件大小都不相同, 所以如果一个文件被修改之后, 必然会有部分的信息不一样! 利用这个特性, 我们可以使用 MD5/sha1 或更严密的 sha256 等指纹验证机制来判断该文件有没有被更动过!
如图3.5.9,在官网找到你要下载的软件的指纹验证机制文件,软件太大不好下载,这个文件基本上就是秒开或者秒下载的,因为内容非常少;
点击链接部分就会跳转到以下部分;
94e93f71ce64fe59dd50956dcd47162a05c41db152907bec309f093604ab1786 apache-hive-2.3.5-bin.tar.gz
接下来就是在你Linux服务器上利用指纹验证码指令验证下你的包的加码码值,看看是否跟官网一致,如果不一致,那么你下载的软件包还是要慎用哟。
[root@node1 hive]# sha256sum apache-hive-2.3.5-bin.tar.gz
94e93f71ce64fe59dd50956dcd47162a05c41db152907bec309f093604ab1786 apache-hive-2.3.5-bin.tar.gz
为了避免太臃肿,链接到博主的另一篇博客,图文并茂的讲解;花式玩转Linux集群免密登录
#新建java的根folder
mkdir -p /usr/local/tools/java
#切换至/usr/local/tools/java folder下
cd /usr/local/tools/java
#JDK下载链接可以自己去Oracle官网下载查询,需要注册Oracle账号,不然不让下,建议下载tar包,比较好全局掌控
wget JDK下载链接
#解压tar包
tar -zxvf jdk-8u211-linux-x64.tar.gz
#解压后的folder文件名很长,为了方便使用可以设一个软件,类似于Windows下的快捷方式,代码如下
ln -sf /usr/local/tools/java/jdk1.8.0_211/ /usr/local/tools/java/jdk8
#配置环境变量
vim /etc/profile
/*
打开环境变量文件,新增:
export JAVA_HOME=/usr/java/jdk1.8.0_211
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
*/
#重启环境变量服务
source /etc/profile
#在任意folder内输入,检查Java版本,会以下提示版本号,则安装成功
java -version
java version "1.8.0_211"
Java(TM) SE Runtime Environment (build 1.8.0_211-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.211-b12, mixed mode)
为了避免太臃肿,链接到博主的另一篇博客,图文并茂的讲解;Linux通过anaconda来安装python
为了避免太臃肿,链接到博主的另一篇博客,图文并茂的讲解;Linux(CentOS-7)下安装MySQL-5.7.30
为了避免太臃肿,链接到博主的另一篇博客,图文并茂的讲解;Linux基础篇——ftp的安装与配置
为了避免太臃肿,链接到博主的另一篇博客,图文并茂的讲解;Hadoop集群大数据解决方案之搭建Hadoop3.X+HA模式(二)
为了避免太臃肿,链接到博主的另一篇博客,图文并茂的讲解;Hive从入门到放弃——Hive安装和基本使用(二)
为了避免太臃肿,链接到博主的另一篇博客,图文并茂的讲解;Spark从入门到放弃——Spark2.4.7安装和启动(二)
更新中,敬请期待……
更新中,敬请期待……
更新中,敬请期待……
更新中,敬请期待……
更新中,敬请期待……
为了避免太臃肿,链接到博主的另一篇博客,图文并茂的讲解;Apache DolphinScheduler——开源大数据调度器神器
为了避免太臃肿,链接到博主的另一篇博客,图文并茂的讲解;
为了避免太臃肿,链接到博主的另一篇博客,图文并茂的讲解;Apache Superset——开源的大数据探索分析、可视化报表平台
更新中,敬请期待……
本篇文章,更多的是作为大数据学习的一个基础,如果想在linux上有更好的进阶,博主也是智能大概的略知一些方向,我把linux学通,是不是就能找一份好的工作呢?首先通是多通呢?这个很难定义对吧?
书不在多,而在精,如果你能认真读完鸟哥的两本linux,并有一定的实操,基本上你就算linux使用方面
的高手了。
《鸟哥的Linux私房菜——基础学习篇》
《鸟哥的Linux私房菜:服务器架设篇》
《Linux从入门到精通》
《 Linux命令行与shell脚本编程大全》