目录
一、远程登录到Linux服务器
1.1为什么要远程登录
为什么程序员需要远程登录到Linux进行项目管理或开发?
- linux服务器是开发小组共享。
- 正式上线的项目是运行在公网。
远程登录客户端工具:
- Xshell6
- Xftp6
1.2 Xshell6
1.2.1介绍
- 程序员首选软件,解决了中文乱码的问题。
- Xshell 是一个强大的安全终端模拟软件,它支持SSH1,SSH2,以及 Microsoft Windows平台的TELNET 协议。
- Xshell可以在Windows界面下用来访问远端不同系统下的服务器,从而比较好的达到远程控制终端的目的。
1.2.2下载与使用
下载地址:https://www.netsarang.com/en/free-for-home-school
使用
1.新建会话
填完后点击“确定”。
2.建立连接
双击会话,选择“接受并保存”(下次连接就直接双击,不需要输入用户名和密码)
输入用户名:
输入密码:
3.连接成功
1.3 Xftp6
1.3.1介绍
是一个基于windows平台的功能强大的SFTP、FTP文件传输软件。使用了Xftp 以后,windows 用户能安全地在UNIX/Linux和Windows PC之间传输文件。
1.3.2下载与使用
下载地址:https://www.netsarang.com/en/free-for-home-school
使用
连接步骤与XShell一样,这里只展示连接成功的结果:
左侧是windows主机,右侧是centos虚拟机。
上传文件
1.指定接收方的目录(文件将会上传到此目录下),然后回车
2.双击要上传的文件
3.上传成功
二、vi和vim编辑器
2.1介绍
Linux系统会内置vi文本编辑器。vim 具有程序编辑的能力,可以看做是vi的增强版本,可以主动的以字体颜色辨别语法的正确性,方便程序设计。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。
2.2vi和vim常用的三种模式
2.2.1一般模式
- 以vim打开一个文档就直接进入一般模式了(正常模式)。
- 正常模式中:
- 可以使用『上下左右』按键来移动光标。
- 可以使用『删除字符』或『删除整行』来处理文档内容。
- 可以使用『复制、粘贴』来处理文件数据。
2.2.2插入模式
- 按下i,L, o, O, a,A, r,R等任何一个字母之后才会进入编辑模式,一般来说按i即可。
2.2.3命令模式
- 首先输入esc,再输入“:”进入命令模式。
- 根据相关指令,完成读取、存盘、替换、离开vim、显示行号等操作。
2.2.4各种模式的相互切换
2.3vi和vim的快捷键
一般模式下:
命令 | 说明 |
yy | 拷贝当前行 |
5yy | 拷贝当前行向下的5行 |
p | 粘贴 |
dd | 删除当前行 |
5dd | 删除当前行向下的5行 |
shift+g | 光标移动到文档的最末行 |
gg | 光标移动到文档的最首行 |
u | 撤销 |
20+shift+g | 光标移动到文档的第20行 |
一般模式下输入":"或"/"进入命名模式:
命令 | 说明 |
/hello | 在文档中查找hello(输入n就是查找下一个hello) |
:set nu | 显示文档的行号 |
:set nonu | 取消文档的行号 |
三、关机与重启、用户登录与注销
3.1关机与重启
命令 | 说明 |
shutdown -h now | 立即关机 |
shutdown -h 1/shutdown | 1分钟后关机 |
halt | 立即关机 |
shutdown -r now | 重启 |
reboot | 重启 |
sync | 把内存的数据同步到磁盘 |
注意
- 不管重启系统还是关闭系统,首先运行sync命令,把内存的数据同步到磁盘。
- 目前shutdown/reboot/halt等命令均已经在关机前自动运行了sync命令,但是建议仍手动输入sync命令,以防万一。
3.2用户登录与注销
命令 | 说明 |
su - /su - root | 普通用户切换为root用户 |
logout | 注销用户 |
exit | 注销用户/退出Linux终端窗口 |
注意
- 实际工作中,登录时尽量少用root账号登录。因为它是系统管理员,拥有最大权限,避免操作失误。
- logout注销指令在图形运行级别无效(比如logout不能用来退出图形界面的Linux终端窗口),在运行级别3下有效。
四、用户管理
4.1基本介绍
- Linux系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
- 普通用户的家目录保存在/home下,root用户的家目录就是/root。
4.2添加用户
命令 | 说明 |
useradd 用户名 | 创建用户和用户同名的家目录 |
useradd -d 目录名 用户名 | 创建用户,给用户创建指定的家目录 |
4.3修改密码
命令 | 说明 |
passwd 用户名 | 给指定用户修改密码 |
注意
- 实际工作中,我们要设置复杂的密码。
- 若不指定用户名,则默认修改当前用户的密码。
4.4删除用户
命令 | 说明 |
userdel 用户名 | 删除用户,但是会保留用户的家目录 |
userdel -r 用户名 | 删除用户和用户的家目录 |
注意
实际工作中,当一个员工离职后,建议只删除其员工,不删除员工的家目录,因为员工的家目录可能存有他的工作成果和重要信息。
4.5查询用户信息
命令 | 说明 |
id 用户名 | 查询用户信息 |
注意
- 当用户不存在时,返回无此用户。
4.6切换用户
命令 | 说明 |
su - 切换的用户名 | 从当前用户切换为指定的用户 |
exit/logout | 返回原来用户 |
注意
- 在Linux操作系统中,如果当前用户权限不够,可以切换到root用户。
- 权限高的用户切换到权限低的用户不需要密码,反之需要。
4.7查看当前(登录)用户
命令 | 说明 |
whoami/who am i | 查看当前(登录)用户 |
4.8用户组
4.8.1介绍
类似于角色,系统可以对有共性/权限的多个用户进行统一的管理。
4.8.2新增组
命令 | 说明 |
groupadd 组名 | 新增组 |
4.8.3删除组
命令 | 说明 |
groupdel 组名 | 删除组 |
4.8.4添加用户指定组、修改用户到指定组
命令 | 说明 |
useradd -g 用户组 用户名 | 添加用户到指定组 |
usermod -g 用户组 用户名 | 修改用户到指定组 |
注意
- 添加用户时,如若不指定组,则会创建一个与该用户同名的组,并把该用户添加到此组中。
- 既可以在添加时指定用户的所在组,也可以在添加完成后改变用户的所在组。
4.8.5改变用户登录的初始目录
命令 | 说明 |
usermod -d 用户登录的初始目录名 用户名 | 改变用户登录的初始目录名 (用户需要有权限进入此目录) |
4.9用户和组的相关文件
4.9.1/etc/passwd文件
- 用户(user)的配置文件,记录用户的各种信息。
- 每行的含义:
- 用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell
Shell俗称壳(用来区别于核),是指“为使用者提供操作界面”的软件(command interpreter,命令解析器)。它类似于DOS下的COMMAND.COM和后来的cmd.exe。它接收用户命令,然后调用相应的应用程序。
4.9.2/etc/group文件
- 组(group)的配置文件,记录组的相关信息。
- 每行含义:
- 组名:口令:组标识号:组内用户列表
4.9.3/etc/shadow文件
- 口令配置文件。
- 每行的含义:
- 登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
注意
- jack指定了加密口令,tom没有指定加密口令。
五、实用指令
5.1运行级别
5.1.1基本介绍
- 0:关机
- 1:单用户(找回丢失密码)
- 2:多用户状态没有网络服务
- 3:多用户状态有网络服务
- 4:系统未使用保留给用户
- 5:图形界面
- 6:系统重启
注意
- 常用系统级别是3和5,也可以切换运行级别和指定默认运行级别。
5.1.2切换运行级别
命令 | 举例 | 说明 |
init 运行级别 | init 3 | 将运行级别切换为3(多用户状态有网络服务) |
注意
- init 只能用来切换运行级别。下次开机后系统自动回到运行级别5。
5.1.3设置默认运行级别
命令 | 说明 |
systemctl get-default | 查看当前默认运行级别 |
systemctl set-default multi-user.target | 设置默认运行级别为3 |
systemctl set-default graphical.target | 设置默认运行级别为5 |
注意
- 此方式永久性的修改了默认运行级别。每次开机后系统都会运行该默认运行级别。
5.1.4开机流程说明
5.2帮助指令
命令 | 说明 |
man 命令或配置文件 | 获得命令或配置文件的帮助信息 |
help 命令 | 获得shell内置命令的帮助信息 |
当然,也可以直接百度搜索指令的用法。
5.3文件目录类
5.3.1pwd指令
命令 | 说明 |
pwd | 显示当前工作目录的绝对路径 |
5.3.2ls指令
命令 | 说明 |
ls 目录或文件 | 显示当前目录下所有的文件和目录(不包括隐藏的) |
ls -a 目录或文件 | 显示当前目录下所有的文件和目录(包括隐藏的) |
ls -l 目录或文件 或 ll 目录或文件 | 以列表的方式显示信息 |
ls -lh 目录或文件 | 以列表的方式人性化地显示信息 |
注意
- linux中隐藏文件是以.开头。
- linux选项可以组合使用。
5.3.3cd指令
相对路径和绝对路径
- 相对路径:在输入路径时,最前面不是/或者~,表示当前目录所在的目录位置。
- 绝对路径:在输入路径时,最前面是/或者~,表示从根目录/家目录开始的具体目录位置。
命令 | 含义 |
---|---|
cd | 切换到当前用户的家目录 |
cd ~ | 切换到当前用户的家目录 |
cd . | 保持当前目录不变 |
cd .. | 切换到上级目录 |
cd - | 可以在最近两次工作目录之间来回切换 |
5.3.4mkdir指令
mkdir指令用于创建目录。
命令 | 说明 |
mkdir 要创建的单级目录 | 创建单级目录 |
mkdir -p 要创建的多级目录 | 创建多级目录 |
案例
- 创建单级目录 mkdir /home/dog
- 创建多级目录 mkdir -p /home/animal/tiger
5.3.5rmdir指令
rmdir指令用于删除空目录。
命令 | 说明 |
rmdir 要删除的空目录 | 删除空目录 |
rm -rf 要删除的非空目录 | 删除非空目录 |
案例
- 删除空目录 rmdir /home/dog
- 删除非空目录 rm -rf /home/animal(animal目录下有tiger,所以animal是非空目录)
5.3.6touch指令
touch指令用于创建空文件。
命令 | 说明 |
touch 文件名称 | 创建一个空文件 |
5.3.7cp指令
cp指令用于拷贝文件到指定目录。
命令 | 说明 | 备注 |
cp source dest | 将source拷贝到dest | source表示源目录或源文件,dest表示目的目录或目的文件 |
cp -r source dest | 将source递归拷贝到dest | |
\cp source dest | 将source拷贝到dest(强制覆盖不提示) |
5.3.8rm指令
rm指令用于移除文件或目录。
命令 | 说明 |
rm 要删除的文件或目录 | 移除文件或目录 |
rm -r 要删除的目录 | 递归删除目录 |
rm -f 要删除的文件或目录 | 强制删除目录不提示 |
注意
- rmdir指令用于删除空目录,而rm指令用于移除文件或目录。
5.3.9mv指令
mv指令用于移动文件与目录或重命名。
命令 | 说明 |
mv oldFileName newFileName | 重命名(两者在同一目录下面) |
mv /temp/movefile /targetFolder | 移动文件 |
5.3.10cat指令
cat指令用来查看文件的内容。
命令 | 说明 |
cat 要查看的文件 | 查看文件的内容 |
cat -n 要查看的文件 | 查看文件的内容并显示行号 |
cat -n 要查看的文件 | more | 将cat查看的内容交给more指令来处理(为了浏览方便) |
注意
- cat指令只能浏览文件,而不能修改文件。
5.3.11more指令
more指令是一个基于VI编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件的内容。more 指令中内置了若干快捷键(交互的指令),详见操作说明:
命令 | 说明 |
more 要查看的文件 | 查看文件的内容(浏览更方便) |
5.3.12less指令
less 指令用来分屏查看文件内容,它的功能与more 指令类似,但是比 more 指令更加强大,支持各种显示终端。less指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示需要加载内容,对于显示大型文件具有较高的效率。
命令 | 说明 |
less 要查看的文件 | 查看文件的内容 |
操作说明
5.3.13echo指令
echo指令用来输出内容到控制台。
命令 | 说明 |
echo $PATH | 输出当前PATH环境变量 |
echo $HOSTNAME | 输出当前HOSTNAME环境变量(主机名) |
echo 'hello world' | 输出hello world |
5.3.14head指令
head指令用于查看文件开头的部分内容(默认情况下显示前10行)。
命令 | 说明 |
head 文件 | 查看文件开头的前10行内容 |
head -n 5 文件 | 查看文件开头的前5行内容 |
5.3.15tail指令
tail指令用于查看文件尾部的部分内容(默认情况下显示后10行)。
命令 | 说明 |
tail 文件 | 查看文件尾部的后10行内容 |
tail -n 5 文件 | 查看文件尾部的后5行内容 |
tail -f 文件 | 实时追踪该文档的所有更新 |
5.3.16>指令和>>指令
>指令用于输出重定向,>>指令用于追加。
命令 | 说明 | 备注 |
ls -l > 文件 | 列表的内容写入(覆盖)到文件 | 若被覆盖或者被追加的文件不存在,则系统会自动创建这个文件。 |
ls -l >> 文件 | 列表的内容追加到文件 | |
cat 文件1 > 文件2 | 文件1的内容覆盖到文件2 | |
echo 'hello' >> 文件 | hello追加到文件中 |
5.3.17ln 指令
软链接也称为符号链接,类似于windows里的快捷方式,主要存放了链接其他文件的路径。
命令 | 说明 |
ln -s 原文件或目录 软链接名 | 给原文件创建一个软链接(这样软链接就指向了原文件或目录) |
注意
- 当工作目录为软链接所在目录,使用pwd查看的目录仍然是软链接所在目录而不是原目录。
5.3.18history指令
history指令用于查看已经执行过的历史命令。
命令 | 说明 |
histrory | 查看已经执行过的历史命令 |
histrory n | 查看最近执行过的n条历史命令 |
!n | 执行历史编号为n的历史命令 |
5.4时间日期类
5.4.1date指令
date指令用于显示当前日期。
命令 | 说明 |
date | 显示当前时间 |
date +%Y | 显示当前年份 |
date +%m | 显示当前月份 |
date +%d | 显示当前是哪一天 |
date "+%Y-%m-%d %H:%M:%S" | 显示年月日时分秒 |
5.4.2设置日期
命令 | 说明 |
date -s 字符串时间 | 设置系统当前时间 |
5.4.3cal指令
cal指令用于显示日历。
命令 | 说明 |
cal | 显示本月日历 |
cal 年份 | 显示本年所有月日历 |
5.5搜索查找类
5.5.1find指令
find指令将从指定目录向下递归地遍历其各个子目录,将满足条件的文件或者目录显示在终端。
命名 | 说明 | 备注 |
find 指定目录 -name 要查找的文件或目录 | 按照指定目录查询文件或目录 | 文件大小: + 大于 - 小于 = 等于 |
find 指定目录 -user 用户名 | 按照指定目录查找指定用户名的所有文件或目录 | |
find 指定目录 -size 文件大小 | 按照指定目录查找满足文件大小的所有文件或目录 |
注意
- find指令也可以不指定目录进行查找。
5.5.2locate指令
- locate指令无需遍历整个文件系统,locate 指令利用事先建立的系统中所有文件名称及路径的locate数据库实现快速定位给定的文件路径。
- 为了保证查询结果的准确度,管理员必须定期更新locate时刻。
命令 | 说明 |
locate 要查找的文件或目录 | 快速查找文件或目录 |
注意
- 由于locate指令基于数据库进行查询,所以第一次运行前,必须使用updatedb指令创建locatc数据库。
5.5.3which指令
which指令用于查找指令的存放路径。
命令 | 说明 |
which 要查找的指令 | 查找指令的存放路径 |
5.5.4管道符“|”和grep指令
管道符“|”表示将前一个命令的处理结果输出传递给后面的命令处理。
grep指令用于过滤查找,可配合管道符“|”使用。
命令 | 说明 |
grep 查找内容 源文件 | 将源文件中的查找内容输出 |
grep -n 查找内容 源文件 | 将源文件中的查找内容输出,并显示行号 |
grep -i 查找内容 源文件 | 将源文件中的查找内容输出(不区分大小写) |
案例
请在 hello.txt文件中,查找"yes"所在行,并且显示行号。
- 法一:cat hello.txt | grep -n "yes"
- 法二:grep -n "yes" hello.txt
5.6压缩和解压类
5.6.1gzip/gunzip指令
gzip用于压缩文件,gunzip用于解压文件。
命令 | 说明 |
gzip 文件 | 压缩文件(只能将文件压缩为*.gz文件) |
gunzip 文件.gz | 解压缩文件 |
5.6.2zip/unzip指令
zip用于压缩文件,unzip用于解压文件。(在项目打包发布中很有用)
命令 | 说明 |
zip XXX.zip 要压缩的文件 | 压缩文件 |
zip -r XXX.zip 要压缩的目录 | 压缩目录(递归压缩) |
unzip XXX.zip | 将压缩包解压到当前目录下 |
unzip -d 目标目录 XXX.zip | 将压缩包解压到指定目录下 |
5.6.3tar指令
- tar指令用于打包、打包压缩、解包、解包解压缩文件。
- 在tar命令中有一个选项-z可以调用gzip,从而可以方便的实现压缩和解压缩的功能。
选项 | 说明 |
-z | 压缩/解压缩 |
-c | 产生tar打包文件 |
-v | 显示详细信息 |
-f | 指定压缩后的文件名 |
-x | 解包.tar文件 |
-C | 解压缩到指定目录(解压缩的目录必须存在) |
命令 | 说明 |
tar -zcvf 打包文件.tar.gz 被打包的文件 | 打包压缩文件 |
tar -zxvf 打包文件.tar.gz | 解包解压缩文件至当前目录下 |
tar -zxvf 打包文件.tar.gz -C 目标目录 | 解包解压缩文件至当前指定目录下 |
六、组管理和权限管理
6.1Linux组基本介绍
在linux中的每个用户必须属于一个组,且可以改变每个用户所在的组。
在linux中的每个文件拥有以下概念:
- 所有者
- 所在组
- 其它组
6.2文件/目录所有者
一般为文件/目录的创建者,即谁创建文件/目录,谁就是该文件/目录的所有者。
6.2.1查看文件/目录的所有者
ls -alh
6.2.2修改文件/目录的所有者
命令 | 说明 |
chown 所有者 文件/目录 | 修改文件/目录的所有者 |
chown -R 所有者 目录 | 递归修改目录及目录内容的所有者 |
chown 所有者:所在组 文件/目录 | 修改文件/目录的所有者和所在组 |
6.3文件/目录所在组
当某个用户创建了一个文件后,这个文件的所在组就是该用户所在的组(默认)。
6.3.1查看文件/目录的所在组
ls -alh
6.3.2修改文件/目录的所在组
命令 | 说明 |
chgrp 所在组 文件/目录 | 修改文件/目录的所在组 |
chgrp -R 所在组 目录 | 递归修改目录及目录内容的所在组 |
6.4其它组
除文件的所有者和所在组的用户外,系统的其它用户都属于文件的其它组。
6.5权限管理
6.5.1基本介绍
0-9位说明
- 第0位确定文件类型(-、l、d、c、b)
- -表示普通文件
- l是链接,相当于windows的快捷方式
- d是目录,相当于windows的文件夹
- c是字符设备文件,例如鼠标,键盘
- b是块设备,例如硬盘
- 第1-3位确定该文件所有者拥有的权限。
- 第4-6位确定与该文件所有者同一组的用户拥有的权限。
- 第7-9位确定不与该文件所有者同一组的其他用户拥有的权限。
6.5.2rwx作用到文件
- r表示可读(read):可以查看文件中的内容
- w表示可写(write):可以修改文件中的内容,但是不一定可以删除该文件(因为删除一个文件的前提是对该文件所在目录有写权限,才能删除该文件)
- x表示可执行(execute):可以执行该文件
6.5.3rwx作用到目录
r表示可读(read):可以查看目录中的内容(ls查看)
w表示可写(write):可以创建、删除目录中的内容,重命名目录
x表示可执行(execute):可以进入该目录(cd进入)
6.5.4ls -l扩展
ls -l可显示目录下文件的详细信息,从左往右依次是:
- 文件类型
- 权限
- 硬链接数(对于文件来说)或子目录数(对于目录来说,包括隐藏目录)
- 用户
- 组
- 文件/文件夹大小(字节)
- 最后修改日期
- 文件名
6.5.5chmod
chmod指令用于修改文件或者目录的权限。
+、-、=变更权限
命令 | 说明 | 备注 |
chmod u=rwx,g=rx,o=x 文件/目录 | 给文件/目录的所有者读写执行的权限,所在组读执行的权限,其它组执行的权限 | u:所有者 g:所在组 o:其它组 a:所有人 =:赋予 +:增加 -:除去 |
chmod o+x 文件/目录 | 给文件/目录的其它组增加执行的权限 | |
chmod a-x 文件/目录 | 给文件/目录的所有人除去执行的权限 |
数字变更权限
命令 | 说明 | 备注 |
chmod 751 文件/目录 | 给文件/目录的所有者读写执行的权限,所在组读执行的权限,其它组执行的权限 | r=4 w=2 x=1 |
七、定时任务调度
7.1crond任务调度
7.1.1概述
- 任务调度:系统在某个时间执行的特定的命令或程序。
- 任务调度分类:
- 系统工作:有些重要的工作必须周而复始的执行(如病毒扫描)。
- 个别用户工作:个别用户可能希望执行某些程序(如mysql数据库的备份)。
7.1.2crontab指令
crontab指令进行定时任务的设置。
命令 | 说明 |
crontab -e | 编辑crontab定时任务 |
crontab -l | 查询crontab定时任务 |
crontab -r | 删除当前用户所有的crontab任务 |
service crond restart | 重启任务调度 |
注意
- 设置任务调度的文件crontab存放在/etc目录下。
案例
- 输入crontab -e命令,输入i,进入任务调度编辑模式。
- 输入个人任务:
- 如:*/1 * * * * ls -l /etc/ > /tmp/to.txt(意思是每隔1分钟执行ls -l /etc/ > /tmp/to.txt命令)
7.1.3占位符和特殊符号
5个占位符的说明
项目 | 含义 | 范围 |
第一个 "*" | 每小时当中的第几分钟 | 0-59 |
第二个 "*" | 每天当中的第几个小时 | 0-23 |
第三个 "*" | 每月当中的第几天 | 1-31 |
第四个 "*" | 每年当中的第几月 | 1-12 |
第五个 "*" | 每周当中的星期几 | 0-7(0和7都代表星期日) |
口诀:一二三四五,分时天月星。
特殊符号的说明
特殊符号 | 含义 |
* | 代表任何时间 |
, | 代表不连续的时间 |
- | 代表连续的时间范围 |
*/n | 代表每隔多久执行一次 |
特殊时间执行案例
时间 | 含义 |
45 22 * * * | 22点45分执行命令 |
0 17 * * 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号,每周一的0点0分执行命令。 (注意:几号和星期几定义的都是天,最好不要同时出现,容易让管理员混乱。) |
7.1.4应用实例
案例1:每隔1分钟,将当前日期和日历都追加到/home/mycal文件中
- 法一:分别将当前日期和日历追加到/home/mycal文件中(相当于分开写两条定时任务)
- 法二:
- vim /home/my.sh shell脚本写入date >> /home/mycal和cal >> /home/mycal内容
- 给my.sh增加root用户的执行权限 chmod u+x /home/my.sh
- 在任务调度中增加执行脚本的命令 crontab -e 增加*/1 * * * * /home/my.sh内容
案例2:每天凌晨2:00将mysql数据库testdb ,备份到文件中。
- 在任务调度中增加备份数据库的命令 :
- crontab -e
- 增加mysqldump -u root -p123456 testdb > /home/db.bak内容
bak是一个备份文件,为文件格式扩展名。这类文件一般在.bak前面加上应该有原来的扩展名比如windows.dll.bak,或是windows_dll.bak,有的则是由原文件的后缀名和bak混合而成。
7.2at定时任务
7.2.1基本介绍
- at命令是一次性定时计划任务,执行完一个任务后不再执行此任务了。
- at的守护进程 atd会以后台模式运行,检查是否有作业队列运行。默认情况下,atd守护进程每60秒检查作业队列,有作业时,会检查作业运行时间,如果时间与当前时间匹配,则运行此作业。
- 在使用at命令的时候,一定要保证atd进程的启动,可以使用相关指令来查看:
- ps -ef l grep atd //可以检测atd是否在运行
7.2.2at命令
语法 | 选项 | 说明 |
at [选项] [时间] Ctrl + D 结束at指令的输入(需输入两次) | -m | 当指定的任务被完成后,将给用户发送邮件,即使没有标准输出 |
-I | atq的别名 | |
-d | atrm的别名 | |
-v | 显示任务被执行的时间 | |
-c | 打印任务的内容到标准输出 | |
-V | 显示版本信息 | |
-q <队列> | 使用指定的队列 | |
-f <文件> | 从指定文件读入任务而不是从标准输入读入 | |
-t <时间参数> | 以时间参数的形式提交要运行的任务 |
7.2.3at时间定义
at指定时间的方法 | 说明 | 备注 | 举例 |
hh:mm | 当天的某时某分 | 如果该时间已经过去,那么就放到第二天执行 | 04:00 |
midnight noon teatime | 深夜 中午 饮茶时间(一般是下午4点) | 模糊词语指定时间 | |
AM PM | 上午 下午 | 采用12小时计时制,AM或PM不区分大小写 | 12 pm |
month day mm/dd/yy dd.mm.yy | 月 日 月/日/年 日.月.年 | 指定的日期必须放在时间的后面 | 04:00 2022-07-21 |
now + count time-units | 当前时间+时间的数量 时间单位 | 时间单位: minutes hours days weeks | now + 5 minutes |
today tomorrow | 今天 明天 |
7.2.4atq命令和atrm命令
命令 | 说明 |
atq | 查看系统中没有执行的工作任务 |
atrm 编号n | 删除job队列中,编号为n的job |
7.2.5应用实例
案例1:2天后的下午5点执行/bin/ls /home
案例2: atq命令来查看系统中没有执行的工作任务
案例3:明天17点钟,输出时间到指定文件内比如/root/date100.log
案例4:2分钟后,输出时间到指定文件内比如/root/date200.log
案例5:删除已经设置的任务, atrm编号
八、Linux磁盘分区、挂载
8.1Linux分区
8.1.1基本介绍
- Linux中每个分区都是用来组成整个文件系统的一部分。
- Linux的文件结构是独立且唯一的,无论有几个分区,分给哪一目录使用,归根结底就只有一个根目录。
- Linux采用了一种“载入”的处理方法,它的整个文件系统中包含了一整套的文件和目录,且将一个分区和一个目录联系起来。访问目录就相当于访问与之对应的分区。
8.1.2硬盘说明
Linux硬盘分为IDE硬盘和SCSI硬盘,目前基本上是SCSI硬盘。
硬盘名称 | 驱动器标识符 | 标识符前两位含义 | 标识符后两位含义 |
IDE硬盘 | hdx~ | 标识符前两位表示分区所在设备的类型 hd是指分区在IDE硬盘中, sd是指分区在SCSI硬盘中 | x表示盘号:
~表示分区:
|
SCSI硬盘 | sdx~ | ||
举例说明
|
8.1.3查看所有设备挂载情况
lsblk -f:
8.2挂载的经典案例
1.虚拟机添加硬盘
- 虚拟机菜单->设置->硬盘->添加->下一步...->磁盘大小1GB
- 重启虚拟机系统
2.分区
- 开始对/sdb分区
- 常用命令
命令 | 说明 |
m | 显示命令列表 |
p | 显示磁盘分区(同fdisk -l) |
n | 新增分区 |
d | 删除分区 |
w | 写入并退出 |
3.格式化
4.挂载
命令 | 说明 |
mount 设备名称 挂载目录 | 将一个分区和一个目录联系起来 |
附:卸载
命令 | 说明 |
umount 设备名称 挂载目录 | 将一个分区和一个目录断开联系 |
注意
- 用命令行挂载,重启后挂载自动失效。
5.也可以设置永久挂载
- vim /etc/fstab,添加挂载项目
注意
最后两个0分别表示:不做dump备份,不检查硬盘扇区
- 添加完成后,执行mount -a即可生效
8.3磁盘查询情况
8.3.1查询系统整体磁盘使用情况
命令 | 说明 |
df -h | 查询系统整体磁盘使用情况 |
8.3.2查询指定目录的磁盘占用情况
语法 | 选项 | 说明 |
du [选项] [要查询的目录] | -s | 指定目录占用大小汇总 |
-h | 带计量单位 | |
-a | 含文件 | |
--max-depth | 子目录深度 | |
-c | 列出明细的同时,增加汇总值 |
案例
- 查询/opt目录的磁盘占用情况,子目录深度为1
注意
- 若查询时不指定目录,则默认为当前目录。
- 若查询时使用-s选项,则不能同时使用-a,--max-depth选项。
8.4磁盘情况
命令 | 说明 | 备注 |
ls -l /opt | grep "^-" | wc -l | 统计/opt文件夹下文件的个数 | "^-"、"^d"为正则表达式,筛选第一个字符为'-'、'd'的行。 wc -l用来统计行数。 centos系统默认没有tree命令,使用 yum install tree安装。 |
ls -l /opt | grep "^d" | wc -l | 统计/opt文件夹下目录的个数 | |
ls -lR /opt | grep "^-" | wc -l | 统计/opt文件夹下文件的个数 (包括子文件夹里的) | |
ls -lR /opt | grep "^d" | wc -l | 统计/opt文件夹下目录的个数 (包括子文件夹里的) | |
tree | 以树状形式显示目录结构 |
九、网络配置
9.1原理图
NAT模式(VMnet8)可以实现虚拟机之间、虚拟机和主机之间以及虚拟机和外部的网络通信。
9.2Linux网络环境配置
9.2.1通过界面来分配IP
通过界面既可以分配静态IP,也可分配动态IP。这里以分配动态IP为例:
分配动态IP优缺点:
- 优点:Linux系统启动后会自动获取IP,而且可以防止IP冲突。
- 缺点:每次自动获取的IP可能不一样。
9.2.2通过修改配置文件来分配IP
1.linux终端输入:vim /etc/sysconfig/network-scripts/ifcfg-ens33
2.编辑内容,并保存退出:
3.重启网络服务或者重启系统即可生效:
service network restart 或 reboot
4.打开虚拟网络编辑器,修改子网、子网掩码、网关(根据之前的配置文件来修改):
5.点击“应用”、然后点击“确定”
分配静态IP优缺点与分配动态IP优缺点相反。
9.3设置主机名和hosts映射
9.3.1设置主机名
为了方便记忆,可以给linux系统设置主机名,也可以根据需要修改主机名。
命令 | 说明 |
hostname | 查看主机名 |
修改主机名三步走:
- vim /etc/hostname打开修改主机名的文件
- 在该文件修改主机名,并保存退出。
- 重启系统即可生效。
9.3.2设置hosts映射
hosts是什么(类似于DNS)
- 一个文本文件,用来记录ip和hostname的映射关系。
在windows系统中设置linux的hosts映射
- 打开hosts文件(C:Windows\System32\drivers\etc\hosts)
- 添加users对hosts文件的修改权限:
3.添加映射记录(例如:192.168.166.27 hjh123)
4.在windows ping hjh123测试一下
在linux系统中设置windows的hosts映射
- root用户登录linux系统
- vim /etc/hosts打开文件
- 添加映射记录(例如:192.168.123.45 sdx123)
- 在linux ping sdx123测试一下
9.4域名解析
浏览器访问百度,需要进行域名解析:
- 浏览器先检查缓存中是否域名解析记录。
- 若没有,则域名解析请求会发给到本地域名服务器。本地域名服务器收到解析请求后,会查询本地的缓存。
- 若没有,主机会检查hosts文件中是否有映射记录。
- 若没有,本地域名服务器会向根域名服务器发起域名请求
......
命令 | 说明 |
ipconfig /displaydns | 查看DNS域名解析缓存 |
ipconfig /flushdns | 手动清理DNS域名解析缓存 |
注意
- 此两条命令只能在windows cmd窗口中输入。
十、进程管理
10.1基本介绍
- 在linux中,每个执行的程序(加载到内存中执行)都称为一个进程。每一个进程都分配一个ID号(或PID或进程号)。
- 每个进程都可能以两种方式存在,即前台与后台。
- 前台进程就是用户目前的屏幕上可以进行操作的。
- 后台进程则是实际在操作,但是由于屏幕上无法看到的进程,通常使用后台方式执行。
- 一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中。直到关机才结束。
查看进程(以我的电脑为例)
- 任务管理器->详细信息
10.2ps指令
ps指令用来查看目前系统中,有哪些进程正在执行以及它们执行的状况。
10.2.1查看系统执行的进程(非全格式)
命令 | 说明 | 备注 |
ps | 显示系统执行的进程 | 实际运用中,常三个选项组合使用: ps -aux 还可以添加管道符号查看: ps -aux | more ps -aux | grep xxx |
ps -a | 显示当前终端的所有进程信息 | |
ps -u | 以用户的格式显示进程信息 | |
ps -x | 显示后台进程运行的参数 |
案例1:查看目前系统中sshd进程
ps -aux | grep sshd
列名 | 说明 |
USER | 用户名称 |
PID | 进程号 |
%CPU | 进程占用CPU的百分比 |
%MEM | 进程占用物理内存的百分比 |
VSZ | 进程占用的虚拟内存大小(单位:KB) |
RSS | 进程占用的物理内存大小(单位:KB) |
TTY | 终端名称(缩写) |
STAT | 进程状态,其中: S表示睡眠,s表示该进程是会话的先导进程, N表示进程拥有比普通优先级更低的优先级, R表示正在运行,D表示短期等待, Z表示僵死进程,T表示被跟踪或被停止 |
STARTED | 进程的启动时间 |
TIME | CPU时间(即进程使用CPU的总时间) |
COMMAND | 启动进程所用的命令和参数,如果时间过长会被截断显示 |
10.2.2查看系统执行的进程(全格式)
命令 | 说明 | 备注 |
ps -e | 显示所有进程 | 实际运用中,常两个选项组合使用: ps -ef 还可以添加管道符号查看: ps -ef | more ps -ef | grep xxx |
ps -f | 全格式显示进程 |
案例2:以全格式查看目前系统中sshd进程
ps -ef | grep sshd
列名 | 说明 |
UID | 用户ID |
PID | 进程号 |
PPID | 父进程ID |
C | CPU用于计算执行优先级的因子。 数值越大,表明进程是CPU密集型运算,执行优先级会降低;数值越小,表明进程是I/O密集型运算,执行优先级会提高 |
STIME | 进程启动的时间 |
TTY | 完整的进程名称 |
TIME | CPU时间 |
CMD | 启动进程所用的命令和参数 |
10.3kill指令
若是某个进程执行一半需要停止或已经消耗很大的系统资源时,可以考虑用kill指令终止该进程。
命令 | 说明 |
kill 进程号 | 通过进程号终止进程 |
kill -9 进程号 | 通过进程号强制终止进程 |
killall 进程名称 | 通过进程名杀死进程及其子进程 (支持通配符,这在系统因负载过大而变得很慢时很有用) |
案例1:终止某个非法用户的远程登录
- ps -aux | grep sshd
- kill 用户远程登录的进程号
案例2:终止远程登录服务sshd,在适当时候再次重启sshd服务
- ps -aux | grep sshd
- kill sshd服务的进程号
- /bin/systemctl start sshd.service 或systemctl start sshd
案例3:终止多个gedit
- killall gedit
案例4:强制终止一个终端
- ps -aux | grep bash
- kill -9 bash的进程号
10.4pstree指令
pstree指令用于以树状的形式查看进程信息。
命令 | 说明 | 备注 |
pstree | 以树状的形式查看进程信息 | 实际运用中,常两个选项组合使用: pstree -up |
pstree -u | 以树状的形式查看进程信息(包括进程的所属用户) | |
pstree -p | 以树状的形式查看进程信息(包括进程号PID) |
10.5服务管理
服务(service)本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其它程序的请求(比如mysqld,sshd,防火墙等)。因此服务也被称为守护进程。
10.5.1查看服务名
方式一
- setup
方式二
- service指令管理的服务在/etc/init.d中查看
- ls -l /etc/init.d
- systemctl指令管理的服务在/usr/lib/systemd/system中查看
- ls -l /usr/lib/systemd/system
10.5.2service指令
- service指令用于管理服务。
- 在centos7.0后,很多服务不再使用service指令管理,而是systemctl。
- service指令管理的服务在/etc/init.d中查看。
命令 | 说明 | 案例 |
service 服务名 start | 启动服务 | service network status service network stop service network start |
service 服务名 stop | 关闭服务 | |
service 服务名 restart | 重启服务 | |
service 服务名 reload | 重载服务 | |
service 服务名 status | 显示服务状态 |
10.5.3chkconfig指令
- 服务的启动/关闭是针对每个运行级别而言的。
- chkconfig指令用于给服务的各个运行级别设置自启动/关闭。
- chkconfig指令管理的服务和service指令管理的服务相同,在/etc/init.d中查看。
命令 | 说明 |
chkconfig --list [| grep 服务名] | 查看服务 |
chkconfig 服务名 --list | 查看服务 |
chkconfig --level 5 服务名 on/off | 把某个服务在5运行级别上自启动/关闭 |
注意
- chkconfig指令给服务的各个运行级别设置自启动/关闭后,需要重启系统才能生效。
10.5.4systemctl指令
- systemctl指令用于管理服务。
- 在centos7.0后,很多服务不再使用service指令管理,而是systemctl。
- systemctl指令管理的服务在/usr/lib/systemd/system中查看。
命令 | 说明 |
systemctl start 服务名 | 启动服务 |
systemctl stop 服务名 | 关闭服务 |
systemctl restart 服务名 | 重启服务 |
systemctl status 服务名 | 显示服务状态 |
systemctl list-unit-files [| grep 服务名] | 查看服务开机启动状态 |
systemctl enable 服务名 | 设置服务开机启动(针对3、5运行级别) |
systemctl disable 服务名 | 关闭服务开机启动(针对3、5运行级别) |
systemctl is-enabled 服务名 | 查询某个服务是否是自启动的 |
注意
如果希望设置某个服务自启动或关闭永久生效,使用systemctl enable/disable 服务名,否则当重启系统后,还是会回到以前对服务的设置。
10.5.5打开或者关闭指定端口
在真正的生产环境,往往需要将防火墙(firewall,其服务名称为firewalld)打开。但是如果把防火墙打开,那么外部请求数据包就不能跟服务器监听端口通信。这时,需要打开指定的端口(如80、22、8080等)。
命令 | 说明 | 备注 |
firewall-cmd --permanent --add-port=端口号/协议 | 打开端口 | netstat -anp查看结果中可以看到端口号对应的协议 |
firewall-cmd --permanent --remove-port=端口号/协议 | 关闭端口 | |
firewall-cmd --reload | 重新载入,才能生效 | |
firewall-cmd --query-port=端口号/协议 | 查询端口是否开放 |
案例
1.测试111端口是否能telnet。
2.防火墙中打开111端口。
3.再次测试111端口是否能telnet。
成功!
4.防火墙中关闭111端口。
10.6动态监控进程
top与ps命令相似。它们都用来显示正在执行的进程。top与ps最大的不同之处在于,top在执行一段时间后可以更新正在运行的进程。
命令 | 说明 | 备注 |
top | 动态显示进程信息(默认更新时间为3秒) | 僵死进程就是指已停止运行但还占用内存的进程 |
top -d 秒数s | 动态显示进程信息(更新时间为s秒) | |
top -i | 动态显示进程信息(不显示任何闲置或者僵死进程) | |
top -p 进程号 | 通过指定监控进程ID来仅仅监控某个进程的状态 |
交互操作
操作 | 说明 |
P | 以CPU使用率排序(默认就是此项) |
M | 以内存占用率排序 |
N | 以PID排序 |
u | 监视指定用户的进程信息 |
k | 根据进程号终止指定的进程(signal指定为9) |
q | 退出top |
10.7监控网络状态
netstat指令用于查看系统网络状况,检验各端口的网络连接情况。
命令 | 说明 |
netstat -an | 按一定顺序显示系统网络状况 |
netstat -p | 显示系统网络状况(包括进程号和进程名) |
案例:请查看服务名为sshd的服务信息
十一、RPM与YUM
11.1rpm包的管理
- rpm用于互联网下载包的打包及安装工具,它包含在某些Linux发行版中。它生成具有.RPM扩展名的文件。RPM是RedHat Package Manager (RedHat软件包管理工具)的缩写,类似 windows 的setup.exe,这一文件格式名称虽然打上了RedHat的标志,但理念是通用的。
- Linux的发行版本都有采用(suse,redhat, centos等等),可以算是公认的行业标准了。
11.1.1rpm包的查询指令
命令 | 说明 |
rpm -qa | more | 查询当前系统中安装的所有rpm软件包 |
rpm -qa | grep xxx | 查询当前系统中是否安装了xxx软件包 |
rpm -q xxx | 查询当前系统中是否安装了xxx软件包 |
rpm -qi xxx | 查询xxx软件包信息 |
rpm -ql xxx | 查询xxx软件包中的文件 |
rpm -qf 文件全路径名 | 查询文件所属的软件包 |
11.1.2rpm包名的基本格式
11.1.3卸载与安装rpm包
命令 | 说明 | 备注 |
rpm -e rpm包名 | 删除rpm包 | -e表示erase(卸载) -i表示install(安装) -v表示verbose(提示) -h表示hash(进度条) |
rpm -ivh rpm包的全路径名称 | 安装rpm包 |
案例:卸载和安装firefox浏览器
- rpm -e firefox
- rpm -ivh /opt/firefox-60.2.2-1.el7.centos.x86_64.rpm
注意
- 如果其它软件包依赖于要卸载的软件包,则卸载时会产生错误信息。如果想要强制卸载被依赖的软件包,可以加上参数--nodeps,但是可能导致其它软件包无法运行。
11.2yum
yum是一个Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包。
命令 | 说明 |
yum list | grep xxx | 查询yum服务器中是否有需要安装的xxx软件包 (若有,则返回软件包名) |
yum install xxx | 下载安装xxx软件包 |
案例:使用yum的方式安装firefox
- rpm -e firefox
- yum list | grep firefox
- yum install firefox