一. VM下安装CentOS
在Vmware中安装CentOS。
VM三种网络连接模式
桥接模式
虚拟系统可以和外部系统通讯,但是容易造成IP冲突。
NAT模式
网络地址转换模式,虚拟系统可以和外部系统通讯,而且不造成IP冲突。
仅主机模式
独立的系统,不和外部发生联系。
VM常用操作
拍摄快照和克隆。
安装vmtools
安装vmtools,能让我们在windows下更好的管理虚拟机。
安装步骤:
进入CentOS。
点击vm菜单的->install vmware tools。
centos会出现一个vm安装包,xx.tar.gz。
拷贝到/opt。
使用解压命令tar,得到一个安装文件。
cd/opt [进入到opt目录]。
tar -zxvf xx.tar.gz。
进入vm解压的目录,/opt目录下cd vmware...
安装 ./vmware-install.pl
全部使用默认设置即可,就可以安装成功。
注意:安装vmtools,需要有gcc。
设置共享文件夹
步骤:
菜单 -> vm -> setting -> 选项 -> 共享文件
共享文件夹在CentOS的/mnt/hgfs/下。
二. CentOS文件系统
在Linux世界里,一切皆文件。
linux的文件系统是采用级层式的树状目录结构,在此结构中的最上层是跟目录“/”,然后在此目录下再创建其他的目录。
深刻理解linux树状文件目录是非常重要的。
具体目录结构
/bin [常用] (/usr/bin、/usr/local/bin) 是Binary的缩写,这个目录存放着最经常使用的命令。
/sbin [常用] (/usr/sbin、/usr/local/sbin) s就是super user的意思,这里存放的是系统管理员使用的系统管理程序。
/home [常用] 存放普通用户的主目录,在Linux中每个用户都有自己的目录,一般该目录名是以用户的账号命名。
/root [常用] 该目录为系统管理员,也称作超级权限者的主目录。
/lib [常用] 系统开机所需要的最基本的动态连接共享库。其作用类似于Windows里的DLL文件。几乎所有应用程序都需要用到这些共享库。
/lost+found 这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
/etc [常用] 所有系统管理所需要的配置文件和子目录。
/usr [常用] 这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows下的program file文件。
/boot [常用] 存放的是启动linux时使用的一些核心文件,包括一些连接文件以及镜像文件。
/proc 这个目录是一个虚拟目录,它是系统内存的映射,访问这个目录来获取系统信息。
/srv service缩写,该目录存放一些服务启动之后需要提取的数据。
/sys 这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统sysfs。
/tmp 这个目录存放一些临时文件。
/dev 类似于Windows的设备管理器,把所有的硬件用文件形式存储。
/media [常用] linux系统会自动识别一些设备,例如U盘,光驱等等。当识别后,linux会把识别的设备挂载到这个目录下。
/mnt [常用] 系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂载在/mnt/上,然后进入该目录就可以查看里面的内容了。
/opt 这是给主机额外安装软件所摆放的目录。
/usr/local [常用] 这是另一个给主机额外安装软件所安装的目录。一般通过编译源码方式安装程序。
/var [常用] 这个目录中存放着在不断扩充着的东西,习惯将经常被修改的目录放在这个目录下。包括各种日志文件。
/selinux selinux是一种安全子系统,它能控制程序只能访问特定的文件,有三种工作模式,可以自行设置。
三. 远程连接
使用xshell与xftp工具。
四. Vi与Vim
三种模式
正常模式
以vim打开一个文档就直接进入了一般模式(这是默认的模式)。在这个模式中,你可以使用[上下左右]按键来移动光标,你可以使用[删除字符]或[整行删除]来处理文档内容,可以使用[复制、粘贴]来处理你的文件数据。
插入模式
按下i、I、o、O、a、A、r、R等任何一个字母之后才会进入编辑模式,一般来说按i即可。
命令行模式
在这个模式中,可以提供你相关的指令,完成读取、存盘、替换、离开vim、显示行号等动作则是在此模式中达成的。
模式转换
vim/vi命令
拷贝当前行 yy,拷贝当前行向下的5行 5yy ,并粘贴 p。
删除当前行 dd,删除当前行向下的5行 5dd。
在文件中查找某个单词。命令行/关键字,回车查找,输入n就是查找下一个。
设置文件的行号,set nu;取消文件的行号,set nonu。
在一般模式下,使用快捷键G到该文档的最末尾行,gg到最首行。
在一般模式下使用快捷键u,撤销修改。
在一般模式下,输入行号,在输入shift+g,快速跳转到改=该行号。
更多操作可以查看更多文档。
vim/vi键盘图
五. 关机&重启
基本介绍
shutdown -h now 立刻进行关机。
shutdown -h 1 给所有用户发送通知,在一分钟后进行关机。
shutdown -r now 立即重启计算机。
shutdown = shutdown -h 1
halt 关机。
reboot 重启计算机。
sync 把内存和数据同步到磁盘。
注意细节
- 不管是重启系统还是关闭系统,首先要运行sync命令,把内存中的数据写到磁盘。
- 目前的shutdown/reboot/halt等命令均已经在关机前执行了sync。
六. 用户管理
用户登录&注销
基本介绍
-
登录时尽量少用root账号登录,因为它是系统管理员,最大的权限,避免操作失误。可以利用普通用户登录,登录后再用“su - 用户名”命令来切换成系统管理员身份。
-
在提示符下输入logout即可注销用户。
注意细节
- logout注销指令在图形运行级别无效,在 运行级别3 下有效。
添加用户
语法
useradd 用户名;
useradd -d 指定家目录 用户名;
pwd -> 查看当前路径。
细节说明
当用户创建成功以后,会自动创建和用户同名的家目录。
删除用户
userdel 用户名 -> 删除用户,但是保留家目录。
userdel -r 用户名 -> 删除用户以及用户主目录。
修改密码
passwd 用户名 -> 如果不加用户名修改当前用户。
查询用户信息
基本语法
id 用户名
细节说明
当用户不存在时,返回无此用户。
切换用户
在linux中,如果当前用户的权限不够,可以通过su指令,切换到高权限用户。
基本语法
su - 用户名
细节说明
-
从高权限的用户切换到低权限用户,不需要输入密码,反之需要。
-
当需要返回到原来用户时,使用exit/logout指令。
查看当前用户
who am i
whoami
用户组
类似于角色,系统可以对有共性(权限)的多个用户进行统一管理。
新增组
groupadd 组名
删除组
groupdel 组名
增加用户时直接加上组
useradd -g 用户组 用户名
如果增加用户时没有选择组,则自动创建一个与用户同名的组,并将用户添加进入组中。
修改用户的组
usermod -g 用户组 用户名
用户和组相关的文件
/etc/passwd 文件
用户的配置文件,记录用户的各种信息。
每行的含义:用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录shell
/etc/shadow 文件
口令配置文件。
每行的含义:登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
/etc/group 文件
组(group)的配置文件,记录linux包含的组的信息。
每行含义:组名:口令:组标识号:组内用户列表
七. 运行级别
基本介绍
0:关机。
1:单用户。
2:多用户状态没有网络服务。
3:多用户状态有网络服务。
4:系统未使用保留给用户。
5:图形界面。
6:系统重启。
常用的运行级别是3和5,也可以指定默认运行级别。
切换运行级别
init [0 1 2 3 4 5 6]
指定运行级别
CentOS7以前,/etc/inittab文件中指定。
CentOS7以后进行了简化
multi-user.target:analogous to runlevel 3
graphical.target:analogous to runlevel 5
To view current default target,run:
systemctl get-default
To set a default target,run:
systemctl set-default TARGET.target
面试
如何找回root用户密码?
1.首先启动系统,进入开机界面,在界面中按“e”进入编辑界面。
2.进入编辑界面,使用键盘上的上下键把光标往下移,找到以“linux16”开头内容所在行数,在最后面输入:init=/bin/sh。
3.接着,输入完成后,直接按快捷键:Ctrl + x进入单用户模式。
4.接着,在光标闪烁的位置中输入:mount -o remount,rw/(注意:各个但单词间有空格),完成后按键盘的回车键。
5.在新的一行最后面输入:passwd,完成后按键盘的回车键。输入密码,然后再次确认密码即可,密码修改成功后,会显示passwd的样式,说明密码修改成功。
6.接着,在鼠标闪烁的位置中(最后一行中)输入:touch /.autorelabel(注意:touch与/后面有一个空格),完成后按键盘的回车键。
7.继续在光标闪烁的位置中,输入:exec /sbin/init(注意:exec与/后面有一个空格),完成后按键盘的回车键,等待系统自动修改密码,完成后系统会自动重启,新的密码生效了。
八. 帮助指令
man获得帮助信息
基本语法
man [命令或配置文件] -> 获得帮助信息。
在linux下,隐藏文件是以.开头,选项可以组合使用。例如:ls -al, ls -al /root。
help指令
基本语法
help 命令 -> 获得shell内置命令的帮助信息。
九. 文件指令
文件查询
pwd -> 显示当前工作目录的绝对路径。
ls [选项] [目录或者文件] -> 显示当前目录下的文件。
-a:显示当前目录所有的文件和目录,包括隐藏的。
-l:以列表的方式显示信息
cd -> 切换到指定的目录。
cd ~:回到自己的家目录。
cd..:回到当前目录的上一级目录。
文件创建
mkdir [选项] 要创建的目录 -> 创建目录。
-p 创建多级目录
touch 文件名称 -> 创建一个非空文件。
文件删除
rmdir [选项] 要删除的空目录。 -> 只能删除空目录,有内容时无法删除。
rm [选项] 要删除的目录。 -> 删除非空目录。
-r:递归删除整个文件。
-f:强制删除不提示。
文件复制
cp [选项] source dest
-r:递归复制整个文件夹。
\cp -> 强制覆盖不提示。
文件移动
mv oldNameFile newNameFile -> 重命名
mv sourceFolder targetFolder -> 移动文件或者文件名。
文件查看
cat [选项] 要查看的文件
-n 显示行号。
使用细节
cat只能浏览文件,而不能修改文件,为了浏览方便,一般会带上 管道命令 | more。
cat -n 文件 | more [进行交互]
more指令
more指令是一个基于vi编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件的内容。more指令中内置了若干快捷键(交互指令)。
less指令
less指令用来分屏查看文件内容,它的功能与more指令类似,但是比more指令更加强大,支持各种显示终端。less指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示需要加载的内容,对于显示大型文件具有较高的效率。
echo指令
echo输出内容到控制台。
案例
使用echo输出环境变量:
echo $PATH $HOSTNAME
使用echo输出字符串:
echo ""
head指令
head用于显示文件的开头部分内容,默认情况下head指令显示文件前10行内容。
基本语法
head 文件
head -n 5 文件 -> 查看文件前5行。
tail指令
tail用于输出文件中尾部的内容,默认情况下tail指令显示文件最后10行内容。
基本语法
tail 文件 -> 查看文件尾10行内容。
tail -n 5 文件 -> 查看文件尾5行的内容,5可以是任意数。
tail -f -> 实时跟踪文档所有的更新。
>指令与>>指令
>输出重定向>>追加
基本语法
[输出内容] > 文件 -> 覆盖写。
[输出内容] >> 文件 -> 追加写。
ln指令
软链接也称为符号链接,类似于windows里的快捷方式,主要存放了链接其它文件的路径。
基本语法
ln -s [源文件或目录] [软链接名] -> 给源文件创建一个软链接。
细节说明
当我们使用pwd指令查看目录时,任然看到的是软链接所在的目录。
history指令
查看已经执行过历史命令,也可以执行历史命令。
基本语法
history -> 查看已经执行过的历史命令。
![编号] -> 执行编号对应的历史命令。
十. 时间日期指令
date指令
基本语法
date -> 显示当前时间。
date +%Y -> 显示当前年份。
date +%m -> 显示当前月份。
date +%d -> 显示当前是哪一天。
date "+%Y-%m-%d %H:%M:%S" -> 显示年月日时分秒。
date -s 字符串时间 -> 设置时间。
cal指令
基本语法
cal [选项] -> 不加选项,显示本月月历。
显示2021年历:cal 年份
十一. 搜索查找指令
find指令
find指令将从指定目录向下递归地遍历其各个子目录,将满足条件的文件或者目录显示在终端。
基本语法
find [搜索范围] [选项]
-name<文件名> :按照指定的文件名查找模式查找文件。
-user<用户名> :查找属于指定用户名所有文件。
-size<文件大小> :按照指定的文件大小查找文件。
locate指令
locate指令可以快速定位文件路径。locate指令利用事先建立的系统中所有文件名称及路径的locate数据库实现快速定位给定的文件。locate指令无需遍历整个文件系统,查询速度较快。为了保证查询结果准确度,管理员必须定期更新locate时刻。
基本语法
updatedb -> 创建locate数据库
locate 搜索文件
特别说明
由于locate指令基于数据库进行查询,所以第一次运行前,必须使用updatedb指令创建locate数据库。
which指令
which指令,可以查看某个指令在哪个目录下,比如ls指令在哪个目录下。
which 指令名称
grep指令和管道符|
grep过滤查找,管道符|,表示将前一个命令的处理结果输出传递给后面的命令处理。
基本语法
grep [选项] 查找内容 源文件
-n 显示匹配行以及行号。
-i 忽略字母大小写。
应用实例
输出指令 | grep "查找字符"
grep -n "查找字符" 源文件
十二. 解压指令
gzip/gunzip指令
gzip用于压缩文件,gunzip用于解压文件。
基本语法
gzip 文件 (功能描述:压缩文件,只能将文件压缩为*.gz文件。)
gunzip 文件.gz(功能描述:解压缩文件命令。)
zip/unzip指令
zip用于压缩文件,unzip用于解压的,这个在项目打包发布中很有用。
基本语法
zip [选项] xxx.zip 将要压缩的内容 -> 压缩文件目录和命令。
-r -> 递归压缩,即压缩目录。
unzip [选项] xxx.zip
-d -> 指定文件解压后存放的目录。
tar指令
tar指令是打包指令,最后打包后的文件是.tar.gz的文件。
基本语法
tar [选项] xxx.tar.gz 打包内容 [-C 指定解压目录]
-c 产生.tar打包文件。
-v 显示详细信息。
-f 指定压缩后的文件名。
-z 打包同时压缩。
-x 解压.tar文件。
十三. 组
在linux中的每个用户必须属于一个组,不能独立于组外。在linux中每个文件所有者、所在组、其它组的概念。
所有者与所在组
查看文件的所有者
ls -ahl
修改文件所有者
chown 用户名 文件名
修改文件所在组
当某个用户创建了一个文件后,这个文件的所在组就是该用户所在组。
chgrp 组名 文件名
组的创建
groupadd 组名
其它组
除文件所有者和所在组的用户外,系统的其它用户都是文件的其它组。
改变用户所在组
usermod -g 新组名 用户名 -> 改变用户所在的组。
usermod -d 目录名 用户名 -> 改变用户的初始目录。
特别说明:用户需要有进入到新目录的权限。
十四. 权限
ls -l查询出来的结果前10个字符确定不同用户能对文件干什么。
第1位确定文件类型:d,-,l,c,b
d是目录,相当于windows的文件夹。
-是普通文件。
l是链接,相当于windows的快捷方式。
c是字符设备文件,鼠标,键盘。
b是块设备,比如硬盘。
第2-4位确定所有者(该文件的所有者)拥有该文件的权限。
第5-7位确定所属组(同用户组的)拥有该文件的权限。
第8-10位确定其它用户拥有该文件的权限。
rwx作用到文件
[r]代表可读:可以查看读取。
[w]代表可写:可以修改,但是不代表可以删除该文件,删除一个文件的前提条件是对该文件所在的目录有写权限。
[x]代表可执行:可以被执行。
rwx作用到目录
[r]代表可读:可以读取,ls查看目录内容。
[w]代表可写:可以修改,对目录内创建+删除+重命名目录。
[x]代表可执行:可以进入该目录。
其它说明
-rw-r--r--. 1 fox monster 4.0K Mar 18 16:21 ok.txt
1:文件:硬连接数。目录:子目录数。
fox:用户。
monster:文件所在组。
4.0K:文件大小。
Mar 18 16:21:最后修改日期。
ok.txt:文件名。
修改权限
通过chmod指令,可以修改文件或者目录的权限。
第一种方式
使用+、-、=变更权限。
u:所有者,g:所有组,o:其它人,a:所有人(u、g、o总和)。
使用实例:
chmod u=rwx,g=rx,o=x 文件/目录名
chmod o+w 文件/目录名
chmod a-x 文件/目录名
第二种方式
通过数字变更权限。
r=4,w=2,x=1
使用实例:
chmod 751 文件目录名。
修改文件所有者
基本介绍
chown newowner 文件/目录 -> 改变所有者。
chown newowner:newgroup 文件/目录 -> 改变所有者和所在组。
chown -R newowner 目录 -> 改变所有者,使其下所有子文件或目录递归生效。
修改文件所在组
基本介绍
chgrp newgroup 文件/目录 -> 改变所在组。
chgrp -R newgroup 目录 -> 改变所在组,使其下所有子文件或目录递归生效。
权限管理应用实例
x:表示可以进入到该目录,比如cd。
r:表示可以ls,将目录的内容显示。
w:表示可以在该目录,删除或者创建文件。
十五. crond任务调度
crontab进行任务调度。
概述
任务调度
是指系统在某个时间执行的特定的命令或程序。
任务调度分类
系统工作
有些重要的工作必须周而复始的执行
个别用户工作
个别用户可能希望执行某些程序。
基本语法
crontab [选项]
-e 编辑crontab定时任务。
-l 查询crontab任务。
-r 删除当前用户所有的crontab任务。
service crond restart -> 重启任务调度。
快速入门
*/1 * * * * ls -l /etc/ > /tmp/to.txt
参数细节说明
特殊符号
十六. at定时任务
at命令是一次性定时任务,at的守护进程atd会以后台模式运行,检查作业队列来运行。
默认情况下,atd守护进程会每60秒检查作业队列,有作业时,会检查作业运行时间,如果时间与当前时间匹配,则运行此作业。
at命令是一次性定时计划任务,执行完一个任务后不再执行此任务了。
在使用at命令的时候,一定要保证atd进程启动,可以使用相关指令来查看。
ps -ef | grep atd
at命令格式
at [选项] [时间]
-m:当指定的任务完成后,给用户发邮件,即使没有标准输出。
-I:atq别名。
-d:atrm别名。
-v:显示任务将被执行的时间。
-c:打印任务的内容到标准输出。
-V:显示版本信息。
-q<队列>:使用指定的队列。
-f<文件>:从指定文件读入任务,而不是从标准输入读入。
-t<时间参数>:以时间参数的形式提交要运行的任务。
at时间定义
at指定时间的方法
1.接受在当天的hh:mm(小时:分钟)式的时间指定。假如该时间已过去,那么就放在第二天执行。
2.使用midnight(深夜)、noon(中午)、teatime(饮茶时间一般是下午四点)等比较模糊的词语来指定时间。
3.采用12小时进制,即在时间后面加上AM(上午)、PM(下午)来说明是上午还是下午。
4.指定命令执行的具体日期,指定格式位month、day或mm/dd/yy(月/日/年)或dd.mm.yy(日.月.年),指定日期必须更在指定时间后面。
5.使用相对计时法。格式为:now + count time-units, now就是当前时间,time-units是时间单位,这里能够是minutes、hours、days、weeks。count是时间的数量,几天,几小时。
6.直接使用today、tomorrow来指定完成命令的时间。
Ctrl + D结束at命令输入,输入2次。
十七. Linux分区
linux来说无论有几个分区,分给哪一个目录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构,linux中每个分区都是用来组成整个文件系统的一部份。
linux采用了一种叫“载入”的处理方法,它的整个文件系统中包含了一整套的文件和目录,且将一个分区和一个目录联系起来。这时要载入的一个分区将使它的存储空间在一个目录下获得。
硬盘说明
linux硬盘分IDE硬盘和SCSI硬盘,目前基本上是SCSI硬盘。
对于IDE硬盘,驱动器标识符为“hdx~”,其中“hd”表明分区所在的设备的类型,这里是指IDE硬盘了。“x”为盘号(a为基本盘,b为基本从属盘,c为辅助主盘,d为辅助从属盘),"~”代表分区,前四个分区用数字1到4表示,它们是主分区或者扩展分区,从5开始就是逻辑分区。
对于SCSI硬盘则标识为“sdx~”,SCSI硬盘是用"sd"来表示分区所在设备类型的,其余则和IDE硬盘的表示方法一样。
查看分区
lsblk
lsblk -f
添加硬盘
虚拟机里添加一块新硬盘。
fdisk /dev/sdb -> 分区命令
开始对/sdb分区
m 显示命令列表
p 显示磁盘分区 同fdisk -l
n 新增分区
d 删除分区
w 写入并退出
说明:开始分区后输入n,新增分区,然后选择p,分区类型为主分区。两次回车默认剩余全部空间。最后输入w写入分区并退出,若不保存退出输入q。
格式化分区
mkfs -t ext4 /dev/sdb2
挂载分区
mkdir newdisk
mount /dev/sdb2 /newdisk/
卸载分区
umount /dev/sdb2 或 umount /newdisk
注意:
命令行挂载重启以后会失效。
永久挂载
通过修改/etc/fstab实现挂载
添加完成后执行mount -a即刻生效
磁盘情况查询
查询整体磁盘使用情况
df -h -> 查询系统整体磁盘使用情况。
查询指定目录的磁盘占用情况
du -h -> 查询指定目录的磁盘大小情况,默认为当前目录。
-s:指定目录占用大小汇总。
-h:带计量单位。
-a:含文件。
--max-depth=1:子目录深度。
-c:列出明细的同时,增加汇总值。
工作实用指令
1. 统计/opt文件夹下文件的个数
ls -l /opt | grep "^-" | wc -l
2. 统计/opt文件夹下目录的个数
ls -l /opt | grep "^d" | wc -l
3. 统计/opt文件夹下文件的个数,包括子文件夹里的
ls -lR /opt | grep "^-" | wc -l
4. 统计/opt文件夹下目录的个数,包括子文件夹里的
ls -lR /opt | grep "^d" | wc -l
5. 以树状显示目录结构tree目录,注意,如果没有tree,则使用yum install tree安装
十八. 网络配置
查看网络ip和网关
ipconfig -> windows下
ifconfig -> linux下
ping 目的主机 -> 测试当前服务器是否可以连接目的主机。
配置ip地址
第一种方案
图形界面。
第二种方案
直接修改配置文件来指定ip,并可以连接到外网。
编辑 /etc/sysconfig/network-scripts/ifcfg-ens33文件。
ifcfg-ens33文件说明
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
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="c54e7807-4853-4402-9de9-cb6ef5cbc45c"
DEVICE="ens33"
ONBOOT="yes"
#IP地址
IPADDR=192.168.200.130
#网关
GATEWAY=192.168.200.2
#域名解析器
DNS1=192.168.200.2
重启网络服务或者重启系统生效。
设置主机名和host映射
设置主机名
为了方便记忆,可以给linux系统设置主机名,也可以根据需要修改主机名。
指令hostname:查看主机名。
修改文件在/etc/hostname指定。
修改后重启生效。
设置hosts映射
windows
在c:\Windows\System32\drivers\etc\hosts文件指定即可
linux
在/etc/hosts文件指定
十九. 进程(重点)
基本介绍
在linux中,每个执行的程序都称为一个进程。每一个进程都分配一个id号。
每个进程都可以以两种方式存在的,前台与后台。所谓前台进程就是用户目前的屏幕上可以进行操作的。后台进程则是实际在操作的,但由于屏幕上无法看到进程,通常使用后台方式执行。
一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中。直到关机才结束。
进程查询
PS指令
ps命令是用来查看目前系统中,有哪些正在执行,以及它们的执行情况。可以不加任何参数。
ps [选项]
-a:显示当前终端的所有进程信息。
-u:以用户的格式显示进程信息。
-x:显示后台进程运行的参数
-e:显示所有进程。
-f:全格式。
使用方式:
ps -aux | grep xxx -> 查看有没有我需要的指令。
显示结果:
USER:用户名称。
PID:进程号。
%CPU:进程占用的cpu百分比。
%MEM:进程占用物理内存的百分比。
VSZ:进程占用虚拟内存的大小(单位:KB)。
RSS:进程占用物理内存的大小(单位:KB)。
TT:终端名称,缩写。
STAT:进程状态,其中S-睡眠,s-表示该进程是会话的先导进程,N-表示进程拥有比普通优先级更低的优先级,R-正在运行,D-短期等待,Z-僵死进程,T-被跟踪或者被停止等等。
STARTED:进程启动时间。
TIME:cpu时间,即进程使用cpu的总时间。
COMMAND:启动进程所用的命令和参数,如果过长会被截断显示。
使用方式:
ps -ef是以全格式显示当前所有进程。
-e:显示所有进程。
-f:全格式。
显示结果:
UID:用户ID。
PID:进程ID。
PPID:父进程ID。
C:CPU用于计算执行优先级的因子。数值越大,表明进程是CPU密集型运算。执行优先级会越低;数值越小,表明进程是I/O密集型运算,执行优先级会提高。
STIME:进程启动时间。
TTY:完整的终端名称。
TIME:CPU时间。
CMD:启动进程所用的命令和参数。
pstree指令
查看进程树。
pstree [选项] 可以更加直观的来查看进程信息。
-p:显示进程的PID。
-u:显示进程的所属用户。
终止进程
若是某个进程执行一般需要停止时,或是已消了很多资源时,可以考虑停止该进程。使用kill命令来完成此项任务。
kill和killall
kill [选项] 进程号 -> 通过进程号杀死/终止进程。
killall 进程名称 -> 通过进程名称杀死进程,也支持通配符,这在系统因负载过大而变得很慢时很有用。
-9:表示强迫进程立即停止。
/bin/systemctl start [服务名] -> 重启服务。
服务(service)管理
服务(service)本质就是进程,但是是在后台的,通常都会监听某个端口,等待其它程序请求,比如(mysql,sshd 防火墙等),因此我们又称为守护进程,是linux中非常重要的知识点。【原理图】
service指令
service 服务名 [start | stop | restart | reload | status]
CentOS7.0以后很多服务不再使用service,而是systemctl。
查看服务
service指令管理的服务在/etc/init.d/查看。
setup -> 看到系统的所有服务。
服务的运行级别
linux系统有7种运行级别:常用的级别是3和5。
运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动。
运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登录。
运行级别2:多用户工作状态(没有NFS),不支持网络。
运行级别3:完全的多用户状态(有NFS),登录后进入控制台命令行模式,无界面。
运行级别4:系统未使用,保留。
运行级别5:X11控制台,登录后进入图形GUI模式。
运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动。
开机流程说明
开机 -> BIOS -> /boot -> systemmd进程1 -> 运行级别 -> 运行级对应的运行服务
chkconfig指令
通过chkconfig命令可以给服务的各个运行级别设置自启动/关闭。
chkconfig指令管理的服务在/etc/init.d/中查看。
注意:CentOS7.0后,很多服务使用systemctl管理。
基本语法
chkconfig --list [| grep xxx]
chkconfig 服务名 --list
chkconfig --level 5 服务名 on/off
chkconfig重新设置服务后自启动或关闭,需要重启机器reboot生效。
systemctl管理指令
基本语法
systemctl [start | stop | restart | status] 服务名 (临时生效)
systemctl指令管理的服务在/usr/lib/systemd/system查看。
设置服务自启动
systemctl list-unit-files [| grep 服务名](查看服务开机启动状态,gerp可以进行过滤)
systemctl enable 服务名(设置服务开机启动,在运行状态3和5永久生效。服务名可以写一半。)
systemctl disable 服务名 (关闭服务开机启动,在运行状态3和5永久生效.服务名可以写一半。)
systemctl is-enable 服务名 (查询某个服务是否是自动启动.服务名可以写一半。)
细节讨论
关闭或者启用防火墙后,立即生效。[telnet测试某个端口即可]
这种关闭方式只是临时生效,当系统重启后,还是回归以前对服务的设置。
如果希望设置某个服务自启动或关闭永久生效,要使用systemctl [enable|disable] 服务名.[演示]
打开或者关闭指定端口
在真正的生产环境,往往需要将防火墙打开,但问题来了,如果我们把防火墙打开,那么外部请求数据包就不能跟服务器监听端口通讯。这时,需要打开指定的端口。比如80、22、8080等。
firewall指令
firewall-cmd --permanent --add-port=端口号/协议 -> 打开端口。
firewall-cmd --permanent --remove-port=端口号/协议 -> 关闭端口。
firewall-cmd --reload -> 重新载入,才能生效。
firewall-cmd --query-port=端口号/协议 -> 查询端口是否生效。
应用案例
1.启用防火墙,测试111端口是否能telnet。
不行
2.开放111端口。
firewall-cmd --permanent --add-port=111/tcp;
firewall-cmd --reload;
3.再次关闭111端口
firewall-cmd --permanent --remove-port=111/tcp;
firewall-cmd --reload;
动态进程监控
top与ps命令很相似。它们都用来显示当前正在执行的进程。top与ps最大的不同之处,在于top在执行一段时间可以更新正在运行的进程。
基本语法
top [选项]
-d -> 指定top命令每隔几秒更新,默认是3秒。
-i -> 使top不显示任何闲置或者僵死进程。
-p -> 通过指定监控进程ID来仅仅监控某个进程的状态。
交互操作
操作 功能
P 以CPU使用量排序,默认就是此项。
M 以内存的使用率排序。
N 以PID排序。
q 退出top。
应用实例
案例1.监视特定用户,比如我们监控tom用户。
top:输入此命令,按回车键,查看执行进程。
u:然后输入"u"回车,再输入用户名即可。
案例2.终止指定的进程,比如我们要结束tom登录。
top:输入此命令,按回车键,查看执行进程。
k:然后输入k回车,再输入要结束的进程ID。
查看系统网络情况netstat
基本语法
netstat [选项]
-an -> 按一定的顺序排列输出。
-p -> 显示哪个进程在调用。
检测主机连接命令ping
是一种网络测试工具,它主要是用来检测远程主机是否正常,或是两部主机间的网线或网卡故障。
ping 对方的ip地址
二十. rpm与yum包
rpm用于互联网下载包的打包及安装工具,它包含在某些linux分发版本中。它生成具有.RPM扩展名的文件。RPM是ReDHat Package Manager(RedHat软件包管理工具)的缩写,类似windows的setup.exe,这一文件格式名称虽然打上了RedHat的标志,但理念是通用的。
Linux分发版本都有采用(suse,redhat,centos等),可以算是公认的行业标准了。
rpm包的简单查询指令
查询已安装的rpm列表:
rpm -qa | grep xxx
rpm包名的基本格式
一个rpm包名:firefox-60.2.2-1.el7.centos.x86_64
名称:firefox
版本号:60.2.2-1
适用操作系统:el7.centos.x86_64 -> 表示centos7.x的64位操作系统,如果是i686、i386表示32位操作系统,noarch表示通用。
rpm包的其它查询指令
rpm -qa -> 查询所安装的所有rpm软件包。
rpm -qa | more
rpm -qa | grep X
rpm -q 软件包名 -> 查询软件包是否安装。
rpm -qi 软件包名 -> 查询软件包信息。
rpm -ql 软件包名 -> 查询软件包中的文件。
rpm -qf 文件全路径名 查询文件所属的软件包
rpm包的删除
基本语法
rpm -e rpm包的名称 //erase
细节讨论
1. 如果其它软件包依赖于您要卸载的软件包,卸载时会产生错误信息。
2. 如果我们就是要删除foo这个rpm包,可以增加参数--nodeps,就可以强制删除,但是一般不推荐这样做,因为依赖于该软件包的程序可能无法运行。
rpm包的安装
基本语法
rpm -ivh rpm全路径名称
参数说明
i = install 安装
v = verbose 提示
h = hash 进度条
yum
Yum是一个Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包。
yum基本指令
查询yum服务器是否有需要安装的软件。
yum list | grep 软件
安装指定yum包
yum install 软件名
二十一. javaEE环境搭建
安装JDK
1. mkdir/opt/jdk。
2. 通过xftp6上传到/opt/jdk下。
3. cd /opt/jdk。
4. 解压tar -zxvf jdk-8u281-linux-x64.tar.gz
5. mkdir /usr/local/java
6. mv /opt/jdk/jdk1.8.0_281 /usr/local/java
7. 配置环境变量的配置文件vim /etc/profile
8. export JAVA_HOME=/usr/local/java/jdk1.8.0_281
9. export PATH = $JAVA_HOME/bin:$PATH
10. source /etc/profile [让新的环境变量生效]
11. 测试是否安装成功。
安装Tomcat
1. 上传安装文件,并解压缩到/opt/tomcat。
2. 进入解压目录/bin,启动tomcat。./startup.sh。
3. 开放端口8080。
测试是否安装成功:
在windows或者linux下访问http://linuxip:8080。
安装Idea
运行idea.sh。
安装MySQL5.7
1. 新建文件夹/opt/mysql,并cd进去。
2. 运行wget http://dev.mysql.com/get/mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar。
ps:centos6.7自带的类mysql数据库是mariadb,会和mysql冲突,要先删除。
3. 运行tar -xvf mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar。
4. 运行rpm -qa | grep mari,查询mariadb相关包。
5. 运行rpm -e -nodeps mariadb-libs卸载。
6. 开始真正安装mysql,依次运行以下几条。
rpm -ivh mysql-community-common-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.26-1.el7.x86_64.rpm
7. 运行systemctl start mysqld.service,启动mysql。
8. 然后开始设置root用户秘密。
mysql自动给root用户设置随机密码,运行grep “password” /var/log/mysqld.log可以看到当前密码。
9. 运行mysql -u root -p,用root用户登录,输入上述密码,可进入mysql。
10. 谁知root密码,对于个人开发环境,如果要设比较简单的密码(生产服务环境要设比较复杂的密码),可以运行set global validate_password_policy=0;提示密码设置策略。(validate_password_policy默认为1).
11. set password for 'root'@'localhost'=password('root');
12. 运行flush privileges; 使密码生效。
二十二. Shell编程
Linux运维工程师在进行服务器集群管理时,需要编写Shell程序来进行服务器管理。
对于JavaEE和Python程序员来说,工作的需要,你的老大会要求你编写一些Shell脚本进行程序或者是服务器的维护,比如编写一个定时备份数据库的脚本。
对于大数据程序员来说,需要编写Shell程序来管理集群。
Shell是什么
Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。
Shell脚本执行方法
脚本格式要求
脚本以#!/bin/bash开头。
脚本需要有可执行权限。
脚本执行方式
方式一:
输入脚本的绝对路径或者相对路径。
前提:
需要获得x权限。
方式二:
sh 脚本
提示:
不用获得x权限,直接执行即可。
Shell变量介绍
Linux Shell中的变量分为,系统变量和用户定义变量。
系统变量:$HOME、$PWD、$SHELL、$USER等等。
显示当前shell中的变量set。
Shell变量的定义
基本语法
定义变量:变量名=值
撤销变量:unset 变量名
声明静态变量:readonly 变量。 ps:静态变量不能被unset。
Shell变量命名规则
变量名称可以由字母、数字、下划线组成。但是不能以数字开头。
等号两侧不能有空格。
变量名称一般习惯为大写,这是一个规范,我们遵守即可。
将命令的返回值赋给变量
A=命令
反引号,运行里面的命令,并把结果返回给变量A。
A=$(date)等价于反引号。
设置环境变量
基本语法
export 变量名 = 变量值 -> 将shell便变量输出为环境变量/全局变量。
source 配置文件 -> 让修改后的配置信息立即生效。
echo $变量名 -> 查询环境变量的值。
Shell中的注释
# -> 单行注释。
:<<! 内容 ! -> 多行注释。
位置参数
当我们执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量
基本语法
$n -> n为数字,$0代表命令行本身,$1-$9代表第一到第九个参数,十以上的参数需要用大括号包含,如${10}。
$* -> 这个变量代表命令行中所有参数,$*把所有参数看成一个整体。
$@ -> 这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待。
$# -> 这个变量代表命令行中所有参数的个数。
预定义变量
就是shell设计者事先已经定义好的变量,可以直接在shell脚本中使用。
基本语法
$$ -> 当前进程的进程号(PID)。
$! -> 后台运行的最后一个进程的进程号(PID)。
$? -> 最后一次执行命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行。如果这个变量的值为非0(具体哪个数,由命令自己来决定)则证明上一个命令执行不正确。
运算符
学习在shell中进行各种运算操作。
基本语法
"$((运算式))"或"$[运算式]"或者expr m + n
注意expr运算符间要有空格,如果希望将expr的结果赋值给某个变量,使用``
\* -> 乘
/ -> 除
% -> 取余
条件判断
基本语法
[ condition ] 注意:condition前后要有空格。非空返回true,可使用$?验证。
判断语句
1. 字符串判断
=
2. 两个整数的比较
-lt 小于
-le 小于等于
-eq 等于
-gt 大于
-ge 大于等于
-ne 不等于
3. 按照文件权限进行判断
-r 有读的权限
-w 有写的权限
-x 有执行的权限
4. 按照文件类型进行判断
-f 文件存在并且是一个常规文件。
-e 文件存在。
-d 文件存在并是一个目录。
实例
if [ condition ]
then
action
fi
流程控制
单分支
if [ 条件判断式 ]
then
代码
fi
多分支
if [ 条件判断式
then
代码
elif [ 条件判断式 ]
then
代码
fi
注意事项
中括号和条件判断式之间必须有空格。
case语句
case $变量名 in
"值1" )
如果变量的值等于值1,则执行程序1
;;
"值2" )
如果变量的值等于值2,则执行程序2
;;
...省略其它分支...
* )
如果变量值都不是以上值则执行次程序。
;;
esac
for循环
基本语法
一.
for 变量 in 值1 值2 值3...
do
程序/代码
done
二.
for((初始值;循环控制条件;变量变化))
do
程序/代码
done
while循环
基本语法
while [ 条件判断式 ]
do
程序
done
注意:while和[有空格,条件判断式和[也有空格。
read语句
read读取控制台输入
基本语法
read (选项) (参数)
选项
-p:指定读取值时的提示符。
-t:指定读取时等待的时间(秒),如果没有在指定的时间内输入,就不用再等了。
参数
变量:指定读取值的变量名。
函数
shell编程和其它编程语言一样,有系统函数,也可以自定义函数。
系统函数
basename基本语法
返回完整路径最后/的部分,常用于获取文件名。
basename [pathname] [suffix]
basename命令会删掉所有前缀包括最后一个/字符,然后将字符串显示出来。
选项:
suffix为后缀,如果suffix被指定了,basename会将pathname中的suffix去掉。
dirname基本语法
返回完整路径最后/的前面部分,常用于返回路径部分。
dirname 文件绝对路径
从给定的包含绝对路径的文件中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分)。
自定义函数
基本语法
function funname[()]{
Action;
[return int;]
}
调用直接写函数名:funname [值]