赞
踩
首先安装一个虚拟机(VMware),在虚拟机上安装Linux的操作系统,我安装的是CentOS7,由于我是初学者,所以安装的带一个GNOM的图形界面。安装步骤也比较简单,网上都有教程,不详细说明了。
从图形界面打开,可以看到Linux系统主要有如下目录。
在Linux系统中“一切皆文件”,我们借助图形界面可以显现如上的目录结构,但是在实际使用中,是没有图形界面的,就是只有控制台。在Linux中目录是以树形表示的,根目录是“/”,下面有子目录,子目录再有自己的子目录…
要大概记住Linux目录是这样一种形状。
目录详解
本节只介绍根目录下的一些子目录。
为了方便学习,设置一个共享文件夹,让window系统和linux系统之间共享一个文件夹。启用共享文件夹要先在linux中安装vmtools。
1首先在window系统中创建一个文件夹,文件夹中随便放一个文件
2打开虚拟机,右键创建的虚拟机
设置-》选项-》共享文件夹-》总是启用-》添加
将我们创建的文件夹添加进去,点击确定。
3启动linux,打开如下目录
mnt->hgfs,然后目录下就会有一个我们分享的文件夹,打开文件夹
共享文件夹设置完毕。我们也可以从linux系统中放文件在window中查看。
在实际生产中,Linux服务器不是在本地电脑上,而是部署在公网上的服务器上,我们要使用,只能通过远程连接,包括文件上传和下载也都需要远程操作。
要远程登录到Linux服务器上,需要远程登录的软件,推荐使用xshell,可以使用它的免费版本。
1安装xshell,不详细说了,网上都有步骤。
2打开查看linux系统IP地址:输入“ifconfig”命令
第三行192.168.242.131是IP地址
3在Windows操作系统ping一下,只有ping通才能远程连接。
4打开xshell软件,新建连接
协议为SSH;主机是要远程连接的Linux系统的IP地址;端口号不变。
新建会话后,点击连接,输入要登录的用户然后输入密码即可。
登录成功后,软件控制台会显示如下信息
然后就可以在xshell中输入命令控制远程的Linux系统了。使用“ls”命令会列出当前目录中的子目录和文件。
1安装xftp软件,安装后打开显示如下界面
2和xshell基本类似,新建一个会话,然后连接,输入用户名和密码。
3成功连接后如下
左边是window系统,右边是远程连接的linux系统。可以借助图形界面的方式拖动上传和下载,也可右键点击文件上传。
4解决乱码
可以看到右边linux是乱码,可以点击会话属性(查看下面有个绿色小齿轮),将主机类型设为linux,编码设为uft8
vi是Linux系统内置的一个文本编辑器。
vim具有程序编程能力,可以看做是vi的增强版。可以主动的以字体颜色判断语法的正确性,方便程序设计。代码补全、编译及错误跳转等方便编程的功能丰富。
vi和vim的用法很相似,本节只讲述vim。vi和vim操作基本一致,vim中的快捷键在vi中也适用,会使用vim也基本会使用vi。
正常模式
使用vim打开一个文档就会直接进入这个模式,这是一个默认模式。在这个模式中,你可以使用[上、下、左、右]按键来控制光标移动,也可以对文档进行删除、查找、复制、粘贴操作。
插入模式
在正常模式中按下“i,I,o,O,a,A,r,R”等按键后就会进入插入模式,也就是编辑模式,这个模式可以往文档中写入文字。
命令模式
在正常模式中按下“:”即可进入命令模式,这个模式可以输入命令来对文档进行如下操作:保存、退出、显示行号等操作。
模式之间的转换
这三种模式之间转换关系如下所示:
打开文档
vim 文件名
使用该命令可以打开指定的文件,如果文件不存在,则会创建并打开。
快捷键
如下快捷键都是在正常模式使用。
shutdown
该命令可以控制系统关机、重启。
shutdown -h now 立即关机
shutdown -h 2 两分钟后关机
shutdown -r now 立即重启
halt
类似shutdown -h now
reboot
类似shutdown -r now
sync
把内存的数据同步到磁盘。
不管是重启还是关机,首先要运行sync命令,把内存数据写到磁盘中。
目前shutdown、reboot、halt命令都已经在关机前进行了sync。
logout
退出登录,不过这个命令在图形运行级别无效,在运行级别3下有效,后面会说运行级别。
exit
退出,和logout很像
su
su命令可以切换用户
su - 用户名
切换root用户登录
su - root
系统管理员才可以进行用户管理。
添加用户
useradd
该命令可以创建一个用户,格式如下:
useradd 用户名
创建的新用户默认会在/home目录下有一个同名的家目录。
要想在创建时指定用户的家目录可以使用“-d”参数
useradd -d 指定目录 用户名
修改用户密码
可以为新用户设置密码,也可以修改老用户的密码。格式如下
passwd 用户名
注:如果不指定用户名会修改当前登录的用户。
删除用户
userdel 用户名
使用上述命令会将指定的用户删除,但是会保留该用户的家目录,如果要将家目录一同删除可以使用以下命令:
userdel -r 用户名
查看用户信息
id 用户名
使用该命令可以查看到如下信息(uid、gid、组)
后面会说什么是用户组。
切换用户
su - 用户名
注:从权限高的用户切换到权限低的用户不需要输入密码,反之需要,当需要返回原来用户时,可以使用exit/logout命令。
查看当前用户
who am I
显示第一个登录系统的用户,并显示登陆时间
whoami
显示当前用户
什么是用户组
用户组就是将用户进行分组,将拥有相似权限的用户分在一个组,方便系统管理,系统管理员才能管理用户组。
添加用户组
groupadd 组名
删除用户组
groupdel 组名
注:如果组中有用户则无法删
添加用户时加上组
useradd -g 用户组 用户名
注:不指定组时,系统会默认创建一个和用户同名的组,并将它放进去。
修改用户的组
修改用户的用户组
usermod -g 用户组 用户名
linux的运行级别主要有如下几个:
我们最常接触的运行级的3和5。3就是我们通过远程连接linux的状态,5就是在图形界面上使用linux。
切换运行级
init [1|2|3|4|5|6]
打开带图形界面的Linux系统时处于运行级别5,使用如下命令可以切换到3(只有黑乎乎的窗口)
init 3
再输入inti 5又可以切换回来了(图形界面)
默认运行级别
当我们的Linux系统有图形界面时,启动默认就会处于5级别,如何设计默认运行级别呢,往下看。
在centOS7以后,对运行级进行了简化,在/etc/inittab文件中有描述,在文件中只有两个最常用的选项,如下:
multi-user.target: 相当于运行级别3
graphical.target: 相当于运行级别5
使用如下命令可以获得当前系统的默认运行级别。
systemctl get-default
我的是graphical.target,相当于5。
设置默认运行级可以使用“systemctl set-default”
systemctl set-default multi-user.target
上面的命令将默认级别设置为3,下次启动系统时就会默认进入只有黑窗口的界面。
man命令
man 命令或配置文件
man命令可以获取外部命令或配置文件的帮助信息,例如“获取ls命令的帮助信息”
man ls
会获得ls命令的帮助信息,包括各种参数的介绍。
按空格翻下一页。
按q会退出帮助页面回到命令行。
help命令
help 命令名
help命令只能获得shell内置命令的帮助信息,一般介绍比较简单。
获得cd命令的帮助信息。
help cd
显示目录或文件
(1)pwd 命令
使用pwd命令会打印当前工作目录的绝对路径(也就是你当前cd进了哪个目录)。
(2)ls 命令
ls [选项] [目录或文件]
ls命令会将指定目录内的文件或目录打印出来,如果不指定目录默认就是当前工作目录。
一些选项:
-a:显示所有文件包括隐藏文件。
-l:以列表的方式显示信息(显示的信息比较全)
注:选项可以组合使用,比如“-al或-la”
切换目录
cd [参数]
cd命令可以切换到指定目录。
一些参数:
~:表示家目录,“cd ~”会返回你的家目录
. ./:表示上一级目录,使用“cd . ./”会返回上一级目录
绝对路径或相对路径:表示进入指定目录。
绝对路径:从根目录“/”开始。如“cd /etc”会进入etc目录,无论刚刚处于哪个工作目录都会进入etc目录。
相对路径:从当前工作目录开始。比如当前处于/home目录,使用“cd …/”会回到根目录。
创建目录
mkdir [选项] 要创建的目录
一些选项:
-p:创建多级目录
(1)创建一层目录
mkdir aa
会在当前工作目录创建一层目录aa
(2)创建多层目录
mkdir -p bb/cc
会在当前工作目录下创建一个两层的目录(先创建一个bb,再在bb内创建一个cc)
注:既可以使用相对路径也可以使用绝对路径
删除目录
rmdir [选项] 要删除的空目录
(1)如果要删除的目录是空目录,可以使用 rmdir直接删除。
rmdir 要删除的空目录
(2)如果要删除的目录不是空目录可以使用如下rm命令删除
rm -rf 要删除的目录
rm有如下常用参数:
-r:递归删除目录及目录中的内容
-f:每次删除前不提示,忽略不存在的文件
-i:每次删除前都提示
-d:删除空目录
注:rm默认不能删除目录,只有参数带-r或-R时才能删除目录。
创建文件
touch 文件名
使用touchh命令可以创建一个空文件。
复制文件或目录
使用cp命令可以复制文件或目录到指定位置。
cp source dest
常用选项:
-r 递归复制整个文件夹,如果要复制目录请加上该选项
source 为文件或者目录;dest一般为目录。
注:如果source为文件而dest也为文件,则source的内容会覆盖dest。
移动文件或目录
mv source dest
source 为文件或者目录;dest一般为目录。
注:如果source和dest都是文件,source会移动到dest并且覆盖dest的内容。
查看文件内容
(1)cat 命令
cat [选项] 要查看的文件
常用选项
-n 显示行号
使用cat命令会将文件中的所有内容显示到命令行。
(2)more 命令
more 要查看的文件
常用选项如下
-NUM 指定一个数字NUM,用来指定每一屏显示的行数。
more命令是一个基于vi编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件的内容。
可以使用如下快捷键
操作 | 功能说明 |
---|---|
空白键(space) | 向下翻一页 |
Enter | 向下翻一行 |
q | 退出 |
Ctrl+F | 向下滚动一屏 |
Ctrl+E | 返回上一屏 |
= | 输出当前行的行号 |
:f | 输出文件名和当前行的行号 |
(3)less 命令
less 要查看的文件
less命令用来分屏查看文件内容,它的功能与more类似,但是比more命令更加强大,支持各种显示终端。
less命令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示需要加载的内容,对于现实大型文件具有较高的效率。
使用如下快捷键翻查文件内容
操作 | 说明 |
---|---|
空白键 | 向下翻动一页 |
Pagedown | 向下反动一页 |
Pageup | 向上翻动一页 |
/字符串 | 向下搜寻字符串;按n向下查找,N向上查找。 |
?字符串 | 向上搜寻字符串;按n向下查找,N向上查找。 |
q | 退出 |
(4)head命令
head [选项] 文件
查看文件的前几行,默认显示文件的前10行
常用选项
-n num num指定一个数字,表示查看文件的前几行
(5)tail命令
tail [选项] 文件
查看文件的末尾几行,默认是10行
常用参数
-n num 指定一个数字num,表示查看文件的末尾num行
-f 实时追踪该文档的所有更新
(6) echo命令
echo [选项] [要输出内容]
使用该命令不仅可以输出文字,也可以输出环境变量,比如输出环境变量PATH
echo $PATH
(7)wc命令
计算文件的行数、字数和字节数
wc [选项] 文件
文件可以有多个,每个文件对应输出一行,如果没有文件或文件为 “-” 时,从标准输入读取数据。
常用选项如下:
-l , --lines : 显示行数;
-w , --words : 显示字数;
-m , --chars : 显示字符数;
-c , --bytes : 显示字节数;
-L , --max-line-length : 显示最长行的长度;
创建文件或目录的软连接
使用ln命令可以为文件或目录创建软连接,软连接类似window下的快捷方式
ln -s 原文件或目录 软连接名
例如:为当前目录内的文件a.txt创建一个软连接到/home/b.txt
ln -s a.txt /home/b.txt
查看历史指令
使用“history”命令可以查看最近使用过的命令
history [num]
可以指定一个数字num,表示查看最近使用的num条指令。
左边的数字就是历史指令编号,如果要执行某条历史指令,可以使用如下格式:
!历史指令编号
如“!5”表示执行编号为5的指令
(1)date 命令
date 命令可以显示或设置当前日期
显示日期
date [输出格式]
不写输出格式会有一个默认的格式,如果想自定义输出格式可以使用如下符号:
%Y 年
%m 月
%d 日
%H 小时(24)
%M 分钟
%S 秒
例如:以"年-月-日 时:分:秒"格式输出日期
date "+%Y-%m-%d %H:%M:%S"
注:中间有空格需要用双引号引起来
设置日期
date -s 字符串时间
例如:
设置日期为2019年1月1日
date -s 20190101
设置时间为13:00:59
date -s 13:00:59
设置日期时间为2019年1月1日13:00:59
date -s "20190101 13:00:59"
中间有空格需要用双引号引起来
(1)输出重定向符“>”
使用规则如下:
命令 > 文件
使用“>”符号会将左边命令的结果输出到右边的文件中,这会导致右边文件的原内容被覆盖,如果不想将原内容覆盖可以使用追加符。
例如:将“hello word”写到a.txt文件中
echo hello word > a.txt
(2)追加符">>"
命令 >> 文件
将左边命令的结果追加到右边的文件中,这不会覆盖原文件的内容。
例如:将“你好”追加到a.txt文件末尾。
echo 你好 >> a.txt
(3)管道符“|”
命令1 | 命令2
将命令1的结果作为命令2的输入参数
例如:显示文件a.txt倒数第10、9行
tail a.txt | head -n 2
(1)find 命令
find命令将从指定目录下递归地遍历各个子目录,找到满足条件的文件或者目录。
find [搜索范围] [选项] [动作]
不指定搜索范围默认为当前目录。
一些常用选项
-name 按照文件名查找 -iname 按照文件名(忽略大小写) -user 按照属于指定用户查找 -group 按用户组来查找 -nogroup 查找无有效属组的文件,即文件的属组在/etc/groups中不存在 -nouser 查无有效属主的文件,即文件的属主在/etc/passwd中不存(孤儿文件 没有所有者的文件) -type 按照文件类型查找,选项后可以跟如下值: b - 块设备文件。 d - 目录。 c - 字符设备文件。 p - 管道文件。 l - 符号链接文件。 f - 普通文件。 s -socket文件 -perm 按权限来查找文件。 -empty 查找长度为零(即空文件)的文件 r -size [+/-]n 按照文件大小查询文件,+n表示文件大小大于n,-n表示文件大小小于n。常用单位:k, M, G -mtime [+/-]n 按文件更改时间来查找文件,-n指n天以内,+n指n天以前,使用stat命令可以查看文件的时间信息 -atime [+/-]n 按文件访问时间来查,-n指n天以内,+n指n天以前 -ctime [+/-]n 按文件创建时间来查找文件,-n指n天以内,+n指n天以前 -mmin、-amin、-cmin 这三个和mtime、atime、ctime用法一致,只不过单位是分钟 -newer file1 ! newer file2 查找更改时间比文件file1新但比文件file2旧的文件 注:选项前可以隔一个空格加上“!”表示否定,比如:“find ! -user chy”表示查找当前目录不属于chy的文件。
一些常用动作
-print 默认动作,将匹配的文件输出到标准输出
-exec 对匹配的文件执行该参数所给出的命令。相应命令的形式为:command {} \;,{}相当于占位符,注意{}和\;之间的空格。
-ok 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。
-delete 将匹配到的文件删除
例如:查找/home目录下大于50M的文件并删除
find /home -size +50M -delete
(2)locate命令
locate命令可以快速定位文件路径。locate命令利用事先建立的系统中所有文件名称及路径的locate数据库事先快速定位给定的文件。locate命令无需遍历整个文件系统,查询速度较快。为了保证查询结果的准确度,管理员必须定期更新locate时刻。
locate 要搜索的文件名
注:由于locate命令基于数据库进行查询,所以第一次运行前,必须使用updatedb命令创建locate数据库。
(3)which命令
which命令可以查看某个命令在哪个目录下。
which 命令名
例如:查看ls命令在哪个目录
which ls
(3)grep命令
grep 命令用于查找文件里符合条件的字符串。
grep [选项] 正则表达式 源文件
一些常用的选项
-n 显示匹配行及行号
-i 忽略字母大小写
-v 反向匹配,只查找不含有指定内容的行
wc命令
该命令常用于计算文件的行数、字数和字节数。
wc [选项] [文件]
如果没有文件,默认会从标准输入读取数据。
一些常用的选项:
-l , --lines : 统计行数;
-w , --words : 统计字数;
-m , --chars : 统计字符数;
-c , --bytes : 统计字节数;
-L , --max-line-length : 统计最长行的长度;
注:字数就是一整个单词算一个字数。字符数是一个字母算一个字符。
zip用于压缩文件,unzip用于解压文件。
(1)zip
zip可以压缩文件或目录
zip [选项] xxx.zip 要压缩的内容
一些常用选项
-r 递归压缩,即压缩目录
例如:将当前目录下的所有文件压缩成一个压缩文件ceshi.zip
zip -r ceshi.zip *
*表示当前目录下所有文件和目录
(2)unzip
unzip [选项] 要解压的文件
一些常用参数
-d 指定解压后文件的存放目录
gzip用于压缩文件,gunzip用于解压文件。
(1)gzip
gzip [选项] 要压缩的文件
一些常用选项
-d 解开压缩文件
-r 递归处理,将指定目录下的所有文件及子目录一并处理(压缩目录下的每个文件)
-l 列出压缩文件的相关信息
-v 显示指令执行过程
注:
(2)gunzip
gunzip [选项] 要解压的文件
-r 递归处理,将指定目录下的所有文件及子目录一并处理(解压目录中的所有压缩文件)
-l 列出压缩文件的相关信息
-v 显示指令执行过程
注:实际上 gzip -d 等价于 gunzip。所以无论是压缩还是解压缩都可以通过 gzip 命令来完成。解压缩后会删除掉原来的压缩包
(1)打包
tar命令可以将多个文件或目录打包成一个.tar结尾的文件。
tar [选项] 要打包的内容
一些常用选项
-c 创建新的.tar文件
-C 指定解包后的输出目录
-r 增加文件,将要打包的内容添加到某个.tar文件中去
-v 显示详细信息
-f 指定档案名字(tar包)
-x 解包.tar文件
例如:将/home/aa目录下的文件打包成a.tar文件
tar -cvf a.tar /home/aa/
例如:将/home/bb目录下的文件添加到a.tar中
tar -rvf a.tar /home/bb/
例如:将a.tar解包到当前目录
tar -xvf a.tar
如果要解包到指定目录可以使用“-C”选项。
(2)打包并压缩
tar将文件打成包后还可以调用别的压缩程序将打包的文件压缩,主要有如下选项可供使用
-z 调用gzip命令,压缩或解压
例如:将/home/aa文件夹下的内容打包并压缩成aa.tar.gz
tar -zcvf aa.tar.gz /home/aa
例如:将aa.tar.gz解包并解压缩
tar -zxvf aa.tar.gz
解压到了当前目录
注:调用gzip压缩后生成的文件一般以tar.gz结尾
(1)所有者
一般为文件的创建者,谁创建了该文件,就是文件的所有者。
改变文件的所有者
chown 用户 文件名
(2)所在组
当某个用户创建了一个文件后,这个文件的所在组就是该用户所在的组。
修改文件所在组
chgrp 组名 文件名
(3)其他组
除文件的所有者和所在组的用户外,其他用户都是文件的其他组。
(4)常用修改命令
1.usermod 命令
修改用户的设置,常用选项如下
-g 设置用户所在组
-d 修改用户登录的初始目录
修改所在组格式
usermod -g 新组名 用户名
修改初始登录目录格式如下
usermod -d 目录名 用户名
2.chown 命令
修改文件所有者
chown 用户名 文件/目录
修改文件所有者和所在组
chown 用户名:组名 文件/目录
常用选项
-R 如果是目录,则使其下的所有子文件或目录递归生效
(1)权限解析说明
使用ls -l命令,可以得到文件的详细信息,如下
首先看第一个,有这样的描述:“drwxr-xr-x”,解析如下:
(2)rwx权限介绍
rwx作用到文件:
rwx作用到目录:
(3)chmod命令
使用chmod命令可以修改文件或目录的权限,主要有两种方式修改权限:
第一种:使用“+、-、=”变更权限
+ 增加权限
- 减少权限
= 先清除之前的权限,然后赋值为现在的权限
u 所有者
g 所在组
o 其他用户
a 所有用户
格式如下:
chmod u=rwx,g=rx,o=x 文件/目录 所有者可以读、写、可执行,所在组用户可以读、可执行,其他用户只能执行
chmod g-x,o+r 文件/目录 所在组用户在原有权限的基础上去除可执行的权限,其他用户增加读权限
chmod a-x 文件/目录 所有人都去除可执行的权限
例如:给a.txt文件的所有者去除可执行权限,给所在组读、可执行权限,给其他组读权限。
chmod u-r,g=wx,o=w a.txt
第二种:使用数字变更权限
使用三个数字来表示权限,第一位数字表示所有者的权限,第二位数字代表所在组用户的权限,第三位代表其他用户的权限。
每一个数字是一个三位的二进制数转换而来的,这三位二进制数第一位代表写权限,第二位代表读权限,第三位代表可执行权限,1为有权限,0为没有该权限。
7=111=rwx 读、写、可执行
4=100=r 读
2=010=w 写
1=001=x 可执行
...
只要相应的位置上为1就表示拥有该权限
例如:修改a.txt的权限,所有者有读、写、可执行,所在组用户有读、写权限,其他用户有读权限。
chmod 764 a.txt
sudo命令可以让普通用户暂时以root身份去执行命令而不用知道root用户的密码。
(1)root用户编辑配置文件“/etc/sudoers”
该配置文件只能由root用户编辑,在这个文件中,可以配置哪些用户可以使用哪些特定的命令。编辑该配置文件有两种方式:
两种方式都可以打开配置文件,建议用第二种,因为第二种编辑好后会有语法检测功能,语法有问题是不能保存的。
进入配置文件后,找到如下几行:
其中第100行和第107行是比较核心的,第100行的格式是用来设置用户,107是用来设置用户组。
root ALL=(ALL) ALL
#用户名 被管理主机的地址=(可使用的身份) 授权命令(绝对路径)
%wheel ALL=(ALL) ALL
#%组名 被管理主机的地址=(可使用的身份) 授权命令(绝对路径)
三个ALL的含义:
如果我们想要某个用户可以和root用户一样可以执行所有命令,只需要模仿第100行的格式,在第101行加上一条,将用户名改一下就行,如下:
chy ALL=(ALL) ALL
如果只想指定某些命令给普通用户使用,可以用如下格式:
chy ALL=/usr/sbin/iotop
注:如果有多个命令可以用逗号隔开。命令还可以更详细的指定带哪些参数,这样可以防止普通用户误操作。设置完成后保存即可
同样的,如果想设置某个组,和上面的格式也是一样的,只不过组名前要有%。
(2)root用户编辑好文件后,切换普通用户
普通用户可以使用如下命令查看自己可以sudo哪些命令
sudo -l
执行命令会提示你输入你的密码。
要执行root用户赋予的特权命令采用如下格式
sudo 命令名
crontab命令可以进行定时任务的设置,格式如下:
crontab [选项]
常用选项如下
-e 编辑crontab定时任务
-l 查询crontab任务
-r 删除当前用户所有的crontab任务
(1)使用crontab -e命令后进入编辑页面,设置定时任务格式如下
* * * * * 命令
五个“*”占位符说明如下
第几个占位符 | 含义 | 范围 |
---|---|---|
1 | 一小时当中的第几分钟 | 0-59 |
2 | 一天当中的第几小时 | 0-23 |
3 | 一个月当中的第几天 | 1-31 |
4 | 一年当中的第几月 | 1-12 |
5 | 一周当中的星期几 | 0-7(0和7都代表星期日) |
一些特殊取值:
值 | 说明 |
---|---|
* | 代表任何时间,比如第一个“*”就代表一小时中每分钟都执行一次的意思 |
, | 代表一不连续的时间,比如“0 8,12,16 * * * 命令” ,就代表每天的8点0分,12点0分和16点0分都执行一次命令 |
- | 代表连续的时间范围,比如“0 5 * * 1-6 命令”,代表在周一到周六的凌晨五点0分执行命令 |
*/n | 代表每隔多久执行一次,比如“*/10 * * * 命令” ,代表每隔10分钟就执行一遍命令 |
注意:每月的天数和星期几最好不要同时出现,因为他们定义的都是天。
(2)使用crontab -l可以查看你所创建的所有定时任务。
(3)使用crontab -r可以删除你所创建的定时任务(删除所有)
(4)要删除某一个任务,可以使用crontab -e进入编辑界面,将指定任务的那一行删除即可。
注:使用“service crond restart”命令可以重启任务调度。
crond会多次执行设置的任务,而at命令是一次性定时计划任务,at的守护进程atd会以后台模式运行,减产作业队列来运行。
默认情况下,atd守护进程每60秒检查作业队列,有作业时,会检查作业运行时间,如果时间与当前时间匹配,则运行此作业。
at命令是一次性定时计划,执行完一个任务后不再执行此任务了。
在使用at命令时候,一定要保证atd进程的启动,可以使用相关命令来查看:“ps -ef | grep atd”
at命令格式如下:
at [选项] [时间]
Ctrl+D 结束at命令的输入
一些常用的选项
-m 当指定的任务被完成后,将给用户发送邮件,即使没有标准输出
-v 显示任务将被执行的时间
-c 打印任务的内容到标准输出
-V 显示版本信息
-q 使用指定的队列
-f 从指定文件读入任务而不是从标准输入读入
-t 以时间参数的形式提交要运行的任务
时间的格式,可以用以下几种方式指定时间:
- hh:mm(小时:分钟),如果当天已经过去这个时间,会在第二天执行。
- midnight(深夜)、noon(中午)、teatime(饮茶时间,一般是下午4点)等比较模糊的词指定时间
- 12小时制,在时间后面加上AM(上午)或PM(下午),如11pm
- 指定具体的日期,month day(月 日)或mm/dd/yy(月/日/年)或dd:mm:yy或dd.mm.yy(日.月.年),指定的日期必须跟在指定时间的后面,如:04:00 2022/12/08
- 使用相对计时法。指定格式为now+count time-units。now就是当前时间;time-units是时间单位,这里能够是minutes(分钟)、hours(小时)、days(天)、weeks(星期);count是时间的数量,几天,几小时。如:now+5 minutes
- 使用today(今天)、tomorrow(明天)来指定完成命令的时间
其他常用命令
atq:查看系统中没有执行的工作任务
atrm 任务编号:删除已经设置的任务
测试添加一个任务:
分区
硬盘
常用命令
(1)lsblk或lsblk -f
查看所有设备挂载情况
(2)fdisk——分区
对硬盘分区
fdisk 硬盘名称
进入分区界面后的菜单选项
m 显示命令列表
p 显示磁盘分区,和fdisk -l一样
n 新增分区
d 删除分区
w 写入并退出
说明:开始分区后输入n,新增分区,然后选择p,分区类型为主分区。两次回车默认剩余全部空间。最后输入w写入分区并退出,若不保存退出可以输入q
(3)mkfs——格式化分区
格式化分区
mkfs -t 分区类型 分区名称
分区类型可以为“ext4”
(4)mount——将格式化后的分区挂载到目录
将一个分区与一个目录联系起来
mount 设备名称 挂载目录
注:使用命令行挂载重启后会失效
(5)umount——将分区与目录断开
卸载分区
umount 设备名称/挂载目录
(6)永久挂载
要实现永久挂载需要修改“/etc/fstab”文件。
修改文件后执行“mount -a”即可永久挂载。
演示
要成功添加一块硬盘需要如下步骤:
添加硬盘-> 为硬盘分区->给分区格式化 ->挂载
根据如上步骤使用虚拟机演示:
(1)为虚拟机新增加1G的硬盘。
(2)使用管理员登录系统
(3)使用lsblk -f命令查看系统中的所有硬盘
可以看到我们新增加的1G的硬盘“sdb”
(4)执行“fdisk /dev/sdb”为硬盘sdb分区
(5)执行lsblk -f命令查看所有硬盘
可以看到sdb硬盘分了一个sdb1的分区,但是这个分区还没有UUID,这是因为还没有格式化。
(5)使用mkfs命令,将刚分的分区格式化
(6)格式化后再查看就有UUID了
(7)使用mount命令,将sdb1挂载某个目录去
在查看可以看到sdb1的挂载点就是我们挂载的目录。
(8)永久挂载
使用“vim /etc/fstab”编辑文件。将我们的增加进去
然后使用“mount -a”命令,再次重启后也会继续挂载。
(1)查询系统整体磁盘使用情况
df -h
(2)查询指定目录/文件的磁盘占用情况
du [选项] 目录/文件
常用选项
-s 指定目录占用大小汇总
-h 带计量单位
-a 文件和目录都包含
--max-depth=n 指定子目录深度n,和-s有冲突,只能使用一个
-c 列出明细的同时,增加汇总值
常用命令
(1)ifconfig命令
查看系统网卡的配置信息。
(2)ping命令
测试与指定主机是否连通
ping ip地址或域名
Ctrl+C取消ping
修改网络配置
直接修改配置文件“/etc/sysconfig/network-scripts/ifcfg-xxx”,这个“xxx”就是你的网卡名。
我的文件内容如下:
TYPE="Ethernet" PROXY_METHOD="none" BROWSER_ONLY="no" BOOTPROTO="dhcp" DEFROUTE="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="yes" IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_FAILURE_FATAL="no" IPV6_ADDR_GEN_MODE="stable-privacy" NAME="ens33" UUID="70d9095a-8988-493f-8308-40d0bd0b8daf" DEVICE="ens33" ONBOOT="yes"
文件解析
DEVICE 网卡名、接口名
HWADDR 物理地址、MAC地址
TYPE 网络类型,通常为Ethernet
UUID 随机Id
ONBOOT 系统启动的时候网络接口是否有效(yes/no)
BOOTPROTO IP配置的方法(none:不使用协议、static:静态分配IP、bootp:BOOTP协议、dhcp:自动分配IP、)
IPADDR IPV4地址
GATEWAY 网关
DNS1 域名解析器
通过在文件中将BOOTPROTO设置为static静态分配IP,然后添加IPADDR设置想要设置的IP地址。
设置完成后可以重启系统,或者输入如下命令重启网络服务
service network restart
修改主机名
主机名就是当我们打开终端时,在@后面跟着的那个字符串。
(1)hostname 命令
通过hostname命令可以查看主机名。
(2)修改主机名
修改配置文件“/etc/hostname”。
修改后,重启生效。
hosts映射
这个映射是什么呢,就是让指定的主机名(随便一个字符串也行)绑定一个IP地址,这样我们ping的时候可以直接用主机名(字符串)代替那个IP地址。十分类似DNS域名解析的过程。
(1)设置映射
要想编辑主机名与IP地址的映射可以编辑配置文件“/etc/hosts”。
在文件末尾添加一行就行,格式如下:
IP地址 主机名
(2)主机名解析分析
当我们在浏览器输入一个域名时,会经历如下步骤查找域名对应的IP地址:
浏览器缓存->dns解析器缓存->hosts文件->dns服务器
前两个又叫做本地缓存,一般来说,当电脑第一次成功访问某一网站后,在一定时间内,浏览器或操作系统会缓存它的IP地址。如果找不到会继续向下找。
在Linux中,每个进程都有一个ID号(PID,进程号)。每个进程都可能以两种方式存在:前台和后台,在后台执行的进程我们通常是看不到的,它会在后台默默执行。一般系统的服务都是以后台进程的方式存在,而且都常驻在系统中,直到关机才结束。
查看系统中的进程
ps [选项]
常用参数如下:
-a 显示当前终端的所有进程信息
-u 以用户的格式显示进程信息
-x 显示后台进程运行的参数
-e 显示所有进程
-f 显示进程的详细信息
使用“ps -aux”可以得到很多进程的信息,如下图:
进程比较多,只截取了一部分,有几个主要参数介绍一下:
USER 用户名称
PID 进程的ID
%CPU 进程占用CPU的百分比
%MEM 进程占用物理内存的百分比
VSZ 进程占用虚拟内存大小(KB)
RSS 进程占用物理内存大小(KB)
TTY 终端机号
STAT 进程状态(S:睡眠、s:会话的先导进程、N:低优先级、R:正在运行、D:短期等待、Z:僵死进程、T:被跟踪或被停止)
START 进程的启动时间
TIME 此进程所消耗的CPU时间(总时间)
COMMAND 启动进程所用的命令和参数
父子进程
进程之间存在调用关系,被调用的称为子进程,调用方称为父进程。想要查看某个进程的父进程,使用如下命令会显示进程的父进程ID:
ps -ef
结果如下:
其中PPID就是这个进程的父进程的ID。
终止进程
如果想要将某个进程停止,可以使用kill和killall命令。
(1)killall
通过进程名称杀死/终止进程
killall 进程名称
注:通过进程名称杀死进程,也支持通配符,可以一下杀死多个进程。
(2)kill
通过进程id终止进程。
kill [选项] 进程号
常用参数
-9 强迫进程立即停止,如果不带参数杀不掉的话,可以考虑带此参数
查看进程树
进程树可以更直观的来看进程之间的关系。
pstree [选项]
常用选项
-p 显示进程的PID
-u 显示进程的所属用户
服务的本质就是进程,但是是在后台的,通常都会监听某个端口,等待其他程序的请求,比如(mysql、防火墙等),因此我们又称其为守护进程。
service管理命令
使用service命令管理服务格式如下:
service 服务名 [start|stop|restart|reload|status]
start 启动服务
stop 停止服务
restart 重启服务
reload 重新加载
status 查看服务状态
service命令可以管理的服务都在“/etc/init.d”目录中。可以查看一下都有那些服务,如下:
如果我想要关闭network服务(上网功能),输入如下命令:
service network stop
注:使用stop关闭服务,在系统重启后该服务还是会启动。centos7以后很多服务都使用systemctl命令管理,只有少数服务还在使用service命令管理。
设置开机自启动服务
setup
使用setup命令可以设置哪些服务在开机时自动启动,哪些不启动。
输入setup后会进入如下界面(注意要有管理员权限才能使用)
选择System services可以看到系统的所有服务
带“*”号的会开机自启,不带的开机不会自启动,选择想要设置的服务,按空格键可以切换自启和不自启。设置完成后按TAB键可以选择菜单OK,再按一下是Cancel。
chkconfig命令
之前我们讲过运行级别,Linux系统一共有6个运行级别,我们最常用的是3和5,其中3是在开发中最常用的。
chkconfig命令可以设置服务的各个运行级别的开启与关闭。该命令可以管理的服务也都在“/etc/init.d”目录中。
该命令基本用法如下:
chkconfig --list 列出服务在各个运行级别下的信息(开启或是关闭)
chkconfig 服务名 --list 列出指定服务的信息
chkconfig --level n 服务名 on/off 设置指定服务在运行级别为n时是开启(on)还是关闭(off)
查看服务在各个运行级别下的信息
可以看到只有两个,设置network在运行级别为5时为关闭。
chkconfig --level 5 network off
注:chkconfig重新设置服务后需要重启才能生效。
systemctl命令
该命令可以管理的服务较多,其基本用法如下:
systemctl list-unit-files 列出所有服务的开机启动状态,可以使用grep命令过滤
systemctl [start|stop|restart|status|enable|disable|is-enabled] 服务名 对指定服务进行操作
start 开启服务
stop 停止服务
restart 重启服务
status 获得某个服务的状态
enable 设置某个服务开机自启
disable 关闭某个服务开机自启
is-enabled 查询某个服务是否是自启动
注:使用telnet命令可以测试某个端口是否可以连通。
防火墙是系统中的一个服务,在真正的生产环境,往往需要将防火墙打开,接下来讲防火墙的一些设置,包括打开指定端口和关闭指定端口等。
(1)打开指定端口
firewall-cmd --permanent --add-port=端口号/协议
例如:打开3306端口
(2)关闭指定端口
firewall-cmd --permanent --remove-port=端口号/协议
(3)重新载入
设置端口开启或关闭后,需要重新载入,才能生效
firewall-cmd --reload
(4)查询某个端口是否开放
firewall-cmd --query-port=端口号/协议
动态监控可以随时查看系统中资源以及网络的使用情况。
查看系统中进程使用资源的情况可以使用top命令,它和ps命令很相似,都用来显示正在执行的进程。top与ps最大的不同之处,在于top在执行一段时间可以更新正在运行的进程。
top [选项]
一些常用选项
-d 秒数 指定top命令每隔几秒更新,默认是3秒
-i 不显示任何限制或僵死进程
-p 进程ID 通过指定某个进程ID来监控这个个进程的状态
使用top命令后会进入如下界面
这个界面会根据指定的秒数动态刷新,并实时显示系统中资源的使用情况。
进入该页面后,可以进行交互操作,比如按指定规则排序显示,退出等。
P 以CPU使用率排序,默认就是此项
M 以内存的使用率排序
N 以PID排序
q 退出top命令
k 终止指定的进程(输入K,然后回车,会提示你输入要结束进程的ID)
iotop命令可以监控系统中用户的IO操作。
iotop
注:该命令默认是没有安装的,需要先安装一下
yum install iotop
使用netstat命令可以查看系统网络的情况。
netstat [选项]
常用选项
-an 按一定顺序排列输出
-p 显示哪个进程在调用
只查看端口的占用情况
netstat -tunlp
rpm用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中。它生成具有.rpm扩展名的文件。RPM是RedHat Package Manager(RedHat软件包管理工具)的缩写,类似windows的setup.exe,这一文件格式虽然打上了RedHat的标志,但理念是通用的。
(1)查询rpm包
rpm -qa 查看当前系统所有已安装的rpm包
查询出的rpm包格式如下
包含软件包名称、版本号、适用操作系统。如果是x86_64表示是64位系统,如果是i686或i386表示32位系统,noarch表示通用。
除了查询所有软件包,还有如下常用命令
rpm -q 软件包名 查询软件包是否安装
rpm -qi 软件包名 查询软件包的详细信息
rpm -ql 软件包名 查询软件包中都有哪些文件,安装到了哪些目录
rpm -qf 文件全路径名 查询该文件属于哪个软件包
(2)卸载rpm包
rpm -e 软件包名
注:如果我们要卸载某个软件包,可能会出现错误,比如说某个程序依赖它,所以不能删除,如果我们就是要强制删除,可以增加参数“- - nodeps”,这样就可以强制删除,但是一般不推荐这样做,因为依赖该软件包的程序可能无法运行。
(3)安装rpm包
rpm -ivh rpm包全路径名称
参数说明
-i 安装
-v 提示
-h 显示进度条
yum是一个shell前端软件包管理器。基于rpm包管理,能够从指定的服务器自动下载rpm包并且安装,可以自动处理依赖性关系,并且一次性安装所有依赖的软件包。
常用命令如下:
yum list 列出所有可下载安装的软件包,可以使用grep过滤出想要的结果
yum install 软件包名 下载指定的软件包并安装
wget是一个下载文件的工具,它用在命令行下。wget支持HTTP,HTTPS和FTP协议。
wget [参数] [URL地址]
常用参数
-P(大写) 指定下载后保存的目录,如果不指定默认保存到当前目录
-O(大写) 指定要保存的文件名
例如:下载百度的首页html文件。
(1)安装JDK
Java环境变量配置如下:
#java配置环境变量
JAVA_HOME=/usr/local/java
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME CLASSPATH PATH
JAVA_HOME的值为你的程序目录。
(2)安装Tomcat
(3)安装MySQL
学习Shell之前,我们要了解,Shell是什么。Shell是一个命令解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。
简单来说,Shell 是一个应用程序,它连接了用户和 Linux 内核,让用户能够更加高效、安全、低成本地使用 Linux 内核,这就是 Shell 的本质。
常用的Shell功能有两种形式外在形式:GUI和cmdline
(1)GUI(图形用户界面),特点是操作简单、易学易用,适合使用电脑来工作的人。
(2)cmdline(命令行界面),譬如linux的终端和windows的cmd,特点是不易用易学,优点是可以进行方便的shell编程,适合做开发的人。
脚本格式要求
(1)脚本要以如下语句开头
#!/bin/bash
bash是我们常用的一个shell。
(2)脚本可以不需要用分号作为结尾,换行就代表一条语句的结束
执行脚本的方式
执行脚本常用有两种方式,如下:
(1)赋予脚本文件可执行(x)权限,然后“./脚本名”即可执行。
(2)不用赋予脚本文件可执行权限,可以使用sh命令执行脚本,如下:
sh 脚本名
第一个程序
编写一个脚本,输出“Hello World!”。
(1)使用vim创建文件hello.sh文件,并写上如下内容:
#!/bin/bash
echo "Hello World!"
(2)保存并退出,执行如下命令执行该脚本
sh hello.sh
(3)第二种执行脚本的方式,先赋予可执行权限,然后直接执行脚本,如下
chmod u+x hello.sh
./hello.sh
注:在脚本中我们也可以使用之前学习的命令。
单行注释
单行注释使用“#”
#我是注释内容
多行注释
<<!
我是注释内容
我是注释内容
!
注意:多行注释“<<!”和“!”要单独占一行
Shell中的变量分为,系统变量和用户自定义变量。
系统变量的值我们都定义在系统的环境变量中,常用的系统变量有PATH 、USER、HOME等,这些变量在系统启动时就存在于系统中,我们可以直接使用,使用格式如下:
$+变量名
比如查看系统变量USER的值
echo $USER
注:使用“set”命令可以查看系统中所有的环境变量。
shell脚本也支持在脚本内定义变量。
定义变量
变量名=值
注意:“=”号两边不能有空格。
撤销变量
unset 变量名
撤销后的变量就不可以使用了。
声明静态变量
readonly 变量名
注:静态变量不能被撤销(unset)
引用变量
要引用变量的值需要在变量名前加“$”号。
变量赋值
变量名=值
测试:
#!/bin/bash
v1=123
v2=nihao
v3=1.234
readonly v4=常数
unset v2
#输出变量
echo "v1=$v1,v2=$v2,v3=$v3,v4=$v4"
单引号
单引号内的任何内容都会原样输出,所见即所得。如下:
#!/bin/bash
v1=abcd
echo '$v1'
使用单引号后,并不会解析变量的值,而是直接将“$v1”原样输出了。
双引号
和单引号不同,双引号中会解析一些特殊字符,比如引用的变量“$”和转义字符。如下:
#!/bin/bash
v1=abcd
echo "v1=$v1"
双引号会解析变量。
反引号
在反引号中的内容会被当做命令执行,并将结果返回。如下:
#!/bin/bash
v1=`date`
echo $v1
在反引号中的date被当做命令执行,而不是一个字符串。
注:反引号可以在双引号内嵌套使用。
(1)/etc/profile文件
之前在安装JDK时说到,环境变量保存在“/etc/profile”文件中,我们可以在该文件定义环境变量,使用“export”命令将其设置为环境变量,格式如下:
export 变量名
或
export 变量名=值
设置完环境变量后,还需要使用如下命令刷新该文件让变量生效。
source /etc/profile
例如:定义一个环境变量TEST。
首先,打开/etc/profile文件,在文件末尾加上如下内容:
TEST=zaiciceshi
export TEST
保存并退出,使用如下命令刷新配置文件
source /etc/profile
使用如下命令查看环境变量是否设置成功
echo $TEST
(2)/etc/profile.d目录
如果在profile文件中写了太多配置,会让文件变得难以维护,所以profile.d目录就是来解决这个问题的。我们可以自定义一个shell脚本,在我们的脚本中设置环境变量,然后将脚本放到该目录下,刷新一下profile配置文件即可。原理就是profile文件会自动读取该目录下的脚本。
测试:
(1)进入/etc/profile.d目录,在目录内创建一个shell,名为test2.sh,在脚本内写上如下内容:
TEST2=ceshi2
export TEST2
(2)保存并退出文件,刷新配置文件profile。
(3)输出变量的值查看
当我们执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量,比如:“./myshell.sh 100 200”,这个就是一个执行shell的命令行,我们可以在脚本内获取到参数信息。
$n n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数需要使用大括号包含,如${10}
$* 这个代表命令行中所有的参数,$*会把所有参数当做一个整体
$@ 这个也代表命令行中的所有参数,但是会将每个参数区分对待,后面可以用于循环的
$# 代表命令行中所有参数的个数。
测试:
编写一个shell脚本,内容如下:
echo "参数如下:"
echo "$1 $2 $3"
echo "\$*=$*"
echo "\$@=$@"
echo "\$#=$#"
运行结果如下:
预定义变量就是shell事先已经定义好的变量,可以直接在shelle脚本中使用。
$$ 当前进程的进程号PID
$! 后台运行的最后一个进程的进程号
$? 最后一次执行的命令的返回状态。如果为0,表明上一个命令正确执行;如果非0,表明上一个命令执行不正确。
测试:
编写如下脚本:
echo "\$\$=$$"
echo "\$!=$!"
echo "\$?=$?"
要运算算数表达式,有如下三种方式:
$((运算式))
$[运算式]
expr 运算式
注:使用expr运算,运算符之间要有空格,如expr m + n不能expr m+n。expr中乘号要使用“\*”,不能直接使用*号。
测试:
v1=$((1+2-3*4/5))
v2=$[1+2-3*4/5]
v3=`expr 1 + 2 - 3 \* 4 / 5`
echo "$v1 $v2 $v3"
结果为1,看来不支持小数。
判断语句一般要结合其他流程控制语句使用。
格式:
[ 条件判断式 ]
非空返回true,空返回false。
注意:条件判断式前后要有空格。
常用判断语句如下:
#比较字符串 = 比较两个字符串是否相等 #整数之间比较 -lt 小于 -le 小于等于 -eq 等于 -gt 大于 -ge 大于等于 -ne 不等于 #判断文件权限 -r 是否有读权限 -w 是否有写权限 -x 是否有执行权限 #判断文件的类型 -f 文件是否存在并且是一个常规文件 -e 文件是否存在 -d 文件是否存在并且是一个目录 逻辑运算符 -a 与 -o 或 ! 非
if语句
语法格式
if [ 条件判断式 ]
then
我们写的代码
fi
例如:编写一个shell脚本if.sh,如果文件a.txt存在,则输出存在。
if [ -f a.txt ]
then
echo "存在"
fi
先创建一个文件a.txt,然后执行脚本,打印“存在”。
if…elif…语句
语法格式如下:
if [ 条件判断式 ]
then
代码
elif [ 条件判断式 ]
then
代码
elif [ 条件判断式 ]
then
代码
...
fi
例如:编写一个脚本ifCase.sh,如果输入的参数大于等于60,则输出“及格了”,如果小于60,则输出“不及格”。
if [ $1 -ge 60 ]
then
echo "及格了"
elif [ $1 -lt 60 ]
then
echo "不及格"
fi
case语句
语法格式如下:
case $变量名 in
"值1")
代码1
;;
"值2")
代码1
;;
...
*)
代码n
;;
esac
注:如果变量都值都不匹配,则执行“*)”后的代码。
例如:编写一个脚本case.sh,当命令行参数是1时,输出“周一”,是2时,输出“周二”,其他情况输出“other”。
case $1 in
"1")
echo "周一"
;;
"2")
echo "周二"
;;
*)
echo "other"
;;
esac
for循环
语法格式如下:
语法格式1:
for 变量 in "值1 值2 值3 ..."
do
代码
done
语法格式2:
for ((初始值;循环控制条件;变量变化))
do
代码
done
格式2与很多高级编程语言的for循环很相似,有初始值、控制条件和变量变化。
测试1:打印命令行输入的所有参数(测试$*和$@的区别)
#!/bin/bash echo '测试$*' count=1 for i in "$*" do echo "第$count个参数:$i" count=$[count+1] done echo '测试$@' count=1 for j in "$@" do echo "第$count个参数:$j" count=$[count+1] done
可以看到虽然都可以将所有参数打印出来,但是“$*”将它们当做一个整体一下输出出来了,而“$@”则将每个单数区分开来。
测试2:从1加到100的值并输出到控制台。
#!/bin/bash
sum=0
for((i=1;i<=100;i++))
do
sum=$[sum+i]
done
echo "$sum"
while循环
while [ 条件判断式 ]
do
代码
done
测试:从命令行输入一个数n,统计从1加到n的值是多少。
#!/bin/bash
i=1
sum=0
while [ $i -le $1 ]
do
((sum+=i))
((i++))
done
echo "$sum"
注:(( ))内支持类似C语言的算术表达式。
使用read命令可以读取键盘输入的值。
read [选项] 参数
常用选项:
-p 指定读取值时的提示符
-t 指定一个等待时间(秒),如果没有在指定时间内输入,就不等待了。
参数就是你的变量名。
测试:读取控制台输入的一个NUM值。
#!/bin/bash
read -p "请输入一个值:" num
echo $num
主要介绍几个常用函数
函数名 | 介绍 |
---|---|
basename [string/pathname] [suffix] | 返回完整路径中最后/的部分,常用于获取文件名。如果指定suffix,则会将string/pathname中的suffix去掉 |
dirname 文件的绝对路径 | 返回完整路径最后一个/之前的部分,常用于返回路径部分 |
测试:编写一个脚本测试basename和dirname
#!/bin/bash
path=/home/chy/test/a.txt
base=`basename $path`
echo $base
dir=`dirname $path`
echo $dir
语法
定义:
[function] funtionName [()]
{
代码;
[return 返回值;]
}
注:“[ ] ”中的内容是可选的。
调用:
funtionName [值]
测试:定一个函数,功能是计算两个参数的和,getSum。
#!/bin/bash
function getSum ()
{
a=$1
b=$2
result=$((a+b));
}
getSum 10 20
echo $result
注:函数内使用$1和$2等,表示是传入函数的参数而不是传入脚本的参数。
正则表达式使用单个字符串来描述、匹配一系列符合某个语法规则的字符串。在很多文本编辑器里,正则表达式通常用来检索、替换那些符合某个模式的文本。在Linux中,grep,awk等文本处理工具都支持通过正则表达式进行模式匹配。
不包含特殊字符的正则表达式匹配它自己。例如:
cat /etc/passwd | grep chy
这会匹配所有包含chy的行。
特殊字符 | 说明 |
---|---|
^ | 匹配一行的开头。比如,“^chy”表示匹配以chy开头的行 |
$ | 匹配一行的结尾。比如,“chy$”表示匹配以chy结尾的行。匹配开头和结尾也可以一起使用,表示匹配整行,比如,“^$”表示匹配空行 ,“^chy$”表示这一行只能是chy不能有别的。 |
.(点) | 表示匹配任意一个字符。比如,“r…t”表示匹配r和t中间有两个任意字符的行 |
* | *不能单独使用,它和上一个字符连用,表示匹配上一个字符0次或多次,例如,“ro*t”可以匹配rt、rot、root、rooot等等 |
[ ] | 表示一个区间,匹配某个范围内的一个字符,比如,“[a,c,d]”或“[acd]”都表示匹配a、c、d三个字符中出现任意一个都行。还有“[1-9]”表示匹配1-9这10个数字中任意一个 |
\ | 表示转义,并不会单独使用。比如我们想使用一些字符,这些字符却有特殊意义,我们就可以用转义符,比如,"\$"表示匹配含有$的行 |
文本处理工具可以帮我们处理一些文本数据,筛选出我们想要的数据。
cut命令可以将每行按指定的分隔符分成几列,然后提取想要的列。
cut [选项] [文件]
没有文件会默认从标准输入读取数据。
一些常用选项:
选项 | 说明 |
---|---|
-f | 指定一个列号,表示输出第几列的数据 |
-d | 指定一个分隔符,默认是制表符“\t” |
-c | 按字符进行切割,后面加数字,表示取第几列,比如-c 1 |
测试:
将passwd文件每一行都用“:”号分割,然后输出第一列。
awk是一个非常强大的文本分析工具,可以把文件逐行的读入,以空格作为默认分隔符将每行切片,切开的部分再进行分析处理。
awk [选项] '/pattern1/{action1} /pattern2/{action2}...' [文件]
说明:
pattern:表示awk在数据中查找的内容,就是匹配模式,支持正则
action:找到匹配内容时所执行的一系列命令,可以使用print命令,比如print $1表示输出第一列,同理,$2第二列...
常用选项
选项 | 说明 |
---|---|
-F | 指定输入文件分隔符 |
-v | 赋值一个用户定义变量 |
常用内置变量
变量名 | 说明 |
---|---|
FILENAME | 文件名 |
NR | 已读的记录数(行号) |
NF | 浏览记录的域的个数(切割后,列的个数) |
测试:
该条命令先将passwd文件以c开头的行找到,然后以“:”号进行分割,最后将分割后的第一列输出
根据需求设计一个脚本
(1)创建一个脚本backup.sh
#!/bin/bash #备份目录 BACKUP=/data/backup/db #获取当前时间 DATETIME=`data +%Y-%m-%d_%H%M%S` #数据库地址 HOST=127.0.0.1 #数据库用户名 USERNAME=root #数据库密码 PASSWORD=12345678 #要备份的数据库名 DATABASE=test #检查备份目录,如果不存在,就创建 if [ ! -d "${BACKUP}/${DATETIME}" ] then mkdir -p "${BACKUP}/${DATETIME}" fi #备份数据库 echo "开始备份..." mysqldump -u${USERNAME} -p${PASSWORD} --HOST=${HOST} -q -R --databases ${DATABASE} | gzip > ${BACKUP}/${DATETIME}/$DATETIME.sql.gz cd ${BACKUP} tar -zcvf $DATETIME.tar.gz ${DATETIME} rm -rf ${BACKUP}/${DATETIME} echo "完成备份${BACKUP/${DATETIME}.tar.gz}" #删除10天前的备份 find ${BACKUP} -ctime +10 -name "*.tar.gz" -exec rm -rf {} \;
(2)使用crond定时任务,定时执行该脚本。
日志文件是重要的系统信息文件,其中记录了许多重要的系统事件,包括用户的登录信息、系统的启动信息、系统的安全信息、邮件相关信息、各种服务相关信息等。
日志对于安全来说也很重要,它记录了系统每天发生的各种事情,通过日至来检查错误发生的原因,或者受到攻击时攻击者留下的痕迹。
可以这样理解,日志是用来记录重大事件的工具。
系统常用的日志
/var/log/目录是系统日志文件的保存位置。主要介绍几个常用的
文件 | 说明 |
---|---|
boot.log | 系统启动日志 |
cron | 记录与系统定时任务相关的日志 |
cups | 记录打印信息的日志 |
dmesg | 记录系统在开机时内核自检的信息,也可以使用dmesg命令直接查看内核自检信息 |
btmp | 记录错误登录的日志。这个文件是二进制文件,不能直接用vim查看,而要使用lastb命令查看 |
lastlog | 记录系统中所有用户最后一次登录时间的日志。这个文件也是二进制文件,要使用lastlog命令查看 |
mailog | 记录邮件信息 |
message | 记录系统重要信息的日志,这个日志文件会记录Linux系统的绝大多数重要信息。如果系统出现问题,首先要检查的应该就是这个日志文件 |
secure | 记录验证和授权方面的信息,只要涉及账户和密码的程序都会记录,比如系统的登录、ssh的登录、su切换用户、sudo授权,甚至添加用户和修改用户密码都会记录在这个文件中 |
wtmp | 永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机等事件。是二进制文件,要使用last命令查看 |
ulmp | 记录当前已经登录的用户的信息。这个文件会随着用户的登录和注销而不断变化,只记录当前登录用户的信息。这个文件不能用vim查看,而要使用w、who、users等命令查看 |
CentOS7日志服务是“rsyslogd”。CentOS6的日志服务是“syslogd”。rsyslogd功能更强大,但是在使用上、日志文件的格式上和syslogd服务是兼容的。
查询Linux中rsyslogd服务是否启动
ps aux|grep rsyslog
查询rsyslogd服务的自启动状态
systemctl list-unit-files|grep rsyslog
配置文件
在配置文件/etc/rsyslog.conf中,记录着打印日志的规则,我们也可以在该配置文件中添加规则,自定义我们的日志规则。配置文件中每一行的格式如下:
*.* 存放的日志文件路径
解析:其中第一个*代表日志类型,第二个*代表日志级别,然后最右边是存放日志信息的文件路径。
日志类型分为:
auth pam产生的日志
authpriv ssh、ftp等登陆信息的验证信息
corn 时间任务相关
kern 内核
lpr 打印
mail 邮件
mark(syslog)-rsyslog 服务内部的信息,时间标识
news 新闻组
user 用户程序产生的相关信息
uucp unix to nuix copy主机之间相关的通信
local 1-7 自定义的日志设备
日志级别分为:
debug 有调试信息的,日志通信最多
info 一般信息日志,最常用
notice 最具有重要性的普通条件的信息
warning 警告级别
err 错误级别,阻止某个功能或者模块不能正常工作的信息
crit 严重级别,阻止整个系统或者整个软件不能正常工作的信息
alert 需要立即修改的信息
emerg 内核崩溃等重要信息
none 什么都不记录
从上到下,级别从低到高,记录信息越来越少。
日志文件记录的格式
有日志服务rsyslogd记录的日志文件,日志文件的格式包含以下4列:
例如:查看/var/log/secure日志,信息格式如下:
可以看到,大体有这么4列:时间、主机名、服务/程序名、信息。
日志轮替就是把旧的日志文件移动并改名,同时建立新的空日志文件,当旧日志文件超出保存的范围之后,就会进行删除。
日志轮替介绍
centos7使用logrotate进行日志轮替管理,要想改变日志轮替文件名字,通过“/etc/logrotate.conf”配置文件中的“dateext”参数。
如果配置文件中有“dateext”参数,那么日志会用日期来作为日志文件的后缀,例如“secure-20221221”。这样日志文件名不会重叠,也就不需要日志文件的改名,只需要指定保存日志个数,删除多余的日志文件即可。
如果配置文件中没有“dateext”参数,日志文件就需要进行改名了。当第一次进行日志轮替时,当前的“secure”日志会自动改名为“secure.1”,然后新建“secure”日志,用来保存新的日志。当第二次进行日志轮替时,“secure.1”会自动改名为“secure.2”,当前的“secure”日志会自动改名为“secure.1”,然后也会新家“secure"日志,用来保存新的日志,以此类推。
/etc/logrotate.conf文件介绍
如下是一个系统的logrotate.conf文件
1-16行是通用设置。17行是将/etc/logrotate.d目录内的文件也都包含进来,20-34是某些日志的单独设置,单独设置优先级高于通用设置。
下面是一些可以用于该文件中的参数介绍
参数 | 说明 |
---|---|
daily | 日志轮替的周期是每天 |
weekly | 日志轮替的周期是每周 |
monthly | 日志轮替的周期是每月 |
rotate <num> | 保留日志文件的个数。0指没有备份 |
compress | 日志轮替时,旧的日志进行压缩 |
create <mode> <owner> <group> | 建立新日志,同时指定新日志的权限与所有者和所属组 |
mail <address> | 当日志轮替时,输出内容通过邮件发送到指定的邮件地址 |
missingok | 如果日志不存在,则忽略该日志的警告信息 |
notifempty | 如果日志为空文件,则不进行日志轮替 |
minsize <size> | 日志轮替的最小值。也就是日至一定要达到这个最小值才会轮替,否则就算时间达到也不轮替 |
dateext | 使用日期作为日志轮替文件的后缀 |
sharedscripts | 在此关键字之后的脚本只执行一次 |
prerotate / endscript | 在日志轮替之前执行脚本命令 |
postrotate / endscript | 在日志轮替之后执行脚本命令 |
自定义日志轮替
如果需要将自己的日志加入日志轮替,有如下两种方式:
自定义的日志轮替策略只需要模仿20-34行那两个日志的格式就行
日志全路径名
{
日志轮替规则
}
日志轮替的原理
日志轮替之所以可以在指定的时间内备份日志,是依赖系统定时任务。在/etc/cron.daily目录中,有个logrotate文件(可执行),logrotate通过这个文件依赖定时任务执行。
内存日志就是存放在内存中的日志,重启就会清空。如果需要查看内存日志,可以使用如下命令
#查看全部内存日志
journalctl
#查看最新的3条
journalctl -n 3
#查看指定时间范围内的日志(可以加日期)
journalctl --since 19:00 --until 19:10:103
#查看报错日志
journalctl -p err
#查看日志详细内容
journalctl -o verbose
#查看包含这些参数的日志(详细日志中查看)
journalctl _PID=1245 _COMM=sshd
Linux的功能是很强大的,有时我们并不需要用到全部功能,甚至只用它的一些功能,基于此,我们就可以定制自己的小Linux。
Linux启动流程
内核文件的关键文件:
(1)Kernel文件:vmlinuz-3.10.0-957.el7.x86_64
(2)initrd文件:initramfs-3.10.0-957.el7.x86_64.img
定制思路
(1)使用如下命令查看当前内核的版本
uname -a
(2)使用如下命令检测内核版本,显示可以升级的内核(我们并不是想升级哪个版本都行,要看系统兼容哪些内核版本)
yum info kernel -q
(3)使用如下命令升级内核
yum update kernel
(4)查看已经安装的内核
yum list kernel -q
实体机无法做快照,如果系统出现异常或者数据损坏,后果严重,要重做系统,还会造成数据丢失,所以我们可以使用备份和恢复技术。
常用的备份有两种方式:
主要介绍一下使用命令的方式备份。
(1)如果没有这两个命令需要先安装
yum -y install dump
yum -y install restore
(2)dump介绍
dump支持分卷和增量备份
dump [-cu] [-1234567890] [-f 备份后文件名] [-T 日期] [目录或文件系统]
参数介绍
参数 | 说明 |
---|---|
-c | 创建新的归档文件,并将由一个或多个文件参数所指定的内容写入归档文件的开头 |
-1234567890 | 备份的层级。0为完全备份,会备份所有文件。若指定0以上的层级,则备份至上一次备份以来修改或新增的文件,到9后,可以再次轮替 |
-f | 指定备份后文件名 |
-j | 调用bzlib库压缩备份文件,也就是bz2格式,让文件更小 |
-T | 指定开始备份的时间与日期 |
-u | 备份完毕后,在/etc/dumpdares中记录备份的文件系统,层级,日期与时间等 |
-t | 指定文件名,若该文件已存在备份文件中,则列出名称 |
-W | 显示需要备份的文件及其最后一次备份的层级,时间,日期 |
-w | 和-W类似,但仅显示需要备份的文件 |
例如:备份/boot分区的所有内容到/opt/boot.bak.bz2文件,备份层级为0
dump -0uj -f /opt/boot.bak.bz2 /boot
注:dump命令配合crontab定时任务可以实现无人值守备份
(3)restore介绍
restore命令用来恢复已备份的文件,可以从dump生成的备份文件中恢复原文件
restore [模式选项] [选项]
模式选项有如下四个,只能从四个中选择一个,不能混用
模式选项 | 说明 |
---|---|
-C | 使用对比模式,将备份的文件与已存在的文件相互对比 |
-i | 使用交互模式,在进行还原操作时,restore命令将询问用户 |
-r | 进行还原模式 |
-t | 查看模式,查看备份文件有哪些文件 |
选项
选项 | 说明 |
---|---|
-f | 从指定的文件中读取备份数据,进行还原操作 |
例如:使用restore命令还原备份(如果你有增量备份,需要把增量备份也进行恢复,有几个增量备份文件就要恢复几个,按顺序来恢复即可)
restore -r -f /opt/boot.bak0.bz2//恢复到第一次完全备份状态
restore -r -f /opt/boot.bak1.bz2//恢复到第二次增量备份状态
webmin是功能青大的基于web的unix/linux系统管理工具。管理员通过浏览器访问webmin的各种管理功能并完成相应的管理操作。
(1)官网下载webmin的rpm包安装到Linux
webmin下载地址
(2)安装完成后,重置密码
/usr/libexec/webmin/changepass.pl /etc/webmin root <passwd>
该命令可以重置webmin的root用户的密码
(3)修改端口号
默认webmin的端口号是10000,修改配置文件/etc/webmin/miniserv.conf可以修改端口号。
(4)重启webmin
(5)防火墙放行webmin端口
(6)配置完成后,就可以在window端通过浏览器以图形界面访问linux了
http://linux的IP地址:端口号/
默认账号是root,密码前面(2)设置过了。
bt宝塔Linux面板是提升运维效率的服务器管理软件,支持一键LAMP/LNMP/集群/监控/网站/FTP/数据库/JAVA等多项服务器管理功能。
(1)直接在linux通过wget命令下载安装脚本并执行安装
wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh
(2)安装后控制台会显示登陆地址、账号、密码等信息,保存好
(3)通过浏览器访问登录地址输入账号密码即可进入管理界面
(4)如果忘记账号密码等信息了,在linux中使用如下命令可以重新查看
bt default
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。