---------------jiuanc---------------
在线手册:http://man.linuxde.net/
本节是基于CentOS进行学习
本书目录:
Linux搭建JavaEE环境
Linux之大数据定制篇
Linux之Python定制篇
本人介于软件开发,故而本篇只会接触少量内核
免费、开源、安全、高效、稳定、处理高并发非常强悍的操作系统,现在很多的企业级的项目都部署到其上。
发行版本:CentOSE、Redhat、Ubuntu、Suse、红旗Linux
目前主要操作系统:
最早是Unix,开发厂商进行对其改装,但由于成本太高,大多数人用不起。故而,有了Linux(GNU计划的一个部分)
免费与收费、软件与支持、安全性、使用习惯、可执行性
Linux都好于Windows
应用场景:Windows:桌面
Linux:服务器
学习Linux需要一个环境,需先创建一个虚拟机,然后在虚拟机上安装一个CentOS系统
1:去BIOS里修改设置开启虚拟化设备支持(开机时f2),将其设置为Enzble
进入BIOS后,找到Configuration选项,选择Intel Virtual Technolog并回车,将光标移至Enable,回车。f10保存并退出。
2:安装虚拟机软件
网易镜像:http://mirrors.163.com/centos/6/isos/
一:创建虚拟机空间
1:创建创建,选择推荐(典型)的那个
2:选择稍后安装操作系统
3:选择Linux,选择CentOS 64位
4:起名,选择位置
5:分配内存空间(20G差不多了)
6:完成
7:编辑虚拟机设置
8:内存调成2G差不多
9:处理器根据电脑硬件设置数量,本机上的在任务管理器中显示
10:网络配置问题,
虚拟机的网络连接三种形式的说明:
优点:通讯方便
缺点:假如教室很多人都装了这个,那就会造成Ip地址冲突
NAT模式(网络地址转换方式):在前面基础上,有一个王五(Windows,192.168.0.40),他也装了个Linux系统(192.168.0.30)。选择NAT模式。那么,母机上就会出现两个IP地址(192.168.0.40和192.168.100.200)且Linux会变为(192.168.100.50),这两个点100就会形成一个网络环境,其余点0的是一个网络环境。也就是说,李四将不会找到王五的Linux系统,但王五的Linux系统可以找到李四(通过代理)。
优点:Linux可以访问外网,不会造成IP冲突。
仅主机模式:独立的IP,不和外网发生联系
二:开始安装系统(CentOS)
1:点最上方:虚拟机-设置
2:点:CD/DVD,选择使用ISO映像文件,并将其挂上,确定
3:开启此虚拟机.选SkIP(光标进入其界面后,按Tab键即可)。一路next。选择中文简体。选择美式英语。选择基本存储系统。选择:是,忽略所有数据。取一个主机名(如:Hadoop)。设置时区,默认上海。设置密码(如:123456,在实际开发中设置强度很高的密码,可用密码生成器)。
选择创建自定义布局:
下一步–格式化–下一步–选择现在自定义(基本系统:留下兼容程序库和基本。桌面都保留)–下一步–重新引导–前进–同意–前进–创建用户(可以不用,因为已经有了root用户,注:root用户权限很高,不建议使用)–一路前进–kdump(当系统意外崩溃的时候,保留下点东西,用于分析)–点是
点其他–输入用户名,密码–完成!
在其页面,右键–使用终端打开----即可使用
配置网络:右上角的那个两个电脑图标–System eth0
作用:可以直接粘贴命令在Windows和CentOS系统之间。可以设置Windows和CentOS的共享文件夹。
1:进入centOS
2:点击VM中的虚拟机----安装VMware Tools
3:centOS会出现一个vm的安装包 (将其移动到文件系统的opt中)
4:点击右键解压,得到一个安装文件
5:进入该Vm解压的目录,该文件在/root/桌面/vmware-tools-distrib/下
6:安装./vmware-install.pl(也可使用命令进行安装)
7:全部使用默认设置即可
8:需要reboot(在终端输入的指令)重新启动即可生效
设置共享文件夹:
注:一般开发都是用远程
在Windows下,设置个文件夹,作为共享的
在CentOS中,虚拟机–选项–共享文件夹–总是启用–然后选中刚才的那个文件夹–注:只读如果标上就修改不了–确定
在CentOS中,文件系统–mnt–hgfs–即找到
即成功!
只有一个根目录,其余全在这里面(类似一个树)
Linux:一切皆文件
故:1:Linux只有一个根目录
2:Linux的各个目录存放的内容是规划好的,不用乱放文件
3:Linux是以文件的形式管理我们的设备,因此Linux系统,一切皆为文件
sshd:远程用户
1:开发时,Linux服务器是开发小组共享的
2:正式上线的项目是运行在公网的
3:因此程序员需要远程登录到CentOS进行项目管理或者开发
4:远程登录客户端有Xshell(远程登录且操作)、Xftp(远程上传和下载)
1:是目前最好的远程登录到Linux操作系统的软件,速度快,无乱码问题
2:是一个强大的安全终端模拟软件,支持SSH1,SSH2,Microsoft Windows平台的TELNET协议
3:可在Windows界面下用来访问远端不同系统下的服务器
1:注:需要Linux开启一个sshd服务(该服务会监听22端口)(在终端setup----系统服务—标了#就是打开的)
2:傻瓜式安装
3:打开–左上角第二行–打开(新建一个会话)–名称(Linux的ip地址,ip地址查询:在终端ifconfig)–协议是SSH–主机(和上面IP一样)–端口号(22)–完成
连接下他–接受并保存–输入Linux的用户名和密码----出现[root@hadoop ~]# 即成功
接下来,就可操作
假如那个电脑没mysql,你需要将mysql传上去,就需要到这个了。
是一个基于Windows平台的功能强大的SFTP、FTP文件传输软件。使用了Sftp以后,Windows用户能安全地在UNIX、Linux和Windows PC之间传输文件。
1:傻瓜式安装
2:新建一个会话–名称(可以随意,也可Linux的ip地址,ip地址查询:在终端ifconfig)–主机(和上面IP一样)–协议是SFTP(另一个21号端口未开)–端口号(22)–用户–完成
连接–输入密码–当然,因为是root用户,故而对应的是root文件–想要传输,右键传输就行
解决乱码:点击左边那个图标的下面有一个小齿轮的,选择UTF-8
所有的Linux系统都会内建vi文本编辑器
vim具有程序编程的能力,可以看作vi的增强版本,可以主动的以字体颜色辨别语法的正确性,方便程序设计,代码补完、编译及错误跳转等方便编程的功能特别丰富
正常模式:打开一个文档就可进入了,在这可使用快捷键
插入/编辑模式:在这模式下,程序员可以输入内容。按下i,I,o,O,a,A,r,R都可进入这个模式
命令行模式:在这个模式中,可以提供你相关指令,完成读取、存盘、替换、离开vim、显示行号等的动作是在此模式中完成的。
使用vim开发一个Hello.java程序,保存
在XShell连接后,先输入:ll(显示当前目录:所有文件)----再输入:vim Hello.java(创建了文件,打开了正常模式)----输入:i(打开编辑模式)----输入一个hello word的代码----在插入模式写完后,就需要回到一般模式(输入ESC)----输入::(接下来就可输入命令)wq(保存)----成功—查询:vim Hello.java----输入::(到命令行模式)q(退出)
模式的相互转换,在前提到,在命令行下输入:vim xxx,进入一般模式。输入:i,进入编辑模式。输入ESC,回到一般模式。在一般模式,输入::或者/,即可到命令模式。命令模式到一般模式还是输入ESC。
命令行的一些::wq(保存退出),:q(退出),:q!(修改后不保存,强制退出)
1:在一般模式,拷贝当前行:yy(鼠标光标所在位置),拷贝当前行向下的5行:5yy,并粘贴(p)
2:在一般模式,删除当前行:dd,删除当前行向下的5行:5dd
3:在文件中查找某个单词:/关键字,回车,即可出来,输入n就是查找下一个。如查找hello,那就再一般模式输入:/hello,即可成功。/代表进入命令行
4:设置文件的行号,取消文件的行号::set nu和:set nonu
5:编辑/etc/profile文件(vim /etc/profile),使用快捷键到底文档的最末行:G和最首行:gg。(这是在正常模式下执行)
6:在一个文件中输入:hello,然后又想撤销,就在正常模式下输入: u
7:编辑/etc/profile文件,并将光标移动到20行 :shift+g
步骤:显示行号::set nu----输入20这个数字----输入shift+g
其余百度即可!
shutdown
shutdown -h now:立即关机
shutdown -h 1:一分钟后关机
shutdown -r now:立即重启
halt:关机
reboot:重启系统
syn:把内存的数据同步到磁盘,建议每次结束后都使用一次
尽量少使用root登录,可用普通用户登录,再用:su-用户名。来切换成系统管理员身份
在提示符下输入logout(远程登录时有效)即可退出连接Linux,即不再占有其
组的概念:比如root用户就可在root组,建一个xm用户,可将其放在组1,也可放在组2…
家目录的概念:根目录下有一个:/home/,在这下面就有各个创建的用户对应的家的目录,当用户登录时,会自动进入到自己的家目录。 例如:/home/xm(xm的家目录)
Linux系统是一个多用户任务的操作系统,任何一个要使用系统资源的人,都需要向管理员申请一个账号。
useradd [可选] 用户名
useradd -g 指定目录 用户名
注:如果没有指定组,那么其默认会创建一个和用户名字一样的组,并将用户存在其中
例如:创建一个用户useradd xm,也会自己创建一个组,也有了家目录
passwd 用户----然后输入设置的密码即可
userdel 用户名
删除用户xm,但要保存家目录:userdel xm
删除用户xm,且不保存家目录:userdel -r xm
id 用户名
当用户权限不足时,可以通过su-来切换到高权限用户。注:权限高的用户切换到权限低的用户,不需要密码,反之需要
su - 切换用户名
exit
例:切换到zf:su - zf
返回到原来的:exit
whoami或者who am i
类似于角色,系统可以对有共性的多个用户进行统一的管理
groupadd 组名
例:groupadd dw(创建dw组)
groupdel 组名
例:groupdel dw(删除dw组)
创建一个用户zwj,给其指定一个组wd
先创建一个组:groupadd wd----再创建:useradd -g wd zwj
usermod -g 用户组 用户名
例:将zwj又换到sl组
接着上一个----先创建一个组:groupadd sl----再进行改组:usermod -g sl zwj
用户的配置文件,用于记录用户的各种配置信息
vim /etc/passwd执行后,每行的含义(当然值得是用户,就类似于前面所创建的zwj,他的信息):用户名;密码(口令);用户id(用户标识符);组id(组标识符);注释性描述;主目录(家目录);shell
口令配置文件(用户的密码就是存在这,这是加密文件)
vim /etc/shadow执行后,每行的含义(当然,这都是加密的。根本看不出来):登录名;加密口令;最后一次修改时间;最小时间间隔;最大时间间隔;警告时间;不活动时间;失效时间;标志
组的配置文件,记录Linux包含的组的信息
每行的含义:组名;口令(密码);组标识符;组内用户列表(看不到)
系统的运行级别配置文件:/etc/inittab
0:关机
1:单用户(找回丢失密码)
2:多用户无网络服务
3:多用户有网络服务
4:保留
5:图形界面
6:重启(设置为这,则其就会一直处于重启状态)
init 运行级别
例:切换5–>3,然后关机
init 3----init 0
思路:进入到单用户模式(不需要密码),然后修改root密码
在开机页面按Enter----输入:e----把光标高亮到第二行(编辑内核)----在输入一个:e----空格+1(进入到单用户模式)----Enter----输入:b(进入到root)----使用:passwd root修改密码
vim /etc/inittab----id:所要改的级别:initdefault:
当我们对某个指令不熟悉时,我们可以使用Linux提供的帮助指令来了解这个指令的使用方法
man 命令或配置文件
例:查看ls命令的帮助信息
man ls
help 命令
例:查看cd命令的帮助信息
help cd
语法:pwd
例:显示当前工作目录的绝对路径
pwd
语法:ls 选项
常用的选项:-a:显示当前目录所有的文件和目录,包括隐藏的
-l:以列表的方式显示信息
例:查看当前目录的所有内容信息,以列表形式
ls -al
语法:cd 参数
常用参数(cd后面跟着的):cd ~或者cd :回到自己家目录
cd (空格) …:回到当前目录的上一级目录
例:使用绝对路径切换到root目录
cd /root
使用相对路径到/root目录
注:这个是根据当前目录写 假如在/usr/lib
cd …/…/root
表示回到当前目录的上一级目录
cd …
回到家目录
cd或者cd ~
语法:mkdir 选项 要创建的目录
选项:-p:创建多级目录
例:创建一个目录:/home/dog
mkdir /home/dog
创建多级目录:/home/animal/tiger
mkdir -p /home/animal/tiger
非空用:rm -rf
语法:rmdir 选项 要删除的空目录
例:删除一个空目录/home/dog
rmdir /home/dog
语法:touch 文件名称
例:创建一个空文件hello.txt
touch hello.txt
例:创建多个
touch h.txt u.txt
语法:cp 选项 source dest
选项:-r:递归复制整个文件夹
例:将/home/aaa.txt文件拷贝到/home/bbb目录下
cd /home ----cp aaa.txt bbb/
递归复制整个文件夹,将/home/test 下面的所有拷贝到/home/zwj
cd /home----cp -r test/ zwj/
注:当目标目录下有相同文件,会提示你是否覆盖。用:\cp -r test/ zwj/就不会提示,直接进行覆盖!
语法:rm 选项 要删除的文件或者目录
选项:-r:递归删除整个文件夹
-f:强制删除而不提示
例:将/home/aaa.txt删除
cd /home----rm aaa.txt
例:强制递归删除整个文件夹/home/bbb
cd /home----rm -rf bbb/
语法:mv 旧文件名 新文件名(功能描述:重命名)
语法:mv /temp/movefile/targetFolder(功能描述:移动文件)
例:将/home/aaa.txt 文件 重新命名为pig.txt
cd /home----mv aaa.txt pig.txt
例:将/home/pig.txt文件移动到/root目录下
cd /home----mv pig.txt /root/
语法:cat 选项 要查看的文件
选项:-n:显示行号
例:/etc/profile文件内容,并显示行号
cat /etc/profile
注:cat一般带着一个:| more显示,可以分页
例 : cat /etc/profile | more
注:其指令有若干的快捷键
语法:more 要查看的文件
快捷:空白键:翻向下一页
Enter:向下翻一行
q:立即离开more,不再显示该文件内容
Ctrl+F:向下滚动一屏
Ctrl+B:返回上一屏
=:输出当前的行号
:f:输出文件名和当前的行号
例:采用more查看文件/etc/profile
more /etc/profile
支持各种终端显示。less是根据显示需要来加载内容,效率高
语法:less 要查看的文件
快捷:空白键:向下翻动一页
[pagedown]:向下翻动一页
[pageup]:向上翻动一页
/字串:向下搜寻[字串]的功能:n:向下查找,N:向上查找
?字串:向下搜寻[字串]的功能:n:向上查找,N:向下查找
q:离开这个less程序
例:采用less查看一个文件/opt/金庸.txt
cd /opt----less 金庸.txt
覆盖:覆盖掉原先的内容
追加:是把文件追加到一个文件的尾部
1:语法:ls -l > 文件 (列表的内容写入文件中(覆盖写))
例:ls -l > add.txt(把ls -l查询到的列表写入到add.txt,如果不存在就创建,有则直接覆盖)
2:语法:ls -l >> 文件 (列表的内容追加到文件的末尾)
例:ls -l >> b.txt
3:语法:cat 文件1 > 文件2 (将文件一的内容覆盖到文件2)
4:语法:echo “内容” >> 文件 (将这个内容写入到文件,如果是>就是覆盖)
例:将/home目录下的文件列表写入到/home/info.txt中
ls -l /home/ > /home/info.txt
将当前日历信息追加到/home/mycal文件中【cal:显示当前日历】
cal >> /home/mycal
语法:echo 选项 输出内容
例:使用echo指令输出环境变量
echo $PATH
使用echo指令输出hello,world
echo “hello,world”
语法:head 文件 (默认前10行)
head -n 5 文件 (查看前5行,5可以是任意行数)
例:查看/etc/profile的前5行内容
cd /etc----head -n 5 /profile
也可head -n 5 /etc/profile
语法:tail 文件 (默认10行)
tail -n 5 文件 (查看后5行,5可以是任意数字)
tail -f 文件 (实时追踪该文档的所有更新)
例:查看/etc/profile最后5行代码
tail -n 5 /etc/profile
实时监控mydate.txt,看看到文件有变化时,是否看到,实时的追加日期
tail -f mydate.txt
软链接也叫符号链接,类似于Windows里的快捷方式,存放了链接其他文件的路径
语法:ln -s 原目录 软链接明
例:在/home目录下创建一个软链接linkToRoot,连接到/root目录
cd /home ----ln -s /root linkToRoot
删除软链接linkToRoot
rm -rf linkToRoot
注:删除软链接不用带/
语法:history
例:1:显示所有的历史命令
history
2:显示最近使用过的10十个指令
history 10
3:执行历史编号为5的指令
查询之后----!5即可执行
语法:date 显示当前时间
date +%Y 显示当前年份
date +%m 显示当前月份
date +%d 显示当前哪一天
date “+%Y-%m-%d %H:%M:%S” 显示年月日时分秒
语法:date -s (字符串时间)
例:设置当前系统时间,设置为:2020-11-11 11:22:22
date -s “2020-11-11 11:22:22”
语法:cal 选项 (不加选项,显示本月日历)
例:显示当前日历
cal
显示2020年日历
cal 2020
将从指令目录向下递归地遍历其各个子目录,将满足条件的文件或者目录显示在终端
语法:find 搜索范围 选项 文件名
选项:-name :按照指定的文件名查找模式查找文件
-user :查找属于指定用户名所有文件
-size :按照指定的文件大小查找文件
例:1:按文件名:根据名称查找/home目录下的hello.txt文件
find /home -name hello.txt
2:按拥有者:查找/opt目录下,用户名称为nobody的文件
find /opt -user nobody
3:查找整个linux系统下大于20m的文件(+n大于 -n小于 n等于)
find / -size +20M
小于20m:find / -size -20M
等于20m:find / -size 20M
4:查找/下所有的.txt文件
find / -name *.txt
利用事先建立的系统中所有文件名称及路径的locate数据库实现快速定位给定的文件。locate指令无需遍历整个文件系统,查询速度较快。但为了保证查询的准确性,管理员必须定期更新locate时刻
语法:locate 搜索文件
注:由于其是基于数据库查询,所以第一次运行前,必须使用updatedb指令创建locate数据库
例:请使用locate指令快速定位hello.txt文件所在目录
updatedb----locate hello.txt
管道符号| :表示将前一个命令的处理结果输出传递给后面的命令处理
grep:过滤查找
管道符 | :表示将前一个命令的处理结果输出传递给后面的命令处理
语法:grep 选项 查找内容
选项:-n:显示匹配行及行号
-i: 忽略字母大小写
例:请在hello.txt文件中,查找"yes"所在行,并显示行号
cat hello.java | grep -n yes
语法:gzip 文件 (将文件压缩为*.gz文件)
gunzip 文件.gz
例:1:gzip压缩,将/home下的hello.txt文件进行压缩
cd /home ----gzip hello.txt
2:gunzip解压缩,将/home下的hello.txt.gz文件进行解压缩
cd /home----gunzip hello.txt.gz
语法:zip 选项 XXX.zip 将要压缩的内容
unzip 选项 XXX.zip
zip选项:-r:递归压缩,即压缩目录
unzip选项:-d<目录>:指定解压后文件的存放目录
例:将/home下的所有文件进行压缩成mypackage.zip
zip -r mypackage.zip /home
将mypackage.zip解压到/opt/tmp目录下
unzip -d /opt/tmp mypackage.zip
语法:tar 选项 XXX.tar.gz 打包的内容
选项:-c:产生.tar打包的文件
-v:显示详细信息
-f:指定压缩后的文件名
-z:打包同时压缩
-x:解压.tar文件
例:1:压缩多个文件,将/home/a1.txt和/home/a2.txt压缩成a.tar.gz
cd /home----tar -zcvf a.tar.gz a1.txt a2.txt
2:将/home的文件夹压缩成myhome.tar.gz
tar -zcvf myhome.tar.gz /home
3:将a.tar.gz解压到当前目录
tar -zxvf a.tar.gz
4:将myhome.tar.gz解压到/opt/tmp2目录下
tar -zxvf myhome.tar.gz -C /opt/tmp2
注:要有-C
在Linux的每个用户必须属于一个组,不能独立于组外。在Linux中每个文件有所有者、所在组、其他组的概念
1:所有组
2:所在组
3:其他组
4:改变用户所在的组
一般来说为文件的创建者,即为所有者
语法:ls -ahl
例:创建一个组police,在创建一个用户tom,将tom放在police组,然后使用tom来创建一个文件ok.txt,查看情况
groupadd police----useradd -g police tom----指定密码,登录tom----touch ok.txt----ls -ahl即可查看文件所有者
语法:chown 用户名 文件名
例:使用root创建一个文件apple.txt,然后将其所有者修改成tom
touch apple.txt----chown tom apple.txt
这玩意前面有
语法:ls -ahl
语法:chgrp 组名 文件名
例:使用root用户创建文件orange.txt,看看当前文件属于哪个组,然后将这个文件所在组修改到police组
touch orange.txt----ls -ahl----chgrp police orange.txt
其他组:
除文件的所有组的用户外,系统的其他用户都是文件的其他组
语法:usermod -g 组名 用户名
语法:usermod -d 目录名 用户名 改变该用户登录的初始目录
例:创建一个bandit组,将tom这个用户从原来的police组,修改到这
groupadd bandit----usermod -g bandit tom
基于文件和目录的权限
首先创建一个用户:tom(useradd tom),在此用户下创建一个组:police(groupadd police),在此目录下创建一个文件:ok.txt(touch ok.txt),后查询此(ls -l):- rw - r - - r - - . 1 tom police 6 3月 18 19:24 ok.txt
对其解释:
第一个符号:他是代表这是什么东西
-:普通文件
d:目录
l:软链接
c:字符设备( 鼠标、键盘)
b:块文件(硬盘)
三个一组,"rw -"这是一组:表示文件所有者权限
r:读的权限
w:写的权限(文件:写的权限不代表他可删除,当对于文件的目录有写权限,才可删除)
-:没有权限
x:代表可执行(文件),可进入目录(目录)
"r - -"是一组:文件所在组的用户拥有的权限
此为:只有读的权限
"r - -"是一组:文件其他组用户拥有的权限
那个"1"所处的位置:如果最后是文件,则其代表他的硬链接的数
如果是目录,则代表其子目录个数
tom:文件所有者
police:文件所在组
"6"所处的位置:代表文件的大小(6个字节)
如果是后面是目录,其为:4096
“3月 18 19:24”:代表问价最后的修改时间
通过chmod指令,可以修改文件或者目录的权限
u:所有者 g:所有组 o:其他人 a:所有人(u、g、o的总和)
语法:1:chmod u=rwx,g=rx,o=x 文件目录名
语法:2:chmod 0+w 文件目录名 (代表给其他人增家一个写的权限)
语法:3:chmod a-x 文件目录名 (代表给所有人减少一个可 执行/进入 的权限)
例:1:给abc文件的所有者读写执行的权限,给所在组读执行权限,给其他组读执行权限
chmod u=rwx,g=rx,o=rw zbc
2:给abc文件的所有者除去执行的权限,增加组写的权限
chmod u-x,g+w abc
3:给abc文件的所有用户添加读的权限
chmod a+w abc
规则:r=4 w=2 x=1 rwx=7
chmod u=rwx,g=rx,o=x 文件目录名
相当于:chmod 751 文件目录名
例:将/home/abc.txt文件的权限修改成rwxr-xr-x,使用数字的方式实现
chmod 755 /home/abc.txt
前面依然有,在6.2.2,此为深入
语法:chown 用户名 文件名 (改变文件的所有者)
语法:chown 用户名:所有组 文件名 (改变文件的所有者和所有组)
-R:如果是目录,加上这个就是修改旗下所有的
例:1:将/home/abc.txt问价的所有者修改成tom
chown tom /home/abc.txt
2:将/home/kkk目录下所有文件和目录的所有者都修改成tom
chown -R tom /home/kkk
语法:chgrp 所在组 文件
例:将/home/abc.txt文件的所有组修改成shaolin
chgrp shaolin /home/abc.txt
将/home/kkk目录下所有文件和目录的所在组都修改成shaolin
chgrp -R shaolin /home/kkk
注:简单了(就如下面的那个)就不用写脚本,复杂了就需要写shell脚本
任务调度:是指系统在某个时间执行的特定的命令或程序
任务调度分类:1:系统工作:有些重要的工作必须周而复始的执行。如:病毒扫描
2:个别用户工作:个别用户可能希望执行某些程序,比如对mysql数据库的备份
语法:crontab 选项
选项:-e:编辑crontab定时任务
-l:查询crontab任务
-r:删除当前用户所有的crontab任务
例:设置任务调度文件:/etc/crontzb
设置个人任务调度。执行crontab -e命令
接着输入任务到调度文件,如:*/1 * * * * ls -l /etc/>/tmp/to.txt
意思说每小时的每分钟执行ls -l/etc/>/tmp/to.txt命令
细节说明:
第一个"*":一小时当中的第几分钟 0-59
第二个"*":一天当中的第几小时 0-23
第三个"*":一月当中的第几天 1-31
第四个"*":一年当中的第几月 1-12
第五个"*":一周当中的星期几 0-7(0\7都为周日)
特殊符号说明:
*:代表任何时间
,:代表不连续的时间 如:“0 8,12 * * *”,就代表8点0分,12带你0分
-:代表连续的时间范围
*/n:代表每隔多久执行一次
例:1:每隔一分钟,就将当前的日期信息,追加到/tmp/mydate文件中
写一个shell脚本/home/mytask1.sh:date>>/tmp/mydate----给mytask1.sh一个可执行权限----crontab -e----*/1 * * * * /home/mytask1.sh
具体步骤:在/home下:vim mytask1.sh ,输入date >> /tmp/mydate
给其权限:chmod 744 /home/mytask1.sh
crontab -e ,输入:*/1 * * * * /home/mytask1.sh
2:每隔一分钟,将当前日期和日历都追加到/home/mycal文件中
具体步骤:在/home下:vim mytask2.sh ,输入date >> /tmp/mycal和cal >> /tmp/mycal
给其权限:chmod 744 /home/mytask2.sh
crontab -e ,输入:*/1 * * * * /home/mytask2.sh
3:每天凌晨2:00将mysql数据库testdb,备份到文件mydb.bak
具体步骤:在/home下:vim mytask3.sh,输入:/usr/local/mysql/bin//mysqldump -u root -proot testdb > /tmp/mydb.bak
给其权限:chmod 744 /home/mytask3.sh
crontab -e ,输入:0 2 * * * /home/mytask2.sh
1:conrtab -r :终止任务调度
2:conrtab -l:列出当前有哪些任务调度
3:service crond restart 重启任务调度
1:最多支持四个主分区
2:系统只能安装在主分区
3:扩展分区要占一个主分区
4:mrb最大只支持2TB,但拥有最好的兼容性
1:支持无限多个 主分区(但操作系统可能限制,比如windows下最多128个分区)
2:最大支持18EB的大容量(EB=1024PB,PB=1024TB)
3:Windows7 64位以后支持gtp
无论有几个分区,归根结底只有一个根目录
硬盘下的分区----挂载----Linux中的文件
查看分区和挂载:lsblk -f
Linux硬盘分为IDE硬盘和SCSI硬盘,目前基本上是SCSI硬盘
对于IDE硬盘,驱动器表示符号为“hdx”,其中“hd”表面分区所在设备的类型,这里是指IDE硬盘了。“x”为盘号(a为基本盘,b为基本从属盘,c为辅助主盘,d为辅助从属盘),“”代表分区,前四个分区用数字1到4表示,他们是主分区或扩展分区,从5开始就是逻辑分区。例:hda3表示为第一个IDE硬盘上的第三个主分区或扩展分区,hdb2表示为第二个IDE硬盘上的第二个主分区或扩展分区。
对于SCSI硬盘则标识为“sdx~”,SCSI硬盘是用“sd”来表示分区所在设备的类型的,其余则和IDE硬盘的表示方法一样
如果想看大小:lsblk
如:|-sdal ext4 b3ece1-f1-9547-4352-b6f5-a36486d09853 /boot
|-sdal:分区情况
ext4:分区类型
b3ece1-f1-9547-4352-b6f5-a36486d09853:唯一标识符的40位不重复的字符串
/boot:挂载点
需求是给我们的Linux系统增加一个新的硬盘,并且挂载到/home/newdisk
1:给虚拟机添加硬盘
虚拟机----设置----硬盘----添加----硬盘----选中SCSI,下一步----创建新的虚拟磁盘----分配空间,选中将虚拟磁盘拆分成多个文件,下一步----完成 重启即可查看到sdb分区
2:分区
fdisk /dev/sdb----n----w 分区即分好
开始对/sdb分区:
m:显示命令列表
p:显示磁盘分区 同 fdisk -1
n:新增分区
d:刷新分区
w:写入并退出
3:格式化
mkfs -t ext4 /dev/sdb1 其意思:把我们的/dev/sdb1格式化成ext4(分区类型)
4:挂载
先创建一个目录:mkdir /home/newdisk----挂载:mount /dev/sdb1 /home/newdisk
取消挂载:进入那个目录(home)----umount /dev/sdb1
5:设置可以自动挂载(永久挂载)
vim /etc/fstab----在其内那些分区的第一行添加:
/dev/sdb1 /home/newdisk ext4 defaults 0 0-----退出去后:mount -a—完成
语法:df -h
例:查询系统整体磁盘使用情况
df -lh:以列表的方式显示信息
语法:du -h /目录
查询指定目录的磁盘占用情况,默认为当前目录
-s:指定目录占用大小汇总
-h:带计量单位
-a:含文件
–max-depth=1:子目录深度
-c:列出明细的同时,增加汇总值
例:查询/opt目录的磁盘占用情况,深度为1
du --ach --max-depth=1 /opt
1:统计/home文件夹下文件的个数
ls -l /home | grep “^-” | wc -l
解释:grep “^-”:过滤查找以-打头的 ^:定位符
wc -l:wc就是统计
2:统计/home文件夹下目录的个数
ls -l /home | grep “^d” | wc -l
3:统计/home文件夹下文件的个数,包括子文件夹里的
ls -lR /home | grep “^-” | wc -l
解释:R:是递归的意思,可统计包括子文件下的
4:统计文件夹下目录的个数,包括子文件夹里的
ls -lR /home | grep “^d” | wc -l
5:以树状显示目录结构
如果没有tree----就安装:yum install tree----一路:y
tree
Linux的:会有一个ip(192.168.184.125),用来连接Windows
Windows:一:VM虚拟网卡(192.168.184.1),用以和Linux连接
二:真实网卡(192.168.2.125),用以和外界联络
编辑----虚拟网络编辑器(N)
直接在虚拟网络编辑器中修改
因为要出去,故而要和Windows的网关保持一致
编辑----虚拟网络编辑器(N)----选中最上面的那个要查看的名称----点击NAT设施(S)----即可发现
在Windows中通过指令(ipconfig)查看
指令:ping 目的主机 功能描述
例:ping www.souhu.com
登陆后,通过界面的来设置自动获取IP
系统----首选项----网络连接----点那个System eth0----编辑----选上自动连接
缺点:Linux启动后会自动获取IP,但每次IP可能不一样。不适用于做服务器,因为服务器的IP是固定的,不能变。
直接修改配置文件来指定IP,并可以连接到外网
vim /etc/sysconfig/network-scipts/ifcfg-eth0
ifcfg-eth0:IP存放地
要求:将IP地址配置成静态的,IP地址为192.168.184.130
执行:vim /etc/sysconfig/network-scipts/ifcfg-eth0
注:这几个信息是必须有的,如果没有就加上。
IPADDR=192.168.184.125
GATEWAY=192.168.184.2 (网关)
DNS1=192.168.184.2 (域名,和网关保持一致)
开始修改:IPADDR=192.168.184.130 (指定IP)
BOOTPROTO=static (以静态方式获取IP)
ONBOOT=yes (启用)
保存退出----重启网络服务(service network restart)
1:在Linux中,每个执行的程序(代码)都称为一个进程。每一个进程都分配一个ID号
2:每一个进程,都会对应一个父进程,而这个父进程可以复制多个子进程。例如www服务器
3:每个进程都可能以两种方式存在的:前台和后台
所谓前台进程就是用户目前的屏幕上可以进行操作的。
后台进程则是实际在操作,但由于屏幕上无法看到的进程,通常使用后台方式执行。
4:一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中。直到关机才结束。
语法:ps -a :显示当前终端的所有进程信息
语法:ps -u :以用户的格式显示进程信息
语法:ps -x :显示后台进程运行的参数
例:使用ps -aux | more
ps显示的信息选项:
USER 用户
PID 进程识别号
%CPU 占用的CPU
%MEM 占用内存
VSZ 使用虚拟的内存
RSS 使用物理内存情况
TTY 终端机号
STAT 当前进程的状态(S:休眠 R:运行 N:表示进程拥有比普通优先级更低的优先级 D:短期等 待 Z:僵死进程 T:被跟踪或者被停止)
START 启动时间
TIME 此进程所消耗CPU时间
COMMAND 进程执行时的命令行
语法:ps -ef :以全格式显示当前所有的进程
-e:显示所有进程
-f:全格式
PPID 父进程
UID 用户ID
CMD 启动进程所用的命令和参数
C CPU用于计算执行优先级的因子。数值越大,越表明是CPU密集型运算
例:使用ps -ef | grep sshd
查询sshd的父进程
若某个进程执行一半需要停止,或是已消了很大的系统资源时,此时可以考虑停止该进程
语法:kill 选项 进程号 (通过进程号杀死进程)
语法:killall 进程名称 (通过进程名称杀死进程,也支持通配符,这在系统因负载过大而变得很慢时很有用)
选项:-9:表示强迫进程立即停止
例:1:踢掉某个非法登录用户jack
先查询有哪些远程登录,和进程号:ps -aux | grep sshd----kill 4010
注:sshd时远程登录
2:终止远程登录服务sshd,在适当时候再次重启sshd服务
先查询有哪些远程登录,和进程号:ps -aux | grep sshd----kill 3908 (直接弄掉所有远程登录)----
3:终止多个gedit编辑器
killall gedit
4:强制杀掉一个终端(终端的名称:bash)
先查询终端进程:ps -aux | grep bash----只要有(/bin/bash)的,就代表其是一个终端
kill -9 4119
语法:pstree 选项
选项:-p:显示进程的PID
-u:显示进程的所属用户
例:1:请你树状的形状显示进程的pid
pstree -p
2:请你树状的形式进程的用户id
pstree -u
服务本质就是进程,但是是运行在后台的,通常都会监听某个窗口,等待其他程序的请求,比如(mysql、sshd),因此我们又称为守护进程
语法:service 服务名
服务名:start:启动一个服务
stop:停止一个服务
restart:重启
reload:重载
status:状态
注:在CentOS7.0以后,不再是service,而是systemctl
例:查看当前防火墙的状况,关闭防火墙和重启防火墙
查看状况:service iptables status----关闭service iptables stop----重启service iptables restart
细节讨论:
1:关闭或者启用防火墙后,立即生效
2:这种方式只是临时生效,当重启系统后,还是回归以前对服务的设置
3:如果希望设置某个服务自启动或者关闭永久生效,要使用chkconfig指令
telnet ip 端口
注:需重启
语法:查看服务:chkconfig --list | grep xxx
要是查看所有的:chkconfig --list
语法:和上一个一样:chkconfig 服务名 --list
语法:设置:chkconfig --level 5 服务名 on/off
例:设置sshd,5自启动
chkconfig --level 5 sshd on
1:使用setup -> 系统服务
2:ls -l /etc/init.d/服务名称
1:将sshd服务在运行级别5下设置为不自动启动
chkconfig --level 5 sshd off
2:当运行级别为5时关闭防火墙
chkconfig --level 5 iptables off
3:在所有运行级别下关闭防火墙
chkconfig iptables off
top在执行一短时间可以更新正在运行的进程
语法:top 选项
选项:-d 秒数:指定top命令每隔几秒更新,默认值三秒在top交互模式当中可以执行的命令
-i:使top不显示任何闲置或者僵死进程
-p:通过指定监控进程ID来仅仅监控某个进程的状态
注:使用top查询后
top 20:52:22 up 3:32, 3 users, load average: 0.35, 0.24, 0.30
20:52:22:当前时间
3:32:运行时间
3 users:当前登录用户数
load average: 0.35, 0.24, 0.30:负载均衡
注:Mem是内存使用情况
按“q”退出
1:监视特定用户
top:输入此命令,回车,查看执行的进程
u:然后输入“u”回车,再输入用户名
2:终止指定的过程
top:输入此命令,回车,查看执行的进程
k:然后输入“k”回车,再输入要结束的进程ID号
3:指定系统状态更新的时间(每隔10秒自动更新)
top -d 10
P:以CPU使用率排序,默认就是此项
M:以内存的使用率排序
N:以PID(进程号)排序
q:退出top
语法:netstat 选项
选项:-an:按一定顺序排列输出
-p:显示哪个进程载调用
例:请查看sshd的服务的信息
netstat -anp sshd
查看所有的网络服务
netstat -anp | more
一种用于互联网下载包的打包及安装工具
rpm包名基本格式:
一个rpm包:firefox-45.0.1-1.el6.centos.x86_64.rpm
名称:firefox
版本号:45.0.1-1
适用的操作系统:el6.centos.x86_64,表示centos6.x的64位系统
注:如果是i686、i386表示32位系统,noarch表示通用
查询已经安装的rpm列表:rpm -qa | grep xx
rpm -qa:查询所安装的所有rpm软件包
例:rpm -qa | more
rpm -q 软件包名:查询该软件是否安装
rpm -qi 软件包名:查询软件包信息
rpm -ql 软件包名:查询软件包中的文件
rpm -qf 文件全路径名:查询文件所属的软件包
语法:rpm -e RPM包的名称
注:强制删除增加 --nodeps即可,不建议这样做
例:删除firefox软件包
rpm -e firefox
注:删除一个包时,但另一个正在使用,两个选择,放弃或者强制
语法:rpm -ivh RPM包全路径名称
参数说明:i=install 安装
v=verbose 提示
h=hash 进度条
实例:先找到firefox的安装rpm包,你需要挂载上我们安装centos的iso文件,然后到/media下去找rpm包
挂载:虚拟机----设置—CD/DVD----使用ISO映像文件
注:切换到/opt安装
yum是一个Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包
语法:yum list | grep xx
语法:yum install xxx
例:请使用yum的方式来安装firefox
先查看firefox这个rpm包再yum服务器有没有yum list | grep firefox
安装:yum install firefox
接下来进入傻瓜式操作系列
先将软件通过xftp5上传到/opt----解压缩到/opt----配置环境变量的配置文件vim /etc/profile:
写到末尾
JAVA_HOME=/opt/jdk的版本号
PATH=/opt/jdk的版本号/bin;$PATH
export JAVA_HOME PATH
注:需要注销用户,环境变量才能生效:logout
注:写一个hello.java文件,用java hello运行
解压到/opt----启动tomcat 输入 ./startup.sh----开放端口vim /etc/sysconfig/iptables
开放端口:输入后会出来的有一个这个:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
将22改成8080
重启防火墙:service iptables restart
完成!
先进入/opt目录
执行:yum -y install make gcc-c++ cmake bison-devel ncurses-devel
执行:tar xvf mysql-5.6.14.tar.gz
进入:cd mysql-5.6.14
编译:cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data -DSYSCONFDIR=/etc -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock -DMYSQL_TCP_PORT=3306 -DENABLED_LOCAL_INFILE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci
编译安装:make && make install
查看是否有mysql用户及用户组:cat /etc/passwd 查看用户列表
cat /etc/group 查看用户组列表
如果没有就创建:groupadd mysql
useradd -g mysql mysql
修改/usr/local/mysql权限:chown -R mysql:mysql /usr/local/mysql
初始化配置,进入安装路径(在执行下面的指令),执行初始化配置脚本,创建系统自带的数据库和表:
进入 cd /usr/local/mysql
初始化 scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql
注:在CentOS 6.8版操作系统的最小安装完成后,在/etc目录下会存在一个my.cnf,需要将此文件更名为其他的名字,如:/etc/my.cnf.bak,否则,该文件会干扰源码安装的MySQL的正确配置,造成无法启动。修改名称,防止干扰:mv /etc/my.cnf /etc/my.cnf.bak
并设置开机自启动
[注意在 /usr/local/mysql 下执行]
先执行:cp support-files/mysql.server /etc/init.d/mysql
后执行:chkconfig mysql on
service mysql start --启动MySQL
修改密码:
先进入:cd /usr/local/mysql/bin
后:./mysql -u root -p
后:mysql> SET PASSWORD = PASSWORD(‘12345’); 12345就是写密码的地方
quit退出
步骤:1:下载获得redis-3.0.4.tar.gz后将它放入我们Linux目录/opt
2:解压命令:tar -zxvf redis-3.0.4.tar.gz
3:解压完成后进入目录:cd redis-3.0.4
4:执行:make (这玩意是用来编译的,大多数的源代码包都经过这一步进行编译)。会显示gcc命令未找到,cc命令未找到。其是由C语言写的。其需要编译安装。所以需要下载gcc和gcc-c++
5:yum install gcc
yum install gcc-c++
检测是否安装成功:gcc -v
6:再在redis-3.2.5目录下再次执行make
会报错
解决方案:运行make distclean (清除残余文件) 之后再make
7:执行:make install (安装的意思)
需要编写Shell程序来管理集群
也就是说:Shell驱动内核
Shell是一个命令解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以通过Shell来启动、挂起、停止甚至编写一些程序
1:脚本以#!/bin/bash开头
2:脚本需要有可执行权限
例:创建一个Shell,输出hello,word
先创建一个目录:mkdir shell,再进入其内
创建一个文件:vim myShell.sh
给其写入:#!/bin/bash
echo “hello,wordd!”
执行:分配权限
chmod 744 myShell.sh:给所有者一个可执行的权限
执行:./myShell.sh :相对路径
/root/shell/myShell.sh :绝对路径
Shell变量分为:系统变量和用户自定义变量
系统变量: H O M E 、 HOME、 HOME、PWD、 S H E L L 、 SHELL、 SHELL、USER等等
比如:echo $HOME
先创建一个目录:mkdir shell,再进入其内
创建一个文件:vim myShell.sh
给其写入:#!/bin/bash
echo “echo $HOME”
再给其所有者可执行的权限即可
基本语法:定义变量:变量=值
撤销变量:unset 变量
声明静态变量:readonly 变量 注:不能unset,会报错
例:全都进入权限已经配置好的文件
1:定义变量A
A=100 //定义
echo "A= A " / / 引 用 和 输 出 的 时 候 需 要 写 A" //引用和输出的时候需要写 A"//引用和输出的时候需要写
2:撤销变量A
unset
echo “A=$A”
3:声明静态的变量B=2,不能unset
readonly B=2
echo “B=$B”
4:可把变量提升为全局环境变量,可提供其他shell程序使用
不能以数字开头
符号两侧不能有空格
变量名称一般习惯大写
1:A='ls -la’反引号(左上角,esc下面)运行里面的命令,并把结果返回给变量A
例:RESULT=‘ls -la /home’ 将ls -la /home的结果返回到RESULT
echo $RESULT
2:A=$(ls -la)等价于反引号
例:MY_DATA=$(data)
echo “data=$MY_DATA” 比上一个的echo有点变化
语法:export 变量名=变量值 (将shell变量输出为环境变量)
source 配置文件 (让修改后的配置信息立即生效)
echo $变量名 (查询环境变量的值)
例:1:在/etc/profile文件中定义TOMCAT_HOME环境变量
vim /etc/profile—输入:TOMCAT_HOME=/opt/tomcat----再输入:export TOMCAT_HOME(export导入)----:wd保存退出----source /etc/profile
即可在外面查询
2:查看环境变量TOMCAT_HOME的值
echo $TOMCATA_HOME
3:在另外一个shell程序中使用TOMCAT_HOME
echo “tomcathome=$TOMCAT_HOME”
注:在使用环境变量之前,需要让其生效
source /etc/profile
通过这个可以获取在命令行中设置的参数
语法:$n (n为数字,$0代表命令本身,$1- 9 代 表 第 一 到 第 九 个 参 数 , 十 以 上 的 参 数 需 要 用 大 括 号 抱 起 来 , 如 : 9代表第一到第九个参数,十以上的参数需要用大括号抱起来,如: 9代表第一到第九个参数,十以上的参数需要用大括号抱起来,如:{11})
∗ ( 这 个 变 量 代 表 命 令 行 中 所 有 的 参 数 , * (这个变量代表命令行中所有的参数, ∗(这个变量代表命令行中所有的参数,*把所有的参数看成一个整体)
@ ( 这 个 变 量 也 代 表 命 令 行 中 所 有 的 参 数 , 不 过 @ (这个变量也代表命令行中所有的参数,不过 @(这个变量也代表命令行中所有的参数,不过@把所有的参数区分对待)
$# (这个变量代表命令行中所有参数的个数)
例:编写一个Shell脚本positionPara.sh,在脚本中命令行的各个参数信息
前面的省略,直接进入到shell里面:#!/bin/bash
echo “$0 $1 $2”
echo “ ∗ " − − − − e c h o " *"----echo " ∗"−−−−echo"@”
echo “参数个数=¥#”
就是shell设计者事先已经定义好的变量,可以直接在shell脚本中使用
语法:$$ (当前进程的进程号(PID))
$! (后台运行的最后一个进程的进程号(PID))
$? (最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果非0(自己设置是谁),则证明上一个命令执行不正确了)
例:在一个shell脚本中简单使用下预定义变量
弄两个文件:myShell.sh(当作后台执行)和perVar.sh 。也就是说,在perVar.sh中执行myShell.sh,最后弄完后,按ctrl+c退出
在perVar.sh中写:
#!/bin/bash
echo “当前的进程号=$$”
#后台的运行方式
./myShell.sh & (要写这玩意,才能查了)
echo “最后的进程的号=$!”
echo “执行的值=$?”
基本语法:“ ( ( 运 算 式 ) ) ” 或 “ ((运算式))”或“ ((运算式))”或“[运算式]”
基本语法:expr m+n 注:expr运算符之间要有空格
基本语法:expr m-n
基本语法:expr *,/,% 乘,除,取余
例:计算(2+3)*4的值
进入shell后:#!/bin/bash
RESULT1=$(((2+3)*4))
echo “result1=$RESULT1”
给权限,执行结果为:result1=20
例:$[运算式]
#!/bin/bash
RESULT2=$[(2+3)*4]
echo “result2=$RESULT2”
结果一样
例:expr
TEMP=expr 2+3
注:那个字体变小的是用esc下面那个`包含注了
RESULT3=expr $TEMP \* 4
echo “result3=$RESULT3”
例:请求输出命令行的两个参数[整数]的和
#!/bin/bash
SUM=$[$1+$2]
echo “SUM=$SUM”
注:执行:./hello.sh 10 8 (即10+8)
语法:[ 条件] (注意:条件前后有空格)
非空返回true,可使用$?验证
例:[ atguigu ] 返回true
[] 返回false
[ condition ] && echo OK || echo notok 条件满足,执行后面的语句
常用判断条件:
=:字符串比较
-lt:小于
-le:小于等于
-eq:等于
-gt:大于
-ge:大于等于
-ne:不等于
-r:有读的权限 [ -r 文件]
-w:有写的权限
-x:有执行的权限
-f:文件存在并且是一个常规的文件
-e:文件存在
-d:文件存在并且是一个目录
例:1:“ok100"是否等于"ok”
进入shell----#!/bin/bash
if [ “ok100” = “ok” ]
then
echo “equal”
fi
2:23是否大于32
进入shell----#!/bin/bash
if [ 23 -gt 22 ]
then
echo “大于”
fi
3:/root/install.log 目录中的文件是否存在
进入shell----#!/bin/bash
if [ -e /root/install.log ]
then
echo “存在”
fi
语法:if [ 条件判断式 ];then
程序
fi
或者:if [ 条件判断式 ]
then
程序
elif[ 条件判断式 ]
then
程序
fi
例:编写一个shell程序,如果输入的参数,大于等于60,则输出"及格了",反之,输出"不及格"
#!/bin/bash
if [ $1 -ge 60]
then
echo “及格了”
elif [ $1 -lt 60 ]
then
echo “不及格”
fi
语法:case $变量名 in
“值1”)
如果等于值1,则执行程序1
;;
“值2”)
如果等于值2,则执行程序2
;;
…
*)
如果变量都不是以上的值,则执行此程序
;;
esac
例:当命令行参数是1时,输出"周一",是2时,输出"周二",其他情况输出"other"
#!/bin/bash
case $1 in
“1”)
echo “周一”
;;
“2”)
echo “周二”
;;
*)
echo “other”
;;
esac
语法:for 变量 in 值1 值2 值3…
do
程序
done
例:打印命令行输入的参数
#!/bin/bash
for i in “$*”
do
echo “the num is $i”
done
echo “===================”
语法:for (( 初始值;循环控制条件;变量变化 ))
do
程序
done
例:从1加到100的值输出显示
#!/bin/bash
SUM=0
for((i=1;i<=100;i++))
do
SUM= [ [ [SUM+$i]
done
echo “sum=$SUM”
语法:while [ 条件判断式 ]
do
程序
done
例:从命令行输入一个数n,统计从1+…+n的值是多少个
#!/bin/bash
SUM=0
i=0
while [ $i -le $1]
do
SUM= [ [ [SUM+$i]
done
echo “sum=$SUM”
语法:read(选项)(参数)
选项:-p:指定读取值时的提示符
-t:指定读取时等待的时间(秒),如果没有在指定的时间内输入,就不再等待了
参数:指定读取值的变量名
例:1:读取控制台输入一个num值
#!/bin/bash
read -p “请输入一个数num1=” NUM1
echo “你输入的值是num1=$NUM1”
2:读取控制台输入一个num值,在10秒内输入
#!/bin/bash
read -t 10 -p “请输入一个数num2=” NUM2
echo “你输入的值是num2=$NUM2”
shell编程和其它编程语言一样,有系统函数,也可以自定义函数
语法:basename [pathname] [suffix]
语法:basename [string] [suffix] (basename命令会删除所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来)
选项:suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉
dirname 文件绝对路径 (从给定的包含绝对路径的文件名中去除文件名,然后返回剩下的路径(目录的部分))
例:1:请返回/home/aaa/test.txt的"test.txt"部分
basename /home/aaa/test.txt
2:请返回/home/aaa/test.txt的"/home/aaa"部分
dirname /home/aaa/test.txt
语法: function 函数名()
{
Action;
[return int];
}
调用直接写函数名:函数名 [值]
例:计算输入两个参数的和(read),getSum
#!/bin/bash
function getSum(){
SUM=$[ n 1 + n1+ n1+n2 ]
echo “和是=¥SUM”
}
read -p “请输入第一个数n1” n1
read -p “请输入第二个数n2” n2
#调用getSUM
getSUM $n1 $n2
需求分析
1:每天凌晨2:10分备份数据库atguiguDB 到 /data/backup/db
2:备份开始和备份结束都能给出相应的提示信息
3:备份后的文件要求以备份时间为文件名,并打包成 .tar.gz 的形式,比如:2020-03-12_230201.tar.gz
4:备份的同时,检查是否有10前备份的数据库文件,如果有进行删除
开始编写:vim /usr/sbin/mysql_db_backup.sh
#!/bin/bash echo "==========开始备份==========" echo "==========备份的路径是 $BACKUP/$DATETIME.tar.gz" #主机 HOST=localhost #用户名 DB_USER=root #密码 DB_PWD=root #备份数据库名 DATABASE=atguiguDB #创建备份的路径 #如果备份的路径文件夹存在,就使用,否则就创建 [ ! -d "$BACKUP/$DATETIME" ] && mkdir -p "$BACKUP/$DATETIME" #执行MySQL的备份数据库指令 mysqldump -u${DB_USER} -p${DB_PWD} --host=$HOST $DATABASE | gzip > $BACKUP/$DATETIME.sql.gz #打包备份文件 cd $BACKUP tar -zcvf $DATETIME.tar.gz $DATATIME #删除临时目录 rm -rf $BACKUP/$DATETIME #删除10天前的备份文件 find $BACKUP -mtime +10 -name "*.tar.gz" -exec rm -rf {} \; echo "==========备份文件成功=========="
这玩意我是真的找不到一个好的了,心累
要是有找到的Q我,嘿嘿
while [ $i -le $1]
do
SUM= [ [ [SUM+$i]
done
echo “sum=$SUM”
语法:read(选项)(参数)
选项:-p:指定读取值时的提示符
-t:指定读取时等待的时间(秒),如果没有在指定的时间内输入,就不再等待了
参数:指定读取值的变量名
例:1:读取控制台输入一个num值
#!/bin/bash
read -p “请输入一个数num1=” NUM1
echo “你输入的值是num1=$NUM1”
2:读取控制台输入一个num值,在10秒内输入
#!/bin/bash
read -t 10 -p “请输入一个数num2=” NUM2
echo “你输入的值是num2=$NUM2”
shell编程和其它编程语言一样,有系统函数,也可以自定义函数
语法:basename [pathname] [suffix]
语法:basename [string] [suffix] (basename命令会删除所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来)
选项:suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉
dirname 文件绝对路径 (从给定的包含绝对路径的文件名中去除文件名,然后返回剩下的路径(目录的部分))
例:1:请返回/home/aaa/test.txt的"test.txt"部分
basename /home/aaa/test.txt
2:请返回/home/aaa/test.txt的"/home/aaa"部分
dirname /home/aaa/test.txt
语法: function 函数名()
{
Action;
[return int];
}
调用直接写函数名:函数名 [值]
例:计算输入两个参数的和(read),getSum
#!/bin/bash
function getSum(){
SUM=$[ n 1 + n1+ n1+n2 ]
echo “和是=¥SUM”
}
read -p “请输入第一个数n1” n1
read -p “请输入第二个数n2” n2
#调用getSUM
getSUM $n1 $n2
需求分析
1:每天凌晨2:10分备份数据库atguiguDB 到 /data/backup/db
2:备份开始和备份结束都能给出相应的提示信息
3:备份后的文件要求以备份时间为文件名,并打包成 .tar.gz 的形式,比如:2020-03-12_230201.tar.gz
4:备份的同时,检查是否有10前备份的数据库文件,如果有进行删除
开始编写:vim /usr/sbin/mysql_db_backup.sh
#!/bin/bash echo "==========开始备份==========" echo "==========备份的路径是 $BACKUP/$DATETIME.tar.gz" #主机 HOST=localhost #用户名 DB_USER=root #密码 DB_PWD=root #备份数据库名 DATABASE=atguiguDB #创建备份的路径 #如果备份的路径文件夹存在,就使用,否则就创建 [ ! -d "$BACKUP/$DATETIME" ] && mkdir -p "$BACKUP/$DATETIME" #执行MySQL的备份数据库指令 mysqldump -u${DB_USER} -p${DB_PWD} --host=$HOST $DATABASE | gzip > $BACKUP/$DATETIME.sql.gz #打包备份文件 cd $BACKUP tar -zcvf $DATETIME.tar.gz $DATATIME #删除临时目录 rm -rf $BACKUP/$DATETIME #删除10天前的备份文件 find $BACKUP -mtime +10 -name "*.tar.gz" -exec rm -rf {} \; echo "==========备份文件成功=========="
这玩意我是真的找不到一个好的了,心累
要是有找到的Q我,嘿嘿